package com.ycl.service.depart.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.api.CommonResult; import com.ycl.entity.depart.SccgDepart; import com.ycl.enums.common.ResultCode; import com.ycl.exception.ApiException; import com.ycl.mapper.depart.SccgDepartMapper; import com.ycl.service.depart.SccgDepartService; import com.ycl.vo.depart.DepartVO; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.xml.transform.Result; import java.util.List; import java.util.stream.Collectors; /** *

* 部门表 服务实现类 *

* * @author lyq * @since 2022-09-07 */ @Service public class SccgDepartServiceImpl extends ServiceImpl implements SccgDepartService { @Resource private SccgDepartMapper sccgDepartMapper; @Override @Transactional(rollbackFor = Exception.class) public void create(DepartVO.AddDepartVO addDepartVO) { SccgDepart sccgDepart = this.queryByName(addDepartVO.getDepartName()); if (null != sccgDepart) { throw new ApiException(ResultCode.RECORD_ALREADY_EXISTS); } SccgDepart depart = new SccgDepart(); BeanUtils.copyProperties(addDepartVO, depart); if (sccgDepartMapper.insert(depart) <= 0) { throw new ApiException(ResultCode.RECORD_SAVE_FAIL); } } @Override public SccgDepart loadDepartById(long id) { SccgDepart sccgDepart = sccgDepartMapper.selectById(id); if (null == sccgDepart) { throw new ApiException(ResultCode.RECORD_NOT_EXISTS); } return sccgDepart; } @Override @Transactional(rollbackFor = Exception.class) public void update(DepartVO.UpdateDepartVO updateDepartVO) { SccgDepart sccgDepart = this.queryByName(updateDepartVO.getDepartName()); if (null != sccgDepart && sccgDepart.getId() != updateDepartVO.getId()) { throw new ApiException(ResultCode.RECORD_ALREADY_EXISTS); } BeanUtils.copyProperties(updateDepartVO, sccgDepart); if (sccgDepartMapper.updateById(sccgDepart) <= 0) { throw new ApiException(ResultCode.RECORD_UPDATE_FAIL); } } @Override public void delete(long id) { if (sccgDepartMapper.deleteById(id) <= 0) { throw new ApiException(ResultCode.RECORD_DELETE_FAIL); } } @Override public List tree() { // 1.查出所有网格 List list = list(); // 2.组装成父子的树型结构 // 2.1、找到所有的一级网格:使用jdk8的stream流进行过滤 List collect = list.stream().filter(griddingEntity -> { //分类父id为0就表示该网格为 一级网格 return griddingEntity.getParentId() == 0; }).map(item -> { // 找到子网格 set进children属性中 item.setChildren(getChildrens(item, list)); return item; }).collect(Collectors.toList()); List treeData = getTreeData(collect); return treeData; } @Override public IPage pageDepart(DepartVO.PageDepartVO params) { return null; } @Override public void updateStatus(DepartVO.StatusDepartVO params) { SccgDepart sccgDepart = this.loadDepartById(params.getId()); BeanUtils.copyProperties(params, sccgDepart); if (sccgDepartMapper.updateById(sccgDepart) <= 0) { throw new ApiException(ResultCode.RECORD_UPDATE_FAIL); } } /** * 利用递归将最后一级空集合变为null,前端联级选择器最后才不会出现 暂无数据的bug * * @return */ public List getTreeData(List griddingEntities) { for (int i = 0; i < griddingEntities.size(); i++) { //如果Children的size小于1就说明为空,设置为null if (griddingEntities.get(i).getChildren().size() < 1) { griddingEntities.get(i).setChildren(null); } else { //子网格有数据就递归 getTreeData(griddingEntities.get(i).getChildren()); } } return griddingEntities; } /** * 递归查找所有网格的子网格 * * @param root 当前网格 * @param all 所有网格 * @return */ public List getChildrens(SccgDepart root, List all) { List collect = all.stream().filter(griddingEntity -> { return griddingEntity.getParentId().equals(root.getId()); }).map(item -> { item.setChildren(getChildrens(item, all)); return item; }).collect(Collectors.toList()); return collect; } /** * 根据名字查询 * * @param name * @return */ private SccgDepart queryByName(String name) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SccgDepart::getDepartName, name); SccgDepart sccgDepart = this.sccgDepartMapper.selectOne(queryWrapper); return sccgDepart; } }