Ver código fonte

Merge branch 'dev-yhq' into develop

tsurumure 3 meses atrás
pai
commit
18d7f9338f
18 arquivos alterados com 266 adições e 26 exclusões
  1. 17 14
      db/crt_drama_project.sql
  2. 3 3
      db/crt_drama_project_settings.sql
  3. 7 0
      db/sys_user_role_permission.sql
  4. 5 2
      db/sys_user_role_permission_relation.sql
  5. 22 3
      src/main/java/com/backendsys/modules/crt/controller/CrtDramaProjectController.java
  6. 7 1
      src/main/java/com/backendsys/modules/crt/controller/CrtDramaProjectStoryboardController.java
  7. 9 0
      src/main/java/com/backendsys/modules/crt/dao/CrtDramaProjectSettingsDao.java
  8. 2 1
      src/main/java/com/backendsys/modules/crt/entity/CrtDramaProject.java
  9. 5 0
      src/main/java/com/backendsys/modules/crt/entity/CrtDramaProjectStoryboard.java
  10. 15 0
      src/main/java/com/backendsys/modules/crt/entity/StoryboardResponse.java
  11. 2 2
      src/main/java/com/backendsys/modules/crt/enums/ProjectSettingTypeEnums.java
  12. 11 0
      src/main/java/com/backendsys/modules/crt/service/CrtDramaProjectService.java
  13. 4 0
      src/main/java/com/backendsys/modules/crt/service/CrtDramaProjectSettingsService.java
  14. 5 0
      src/main/java/com/backendsys/modules/crt/service/CrtDramaProjectStoryboardService.java
  15. 88 0
      src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectServiceImpl.java
  16. 16 0
      src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectSettingsServiceImpl.java
  17. 45 0
      src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectStoryboardServiceImpl.java
  18. 3 0
      src/main/resources/mapper/crt/drama/CrtDramaProjectDao.xml

+ 17 - 14
db/crt_drama_project.sql

@@ -8,27 +8,30 @@ DROP TABLE IF EXISTS `crt_drama_project`;
 CREATE TABLE `crt_drama_project` (
     PRIMARY KEY (`id`),
     `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
-    `user_id` BIGINT NOT NULL COMMENT '用户ID',
+    `user_id` BIGINT NOT NULL COMMENT '用户ID (拥有者)',
     `project_name` VARCHAR(50) NOT NULL COMMENT '项目名称',
     `drama_lora_style_id` BIGINT COMMENT '风格LoRA ID',
     `drama_lora_character_ids` VARCHAR(10) COMMENT '人物LoRA ID (多个值使用逗号分隔)',
+    `create_user_id` BIGINT NOT NULL COMMENT '用户ID (创建者)',
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
     INDEX `idx_user_id` (`user_id`),
+    INDEX `idx_create_user_id` (`create_user_id`),
     INDEX `idx_drama_lora_style_id` (`drama_lora_style_id`)
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-项目表';
 
-INSERT INTO crt_drama_project(user_id, project_name, drama_lora_style_id, drama_lora_character_ids) VALUES
-    (1, '测试项目', null, null),
-    (1, '我的仙狐娘娘', 1, '1,2'),
-    (1, '数量测试项目3', null, null),
-    (1, '数量测试项目4', null, null),
-    (1, '数量测试项目5', null, null),
-    (1, '数量测试项目6', null, null),
-    (1, '数量测试项目7', null, null),
-    (1, '数量测试项目8', null, null),
-    (1, '数量测试项目9', null, null),
-    (1, '数量测试项目10', null, null),
-    (1, '数量测试项目11', null, null),
-    (1, '数量测试项目12', null, null)
+INSERT INTO crt_drama_project(user_id, project_name, drama_lora_style_id, drama_lora_character_ids, create_user_id) VALUES
+    (1, '测试项目', null, null, 1),
+    (1, '我的仙狐娘娘', 1, '1,2', 1),
+    (1, '数量测试项目3', null, null, 1),
+    (1, '数量测试项目4', null, null, 1),
+    (1, '数量测试项目5', null, null, 1),
+    (1, '数量测试项目6', null, null, 1),
+    (1, '数量测试项目7', null, null, 1),
+    (1, '数量测试项目8', null, null, 1),
+    (1, '数量测试项目9', null, null, 1),
+    (1, '数量测试项目10', null, null, 1),
+    (1, '数量测试项目11', null, null, 1),
+    (1, '数量测试项目12', null, null, 1),
+    (2, '数量测试项目12', null, null, 1)
 ;

+ 3 - 3
db/crt_drama_project_settings.sql

@@ -4,8 +4,8 @@ Source Database: backendsys
 Date: 2025/06/03 10:09:22
 */
 
-DROP TABLE IF EXISTS `drama_project_settings`;
-CREATE TABLE `drama_project_settings` (
+DROP TABLE IF EXISTS `crt_drama_project_settings`;
+CREATE TABLE `crt_drama_project_settings` (
     PRIMARY KEY (`id`),
     `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
     `drama_project_id` BIGINT NOT NULL COMMENT '项目ID',
@@ -24,7 +24,7 @@ CREATE TABLE `drama_project_settings` (
  当配置类型为生视频配置时,aspect_ratio 为必填项
  */
 
-INSERT INTO drama_project_settings(drama_project_id, drama_project_setting_type, aspect_ratio, model_id, lora_style_id, lora_style_strength) VALUES
+INSERT INTO crt_drama_project_settings(drama_project_id, drama_project_setting_type, aspect_ratio, model_id, lora_style_id, lora_style_strength) VALUES
     (1, 1, '16:9', 1, 1, 1),
     (1, 2, '16:9', null, null, null)
 ;

+ 7 - 0
db/sys_user_role_permission.sql

@@ -40,6 +40,13 @@ INSERT INTO sys_user_role_permission(id, parent_id, permission_name, sort) VALUE
         ('36.1', '36', 'AI短剧创作-项目管理', null),
             ('36.1.1', '36.1', 'AI短剧创作-项目列表 (全权限)', null),
             ('36.1.2', '36.1', 'AI短剧创作-项目列表 (自己)', null),
+            ('36.1.3', '36.1', 'AI短剧创作-创建项目', null),
+            ('36.1.4', '36.1', 'AI短剧创作-编辑项目 (全权限)', null),
+                ('36.1.4.1', '36.1.4', 'AI短剧创作-编辑项目 (自己)', null),
+            ('36.1.5', '36.1', 'AI短剧创作-编辑项目配置 (全权限)', null),
+                ('36.1.5.1', '36.1.5', 'AI短剧创作-编辑项目配置 (自己)', null),
+            ('36.1.6', '36.1', 'AI短剧创作-删除项目 (全权限)', null),
+                ('36.1.6.1', '36.1.6', 'AI短剧创作-删除项目 (自己)', null),
         ('36.2', '36', 'AI短剧创作-分镜管理', null),
             ('36.2.1', '36.2', 'AI短剧创作-分镜列表', null),
             ('36.2.2', '36.2', 'AI短剧创作-创建分镜', null),

+ 5 - 2
db/sys_user_role_permission_relation.sql

@@ -103,9 +103,12 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
         (1, '36.1'),
             (1, '36.1.1'),
             (1, '36.1.2'),
+            (1, '36.1.3'),
+            (1, '36.1.4'), (1, '36.1.4.1'),
+            (1, '36.1.5'), (1, '36.1.5.1'),
+            (1, '36.1.6'), (1, '36.1.6.1'),
         (1, '36.2'),
-            (1, '36.2.1'),
-            (1, '36.2.2'),
+            (1, '36.2.1'), (1, '36.2.2'),
 
 
 

+ 22 - 3
src/main/java/com/backendsys/modules/crt/controller/CrtDramaProjectController.java

@@ -1,6 +1,8 @@
 package com.backendsys.modules.crt.controller;
 
-import com.backendsys.modules.cms.article.entity.ArticleCategory;
+import cn.hutool.core.util.ObjectUtil;
+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.common.utils.Result;
 import com.backendsys.modules.crt.entity.CrtDramaProject;
@@ -10,14 +12,15 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 @Validated
 @RestController
 @Tag(name = "短剧创作-项目管理")
 public class CrtDramaProjectController {
 
+    @Autowired
+    private SecurityUtil securityUtil;
     @Autowired
     private CrtDramaProjectService crtDramaProjectService;
 
@@ -37,4 +40,20 @@ public class CrtDramaProjectController {
         return Result.success().put("data", crtDramaProjectService.selectCrtDramaProjectList(crtDramaProject));
     }
 
+    @Operation(summary = "获取短剧创作-创建项目")
+    @PreAuthorize("@sr.hasPermission('36.1.2')")
+    @PostMapping("/api/crt/drama/createDramaProject")
+    public Result createDramaProject(@Validated(CrtDramaProject.Create.class) @RequestBody CrtDramaProject crtDramaProject) {
+        Long user_id = SecurityUtil.getUserId();
+        crtDramaProject.setUser_id(user_id);
+        crtDramaProject.setCreate_user_id(user_id);
+        return Result.success().put("data", crtDramaProjectService.createCrtDramaProject(crtDramaProject));
+    }
+
+    @Operation(summary = "获取短剧创作-编辑项目")
+    @PutMapping("/api/crt/drama/updateDramaProject")
+    public Result updateDramaProject(@Validated(CrtDramaProject.Update.class) @RequestBody CrtDramaProject crtDramaProject) {
+        return Result.success().put("data", crtDramaProjectService.updateCrtDramaProject(crtDramaProject));
+    }
+
 }

+ 7 - 1
src/main/java/com/backendsys/modules/crt/controller/CrtDramaProjectStoryboardController.java

@@ -3,6 +3,7 @@ package com.backendsys.modules.crt.controller;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.crt.entity.CrtDramaProject;
+import com.backendsys.modules.crt.entity.CrtDramaProjectStoryboard;
 import com.backendsys.modules.crt.service.CrtDramaProjectService;
 import com.backendsys.modules.crt.service.CrtDramaProjectStoryboardService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -24,7 +25,12 @@ public class CrtDramaProjectStoryboardController {
     private CrtDramaProjectStoryboardService crtDramaProjectStoryboardService;
 
 
-    // 分镜列表 (36.2.1)
+    @Operation(summary = "获取分镜详情")
+    @PreAuthorize("@sr.hasPermission('36.2.1')")
+    @GetMapping("/api/crt/drama/getStoryboard")
+    public Result getStoryboard(@Validated(CrtDramaProjectStoryboard.StoryboardDetail.class) CrtDramaProjectStoryboard crtDramaProjectStoryboard) {
+        return Result.success().put("data", crtDramaProjectStoryboardService.selectCrtDramaProjectStoryboardDetail(crtDramaProjectStoryboard));
+    }
 
     // { drama_project_id }
     @Operation(summary = "创建分镜")

+ 9 - 0
src/main/java/com/backendsys/modules/crt/dao/CrtDramaProjectSettingsDao.java

@@ -0,0 +1,9 @@
+package com.backendsys.modules.crt.dao;
+
+import com.backendsys.modules.crt.entity.CrtDramaProjectSettings;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CrtDramaProjectSettingsDao extends BaseMapper<CrtDramaProjectSettings> {
+}

+ 2 - 1
src/main/java/com/backendsys/modules/crt/entity/CrtDramaProject.java

@@ -26,7 +26,7 @@ public class CrtDramaProject {
     private Long id;
 
     @TableField(exist = false)
-    @NotNull(message = "项目ID不能为空", groups = { CreateStoryboard.class })
+    @NotNull(message = "项目ID不能为空", groups = { CreateStoryboard.class, Update.class })
     private Long drama_project_id;
 
     private Long user_id;
@@ -44,6 +44,7 @@ public class CrtDramaProject {
 
     private Long drama_lora_style_id;
     private String drama_lora_character_ids;
+    private Long create_user_id;
     private String create_time;
     private String update_time;
 

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

@@ -3,6 +3,7 @@ package com.backendsys.modules.crt.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 @Data
@@ -10,6 +11,7 @@ import lombok.Data;
 public class CrtDramaProjectStoryboard {
 
     public static interface Detail{}
+    public static interface StoryboardDetail{}
     public static interface Create{}
     public static interface Update{}
     public static interface Delete{}
@@ -18,7 +20,10 @@ public class CrtDramaProjectStoryboard {
     private Long id;
 
     private Long user_id;
+
+    @NotNull(message = "项目ID不能为空", groups = { StoryboardDetail.class })
     private Long drama_project_id;                  // 项目ID
+    @NotNull(message = "集数不能为空", groups = { StoryboardDetail.class })
     private Integer episode_num;                    // 集数 (不超过999集)
     private Integer sort;                           // 排序
 

+ 15 - 0
src/main/java/com/backendsys/modules/crt/entity/StoryboardResponse.java

@@ -0,0 +1,15 @@
+package com.backendsys.modules.crt.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class StoryboardResponse {
+
+    private String project_name;                                // 项目名称
+    private List<CrtDramaProjectStoryboard> storyboard_list;    // 分镜列表
+    private CrtDramaProjectSettings settings_image;             // 图片设置
+    private CrtDramaProjectSettings settings_video;             // 视频设置
+
+}

+ 2 - 2
src/main/java/com/backendsys/modules/crt/enums/DramaProjectSettingType.java → src/main/java/com/backendsys/modules/crt/enums/ProjectSettingTypeEnums.java

@@ -1,6 +1,6 @@
 package com.backendsys.modules.crt.enums;
 
-public enum DramaProjectSettingType {
+public enum ProjectSettingTypeEnums {
 
     GENERATE_IMAGE(1, "生图配置"),
     GENERATE_VIDEO(2, "生视频配置")
@@ -9,7 +9,7 @@ public enum DramaProjectSettingType {
     private final Integer key;
     private final String value;
 
-    DramaProjectSettingType(Integer key, String value) {
+    ProjectSettingTypeEnums(Integer key, String value) {
         this.key = key;
         this.value = value;
     }

+ 11 - 0
src/main/java/com/backendsys/modules/crt/service/CrtDramaProjectService.java

@@ -4,9 +4,20 @@ import com.backendsys.modules.cms.article.entity.ArticleCategory;
 import com.backendsys.modules.crt.entity.CrtDramaProject;
 import com.backendsys.utils.response.PageEntity;
 
+import java.util.Map;
+
 public interface CrtDramaProjectService {
 
     // 获取短剧创作-项目列表
     PageEntity selectCrtDramaProjectList(CrtDramaProject crtDramaProject);
 
+    // 创建短剧创作-项目
+    Map<String, Object> createCrtDramaProject(CrtDramaProject crtDramaProject);
+
+    // 编辑短剧创作-项目
+    Map<String, Object> updateCrtDramaProject(CrtDramaProject crtDramaProject);
+
+    // 删除短剧创作-项目
+    Map<String, Object> deleteCrtDramaProject(CrtDramaProject crtDramaProject);
+
 }

+ 4 - 0
src/main/java/com/backendsys/modules/crt/service/CrtDramaProjectSettingsService.java

@@ -0,0 +1,4 @@
+package com.backendsys.modules.crt.service;
+
+public interface CrtDramaProjectSettingsService {
+}

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

@@ -2,11 +2,16 @@ package com.backendsys.modules.crt.service;
 
 
 import com.backendsys.modules.crt.entity.CrtDramaProject;
+import com.backendsys.modules.crt.entity.CrtDramaProjectStoryboard;
+import com.backendsys.modules.crt.entity.StoryboardResponse;
 
 import java.util.Map;
 
 public interface CrtDramaProjectStoryboardService {
 
+    // 获取分镜详情
+    StoryboardResponse selectCrtDramaProjectStoryboardDetail(CrtDramaProjectStoryboard crtDramaProjectStoryboard);
+
     // 创建分镜
     Map<String, Object> createStoryboard(CrtDramaProject crtDramaProject);
 

+ 88 - 0
src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectServiceImpl.java

@@ -1,14 +1,24 @@
 package com.backendsys.modules.crt.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.backendsys.exception.CustException;
 import com.backendsys.modules.cms.article.entity.ArticleCategory;
+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.entity.CrtDramaProject;
+import com.backendsys.modules.crt.entity.CrtDramaProjectSettings;
+import com.backendsys.modules.crt.enums.AspectRatioEnums;
+import com.backendsys.modules.crt.enums.ProjectSettingTypeEnums;
 import com.backendsys.modules.crt.service.CrtDramaProjectService;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -16,8 +26,12 @@ import java.util.Map;
 @Service
 public class CrtDramaProjectServiceImpl implements CrtDramaProjectService {
 
+    @Autowired
+    private SecurityUtil securityUtil;
     @Autowired
     private CrtDramaProjectDao crtDramaProjectDao;
+    @Autowired
+    private CrtDramaProjectSettingsDao crtDramaProjectSettingsDao;
 
     // 获取短剧创作-项目列表
     @Override
@@ -27,4 +41,78 @@ public class CrtDramaProjectServiceImpl implements CrtDramaProjectService {
         return new PageInfoResult(list).toEntity();
     }
 
+    /**
+     * 创建短剧创作-项目
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> createCrtDramaProject(CrtDramaProject crtDramaProject) {
+
+        // 创建项目 (此处不判断LoRA有效性,在调用的时候再判断)
+        crtDramaProjectDao.insert(crtDramaProject);
+
+        // 创建项目配置 (生图、生视频配置)
+        Long project_id = crtDramaProject.getId();
+        CrtDramaProjectSettings settings_image = new CrtDramaProjectSettings();
+        settings_image.setDrama_project_id(project_id);
+        settings_image.setDrama_project_setting_type(ProjectSettingTypeEnums.GENERATE_IMAGE.getKey());   // 项目配置类型
+        settings_image.setAspect_ratio(AspectRatioEnums.RATIO_16_9.getKey());                            // 画面比例
+        settings_image.setModel_id(1L);
+        settings_image.setLora_style_id(1L);
+        settings_image.setLora_style_strength(1.0f);
+        crtDramaProjectSettingsDao.insert(settings_image);
+
+        CrtDramaProjectSettings settings_video = new CrtDramaProjectSettings();
+        settings_video.setDrama_project_id(project_id);
+        settings_video.setDrama_project_setting_type(ProjectSettingTypeEnums.GENERATE_VIDEO.getKey());   // 项目配置类型
+        settings_image.setAspect_ratio(AspectRatioEnums.RATIO_16_9.getKey());                            // 画面比例
+        crtDramaProjectSettingsDao.insert(settings_video);
+
+        return Map.of("project_id", project_id);
+    }
+
+    /**
+     * 编辑短剧创作-项目
+     */
+    @Override
+    public Map<String, Object> updateCrtDramaProject(CrtDramaProject crtDramaProject) {
+
+        CrtDramaProject detail = crtDramaProjectDao.selectById(crtDramaProject.getDrama_project_id());
+        if (detail == null)  throw new CustException("项目不存在");
+
+        Long user_id = detail.getUser_id();
+        System.out.println("项目user_id: " + user_id + ", 当前user_id: " + SecurityUtil.getUserId());
+
+        // 编辑他人的用户信息
+        // - 编辑自己 (无需权限)
+        // - 编辑他人 (需要子权限或超级管理员)
+        if (user_id != SecurityUtil.getUserId() && !securityUtil.hasPermission("36.1.4")) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+
+        crtDramaProject.setId(crtDramaProject.getDrama_project_id());
+
+        System.out.println(crtDramaProject);
+
+        crtDramaProjectDao.updateById(crtDramaProject);
+        return Map.of("project_id", crtDramaProject.getDrama_project_id());
+
+
+
+
+
+    }
+
+    /**
+     * 删除短剧创作-项目
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> deleteCrtDramaProject(CrtDramaProject crtDramaProject) {
+
+
+
+        return Map.of("project_id", crtDramaProject.getDrama_project_id());
+    }
+
 }

+ 16 - 0
src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectSettingsServiceImpl.java

@@ -0,0 +1,16 @@
+package com.backendsys.modules.crt.service.impl;
+
+import com.backendsys.modules.crt.dao.CrtDramaProjectSettingsDao;
+import com.backendsys.modules.crt.service.CrtDramaProjectSettingsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CrtDramaProjectSettingsServiceImpl implements CrtDramaProjectSettingsService {
+
+    @Autowired
+    private CrtDramaProjectSettingsDao crtDramaProjectSettingsDao;
+
+
+
+}

+ 45 - 0
src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectStoryboardServiceImpl.java

@@ -2,15 +2,19 @@ package com.backendsys.modules.crt.service.impl;
 
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.crt.dao.CrtDramaProjectDao;
+import com.backendsys.modules.crt.dao.CrtDramaProjectSettingsDao;
 import com.backendsys.modules.crt.dao.CrtDramaProjectStoryboardDao;
 import com.backendsys.modules.crt.entity.CrtDramaProject;
+import com.backendsys.modules.crt.entity.CrtDramaProjectSettings;
 import com.backendsys.modules.crt.entity.CrtDramaProjectStoryboard;
+import com.backendsys.modules.crt.entity.StoryboardResponse;
 import com.backendsys.modules.crt.service.CrtDramaProjectStoryboardService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
 @Service
@@ -19,8 +23,49 @@ public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStor
     @Autowired
     private CrtDramaProjectDao crtDramaProjectDao;
     @Autowired
+    private CrtDramaProjectSettingsDao crtDramaProjectSettingsDao;
+    @Autowired
     private CrtDramaProjectStoryboardDao crtDramaProjectStoryboardDao;
 
+    /**
+     * 获取分镜详情
+     */
+    @Override
+    public StoryboardResponse selectCrtDramaProjectStoryboardDetail(CrtDramaProjectStoryboard crtDramaProjectStoryboard) {
+
+        Integer episode_num = crtDramaProjectStoryboard.getEpisode_num();
+        Long project_id = crtDramaProjectStoryboard.getDrama_project_id();
+
+        CrtDramaProject crtDramaProject = crtDramaProjectDao.selectById(project_id);
+        if (crtDramaProject == null) throw new CustException("项目不存在");
+
+        LambdaQueryWrapper<CrtDramaProjectStoryboard> wrapperStoryboard = new LambdaQueryWrapper<>();
+        wrapperStoryboard.eq(CrtDramaProjectStoryboard::getDrama_project_id, project_id);
+        wrapperStoryboard.eq(CrtDramaProjectStoryboard::getEpisode_num, episode_num);
+        List<CrtDramaProjectStoryboard> storyboardList = crtDramaProjectStoryboardDao.selectList(wrapperStoryboard);
+        if (storyboardList.isEmpty()) throw new CustException("分镜不存在");
+
+        // 查询项目设置
+        LambdaQueryWrapper<CrtDramaProjectSettings> wrapperSettings = new LambdaQueryWrapper<>();
+        wrapperSettings.eq(CrtDramaProjectSettings::getDrama_project_id, project_id);
+        List<CrtDramaProjectSettings> settingsList = crtDramaProjectSettingsDao.selectList(wrapperSettings);
+
+        // 获取项目详情与分镜列表
+        StoryboardResponse storyboardResponse = new StoryboardResponse();
+        storyboardResponse.setProject_name(crtDramaProject.getProject_name());
+        storyboardResponse.setStoryboard_list(storyboardList);
+
+        if (settingsList.size() > 0) {
+            settingsList.stream().forEach(settings -> {
+                // 项目配置类型 (1: 生图配置, 2: 生视频配置)
+                if (settings.getDrama_project_setting_type() == 1) storyboardResponse.setSettings_image(settings);
+                if (settings.getDrama_project_setting_type() == 2) storyboardResponse.setSettings_video(settings);
+            });
+        }
+
+        return storyboardResponse;
+    }
+
     /**
      * 创建分镜
      */

+ 3 - 0
src/main/resources/mapper/crt/drama/CrtDramaProjectDao.xml

@@ -8,6 +8,7 @@
         p.project_name,
         COALESCE(p.drama_lora_style_id, '') drama_lora_style_id,
         COALESCE(p.drama_lora_character_ids, '') drama_lora_character_ids,
+        p.create_user_id,
         p.create_time,
         p.update_time
     </sql>
@@ -20,6 +21,7 @@
                 jdbcType="VARCHAR" typeHandler="com.backendsys.config.Mybatis.handler.StringToListTypeHandler" />
         <result property="drama_lora_style_id" column="drama_lora_style_id" javaType="java.lang.Long" />
         <result property="drama_lora_character_ids" column="drama_lora_character_ids" />
+        <result property="create_user_id" column="create_user_id" />
         <result property="create_time" column="create_time" />
         <result property="update_time" column="update_time" />
     </resultMap>
@@ -40,6 +42,7 @@
             </if>
         </where>
         GROUP BY p.id
+        ORDER BY p.create_time DESC
     </select>
 
 </mapper>