| | |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.modules.mdc.dto.*; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; |
| | | import org.jeecg.modules.mdc.entity.MdcShiftSub; |
| | | import org.jeecg.modules.mdc.entity.MdcUtilizationRate; |
| | | import org.jeecg.modules.mdc.entity.*; |
| | | import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentService; |
| | | import org.jeecg.modules.mdc.service.IMdcShiftSubService; |
| | | import org.jeecg.modules.mdc.service.IMdcUtilizationRateService; |
| | | import org.jeecg.modules.mdc.service.MdcEfficiencyReportService; |
| | | import org.jeecg.modules.mdc.service.*; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | | import org.jeecg.modules.mdc.vo.*; |
| | | import org.jeecg.modules.mdc.vo.MdcUtilizationRateDto; |
| | | import org.jeecg.modules.system.entity.MdcProduction; |
| | | import org.jeecg.modules.system.entity.SysDepart; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | |
| | | |
| | | @Resource |
| | | private IMdcShiftSubService mdcShiftSubService; |
| | | |
| | | @Resource |
| | | private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; |
| | | |
| | | /** |
| | | * 利用率报表 |
| | |
| | | // 部门层级 |
| | | 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::getDepartName)); |
| | | |
| | | for (MdcEquDepDto mdcEquDepDto : equipmentList) { |
| | | MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); |
| | |
| | | // 部门层级 |
| | | 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::getDepartName)); |
| | | |
| | | for (MdcEquDepDto mdcEquDepDto : equipmentList) { |
| | | MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); |
| | |
| | | // 部门层级 |
| | | 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::getDepartName)); |
| | | // 班次名称显示处理 |
| | | String shiftSubName = ""; |
| | | if (StringUtils.isBlank(vo.getShiftId())) { |
| | |
| | | mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong()); |
| | | mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong()); |
| | | mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); |
| | | long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) { |
| | | 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")); |
| | |
| | | } |
| | | 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))); |
| | |
| | | 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()); |
| | |
| | | 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; |
| | | } |
| | | |
| | | 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) { |
| | |
| | | mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong()); |
| | | mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong()); |
| | | mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong()); |
| | | long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (efficiencyDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) { |
| | | if (rate >= mdcUtilizationRate.getMinimumRange() && rate < 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")); |
| | | for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { |
| | | if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { |
| | | mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); |
| | | } |
| | | } |
| | | } |
| | | return mdcEfficiencyResultDto; |
| | | } |
| | | |