Przeglądaj źródła

Dev project delete

tsurumure 2 miesięcy temu
rodzic
commit
9aaa06107e

+ 1 - 0
db/sys_user_role_permission.sql

@@ -50,6 +50,7 @@ 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),
 
 
 

+ 1 - 1
db/sys_user_role_permission_relation.sql

@@ -108,7 +108,7 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
             (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'), (1, '36.2.3'),
 
 
 

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

@@ -1,8 +1,5 @@
 package com.backendsys.modules.crt.controller;
 
-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;
@@ -19,12 +16,9 @@ import org.springframework.web.bind.annotation.*;
 @Tag(name = "短剧创作-项目管理")
 public class CrtDramaProjectController {
 
-    @Autowired
-    private SecurityUtil securityUtil;
     @Autowired
     private CrtDramaProjectService crtDramaProjectService;
 
-
     @Operation(summary = "获取短剧创作-项目列表 (全权限)")
     @PreAuthorize("@sr.hasPermission('36.1.1')")
     @GetMapping("/api/crt/drama/getDramaProjectAllList")
@@ -56,4 +50,10 @@ public class CrtDramaProjectController {
         return Result.success().put("data", crtDramaProjectService.updateCrtDramaProject(crtDramaProject));
     }
 
+    @Operation(summary = "获取短剧创作-删除项目")
+    @DeleteMapping("/api/crt/drama/deleteDramaProject")
+    public Result deleteDramaProject(@Validated(CrtDramaProject.Delete.class) @RequestBody CrtDramaProject crtDramaProject) {
+        return Result.success().put("data", crtDramaProjectService.deleteCrtDramaProject(crtDramaProject));
+    }
+
 }

+ 4 - 14
src/main/java/com/backendsys/modules/crt/controller/CrtDramaProjectStoryboardController.java

@@ -12,10 +12,7 @@ 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;
+import org.springframework.web.bind.annotation.*;
 
 @Validated
 @RestController
@@ -41,20 +38,13 @@ public class CrtDramaProjectStoryboardController {
         return Result.success().put("data", crtDramaProjectStoryboardService.createStoryboard(crtDramaProject));
     }
 
-
-
-
-
-
-    @Operation(summary = "编辑分镜设置")
+    @Operation(summary = "编辑分镜配置")
     @PreAuthorize("@sr.hasPermission('36.2.3')")
-    @PostMapping("/api/crt/drama/updateStoryboardSettings")
-    public Result updateStoryboardSettings(@Validated(CrtDramaProjectSettings.UpdateImageSettings.class) @RequestBody CrtDramaProjectSettings crtDramaProjectSettings) {
+    @PutMapping("/api/crt/drama/updateStoryboardSettings")
+    public Result updateStoryboardSettings(@Validated(CrtDramaProjectSettings.UpdateSettings.class) @RequestBody CrtDramaProjectSettings crtDramaProjectSettings) {
         return Result.success().put("data", crtDramaProjectStoryboardService.updateStoryboardSettings(crtDramaProjectSettings));
     }
 
-    // 编辑生视频设置
-
 
 
 

+ 1 - 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, Update.class })
+    @NotNull(message = "项目ID不能为空", groups = { CreateStoryboard.class, Update.class, Delete.class })
     private Long drama_project_id;
 
     private Long user_id;

+ 14 - 6
src/main/java/com/backendsys/modules/crt/entity/CrtDramaProjectSettings.java

@@ -1,32 +1,40 @@
 package com.backendsys.modules.crt.entity;
 
+import com.backendsys.entity.validator.RangeArray;
+import com.backendsys.entity.validator.RangeStringArray;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import jakarta.validation.constraints.Max;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
+import javax.validation.constraints.Min;
 import java.math.BigDecimal;
 
 @Data
 @TableName("crt_drama_project_settings")
 public class CrtDramaProjectSettings {
 
-    public static interface UpdateImageSettings{}
-    public static interface UpdateVideoSettings{}
+    public static interface UpdateSettings{}
 
     @TableId(type = IdType.AUTO)
     private Long id;
 
-    @NotNull(message = "项目ID不能空", groups = { UpdateImageSettings.class, UpdateVideoSettings.class })
+    @NotNull(message = "项目ID不能空", groups = { UpdateSettings.class })
     private Long drama_project_id;
+    @NotNull(message = "项目配置类型不能空", groups = { UpdateSettings.class })
+    @RangeArray(message="项目配置类型取值有误,范围应是(1:生图配置, 2:生视频配置)", value = {"1", "2"}, groups = { UpdateSettings.class })
     private Integer drama_project_setting_type;
-    @NotNull(message = "画面比例不能空", groups = { UpdateImageSettings.class, UpdateVideoSettings.class })
+
+    @NotNull(message = "画面比例不能空", groups = { UpdateSettings.class })
+    @RangeStringArray(message="画面比例取值有误,范围应是(16:9, 9:16, 1:1)", value = {"16:9", "9:16", "1:1"}, groups = { UpdateSettings.class })
     private String aspect_ratio;
-    @NotNull(message = "模型不能为空", groups = { UpdateImageSettings.class })
-    private Long model_id;
 
+    private Long model_id;
     private Long lora_style_id;             // 风格LoRA ID
+    @Min(value = 0, message = "风格强度取值范围应在 0-2 之间 (保留小数点后一位)", groups = { UpdateSettings.class })
+    @Max(value = 2, message = "风格强度取值范围应在 0-2 之间 (保留小数点后一位)", groups = { UpdateSettings.class })
     private Float lora_style_strength;      // 风格强度
 
 }

+ 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);
 
 }

+ 24 - 31
src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectServiceImpl.java

@@ -1,17 +1,15 @@
 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.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.enums.AspectRatioEnums;
 import com.backendsys.modules.crt.enums.ProjectSettingTypeEnums;
 import com.backendsys.modules.crt.service.CrtDramaProjectService;
+import com.backendsys.modules.crt.utils.CrtUtil;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
@@ -27,11 +25,13 @@ import java.util.Map;
 public class CrtDramaProjectServiceImpl implements CrtDramaProjectService {
 
     @Autowired
-    private SecurityUtil securityUtil;
+    private CrtUtil crtUtil;
     @Autowired
     private CrtDramaProjectDao crtDramaProjectDao;
     @Autowired
     private CrtDramaProjectSettingsDao crtDramaProjectSettingsDao;
+    @Autowired
+    private CrtDramaProjectStoryboardDao crtDramaProjectStoryboardDao;
 
     // 获取短剧创作-项目列表
     @Override
@@ -65,10 +65,10 @@ public class CrtDramaProjectServiceImpl implements CrtDramaProjectService {
         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());                            // 画面比例
+        settings_video.setAspect_ratio(AspectRatioEnums.RATIO_16_9.getKey());                            // 画面比例
         crtDramaProjectSettingsDao.insert(settings_video);
 
-        return Map.of("project_id", project_id);
+        return Map.of("drama_project_id", project_id);
     }
 
     /**
@@ -77,29 +77,13 @@ public class CrtDramaProjectServiceImpl implements CrtDramaProjectService {
     @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());
-
-
-
+        // 判断项目是否存在,并且是否具备操作权限
+        crtUtil.checkProject(crtDramaProject.getDrama_project_id(), "36.1.4");
 
+        // [DB] 更新项目
+        crtDramaProjectDao.update(crtDramaProject, new LambdaQueryWrapper<CrtDramaProject>()
+                .eq(CrtDramaProject::getId, crtDramaProject.getDrama_project_id()));
+        return Map.of("drama_project_id", crtDramaProject.getDrama_project_id());
 
     }
 
@@ -110,9 +94,18 @@ public class CrtDramaProjectServiceImpl implements CrtDramaProjectService {
     @Transactional(rollbackFor = Exception.class)
     public Map<String, Object> deleteCrtDramaProject(CrtDramaProject crtDramaProject) {
 
+        // 判断项目是否存在,并且是否具备操作权限
+        crtUtil.checkProject(crtDramaProject.getDrama_project_id(), "36.1.6");
 
+        // [DB] 删除 [项目],同时删除 [项目配置]、[项目分集/分镜]
+        Long project_id = crtDramaProject.getDrama_project_id();
+        crtDramaProjectDao.delete(new LambdaQueryWrapper<CrtDramaProject>().eq(CrtDramaProject::getId, project_id));
+        crtDramaProjectSettingsDao.delete(new LambdaQueryWrapper<CrtDramaProjectSettings>()
+            .eq(CrtDramaProjectSettings::getDrama_project_id, project_id));
+        crtDramaProjectStoryboardDao.delete(new LambdaQueryWrapper<CrtDramaProjectStoryboard>()
+            .eq(CrtDramaProjectStoryboard::getDrama_project_id, project_id));
 
-        return Map.of("project_id", crtDramaProject.getDrama_project_id());
+        return Map.of("drama_project_id", crtDramaProject.getDrama_project_id());
     }
 
 }

+ 27 - 2
src/main/java/com/backendsys/modules/crt/service/impl/CrtDramaProjectStoryboardServiceImpl.java

@@ -9,6 +9,7 @@ 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.backendsys.modules.crt.utils.CrtUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -20,6 +21,8 @@ import java.util.Map;
 @Service
 public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStoryboardService {
 
+    @Autowired
+    private CrtUtil crtUtil;
     @Autowired
     private CrtDramaProjectDao crtDramaProjectDao;
     @Autowired
@@ -107,13 +110,35 @@ public class CrtDramaProjectStoryboardServiceImpl implements CrtDramaProjectStor
 
 
     /**
-     * 编辑分镜
+     * 编辑分镜
      */
     @Override
     public Map<String, Object> updateStoryboardSettings(CrtDramaProjectSettings crtDramaProjectSettings) {
 
+        // 判断项目是否存在,并且是否具备操作权限
+        crtUtil.checkProject(crtDramaProjectSettings.getDrama_project_id(), "36.1.5");
+
+        // 项目配置类型 (1: 生图配置, 2: 生视频配置)
+        Integer setting_type = crtDramaProjectSettings.getDrama_project_setting_type();
+
+        // 查询条件
+        LambdaQueryWrapper<CrtDramaProjectSettings> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CrtDramaProjectSettings::getDrama_project_id, crtDramaProjectSettings.getDrama_project_id());
+        wrapper.eq(CrtDramaProjectSettings::getDrama_project_setting_type, setting_type);
+
+        // 更新字段
+        CrtDramaProjectSettings entity = new CrtDramaProjectSettings();
+        entity.setAspect_ratio(crtDramaProjectSettings.getAspect_ratio());
+
+        // 生图配置:基础模型、风格LoRA、风格LoRA强度
+        if (setting_type == 1) {
+            entity.setModel_id(crtDramaProjectSettings.getModel_id());
+            entity.setLora_style_id(crtDramaProjectSettings.getLora_style_id());
+            entity.setLora_style_strength(crtDramaProjectSettings.getLora_style_strength());
+        }
 
-        return null;
+        crtDramaProjectSettingsDao.update(entity, wrapper);
+        return Map.of("drama_project_id", crtDramaProjectSettings.getDrama_project_id());
     }
 
 }

+ 30 - 0
src/main/java/com/backendsys/modules/crt/utils/CrtUtil.java

@@ -0,0 +1,30 @@
+package com.backendsys.modules.crt.utils;
+
+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.entity.CrtDramaProject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CrtUtil {
+
+    @Autowired
+    private SecurityUtil securityUtil;
+    @Autowired
+    private CrtDramaProjectDao crtDramaProjectDao;
+
+    /**
+     * 判断项目是否存在,并且是否具备操作权限
+     */
+    public void checkProject(Long project_id, String permission) {
+        CrtDramaProject detail = crtDramaProjectDao.selectById(project_id);
+        if (detail == null)  throw new CustException("项目不存在");
+        if (detail.getUser_id() != SecurityUtil.getUserId() && !securityUtil.hasPermission(permission)) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+    }
+
+}

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

@@ -4,6 +4,7 @@
 
     <sql id="includeCrtDramaProject">
         p.id,
+        p.id drama_project_id,
         p.user_id,
         p.project_name,
         COALESCE(p.drama_lora_style_id, '') drama_lora_style_id,
@@ -15,6 +16,7 @@
 
     <resultMap id="resultMapCrtDramaProject" type="java.util.LinkedHashMap">
         <id property="id" column="id" jdbcType="BIGINT" />
+        <result property="drama_project_id" column="drama_project_id" javaType="java.lang.Long" />
         <result property="user_id" column="user_id" javaType="java.lang.Long" />
         <result property="project_name" column="project_name" />
         <result property="storyboard_episode_nums" column="storyboard_episode_nums" javaType="java.util.List"