Browse Source

增加用户关联次要部门和解除次要部门接口

chenjun 1 year ago
parent
commit
370111c35b

+ 16 - 0
zjugis-module-system/zjugis-module-system-biz/src/main/java/com/zjugis/module/system/controller/admin/user/UserController.java

@@ -61,6 +61,22 @@ public class UserController {
         return success(true);
     }
 
+    @PutMapping("add-minorDept")
+    @Operation(summary = "增加用户次要部门")
+    @PreAuthorize("@ss.hasPermission('system:user:update')")
+    public CommonResult<Boolean> addUserDeptIds(@Valid @RequestBody UserUpdateDeptIdsReqVO reqVO) {
+        userService.addUserDeptIds(reqVO);
+        return success(true);
+    }
+
+    @PutMapping("remove-minorDept")
+    @Operation(summary = "解除用户次要部门")
+    @PreAuthorize("@ss.hasPermission('system:user:update')")
+    public CommonResult<Boolean> removeUserDeptIds(@Valid @RequestBody UserUpdateDeptIdsReqVO reqVO) {
+        userService.removeUserDeptIds(reqVO);
+        return success(true);
+    }
+
     @DeleteMapping("/delete")
     @Operation(summary = "删除用户")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")

+ 23 - 0
zjugis-module-system/zjugis-module-system-biz/src/main/java/com/zjugis/module/system/controller/admin/user/vo/user/UserUpdateDeptIdsReqVO.java

@@ -0,0 +1,23 @@
+package com.zjugis.module.system.controller.admin.user.vo.user;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author 陈俊
+ * @Date 2024/1/30 10:09
+ * @Version 1.0
+ */
+@Data
+public class UserUpdateDeptIdsReqVO {
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "83e06d0d-af60-4419-9437-c9a68bf1b669")
+    @NotNull(message = "角色编号不能为空")
+    private String id;
+
+    @Schema(description = "次要部门ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "0a168fe9-2ba8-4302-b6b6-a524c1aef967")
+    @NotNull(message = "次要部门不能为空")
+    private String minorDeptId;
+}

+ 2 - 2
zjugis-module-system/zjugis-module-system-biz/src/main/java/com/zjugis/module/system/dal/mysql/dept/UserDeptMapper.java

@@ -21,10 +21,10 @@ public interface UserDeptMapper extends BaseMapperX<UserDeptDO> {
         return selectList(UserDeptDO::getUserId, userId);
     }
 
-    default void deleteByUserIdAndDeptId(String userId, Collection<String> deptIds) {
+    default void deleteByUserIdAndDeptId(String userId, String deptId) {
         delete(new LambdaQueryWrapperX<UserDeptDO>()
                 .eq(UserDeptDO::getUserId, userId)
-                .in(UserDeptDO::getDeptId, deptIds));
+                .eq(UserDeptDO::getDeptId, deptId));
     }
 
     default List<UserDeptDO> selectListByDeptIds(Collection<String> deptIds) {

+ 17 - 4
zjugis-module-system/zjugis-module-system-biz/src/main/java/com/zjugis/module/system/dal/mysql/user/AdminUserMapper.java

@@ -1,5 +1,6 @@
 package com.zjugis.module.system.dal.mysql.user;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zjugis.framework.common.enums.CommonStatusEnum;
 import com.zjugis.framework.common.pojo.PageResult;
 import com.zjugis.framework.mybatis.core.mapper.BaseMapperX;
@@ -7,6 +8,7 @@ import com.zjugis.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.zjugis.module.system.controller.admin.user.vo.user.UserExportReqVO;
 import com.zjugis.module.system.controller.admin.user.vo.user.UserPageReqVO;
 import com.zjugis.module.system.dal.dataobject.user.AdminUserDO;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.Collection;
@@ -28,13 +30,24 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
     }
 
     default PageResult<AdminUserDO> selectPage(UserPageReqVO reqVO, Collection<String> deptIds) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AdminUserDO>()
+        LambdaQueryWrapper<AdminUserDO> adminUserDOLambdaQueryWrapper = new LambdaQueryWrapperX<AdminUserDO>()
                 .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
                 .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
                 .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
-                .likeIfPresent(AdminUserDO::getDeptIds, reqVO.getDeptId())
-                .orderByDesc(AdminUserDO::getId));
+                .orderByDesc(AdminUserDO::getId);
+        if(StringUtils.isNotBlank(reqVO.getDeptId())){
+            adminUserDOLambdaQueryWrapper = new LambdaQueryWrapperX<AdminUserDO>()
+                    .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
+                    .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
+                    .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
+                    .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
+                    .and(wq -> wq.like(AdminUserDO::getDeptIds, reqVO.getDeptId())
+                            .or()
+                            .eq(AdminUserDO::getDeptId, reqVO.getDeptId()))
+                    .orderByDesc(AdminUserDO::getId);
+        }
+        return selectPage(reqVO, adminUserDOLambdaQueryWrapper);
     }
 
     default List<AdminUserDO> selectList(UserExportReqVO reqVO, Collection<String> deptIds) {
@@ -60,7 +73,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
         return selectList(AdminUserDO::getStatus, status);
     }
 
-    default List<AdminUserDO> selectListByMoble(Collection<String> phones){
+    default List<AdminUserDO> selectListByMoble(Collection<String> phones) {
         return selectList(new LambdaQueryWrapperX<AdminUserDO>().in(AdminUserDO::getMobile, phones));
     }
 }

+ 12 - 0
zjugis-module-system/zjugis-module-system-biz/src/main/java/com/zjugis/module/system/service/user/AdminUserService.java

@@ -233,4 +233,16 @@ public interface AdminUserService {
      * @return
      */
     AdminUserDO getUserLeader(String id);
+
+    /**
+     * 增加用户的次要部门
+     * @param reqVO
+     */
+    void addUserDeptIds(UserUpdateDeptIdsReqVO reqVO);
+
+    /**
+     * 解除用户次要部门
+     * @param reqVO
+     */
+    void removeUserDeptIds(UserUpdateDeptIdsReqVO reqVO);
 }

+ 34 - 23
zjugis-module-system/zjugis-module-system-biz/src/main/java/com/zjugis/module/system/service/user/AdminUserServiceImpl.java

@@ -109,31 +109,10 @@ public class AdminUserServiceImpl implements AdminUserService {
         // 更新用户
         AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO);
         userMapper.updateById(updateObj);
-        // 更新部门
-        updateUserDept(reqVO, updateObj);
         // 更新岗位
         updateUserPost(reqVO, updateObj);
     }
 
-    private void updateUserDept(UserUpdateReqVO reqVO, AdminUserDO updateObj) {
-        String userId = reqVO.getId();
-        Set<String> dbDeptIds = convertSet(userDeptMapper.selectListByUserId(userId), UserDeptDO::getDeptId);
-        // 计算新增和删除的部门编号
-        List<String> deptIds = updateObj.getDeptIds();
-        if(!CollectionUtil.isEmpty(deptIds)){
-            Collection<String> createDeptIds = CollUtil.subtract(deptIds, dbDeptIds);
-            Collection<String> deleteDeptIds = CollUtil.subtract(dbDeptIds, deptIds);
-            // 执行新增和删除。对于已经授权的菜单,不用做任何处理
-            if (!CollectionUtil.isEmpty(createDeptIds)) {
-                userDeptMapper.insertBatch(convertList(createDeptIds,
-                        deptId -> new UserDeptDO().setUserId(userId).setDeptId(deptId)));
-            }
-            if (!CollectionUtil.isEmpty(deleteDeptIds)) {
-                userDeptMapper.deleteByUserIdAndDeptId(userId, deleteDeptIds);
-            }
-        }
-    }
-
     private void updateUserPost(UserUpdateReqVO reqVO, AdminUserDO updateObj) {
         String userId = reqVO.getId();
         Set<Long> dbPostIds = convertSet(userPostMapper.selectListByUserId(userId), UserPostDO::getPostId);
@@ -355,14 +334,15 @@ public class AdminUserServiceImpl implements AdminUserService {
     }
 
     @VisibleForTesting
-    void validateUserExists(String id) {
+    AdminUserDO validateUserExists(String id) {
         if (id == null) {
-            return;
+            return null;
         }
         AdminUserDO user = userMapper.selectById(id);
         if (user == null) {
             throw exception(USER_NOT_EXISTS);
         }
+        return user;
     }
 
     @VisibleForTesting
@@ -506,6 +486,37 @@ public class AdminUserServiceImpl implements AdminUserService {
         }
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addUserDeptIds(UserUpdateDeptIdsReqVO reqVO) {
+        AdminUserDO adminUserDO = validateUserExists(reqVO.getId());
+        UserDeptDO userDept = new UserDeptDO();
+        userDept.setUserId(adminUserDO.getId());
+        userDept.setDeptId(reqVO.getMinorDeptId());
+        userDeptMapper.insert(userDept);
+        List<String> deptIds = adminUserDO.getDeptIds();
+        if(CollectionUtil.isEmpty(deptIds)){
+            deptIds = new ArrayList<>();
+        }
+        deptIds.add(reqVO.getMinorDeptId());
+        adminUserDO.setDeptIds(deptIds);
+        userMapper.updateById(adminUserDO);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void removeUserDeptIds(UserUpdateDeptIdsReqVO reqVO) {
+        AdminUserDO adminUserDO = validateUserExists(reqVO.getId());
+        UserDeptDO userDept = new UserDeptDO();
+        userDept.setUserId(adminUserDO.getId());
+        userDept.setDeptId(reqVO.getMinorDeptId());
+        userDeptMapper.deleteByUserIdAndDeptId(adminUserDO.getId(), reqVO.getMinorDeptId());
+        List<String> deptIds = adminUserDO.getDeptIds();
+        deptIds.remove(reqVO.getMinorDeptId());
+        adminUserDO.setDeptIds(deptIds);
+        userMapper.updateById(adminUserDO);
+    }
+
     /**
      * 对密码进行加密
      *