¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.modules.mdc.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.jeecg.modules.mdc.dto.*; |
| | | import org.jeecg.modules.mdc.entity.*; |
| | | import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper; |
| | | import org.jeecg.modules.mdc.service.*; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | | import org.jeecg.modules.mdc.vo.MdcUtilizationRateDto; |
| | | import org.jeecg.modules.mdc.vo.*; |
| | | import org.jeecg.modules.system.entity.MdcProduction; |
| | | import org.jeecg.modules.system.entity.SysDepart; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | | import org.jeecg.modules.system.service.ISysDepartService; |
| | | import org.jeecg.modules.system.service.ISysDictService; |
| | | import org.jeecg.modules.system.vo.MdcProOptionsVo; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author: LiuS |
| | | * @create: 2023-06-16 09:52 |
| | | */ |
| | | @Service |
| | | public class MdcEfficiencyReportServiceImpl implements MdcEfficiencyReportService { |
| | | |
| | | @Resource |
| | | private IMdcEquipmentService mdcEquipmentService; |
| | | |
| | | @Resource |
| | | private MdcEfficiencyReportMapper mdcEfficiencyReportMapper; |
| | | |
| | | @Resource |
| | | private IMdcUtilizationRateService mdcUtilizationRateService; |
| | | |
| | | @Resource |
| | | private ISysDepartService sysDepartService; |
| | | |
| | | @Resource |
| | | private IMdcProductionService mdcProductionService; |
| | | |
| | | @Resource |
| | | private IMdcShiftSubService mdcShiftSubService; |
| | | |
| | | @Resource |
| | | private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; |
| | | |
| | | @Resource |
| | | private ISysDictService sysDictService; |
| | | |
| | | /** |
| | | * å©ç¨çæ¥è¡¨ |
| | | * |
| | | * @param userId |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MdcEfficiencyVo efficiencyList(String userId, MdcEfficiencyReportQueryVo vo) { |
| | | MdcEfficiencyVo result = new MdcEfficiencyVo(); |
| | | List<MdcEfficiencyListDto> listDtos = new ArrayList<>(); |
| | | List<String> equipmentIds = new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // åå°è®¾å¤ä¿¡æ¯ |
| | | vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIds); |
| | | } |
| | | |
| | | List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); |
| | | result.setDates(dates); |
| | | |
| | | // å©ç¨çç级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); |
| | | |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } else { |
| | | |
| | | List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo); |
| | | if (equipmentIdList != null && !equipmentIdList.isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIdList); |
| | | } else { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | return result; |
| | | } |
| | | |
| | | // æ¥è¯¢å©ç¨çæ°æ® |
| | | List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(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()).orderByAsc(SysDepart::getDepartOrder)); |
| | | |
| | | for (MdcEquDepDto mdcEquDepDto : equipmentList) { |
| | | MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); |
| | | mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); |
| | | mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); |
| | | mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); |
| | | switch (mdcEquDepDto.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(depart1.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(depart1.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.setLevel3(depart1.getDepartName()); |
| | | break; |
| | | default: |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | List<MdcEfficiencyResultDto> list = new ArrayList<>(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); |
| | | mdcEfficiencyResultDto1.setTheDate("å计"); |
| | | mdcEfficiencyResultDto.setTheDate("å¹³åå¼"); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); |
| | | } |
| | | mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); |
| | | mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); |
| | | mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); |
| | | mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); |
| | | mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); |
| | | mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong()); |
| | | mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate()); |
| | | mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong()); |
| | | mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | list.add(mdcEfficiencyResultDto1); |
| | | list.add(mdcEfficiencyResultDto); |
| | | mdcEfficiencyListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyListDto); |
| | | } |
| | | } else { |
| | | // 产线å±çº§ |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | // æ¥è¯¢ææäº§çº¿ä¿¡æ¯ |
| | | List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder)); |
| | | |
| | | for (MdcEquProDto mdcEquProDto : equipmentList) { |
| | | MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); |
| | | mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); |
| | | mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); |
| | | mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); |
| | | switch (mdcEquProDto.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(production1.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(production1.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.setLevel3(production1.getProductionName()); |
| | | break; |
| | | default: |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | List<MdcEfficiencyResultDto> list = new ArrayList<>(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); |
| | | mdcEfficiencyResultDto1.setTheDate("å计"); |
| | | mdcEfficiencyResultDto.setTheDate("å¹³åå¼"); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); |
| | | } |
| | | mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); |
| | | mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); |
| | | mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); |
| | | mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); |
| | | mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); |
| | | mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong()); |
| | | mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate()); |
| | | mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong()); |
| | | mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | list.add(mdcEfficiencyResultDto1); |
| | | list.add(mdcEfficiencyResultDto); |
| | | mdcEfficiencyListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyListDto); |
| | | } |
| | | } |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } |
| | | // æ·»å å计å¼åå¹³åå¼ |
| | | result.getDates().add("å计"); |
| | | result.getDates().add("å¹³åå¼"); |
| | | MdcEfficiencyListDto sum = new MdcEfficiencyListDto(); |
| | | sum.setLevel1("å计"); |
| | | sum.setLevel2("å计"); |
| | | sum.setLevel3("å计"); |
| | | sum.setEquipmentId("å计"); |
| | | sum.setEquipmentName("å计"); |
| | | sum.setEquipmentType("å计"); |
| | | //计ç®åè®¡å¼ |
| | | sum.setDataList(this.calculateTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList)); |
| | | |
| | | MdcEfficiencyListDto avg = new MdcEfficiencyListDto(); |
| | | avg.setLevel1("å¹³åå¼"); |
| | | avg.setLevel2("å¹³åå¼"); |
| | | avg.setLevel3("å¹³åå¼"); |
| | | avg.setEquipmentId("å¹³åå¼"); |
| | | avg.setEquipmentName("å¹³åå¼"); |
| | | avg.setEquipmentType("å¹³åå¼"); |
| | | //计ç®å¹³åå¼ |
| | | avg.setDataList(this.calculateAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList)); |
| | | result.getMdcEfficiencyList().add(sum); |
| | | result.getMdcEfficiencyList().add(avg); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å¹³åå¼ |
| | | * |
| | | * @param mdcEfficiencyList |
| | | * @param mdcUtilizationRateList |
| | | * @return |
| | | */ |
| | | private List<MdcEfficiencyResultDto> calculateAverage(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | List<MdcEfficiencyResultDto> result = new ArrayList<>(); |
| | | List<MdcEfficiencyResultDto> dataList = new ArrayList<>(); |
| | | for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { |
| | | dataList.addAll(mdcEfficiencyListDto.getDataList()); |
| | | } |
| | | dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) |
| | | .forEach((theDate, mert) -> { |
| | | mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( |
| | | a.getTheDate(), |
| | | a.getProcessLong().add(b.getProcessLong()), |
| | | a.getUtilizationRate().add(b.getUtilizationRate()), |
| | | a.getStartRate().add(b.getStartRate()), |
| | | a.getOpenRate().add(b.getOpenRate()), |
| | | a.getOpenLong().add(b.getOpenLong()), |
| | | a.getWaitLong().add(b.getWaitLong()), |
| | | a.getCloseLong().add(b.getCloseLong()), |
| | | a.getFaultLong().add(b.getFaultLong()), |
| | | a.getFaultRate().add(b.getFaultRate()), |
| | | a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); |
| | | }); |
| | | for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®åè®¡å¼ |
| | | * |
| | | * @param mdcEfficiencyList |
| | | * @return |
| | | */ |
| | | private List<MdcEfficiencyResultDto> calculateTotal(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | List<MdcEfficiencyResultDto> result = new ArrayList<>(); |
| | | List<MdcEfficiencyResultDto> dataList = new ArrayList<>(); |
| | | for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { |
| | | dataList.addAll(mdcEfficiencyListDto.getDataList()); |
| | | } |
| | | dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) |
| | | .forEach((theDate, mert) -> { |
| | | mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( |
| | | a.getTheDate(), |
| | | a.getProcessLong().add(b.getProcessLong()), |
| | | a.getUtilizationRate().add(b.getUtilizationRate()), |
| | | a.getStartRate().add(b.getStartRate()), |
| | | a.getOpenRate().add(b.getOpenRate()), |
| | | a.getOpenLong().add(b.getOpenLong()), |
| | | a.getWaitLong().add(b.getWaitLong()), |
| | | a.getCloseLong().add(b.getCloseLong()), |
| | | a.getFaultLong().add(b.getFaultLong()), |
| | | a.getFaultRate().add(b.getFaultRate()), |
| | | a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); |
| | | }); |
| | | for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 弿ºçæ¥è¡¨ |
| | | * |
| | | * @param userId |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MdcEfficiencyVo efficiencyPOList(String userId, MdcEfficiencyReportQueryVo vo) { |
| | | MdcEfficiencyVo result = new MdcEfficiencyVo(); |
| | | List<MdcEfficiencyListDto> listDtos = new ArrayList<>(); |
| | | List<String> equipmentIds = new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // åå°è®¾å¤ä¿¡æ¯ |
| | | vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIds); |
| | | } |
| | | |
| | | List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); |
| | | result.setDates(dates); |
| | | |
| | | // å©ç¨çç级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl"); |
| | | |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } else { |
| | | |
| | | List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo); |
| | | if (equipmentIdList != null && !equipmentIdList.isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIdList); |
| | | } else { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | return result; |
| | | } |
| | | // æ¥è¯¢å©ç¨çæ°æ® |
| | | List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(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()).orderByAsc(SysDepart::getDepartOrder)); |
| | | |
| | | for (MdcEquDepDto mdcEquDepDto : equipmentList) { |
| | | MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); |
| | | mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); |
| | | mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); |
| | | mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); |
| | | switch (mdcEquDepDto.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(depart1.getDepartName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(depart1.getDepartName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.setLevel3(depart1.getDepartName()); |
| | | break; |
| | | default: |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | List<MdcEfficiencyResultDto> list = new ArrayList<>(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); |
| | | mdcEfficiencyResultDto1.setTheDate("å计"); |
| | | mdcEfficiencyResultDto.setTheDate("å¹³åå¼"); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); |
| | | } |
| | | mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); |
| | | mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); |
| | | mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); |
| | | mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); |
| | | mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); |
| | | mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | list.add(mdcEfficiencyResultDto1); |
| | | list.add(mdcEfficiencyResultDto); |
| | | mdcEfficiencyListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyListDto); |
| | | } |
| | | } else { |
| | | // 产线å±çº§ |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | // æ¥è¯¢ææäº§çº¿ä¿¡æ¯ |
| | | List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder)); |
| | | |
| | | for (MdcEquProDto mdcEquProDto : equipmentList) { |
| | | MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); |
| | | mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); |
| | | mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); |
| | | mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); |
| | | switch (mdcEquProDto.getOrgType()) { |
| | | case "1": |
| | | mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.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": |
| | | mdcEfficiencyListDto.setLevel1(production1.getProductionName()); |
| | | break; |
| | | case "2": |
| | | mdcEfficiencyListDto.setLevel2(production1.getProductionName()); |
| | | break; |
| | | case "3": |
| | | mdcEfficiencyListDto.setLevel3(production1.getProductionName()); |
| | | break; |
| | | default: |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | List<MdcEfficiencyResultDto> list = new ArrayList<>(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); |
| | | mdcEfficiencyResultDto1.setTheDate("å计"); |
| | | mdcEfficiencyResultDto.setTheDate("å¹³åå¼"); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); |
| | | } |
| | | mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); |
| | | mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); |
| | | mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); |
| | | mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); |
| | | mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); |
| | | mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | list.add(mdcEfficiencyResultDto1); |
| | | list.add(mdcEfficiencyResultDto); |
| | | mdcEfficiencyListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyListDto); |
| | | } |
| | | } |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } |
| | | result.getDates().add("å计"); |
| | | result.getDates().add("å¹³åå¼"); |
| | | MdcEfficiencyListDto sum = new MdcEfficiencyListDto(); |
| | | sum.setLevel1("å计"); |
| | | sum.setLevel2("å计"); |
| | | sum.setLevel3("å计"); |
| | | sum.setEquipmentId("å计"); |
| | | sum.setEquipmentName("å计"); |
| | | sum.setEquipmentType("å计"); |
| | | //计ç®åè®¡å¼ |
| | | sum.setDataList(this.calculateOpenTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList)); |
| | | |
| | | MdcEfficiencyListDto avg = new MdcEfficiencyListDto(); |
| | | avg.setLevel1("å¹³åå¼"); |
| | | avg.setLevel2("å¹³åå¼"); |
| | | avg.setLevel3("å¹³åå¼"); |
| | | avg.setEquipmentId("å¹³åå¼"); |
| | | avg.setEquipmentName("å¹³åå¼"); |
| | | avg.setEquipmentType("å¹³åå¼"); |
| | | //计ç®å¹³åå¼ |
| | | avg.setDataList(this.calculateOpenAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList)); |
| | | result.getMdcEfficiencyList().add(sum); |
| | | result.getMdcEfficiencyList().add(avg); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å¹³åå¼ |
| | | * |
| | | * @param mdcEfficiencyList |
| | | * @param mdcUtilizationRateList |
| | | * @return |
| | | */ |
| | | private List<MdcEfficiencyResultDto> calculateOpenAverage(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | List<MdcEfficiencyResultDto> result = new ArrayList<>(); |
| | | List<MdcEfficiencyResultDto> dataList = new ArrayList<>(); |
| | | for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { |
| | | dataList.addAll(mdcEfficiencyListDto.getDataList()); |
| | | } |
| | | dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) |
| | | .forEach((theDate, mert) -> { |
| | | mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( |
| | | a.getTheDate(), |
| | | a.getProcessLong().add(b.getProcessLong()), |
| | | a.getUtilizationRate().add(b.getUtilizationRate()), |
| | | a.getStartRate().add(b.getStartRate()), |
| | | a.getOpenRate().add(b.getOpenRate()), |
| | | a.getOpenLong().add(b.getOpenLong()), |
| | | a.getWaitLong().add(b.getWaitLong()), |
| | | a.getCloseLong().add(b.getCloseLong()), |
| | | a.getFaultLong().add(b.getFaultLong()), |
| | | a.getFaultRate().add(b.getFaultRate()), |
| | | a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); |
| | | }); |
| | | for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®åè®¡å¼ |
| | | * |
| | | * @param mdcEfficiencyList |
| | | * @param mdcUtilizationRateList |
| | | * @return |
| | | */ |
| | | private List<MdcEfficiencyResultDto> calculateOpenTotal(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | List<MdcEfficiencyResultDto> result = new ArrayList<>(); |
| | | List<MdcEfficiencyResultDto> dataList = new ArrayList<>(); |
| | | for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { |
| | | dataList.addAll(mdcEfficiencyListDto.getDataList()); |
| | | } |
| | | dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) |
| | | .forEach((theDate, mert) -> { |
| | | mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( |
| | | a.getTheDate(), |
| | | a.getProcessLong().add(b.getProcessLong()), |
| | | a.getUtilizationRate().add(b.getUtilizationRate()), |
| | | a.getStartRate().add(b.getStartRate()), |
| | | a.getOpenRate().add(b.getOpenRate()), |
| | | a.getOpenLong().add(b.getOpenLong()), |
| | | a.getWaitLong().add(b.getWaitLong()), |
| | | a.getCloseLong().add(b.getCloseLong()), |
| | | a.getFaultLong().add(b.getFaultLong()), |
| | | a.getFaultRate().add(b.getFaultRate()), |
| | | a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); |
| | | }); |
| | | for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { |
| | | mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * çæ¬¡å©ç¨çæ¥è¡¨ |
| | | * |
| | | * @param userId |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MdcEfficiencyShiftVo efficiencyShiftList(String userId, MdcEfficiencyReportShiftQueryVo vo) { |
| | | MdcEfficiencyShiftVo result = new MdcEfficiencyShiftVo(); |
| | | List<MdcEfficiencyShiftListDto> listDtos = new ArrayList<>(); |
| | | List<String> equipmentIds = new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // åå°è®¾å¤ä¿¡æ¯ |
| | | vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIds); |
| | | } |
| | | |
| | | // çæ¬¡å©ç¨çç级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl"); |
| | | |
| | | List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); |
| | | result.setDates(dates); |
| | | |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } else { |
| | | |
| | | List<String> equipmentIdList = mdcEquipmentService.listEquipmentIdShift(vo); |
| | | if (equipmentIdList != null && !equipmentIdList.isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIdList); |
| | | } else { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | return result; |
| | | } |
| | | |
| | | |
| | | // çæ¬¡å©ç¨çæ°æ® |
| | | 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()).orderByAsc(SysDepart::getDepartOrder)); |
| | | // çæ¬¡åç§°æ¾ç¤ºå¤ç |
| | | 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<>(); |
| | | MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto(); |
| | | MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto1 = new MdcEfficiencyShiftResultDto(); |
| | | mdcEfficiencyShiftResultDto.setTheDate("å¹³åå¼"); |
| | | mdcEfficiencyShiftResultDto1.setTheDate("å计"); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyShiftResultDto)); |
| | | } |
| | | mdcEfficiencyShiftResultDto1.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong()); |
| | | mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate()); |
| | | mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setStartRate(mdcEfficiencyShiftResultDto.getStartRate()); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate()); |
| | | mdcEfficiencyShiftResultDto1.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong()); |
| | | mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong()); |
| | | mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong()); |
| | | mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | mdcEfficiencyShiftResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | list.add(mdcEfficiencyShiftResultDto1); |
| | | list.add(mdcEfficiencyShiftResultDto); |
| | | 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()).orderByAsc(MdcProduction::getProductionOrder)); |
| | | |
| | | // çæ¬¡åç§°æ¾ç¤ºå¤ç |
| | | 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<>(); |
| | | MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto(); |
| | | MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto1 = new MdcEfficiencyShiftResultDto(); |
| | | mdcEfficiencyShiftResultDto.setTheDate("å¹³åå¼"); |
| | | mdcEfficiencyShiftResultDto1.setTheDate("å计"); |
| | | for (String date : dates) { |
| | | list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyShiftResultDto)); |
| | | } |
| | | mdcEfficiencyShiftResultDto1.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong()); |
| | | mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate()); |
| | | mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setStartRate(mdcEfficiencyShiftResultDto.getStartRate()); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate()); |
| | | mdcEfficiencyShiftResultDto1.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong()); |
| | | mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong()); |
| | | mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto1.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong()); |
| | | mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | mdcEfficiencyShiftResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | list.add(mdcEfficiencyShiftResultDto1); |
| | | list.add(mdcEfficiencyShiftResultDto); |
| | | mdcEfficiencyShiftListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyShiftListDto); |
| | | } |
| | | } |
| | | // listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3()))); |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } |
| | | result.getDates().add("å计"); |
| | | result.getDates().add("å¹³åå¼"); |
| | | MdcEfficiencyShiftListDto sum = new MdcEfficiencyShiftListDto(); |
| | | sum.setLevel1("å计"); |
| | | sum.setLevel2("å计"); |
| | | sum.setLevel3("å计"); |
| | | sum.setEquipmentId("å计"); |
| | | sum.setEquipmentName("å计"); |
| | | sum.setEquipmentType("å计"); |
| | | sum.setShiftSubName("å计"); |
| | | sum.setDataList(this.calculateShiftTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList)); |
| | | MdcEfficiencyShiftListDto avg = new MdcEfficiencyShiftListDto(); |
| | | avg.setLevel1("å¹³åå¼"); |
| | | avg.setLevel2("å¹³åå¼"); |
| | | avg.setLevel3("å¹³åå¼"); |
| | | avg.setEquipmentId("å¹³åå¼"); |
| | | avg.setEquipmentName("å¹³åå¼"); |
| | | avg.setEquipmentType("å¹³åå¼"); |
| | | avg.setShiftSubName("å¹³åå¼"); |
| | | avg.setDataList(this.calculateShiftAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList)); |
| | | result.getMdcEfficiencyList().add(sum); |
| | | result.getMdcEfficiencyList().add(avg); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å¹³åå¼ |
| | | * |
| | | * @param mdcEfficiencyList |
| | | * @param mdcUtilizationRateList |
| | | * @return |
| | | */ |
| | | private List<MdcEfficiencyShiftResultDto> calculateShiftAverage(List<MdcEfficiencyShiftListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | List<MdcEfficiencyShiftResultDto> result = new ArrayList<>(); |
| | | List<MdcEfficiencyShiftResultDto> dataList = new ArrayList<>(); |
| | | for (MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto : mdcEfficiencyList) { |
| | | dataList.addAll(mdcEfficiencyShiftListDto.getDataList()); |
| | | } |
| | | dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyShiftResultDto::getTheDate, Collectors.toList())) |
| | | .forEach((theDate, mert) -> { |
| | | mert.stream().reduce((a, b) -> new MdcEfficiencyShiftResultDto( |
| | | a.getTheDate(), |
| | | a.getProcessLong().add(b.getProcessLong()), |
| | | a.getUtilizationRate().add(b.getUtilizationRate()), |
| | | a.getStartRate().add(b.getStartRate()), |
| | | a.getOpenRate().add(b.getOpenRate()), |
| | | a.getOpenLong().add(b.getOpenLong()), |
| | | a.getWaitLong().add(b.getWaitLong()), |
| | | a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); |
| | | }); |
| | | for (MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto : result) { |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | result.sort(Comparator.comparing(MdcEfficiencyShiftResultDto::getTheDate)); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®åè®¡å¼ |
| | | * |
| | | * @param mdcEfficiencyList |
| | | * @param mdcUtilizationRateList |
| | | * @return |
| | | */ |
| | | private List<MdcEfficiencyShiftResultDto> calculateShiftTotal(List<MdcEfficiencyShiftListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | List<MdcEfficiencyShiftResultDto> result = new ArrayList<>(); |
| | | List<MdcEfficiencyShiftResultDto> dataList = new ArrayList<>(); |
| | | for (MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto : mdcEfficiencyList) { |
| | | dataList.addAll(mdcEfficiencyShiftListDto.getDataList()); |
| | | } |
| | | dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyShiftResultDto::getTheDate, Collectors.toList())) |
| | | .forEach((theDate, mert) -> { |
| | | mert.stream().reduce((a, b) -> new MdcEfficiencyShiftResultDto( |
| | | a.getTheDate(), |
| | | a.getProcessLong().add(b.getProcessLong()), |
| | | a.getUtilizationRate().add(b.getUtilizationRate()), |
| | | a.getStartRate().add(b.getStartRate()), |
| | | a.getOpenRate().add(b.getOpenRate()), |
| | | a.getOpenLong().add(b.getOpenLong()), |
| | | a.getWaitLong().add(b.getWaitLong()), |
| | | a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); |
| | | }); |
| | | for (MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto : result) { |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); |
| | | long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | result.sort(Comparator.comparing(MdcEfficiencyShiftResultDto::getTheDate)); |
| | | return result; |
| | | } |
| | | |
| | | |
| | | private MdcEfficiencyShiftResultDto efficiencyShiftRate(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList, MdcEfficiencyShiftResultDto efficiencyShiftResultDto) { |
| | | 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()); |
| | | if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) { |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(BigDecimal.ZERO); |
| | | } else { |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP)); |
| | | } |
| | | mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong()); |
| | | mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong()); |
| | | mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong()); |
| | | if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) { |
| | | mdcEfficiencyShiftResultDto.setOpenRate(BigDecimal.ZERO); |
| | | } else { |
| | | mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP)); |
| | | } |
| | | long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < 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()); |
| | | } |
| | | } |
| | | } |
| | | if (StringUtils.isBlank(mdcEfficiencyShiftResultDto.getColor())) { |
| | | 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()); |
| | | } |
| | | } |
| | | } |
| | | efficiencyShiftResultDto.setProcessLong(efficiencyShiftResultDto.getProcessLong().add(mdcEfficiencyShiftResultDto.getProcessLong())); |
| | | efficiencyShiftResultDto.setUtilizationRate(efficiencyShiftResultDto.getUtilizationRate().add(mdcEfficiencyShiftResultDto.getUtilizationRate())); |
| | | efficiencyShiftResultDto.setStartRate(efficiencyShiftResultDto.getStartRate().add(mdcEfficiencyShiftResultDto.getStartRate())); |
| | | efficiencyShiftResultDto.setOpenRate(efficiencyShiftResultDto.getOpenRate().add(mdcEfficiencyShiftResultDto.getOpenRate())); |
| | | efficiencyShiftResultDto.setOpenLong(efficiencyShiftResultDto.getOpenLong().add(mdcEfficiencyShiftResultDto.getOpenLong())); |
| | | efficiencyShiftResultDto.setWaitLong(efficiencyShiftResultDto.getWaitLong().add(mdcEfficiencyShiftResultDto.getWaitLong())); |
| | | efficiencyShiftResultDto.setCloseLong(efficiencyShiftResultDto.getCloseLong().add(mdcEfficiencyShiftResultDto.getCloseLong())); |
| | | 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())); |
| | | vo.setTotalLong(vo.getTotalLong().add(equipmentStatisticalShiftInfo.getTotalLong())); |
| | | } else { |
| | | map.put(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate(), equipmentStatisticalShiftInfo); |
| | | } |
| | | } |
| | | for (String s : map.keySet()) { |
| | | result.add(map.get(s)); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * ç»è®¡åæå表 |
| | | * |
| | | * @param userId |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public StatisticalAnalysisVo dayStatisticalRate(String userId, MdcEfficiencyReportQueryVo vo) { |
| | | StatisticalAnalysisVo result = new StatisticalAnalysisVo(); |
| | | List<String> equipmentIds = new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // åå°è®¾å¤ä¿¡æ¯ |
| | | vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIds); |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | return result; |
| | | } |
| | | |
| | | if (!StringUtils.isNotEmpty(vo.getDateTime())) { |
| | | throw new JeecgBootException("请è¾å
¥æ¥è¯¢æ¡ä»¶æ¶é´"); |
| | | } |
| | | vo.setStartTime(vo.getDateTime()); |
| | | vo.setEndTime(vo.getDateTime()); |
| | | List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo); |
| | | if (efficiencyList == null || efficiencyList.isEmpty()) { |
| | | return result; |
| | | } |
| | | result = this.efficiencyStatisticalRate(efficiencyList); |
| | | if (result.getOpenRate().compareTo(new BigDecimal("0")) > 0) { |
| | | result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | if (result.getUtilizationRate().compareTo(new BigDecimal("0")) > 0) { |
| | | result.setUtilizationRate(result.getUtilizationRate().multiply(new BigDecimal(100)).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | if (result.getOpenLong().compareTo(new BigDecimal(0)) > 0 && result.getProcessLong().compareTo(new BigDecimal(0)) > 0) { |
| | | result.setUsedOpenRate(result.getProcessLong().divide(result.getOpenLong(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 对æ¯åæ |
| | | */ |
| | | @Override |
| | | public ComparativeAnalysisDto comparativeAnalysis(String userId, ComparativeAnalysisQueryVo vo) { |
| | | ComparativeAnalysisDto result = new ComparativeAnalysisDto(); |
| | | List<String> equipmentIds = new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // åå°è®¾å¤ä¿¡æ¯ |
| | | vo.setEquipmentIdList(Arrays.asList(vo.getEquipmentId().split(","))); |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIds); |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | return result; |
| | | } |
| | | |
| | | // æ¥è¯¢åå§æ°æ® |
| | | List<MdcComAnaDto> resultDtos = mdcEfficiencyReportMapper.comparativeAnalysis(vo); |
| | | if (resultDtos != null && !resultDtos.isEmpty()) { |
| | | // ç»è£
å¾å½¢åä»ªè¡¨æ°æ® |
| | | List<GraphicsDto> graphicsDtos = new ArrayList<>(); |
| | | // è·åå¤©æ° |
| | | long days = ChronoUnit.DAYS.between(LocalDate.parse(vo.getStartTime(), DateTimeFormatter.ofPattern("yyyyMMdd")), LocalDate.parse(vo.getEndTime(), DateTimeFormatter.ofPattern("yyyyMMdd"))) + 1; |
| | | BigDecimal time = new BigDecimal("24").multiply(new BigDecimal(days)).multiply(new BigDecimal("60")).multiply(new BigDecimal("60")); |
| | | for (MdcComAnaDto mdcComAnaDto : resultDtos) { |
| | | GraphicsDto graphicsDto = new GraphicsDto(); |
| | | graphicsDto.setEquipmentId(mdcComAnaDto.getEquipmentId()); |
| | | graphicsDto.setCloseLong(mdcComAnaDto.getCloseLong()); |
| | | graphicsDto.setOpenLong(mdcComAnaDto.getOpenLong()); |
| | | // 24å°æ¶å©ç¨ç = å å·¥æ¶é´/24 |
| | | graphicsDto.setUtilizationRate(mdcComAnaDto.getProcessLong().divide(time, 6, BigDecimal.ROUND_HALF_UP)); |
| | | // 弿ºç = 弿ºæ¶é´ / 24 |
| | | graphicsDto.setOpenRate(mdcComAnaDto.getOpenLong().divide(time, 6, BigDecimal.ROUND_HALF_UP)); |
| | | graphicsDtos.add(graphicsDto); |
| | | } |
| | | result.setGraphics(graphicsDtos); |
| | | |
| | | List<UtilizationRateDto> tops = new ArrayList<>(); |
| | | List<UtilizationRateDto> lasts = new ArrayList<>(); |
| | | graphicsDtos.stream().sorted(Comparator.comparing(GraphicsDto::getUtilizationRate)).limit(5).forEach(graphicsDto -> { |
| | | UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); |
| | | utilizationRateDto.setEquipmentId(graphicsDto.getEquipmentId()); |
| | | utilizationRateDto.setUtilizationRate(graphicsDto.getUtilizationRate()); |
| | | lasts.add(utilizationRateDto); |
| | | }); |
| | | graphicsDtos.stream().sorted(Comparator.comparing(GraphicsDto::getUtilizationRate).reversed()).limit(5).forEach(graphicsDto -> { |
| | | UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); |
| | | utilizationRateDto.setEquipmentId(graphicsDto.getEquipmentId()); |
| | | utilizationRateDto.setUtilizationRate(graphicsDto.getUtilizationRate()); |
| | | tops.add(utilizationRateDto); |
| | | }); |
| | | MeterDto meterDto = new MeterDto(); |
| | | meterDto.setTops(tops); |
| | | meterDto.setLasts(lasts); |
| | | result.setMeters(meterDto); |
| | | // ç»è£
饼徿°æ® |
| | | PieChartDto pieChartDto = new PieChartDto(); |
| | | BigDecimal openLong = new BigDecimal("0"); |
| | | BigDecimal closeLong = new BigDecimal("0"); |
| | | BigDecimal waitLong = new BigDecimal("0"); |
| | | BigDecimal processLong = new BigDecimal("0"); |
| | | for (MdcComAnaDto resultDto : resultDtos) { |
| | | openLong = openLong.add(resultDto.getOpenLong()); |
| | | closeLong = closeLong.add(resultDto.getCloseLong()); |
| | | waitLong = waitLong.add(resultDto.getWaitLong()); |
| | | processLong = processLong.add(resultDto.getProcessLong()); |
| | | } |
| | | // 弿ºç = 弿ºæ¶é¿ / (24 Ã å¤©æ° Ã ä¸ªæ°) |
| | | pieChartDto.setOpenRate(openLong.divide(time.multiply(new BigDecimal(resultDtos.size())), 6, BigDecimal.ROUND_HALF_UP)); |
| | | // å
³æºç = 1 - 弿ºç |
| | | pieChartDto.setCloseRate(new BigDecimal("1").subtract(pieChartDto.getOpenRate())); |
| | | // å å·¥ç = å å·¥æ¶é´ / (24 Ã å¤©æ° Ã ä¸ªæ°) |
| | | pieChartDto.setProcessRate(processLong.divide(time.multiply(new BigDecimal(resultDtos.size())), 6, BigDecimal.ROUND_HALF_UP)); |
| | | // å¾
æºç = 弿ºç - å å·¥ç |
| | | pieChartDto.setWaitRate(pieChartDto.getOpenRate().subtract(pieChartDto.getProcessRate())); |
| | | result.setPieCharts(pieChartDto); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * è®¾å¤æ¥å©ç¨ç |
| | | * |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public DayUtilizationRateDto dayUtilizationRate(String userId, DayUtilizationRateQueryVo vo) { |
| | | DayUtilizationRateDto result = new DayUtilizationRateDto(); |
| | | if (StringUtils.isBlank(vo.getEquipmentId())) { |
| | | List<String> equipmentIds; |
| | | // è·åç¨æ·æ¥æè®¾å¤æé |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | if (equipmentIds != null && !equipmentIds.isEmpty()) { |
| | | vo.setEquipmentId(equipmentIds.get(0)); |
| | | } |
| | | } |
| | | result.setEquipmentId(vo.getEquipmentId()); |
| | | MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId())); |
| | | result.setEquipmentName(mdcEquipment.getEquipmentName()); |
| | | List<String> dateList = new ArrayList<>(); |
| | | for (int i = 1; i <= 24 / vo.getTimeType(); i++) { |
| | | if (i * vo.getTimeType() < 10) { |
| | | dateList.add("0" + i * vo.getTimeType() + ":00"); |
| | | } else { |
| | | dateList.add(i * vo.getTimeType() + ":00"); |
| | | } |
| | | } |
| | | |
| | | dateList.add(0, "00:00"); |
| | | |
| | | List<DayRateDto> dayRateDtoList = new ArrayList<>(); |
| | | for (int i = 0; i < dateList.size() - 1; i++) { |
| | | DayRateDto dayRateDto = new DayRateDto(); |
| | | dayRateDto.setDateTime(dateList.get(i + 1)); |
| | | String dateTime = DateUtils.dateConvertion(vo.getDateTime()); |
| | | Date startTime = DateUtils.toDate(dateTime + " " + dateList.get(i) + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | Date endTime = DateUtils.toDate(dateTime + " " + dateList.get(i + 1) + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(vo.getEquipmentId(), startTime.getTime(), endTime.getTime()); |
| | | if (runningSections != null && !runningSections.isEmpty()) { |
| | | // æ¶é´ä¿®æ£ |
| | | runningSections.get(0).setStartTime(startTime); |
| | | if (runningSections.size() > 1) { |
| | | runningSections.get(runningSections.size() - 1).setEndTime(endTime); |
| | | } else { |
| | | runningSections.get(0).setEndTime(endTime); |
| | | } |
| | | // å©ç¨çè®¡ç® |
| | | BigDecimal processLong = new BigDecimal("0"); |
| | | for (MdcEquipmentRunningSection runningSection : runningSections) { |
| | | if (runningSection.getStatus() == 3) { |
| | | long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime()); |
| | | processLong = processLong.add(new BigDecimal(duration)); |
| | | } |
| | | } |
| | | BigDecimal totalLong = new BigDecimal(vo.getTimeType()).multiply(new BigDecimal("60")).multiply(new BigDecimal("60")); |
| | | BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP); |
| | | dayRateDto.setUtilizationRate(utilizationRate); |
| | | } else { |
| | | dayRateDto.setUtilizationRate(new BigDecimal("0")); |
| | | } |
| | | dayRateDtoList.add(dayRateDto); |
| | | } |
| | | dateList.remove(0); |
| | | result.setDateList(dateList); |
| | | result.setDayRateDto(dayRateDtoList); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * è®¾å¤æ¥å©ç¨ç对æ¯åæ |
| | | * |
| | | * @param userId |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public DayUtilizationRateDto dayUtilizationRateContrast(String userId, DayUtilizationRateContrastQueryVo vo) { |
| | | DayUtilizationRateDto result = new DayUtilizationRateDto(); |
| | | if (StringUtils.isBlank(vo.getEquipmentId())) { |
| | | List<String> equipmentIds; |
| | | // è·åç¨æ·æ¥æè®¾å¤æé |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | if (equipmentIds != null && !equipmentIds.isEmpty()) { |
| | | vo.setEquipmentId(equipmentIds.get(0)); |
| | | } |
| | | } |
| | | result.setEquipmentId(vo.getEquipmentId()); |
| | | MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId())); |
| | | result.setEquipmentName(mdcEquipment.getEquipmentName()); |
| | | Date start = DateUtils.toDate(vo.getStartDate(), DateUtils.STRDATE); |
| | | Date end = DateUtils.toDate(vo.getEndDate(), DateUtils.STRDATE); |
| | | List<String> dateList = DateUtils.getDatesStringLists(start, end); |
| | | result.setDateList(dateList); |
| | | List<String> datesStringList = DateUtils.getDatesStringList(start, end); |
| | | List<DayRateDto> dayRateDtoList = new ArrayList<>(); |
| | | for (String date : datesStringList) { |
| | | DayRateDto dayRateDto = new DayRateDto(); |
| | | String format = DateUtils.format(DateUtils.toDate(date, DateUtils.STR_DATE), DateUtils.STR_MMDD); |
| | | dayRateDto.setDateTime(format); |
| | | Date startTime = DateUtils.toDate(date + " " + vo.getStartTime() + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | Date endTime = DateUtils.toDate(date + " " + vo.getEndTime() + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(vo.getEquipmentId(), startTime.getTime(), endTime.getTime()); |
| | | if (runningSections != null && !runningSections.isEmpty()) { |
| | | //æ¶é´ä¿®æ£ |
| | | runningSections.get(0).setStartTime(startTime); |
| | | if (runningSections.size() > 1) { |
| | | runningSections.get(runningSections.size() - 1).setEndTime(endTime); |
| | | } else { |
| | | runningSections.get(0).setEndTime(endTime); |
| | | } |
| | | // å©ç¨çè®¡ç® |
| | | BigDecimal processLong = new BigDecimal("0"); |
| | | for (MdcEquipmentRunningSection runningSection : runningSections) { |
| | | if (runningSection.getStatus() == 3) { |
| | | long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime()); |
| | | processLong = processLong.add(new BigDecimal(duration)); |
| | | } |
| | | } |
| | | BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime)); |
| | | BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP); |
| | | dayRateDto.setUtilizationRate(utilizationRate); |
| | | } else { |
| | | dayRateDto.setUtilizationRate(new BigDecimal("0")); |
| | | } |
| | | dayRateDtoList.add(dayRateDto); |
| | | } |
| | | result.setDayRateDto(dayRateDtoList); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设å¤å©ç¨çåæ®µåæ |
| | | * |
| | | * @param userId |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MdcUtilizationRateDto utilizationRateSectionAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) { |
| | | MdcUtilizationRateDto result = new MdcUtilizationRateDto(); |
| | | List<MdcUtilizationRateListDto> listDtos = new ArrayList<>(); |
| | | List<String> equipmentIds = new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // åå°è®¾å¤ä¿¡æ¯ |
| | | vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | } |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIds); |
| | | } |
| | | |
| | | List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate())); |
| | | List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate())); |
| | | result.setDates(dates); |
| | | String startString = vo.getStartTime(); |
| | | String endString = vo.getEndTime(); |
| | | |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } else { |
| | | // å©ç¨çç级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); |
| | | |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); |
| | | |
| | | for (MdcEquDepDto mdcEquDepDto : equipmentList) { |
| | | MdcUtilizationRateListDto mdcUtilizationRateListDto = new MdcUtilizationRateListDto(); |
| | | mdcUtilizationRateListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); |
| | | mdcUtilizationRateListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); |
| | | mdcUtilizationRateListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); |
| | | // |
| | | List<MdcUtilizationResultDto> list = new ArrayList<>(); |
| | | for (String date : dateList) { |
| | | Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList)); |
| | | } |
| | | mdcUtilizationRateListDto.setDataList(list); |
| | | listDtos.add(mdcUtilizationRateListDto); |
| | | } |
| | | |
| | | } else { |
| | | // 产线å±çº§ |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | |
| | | for (MdcEquProDto mdcEquProDto : equipmentList) { |
| | | MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto(); |
| | | mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); |
| | | mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); |
| | | mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); |
| | | // |
| | | List<MdcUtilizationResultDto> list = new ArrayList<>(); |
| | | for (String date : dateList) { |
| | | Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL); |
| | | list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList)); |
| | | } |
| | | mdcEfficiencyListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyListDto); |
| | | } |
| | | } |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设å¤å©ç¨çèµ°å¿åæ |
| | | * |
| | | * @param userId |
| | | * @param vo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MdcUtilizationRateDto utilizationRateTrendAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) { |
| | | MdcUtilizationRateDto result = new MdcUtilizationRateDto(); |
| | | List<MdcUtilizationRateListDto> listDtos = new ArrayList<>(); |
| | | List<String> equipmentIds = new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // åå°è®¾å¤ä¿¡æ¯ |
| | | vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); |
| | | } else { |
| | | // 产线å±çº§ |
| | | equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); |
| | | } |
| | | } |
| | | |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentIds); |
| | | } |
| | | |
| | | List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate())); |
| | | result.setDates(dateList); |
| | | |
| | | if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } else { |
| | | // å©ç¨çç级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); |
| | | if ("2".equals(vo.getTypeTree())) { |
| | | // é¨é¨å±çº§ |
| | | List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); |
| | | |
| | | for (MdcEquDepDto mdcEquDepDto : equipmentList) { |
| | | MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto(); |
| | | mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); |
| | | mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); |
| | | mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); |
| | | |
| | | List<MdcUtilizationResultDto> list = new ArrayList<>(); |
| | | for (String date : dateList) { |
| | | Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL); |
| | | Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL); |
| | | endTime = DateUtils.addDays(endTime, 1); |
| | | list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList)); |
| | | } |
| | | mdcEfficiencyListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyListDto); |
| | | } |
| | | |
| | | } else { |
| | | // 产线å±çº§ |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | |
| | | for (MdcEquProDto mdcEquProDto : equipmentList) { |
| | | MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto(); |
| | | mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); |
| | | mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); |
| | | mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); |
| | | List<MdcUtilizationResultDto> list = new ArrayList<>(); |
| | | for (String date : dateList) { |
| | | Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL); |
| | | Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL); |
| | | endTime = DateUtils.addDays(endTime, 1); |
| | | list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList)); |
| | | } |
| | | mdcEfficiencyListDto.setDataList(list); |
| | | listDtos.add(mdcEfficiencyListDto); |
| | | } |
| | | } |
| | | result.setMdcEfficiencyList(listDtos); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public List<BigDecimal> getEfficiencyRate(String equipmentId, String date) { |
| | | return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date); |
| | | } |
| | | |
| | | /** |
| | | * çç»å设å¤ç»¼åå©ç¨ç |
| | | * |
| | | * @param equEffVo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Map<String, Object> equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | List<String> mdcProductionIds = new ArrayList<>(); |
| | | if (StringUtils.isBlank(equEffVo.getProductionIds())) { |
| | | mdcProductionIds.add(equEffVo.getProductionId()); |
| | | } else { |
| | | mdcProductionIds.addAll(Arrays.asList(equEffVo.getProductionIds().split(","))); |
| | | } |
| | | List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds); |
| | | //æ°æ®æéè¿æ»¤ |
| | | allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); |
| | | List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds); |
| | | if (equipmentList != null && !equipmentList.isEmpty()) { |
| | | List<String> equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList()); |
| | | List<EquipmentEfficiencyAnalyzeDto> dataList = mdcEfficiencyReportMapper.equipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth()); |
| | | result.put("dataList", dataList); |
| | | List<String> equipmentNameList = dataList.stream().map(EquipmentEfficiencyAnalyzeDto::getEquipmentName).collect(Collectors.toList()); |
| | | result.put("equipmentNameList", equipmentNameList); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | // 1. å¤çç产ID |
| | | List<String> mdcProductionIds = StringUtils.isBlank(equEffVo.getProductionIds()) |
| | | ? Collections.singletonList(equEffVo.getProductionId()) |
| | | : Arrays.asList(equEffVo.getProductionIds().split(",")); |
| | | |
| | | List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds); |
| | | if (allProductionIds.isEmpty()) { |
| | | return result; // æåè¿åç©ºç»æ |
| | | } |
| | | //æ°æ®æéè¿æ»¤ |
| | | allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); |
| | | // 2. è·å设å¤å表 |
| | | List<MdcEquipment> equipmentList = StringUtils.isNotBlank(equEffVo.getTeamCodes()) |
| | | ? mdcEquipmentService.findByProIdsAndTeamCode(allProductionIds, Arrays.asList(equEffVo.getTeamCodes().split(","))) |
| | | : mdcEquipmentService.findByProductionIds(allProductionIds); |
| | | |
| | | if (equipmentList.isEmpty()) { |
| | | return result; |
| | | } |
| | | |
| | | // 3. æ°æ®å¤ç |
| | | List<String> equipmentIdList = equipmentList.stream() |
| | | .map(MdcEquipment::getEquipmentId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | List<TeamEquEffDto> dataList = mdcEfficiencyReportMapper |
| | | .teamEquipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth()); |
| | | |
| | | if (dataList.isEmpty()) { |
| | | return result; |
| | | } |
| | | |
| | | // 4. åç»è®¡ç®å¹³åå¼ |
| | | Map<String, TeamEquEffDto> grouped = dataList.stream() |
| | | .collect(Collectors.groupingBy( |
| | | TeamEquEffDto::getTeamCode, |
| | | Collectors.collectingAndThen( |
| | | Collectors.toList(), |
| | | this::calculateAverages // æåè®¡ç®æ¹æ³ |
| | | ))); |
| | | |
| | | // 5. åå
¸è½¬æ¢ |
| | | Map<String, String> dictMap = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_MDC_STAFF_TEAM) |
| | | .stream() |
| | | .collect(Collectors.toMap(DictModel::getValue, DictModel::getText)); |
| | | |
| | | List<TeamEquEffDto> resultList = grouped.entrySet().stream() |
| | | .map(entry -> buildResultDto(entry, dictMap))// æåæå»ºæ¹æ³ |
| | | .sorted(Comparator.comparing(TeamEquEffDto::getUtilizationRate).reversed()) |
| | | .collect(Collectors.toList()); |
| | | |
| | | result.put("dataList", resultList); |
| | | result.put("teamCodeList", resultList.stream() |
| | | .map(TeamEquEffDto::getTeamCode) |
| | | .collect(Collectors.toList())); |
| | | |
| | | return result; |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | |
| | | // 1. æ¥æå¤ç |
| | | LocalDate now = LocalDate.now(); |
| | | Date start = DateUtils.toDate(now.plusMonths(-6).toString(), DateUtils.STR_DATE); |
| | | Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); |
| | | |
| | | List<String> monthBetween = DateUtils.getMonthBetween(start, end); |
| | | List<String> dateList = monthBetween.stream() |
| | | .map(date -> date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ") |
| | | .collect(Collectors.toList()); |
| | | result.put("dateList", dateList); |
| | | |
| | | // 2. è·åäº§çº¿æ°æ® |
| | | List<MdcProduction> mdcProductions = mdcProductionService.findMdcPros(userId, equEffVo.getProductionId()); |
| | | |
| | | // 3. åå§åç»æé |
| | | List<TeamEquEffMonthDto> utilizationRateList = new ArrayList<>(); |
| | | List<TeamEquEffMonthDto> shiftUtilizationRateList = new ArrayList<>(); |
| | | List<TeamEquEffMonthDto> amendUtilizationRateList = new ArrayList<>(); |
| | | |
| | | // 4. å¤çæ¯ä¸ªäº§çº¿ |
| | | mdcProductions.forEach(mdcProduction -> { |
| | | // 4.1 è·åä¸çº§äº§çº¿å¹¶è¿æ»¤ |
| | | List<String> allProductionIds = mdcProductionService.recursionChildren(mdcProduction.getId()); |
| | | // æ°æ®æéè¿æ»¤ |
| | | allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); |
| | | // 4.2 è·å设å¤å表 |
| | | List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds); |
| | | if (equipmentList == null || equipmentList.isEmpty()) { |
| | | return; |
| | | } |
| | | //æåidéå |
| | | List<String> equipmentIdList = equipmentList.stream() |
| | | .map(MdcEquipment::getEquipmentId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | TeamEquEffMonthDto urDto = new TeamEquEffMonthDto(); |
| | | TeamEquEffMonthDto surDto = new TeamEquEffMonthDto(); |
| | | TeamEquEffMonthDto aurDto = new TeamEquEffMonthDto(); |
| | | urDto.setProductionName(mdcProduction.getProductionName()); |
| | | surDto.setProductionName(mdcProduction.getProductionName()); |
| | | aurDto.setProductionName(mdcProduction.getProductionName()); |
| | | List<TeamEquEffMonthChildDto> urDataList = new ArrayList<>(); |
| | | List<TeamEquEffMonthChildDto> surDataList = new ArrayList<>(); |
| | | List<TeamEquEffMonthChildDto> aurDataList = new ArrayList<>(); |
| | | |
| | | monthBetween.forEach(date -> { |
| | | TeamEquEffMonthChildDto urCDto = new TeamEquEffMonthChildDto(); |
| | | TeamEquEffMonthChildDto surCDto = new TeamEquEffMonthChildDto(); |
| | | TeamEquEffMonthChildDto aurCDto = new TeamEquEffMonthChildDto(); |
| | | String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"; |
| | | urCDto.setMonth(month); |
| | | surCDto.setMonth(month); |
| | | aurCDto.setMonth(month); |
| | | List<TeamEquEffDto> dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, date.replaceAll("-", "")); |
| | | if (dataList != null && !dataList.isEmpty()) { |
| | | // 计ç®å¹³åå¼ |
| | | BigDecimal ur = dataList.stream() |
| | | .map(TeamEquEffDto::getUtilizationRate) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); |
| | | //å©ç¨ç |
| | | urCDto.setUtilizationRate(ur); |
| | | //çæ¬¡å©ç¨ç |
| | | BigDecimal sur = dataList.stream() |
| | | .map(TeamEquEffDto::getShiftUtilizationRate) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); |
| | | surCDto.setUtilizationRate(sur); |
| | | //å»é¤æ
é24å°æ¶å©ç¨ç |
| | | BigDecimal aur = dataList.stream() |
| | | .map(TeamEquEffDto::getAmendUtilizationRate) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); |
| | | aurCDto.setUtilizationRate(aur); |
| | | } |
| | | urDataList.add(urCDto); |
| | | surDataList.add(surCDto); |
| | | aurDataList.add(aurCDto); |
| | | }); |
| | | urDto.setDataList(urDataList); |
| | | surDto.setDataList(surDataList); |
| | | aurDto.setDataList(aurDataList); |
| | | utilizationRateList.add(urDto); |
| | | shiftUtilizationRateList.add(surDto); |
| | | amendUtilizationRateList.add(aurDto); |
| | | }); |
| | | result.put("utilizationRateList", utilizationRateList); |
| | | result.put("shiftUtilizationRateList", shiftUtilizationRateList); |
| | | result.put("amendUtilizationRateList", amendUtilizationRateList); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> comprehensiveRateAnalyze(String userId, EquEffVo vo) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | // 1. æ¥æå¤ç |
| | | LocalDate now = LocalDate.now(); |
| | | Date start = DateUtils.toDate(now.plusMonths(-12).toString(), DateUtils.STR_DATE); |
| | | Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); |
| | | |
| | | List<String> monthBetween = DateUtils.getMonthBetween(start, end); |
| | | List<String> dateList = monthBetween.stream() |
| | | .map(date -> date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ") |
| | | .collect(Collectors.toList()); |
| | | result.put("dateList", dateList); |
| | | |
| | | // 1. å¤çç产ID |
| | | List<String> mdcProductionIds = StringUtils.isBlank(vo.getProductionIds()) |
| | | ? Collections.singletonList(vo.getProductionId()) |
| | | : Arrays.asList(vo.getProductionIds().split(",")); |
| | | |
| | | List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds); |
| | | if (allProductionIds.isEmpty()) { |
| | | return result; // æåè¿åç©ºç»æ |
| | | } |
| | | //æ°æ®æéè¿æ»¤ |
| | | allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); |
| | | // 2. è·å设å¤å表 |
| | | List<MdcEquipment> equipmentList = StringUtils.isNotBlank(vo.getEquipmentType()) |
| | | ? mdcEquipmentService.findByProIdsAndType(allProductionIds, Arrays.asList(vo.getEquipmentType().split(","))) |
| | | : mdcEquipmentService.findByProductionIds(allProductionIds); |
| | | |
| | | if (equipmentList.isEmpty()) { |
| | | return result; |
| | | } |
| | | |
| | | // 3. æ°æ®å¤ç |
| | | List<String> equipmentIdList = equipmentList.stream() |
| | | .map(MdcEquipment::getEquipmentId) |
| | | .collect(Collectors.toList()); |
| | | String startStr = monthBetween.get(0).replaceAll("-", ""); |
| | | String endStr = monthBetween.get(monthBetween.size() - 1).replaceAll("-", ""); |
| | | List<ComRateDto> comRateDtoList = mdcEfficiencyReportMapper.comprehensiveRateAnalyze(equipmentIdList, startStr, endStr); |
| | | if (comRateDtoList.isEmpty()) { |
| | | return result; // æåè¿åç©ºç»æ |
| | | } |
| | | List<ComRateDto> dataList = new ArrayList<>(); |
| | | Map<String, ComRateDto> map = comRateDtoList.stream().collect(Collectors.toMap(ComRateDto::getTheMonth, comRateDto -> comRateDto)); |
| | | monthBetween.forEach(date -> { |
| | | String d = date.replaceAll("-", ""); |
| | | String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"; |
| | | if (map.containsKey(d)) { |
| | | ComRateDto comRateDto = map.get(d); |
| | | comRateDto.setTheMonth(month); |
| | | comRateDto.setUtilizationRate(comRateDto.getUtilizationRate().setScale(2, RoundingMode.HALF_UP)); |
| | | comRateDto.setShiftUtilizationRate(comRateDto.getShiftUtilizationRate() != null ? comRateDto.getShiftUtilizationRate().setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); |
| | | comRateDto.setAmendUtilizationRate(comRateDto.getAmendUtilizationRate().setScale(2, RoundingMode.HALF_UP)); |
| | | comRateDto.setProcessLong(comRateDto.getProcessLong().divide(new BigDecimal("3600"), 2, RoundingMode.HALF_UP)); |
| | | dataList.add(comRateDto); |
| | | } else { |
| | | ComRateDto comRateDto = new ComRateDto(); |
| | | comRateDto.setTheMonth(month); |
| | | dataList.add(comRateDto); |
| | | } |
| | | }); |
| | | result.put("dataList", dataList); |
| | | |
| | | if (StringUtils.isNotBlank(vo.getShiftId())) { |
| | | List<MdcShiftSub> shiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId())); |
| | | if (shiftSubList == null || shiftSubList.isEmpty()) { |
| | | return result; |
| | | } |
| | | List<String> shiftSubNameList = shiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); |
| | | result.put("shiftSubList", shiftSubNameList); |
| | | |
| | | List<ComShiftRateDto> comShiftRateDtoList = mdcEfficiencyReportMapper.comprehensiveShiftRateAnalyze(equipmentIdList, startStr, endStr, vo.getShiftId()); |
| | | Map<String, List<ComShiftRateDto>> groupMap; |
| | | if (comShiftRateDtoList != null && !comShiftRateDtoList.isEmpty()) { |
| | | groupMap = comShiftRateDtoList.stream().collect(Collectors.groupingBy(ComShiftRateDto::getShiftSub)); |
| | | } else { |
| | | groupMap = new HashMap<>(); |
| | | } |
| | | List<ComShiftDto> shiftDataList = new ArrayList<>(); |
| | | shiftSubList.forEach(mdcShiftSub -> { |
| | | ComShiftDto comShiftDto = new ComShiftDto(); |
| | | comShiftDto.setShiftSubName(mdcShiftSub.getShiftSubName()); |
| | | if (groupMap.containsKey(mdcShiftSub.getId())) { |
| | | List<ComShiftRateDto> csrd = groupMap.get(mdcShiftSub.getId()); |
| | | Map<String, ComShiftRateDto> collect = csrd.stream().collect(Collectors.toMap(ComShiftRateDto::getTheMonth, comShiftRateDto -> comShiftRateDto)); |
| | | List<ComShiftChildDto> comShiftChildDtoList = new ArrayList<>(); |
| | | monthBetween.forEach(date -> { |
| | | String d = date.replaceAll("-", ""); |
| | | String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"; |
| | | if (collect.containsKey(d)) { |
| | | ComShiftRateDto comShiftRateDto = collect.get(d); |
| | | ComShiftChildDto comShiftChildDto = new ComShiftChildDto(); |
| | | comShiftChildDto.setMonth(month); |
| | | comShiftChildDto.setUtilizationRate(comShiftRateDto.getUtilizationRate().setScale(2, RoundingMode.HALF_UP)); |
| | | comShiftChildDtoList.add(comShiftChildDto); |
| | | } else { |
| | | ComShiftChildDto comShiftChildDto = new ComShiftChildDto(); |
| | | comShiftChildDto.setMonth(month); |
| | | comShiftChildDtoList.add(comShiftChildDto); |
| | | } |
| | | }); |
| | | comShiftDto.setDataList(comShiftChildDtoList); |
| | | } else { |
| | | List<ComShiftChildDto> comShiftChildDtoList = new ArrayList<>(); |
| | | monthBetween.forEach(date -> { |
| | | String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"; |
| | | ComShiftChildDto comShiftChildDto = new ComShiftChildDto(); |
| | | comShiftChildDto.setMonth(month); |
| | | comShiftChildDtoList.add(comShiftChildDto); |
| | | }); |
| | | comShiftDto.setDataList(comShiftChildDtoList); |
| | | } |
| | | shiftDataList.add(comShiftDto); |
| | | }); |
| | | |
| | | result.put("shiftDataList", shiftDataList); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | // æåçå¹³åå¼è®¡ç®æ¹æ³ |
| | | private TeamEquEffDto calculateAverages(List<TeamEquEffDto> items) { |
| | | BigDecimal size = new BigDecimal(items.size()); |
| | | return new TeamEquEffDto( |
| | | calculateAverage(items, TeamEquEffDto::getUtilizationRate, size), |
| | | calculateAverage(items, TeamEquEffDto::getShiftUtilizationRate, size), |
| | | calculateAverage(items, TeamEquEffDto::getAmendUtilizationRate, size) |
| | | ); |
| | | } |
| | | |
| | | // éç¨çå¹³åå¼è®¡ç® |
| | | private BigDecimal calculateAverage(List<TeamEquEffDto> items, Function<TeamEquEffDto, BigDecimal> mapper, BigDecimal size) { |
| | | return items.stream() |
| | | .map(mapper) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .divide(size, 2, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | // æå»ºç»æDTO |
| | | private TeamEquEffDto buildResultDto(Map.Entry<String, TeamEquEffDto> entry, Map<String, String> dictMap) { |
| | | TeamEquEffDto dto = entry.getValue(); |
| | | dto.setTeamCode(dictMap.getOrDefault(entry.getKey(), entry.getKey())); |
| | | return dto; |
| | | } |
| | | |
| | | private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | MdcUtilizationResultDto dto = new MdcUtilizationResultDto(); |
| | | dto.setEquipmentId(equipmentId); |
| | | dto.setEquipmentName(equipmentName); |
| | | dto.setEquipmentType(equipmentType); |
| | | dto.setTheDate(date); |
| | | List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(equipmentId, startTime.getTime(), endTime.getTime()); |
| | | if (runningSections != null && !runningSections.isEmpty()) { |
| | | // æ¶é´ä¿®æ£ |
| | | runningSections.get(0).setStartTime(startTime); |
| | | if (runningSections.size() > 1) { |
| | | runningSections.get(runningSections.size() - 1).setEndTime(endTime); |
| | | } else { |
| | | runningSections.get(0).setEndTime(endTime); |
| | | } |
| | | // å©ç¨çè®¡ç® |
| | | BigDecimal processLong = new BigDecimal("0"); |
| | | for (MdcEquipmentRunningSection runningSection : runningSections) { |
| | | if (runningSection.getStatus() == 3) { |
| | | long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime()); |
| | | processLong = processLong.add(new BigDecimal(duration)); |
| | | } |
| | | } |
| | | BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime)); |
| | | BigDecimal utilizationRate = processLong.divide(totalLong, 6, RoundingMode.HALF_UP); |
| | | dto.setUtilizationRate(utilizationRate); |
| | | } else { |
| | | dto.setUtilizationRate(new BigDecimal("0")); |
| | | } |
| | | long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | dto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | if (StringUtils.isBlank(dto.getColor())) { |
| | | dto.setColor(mdcUtilizationRateList.get(mdcUtilizationRateList.size() - 1).getRateParameterColor()); |
| | | } |
| | | return dto; |
| | | } |
| | | |
| | | private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) { |
| | | StatisticalAnalysisVo vo = new StatisticalAnalysisVo(); |
| | | for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) { |
| | | vo.setUtilizationRate(vo.getUtilizationRate().add(mdcEfficiencyDto.getUtilizationRate())); |
| | | vo.setOpenRate(vo.getOpenRate().add(mdcEfficiencyDto.getOpenRate())); |
| | | vo.setOpenLong(vo.getOpenLong().add(mdcEfficiencyDto.getOpenLong())); |
| | | vo.setProcessLong(vo.getProcessLong().add(mdcEfficiencyDto.getProcessLong())); |
| | | vo.setWaitLong(vo.getWaitLong().add(mdcEfficiencyDto.getWaitLong())); |
| | | vo.setCloseLong(vo.getCloseLong().add(mdcEfficiencyDto.getCloseLong())); |
| | | } |
| | | return vo; |
| | | } |
| | | |
| | | private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList, MdcEfficiencyResultDto efficiencyResultDto) { |
| | | MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); |
| | | if (efficiencyList != null && !efficiencyList.isEmpty()) { |
| | | for (MdcEfficiencyDto efficiencyDto : efficiencyList) { |
| | | if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(equipmentId)) { |
| | | mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate()); |
| | | mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong()); |
| | | mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate()); |
| | | mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate()); |
| | | mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate()); |
| | | mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong()); |
| | | mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong()); |
| | | mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong()); |
| | | mdcEfficiencyResultDto.setFaultLong(efficiencyDto.getFaultLong()); |
| | | mdcEfficiencyResultDto.setFaultRate(efficiencyDto.getFaultRate()); |
| | | mdcEfficiencyResultDto.setRemoveFaultRunLong(efficiencyDto.getRemoveFaultRunLong()); |
| | | long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | mdcEfficiencyResultDto.setTheDate(date); |
| | | mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setStartRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0")); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | if (StringUtils.isBlank(mdcEfficiencyResultDto.getColor())) { |
| | | mdcEfficiencyResultDto.setTheDate(date); |
| | | mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setStartRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0")); |
| | | mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0")); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | efficiencyResultDto.setProcessLong(efficiencyResultDto.getProcessLong().add(mdcEfficiencyResultDto.getProcessLong())); |
| | | efficiencyResultDto.setUtilizationRate(efficiencyResultDto.getUtilizationRate().add(mdcEfficiencyResultDto.getUtilizationRate())); |
| | | efficiencyResultDto.setStartRate(efficiencyResultDto.getStartRate().add(mdcEfficiencyResultDto.getStartRate())); |
| | | efficiencyResultDto.setOpenRate(efficiencyResultDto.getOpenRate().add(mdcEfficiencyResultDto.getOpenRate())); |
| | | efficiencyResultDto.setOpenLong(efficiencyResultDto.getOpenLong().add(mdcEfficiencyResultDto.getOpenLong())); |
| | | efficiencyResultDto.setWaitLong(efficiencyResultDto.getWaitLong().add(mdcEfficiencyResultDto.getWaitLong())); |
| | | efficiencyResultDto.setCloseLong(efficiencyResultDto.getCloseLong().add(mdcEfficiencyResultDto.getCloseLong())); |
| | | efficiencyResultDto.setFaultLong(efficiencyResultDto.getFaultLong().add(mdcEfficiencyResultDto.getFaultLong())); |
| | | efficiencyResultDto.setFaultRate(efficiencyResultDto.getFaultRate().add(mdcEfficiencyResultDto.getFaultRate())); |
| | | efficiencyResultDto.setRemoveFaultRunLong(efficiencyResultDto.getRemoveFaultRunLong().add(mdcEfficiencyResultDto.getRemoveFaultRunLong())); |
| | | return mdcEfficiencyResultDto; |
| | | } |
| | | |
| | | } |