From 47cd9ecc0eff38ffe6b3b794b2bf197e958f4403 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 14 五月 2025 15:50:57 +0800
Subject: [PATCH] bug:学员有状态不能修改问题

---
 src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java |  186 +++++++++++++++++++++++++++++++++------------
 1 files changed, 135 insertions(+), 51 deletions(-)

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 d138d98..0389eab 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
@@ -1,12 +1,10 @@
 package com.mindskip.xzs.service.impl;
 
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.domain.Department;
-import com.mindskip.xzs.domain.UserDepartment;
 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,13 +12,16 @@
 import com.mindskip.xzs.repository.UserMapper;
 import com.mindskip.xzs.service.DepartmentService;
 import com.mindskip.xzs.utility.ModelMapperSingle;
+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;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class DepartmentServiceImpl extends BaseServiceImpl<Department> implements DepartmentService {
@@ -39,11 +40,47 @@
     }
 
     @Override
-    public Integer add(String name) {
-        Department department = new Department();
-        department.setDeleted("0");
-        department.setName(name);
-        return departmentMapper.add(department);
+    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);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Integer update(Department department) {
+        Department entity = departmentMapper.getById(department.getId());
+        if (Objects.isNull(entity)) {
+            throw new RuntimeException("璇ラ儴闂ㄤ笉瀛樺湪");
+        }
+        // 鍏堟竻闄や箣鍓嶇殑绠$悊鍛樻爣璇�
+        List<BaseSelect> deptUserList = userDepartmentMapper.getDeptUserList(entity.getId());
+        List<Integer> userIds = deptUserList.stream().map(BaseSelect::getId).collect(Collectors.toList());
+        if (! CollectionUtils.isEmpty(userIds)) {
+            userMapper.clearDeptAdmin(userIds, entity.getId());
+            userMapper.cancelUserDeptAdmin(userIds);
+        }
+        // 璁剧疆閮ㄩ棬绠$悊鍛�
+        if (! CollectionUtils.isEmpty(department.getAdminId())) {
+            userMapper.updateDeptAdmin(department.getAdminId(), DeptAdminEnum.YES.getValue(), entity.getId());
+            UpdateDeptAdminVO updateDeptAdminVO = new UpdateDeptAdminVO();
+            updateDeptAdminVO.setAdminIds(department.getAdminId());
+            userMapper.updateUserDeptAdmin(updateDeptAdminVO);
+        }
+        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
@@ -54,35 +91,34 @@
         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("璇ラ儴闂ㄤ笉瀛樺湪");
-        }
-        if (Objects.nonNull(department.getAdminId())) {
-            if (! Objects.equals(entity.getAdminId(), department.getAdminId())) {
-                // 鍙栨秷鍘熷厛鐨勭鐞嗗憳鏍囪瘑
-                List<Integer> depIds = departmentMapper.selectByAdminId(entity.getAdminId());
-                depIds.remove(department.getId());
-                if (depIds.size() < 1) {
-                    userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
-                }
-            }
-            // 鏍囪瘑閮ㄩ棬绠$悊鍛�
-            userMapper.updateDeptAdmin(department.getAdminId(), DeptAdminEnum.YES.getValue());
-        }
-        Integer update = departmentMapper.update(department);
-        return update;
+    public List<DepartmentResponseVM> gets(DepartmentResponseVM departmentResponseVM) {
+        List<DepartmentResponseVM> deptList = departmentMapper.page(departmentResponseVM);
+        return this.buildPageTree(deptList);
     }
 
-    @Override
-    public PageInfo<DepartmentResponseVM> gets(DepartmentResponseVM departmentResponseVM) {
-        return PageHelper.startPage(departmentResponseVM.getPageIndex(), departmentResponseVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                departmentMapper.page(departmentResponseVM)
-        );
+    public List<DepartmentResponseVM> buildPageTree(List<DepartmentResponseVM> departments) {
+        // 鐢ㄤ簬瀛樺偍宸茬粡鏀惧叆鏍戠殑鑺傜偣锛屼互value涓洪敭
+        Map<Integer, DepartmentResponseVM> map = new HashMap<>();
+        List<DepartmentResponseVM> rootNodes = new ArrayList<>();
+
+        // 绗竴姝ワ細灏嗘墍鏈夎妭鐐规斁鍏ap涓紝骞跺垵濮嬪寲children鍒楄〃
+        for (DepartmentResponseVM dept : departments) {
+            map.put(dept.getId(), dept);
+            dept.setChildren(new ArrayList<>());
+        }
+        // 绗簩姝ワ細鏋勫缓鏍戝舰缁撴瀯
+        for (DepartmentResponseVM dept : departments) {
+            if (dept.getParentId() == null) {
+                rootNodes.add(dept);
+            } else {
+                DepartmentResponseVM parent = map.get(dept.getParentId());
+                if (parent != null) {
+                    parent.getChildren().add(dept);
+                }
+            }
+        }
+        return rootNodes;
     }
 
     @Override
@@ -91,8 +127,23 @@
     }
 
     @Override
-    public List<Department> gets() {
-        return departmentMapper.gets();
+    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);
+        }
+        vo.setAdminId(userDepartmentMapper.selectDeptAdmin(id));
+        return vo;
+    }
+
+    @Override
+    public List<Department> gets(List<Integer> deptId) {
+        return TreeUtils.build(departmentMapper.gets(deptId));
     }
 
     @Override
@@ -111,24 +162,57 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateAdmin(UpdateDeptAdminVO form) {
         Department entity = departmentMapper.getById(form.getId());
-        if (Objects.isNull(form)) {
+        if (Objects.isNull(entity)) {
             throw new RuntimeException("璇ラ儴闂ㄤ笉瀛樺湪");
         }
-        if (Objects.nonNull(form.getAdminId())) {
-            if (! Objects.equals(entity.getAdminId(), form.getAdminId())) {
-                // 鍙栨秷鍘熷厛鐨勭鐞嗗憳鏍囪瘑
-                List<Integer> depIds = departmentMapper.selectByAdminId(entity.getAdminId());
-                depIds.remove(form.getId());
-                if (depIds.size() < 1) {
-                    userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
+        List<BaseSelect> deptUserList = userDepartmentMapper.getDeptUserList(entity.getId());
+        List<Integer> userIds = deptUserList.stream().map(BaseSelect::getId).collect(Collectors.toList());
+        if (! CollectionUtils.isEmpty(userIds)) {
+            // 鍏堟竻闄や箣鍓嶇殑绠$悊鍛樻爣璇�
+            userMapper.clearDeptAdmin(userIds, entity.getId());
+            // 淇敼娌¤閫夋嫨鐨勭敤鎴峰苟涓斾笉鏄埆鐨勯儴闂ㄧ鐞嗗憳鐨勭敤鎴疯鑹蹭负1
+            userMapper.cancelUserDeptAdmin(userIds);
+        }
+        if (! CollectionUtils.isEmpty(form.getAdminIds())) {
+            // 鏍囪瘑閮ㄩ棬绠$悊鍛�
+            userMapper.updateDeptAdmin(form.getAdminIds(), DeptAdminEnum.YES.getValue(), entity.getId());
+            // 淇敼琚�夋嫨鐨勭敤鎴蜂负閮ㄩ棬绠$悊鍛�
+            userMapper.updateUserDeptAdmin(form);
+        }
+    }
+
+    @Override
+    public List<CascaderDataVO> cascader() {
+        List<CascaderDataVO> deptList = departmentMapper.list();
+        List<CascaderDataVO> tree = this.buildTree(deptList);
+        return tree;
+    }
+
+
+    public List<CascaderDataVO> buildTree(List<CascaderDataVO> departments) {
+        // 鐢ㄤ簬瀛樺偍宸茬粡鏀惧叆鏍戠殑鑺傜偣锛屼互value涓洪敭
+        Map<Integer, CascaderDataVO> map = new HashMap<>();
+        List<CascaderDataVO> rootNodes = new ArrayList<>();
+
+        // 绗竴姝ワ細灏嗘墍鏈夎妭鐐规斁鍏ap涓紝骞跺垵濮嬪寲children鍒楄〃
+        for (CascaderDataVO dept : departments) {
+            map.put(dept.getValue(), dept);
+            dept.setChildren(new ArrayList<>());
+        }
+        // 绗簩姝ワ細鏋勫缓鏍戝舰缁撴瀯
+        for (CascaderDataVO dept : departments) {
+            if (dept.getParentId() == null) { // 鍋囪椤剁骇閮ㄩ棬鐨刾arentId涓簄ull鎴�0
+                rootNodes.add(dept);
+            } else {
+                CascaderDataVO parent = map.get(dept.getParentId());
+                if (parent != null) {
+                    parent.getChildren().add(dept);
                 }
             }
-            // 鏍囪瘑閮ㄩ棬绠$悊鍛�
-            userMapper.updateDeptAdmin(form.getAdminId(), DeptAdminEnum.YES.getValue());
         }
-        entity.setAdminId(form.getAdminId());
-        departmentMapper.update(entity);
+        return rootNodes;
     }
 }

--
Gitblit v1.8.0