package com.ycl.service.depart.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.dto.user.AdminDepartDTO; import com.ycl.entity.depart.UmsDepart; import com.ycl.entity.user.UmsDepartManage; import com.ycl.enums.common.ResultCode; import com.ycl.exception.ApiException; import com.ycl.mapper.depart.UmsDepartMapper; import com.ycl.service.depart.UmsDepartService; import com.ycl.service.user.UmsDepartManageService; import com.ycl.service.user.UmsAdminService; import com.ycl.utils.common.PojoUtils; import com.ycl.vo.depart.DepartVO; 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.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; @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); if (sccgDepartMapper.insert(depart) != 1) { throw new ApiException(ResultCode.RECORD_SAVE_FAIL); } } @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() != updateDepartVO.getId()) { throw new ApiException(ResultCode.RECORD_ALREADY_EXISTS); } UmsDepart depart = this.getById(updateDepartVO.getId()); BeanUtils.copyProperties(updateDepartVO, depart); List userIds = updateDepartVO.getUserIds(); if (CollUtil.isNotEmpty(userIds)) { Long departId = updateDepartVO.getId(); List departList = umsAdminDepartService.queryByDepartId(departId); if (CollUtil.isNotEmpty(departList)) { umsAdminDepartService.deletedByDepartId(departId); } userIds.forEach(e -> { UmsDepartManage adminDepart = new UmsDepartManage(); adminDepart.setDepartId(departId); adminDepart.setUserId(e); umsAdminDepartService.save(adminDepart); }); } if (sccgDepartMapper.updateById(depart) != 1) { throw new ApiException(ResultCode.RECORD_UPDATE_FAIL); } } @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 = 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) { Page page = new Page<>(params.getCurrent(), params.getPageSize()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(params.getDepartName())) { query.like(UmsDepart::getDepartName, params.getDepartName()); } if (PojoUtils.Vo.isUsefulSearchParam(params.getDepartType())) { query.like(UmsDepart::getDepartType, params.getDepartType()); } query.orderByDesc(UmsDepart::getCreateTime); Page departPage = sccgDepartMapper.selectPage(page, query); List records = departPage.getRecords(); //负责人 if (CollUtil.isNotEmpty(records)) { for (UmsDepart record : records) { List umsAdminDeparts = umsAdminDepartService.queryByDepartId(record.getId()); if (CollUtil.isNotEmpty(umsAdminDeparts)) { List userInfoDTOS = umsAdminDeparts.stream().map(a -> { AdminDepartDTO.UserInfoDTO userInfoDTO = new AdminDepartDTO.UserInfoDTO(); userInfoDTO.setUserId(a.getUserId()); userInfoDTO.setUsername(umsAdminService.getById(a.getUserId()).getUsername()); return userInfoDTO; }).collect(Collectors.toList()); record.setUserInfoDTOS(userInfoDTOS); } } } return departPage; } @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; } }