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.entity.depart.UmsDepart; import com.ycl.enums.common.ResultCode; import com.ycl.exception.ApiException; import com.ycl.mapper.depart.UmsDepartMapper; import com.ycl.mapper.dict.DataDictionaryMapper; import com.ycl.service.depart.IDepartManagerService; import com.ycl.service.depart.UmsDepartService; import com.ycl.service.user.UmsAdminService; import com.ycl.service.user.UmsDepartManageService; import com.ycl.vo.depart.DepartVO; import com.ycl.vo.depart.UmsDepartVO; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; /** *

* 部门表 服务实现类 *

* * @author lyq * @since 2022-09-07 */ @Service public class UmsDepartServiceImpl extends ServiceImpl implements UmsDepartService { @Resource private UmsDepartMapper sccgDepartMapper; @Resource private UmsDepartManageService umsAdminDepartService; @Resource private UmsAdminService umsAdminService; @Resource IDepartManagerService iDepartManagerService; @Resource UmsDepartService umsDepartService; @Resource DataDictionaryMapper dataDictionaryMapper; @Override @Transactional(rollbackFor = Exception.class) public void create(DepartVO.AddDepartVO addDepartVO) { UmsDepart sccgDepart = this.queryByName(addDepartVO.getDepartName()); if (null != sccgDepart) { throw new ApiException(ResultCode.RECORD_ALREADY_EXISTS); } UmsDepart depart = new UmsDepart(); BeanUtils.copyProperties(addDepartVO, depart); depart.setStatus(Short.valueOf("1")); umsDepartService.save(depart); addDepartVO.getDepartManagerList() .forEach(item -> { item.setCreateTime(LocalDateTime.now()); item.setDepartId(depart.getId()); }); iDepartManagerService.saveBatch(addDepartVO.getDepartManagerList()); } @Override public UmsDepart loadDepartById(long id) { UmsDepart 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) { UmsDepart sccgDepart = this.queryByName(updateDepartVO.getDepartName()); if (null != sccgDepart && !sccgDepart.getId().equals(updateDepartVO.getId())) { throw new ApiException(ResultCode.RECORD_ALREADY_EXISTS); } UmsDepart depart = new UmsDepart(); BeanUtils.copyProperties(updateDepartVO, depart); umsDepartService.updateById(depart); if (updateDepartVO.getDepartManagerList().size() > 0) { iDepartManagerService.deleteByDepartId(depart.getId()); updateDepartVO.getDepartManagerList() .forEach(item -> { item.setCreateTime(LocalDateTime.now()); item.setDepartId(depart.getId()); }); iDepartManagerService.saveBatch(updateDepartVO.getDepartManagerList()); } } @Override @Transactional(rollbackFor = Exception.class) public void delete(long id) { if (sccgDepartMapper.deleteById(id) <= 0) { throw new ApiException(ResultCode.RECORD_DELETE_FAIL); } umsAdminDepartService.deletedByDepartId(id); } @Override public List tree() { // 1.查出所有网格 List list = baseMapper.selectDepartList(); // 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(String departName, IPage page) { List ls = sccgDepartMapper.selectPageByName(departName, page.offset(), page.getSize()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .like(StringUtils.isNotEmpty(departName), UmsDepart::getDepartName, departName); long total = this.count(queryWrapper); page.setRecords(ls); page.setTotal(total); return page; } @Override public void updateStatus(DepartVO.StatusDepartVO params) { UmsDepart 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; } public List getChildrens(UmsDepart 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 UmsDepart queryByName(String name) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(UmsDepart::getDepartName, name); UmsDepart sccgDepart = this.sccgDepartMapper.selectOne(queryWrapper); return sccgDepart; } }