Răsfoiți Sursa

Merge branch 'dev-yhq' into develop

tsurumure 3 luni în urmă
părinte
comite
a6c69d51a9
25 a modificat fișierele cu 582 adăugiri și 106 ștergeri
  1. 24 0
      db/crt_drama_project.sql
  2. 30 0
      db/crt_drama_project_settings.sql
  3. 47 0
      db/crt_drama_project_storyboard.sql
  4. 47 0
      db/crt_drama_task.sql
  5. 19 0
      db/crt_lora_figure.sql
  6. 19 0
      db/crt_lora_style.sql
  7. 18 0
      db/crt_model.sql
  8. 0 37
      db/med_material.sql
  9. 0 29
      db/med_material_category.sql
  10. 0 34
      db/med_my_material.sql
  11. 52 0
      src/main/java/com/backendsys/config/Mybatis/handler/StringToListTypeHandler.java
  12. 0 1
      src/main/java/com/backendsys/entity/System/SysAgreementDTO.java
  13. 36 0
      src/main/java/com/backendsys/modules/crt/entity/CrtDramaProject.java
  14. 23 0
      src/main/java/com/backendsys/modules/crt/entity/CrtDramaProjectSettings.java
  15. 50 0
      src/main/java/com/backendsys/modules/crt/entity/CrtDramaProjectStoryboard.java
  16. 24 0
      src/main/java/com/backendsys/modules/crt/entity/CrtDramaTask.java
  17. 25 0
      src/main/java/com/backendsys/modules/crt/enums/AspectRatioEnums.java
  18. 26 0
      src/main/java/com/backendsys/modules/crt/enums/DramaProjectSettingType.java
  19. 28 0
      src/main/java/com/backendsys/modules/crt/enums/GenerateImageStatusEnums.java
  20. 28 0
      src/main/java/com/backendsys/modules/crt/enums/GenerateVideoStatusEnums.java
  21. 27 0
      src/main/java/com/backendsys/modules/crt/enums/SamplingMethodEnums.java
  22. 28 0
      src/main/java/com/backendsys/modules/crt/enums/TaskStatusEnums.java
  23. 27 0
      src/main/java/com/backendsys/modules/crt/enums/TaskTypeEnums.java
  24. 0 1
      src/main/java/com/backendsys/modules/system/entity/SysAgreement.java
  25. 4 4
      src/main/resources/mapper/system/SysUserInfoDao.xml

+ 24 - 0
db/crt_drama_project.sql

@@ -0,0 +1,24 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2025/06/03 10:09:22
+*/
+
+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',
+    `project_name` VARCHAR(50) NOT NULL COMMENT '项目名称',
+    `crt_drama_lora_style_id` BIGINT COMMENT '风格LoRA ID',
+    `crt_drama_lora_character_ids` VARCHAR(10) COMMENT '人物LoRA 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_crt_drama_lora_style_id` (`crt_drama_lora_style_id`)
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-项目表';
+
+INSERT INTO crt_drama_project(user_id, project_name, crt_drama_lora_style_id, crt_drama_lora_character_ids) VALUES
+    (1, '测试项目', null, null),
+    (1, '我的仙狐娘娘', 1, '1,2')
+;

+ 30 - 0
db/crt_drama_project_settings.sql

@@ -0,0 +1,30 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2025/06/03 10:09:22
+*/
+
+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',
+    `crt_drama_project_id` BIGINT NOT NULL COMMENT '项目ID',
+    `crt_drama_project_setting_type` INT NOT NULL COMMENT '项目配置类型 (1: 生图配置, 2: 生视频配置)',
+    `aspect_ratio` VARCHAR(10) COMMENT '画面比例 (枚举)(16:9 - 1280*720, 9:16 - 720*1280, 1:1 - 1024*1024)',
+    `crt_model_id` BIGINT COMMENT '基础模型ID (固定值接口)(1: F.1-dev.safetensors)',
+    `crt_lora_style_id` BIGINT COMMENT '风格LoRA ID',
+    `crt_lora_style_strength` FLOAT COMMENT '风格强度 (默认值:1,范围:0~2.0,保留小数点后一位)',
+    INDEX `idx_crt_model_id` (`crt_model_id`),
+    INDEX `idx_crt_lora_style_id` (`crt_lora_style_id`),
+    INDEX `idx_crt_drama_project_id` (`crt_drama_project_id`)
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-项目配置表';
+
+/*
+ 当配置类型为生图配置时,aspect_ratio、crt_drama_base_model_id、crt_drama_lora_style_id、crt_drama_lora_style_strength 为必填项
+ 当配置类型为生视频配置时,aspect_ratio 为必填项
+ */
+
+INSERT INTO crt_drama_project_settings(crt_drama_project_id, crt_drama_project_setting_type, aspect_ratio, crt_model_id, crt_lora_style_id, crt_lora_style_strength) VALUES
+    (1, 1, '16:9', 1, 1, 1),
+    (1, 2, '16:9', null, null, null)
+;

+ 47 - 0
db/crt_drama_project_storyboard.sql

@@ -0,0 +1,47 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2025/06/03 10:09:22
+*/
+
+DROP TABLE IF EXISTS `crt_drama_project_storyboard`;
+CREATE TABLE `crt_drama_project_storyboard` (
+    PRIMARY KEY (`id`),
+    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
+    `user_id` BIGINT NOT NULL COMMENT '用户ID',
+
+    `crt_drama_project_id` BIGINT COMMENT '项目ID',
+    `episode_num` INT NOT NULL COMMENT '集数 (不超过999集)',
+    `sort` INT NOT NULL COMMENT '排序',
+
+    `story_prompt` VARCHAR(500) COMMENT '分镜设计',
+    `story_framing` VARCHAR(500) COMMENT '景别',
+    `story_scene` VARCHAR(500) COMMENT '场景',
+    `story_weather_time` VARCHAR(500) COMMENT '天气/时间',
+    `crt_lora_figure_ids` VARCHAR(255) COMMENT '人物LoRA ID (创建时,跟随项目的人物LoRAID)(多个人物ID以逗号分隔)',
+
+    `param_image_count` INT DEFAULT '1' COMMENT '每次生成图片数量 (默认值:1,整数范围:1~4)',
+    `param_prompt_weight` FLOAT DEFAULT '3.5' COMMENT '提示词引导系数 (默认值:3.5,小数点后一位,范围:1~30)',
+    `param_sampling_method` VARCHAR(255) DEFAULT 'Euler' COMMENT '采样方法 (枚举)(Euler: euler, DPM++2M: dpmpp_2m)',
+    `param_step_count` INT DEFAULT '20' COMMENT '步数 (默认值:20,整数范围:1~30)',
+    `param_random_seed` TINYINT DEFAULT '1' COMMENT '随机种子 (默认值:1,范围:(1:随机, 2:自定义))',
+    `param_random_seed_custom` VARCHAR(255) COMMENT '随机种子自定义值 (长度: 0~64位整数)',
+    `text_to_image_prompt` VARCHAR(1000) COMMENT '文生图提示词 (生图时必填)',
+
+    `param_video_reference_type` TINYINT DEFAULT '1' COMMENT '生视频模式 (1:首尾帧模式, 2:多图参考模式)',
+    `param_video_reference_images` TEXT COMMENT '参考图 (1~4张)(多图以逗号分隔)',
+    `image_to_video_prompt` VARCHAR(1000) COMMENT '图生视频提示词 (生视频时必填)',
+
+    `generate_image_status` TINYINT DEFAULT '-1' COMMENT '生图状态 (-1:未生图, 1:生成中, 2:已生图)',
+    `generate_video_status` TINYINT DEFAULT '-1' COMMENT '生视频状态 (-1:未生视频, 1:生成中, 2:已生视频)',
+
+    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    INDEX `idx_user_id` (`user_id`)
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-分镜表';
+
+INSERT INTO crt_drama_project_storyboard(user_id, crt_drama_project_id, episode_num, sort, story_prompt, story_framing, story_scene, story_weather_time,
+                                         crt_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', '漆黑的夜晚,大雪,光线昏暗,远景,高角度,从上面拍摄,宽阔的街道从左下延伸到右上,街道两旁的建筑是中国古代风格,街道尽头画面右上角的建筑比其他建筑高,仅有一个女人背对镜头走在街道上,穿着红色连帽斗篷,一袭纯红色的绸缎轻纱质感长裙,裙摆到脚踝,双足赤裸,红色连帽斗篷,女人的位置处在画面左上,画面右侧的屋檐上站着一只头部朝向女人小乌鸦,以中国古风动漫风格呈现')
+;

+ 47 - 0
db/crt_drama_task.sql

@@ -0,0 +1,47 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2025/06/03 10:09:22
+*/
+
+DROP TABLE IF EXISTS `crt_drama_task`;
+CREATE TABLE `crt_drama_task` (
+    PRIMARY KEY (`id`),
+    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
+    `user_id` BIGINT NOT NULL COMMENT '用户ID',
+    `crt_drama_project_id` BIGINT NOT NULL COMMENT '项目ID',
+    `task_id` VARCHAR(255) NOT NULL COMMENT '任务ID',
+    `task_type` TINYINT NOT NULL COMMENT '任务类型 (1:图像, 2:视频)',
+    `task_status` TINYINT DEFAULT '-1' COMMENT '任务状态 (-1:未开始, 1:进行中, 2:成功, 3:失败)',
+    `task_status_msg` VARCHAR(500) COMMENT '任务状态信息,当任务失败时展示失败原因(如触发平台的内容风控等)',
+    `task_result` TEXT COMMENT '任务生成结果 (JSONString)(成功时,返回生成结果)',
+    `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_crt_drama_project_id` (`crt_drama_project_id`),
+    INDEX `idx_task_id` (`task_id`)
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-生图任务表';
+
+/*
+    目前打算生图使用ComfyUI,生视频使用可灵。
+
+    可灵并发:5
+    ComfyUI并发:15
+ */
+
+/*
+    [Comfyui] 生图结果
+    task_result:{
+
+    }
+    [可灵] 生视频结果
+    task_result:{
+        "videos":[
+            {
+                "id": "string", //生成的视频ID;全局唯一
+                "url": "string", //生成视频的URL,例如https://p1.a.kwimgs.com/bs2/upload-ylab-stunt/special-effect/output/HB1_PROD_ai_web_46554461/-2878350957757294165/output.mp4(请注意,为保障信息安全,生成的图片/视频会在30天后被清理,请及时转存)
+                "duration": "string" //视频总时长,单位s
+            }
+          ]
+    }
+ */

+ 19 - 0
db/crt_lora_figure.sql

@@ -0,0 +1,19 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2025/06/03 10:09:22
+*/
+
+DROP TABLE IF EXISTS `crt_lora_figure`;
+CREATE TABLE `crt_lora_figure` (
+    PRIMARY KEY (`id`),
+    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
+    `name` VARCHAR(50) NOT NULL COMMENT '人物名称',
+    `lora_figure_name` VARCHAR(255) NOT NULL COMMENT '人物LoRA名称',
+    `lora_figure_path` VARCHAR(500) NOT NULL COMMENT '人物LoRA路径'
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-人物LoRA表';
+
+INSERT INTO crt_lora_figure(id, name, lora_figure_name, lora_figure_path) VALUES
+    (1, '柳王妃', 'liuwangfei-0012', '/etc/ComfyUI/custom_nodes/xxx/liuwangfei-0012.safetensors'),
+    (2, '陆司明', 'lusiming-0001', '/etc/ComfyUI/custom_nodes/xxx/lusiming-0001.safetensors')
+;

+ 19 - 0
db/crt_lora_style.sql

@@ -0,0 +1,19 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2025/06/03 10:09:22
+*/
+
+DROP TABLE IF EXISTS `crt_lora_style`;
+CREATE TABLE `crt_lora_style` (
+    PRIMARY KEY (`id`),
+    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
+    `name` VARCHAR(50) NOT NULL COMMENT '风格名称',
+    `lora_style_name` VARCHAR(255) NOT NULL COMMENT '风格LoRA名称',
+    `lora_style_path` VARCHAR(500) NOT NULL COMMENT '风格LoRA路径'
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-风格LoRA表';
+
+INSERT INTO crt_lora_style(id, name, lora_style_name, lora_style_path) VALUES
+    (1, 'Hyatsu梦幻宝石眼睛v2', 'hyatsu_gemstone_dream_eyes_v2', '/etc/ComfyUI/custom_nodes/xxx/hyatsu_gemstone_dream_eyes_v2.safetensors'),
+    (2, '日系漫画风', 'japanese_anime_style', '/etc/ComfyUI/custom_nodes/xxx/japanese_anime_style.safetensors')
+;

+ 18 - 0
db/crt_model.sql

@@ -0,0 +1,18 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2025/06/03 10:09:22
+*/
+
+DROP TABLE IF EXISTS `crt_model`;
+CREATE TABLE `crt_model` (
+    PRIMARY KEY (`id`),
+    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
+    `name` VARCHAR(50) NOT NULL COMMENT '名称',
+    `model_name` VARCHAR(255) NOT NULL COMMENT '模型名称',
+    `model_path` VARCHAR(255) NOT NULL COMMENT '模型路径'
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='短剧创作-风格LoRA表';
+
+INSERT INTO crt_model(id, name, model_name, model_path) VALUES
+    (1, 'F.1-dev.safetensors', 'F.1-dev.safetensors', '/etc/ComfyUI/custom_nodes/xxx/F.1-dev.safetensors')
+;

+ 0 - 37
db/med_material.sql

@@ -1,37 +0,0 @@
-# /**
-# Source Server Version: 8.0.31
-# Source Database: backendsys
-# Date: 2023/05/23 17:09:22
-# */
-#
-# DROP TABLE IF EXISTS `med_material`;
-# CREATE TABLE `med_material` (
-#     PRIMARY KEY (`id`),
-#     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
-#     `category_id` BIGINT NOT NULL COMMENT '素材分类ID',
-#     `title` VARCHAR(255) NOT NULL COMMENT '标题',
-#     `description` VARCHAR(500) COMMENT '描述',
-#     `thumb` VARCHAR(500) COMMENT '缩略图',
-#     `material_type` TINYINT(1) NOT NULL COMMENT '素材文件类型 (1图片, 2视频, 3音频, 4文案)',
-#     `content` VARCHAR(10000) COMMENT '素材内容 (material_type: 4 时必填)',
-#     `file` VARCHAR(500) COMMENT '素材文件 (material_type: 1,2,3 时必填)',
-#     `is_top` TINYINT(1) DEFAULT '-1' NOT NULL COMMENT '是否置顶 (-1否, 1是)',
-#     `status` TINYINT(1) DEFAULT '1' COMMENT '素材状态 (-1禁用, 1启用)',
-#     `audit_status` TINYINT(1) DEFAULT '1' COMMENT '审核状态 (-1审核拒绝, 1待审核, 2审核通过)',
-#     `audit_note` VARCHAR(255) COMMENT '审核备注',
-#     `del_flag` TINYINT(1) DEFAULT '-1' COMMENT '删除标志 (-1未删除, 1删除)',
-#     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-#     `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-#     INDEX `idx_title` (`title`),
-#     INDEX `idx_description` (`description`),
-#     INDEX `idx_category_id` (`category_id`),
-#     INDEX `idx_status` (`status`),
-#     INDEX `idx_audit_status` (`audit_status`)
-# ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='素材中心表';
-#
-# INSERT INTO med_material(category_id, title, description, content, thumb, material_type, file, is_top, audit_status, status) VALUES
-#     (1, '测试素材A', 'aa', null, '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png', -1, 2, 1),
-#     (1, '勇敢前行', '勇敢前行,追寻内心光芒', '在人生的旅途中,勇敢前行,永不停歇。内心的光芒照亮前行的道路,指引我们走向梦想的彼岸。坚定的信念如磐石般支撑,让我们勇敢地面对挑战,不忘初心,砥砺前行。', null, 3, null, -1, 2, 1),
-#     (7, '测试素材B', 'bbb', null, '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png', -1, 2, -1),
-#     (7, '测试素材C', 'ccccc', null, '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png', -1, 2, -1)
-# ;

+ 0 - 29
db/med_material_category.sql

@@ -1,29 +0,0 @@
--- /**
--- Source Server Version: 8.0.31
--- Source Database: backendsys
--- Date: 2023/05/23 17:09:22
--- */
---
--- DROP TABLE IF EXISTS `med_material_category`;
--- CREATE TABLE `med_material_category` (
---     PRIMARY KEY (`id`),
---     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
---     `parent_id` BIGINT DEFAULT '-1' COMMENT '父ID',
---     `category_name` VARCHAR(100) NOT NULL COMMENT '素材分类名称',
---     `category_description` VARCHAR(500) COMMENT '素材分类描述',
---     `sort` INT DEFAULT '1' COMMENT '排序',
---     `status` TINYINT(1) DEFAULT '1' COMMENT '素材状态 (-1禁用, 1启用)'
--- ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='素材分类表';
---
--- INSERT INTO med_material_category(parent_id, category_name, category_description, sort) VALUES
---     (-1, '推荐', '推荐素材', 5),
---         (1, 'K1', 'kkkkkkkkk', 1),
---             (2, 'K1-1', 'kkkkkkkkk', 1),
---         (1, 'K2', 'kkkkkkkkk', 7),
---         (1, 'K3', 'kkkkkkkkk', 8),
---         (1, 'K4', 'kkkkkkkkk', 9),
---     (-1, '精选', '精选素材', 4),
---         (7, 'J1', 'jjjjjj', 3),
---     (-1, '人气', '人气素材', 3)
--- ;
---

+ 0 - 34
db/med_my_material.sql

@@ -1,34 +0,0 @@
--- /**
--- Source Server Version: 8.0.31
--- Source Database: backendsys
--- Date: 2023/05/23 17:09:22
--- */
---
--- DROP TABLE IF EXISTS `med_my_material`;
--- CREATE TABLE `med_my_material` (
---     PRIMARY KEY (`id`),
---     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
---     `user_id` BIGINT NOT NULL COMMENT '作者/用户ID',
---     `material_id` BIGINT COMMENT '素材ID',
---     `category_id` BIGINT NOT NULL COMMENT '素材分类ID',
---     `title` VARCHAR(255) NOT NULL COMMENT '标题',
---     `description` VARCHAR(500) COMMENT '描述',
---     `thumb` VARCHAR(500) COMMENT '缩略图',
---     `material_type` TINYINT(1) NOT NULL COMMENT '素材文件类型 (1图片, 2视频, 3音频, 4文案)',
---     `content` VARCHAR(10000) COMMENT '素材内容 (material_type: 4 时必填)',
---     `file` VARCHAR(500) COMMENT '素材文件 (material_type: 1,2,3 时必填)',
---     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
---     `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
---     INDEX `idx_title` (`title`),
---     INDEX `idx_description` (`description`),
---     INDEX `idx_category_id` (`category_id`)
--- ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='我的素材表';
---
--- INSERT INTO med_my_material(user_id, material_id, category_id, title, description, content, thumb, material_type, file) VALUES
---     (1, 1, 1, '测试素材A', 'aa', '', '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png'),
---     (1, 3, 7, '测试素材C', 'ccccc', '', '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png'),
---     (2, 3, 7, '测试素材333', 'ccccc', '', '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png'),
---     (2, 3, 7, '测试素材333', 'ccccc', '', '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png'),
---     (2, 3, 7, '测试素材333', 'ccccc', '', '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png'),
---     (2, 3, 7, '测试素材333', 'ccccc', '', '/uploads/20240222/20240222134224.png', 1, '/uploads/20240222/20240222134224.png')
--- ;

+ 52 - 0
src/main/java/com/backendsys/config/Mybatis/handler/StringToListTypeHandler.java

@@ -0,0 +1,52 @@
+package com.backendsys.config.Mybatis.handler;
+
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class StringToListTypeHandler extends BaseTypeHandler<List<Long>> {
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, List<Long> parameter, JdbcType jdbcType) throws SQLException {
+        throw new UnsupportedOperationException("Not implemented yet.");
+    }
+
+    @Override
+    public List<Long> getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        String roleIds = rs.getString(columnName);
+        return parseRoleIds(roleIds);
+    }
+
+    @Override
+    public List<Long> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        String roleIds = rs.getString(columnIndex);
+        return parseRoleIds(roleIds);
+    }
+
+    @Override
+    public List<Long> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        String roleIds = cs.getString(columnIndex);
+        return parseRoleIds(roleIds);
+    }
+
+    private List<Long> parseRoleIds(String roleIds) {
+        if (roleIds == null || roleIds.isEmpty()) {
+            return new ArrayList<>();
+        }
+        String[] parts = roleIds.split(",");
+        List<Long> result = new ArrayList<>();
+        for (String part : parts) {
+            try {
+                result.add(Long.parseLong(part.trim()));
+            } catch (NumberFormatException e) {
+                // Ignore invalid numbers
+            }
+        }
+        return result;
+    }
+}

+ 0 - 1
src/main/java/com/backendsys/entity/System/SysAgreementDTO.java

@@ -10,7 +10,6 @@
 //@Data
 //public class SysAgreementDTO {
 //
-//    public static interface List{}
 //    public static interface Detail{}
 //    public static interface Create{}
 //    public static interface Update{}

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

@@ -0,0 +1,36 @@
+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.NotEmpty;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import java.util.List;
+
+@Data
+@TableName("crt_drama_project")
+public class CrtDramaProject {
+
+    public static interface Detail{}
+    public static interface Create{}
+    public static interface Update{}
+    public static interface Delete{}
+
+    @TableId(type = IdType.AUTO)
+    private Long 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)
+    private List<Integer> storyboard_episode_nums;  // 集数 (子查询)
+
+    private Long crt_drama_lora_style_id;
+    private String crt_drama_lora_character_ids;
+    private String create_time;
+    private String update_time;
+
+}

+ 23 - 0
src/main/java/com/backendsys/modules/crt/entity/CrtDramaProjectSettings.java

@@ -0,0 +1,23 @@
+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 lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("crt_drama_project_settings")
+public class CrtDramaProjectSettings {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long crt_drama_project_id;
+    private Integer crt_drama_project_setting_type;
+    private String aspect_ratio;
+    private Long crt_model_id;
+    private Long crt_lora_style_id;
+    private Float crt_lora_style_strength;
+
+}

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

@@ -0,0 +1,50 @@
+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 lombok.Data;
+
+@Data
+@TableName("crt_drama_project_storyboard")
+public class CrtDramaProjectStoryboard {
+
+    public static interface Detail{}
+    public static interface Create{}
+    public static interface Update{}
+    public static interface Delete{}
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private Long user_id;
+    private Long crt_drama_project_id;              // 项目ID
+    private Integer episode_num;                    // 集数 (不超过999集)
+    private Integer sort;                           // 排序
+
+    private String story_prompt;                    // 分镜设计
+    private String story_framing;                   // 景别
+    private String story_scene;                     // 场景
+    private String story_weather_time;              // 天气/时间
+    private String crt_lora_figure_ids;             // 人物LoRA ID (创建时,跟随项目的人物LoRAID)(多个人物ID以逗号分隔)
+
+    private Integer param_image_count;              // 每次生成图片数量 (默认值:1,整数范围:1~4)
+    private Float param_prompt_weight;              // 提示词引导系数 (默认值:3.5,小数点后一位,范围:1~30)
+    private String param_sampling_method;           // 采样方法 (枚举: SamplingMethodEnums)(Euler: euler, DPM++2M: dpmpp_2m)
+    private Integer param_step_count;               // 步数 (默认值:20,整数范围:1~30)
+    private Integer param_random_seed;              // 随机种子 (默认值:1,范围:(1:随机, 2:自定义))
+    private String param_random_seed_custom;        // 随机种子自定义值 (长度: 0~64位整数)
+    private String text_to_image_prompt;            // 文生图提示词 (生图时必填)
+
+    private Integer param_video_reference_type;     // 生视频模式 (1:首尾帧模式, 2:多图参考模式)
+    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 String create_time;
+    private String update_time;
+
+
+}

+ 24 - 0
src/main/java/com/backendsys/modules/crt/entity/CrtDramaTask.java

@@ -0,0 +1,24 @@
+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 lombok.Data;
+
+@Data
+@TableName("crt_drama_task")
+public class CrtDramaTask {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long user_id;                       // 用户ID
+    private Long crt_drama_project_id;          // 项目ID
+    private String task_id;                     // 任务ID
+    private Integer task_type;                  // 任务类型 (1:图像, 2:视频)
+    private Integer task_status;                // 任务状态 (-1:未开始, 1:进行中, 2:成功, 3:失败)
+    private String task_status_msg;             // 任务状态信息,当任务失败时展示失败原因(如触发平台的内容风控等)
+    private String task_result;                 // 任务生成结果 (JSONString)(成功时,返回生成结果)
+    private String create_time;
+    private String update_time;
+
+}

+ 25 - 0
src/main/java/com/backendsys/modules/crt/enums/AspectRatioEnums.java

@@ -0,0 +1,25 @@
+package com.backendsys.modules.crt.enums;
+
+public enum AspectRatioEnums {
+
+    RATIO_16_9("16:9", "1280*720"),
+    RATIO_9_16("9:16", "720*1280"),
+    RATIO_1_1("1:1", "1024*1024")
+    ;
+
+    private final String key;
+    private final String value;
+
+    AspectRatioEnums(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+    public String getKey() {
+        return this.key;
+    }
+
+}

+ 26 - 0
src/main/java/com/backendsys/modules/crt/enums/DramaProjectSettingType.java

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

+ 28 - 0
src/main/java/com/backendsys/modules/crt/enums/GenerateImageStatusEnums.java

@@ -0,0 +1,28 @@
+package com.backendsys.modules.crt.enums;
+
+/**
+ * 生图状态
+ */
+public enum GenerateImageStatusEnums {
+
+    WAIT(-1, "未生图"),
+    FAILED(1, "生成中"),
+    SUCCESS(2, "已生图")
+    ;
+
+    private final Integer key;
+    private final String value;
+
+    GenerateImageStatusEnums(Integer key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+    public Integer getKey() {
+        return this.key;
+    }
+
+}

+ 28 - 0
src/main/java/com/backendsys/modules/crt/enums/GenerateVideoStatusEnums.java

@@ -0,0 +1,28 @@
+package com.backendsys.modules.crt.enums;
+
+/**
+ * 生视频状态
+ */
+public enum GenerateVideoStatusEnums {
+
+    WAIT(-1, "未生视频"),
+    FAILED(1, "生成中"),
+    SUCCESS(2, "已生视频")
+    ;
+
+    private final Integer key;
+    private final String value;
+
+    GenerateVideoStatusEnums(Integer key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+    public Integer getKey() {
+        return this.key;
+    }
+
+}

+ 27 - 0
src/main/java/com/backendsys/modules/crt/enums/SamplingMethodEnums.java

@@ -0,0 +1,27 @@
+package com.backendsys.modules.crt.enums;
+
+/**
+ * 采样方法
+ */
+public enum SamplingMethodEnums {
+
+    EULER("Euler", "DPM++2M"),
+    DPM2M("DPM++2M", "dpmpp_2m")
+    ;
+
+    private final String key;
+    private final String value;
+
+    SamplingMethodEnums(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+    public String getKey() {
+        return this.key;
+    }
+
+}

+ 28 - 0
src/main/java/com/backendsys/modules/crt/enums/TaskStatusEnums.java

@@ -0,0 +1,28 @@
+package com.backendsys.modules.crt.enums;
+
+/**
+ * 任务状态
+ */
+public enum TaskStatusEnums {
+
+    WAIT(-1, "未开始"),
+    FAILED(1, "进行中"),
+    SUCCESS(2, "成功")
+    ;
+
+    private final Integer key;
+    private final String value;
+
+    TaskStatusEnums(Integer key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+    public Integer getKey() {
+        return this.key;
+    }
+
+}

+ 27 - 0
src/main/java/com/backendsys/modules/crt/enums/TaskTypeEnums.java

@@ -0,0 +1,27 @@
+package com.backendsys.modules.crt.enums;
+
+/**
+ * 任务类型
+ */
+public enum TaskTypeEnums {
+
+    IMAGE(1, "图像"),
+    VIDEO(2, "视频")
+    ;
+
+    private final Integer key;
+    private final String value;
+
+    TaskTypeEnums(Integer key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+    public Integer getKey() {
+        return this.key;
+    }
+
+}

+ 0 - 1
src/main/java/com/backendsys/modules/system/entity/SysAgreement.java

@@ -15,7 +15,6 @@ import org.hibernate.validator.constraints.Range;
 @TableName("sys_agreement")
 public class SysAgreement {
 
-    public static interface List{}
     public static interface Detail{}
     public static interface Create{}
     public static interface Update{}

+ 4 - 4
src/main/resources/mapper/system/SysUserInfoDao.xml

@@ -49,15 +49,14 @@
         <result property="create_time" column="create_time" />
         <result property="update_time" column="update_time" />
         <result property="del_flag" column="del_flag" javaType="java.lang.Integer" />
-        <collection property="role_ids" javaType="java.util.List" ofType="java.lang.Long" column="role_id">
-            <id property="role_id" column="role_id" />
-        </collection>
+        <result property="role_ids" column="role_ids" javaType="java.util.List" jdbcType="VARCHAR"
+            typeHandler="com.backendsys.config.Mybatis.handler.StringToListTypeHandler" />
     </resultMap>
 
     <select id="selectUserList" resultMap="resultMapUserList">
         SELECT
             <include refid="includeUser" />,
-            urr.role_id role_id,
+            GROUP_CONCAT(DISTINCT urr.role_id) AS role_ids,
             COALESCE(ui.integral, 0) integral
         FROM sys_user_info uf
         LEFT JOIN sys_user u ON u.id = uf.user_id
@@ -78,6 +77,7 @@
             </if>
             <if test="is_super != null and is_super != ''">AND uf.is_super = #{is_super}</if>
         </where>
+        GROUP BY uf.id
         ORDER BY uf.create_time DESC
     </select>