package com.qianwen.smartman.modules.cps.service.impl; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.tool.node.ForestNodeMerger; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.smartman.common.enums.StatusType; import com.qianwen.smartman.common.utils.CommonUtil; import com.qianwen.smartman.common.utils.Lambda; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.smartman.modules.cps.convert.OrganizationConvert; import com.qianwen.smartman.modules.cps.dto.OrganizationDTO; import com.qianwen.smartman.modules.cps.entity.CommonGroup; import com.qianwen.smartman.modules.cps.entity.Employee; import com.qianwen.smartman.modules.cps.excel.OrganizationExcel; import com.qianwen.smartman.modules.cps.mapper.OrganizationMapper; import com.qianwen.smartman.modules.cps.service.ICommonGroupService; import com.qianwen.smartman.modules.cps.service.IOrganizationService; import com.qianwen.smartman.modules.cps.vo.OrganizationSelectVO; import com.qianwen.smartman.modules.cps.vo.OrganizationVO; @Service public class OrganizationServiceImpl implements IOrganizationService { private final OrganizationMapper organizationMapper; private final ICommonGroupService commonGroupService; public OrganizationServiceImpl(final OrganizationMapper organizationMapper, final ICommonGroupService commonGroupService) { this.organizationMapper = organizationMapper; this.commonGroupService = commonGroupService; } @Override // org.springblade.modules.cps.service.IOrganizationService public List selectList(OrganizationSelectVO organizationSelectVO) { List organizationList = this.organizationMapper.selectOrganizationList(organizationSelectVO); return calculateOrganizationPeopleNum(organizationList); } @Override // org.springblade.modules.cps.service.IOrganizationService @Transactional(rollbackFor = {Exception.class}) public Boolean deleteOrganization(String ids, Integer type) { if (StatusType.REMOVE.getType().equals(type)) { CommonGroup commonGroup = this.commonGroupService.getOne(Lambda.create() .eq(CommonGroup::getStatus, 1) .in(CommonGroup::getParentId, Func.toLongList(ids)) .limit()); /* CommonGroup commonGroup = (CommonGroup) this.commonGroupService.getOne(((ExtraLambdaQueryWrapper) ((ExtraLambdaQueryWrapper) Lambda.create().eq((v0) -> { return v0.getStatus(); }, 1)).in((v0) -> { return v0.getParentId(); }, Func.toLongList(ids))).limit());*/ if (Func.isNotEmpty(commonGroup)) { throw new ServiceException(MessageUtils.message("cps.organization.delete.sub.dept", new Object[0])); } Employee employee = this.organizationMapper.getOneEmployeeByOrganizationIdList(Func.toLongList(ids)); if (Func.isNotEmpty(employee)) { throw new ServiceException(MessageUtils.message("cps.organization.delete.failed", new Object[0])); } return Boolean.valueOf(this.commonGroupService.removeByIds(Func.toLongList(ids))); } List groups = this.commonGroupService.list(Wrappers.query() .lambda() .in(CommonGroup::getParentId, Func.toLongList(ids))); /* List groups = this.commonGroupService.list((Wrapper) Wrappers.query().lambda().in((v0) -> { return v0.getParentId(); }, Func.toLongList(ids)));*/ if (Func.isEmpty(groups)) { return this.commonGroupService.changeStatus(Func.toLongList(ids), CommonConstant.DEACTIVATE); } boolean match = groups.stream().anyMatch(g -> { return g.getStatus().equals(1); }); if (match) { throw new ServiceException(MessageUtils.message("cps.organization.disable.sub.dept", new Object[0])); } return this.commonGroupService.changeStatus(Func.toLongList(ids), CommonConstant.DEACTIVATE); } @Override // org.springblade.modules.cps.service.IOrganizationService public List getExportOrganizationData(OrganizationSelectVO organizationSelectVO) { List list = selectList(organizationSelectVO); List tree = ForestNodeMerger.merge(OrganizationConvert.INSTANCE.convert(list)); return OrganizationConvert.INSTANCE.convertToExcel(CommonUtil.treeToList(tree)); } private List calculateOrganizationPeopleNum(List organizationList) { List result = new ArrayList<>(); organizationList.forEach(x -> { int peopleNum = organizationList.stream().filter(p -> { return p.getCode().indexOf(x.getCode()) == 0; }).mapToInt((v0) -> { return v0.getPeopleNum(); }).sum(); OrganizationDTO organizationDTO = OrganizationConvert.INSTANCE.convert(x); organizationDTO.setParentName(Func.isEmpty(organizationDTO.getParentName()) ? "——" : organizationDTO.getParentName()); organizationDTO.setPeopleNum(Integer.valueOf(peopleNum)); result.add(organizationDTO); }); return result; } }