From 97709e81fbbab13b9b36bec3126b0590b7de1984 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 12 七月 2024 18:09:04 +0800
Subject: [PATCH] 部门增加层级字段、部门修改bug

---
 src/main/resources/mapper/DepartmentMapper.xml                                      |   48 +++++++++--
 src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java                        |    5 +
 src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java           |    2 
 src/main/java/com/mindskip/xzs/domain/Department.java                               |   11 ++
 src/main/java/com/mindskip/xzs/domain/enums/YesOrNoEnum.java                        |   26 ++++++
 src/main/java/com/mindskip/xzs/service/DepartmentService.java                       |    6 
 src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java              |   46 +++++++++--
 src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java                     |    8 ++
 src/main/java/com/mindskip/xzs/domain/vo/DepartmentEditVO.java                      |   40 ++++++++++
 src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java |    4 +
 10 files changed, 174 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
index 467759d..503ba5c 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
@@ -79,7 +79,7 @@
 
     @RequestMapping(value = "/get/{id}", method = RequestMethod.POST)
     public RestResponse update(@PathVariable Integer id) {
-        return RestResponse.ok(departmentService.getById(id));
+        return RestResponse.ok(departmentService.getByIdVO(id));
     }
 
     @RequestMapping(value = "/getUserByDepartment/{id}", method = RequestMethod.POST)
diff --git a/src/main/java/com/mindskip/xzs/domain/Department.java b/src/main/java/com/mindskip/xzs/domain/Department.java
index 73e060f..c3a6afd 100644
--- a/src/main/java/com/mindskip/xzs/domain/Department.java
+++ b/src/main/java/com/mindskip/xzs/domain/Department.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.domain;
 
+import com.mindskip.xzs.domain.enums.YesOrNoEnum;
 import com.mindskip.xzs.vo.TreeNode;
 import lombok.Data;
 
@@ -23,6 +24,16 @@
      */
     private List<Integer> adminId;
 
+    /**
+     * 鏄惁鑳界鐞嗘墍鏈塴evel涓�3鐨勬淳鍑烘墍
+     */
+    private YesOrNoEnum special;
+
+    /**
+     * 閮ㄩ棬鍑犵骇
+     */
+    private Integer level;
+
     private String deleted;
 
 }
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/YesOrNoEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/YesOrNoEnum.java
new file mode 100644
index 0000000..ba27dd7
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/YesOrNoEnum.java
@@ -0,0 +1,26 @@
+package com.mindskip.xzs.domain.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.Getter;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/12 15:32
+ */
+@Getter
+public enum YesOrNoEnum {
+
+    YES("yes", "鏄�"),
+    NO("yes", "鍚�"),
+    ;
+
+    @EnumValue
+    private final String value;
+
+    private final String desc;
+
+    YesOrNoEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java b/src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java
index e707398..b1030fc 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.domain.vo;
 
+import com.mindskip.xzs.domain.enums.YesOrNoEnum;
 import lombok.Data;
 
 import java.util.List;
@@ -28,6 +29,10 @@
      */
     private Integer parentId;
 
+    private String special;
+
+    private Integer level;
+
     /**
      * 瀛愮骇鏁版嵁
      */
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/DepartmentEditVO.java b/src/main/java/com/mindskip/xzs/domain/vo/DepartmentEditVO.java
new file mode 100644
index 0000000..ecd95a7
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/DepartmentEditVO.java
@@ -0,0 +1,40 @@
+package com.mindskip.xzs.domain.vo;
+
+import com.mindskip.xzs.domain.enums.YesOrNoEnum;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/12 17:40
+ */
+@Data
+public class DepartmentEditVO {
+
+    private Integer id;
+
+    private String name;
+
+    /**
+     * 涓婄骇閮ㄩ棬ID
+     */
+    private Integer parentId;
+    private List<Integer> parentIds;
+
+    /**
+     * 閮ㄩ棬绠$悊鍛�
+     */
+    private List<Integer> adminId;
+
+    /**
+     * 鏄惁鑳界鐞嗘墍鏈塴evel涓�3鐨勬淳鍑烘墍
+     */
+    private YesOrNoEnum special;
+
+    /**
+     * 閮ㄩ棬鍑犵骇
+     */
+    private Integer level;
+
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
index 7807bba..5722d19 100644
--- a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
@@ -47,4 +47,12 @@
      * @return
      */
     List<Integer> getChilds(@Param("deptIds") List<Integer> deptIds);
+
+    /**
+     * 鑾峰彇璇ラ儴闂ㄧ殑涓婄骇(涓嶅寘鍚嚜宸�)
+     *
+     * @param deptId
+     * @return
+     */
+    List<Integer> getFather(@Param("deptId") Integer deptId);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/DepartmentService.java b/src/main/java/com/mindskip/xzs/service/DepartmentService.java
index f339394..5da9ddc 100644
--- a/src/main/java/com/mindskip/xzs/service/DepartmentService.java
+++ b/src/main/java/com/mindskip/xzs/service/DepartmentService.java
@@ -1,9 +1,7 @@
 package com.mindskip.xzs.service;
 
 import com.mindskip.xzs.domain.Department;
-import com.mindskip.xzs.domain.vo.BaseSelect;
-import com.mindskip.xzs.domain.vo.CascaderDataVO;
-import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
+import com.mindskip.xzs.domain.vo.*;
 import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
 
 import java.util.List;
@@ -39,6 +37,8 @@
 
     Department getById(Integer id);
 
+    DepartmentEditVO getByIdVO(Integer id);
+
     List<Department> gets(List<Integer> deptId);
 
     Department getName(String name);
diff --git a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
index 6f296cb..f723447 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
@@ -4,6 +4,7 @@
 import com.mindskip.xzs.domain.enums.DeptAdminEnum;
 import com.mindskip.xzs.domain.vo.BaseSelect;
 import com.mindskip.xzs.domain.vo.CascaderDataVO;
+import com.mindskip.xzs.domain.vo.DepartmentEditVO;
 import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
 import com.mindskip.xzs.repository.BaseMapper;
 import com.mindskip.xzs.repository.DepartmentMapper;
@@ -14,6 +15,7 @@
 import com.mindskip.xzs.utility.TreeUtils;
 import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
 import org.modelmapper.ModelMapper;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -40,21 +42,18 @@
     @Override
     public Integer add(Department model) {
         model.setDeleted("0");
+        if (Objects.nonNull(model.getParentId())) {
+            // 鏌ュ嚭鐖剁骇鐨勫眰绾�
+            List<Integer> fatherList = departmentMapper.getFather(model.getParentId());
+            Collections.reverse(fatherList);
+            model.setLevel(fatherList.size() + 1);
+        }
         return departmentMapper.add(model);
-    }
-
-    @Override
-    public Integer remove(Integer id) {
-        Department department = new Department();
-        department.setId(id);
-        department.setDeleted("1");
-        return departmentMapper.update(department);
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Integer update(Department department) {
-//        userDepartmentMapper.removeByDepartmentId(department.getId());
         Department entity = departmentMapper.getById(department.getId());
         if (Objects.isNull(entity)) {
             throw new RuntimeException("璇ラ儴闂ㄤ笉瀛樺湪");
@@ -69,8 +68,23 @@
             // 鏍囪瘑閮ㄩ棬绠$悊鍛�
             userMapper.updateDeptAdmin(department.getAdminId(), DeptAdminEnum.YES.getValue(), entity.getId());
         }
+        if (Objects.nonNull(department.getParentId())) {
+            // 鏌ュ嚭鐖剁骇鐨勫眰绾�
+            List<Integer> fatherList = departmentMapper.getFather(department.getParentId());
+            department.setLevel(fatherList.size() + 1);
+        } else {
+            department.setLevel(1);
+        }
         Integer update = departmentMapper.update(department);
         return update;
+    }
+
+    @Override
+    public Integer remove(Integer id) {
+        Department department = new Department();
+        department.setId(id);
+        department.setDeleted("1");
+        return departmentMapper.update(department);
     }
 
     @Override
@@ -109,6 +123,20 @@
     }
 
     @Override
+    public DepartmentEditVO getByIdVO(Integer id) {
+        Department dept = departmentMapper.getById(id);
+        DepartmentEditVO vo = new DepartmentEditVO();
+        BeanUtils.copyProperties(dept, vo);
+        if (Objects.nonNull(dept.getParentId())) {
+            // 鏌ュ嚭瀹屾暣鐨勭埗绾D
+            List<Integer> fatherList = departmentMapper.getFather(dept.getParentId());
+            Collections.reverse(fatherList);
+            vo.setParentIds(fatherList);
+        }
+        return vo;
+    }
+
+    @Override
     public List<Department> gets(List<Integer> deptId) {
         return TreeUtils.build(departmentMapper.gets(deptId));
     }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java
index 83f77d5..17ed5f4 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java
@@ -23,6 +23,10 @@
      */
     private List<DepartmentResponseVM> children;
 
+    private String special;
+
+    private Integer level;
+
     /**
      * 绠$悊鍛�
      */
diff --git a/src/main/resources/mapper/DepartmentMapper.xml b/src/main/resources/mapper/DepartmentMapper.xml
index f1413a2..7577d5c 100644
--- a/src/main/resources/mapper/DepartmentMapper.xml
+++ b/src/main/resources/mapper/DepartmentMapper.xml
@@ -6,16 +6,18 @@
         <result column="name" jdbcType="VARCHAR" property="name"/>
         <result column="deleted" jdbcType="VARCHAR" property="deleted"/>
         <result column="parent_id" property="parentId"/>
+        <result column="special" property="special" typeHandler="com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler"/>
+        <result column="level" property="level"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id
-        , name,deleted,parent_id
+        , name,deleted,parent_id,special,level
     </sql>
 
     <insert id="add" parameterType="com.mindskip.xzs.domain.Department" useGeneratedKeys="true" keyProperty="id">
-        insert into t_department (name, deleted, parent_id)
-        values (#{name,jdbcType=VARCHAR}, #{deleted,jdbcType=VARCHAR}, #{parentId})
+        insert into t_department (name, deleted, parent_id,special,level)
+        values (#{name,jdbcType=VARCHAR}, #{deleted,jdbcType=VARCHAR}, #{parentId}, #{special.value},#{level})
     </insert>
 
     <update id="update" parameterType="com.mindskip.xzs.domain.Department">
@@ -31,6 +33,12 @@
             <if test="deleted != null">
                 deleted = #{deleted,jdbcType=VARCHAR},
             </if>
+            <if test="special != null and special != ''">
+                special = #{special.value},
+            </if>
+            <if test="level != null">
+                level = #{level},
+            </if>
         </set>
         where id = #{id,jdbcType=INTEGER}
     </update>
@@ -39,7 +47,9 @@
         SELECT
             td.id,
             td.name,
-            td.parent_id
+            td.parent_id,
+            td.special,
+            td.level
         FROM
             t_department td
         WHERE
@@ -53,7 +63,9 @@
         SELECT
             td.id,
             td.name,
-            td.parent_id
+            td.parent_id,
+            td.special,
+            td.level
         FROM
             t_department td
         WHERE
@@ -88,7 +100,9 @@
         SELECT
             td.id,
             td.name,
-            td.parent_id
+            td.parent_id,
+            td.special,
+            td.level
         FROM
              t_department td
         <where>
@@ -108,6 +122,8 @@
             td.id,
             td.name,
             td.parent_id,
+            td.special,
+            td.level,
             td.admin_id as adminId,
             tu.real_name as adminName
         FROM
@@ -126,16 +142,16 @@
     </select>
 
     <select id="list" resultType="com.mindskip.xzs.domain.vo.CascaderDataVO">
-        SELECT id as value, name as label, parent_id FROM t_department WHERE deleted = 0
+        SELECT id as value, name as label, parent_id, special, level FROM t_department WHERE deleted = 0
     </select>
 
     <select id="getChilds" resultType="integer">
         WITH RECURSIVE temp_table AS (
             SELECT
-                id, name, parent_id FROM t_department WHERE id in <foreach collection="deptIds" open="(" item="deptId" close=")" separator=",">#{deptId}</foreach>
+                id, name, parent_id,special,level FROM t_department WHERE id in <foreach collection="deptIds" open="(" item="deptId" close=")" separator=",">#{deptId}</foreach>
             UNION ALL
             SELECT
-                so.id, so.name, so.parent_id FROM t_department so INNER JOIN temp_table tb ON so.parent_id = tb.id
+                so.id, so.name, so.parent_id, so.special, so.level FROM t_department so INNER JOIN temp_table tb ON so.parent_id = tb.id
         )
         SELECT
             DISTINCT id
@@ -143,4 +159,18 @@
             temp_table
     </select>
 
+    <select id="getFather" resultType="integer">
+        WITH RECURSIVE temp_table AS (
+        SELECT
+        id, name, parent_id,special,level FROM t_department WHERE id = #{deptId}
+        UNION ALL
+        SELECT
+        so.id, so.name, so.parent_id, so.special, so.level FROM t_department so INNER JOIN temp_table tb ON so.id = tb.parent_id
+        )
+        SELECT
+        DISTINCT id
+        FROM
+        temp_table
+    </select>
+
 </mapper>

--
Gitblit v1.8.0