From b236dd0d61a9130a842425d7c7d63cb9910ba8be Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期二, 14 五月 2024 10:09:47 +0800
Subject: [PATCH] feat:部门调动

---
 src/main/java/com/mindskip/xzs/service/UserDepartMentService.java                |    3 
 src/main/java/com/mindskip/xzs/service/impl/UserDepartMentServiceImpl.java       |    6 
 src/main/java/com/mindskip/xzs/repository/UserDepartmentMapper.java              |    3 
 src/main/java/com/mindskip/xzs/domain/enums/DepartmentExamineEnum.java           |   32 ++++
 src/main/java/com/mindskip/xzs/controller/admin/UserController.java              |   17 +-
 src/main/resources/mapper/UserMapper.xml                                         |    2 
 src/main/resources/mapper/UserDepartmentMapper.xml                               |    8 +
 src/main/java/com/mindskip/xzs/service/impl/DepartmentExamineServiceImpl.java    |   51 +++++++
 src/main/java/com/mindskip/xzs/domain/DepartmentExamine.java                     |   67 +++++++++
 src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java |   52 +++++++
 src/main/java/com/mindskip/xzs/repository/DepartmentExamineMapper.java           |   22 +++
 src/main/java/com/mindskip/xzs/domain/vo/DepartmentExamineVO.java                |   70 ++++++++++
 src/main/java/com/mindskip/xzs/service/IDepartmentExamineService.java            |   21 +++
 src/main/resources/mapper/DepartmentExamineMapper.xml                            |   23 +++
 src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java          |   10 +
 15 files changed, 376 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java
new file mode 100644
index 0000000..075741a
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java
@@ -0,0 +1,52 @@
+package com.mindskip.xzs.controller.admin;
+
+
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.base.BaseApiController;
+import com.mindskip.xzs.base.RestResponse;
+import com.mindskip.xzs.domain.DepartmentExamine;
+import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
+import com.mindskip.xzs.service.IDepartmentExamineService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 閮ㄩ棬瀹℃牳琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author gonghl
+ * @since 2024-05-13
+ */
+@RestController
+@RequestMapping("/api/admin/department/examine")
+@RequiredArgsConstructor
+public class DepartmentExamineController extends BaseApiController {
+
+    private final IDepartmentExamineService departmentExamineService;
+
+    @RequestMapping(value = "list", method = RequestMethod.POST)
+    public RestResponse<PageInfo<DepartmentExamineVO>> list(@RequestBody DepartmentExamineVO departmentExamineVO) {
+        return RestResponse.ok(departmentExamineService.pageInfo(departmentExamineVO));
+    }
+
+    @RequestMapping(value = "save", method = RequestMethod.POST)
+    public RestResponse<Boolean> save(@RequestBody DepartmentExamine departmentExamine) {
+        departmentExamine.setCreateTime(LocalDateTime.now());
+        departmentExamine.setCreateUser(getCurrentUser().getId());
+        return RestResponse.ok(departmentExamineService.save(departmentExamine));
+    }
+
+    @RequestMapping(value = "delete/{id}", method = RequestMethod.POST)
+    public RestResponse<Boolean> delete(@PathVariable Integer id) {
+        return RestResponse.ok(departmentExamineService.removeById(id));
+    }
+
+    @RequestMapping(value = "audit", method = RequestMethod.POST)
+    public RestResponse<Boolean> audit(@RequestBody DepartmentExamineVO departmentExamine) {
+        return RestResponse.ok(departmentExamineService.audit(departmentExamine));
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/UserController.java b/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
index 623b48d..db30138 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
@@ -1,20 +1,19 @@
 package com.mindskip.xzs.controller.admin;
 
+import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.base.BaseApiController;
 import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.domain.*;
-import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.enums.UserStatusEnum;
+import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.repository.UserDepartmentMapper;
 import com.mindskip.xzs.service.*;
 import com.mindskip.xzs.utility.DateTimeUtil;
+import com.mindskip.xzs.utility.PageInfoHelper;
 import com.mindskip.xzs.utility.convert.UserClassConvert;
 import com.mindskip.xzs.utility.excel.ExcelUtils;
 import com.mindskip.xzs.viewmodel.admin.user.*;
-import com.mindskip.xzs.utility.PageInfoHelper;
-import com.github.pagehelper.PageInfo;
-
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,15 +57,15 @@
                 UserResponseVM.from(d));
         page.setList(page.getList().stream().map(e->{
             List<UserDepartment> userDepartments = userDepartmentMapper.selectByUserId(e.getId());
-            String deptIds = "";
+            List<Department> list = new ArrayList<>();
             for (UserDepartment userDepartment : userDepartments) {
                 Department byId = departmentService.getById(userDepartment.getDepartmentId());
-                if(byId != null){
-                    deptIds = deptIds + byId.getName();
-                    break;
+                if (ObjectUtils.isNotEmpty(byId)) {
+                    list.add(byId);
                 }
             }
-            e.setDeptNames(deptIds);
+            e.setDeptNames(StringUtils.join(list.stream().map(Department::getName).collect(Collectors.toList()), ","));
+            e.setDeptIdList(list.stream().map(Department::getId).collect(Collectors.toList()));
             e.setTagNames(tagService.selectTagNamesByUserId(e.getId()));
             return e;
         }).collect(Collectors.toList()));
diff --git a/src/main/java/com/mindskip/xzs/domain/DepartmentExamine.java b/src/main/java/com/mindskip/xzs/domain/DepartmentExamine.java
new file mode 100644
index 0000000..359307f
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/DepartmentExamine.java
@@ -0,0 +1,67 @@
+package com.mindskip.xzs.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mindskip.xzs.domain.enums.DepartmentExamineEnum;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 閮ㄩ棬瀹℃牳琛�
+ * </p>
+ *
+ * @author gonghl
+ * @since 2024-05-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_department_examine")
+public class DepartmentExamine implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鐢ㄦ埛id
+     */
+    private Integer userId;
+
+    /**
+     * 閮ㄩ棬id
+     */
+    private String departmentIds;
+
+    /**
+     * 鎵�鍦ㄩ儴闂�
+     */
+    private String nowDepartmentIds;
+
+    private Integer createUser;
+
+    private LocalDateTime createTime;
+
+    /**
+     * 瀹℃牳缁撴灉
+     */
+    private DepartmentExamineEnum result;
+
+    /**
+     * 瀹℃牳澶囨敞
+     */
+    private String remark;
+
+    @TableLogic
+    private Boolean deleted;
+
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/DepartmentExamineEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/DepartmentExamineEnum.java
new file mode 100644
index 0000000..1a72054
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/DepartmentExamineEnum.java
@@ -0,0 +1,32 @@
+package com.mindskip.xzs.domain.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+/**
+ * 鐢ㄦ埛鐘舵��
+ *
+ * @author gonghl
+ */
+@Getter
+public enum DepartmentExamineEnum {
+
+    WAIT("0", "寰呭鏍�"),
+    PASS("1", "瀹℃牳閫氳繃"),
+    OVERRULE("2", "瀹℃牳椹冲洖"),
+    ;
+
+
+    @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱
+    private final String code;
+
+    @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁锛屽嵆鍝嶅簲鏃�
+    private final String desc;
+
+    DepartmentExamineEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/DepartmentExamineVO.java b/src/main/java/com/mindskip/xzs/domain/vo/DepartmentExamineVO.java
new file mode 100644
index 0000000..6746d9b
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/DepartmentExamineVO.java
@@ -0,0 +1,70 @@
+package com.mindskip.xzs.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mindskip.xzs.domain.enums.DepartmentExamineEnum;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 閮ㄩ棬瀹℃牳琛�
+ * </p>
+ *
+ * @author gonghl
+ * @since 2024-05-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class DepartmentExamineVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer id;
+
+    /**
+     * 鐢ㄦ埛id
+     */
+    private Integer userId;
+    private String userName;
+
+    /**
+     * 閮ㄩ棬id
+     */
+    private String departmentIds;
+    private String departmentName;
+
+    /**
+     * 鎵�鍦ㄩ儴闂�
+     */
+    private String nowDepartmentIds;
+    private String nowDepartmentName;
+
+    private Integer createUser;
+    private String createUserName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 瀹℃牳缁撴灉
+     */
+    private DepartmentExamineEnum result;
+
+    /**
+     * 瀹℃牳澶囨敞
+     */
+    private String remark;
+
+    private Boolean deleted;
+
+    private Integer pageIndex;
+
+    private Integer pageSize;
+
+
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/DepartmentExamineMapper.java b/src/main/java/com/mindskip/xzs/repository/DepartmentExamineMapper.java
new file mode 100644
index 0000000..63c3a02
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/repository/DepartmentExamineMapper.java
@@ -0,0 +1,22 @@
+package com.mindskip.xzs.repository;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mindskip.xzs.domain.DepartmentExamine;
+import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 閮ㄩ棬瀹℃牳琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author gonghl
+ * @since 2024-05-13
+ */
+@Mapper
+public interface DepartmentExamineMapper extends BaseMapper<DepartmentExamine> {
+
+    List<DepartmentExamineVO> pageInfo(DepartmentExamineVO departmentExamineVO);
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/UserDepartmentMapper.java b/src/main/java/com/mindskip/xzs/repository/UserDepartmentMapper.java
index 2b5b30e..7dd92cc 100644
--- a/src/main/java/com/mindskip/xzs/repository/UserDepartmentMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/UserDepartmentMapper.java
@@ -2,6 +2,7 @@
 
 import com.mindskip.xzs.domain.UserDepartment;
 import com.mindskip.xzs.domain.vo.BaseSelect;
+import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -22,4 +23,6 @@
     void updateUserDepartMent(UserDepartment userDepartment);
 
     List<BaseSelect> getDeptUserList(Integer deptId);
+
+    void insertBatchByDepartmentExamine(DepartmentExamineVO departmentExamine);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/IDepartmentExamineService.java b/src/main/java/com/mindskip/xzs/service/IDepartmentExamineService.java
new file mode 100644
index 0000000..a07ddc2
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/IDepartmentExamineService.java
@@ -0,0 +1,21 @@
+package com.mindskip.xzs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.domain.DepartmentExamine;
+import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
+
+/**
+ * <p>
+ * 閮ㄩ棬瀹℃牳琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author gonghl
+ * @since 2024-05-13
+ */
+public interface IDepartmentExamineService extends IService<DepartmentExamine> {
+
+    PageInfo<DepartmentExamineVO> pageInfo(DepartmentExamineVO departmentExamineVO);
+
+    Boolean audit(DepartmentExamineVO departmentExamine);
+}
diff --git a/src/main/java/com/mindskip/xzs/service/UserDepartMentService.java b/src/main/java/com/mindskip/xzs/service/UserDepartMentService.java
index bd2b247..1c5d8de 100644
--- a/src/main/java/com/mindskip/xzs/service/UserDepartMentService.java
+++ b/src/main/java/com/mindskip/xzs/service/UserDepartMentService.java
@@ -1,6 +1,7 @@
 package com.mindskip.xzs.service;
 
 import com.mindskip.xzs.domain.UserDepartment;
+import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -18,4 +19,6 @@
     UserDepartment selectByUser(Integer id);
 
     void updateUserDepartMent(UserDepartment userDepartment);
+
+    void insertBatchByDepartmentExamine(DepartmentExamineVO departmentExamine);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/DepartmentExamineServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/DepartmentExamineServiceImpl.java
new file mode 100644
index 0000000..c4dc2da
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/impl/DepartmentExamineServiceImpl.java
@@ -0,0 +1,51 @@
+package com.mindskip.xzs.service.impl;
+
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.domain.DepartmentExamine;
+import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
+import com.mindskip.xzs.repository.DepartmentExamineMapper;
+import com.mindskip.xzs.service.IDepartmentExamineService;
+import com.mindskip.xzs.service.UserDepartMentService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * <p>
+ * 閮ㄩ棬瀹℃牳琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author gonghl
+ * @since 2024-05-13
+ */
+@Service
+@RequiredArgsConstructor
+public class DepartmentExamineServiceImpl extends ServiceImpl<DepartmentExamineMapper, DepartmentExamine> implements IDepartmentExamineService {
+
+    private final UserDepartMentService userDepartMentService;
+
+    @Override
+    public PageInfo<DepartmentExamineVO> pageInfo(DepartmentExamineVO departmentExamineVO) {
+        return PageHelper.startPage(departmentExamineVO.getPageIndex(), departmentExamineVO.getPageSize(), "id desc").doSelectPageInfo(() ->
+                baseMapper.pageInfo(departmentExamineVO)
+        );
+    }
+
+    @Override
+    @Transactional
+    public Boolean audit(DepartmentExamineVO departmentExamine) {
+        // 瀹℃牳閫氳繃閲嶆柊缁戝畾
+        if ("1".equals(departmentExamine.getResult().getCode())) {
+            userDepartMentService.removeByUserId(departmentExamine.getUserId());
+            userDepartMentService.insertBatchByDepartmentExamine(departmentExamine);
+        }
+        return new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(DepartmentExamine::getId, departmentExamine.getId())
+                .set(DepartmentExamine::getResult, departmentExamine.getResult())
+                .set(DepartmentExamine::getRemark, departmentExamine.getRemark())
+                .update();
+    }
+}
diff --git a/src/main/java/com/mindskip/xzs/service/impl/UserDepartMentServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/UserDepartMentServiceImpl.java
index 17ff5f9..100bd54 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/UserDepartMentServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/UserDepartMentServiceImpl.java
@@ -1,6 +1,7 @@
 package com.mindskip.xzs.service.impl;
 
 import com.mindskip.xzs.domain.UserDepartment;
+import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
 import com.mindskip.xzs.repository.UserDepartmentMapper;
 import com.mindskip.xzs.service.UserDepartMentService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,5 +55,8 @@
         userDepartmentMapper.updateUserDepartMent(userDepartment);
     }
 
-
+    @Override
+    public void insertBatchByDepartmentExamine(DepartmentExamineVO departmentExamine) {
+        userDepartmentMapper.insertBatchByDepartmentExamine(departmentExamine);
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java
index 0f889a7..ce8318e 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserResponseVM.java
@@ -52,6 +52,16 @@
 
     private String conditionDetail;
 
+    private List<Integer> deptIdList;
+
+    public List<Integer> getDeptIdList() {
+        return deptIdList;
+    }
+
+    public void setDeptIdList(List<Integer> deptIdList) {
+        this.deptIdList = deptIdList;
+    }
+
     public String getConditionDetail() {
         return conditionDetail;
     }
diff --git a/src/main/resources/mapper/DepartmentExamineMapper.xml b/src/main/resources/mapper/DepartmentExamineMapper.xml
new file mode 100644
index 0000000..c74b34e
--- /dev/null
+++ b/src/main/resources/mapper/DepartmentExamineMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mindskip.xzs.repository.DepartmentExamineMapper">
+
+    <select id="pageInfo" resultType="com.mindskip.xzs.domain.vo.DepartmentExamineVO">
+        SELECT a.*,
+               GROUP_CONCAT(DISTINCT b.name)  as departmentName,
+               GROUP_CONCAT(DISTINCT b2.name) as nowDepartmentName,
+               c.real_name                    as createUserName,
+               c2.real_name                   as userName
+        FROM t_department_examine a
+                 LEFT JOIN t_department b ON FIND_IN_SET(b.id, a.department_ids)
+                 LEFT JOIN t_department b2 ON FIND_IN_SET(b2.id, a.now_department_ids)
+                 left join t_user c on a.create_user = c.id and c.deleted = 0
+                 left join t_user c2 on a.user_id = c2.id and c2.deleted = 0
+        where a.deleted = 0
+        <if test="userName != null">
+            and c2.real_name like concat('%', #{userName}, '%')
+        </if>
+        GROUP BY a.id, a.create_time
+        order by a.create_time desc
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/UserDepartmentMapper.xml b/src/main/resources/mapper/UserDepartmentMapper.xml
index 8f97bd9..a2f68c8 100644
--- a/src/main/resources/mapper/UserDepartmentMapper.xml
+++ b/src/main/resources/mapper/UserDepartmentMapper.xml
@@ -17,6 +17,14 @@
                )
     </insert>
 
+    <insert id="insertBatchByDepartmentExamine">
+        insert into t_user_department (user_id, department_id)
+        values
+        <foreach collection="departmentIds.split(',')" item="item" separator=",">
+            (#{userId}, #{item})
+        </foreach>
+    </insert>
+
     <select id="selectByUserId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List" />
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index 45aa42a..67c6b80 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -497,7 +497,7 @@
     <select id="getUserByExam" resultType="com.mindskip.xzs.domain.User">
         <![CDATA[
         SELECT
-        d.*
+        DISTINCT d.*
         FROM t_exam_paper a
         left join t_exam_paper_user b on a.id = b.exam_paper_id and b.deleted = 0
         left join t_exam_paper_answer c on a.id = c.exam_paper_id and c.create_user = b.user_id

--
Gitblit v1.8.0