tsurumure 2 місяців тому
батько
коміт
b6cf337601

+ 2 - 1
db/sys_user_role_permission.sql

@@ -50,7 +50,8 @@ INSERT INTO sys_user_role_permission(id, parent_id, permission_name, sort) VALUE
         ('36.2', '36', 'AI短剧创作-分镜管理', null),
             ('36.2.1', '36.2', 'AI短剧创作-分镜列表', null),
             ('36.2.2', '36.2', 'AI短剧创作-创建分镜', null),
-            ('36.2.3', '36.2', 'AI短剧创作-编辑生图/生视频配置', null),
+            ('36.2.3', '36.2', 'AI短剧创作-编辑项目生图/生视频配置 (全权限)', null),
+                ('36.2.3.1', '36.2.3', 'AI短剧创作-编辑项目生图/生视频配置 (自己)', null),
             ('36.2.4', '36.2', 'AI短剧创作-编辑分镜 (全权限)', null),
                 ('36.2.4.1', '36.2.4', 'AI短剧创作-编辑分镜 (自己)', null),
 

+ 3 - 2
db/sys_user_role_permission_relation.sql

@@ -110,8 +110,9 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
         (1, '36.2'),
             (1, '36.2.1'),
             (1, '36.2.2'),
-            (1, '36.2.3'),
-            (1, '36.2.4'), (1, '36.2.4.1'),
+            (1, '36.2.3'), (1, '36.2.3.1'),
+#             (1, '36.2.4'), (1, '36.2.4.1'),
+            (1, '36.2.4.1'),
 
 
     (1, '100'),

+ 22 - 0
src/main/java/com/backendsys/modules/common/interceptor/TimezoneInterceptor.java

@@ -0,0 +1,22 @@
+//package com.backendsys.modules.common.interceptor;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.servlet.HandlerInterceptor;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.util.Optional;
+//
+//@Component
+//public class TimezoneInterceptor implements HandlerInterceptor {
+//
+//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+//        // 获取 headers 中的 timezone 参数
+//        String timezone = request.getHeader("timezone");
+//        // 如果没有传递 timezone,则默认使用 Asia/Shanghai
+//        String finalTimezone = Optional.ofNullable(timezone).orElse("Asia/Shanghai");
+//        // 将 timezone 存储在请求上下文中
+//        request.setAttribute("timezone", finalTimezone);
+//        return true;
+//    }
+//
+//}

+ 2 - 6
src/main/java/com/backendsys/modules/crt/controller/CrtDramaProjectStoryboardController.java

@@ -38,21 +38,17 @@ public class CrtDramaProjectStoryboardController {
         return Result.success().put("data", crtDramaProjectStoryboardService.createStoryboard(crtDramaProject));
     }
 
-    @Operation(summary = "编辑生图/生视频配置")
-    @PreAuthorize("@sr.hasPermission('36.2.3')")
+    @Operation(summary = "编辑项目生图/生视频配置")
     @PutMapping("/api/crt/drama/updateStoryboardSettings")
     public Result updateStoryboardSettings(@Validated(CrtDramaProjectSettings.UpdateSettings.class) @RequestBody CrtDramaProjectSettings crtDramaProjectSettings) {
         return Result.success().put("data", crtDramaProjectStoryboardService.updateStoryboardSettings(crtDramaProjectSettings));
     }
 
     @Operation(summary = "编辑分镜")
-//    @PreAuthorize("@sr.hasPermission('36.2.4')")
-    @PostMapping("/api/crt/drama/updateStoryboard")
+    @PutMapping("/api/crt/drama/updateStoryboard")
     public Result updateStoryboard(@Validated(CrtDramaProjectStoryboard.Update.class) @RequestBody CrtDramaProjectStoryboard crtDramaProjectStoryboard) {
         crtDramaProjectStoryboard.setUser_id(SecurityUtil.getUserId());
         return Result.success().put("data", crtDramaProjectStoryboardService.updateStoryboard(crtDramaProjectStoryboard));
     }
 
-
-
 }

+ 5 - 1
src/main/java/com/backendsys/modules/crt/entity/CrtDramaProjectStoryboard.java

@@ -1,6 +1,7 @@
 package com.backendsys.modules.crt.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import jakarta.validation.constraints.NotNull;
@@ -17,9 +18,12 @@ public class CrtDramaProjectStoryboard {
     public static interface Delete{}
 
     @TableId(type = IdType.AUTO)
-    @NotNull(message = "分镜ID不能为空", groups = { Update.class })
     private Long id;
 
+    @TableField(exist = false)
+    @NotNull(message = "分镜ID不能为空", groups = { Update.class })
+    private Long drama_project_storyboard_id;
+
     private Long user_id;
 
     @NotNull(message = "项目ID不能为空", groups = { StoryboardDetail.class })

+ 1 - 1
src/main/java/com/backendsys/modules/crt/service/CrtDramaProjectStoryboardService.java

@@ -16,7 +16,7 @@ public interface CrtDramaProjectStoryboardService {
     // 创建分镜
     Map<String, Object> createStoryboard(CrtDramaProject crtDramaProject);
 
-    // 编辑生图/生视频配置
+    // 编辑项目生图/生视频配置
     Map<String, Object> updateStoryboardSettings(CrtDramaProjectSettings crtDramaProjectSettings);
 
     // 编辑分镜

+ 26 - 9
src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectStoryboardServiceImpl.java

@@ -1,6 +1,8 @@
 package com.backendsys.modules.crt.service.impl;
 
 import com.backendsys.exception.CustException;
+import com.backendsys.modules.common.config.security.enums.SecurityEnum;
+import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.crt.dao.CrtDramaProjectDao;
 import com.backendsys.modules.crt.dao.CrtDramaProjectSettingsDao;
 import com.backendsys.modules.crt.dao.CrtDramaProjectStoryboardDao;
@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStoryboardService {
@@ -24,6 +27,8 @@ public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStor
     @Autowired
     private CrtUtil crtUtil;
     @Autowired
+    private SecurityUtil securityUtil;
+    @Autowired
     private CrtDramaProjectDao crtDramaProjectDao;
     @Autowired
     private CrtDramaProjectSettingsDao crtDramaProjectSettingsDao;
@@ -57,6 +62,12 @@ public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStor
         StoryboardResponse storyboardResponse = new StoryboardResponse();
         storyboardResponse.setDrama_project_id(project_id);
         storyboardResponse.setProject_name(crtDramaProject.getProject_name());
+
+        // 字段格式化
+        storyboardList = storyboardList.stream().map(storyboard -> {
+            storyboard.setDrama_project_storyboard_id(storyboard.getId());
+            return storyboard;
+        }).collect(Collectors.toList());
         storyboardResponse.setStoryboard_list(storyboardList);
 
         if (settingsList.size() > 0) {
@@ -102,22 +113,18 @@ public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStor
         entity.setSort(sort);
         crtDramaProjectStoryboardDao.insert(entity);
 
-        Map<String, Object> resp = new LinkedHashMap<>();
-        resp.put("drama_project_id", drama_project_id);
-        resp.put("drama_project_storyboard_id", entity.getId());
-        resp.put("drama_project_storyboard_episode_num", episode_num);
-        return resp;
+        return Map.of("id", entity.getId());
     }
 
 
     /**
-     * 编辑生图/生视频配置
+     * 编辑项目生图/生视频配置
      */
     @Override
     public Map<String, Object> updateStoryboardSettings(CrtDramaProjectSettings crtDramaProjectSettings) {
 
-        // 判断项目是否存在,并且是否具备操作权限
-        crtUtil.checkProject(crtDramaProjectSettings.getDrama_project_id(), "36.1.5");
+        // 判断项目是否存在,并且是否具备操作权限(全权限)
+        crtUtil.checkProject(crtDramaProjectSettings.getDrama_project_id(), "36.2.3");
 
         // 项目配置类型 (1: 生图配置, 2: 生视频配置)
         Integer setting_type = crtDramaProjectSettings.getDrama_project_setting_type();
@@ -149,9 +156,19 @@ public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStor
     @Override
     public Map<String, Object> updateStoryboard(CrtDramaProjectStoryboard crtDramaProjectStoryboard) {
 
+        // 判断分镜是否存在
+        Long drama_project_storyboard_id = crtDramaProjectStoryboard.getDrama_project_storyboard_id();
+        CrtDramaProjectStoryboard storyboardDetail = crtDramaProjectStoryboardDao.selectById(drama_project_storyboard_id);
+        if (storyboardDetail == null) throw new CustException("分镜不存在");
+
+        // 判断用户是否具备操作权限(全权限)
+        crtUtil.checkByUser(crtDramaProjectStoryboard.getUser_id(), "36.2.4");
+
+
+        // 权限还没好
 
 
-        return Map.of("id", crtDramaProjectStoryboard.getId());
+        return Map.of("drama_project_storyboard_id", drama_project_storyboard_id);
     }
 
 }

+ 10 - 1
src/main/java/com/backendsys/modules/crt/utils/CrtUtil.java

@@ -17,7 +17,7 @@ public class CrtUtil {
     private CrtDramaProjectDao crtDramaProjectDao;
 
     /**
-     * 判断项目是否存在,并且是否具备操作权限
+     * 判断项目是否存在,并且是否具备操作权限 (不是拥有者,又不具备[全权限],则不允许操作)
      */
     public void checkProject(Long project_id, String permission) {
         CrtDramaProject detail = crtDramaProjectDao.selectById(project_id);
@@ -27,4 +27,13 @@ public class CrtUtil {
         }
     }
 
+    /**
+     * 判断用户是否具备操作权限 (不是拥有者,又不具备[全权限],则不允许操作)
+     */
+    public void checkByUser(Long user_id, String permission) {
+        if (user_id != SecurityUtil.getUserId() && !securityUtil.hasPermission(permission)) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+    }
+
 }

+ 2 - 1
src/main/resources/application-dev.yml

@@ -31,11 +31,12 @@ spring:
     name: application-dev
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
+    # serverTimezone=Asia/Shanghai&
     url: jdbc:mysql://172.19.0.7:3306/backendsys?useUnicode=true&
       characterEncoding=UTF-8&
       useJDBCCompliantTimezoneShift=true&
       useLegacyDatetimeCode=false&
-      serverTimezone=Asia/Shanghai&
+      serverTimezone=UTC&
       allowMultiQueries=true&
       rewriteBatchedStatements=true&
       useAffectedRows=true

+ 2 - 1
src/main/resources/application-local.yml

@@ -31,11 +31,12 @@ spring:
     name: application-local
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
+    # serverTimezone=Asia/Shanghai&
     url: jdbc:mysql://127.0.0.1:3306/backendsys?useUnicode=true&
       characterEncoding=UTF-8&
       useJDBCCompliantTimezoneShift=true&
       useLegacyDatetimeCode=false&
-      serverTimezone=Asia/Shanghai&
+      serverTimezone=UTC&
       allowMultiQueries=true&
       rewriteBatchedStatements=true&
       useAffectedRows=true

+ 2 - 1
src/main/resources/application-prod.yml

@@ -31,11 +31,12 @@ spring:
     name: application-prod
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
+    # serverTimezone=Asia/Shanghai&
     url: jdbc:mysql://172.19.16.12:3306/backendsys?useUnicode=true&
       characterEncoding=UTF-8&
       useJDBCCompliantTimezoneShift=true&
       useLegacyDatetimeCode=false&
-      serverTimezone=Asia/Shanghai&
+      serverTimezone=UTC&
       allowMultiQueries=true&
       rewriteBatchedStatements=true&
       useAffectedRows=true