package cc.mrbird.febs.server.system.service.impl; import cc.mrbird.febs.common.core.entity.DeptTree; import cc.mrbird.febs.common.core.entity.QueryRequest; import cc.mrbird.febs.common.core.entity.Tree; import cc.mrbird.febs.common.core.entity.constant.FebsConstant; import cc.mrbird.febs.common.core.entity.constant.PageConstant; import cc.mrbird.febs.common.core.entity.system.Dept; import cc.mrbird.febs.common.core.entity.system.DicItem; import cc.mrbird.febs.common.core.utils.SortUtil; import cc.mrbird.febs.common.core.utils.TreeUtil; import cc.mrbird.febs.common.redis.service.RedisService; import cc.mrbird.febs.server.system.mapper.DeptMapper; import cc.mrbird.febs.server.system.service.IDeptService; import cc.mrbird.febs.server.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 lombok.extern.slf4j.Slf4j; 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.*; /** * @author MrBird */ @Slf4j @Service("deptService") @RequiredArgsConstructor @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public class DeptServiceImpl extends ServiceImpl implements IDeptService { private final RedisService redisService; private final IUserDataPermissionService userDataPermissionService; @Override public Map findDepts(QueryRequest request, Dept dept) { Map result = new HashMap<>(2); try { List depts = findDepts(dept, request); List trees = new ArrayList<>(); buildTrees(trees, depts); List> deptTree = TreeUtil.build(trees); result.put(PageConstant.ROWS, deptTree); result.put(PageConstant.TOTAL, depts.size()); } catch (Exception e) { log.error("获取部门列表失败", e); result.put(PageConstant.ROWS, null); result.put(PageConstant.TOTAL, 0); } return result; } @Override public List findDepts(Dept dept, QueryRequest request) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(dept.getDeptName())) { queryWrapper.lambda().like(Dept::getDeptName, dept.getDeptName()); } if (StringUtils.isNotBlank(dept.getCreateTimeFrom()) && StringUtils.isNotBlank(dept.getCreateTimeTo())) { queryWrapper.lambda() .ge(Dept::getCreateTime, dept.getCreateTimeFrom()) .le(Dept::getCreateTime, dept.getCreateTimeTo()); } SortUtil.handleWrapperSort(request, queryWrapper, "orderNum", FebsConstant.ORDER_ASC, true); return this.baseMapper.selectList(queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void createDept(Dept dept) { if (dept.getParentId() == null) { dept.setParentId(Dept.TOP_DEPT_ID); } dept.setCreateTime(new Date()); this.save(dept); } @Override @Transactional(rollbackFor = Exception.class) public void updateDept(Dept dept) { if (dept.getParentId() == null) { dept.setParentId(Dept.TOP_DEPT_ID); } dept.setModifyTime(new Date()); this.baseMapper.updateById(dept); } @Override @Transactional(rollbackFor = Exception.class) public void deleteDepts(String[] deptIds) { this.delete(Arrays.asList(deptIds)); } @Override public void setDeptRedis() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Dept::getDelFlag, 0); List depts = this.baseMapper.selectList(queryWrapper); redisService.del("depts"); redisService.set("depts", depts); } @Override public List findAllDepts(Dept dept) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(Dept::getDelFlag,0); if (StringUtils.isNotBlank(dept.getDeptName())) { queryWrapper.lambda().like(Dept::getDeptName, dept.getDeptName()); } return this.baseMapper.selectList(queryWrapper); } private void buildTrees(List trees, List depts) { depts.forEach(dept -> { DeptTree tree = new DeptTree(); tree.setId(dept.getDeptId().toString()); tree.setParentId(dept.getParentId().toString()); tree.setLabel(dept.getDeptName()); tree.setOrderNum(dept.getOrderNum()); trees.add(tree); }); } 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); } } }