xiangpei
2025-05-14 47cd9ecc0eff38ffe6b3b794b2bf197e958f4403
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<>();
        // 第一步:将所有节点放入map中,并初始化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())) {
            // 查出完整的父级ID
            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<>();
        // 第一步:将所有节点放入map中,并初始化children列表
        for (CascaderDataVO dept : departments) {
            map.put(dept.getValue(), dept);
            dept.setChildren(new ArrayList<>());
        }
        // 第二步:构建树形结构
        for (CascaderDataVO dept : departments) {
            if (dept.getParentId() == null) { // 假设顶级部门的parentId为null或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;
    }
}