| | |
| | | package org.jeecg.modules.mdc.service.impl; |
| | | |
| | | import com.alipay.api.domain.NewsfeedMediaGiftInfo; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.checkerframework.checker.units.qual.A; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.modules.mdc.dto.*; |
| | |
| | | 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 javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.time.temporal.ChronoUnit; |
| | |
| | | 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 { |
| | | if (StringUtils.isNotEmpty(vo.getEquipmentType())) { |
| | | List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList()); |
| | | if (equipmentList != null && !equipmentList.isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentList); |
| | | } else { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | return result; |
| | | } |
| | | } |
| | | // 查询利用率数据 |
| | | List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo); |
| | | // 利用率等级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); |
| | | |
| | | // 封装结果 |
| | | 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())); |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | 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.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); |
| | | } |
| | |
| | | // 产线层级 |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | // 查询所有产线信息 |
| | | List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | 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.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()))).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()))).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; |
| | | } |
| | | |
| | |
| | | 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 { |
| | | if (StringUtils.isNotEmpty(vo.getEquipmentType())) { |
| | | List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList()); |
| | | if (equipmentList != null && !equipmentList.isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentList); |
| | | } else { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | return result; |
| | | } |
| | | } |
| | | // 查询利用率数据 |
| | | List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo); |
| | | // 利用率等级 |
| | | List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl"); |
| | | |
| | | // 封装结果 |
| | | 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())); |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | 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); |
| | | } |
| | |
| | | // 产线层级 |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | // 查询所有产线信息 |
| | | List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | 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()))).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.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()))).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.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; |
| | | } |
| | | |
| | |
| | | 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<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl"); |
| | | if (StringUtils.isNotEmpty(vo.getEquipmentType())) { |
| | | List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList()); |
| | | if (equipmentList != null && !equipmentList.isEmpty()) { |
| | | vo.setEquipmentIdList(equipmentList); |
| | | } else { |
| | | result.setMdcEfficiencyList(listDtos); |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | // 班次利用率数据 |
| | | List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo); |
| | | |
| | |
| | | // 部门层级 |
| | | List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); |
| | | // 查询所有部门信息 |
| | | List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); |
| | | 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())) { |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | 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); |
| | | } |
| | |
| | | // 产线层级 |
| | | List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); |
| | | // 查询所有产线信息 |
| | | List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); |
| | | List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder)); |
| | | |
| | | // 班次名称显示处理 |
| | | String shiftSubName = ""; |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | 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) { |
| | | 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()); |
| | | mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); |
| | | 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()); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); |
| | | |
| | | 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()) { |
| | |
| | | } |
| | | } |
| | | } |
| | | 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; |
| | | } |
| | | |
| | |
| | | } |
| | | result = this.efficiencyStatisticalRate(efficiencyList); |
| | | if (result.getOpenRate().compareTo(new BigDecimal("0")) > 0) { |
| | | result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP)); |
| | | 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(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP)); |
| | | 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))); |
| | |
| | | } |
| | | } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { |
| | | // 单台设备信息 |
| | | vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); |
| | | vo.setEquipmentIdList(Arrays.asList(vo.getEquipmentId().split(","))); |
| | | } else { |
| | | // 查询用户拥有的所有设备信息 |
| | | if ("2".equals(vo.getTypeTree())) { |
| | |
| | | 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)); |
| | | 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()); |
| | |
| | | DayRateDto dayRateDto = new DayRateDto(); |
| | | dayRateDto.setDateTime(dateList.get(i + 1)); |
| | | String dateTime = DateUtils.dateConvertion(vo.getDateTime()); |
| | | Date startTime = DateUtils.toDate(dateTime + " " + dateList.get(i), DateUtils.STR_DATE_TIME_MIN); |
| | | Date endTime = DateUtils.toDate(dateTime + " " + dateList.get(i + 1), DateUtils.STR_DATE_TIME_MIN); |
| | | 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()) { |
| | | // 时间修正 |
| | |
| | | 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); |
| | | } |
| | | |
| | | 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, BigDecimal.ROUND_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) { |
| | |
| | | return vo; |
| | | } |
| | | |
| | | private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) { |
| | | 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 (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")); |
| | | 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())); |
| | | return mdcEfficiencyResultDto; |
| | | } |
| | | |