package com.gkhy.safePlatform.equipment.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 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.gkhy.safePlatform.account.rpc.apimodel.AccountDepartmentService; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.DepInfoRPCRespDTO; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.query.PageQuery; import com.gkhy.safePlatform.commons.utils.BeanCopyUtils; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.commons.vo.SearchResultVO; import com.gkhy.safePlatform.equipment.entity.*; import com.gkhy.safePlatform.equipment.model.dto.req.*; import com.gkhy.safePlatform.equipment.model.dto.resp.EquipmentInfoDto; import com.gkhy.safePlatform.equipment.repository.EquipmentInfoRepository; import com.gkhy.safePlatform.equipment.repository.EquipmentTypeMngRepository; import com.gkhy.safePlatform.equipment.service.*; import com.gkhy.safePlatform.equipment.utils.QueryHelpPlus; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; /** * 设备设施详细信息(EquipmentInfo)表服务实现类 * * @author xurui * @since 2022-07-19 14:02:50 */ @Service("equipmentInfoService") public class EquipmentInfoServiceImpl extends ServiceImpl implements EquipmentInfoService { @Autowired private EquipmentInfoRepository equipmentInfoRepository; @Autowired private EquipmentTakecareDetailService equipmentTakecareDetailService; @Autowired private EquipmentTestDetailService equipmentTestDetailService; @Autowired private EquipmentRepairDetailService equipmentRepairDetailService; @Autowired private EquipmentTakecareStardardDetailService equipmentTakecareStardardDetailService; @Autowired private EquipmentCheckStandardDetailService equipmentCheckStandardDetailService; @DubboReference(check = false) private AccountDepartmentService accountDepartmentService; @Autowired private EquipmentTypeMngRepository equipmentTypeMngRepository; @Override public ResultVO queryAll(PageQuery pageQuery) { Long pageIndex = pageQuery.getPageIndex(); Long pageSize = pageQuery.getPageSize(); IPage page = new Page<>(pageIndex, pageSize); page = baseMapper.selectPage(page, QueryHelpPlus.getPredicate(EquipmentInfo.class, pageQuery.getSearchParams())); List respList = BeanCopyUtils.copyBeanList(page.getRecords(), EquipmentInfoDto.class); //获取额外信息 respList.forEach(f->{ //设备保养 EquipmentTakecareDetailQueryCriteria criteria = new EquipmentTakecareDetailQueryCriteria(); criteria.setEquipmentId(f.getId()); criteria.setInfoTpe(pageQuery.getSearchParams().getInfoType()); List takecareDetailList = equipmentTakecareDetailService.queryAll(criteria); f.setTakecareDetailList(takecareDetailList); //设备检测 EquipmentTestDetailQueryCriteria criteria1 = new EquipmentTestDetailQueryCriteria(); criteria1.setEquipmentId(f.getId()); criteria1.setInfoTpe(pageQuery.getSearchParams().getInfoType()); List testDetailList = equipmentTestDetailService.queryAll(criteria1); f.setTestDetailList(testDetailList); //设备检查 TODO //设备维修 EquipmentRepairDetailQueryCriteria criteria2 = new EquipmentRepairDetailQueryCriteria(); criteria2.setEquipmentId(f.getId()); criteria2.setInfoTpe(pageQuery.getSearchParams().getInfoType()); List repairDetailList = equipmentRepairDetailService.queryAll(criteria2); f.setRepaireDetailList(repairDetailList); // --------------------------- 获取部门信息----------------------- //收集所用到的部门ID Set collectDepIdSet = new HashSet(); collectDepIdSet.add(f.getDepartmentId()); collectDepIdSet.add(f.getLeadingDepartmentId()); collectDepIdSet.add(f.getLeadingPersonDepartmentId()); takecareDetailList.forEach(info->{collectDepIdSet.add(info.getLeadingPersonDepartmentId());}); testDetailList.forEach(info->{collectDepIdSet.add(info.getTestPersonDepartmentId());}); repairDetailList.forEach(info->{collectDepIdSet.add(info.getRepairPersonDepartmentId());}); //获取部门名集合 Map depNameMap = getDepName(collectDepIdSet); //set f.setDepartmentName(depNameMap.get(f.getDepartmentId())); f.setLeadingDepartmentName(depNameMap.get(f.getLeadingDepartmentId())); f.setLeadingPersonDepartmentName(depNameMap.get(f.getLeadingPersonDepartmentId())); takecareDetailList.forEach(info->{info.setLeadingPersonDepartmentName(depNameMap.get(info.getLeadingPersonDepartmentId()));}); testDetailList.forEach(info->{info.setTestPersonDepartmentName(depNameMap.get(info.getTestPersonDepartmentId()));}); repairDetailList.forEach(info->{info.setRepairPersonDepartmentName(depNameMap.get(info.getRepairPersonDepartmentId()));}); }); return new SearchResultVO<>( true, pageIndex, pageSize,page.getPages(), page.getTotal(), respList, ResultCodes.OK ); } @Override public List queryAll(EquipmentInfoQueryCriteria criteria) { return baseMapper.selectList(QueryHelpPlus.getPredicate(EquipmentInfo.class, criteria)); } @Override public EquipmentInfoDto selectOne(Serializable id) { EquipmentInfo equipmentInfo = baseMapper.selectById(id); if(equipmentInfo == null){ return null; } EquipmentInfoDto infoDto = BeanCopyUtils.copyBean(equipmentInfo, EquipmentInfoDto.class); //设备保养 EquipmentTakecareDetailQueryCriteria criteria = new EquipmentTakecareDetailQueryCriteria(); criteria.setEquipmentId(infoDto.getId()); criteria.setInfoTpe(infoDto.getInfoType()); List takecareDetailList = equipmentTakecareDetailService.queryAll(criteria); infoDto.setTakecareDetailList(takecareDetailList); //设备检测 EquipmentTestDetailQueryCriteria criteria1 = new EquipmentTestDetailQueryCriteria(); criteria1.setEquipmentId(infoDto.getId()); criteria1.setInfoTpe(infoDto.getInfoType()); List testDetailList = equipmentTestDetailService.queryAll(criteria1); infoDto.setTestDetailList(testDetailList); //设备检查 TODO //设备维修 EquipmentRepairDetailQueryCriteria criteria2 = new EquipmentRepairDetailQueryCriteria(); criteria2.setEquipmentId(infoDto.getId()); criteria2.setInfoTpe(infoDto.getInfoType()); List repairDetailList = equipmentRepairDetailService.queryAll(criteria2); infoDto.setRepaireDetailList(repairDetailList); //检查标准 EquipmentCheckStandardDetailQueryCriteria criteria3 = new EquipmentCheckStandardDetailQueryCriteria(); criteria3.setEquipmentId(infoDto.getId()); criteria3.setInfoTpe(infoDto.getInfoType()); List checkStandardDetailList = equipmentCheckStandardDetailService.queryAll(criteria3); infoDto.setCheckStandardeDetailList(checkStandardDetailList); //保养标准 EquipmentTakecareStardardDetailQueryCriteria criteria4 = new EquipmentTakecareStardardDetailQueryCriteria(); criteria4.setEquipmentId(infoDto.getId()); criteria4.setInfoTpe(infoDto.getInfoType()); List takecareStardardDetailList = equipmentTakecareStardardDetailService.queryAll(criteria4); infoDto.setTakecareStardardeDetailList(takecareStardardDetailList); // --------------------------- 获取部门信息----------------------- //收集所用到的部门ID Set collectDepIdSet = new HashSet(); collectDepIdSet.add(infoDto.getDepartmentId()); collectDepIdSet.add(infoDto.getLeadingDepartmentId()); collectDepIdSet.add(infoDto.getLeadingPersonDepartmentId()); takecareDetailList.forEach(info->{collectDepIdSet.add(info.getLeadingPersonDepartmentId());}); testDetailList.forEach(info->{collectDepIdSet.add(info.getTestPersonDepartmentId());}); repairDetailList.forEach(info->{collectDepIdSet.add(info.getRepairPersonDepartmentId());}); //获取部门名集合 Map depNameMap = getDepName(collectDepIdSet); //set infoDto.setDepartmentName(depNameMap.get(infoDto.getDepartmentId())); infoDto.setLeadingDepartmentName(depNameMap.get(infoDto.getLeadingDepartmentId())); infoDto.setLeadingPersonDepartmentName(depNameMap.get(infoDto.getLeadingPersonDepartmentId())); takecareDetailList.forEach(info->{info.setLeadingPersonDepartmentName(depNameMap.get(info.getLeadingPersonDepartmentId()));}); testDetailList.forEach(info->{info.setTestPersonDepartmentName(depNameMap.get(info.getTestPersonDepartmentId()));}); repairDetailList.forEach(info->{info.setRepairPersonDepartmentName(depNameMap.get(info.getRepairPersonDepartmentId()));}); EquipmentTypeMng typeMng = equipmentTypeMngRepository.selectOne(new QueryWrapper().eq("id",infoDto.getEquipmentTypeId())); if(typeMng != null){ infoDto.setEquipmentTypeName(typeMng.getTypeName()); } return infoDto; } @Override public void addOrUpdate(EquipmentInfoSaveOrUpdate infoDto) { EquipmentInfo equipmentInfo = BeanCopyUtils.copyBean(infoDto, EquipmentInfo.class); //保存主数据 if (infoDto.getId() == null) { //新增 this.save(equipmentInfo); } else { this.update(equipmentInfo,new UpdateWrapper().eq("id",infoDto.getId())); } //保存设备保养 List takecareDetailList = infoDto.getTakecareDetailList(); takecareDetailList.forEach(f->{ f.setEquipmentId(equipmentInfo.getId()); f.setInfoTpe(equipmentInfo.getInfoType()); }); equipmentTakecareDetailService.saveOrUpdateBatch(takecareDetailList); if(StringUtils.hasText(infoDto.getDelTakecareDetails())){ List idList = Arrays.stream(infoDto.getDelTakecareDetails().split(",")).map(s-> Long.parseLong(s.trim())) .collect(Collectors.toList()); equipmentTakecareDetailService.removeByIds(idList); } //保存设备检测 List testDetailList = infoDto.getTestDetailList(); testDetailList.forEach(f->{ f.setEquipmentId(equipmentInfo.getId()); f.setInfoTpe(equipmentInfo.getInfoType()); }); equipmentTestDetailService.saveOrUpdateBatch(testDetailList); if(StringUtils.hasText(infoDto.getDelTestDetails())){ List idList = Arrays.stream(infoDto.getDelTestDetails().split(",")).map(s-> Long.parseLong(s.trim())) .collect(Collectors.toList()); equipmentTestDetailService.removeByIds(idList); } //设备检查 TODO //保存设备维修 List repaireDetailList = infoDto.getRepaireDetailList(); repaireDetailList.forEach(f->{ f.setEquipmentId(equipmentInfo.getId()); f.setInfoTpe(equipmentInfo.getInfoType()); }); equipmentRepairDetailService.saveOrUpdateBatch(repaireDetailList); if(StringUtils.hasText(infoDto.getDelRepaireDetails())){ List idList = Arrays.stream(infoDto.getDelRepaireDetails().split(",")).map(s-> Long.parseLong(s.trim())) .collect(Collectors.toList()); equipmentRepairDetailService.removeByIds(idList); } //保存检查标准 List checkStandardeDetailList = infoDto.getCheckStandardeDetailList(); checkStandardeDetailList.forEach(f->{ f.setEquipmentId(equipmentInfo.getId()); f.setInfoTpe(equipmentInfo.getInfoType()); }); equipmentCheckStandardDetailService.saveOrUpdateBatch(checkStandardeDetailList); if(StringUtils.hasText(infoDto.getDelCheckStandardeDetails())){ List idList = Arrays.stream(infoDto.getDelCheckStandardeDetails().split(",")).map(s-> Long.parseLong(s.trim())) .collect(Collectors.toList()); equipmentCheckStandardDetailService.removeByIds(idList); } //保存保养标准 List takecareStardardeDetailList = infoDto.getTakecareStardardeDetailList(); takecareStardardeDetailList.forEach(f->{ f.setEquipmentId(equipmentInfo.getId()); f.setInfoTpe(equipmentInfo.getInfoType()); }); equipmentTakecareStardardDetailService.saveOrUpdateBatch(takecareStardardeDetailList); if(StringUtils.hasText(infoDto.getDelTakecareStardardeDetails())){ List idList = Arrays.stream(infoDto.getDelTakecareStardardeDetails().split(",")).map(s-> Long.parseLong(s.trim())) .collect(Collectors.toList()); equipmentTakecareStardardDetailService.removeByIds(idList); } } @Override public Object statistics() { QueryWrapper wrapper = new QueryWrapper() .select("stop_status as stopStatus,count(0) as count") .groupBy("stop_status"); List> list = this.listMaps(wrapper); Map map = new HashMap<>(); map.put("-1",equipmentInfoRepository.countOverTime());//超时未保养 return list; } @Override public Map getDepName(Set collectDepIdSet) { Map depPool = new HashMap<>(); collectDepIdSet.forEach(depId ->{ // 设置部门名称 if (!depPool.containsKey(depId)) { try { ResultVO rpcResult = accountDepartmentService.getDepInfoByDepId(depId); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { DepInfoRPCRespDTO dep = (DepInfoRPCRespDTO) rpcResult.getData(); depPool.put(dep.getDepId(), dep.getDepName()); } } } catch (Exception e) { log.error("exception",e); } } }); return depPool; } }