Explorar o código

完成创建分镜接口(无配置)

tsurumure hai 3 meses
pai
achega
76a300a6d7

+ 3 - 2
db/crt_drama_project_storyboard.sql

@@ -10,7 +10,7 @@ CREATE TABLE `crt_drama_project_storyboard` (
     `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
     `user_id` BIGINT NOT NULL COMMENT '用户ID',
 
-    `drama_project_id` BIGINT COMMENT '项目ID',
+    `drama_project_id` BIGINT NOT NULL COMMENT '项目ID',
     `episode_num` INT NOT NULL COMMENT '集数 (不超过999集)',
     `sort` INT NOT NULL COMMENT '排序',
 
@@ -43,5 +43,6 @@ CREATE TABLE `crt_drama_project_storyboard` (
 INSERT INTO crt_drama_project_storyboard(user_id, drama_project_id, episode_num, sort, story_prompt, story_framing, story_scene, story_weather_time,
                                          lora_figure_ids, text_to_image_prompt) VALUES
     (1, 1, 1, 2, null, null, null, null, '1,2', null),
-    (1, 1, 1, 1, '全景俯拍,跟镜柳王妃慢慢走向王府大门', '全景', '王府门口外景', '下雪的夜晚', '1,2', '漆黑的夜晚,大雪,光线昏暗,远景,高角度,从上面拍摄,宽阔的街道从左下延伸到右上,街道两旁的建筑是中国古代风格,街道尽头画面右上角的建筑比其他建筑高,仅有一个女人背对镜头走在街道上,穿着红色连帽斗篷,一袭纯红色的绸缎轻纱质感长裙,裙摆到脚踝,双足赤裸,红色连帽斗篷,女人的位置处在画面左上,画面右侧的屋檐上站着一只头部朝向女人小乌鸦,以中国古风动漫风格呈现')
+    (1, 1, 2, 1, '全景俯拍,跟镜柳王妃慢慢走向王府大门', '全景', '王府门口外景', '下雪的夜晚', '1,2', '漆黑的夜晚,大雪,光线昏暗,远景,高角度,从上面拍摄,宽阔的街道从左下延伸到右上,街道两旁的建筑是中国古代风格,街道尽头画面右上角的建筑比其他建筑高,仅有一个女人背对镜头走在街道上,穿着红色连帽斗篷,一袭纯红色的绸缎轻纱质感长裙,裙摆到脚踝,双足赤裸,红色连帽斗篷,女人的位置处在画面左上,画面右侧的屋檐上站着一只头部朝向女人小乌鸦,以中国古风动漫风格呈现'),
+    (1, 2, 10, 1, null, null, null, null, '1,2', null)
 ;

+ 51 - 0
src/main/java/com/backendsys/modules/crt/controller/CrtDramaProjectStoryboardController.java

@@ -0,0 +1,51 @@
+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.service.CrtDramaProjectService;
+import com.backendsys.modules.crt.service.CrtDramaProjectStoryboardService;
+import io.swagger.v3.oas.annotations.Operation;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@Validated
+@RestController
+@Tag(name = "短剧创作-项目管理-分镜管理")
+public class CrtDramaProjectStoryboardController {
+
+    @Autowired
+    private CrtDramaProjectStoryboardService crtDramaProjectStoryboardService;
+
+
+    // { drama_project_id }
+    @Operation(summary = "创建分镜")
+    @PostMapping("/api/crt/drama/createStoryboard")
+    public Result createStoryboard(@Validated(CrtDramaProject.CreateStoryboard.class) @RequestBody CrtDramaProject crtDramaProject) {
+        crtDramaProject.setUser_id(SecurityUtil.getUserId());
+        return Result.success().put("data", crtDramaProjectStoryboardService.createStoryboard(crtDramaProject));
+    }
+
+
+//    @Operation(summary = "获取短剧创作-项目列表 (全权限)")
+//    @PreAuthorize("@sr.hasPermission('36.1.1')")
+//    @GetMapping("/api/crt/drama/getDramaProjectAllList")
+//    public Result getDramaProjectAllList(@Validated CrtDramaProject crtDramaProject) {
+//        return Result.success().put("data", crtDramaProjectService.selectCrtDramaProjectList(crtDramaProject));
+//    }
+//
+//    @Operation(summary = "获取短剧创作-项目列表 (我的)")
+//    @PreAuthorize("@sr.hasPermissions(T(java.util.Arrays).asList('36.1.1', '36.1.2'), T(com.backendsys.modules.common.enums.MatchType).OR)")
+//    @GetMapping("/api/crt/drama/getDramaProjectList")
+//    public Result getDramaProjectList(@Validated CrtDramaProject crtDramaProject) {
+//        crtDramaProject.setUser_id(SecurityUtil.getUserId());
+//        return Result.success().put("data", crtDramaProjectService.selectCrtDramaProjectList(crtDramaProject));
+//    }
+
+}

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

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

+ 14 - 0
src/main/java/com/backendsys/modules/crt/entity/CrtDramaProject.java

@@ -4,7 +4,9 @@ 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.Max;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
 import java.util.List;
@@ -15,16 +17,28 @@ public class CrtDramaProject {
 
     public static interface Detail{}
     public static interface Create{}
+    public static interface CreateStoryboard{}
     public static interface Update{}
     public static interface Delete{}
 
     @TableId(type = IdType.AUTO)
+
     private Long id;
+
+    @TableField(exist = false)
+    @NotNull(message = "项目ID不能为空", groups = { CreateStoryboard.class })
+    private Long drama_project_id;
+
     private Long user_id;
     @NotEmpty(message = "项目名称不能为空", groups = { Create.class, Update.class })
     @Size(max = 50, message = "项目名称长度不能超过50个字符", groups = { Create.class, Update.class })
     private String project_name;
 
+    @TableField(exist = false)
+    @NotNull(message = "集数不能为空", groups = { CreateStoryboard.class })
+    @Max(value = 999, message = "集数长度不超过 {value}", groups = { CreateStoryboard.class })
+    private Integer episode_num;
+
     @TableField(exist = false)
     private List<Integer> storyboard_episode_nums;  // 集数 (子查询)
 

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

@@ -18,7 +18,7 @@ public class CrtDramaProjectStoryboard {
     private Long id;
 
     private Long user_id;
-    private Long drama_project_id;              // 项目ID
+    private Long drama_project_id;                  // 项目ID
     private Integer episode_num;                    // 集数 (不超过999集)
     private Integer sort;                           // 排序
 
@@ -26,7 +26,7 @@ public class CrtDramaProjectStoryboard {
     private String story_framing;                   // 景别
     private String story_scene;                     // 场景
     private String story_weather_time;              // 天气/时间
-    private String lora_figure_ids;             // 人物LoRA ID (创建时,跟随项目的人物LoRAID)(多个人物ID以逗号分隔)
+    private String lora_figure_ids;                 // 人物LoRA ID (创建时,跟随项目的人物LoRAID)(多个人物ID以逗号分隔)
 
     private Integer param_image_count;              // 每次生成图片数量 (默认值:1,整数范围:1~4)
     private Float param_prompt_weight;              // 提示词引导系数 (默认值:3.5,小数点后一位,范围:1~30)
@@ -40,8 +40,8 @@ public class CrtDramaProjectStoryboard {
     private String param_video_reference_images;    // 参考图 (1~4张)(多图以逗号分隔)
     private String image_to_video_prompt;           // 图生视频提示词 (生视频时必填)
 
-    private Integer generate_image_status;           // 生图状态 (-1:未生图, 1:生成中, 2:已生图)
-    private Integer generate_video_status;           // 生视频状态 (-1:未生视频, 1:生成中, 2:已生视频)
+    private Integer generate_image_status;          // 生图状态 (-1:未生图, 1:生成中, 2:已生图)
+    private Integer generate_video_status;          // 生视频状态 (-1:未生视频, 1:生成中, 2:已生视频)
 
     private String create_time;
     private String update_time;

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

@@ -0,0 +1,13 @@
+package com.backendsys.modules.crt.service;
+
+
+import com.backendsys.modules.crt.entity.CrtDramaProject;
+
+import java.util.Map;
+
+public interface CrtDramaProjectStoryboardService {
+
+    // 创建分镜
+    Map<String, Object> createStoryboard(CrtDramaProject crtDramaProject);
+
+}

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

@@ -0,0 +1,63 @@
+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.CrtDramaProjectStoryboardDao;
+import com.backendsys.modules.crt.entity.CrtDramaProject;
+import com.backendsys.modules.crt.entity.CrtDramaProjectStoryboard;
+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.Map;
+
+@Service
+public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStoryboardService {
+
+    @Autowired
+    private CrtDramaProjectDao crtDramaProjectDao;
+    @Autowired
+    private CrtDramaProjectStoryboardDao crtDramaProjectStoryboardDao;
+
+    /**
+     * 创建分镜
+     */
+    @Override
+    public Map<String, Object> createStoryboard(CrtDramaProject crtDramaProject) {
+
+        Long user_id = crtDramaProject.getUser_id();
+        Long drama_project_id = crtDramaProject.getDrama_project_id();
+        Integer episode_num = crtDramaProject.getEpisode_num();
+        Integer sort = 1;
+
+        // 判断 项目 是否存在
+        LambdaQueryWrapper<CrtDramaProject> wrapperDramaProject = new LambdaQueryWrapper<>();
+        wrapperDramaProject.eq(CrtDramaProject::getId, drama_project_id);
+        Boolean is_exist_project = crtDramaProjectDao.exists(wrapperDramaProject);
+        if (!is_exist_project) throw new CustException("项目不存在");
+
+        // 判断 (项目ID + 集数) 是否存在,如果存在则不能创建
+        LambdaQueryWrapper<CrtDramaProjectStoryboard> wrapperStoryboard = new LambdaQueryWrapper<>();
+        wrapperStoryboard.eq(CrtDramaProjectStoryboard::getDrama_project_id, drama_project_id);
+        wrapperStoryboard.eq(CrtDramaProjectStoryboard::getEpisode_num, episode_num);
+        Boolean is_exist_storyboard = crtDramaProjectStoryboardDao.exists(wrapperStoryboard);
+        if (is_exist_storyboard) throw new CustException("该项目集数已存在,请勿重复创建");
+
+        // [DB] 创建分镜
+        CrtDramaProjectStoryboard entity = new CrtDramaProjectStoryboard();
+        entity.setUser_id(user_id);
+        entity.setDrama_project_id(drama_project_id);
+        entity.setEpisode_num(episode_num);
+        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;
+    }
+
+}