package com.xcong.excoin.system.service.impl; import com.xcong.excoin.common.entity.DeptTree; import com.xcong.excoin.common.entity.FebsConstant; import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.common.utils.SortUtil; import com.xcong.excoin.common.utils.TreeUtil; import com.xcong.excoin.system.entity.Dept; import com.xcong.excoin.system.mapper.DeptMapper; import com.xcong.excoin.system.service.IDeptService; import com.xcong.excoin.system.service.IUserDataPermissionService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * @author MrBird */ @Service @RequiredArgsConstructor @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public class DeptServiceImpl extends ServiceImpl implements IDeptService { private final IUserDataPermissionService userDataPermissionService; @Override public List> findDepts() { List depts = this.baseMapper.selectList(new QueryWrapper<>()); List> trees = this.convertDepts(depts); return TreeUtil.buildDeptTree(trees); } @Override public List> findDepts(Dept dept) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(dept.getDeptName())) { queryWrapper.lambda().eq(Dept::getDeptName, dept.getDeptName()); } queryWrapper.lambda().orderByAsc(Dept::getOrderNum); List depts = this.baseMapper.selectList(queryWrapper); List> trees = this.convertDepts(depts); return TreeUtil.buildDeptTree(trees); } @Override public List findDepts(Dept dept, QueryRequest request) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(dept.getDeptName())) { queryWrapper.lambda().eq(Dept::getDeptName, dept.getDeptName()); } SortUtil.handleWrapperSort(request, queryWrapper, "orderNum", FebsConstant.ORDER_ASC, true); return this.baseMapper.selectList(queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void createDept(Dept dept) { Long parentId = dept.getParentId(); if (parentId == null) { dept.setParentId(Dept.TOP_NODE); } dept.setCreateTime(new Date()); this.save(dept); } @Override @Transactional(rollbackFor = Exception.class) public void updateDept(Dept dept) { dept.setModifyTime(new Date()); this.baseMapper.updateById(dept); } @Override @Transactional(rollbackFor = Exception.class) public void deleteDepts(String[] deptIds) { this.delete(Arrays.asList(deptIds)); } private List> convertDepts(List depts) { List> trees = new ArrayList<>(); depts.forEach(dept -> { DeptTree tree = new DeptTree<>(); tree.setId(String.valueOf(dept.getDeptId())); tree.setParentId(String.valueOf(dept.getParentId())); tree.setName(dept.getDeptName()); tree.setData(dept); trees.add(tree); }); return trees; } private void delete(List deptIds) { removeByIds(deptIds); userDataPermissionService.deleteByDeptIds(deptIds); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(Dept::getParentId, deptIds); List depts = baseMapper.selectList(queryWrapper); if (CollectionUtils.isNotEmpty(depts)) { List deptIdList = new ArrayList<>(); depts.forEach(d -> deptIdList.add(String.valueOf(d.getDeptId()))); this.delete(deptIdList); } } }