Browse Source

Merge branch 'dev-yhq'

tsurumure 1 tháng trước cách đây
mục cha
commit
1a7f825b8c
21 tập tin đã thay đổi với 174 bổ sung70 xóa
  1. 14 15
      db/ai_material.sql
  2. 9 7
      db/sys_user_role.sql
  3. 4 2
      db/sys_user_role_menu.sql
  4. 1 0
      db/sys_user_role_permission.sql
  5. 7 4
      db/sys_user_role_permission_relation.sql
  6. 1 1
      src/main/java/com/backendsys/modules/material/controller/MaterialCategoryController.java
  7. 1 3
      src/main/java/com/backendsys/modules/material/entity/Material.java
  8. 3 0
      src/main/java/com/backendsys/modules/material/entity/MaterialCategory.java
  9. 2 4
      src/main/java/com/backendsys/modules/material/service/impl/MaterialServiceImpl.java
  10. 19 0
      src/main/java/com/backendsys/modules/system/controller/SysUserController.java
  11. 2 0
      src/main/java/com/backendsys/modules/system/dao/SysUserRoleRelationDao.java
  12. 2 0
      src/main/java/com/backendsys/modules/system/entity/SysUserRole.java
  13. 18 0
      src/main/java/com/backendsys/modules/system/entity/SysUserRoleInfo.java
  14. 11 0
      src/main/java/com/backendsys/modules/system/entity/SysUserRoleRelation.java
  15. 3 4
      src/main/java/com/backendsys/modules/system/service/SysUserService.java
  16. 29 0
      src/main/java/com/backendsys/modules/system/service/impl/SysUserServiceImpl.java
  17. 12 9
      src/main/resources/mapper/ai/material/MaterialCategoryDao.xml
  18. 5 10
      src/main/resources/mapper/ai/material/MaterialDao.xml
  19. 12 11
      src/main/resources/mapper/system/SysUserDao.xml
  20. 10 0
      src/main/resources/mapper/system/SysUserRoleDao.xml
  21. 9 0
      src/main/resources/mapper/system/SysUserRoleRelationDao.xml

+ 14 - 15
db/ai_material.sql

@@ -14,8 +14,7 @@ CREATE TABLE `ai_material` (
     `material_name` VARCHAR(100) NOT NULL COMMENT '素材名称',
     `image_thumb_url` VARCHAR(1000) COMMENT '缩略图',
     `image_url` VARCHAR(1000) COMMENT '高清图',
-    `fla_url` VARCHAR(1000) COMMENT 'FLA文件',
-    `psd_url` VARCHAR(1000) COMMENT 'PSD文件',
+    `file_url` VARCHAR(1000) COMMENT '文件地址',
     `is_copyright` TINYINT DEFAULT '-1' COMMENT '是否有版权 (-1否, 1是)',
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
@@ -25,18 +24,18 @@ CREATE TABLE `ai_material` (
     INDEX `idx_material_name` (`material_name`)
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='素材表';
 
-INSERT INTO ai_material(user_id, category_id, tag_ids, material_name, image_thumb_url, image_url, fla_url, psd_url, is_copyright, create_time) VALUES
-    (1, 1, '1,2', '御姐魔女-1', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:01'),
-    (1, 1, '1,2', '御姐魔女-2', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:02'),
-    (1, 1, '1,2', '御姐魔女-3', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:03'),
-    (1, 1, '1,2', '御姐魔女-4', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:04'),
-    (1, 1, '1,2', '御姐魔女-5', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:05'),
-    (1, 1, '1,2', '御姐魔女-6', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:06'),
-    (1, 1, '1,2', '御姐魔女-7', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:07'),
-    (1, 1, '4,5', '御姐魔女-8', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:08'),
-    (1, 1, '3,4,5', '御姐魔女-9', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:09'),
-    (1, 1, '3', '御姐魔女-10', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:10'),
-    (1, 2, '1,2', '御姐魔女-11', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 'https://www.xxx.com/xx.psd', 1, '2025-07-28 08:30:11'),
-    (1, 1, '1,2', '竹屋内', 'https://cos.daogu.ai/temp/d2361395-6e39-4a01-8c3b-1c79095f4391.png?imageMogr2/thumbnail/315x180/pad/1/color/I2Y4ZjhmOA==', 'https://cos.daogu.ai/temp/d2361395-6e39-4a01-8c3b-1c79095f4391.png', 'https://cos.daogu.ai/temp/2d0e951d-d894-4f88-8904-bf9f1d4797f5.fla', 'https://cos.daogu.ai/temp/aba04bf3-fa42-48d7-923f-b223b7aee22c.psd', 1, '2025-07-30 08:30:00')
+INSERT INTO ai_material(user_id, category_id, tag_ids, material_name, image_thumb_url, image_url, file_url, is_copyright, create_time) VALUES
+    (1, 1, '1,2', '御姐魔女-1', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:01'),
+    (1, 1, '1,2', '御姐魔女-2', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:02'),
+    (1, 1, '1,2', '御姐魔女-3', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:03'),
+    (1, 1, '1,2', '御姐魔女-4', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:04'),
+    (1, 1, '1,2', '御姐魔女-5', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:05'),
+    (1, 1, '1,2', '御姐魔女-6', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:06'),
+    (1, 1, '1,2', '御姐魔女-7', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:07'),
+    (1, 1, '4,5', '御姐魔女-8', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:08'),
+    (1, 1, '3,4,5', '御姐魔女-9', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:09'),
+    (1, 1, '3', '御姐魔女-10', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:10'),
+    (1, 2, '1,2', '御姐魔女-11', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.png', 'https://www.xxx.com/xx.fla', 1, '2025-07-28 08:30:11'),
+    (1, 1, '1,2', '竹屋内', 'https://cos.daogu.ai/temp/d2361395-6e39-4a01-8c3b-1c79095f4391.png?imageMogr2/thumbnail/315x180/pad/1/color/I2Y4ZjhmOA==', 'https://cos.daogu.ai/temp/d2361395-6e39-4a01-8c3b-1c79095f4391.png', 'https://cos.daogu.ai/temp/2d0e951d-d894-4f88-8904-bf9f1d4797f5.fla', 1, '2025-07-30 08:30:00')
 ;
 

+ 9 - 7
db/sys_user_role.sql

@@ -8,22 +8,24 @@ DROP TABLE IF EXISTS `sys_user_role`;
 CREATE TABLE `sys_user_role` (
     PRIMARY KEY (`id`),
     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
+    `role_sign` VARCHAR(20) COMMENT '角色标志',
     `role_name` VARCHAR(20) NOT NULL COMMENT '角色名称',
     `role_description` VARCHAR(200) COMMENT '角色描述',
     `login_default_page` VARCHAR(255) DEFAULT '/' COMMENT '默认登录路由',
     `sort` INT DEFAULT '1' COMMENT '排序',
     `status` TINYINT(1) DEFAULT '1' COMMENT '角色状态(1正常 2停用)',
+    UNIQUE KEY (`role_sign`),
     UNIQUE KEY (`role_name`),
     INDEX `idx_nickname` (`role_name`)
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统用户角色表';
 
 # ALTER TABLE sys_user_role_module_relation DROP FOREIGN KEY sys_user_role_module_relation_ibfk_1;
 
-INSERT INTO sys_user_role(role_name, role_description, login_default_page, sort) VALUES
-    ('开发者', '全部权限', '/', 1),
-    ('管理员', '全部功能权限', '/', 2),
-    ('普通用户', '基础权限', '/', 3),
-    ('运营-素材-管理员', '素材管理全权限 (允许查看/下载/上传/删除)', '/material/materialList?lora_id=1', 4),
-    ('运营-素材-普通用户', '允许查看/下载', '/material/materialList?lora_id=1', 5),
-    ('运营-素材-游客', '允许查看', '/material/materialList?lora_id=1', 6)
+INSERT INTO sys_user_role(role_sign, role_name, role_description, login_default_page, sort) VALUES
+    ('SUPERADMIN', '开发者', '全部权限', '/', 1),
+    ('ADMIN', '管理员', '全部功能权限', '/', 2),
+    ('DEFAULT', '普通用户', '基础权限', '/', 3),
+    ('MATERIAL_ADMIN', '运营-素材-管理员', '素材管理全权限 (允许查看/下载/上传/删除)', '/material/materialList?lora_id=1', 4),
+    ('MATERIAL_USER', '运营-素材-普通用户', '允许查看/下载', '/material/materialList?lora_id=1', 5),
+    ('MATERIAL_GUEST', '运营-素材-游客', '允许查看', '/material/materialList?lora_id=1', 6)
 ;

+ 4 - 2
db/sys_user_role_menu.sql

@@ -43,8 +43,10 @@ INSERT INTO sys_user_role_menu(id, parent_id, menu_name, menu_name_en, type, pat
     (11, -1, 'AI成片', 'AI Video', 1, '/ai/generate/video/broadcast/my/broadcast', '', '{}', 'VideoCamera', '34', 909),
 
 
-    (20, -1, '素材中心', 'Material', 1, '/material/materialList', '/src/views/material/materialList.vue', '{}', 'MessageBox', '20', 13),
-#     (20, -1, '素材管理', 'Material', 1, '/material', '', '{}', 'MessageBox', '20', 13),
+
+    (20, -1, '素材管理', 'Material', 1, '/material', '', '{}', 'MessageBox', '20', 13),
+    (21, 20, '素材中心', 'Material Center', 1, '/material/materialList', '/src/views/material/materialList.vue', '{}', null, '20.1', 13),
+    (22, 20, '素材用户', 'Material User', 1, '/material/materialUserList', '/src/views/material/materialUserList.vue', '{}', null, '20.1', 12),
 #     (21, 20, '素材列表', 'Material List', 1, '/material/materialList', '/src/views/material/materialList.vue', '{}', null, '20.1', 13),
 #     (21, 20, '沙雕素材', 'Material Sa Diao', 1, '/material/materialList?lora_id=1', '/src/views/material/materialList.vue', '{}', null, '20.1', 13),
 #     (22, 20, '简笔画素材', 'Material Simple', 1, '/material/materialList?lora_id=2', '/src/views/material/materialList.vue', '{}', null, '20.1', 13),

+ 1 - 0
db/sys_user_role_permission.sql

@@ -73,6 +73,7 @@ INSERT INTO sys_user_role_permission(id, parent_id, permission_name, sort) VALUE
                 ('3.2.3.2', '3.2', '编辑他人用户信息', null),
                 ('3.2.3.3', '3.2', '编辑用户密码', null),
                 ('3.2.3.4', '3.2', '重置用户密码', null),
+                ('3.2.3.5', '3.2', '编辑用户角色绑定', null),
             ('3.2.4', '3.2', '删除用户', null),
             ('3.2.6', '3.2', '审核用户', null),
             ('3.2.7', '3.2', '踢出用户', null),

+ 7 - 4
db/sys_user_role_permission_relation.sql

@@ -26,7 +26,7 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
         (1, '3.2'),
             (1, '3.2.1'), (1, '3.2.1.2'), (1, '3.2.2'),
             (1, '3.2.3'),
-                (1, '3.2.3.2'), (1, '3.2.3.3'), (1, '3.2.3.4'),
+                (1, '3.2.3.2'), (1, '3.2.3.3'), (1, '3.2.3.4'), (1, '3.2.3.5'),
             (1, '3.2.4'),
             (1, '3.2.6'),
             (1, '3.2.7'),
@@ -171,7 +171,8 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
 
     # 运营-素材管理者
     (4, '1.1.2'), (4, '1.1.3'), (4, '1.1.6'),
-    (4, '3.5.1'),
+#     (4, '3.2.1'),
+    (4, '3.2.3.3'), (4, '3.5.1'),
     (4, '20'),
         (4, '20.1'),
             (4, '20.1.1'), (4, '20.1.2'), (4, '20.1.3'), (4, '20.1.4'),
@@ -180,7 +181,8 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
 
     # 运营-素材使用者
     (5, '1.1.2'), (5, '1.1.6'),
-    (5, '3.5.1'),
+#     (5, '3.2.1'),
+    (5, '3.2.3.3'), (5, '3.5.1'),
     (5, '20'),
         (5, '20.1'),
             (5, '20.1.1'),
@@ -188,7 +190,8 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
         (5, '20.3'),
 
     # 运营-素材游号
-    (6, '3.5.1'),
+#     (6, '3.2.1'),
+    (6, '3.2.3.3'), (6, '3.5.1'),
     (6, '20'),
         (6, '20.1'),
     (6, '20.2'),

+ 1 - 1
src/main/java/com/backendsys/modules/material/controller/MaterialCategoryController.java

@@ -28,7 +28,7 @@ public class MaterialCategoryController {
     @Operation(summary = "获取素材分类列表(下拉)")
 //    @PreAuthorize("@sr.hasPermission('20.2')")
     @GetMapping("/api/material/getMaterialCategoryPopover")
-    public Result getMaterialCategoryPopover(@Validated(MaterialCategory.CategoryList.class) MaterialCategory materialCategory) {
+    public Result getMaterialCategoryPopover(MaterialCategory materialCategory) {
         return Result.success().put("data", materialCategoryService.selectMaterialCategoryPopover(materialCategory));
     }
 

+ 1 - 3
src/main/java/com/backendsys/modules/material/entity/Material.java

@@ -56,9 +56,7 @@ public class Material {
     @Size(max = 1000, message = "高清图路径长度不超过 {max} 个字符", groups = { Create.class, Update.class })
     private String image_url;
     @Size(max = 1000, message = "FLA路径长度不超过 {max} 个字符", groups = { Create.class, Update.class })
-    private String fla_url;
-    @Size(max = 1000, message = "PSD路径长度不超过 {max} 个字符", groups = { Create.class, Update.class })
-    private String psd_url;
+    private String file_url;
 
     @RangeArray(message="是否有版权,范围应是(-1否, 1是)", value = {"-1", "1"}, groups = { Create.class, Update.class })
     private Integer is_copyright;

+ 3 - 0
src/main/java/com/backendsys/modules/material/entity/MaterialCategory.java

@@ -30,6 +30,9 @@ public class MaterialCategory {
     @NotNull(message="风格ID不能为空", groups = { CategoryList.class, Detail.class, Create.class, Update.class })
     private Long lora_id;
 
+    @TableField(exist = false)
+    private String lora_name;
+
     @Size(max = 100, message = "分类名称长度不超过 {max} 个字符", groups = { Create.class, Update.class })
     @NotEmpty(message="分类名称不能为空", groups = { Create.class, Update.class })
     private String category_name;

+ 2 - 4
src/main/java/com/backendsys/modules/material/service/impl/MaterialServiceImpl.java

@@ -165,12 +165,10 @@ public class MaterialServiceImpl implements MaterialService {
 
         // 删除的时候,同时删除对象存储中的素材图片 (异步)
         ObjectKeyEntity image_url_object = objectKeyUtil.urlToObjectKey(detail.getImage_url());
-        ObjectKeyEntity fla_url_object = objectKeyUtil.urlToObjectKey(detail.getFla_url());
-        ObjectKeyEntity psd_url_object = objectKeyUtil.urlToObjectKey(detail.getPsd_url());
+        ObjectKeyEntity file_url_object = objectKeyUtil.urlToObjectKey(detail.getFile_url());
         CompletableFuture.runAsync(() -> {
             sysFileService.deleteObject(image_url_object.getObject_key(), image_url_object.getTarget());
-            sysFileService.deleteObject(fla_url_object.getObject_key(), fla_url_object.getTarget());
-            sysFileService.deleteObject(psd_url_object.getObject_key(), psd_url_object.getTarget());
+            sysFileService.deleteObject(file_url_object.getObject_key(), file_url_object.getTarget());
         });
 
         materialDao.deleteMaterial(material);

+ 19 - 0
src/main/java/com/backendsys/modules/system/controller/SysUserController.java

@@ -7,6 +7,7 @@ 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.system.entity.SysUserDTO;
+import com.backendsys.modules.system.entity.SysUserRoleRelation;
 import com.backendsys.modules.system.service.SysUserService;
 import com.backendsys.utils.response.PageEntity;
 import io.swagger.v3.oas.annotations.Operation;
@@ -112,6 +113,24 @@ public class SysUserController {
         return Result.success().put("data", sysUserService.updateUserInfo(sysUserDTO));
     }
 
+    @SysLog("编辑系统用户角色绑定")
+    @Operation(summary = "编辑系统用户角色绑定")
+    @PreAuthorize("@sr.hasPermission('3.2.3.5')")
+    @PutMapping("/api/system/user/updateUserRoleInfo")
+    public Result updateUserRoleInfo(@Validated(SysUserRoleRelation.Update.class) @RequestBody SysUserRoleRelation sysUserRoleRelation) {
+
+        // - 不传 user_id 时,修改目标为 当前用户
+        Long user_id = sysUserRoleRelation.getUser_id();
+        if (ObjectUtil.isEmpty(user_id)) {
+            user_id = SecurityUtil.getUserId();
+            sysUserRoleRelation.setUser_id(user_id);
+        } else if (!SecurityUtil.getUserId().equals(1L) && user_id.equals(1L)) {
+            throw new CustException("不能编辑超管账号");
+        }
+
+        return Result.success().put("data", sysUserService.updateUserRoleRelation(sysUserRoleRelation));
+    }
+
     @SysLog("编辑系统用户密码")
     @Operation(summary = "编辑系统用户密码")
     @PreAuthorize("@sr.hasPermission('3.2.3.3')")

+ 2 - 0
src/main/java/com/backendsys/modules/system/dao/SysUserRoleRelationDao.java

@@ -11,4 +11,6 @@ public interface SysUserRoleRelationDao extends BaseMapper<SysUserRoleRelation>
 
     List<Long> selectUserRoleIds(Long user_id);
 
+    int insertBatch(Long user_id, List<Long> role_ids);
+
 }

+ 2 - 0
src/main/java/com/backendsys/modules/system/entity/SysUserRole.java

@@ -28,6 +28,8 @@ public class SysUserRole {
     @TableField("id")
     private Long role_id;
 
+    private String role_sign;
+
     @Size(min = 2, max = 50, message = "角色名称长度在 {min}-{max} 字符", groups = { Create.class, Update.class })
     private String role_name;
 

+ 18 - 0
src/main/java/com/backendsys/modules/system/entity/SysUserRoleInfo.java

@@ -0,0 +1,18 @@
+package com.backendsys.modules.system.entity;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SysUserRoleInfo {
+
+    public static interface Update{}
+
+    @NotNull(message="role_ids 不能为空", groups = { Update.class })
+    private List<Long> role_ids;
+
+    private Long user_id;
+
+}

+ 11 - 0
src/main/java/com/backendsys/modules/system/entity/SysUserRoleRelation.java

@@ -1,15 +1,26 @@
 package com.backendsys.modules.system.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;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @TableName("sys_user_role_relation")
 public class SysUserRoleRelation {
+
+    public static interface Update{}
+
     @TableId(type = IdType.AUTO)
     private Long id;
     private Long user_id;
     private Long role_id;
+
+    @TableField(exist = false)
+    @NotNull(message="role_ids 不能为空", groups = { Update.class })
+    private List<Long> role_ids;
 }

+ 3 - 4
src/main/java/com/backendsys/modules/system/service/SysUserService.java

@@ -1,9 +1,6 @@
 package com.backendsys.modules.system.service;
 
-import com.backendsys.modules.system.entity.SysUser;
-import com.backendsys.modules.system.entity.SysUserDTO;
-import com.backendsys.modules.system.entity.SysUserInfo;
-import com.backendsys.modules.system.entity.SysUserInfoSimple;
+import com.backendsys.modules.system.entity.*;
 import com.backendsys.utils.response.PageEntity;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -29,6 +26,8 @@ public interface SysUserService extends IService<SysUser> {
     Map<String, Object> insertUser(SysUserDTO sysUserDTO);
     // 编辑系统用户信息
     Map<String, Object> updateUserInfo(SysUserDTO sysUserDTO);
+    // 编辑系统用户角色绑定
+    Map<String, Object> updateUserRoleRelation(SysUserRoleRelation sysUserRoleRelation);
     // 编辑系统用户密码
     Map<String, Object> updateUserPassword(SysUserDTO sysUserDTO);
     // 重置系统用户密码

+ 29 - 0
src/main/java/com/backendsys/modules/system/service/impl/SysUserServiceImpl.java

@@ -289,6 +289,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUser> impleme
                 sysUserDTO.setLast_login_uuid("");
             }
 
+            System.out.println("sysUserDTO = " + sysUserDTO);
+
             sysUserDao.updateUserInfo(sysUserDTO);
 
             return Map.of("user_id", sysUserDTO.getUser_id());
@@ -297,6 +299,33 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUser> impleme
         } finally { lock.unlock(); }
     }
 
+
+    /**
+     * 编辑系统用户角色绑定
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> updateUserRoleRelation(SysUserRoleRelation sysUserRoleRelation) {
+        RLock lock = redissonClient.getLock("updateUserRoleRelation");
+        try { lock.tryLock(3, TimeUnit.SECONDS);
+
+            List<Long> role_ids = sysUserRoleRelation.getRole_ids();
+            Long user_id = sysUserRoleRelation.getUser_id();
+
+            // 1.删除全部用户与角色的关系 (sys_user_role_relation)
+            LambdaQueryWrapper<SysUserRoleRelation> wrapperRoleRelation = new LambdaQueryWrapper<>();
+            wrapperRoleRelation.eq(SysUserRoleRelation::getUser_id, user_id);
+            sysUserRoleRelationDao.delete(wrapperRoleRelation);
+
+            // 2.重新添加参数中的角色与权限的关系 (sys_user_role_relation)
+            sysUserRoleRelationDao.insertBatch(user_id, role_ids);
+
+            return Map.of("user_id", sysUserRoleRelation.getUser_id());
+
+        } catch (InterruptedException e) { throw new RuntimeException(e);
+        } finally { lock.unlock(); }
+    }
+
     /**
      * 编辑系统用户密码
      */

+ 12 - 9
src/main/resources/mapper/ai/material/MaterialCategoryDao.xml

@@ -3,17 +3,19 @@
 <mapper namespace="com.backendsys.modules.material.dao.MaterialCategoryDao">
 
     <sql id="includeMaterialCategory">
-        id,
-        id category_id,
-        lora_id,
-        category_name,
-        sort
+        mc.id,
+        mc.id category_id,
+        mc.lora_id,
+        mcl.lora_name,
+        mc.category_name,
+        mc.sort
     </sql>
     <!-- COALESCE(content_type, '') content_type, -->
     <resultMap id="resultMapMaterialCategory" type="com.backendsys.modules.material.entity.MaterialCategory">
         <id property="id" column="id" jdbcType="BIGINT" />
         <result property="category_id" column="id" javaType="java.lang.Long" />
         <result property="lora_id" column="lora_id" javaType="java.lang.Long" />
+        <result property="lora_name" column="lora_name" />
         <result property="category_name" column="category_name" />
         <result property="sort" column="sort" javaType="java.lang.Integer" />
     </resultMap>
@@ -21,16 +23,17 @@
     <select id="selectMaterialCategoryList" resultMap="resultMapMaterialCategory">
         SELECT
             <include refid="includeMaterialCategory" />
-        FROM ai_material_category
+        FROM ai_material_category mc
+        LEFT JOIN ai_material_lora mcl ON mc.lora_id = mcl.id
         <where>
             <if test="lora_id != null and lora_id != ''">
-                AND lora_id = #{lora_id}
+                AND mc.lora_id = #{lora_id}
             </if>
             <if test="category_name != null and category_name != ''">
-                AND category_name like concat('%', #{category_name}, '%')
+                AND mc.category_name like concat('%', #{category_name}, '%')
             </if>
         </where>
-        ORDER BY sort DESC
+        ORDER BY mc.sort DESC
     </select>
 
 

+ 5 - 10
src/main/resources/mapper/ai/material/MaterialDao.xml

@@ -26,8 +26,7 @@
         m.material_name,
         COALESCE(m.image_thumb_url, '') image_thumb_url,
         COALESCE(m.image_url, '') image_url,
-        COALESCE(m.fla_url, '') fla_url,
-        COALESCE(m.psd_url, '') psd_url,
+        COALESCE(m.file_url, '') file_url,
         m.is_copyright,
         m.create_time,
         m.update_time
@@ -61,8 +60,7 @@
         <result property="material_name" column="material_name" />
         <result property="image_thumb_url" column="image_thumb_url" />
         <result property="image_url" column="image_url" />
-        <result property="fla_url" column="fla_url" />
-        <result property="psd_url" column="psd_url" />
+        <result property="file_url" column="file_url" />
         <result property="is_copyright" column="is_copyright" javaType="java.lang.Integer" />
         <result property="create_time" column="create_time"
                 typeHandler="com.backendsys.config.Mybatis.handler.timezone.LocalDateTimeHandler" />
@@ -110,8 +108,7 @@
             <if test="tag_ids != null and tag_ids != ''">, tag_ids</if>
             <if test="image_thumb_url != null and image_thumb_url != ''">, image_thumb_url</if>
             <if test="image_url != null and image_url != ''">, image_url</if>
-            <if test="fla_url != null and fla_url != ''">, fla_url</if>
-            <if test="psd_url != null and psd_url != ''">, psd_url</if>
+            <if test="file_url != null and file_url != ''">, file_url</if>
             <if test="is_copyright != null and is_copyright != ''">, is_copyright</if>
         )
         VALUES (
@@ -119,8 +116,7 @@
             <if test="tag_ids != null and tag_ids != ''">, #{tag_ids}</if>
             <if test="image_thumb_url != null and image_thumb_url != ''">, #{image_thumb_url}</if>
             <if test="image_url != null and image_url != ''">, #{image_url}</if>
-            <if test="fla_url != null and fla_url != ''">, #{fla_url}</if>
-            <if test="psd_url != null and psd_url != ''">, #{psd_url}</if>
+            <if test="file_url != null and file_url != ''">, #{file_url}</if>
             <if test="is_copyright != null and is_copyright != ''">, #{is_copyright}</if>
        )
     </insert>
@@ -135,8 +131,7 @@
         <if test="tag_ids != null and tag_ids != ''">, tag_ids = #{tag_ids}</if>
         <if test="image_thumb_url != null and image_thumb_url != ''">, image_thumb_url = #{image_thumb_url}</if>
         <if test="image_url != null and image_url != ''">, image_url = #{image_url}</if>
-        <if test="fla_url != null and fla_url != ''">, fla_url = #{fla_url}</if>
-        <if test="psd_url != null and psd_url != ''">, psd_url = #{psd_url}</if>
+        <if test="file_url != null and file_url != ''">, file_url = #{file_url}</if>
         <if test="is_copyright != null and is_copyright != ''">, is_copyright = #{is_copyright}</if>
         WHERE id = #{material_id}
     </update>

+ 12 - 11
src/main/resources/mapper/system/SysUserDao.xml

@@ -288,17 +288,18 @@
         </trim>
         WHERE user_id = #{user_id};
 
-        <!--判断是否有新的数据需要插入-->
-        <if test="role_id != null and role_id.size() > 0">
-            <!--删除符合条件的数据-->
-            DELETE FROM sys_user_role_relation WHERE user_id = #{user_id};
-            <!--插入-->
-            INSERT INTO sys_user_role_relation (user_id, role_id)
-            VALUES
-            <foreach collection="role_id" item="id" separator=",">
-                (#{user_id}, #{id})
-            </foreach>
-        </if>
+        <!-- 禁止在编辑用户信息的时候,修改用户角色 -->
+        <!-- 判断是否有新的数据需要插入 -->
+<!--        <if test="role_id != null and role_id.size() > 0">-->
+<!--            &lt;!&ndash;删除符合条件的数据&ndash;&gt;-->
+<!--            DELETE FROM sys_user_role_relation WHERE user_id = #{user_id};-->
+<!--            &lt;!&ndash;插入&ndash;&gt;-->
+<!--            INSERT INTO sys_user_role_relation (user_id, role_id)-->
+<!--            VALUES-->
+<!--            <foreach collection="role_id" item="id" separator=",">-->
+<!--                (#{user_id}, #{id})-->
+<!--            </foreach>-->
+<!--        </if>-->
     </update>
     <!--删掉全部关联,再重新关联-->
 

+ 10 - 0
src/main/resources/mapper/system/SysUserRoleDao.xml

@@ -5,6 +5,7 @@
     <sql id="includeUserRole">
         ur.id id,
         ur.id role_id,
+        ur.role_sign role_sign,
         ur.role_name role_name,
         COALESCE(ur.role_description, '') role_description,
         COALESCE(ur.login_default_page, '') login_default_page,
@@ -14,6 +15,7 @@
     <resultMap id="resultMapUserRole" type="java.util.LinkedHashMap">
         <id property="id" column="id" jdbcType="BIGINT" />
         <result property="role_id" column="role_id" javaType="java.lang.Long"/>
+        <result property="role_sign" column="role_sign" />
         <result property="role_name" column="role_name" />
         <result property="role_description" column="role_description" />
         <result property="login_default_page" column="login_default_page" />
@@ -27,6 +29,9 @@
         LEFT JOIN sys_user_role_relation urr ON ur.id = urr.role_id
         LEFT JOIN sys_user us ON us.id = urr.user_id
         <where>
+            <if test="role_sign != null and role_sign != ''">
+                AND ur.role_sign = #{role_sign}
+            </if>
             <if test="role_name != null and role_name != ''">
                 AND ur.role_name LIKE CONCAT('%', #{role_name}, '%')
             </if>
@@ -41,12 +46,14 @@
     <!-- 获得用户角色 (部分字段) -->
     <resultMap id="resultMapUserRoleSimple" type="java.util.LinkedHashMap">
         <result property="role_id" column="role_id" javaType="java.lang.Long" />
+        <result property="role_sign" column="role_sign" />
         <result property="role_name" column="role_name" />
         <result property="login_default_page" column="login_default_page" />
     </resultMap>
     <select id="selectRoleByUserId" resultMap="resultMapUserRoleSimple">
         SELECT
             surr.role_id role_id,
+            sur.role_sign role_sign,
             sur.role_name role_name,
             sur.login_default_page login_default_page
         FROM sys_user_role_relation surr
@@ -58,10 +65,12 @@
     <!-- 创建 用户角色 -->
     <insert id="insertUserRole" parameterType="com.backendsys.entity.System.SysUserRoleDTO" useGeneratedKeys="true" keyProperty="id">
         INSERT INTO sys_user_role (role_name
+            <if test="role_sign != null">, role_sign</if>
             <if test="role_description != null">, role_description</if>
             <if test="sort != null">, sort</if>
             <if test="status != null">, status</if>
         ) VALUES (#{role_name}
+            <if test="role_sign != null">, #{role_sign}</if>
             <if test="role_description != null">, #{role_description}</if>
             <if test="sort != null">, #{sort}</if>
             <if test="status != null">, #{status}</if>
@@ -80,6 +89,7 @@
     <update id="updateUserRole" parameterType="com.backendsys.entity.System.SysUserRoleDTO">
         UPDATE sys_user_role SET
         <trim suffixOverrides="," suffix=" ">
+            <if test="role_sign != null and role_sign != ''">role_sign = #{role_sign},</if>
             <if test="role_name != null and role_name != ''">role_name = #{role_name},</if>
             <if test="role_description != null and role_description != ''">role_description = #{role_description},</if>
             <if test="sort != null and sort != ''">sort = #{sort},</if>

+ 9 - 0
src/main/resources/mapper/system/SysUserRoleRelationDao.xml

@@ -8,4 +8,13 @@
         WHERE user_id = #{user_id}
     </select>
 
+    <!-- 批量插入 -->
+    <insert id="insertBatch" parameterType="java.util.List">
+        INSERT INTO sys_user_role_relation (user_id, role_id)
+        VALUES
+        <foreach collection="role_ids" item="role_id" separator=",">
+            (#{user_id}, #{role_id})
+        </foreach>
+    </insert>
+
 </mapper>