| | |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.modules.mdc.dto.*; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; |
| | | import org.jeecg.modules.mdc.entity.MdcShiftSub; |
| | | import org.jeecg.modules.mdc.entity.MdcUtilizationRate; |
| | | import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentService; |
| | | import org.jeecg.modules.mdc.service.IMdcShiftSubService; |
| | | import org.jeecg.modules.mdc.service.IMdcUtilizationRateService; |
| | | import org.jeecg.modules.mdc.service.MdcEfficiencyReportService; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author: LiuS |
| | |
| | | |
| | | @Resource |
| | | private IMdcProductionService mdcProductionService; |
| | | |
| | | @Resource |
| | | private IMdcShiftSubService mdcShiftSubService; |
| | | |
| | | /** |
| | | * 利用率报表 |
| | |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } else { |
| | | // 班次利用率等级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl"); |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl"); |
| | | // 班次利用率数据 |
| | | List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo); |
| | | |
| | | // 封装结果 |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // 部门层级 |
| | | List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); |
| | | // 查询所有部门信息 |
| | | List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); |
| | | // 班次名称显示处理 |
| | | String shiftSubName = ""; |
| | | if (StringUtils.isBlank(vo.getShiftId())) { |
| | | // 合并设备每天所有班次的数据 |
| | | shiftSubName = "全部"; |
| | | } else { |
| | | List<MdcShiftSub> mdcShiftSubList = new ArrayList<>(); |
| | | if (StringUtils.isBlank(vo.getShiftSubId())) { |
| | | // 拼接所选班制下的所有班次名称 |
| | | mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1")); |
| | | mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList()); |
| | | } else { |
| | | // 设置当前选择的班次名称 |
| | | mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1")); |
| | | mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList()); |
| | | } |
| | | List<String> shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); |
| | | shiftSubName = String.join(",", shiftSubNames); |
| | | } |
| | | // 合并同一天多班次数据 |
| | | mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList); |
| | | for (MdcEquDepDto mdcEquDepDto : equipmentList) { |
| | | MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto(); |
| | | mdcEfficiencyShiftListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); |
| | | mdcEfficiencyShiftListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); |
| | | mdcEfficiencyShiftListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); |
| | | mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName); |
| | | switch (mdcEquDepDto.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyShiftListDto.setLevel1(mdcEquDepDto.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyShiftListDto.setLevel2(mdcEquDepDto.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyShiftListDto.setLevel3(mdcEquDepDto.getDepartName()); |
| | | break; |
| | | default: |
| | | } |
| | | |
| | | SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null); |
| | | if (sysDepart != null) { |
| | | switch (sysDepart.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyShiftListDto.setLevel1(sysDepart.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyShiftListDto.setLevel2(sysDepart.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyShiftListDto.setLevel3(sysDepart.getDepartName()); |
| | | break; |
| | | default: |
| | | } |
| | | if (StringUtils.isNotEmpty(sysDepart.getParentId())) { |
| | | departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> { |
| | | switch (depart1.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyShiftListDto.setLevel1(depart1.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyShiftListDto.setLevel2(depart1.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyShiftListDto.setLevel3(depart1.getDepartName()); |
| | | break; |
| | | default: |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | List<MdcEfficiencyShiftResultDto> list = new ArrayList<>(); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList)); |
| | | } |
| | | mdcEfficiencyShiftListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyShiftListDto); |
| | | } |
| | | } else { |
| | | // 产线层级 |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | // 查询所有产线信息 |
| | | List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); |
| | | |
| | | // 班次名称显示处理 |
| | | String shiftSubName = ""; |
| | | if (StringUtils.isBlank(vo.getShiftId())) { |
| | | // 合并设备每天所有班次的数据 |
| | | shiftSubName = "全部"; |
| | | } else { |
| | | List<MdcShiftSub> mdcShiftSubList = new ArrayList<>(); |
| | | if (StringUtils.isBlank(vo.getShiftSubId())) { |
| | | // 拼接所选班制下的所有班次名称 |
| | | mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1")); |
| | | mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList()); |
| | | } else { |
| | | // 设置当前选择的班次名称 |
| | | mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1")); |
| | | mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList()); |
| | | } |
| | | List<String> shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); |
| | | shiftSubName = String.join(",", shiftSubNames); |
| | | } |
| | | // 合并同一天多班次数据 |
| | | mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList); |
| | | for (MdcEquProDto mdcEquProDto : equipmentList) { |
| | | MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto(); |
| | | mdcEfficiencyShiftListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); |
| | | mdcEfficiencyShiftListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); |
| | | mdcEfficiencyShiftListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); |
| | | mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName); |
| | | switch (mdcEquProDto.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyShiftListDto.setLevel1(mdcEquProDto.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyShiftListDto.setLevel2(mdcEquProDto.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyShiftListDto.setLevel3(mdcEquProDto.getProductionName()); |
| | | break; |
| | | default: |
| | | } |
| | | MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null); |
| | | if (mdcProduction != null) { |
| | | switch (mdcProduction.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyShiftListDto.setLevel1(mdcProduction.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyShiftListDto.setLevel2(mdcProduction.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyShiftListDto.setLevel3(mdcProduction.getProductionName()); |
| | | break; |
| | | default: |
| | | } |
| | | if (StringUtils.isNotEmpty(mdcProduction.getParentId())) { |
| | | productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> { |
| | | switch (production1.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyShiftListDto.setLevel1(production1.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyShiftListDto.setLevel2(production1.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyShiftListDto.setLevel3(production1.getProductionName()); |
| | | break; |
| | | default: |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | List<MdcEfficiencyShiftResultDto> list = new ArrayList<>(); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList)); |
| | | } |
| | | mdcEfficiencyShiftListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyShiftListDto); |
| | | } |
| | | } |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | private MdcEfficiencyShiftResultDto efficiencyShiftRate(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto(); |
| | | if (mdcEquipmentStatisticalShiftInfoList != null && !mdcEquipmentStatisticalShiftInfoList.isEmpty()) { |
| | | for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) { |
| | | if (date.equals(equipmentStatisticalShiftInfo.getTheDate()) && equipmentStatisticalShiftInfo.getEquipmentId().equals(equipmentId)) { |
| | | mdcEfficiencyShiftResultDto.setTheDate(equipmentStatisticalShiftInfo.getTheDate()); |
| | | mdcEfficiencyShiftResultDto.setProcessLong(equipmentStatisticalShiftInfo.getProcessLong()); |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong()); |
| | | mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong()); |
| | | mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong()); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | mdcEfficiencyShiftResultDto.setTheDate(date); |
| | | mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0")); |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0")); |
| | | mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0")); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0")); |
| | | mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0")); |
| | | mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0")); |
| | | mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0")); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | return mdcEfficiencyShiftResultDto; |
| | | } |
| | | |
| | | /** |
| | | * 合并同一天同班次数据 |
| | | * |
| | | * @param mdcEquipmentStatisticalShiftInfoList |
| | | * @return |
| | | */ |
| | | private List<MdcEquipmentStatisticalShiftInfo> handleEfficiencyShiftList(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList) { |
| | | List<MdcEquipmentStatisticalShiftInfo> result = new ArrayList<>(); |
| | | Map<String, MdcEquipmentStatisticalShiftInfo> map = new HashMap<>(); |
| | | for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) { |
| | | if (map.containsKey(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate())) { |
| | | MdcEquipmentStatisticalShiftInfo vo = map.get(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate()); |
| | | vo.setProcessLong(vo.getProcessLong().add(equipmentStatisticalShiftInfo.getProcessLong())); |
| | | vo.setOpenLong(vo.getOpenLong().add(equipmentStatisticalShiftInfo.getOpenLong())); |
| | | vo.setWaitLong(vo.getWaitLong().add(equipmentStatisticalShiftInfo.getWaitLong())); |
| | | vo.setCloseLong(vo.getCloseLong().add(equipmentStatisticalShiftInfo.getCloseLong())); |
| | | } else { |
| | | map.put(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate(), equipmentStatisticalShiftInfo); |
| | | } |
| | | } |
| | | for (String s : map.keySet()) { |
| | | result.add(map.get(s)); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } else { |