package cc.mrbird.febs.system.service.impl; 
 | 
  
 | 
import cc.mrbird.febs.common.entity.DeptTree; 
 | 
import cc.mrbird.febs.common.entity.FebsConstant; 
 | 
import cc.mrbird.febs.common.entity.QueryRequest; 
 | 
import cc.mrbird.febs.common.utils.SortUtil; 
 | 
import cc.mrbird.febs.common.utils.TreeUtil; 
 | 
import cc.mrbird.febs.system.entity.Dept; 
 | 
import cc.mrbird.febs.system.mapper.DeptMapper; 
 | 
import cc.mrbird.febs.system.service.IDeptService; 
 | 
import cc.mrbird.febs.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<DeptMapper, Dept> implements IDeptService { 
 | 
  
 | 
    private final IUserDataPermissionService userDataPermissionService; 
 | 
  
 | 
    @Override 
 | 
    public List<DeptTree<Dept>> findDepts() { 
 | 
        List<Dept> depts = this.baseMapper.selectList(new QueryWrapper<>()); 
 | 
        List<DeptTree<Dept>> trees = this.convertDepts(depts); 
 | 
        return TreeUtil.buildDeptTree(trees); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<DeptTree<Dept>> findDepts(Dept dept) { 
 | 
        QueryWrapper<Dept> queryWrapper = new QueryWrapper<>(); 
 | 
  
 | 
        if (StringUtils.isNotBlank(dept.getDeptName())) { 
 | 
            queryWrapper.lambda().eq(Dept::getDeptName, dept.getDeptName()); 
 | 
        } 
 | 
        queryWrapper.lambda().orderByAsc(Dept::getOrderNum); 
 | 
  
 | 
        List<Dept> depts = this.baseMapper.selectList(queryWrapper); 
 | 
        List<DeptTree<Dept>> trees = this.convertDepts(depts); 
 | 
        return TreeUtil.buildDeptTree(trees); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Dept> findDepts(Dept dept, QueryRequest request) { 
 | 
        QueryWrapper<Dept> 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<DeptTree<Dept>> convertDepts(List<Dept> depts) { 
 | 
        List<DeptTree<Dept>> trees = new ArrayList<>(); 
 | 
        depts.forEach(dept -> { 
 | 
            DeptTree<Dept> 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<String> deptIds) { 
 | 
        removeByIds(deptIds); 
 | 
        userDataPermissionService.deleteByDeptIds(deptIds); 
 | 
  
 | 
        LambdaQueryWrapper<Dept> queryWrapper = new LambdaQueryWrapper<>(); 
 | 
        queryWrapper.in(Dept::getParentId, deptIds); 
 | 
        List<Dept> depts = baseMapper.selectList(queryWrapper); 
 | 
        if (CollectionUtils.isNotEmpty(depts)) { 
 | 
            List<String> deptIdList = new ArrayList<>(); 
 | 
            depts.forEach(d -> deptIdList.add(String.valueOf(d.getDeptId()))); 
 | 
            this.delete(deptIdList); 
 | 
        } 
 | 
    } 
 | 
} 
 |