| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipmentDaySummary; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipmentMonitor; |
| | | import org.jeecg.modules.mdc.service.IEquipmentAlarmService; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentDaySummaryService; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentService; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoService; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | | import org.jeecg.modules.screen.dto.EquipmentStatusOverview; |
| | | import org.jeecg.modules.screen.dto.UtilizationMonth; |
| | | import org.jeecg.modules.screen.dto.UtilizationMonthDto; |
| | | import org.jeecg.modules.screen.dto.*; |
| | | import org.jeecg.modules.screen.service.MdcLargeScreenService; |
| | | import org.jeecg.modules.system.entity.MdcProduction; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Resource |
| | | private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService; |
| | | |
| | | @Resource |
| | | private IEquipmentAlarmService equipmentAlarmService; |
| | | |
| | | @Resource |
| | | private IMdcEquipmentDaySummaryService mdcEquipmentDaySummaryService; |
| | | |
| | | /** |
| | | * 设备状态情况 |
| | | * |
| | |
| | | @Override |
| | | public EquipmentStatusOverview equipmentStatusOverview(String productionId) { |
| | | EquipmentStatusOverview equipmentStatusOverview = new EquipmentStatusOverview(); |
| | | // 设备状态 |
| | | List<MdcEquipmentMonitor> equipmentMonitorList = mdcEquipmentService.getEquipmentMonitorList(productionId); |
| | | if (equipmentMonitorList != null && !equipmentMonitorList.isEmpty()) { |
| | | equipmentStatusOverview.setEquipmentCount(equipmentMonitorList.size()); |
| | |
| | | equipmentStatusOverview.setWaitCount(equipmentStatusOverview.getWaitCount() + 1); |
| | | break; |
| | | case 3: |
| | | equipmentStatusOverview.setRunCount(equipmentStatusOverview.getRunCount()); |
| | | equipmentStatusOverview.setRunCount(equipmentStatusOverview.getRunCount() + 1); |
| | | break; |
| | | case 22: |
| | | equipmentStatusOverview.setErrorCount(equipmentStatusOverview.getErrorCount() + 1); |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // mes产量 |
| | | MdcEquipmentDaySummary mdcEquipmentDaySummary = mdcEquipmentDaySummaryService.statisticsQty(productionId); |
| | | if (mdcEquipmentDaySummary != null) { |
| | | equipmentStatusOverview.setQualifiedQty(mdcEquipmentDaySummary.getQualifiedQty()); |
| | | equipmentStatusOverview.setPlanQty(mdcEquipmentDaySummary.getPlanQty()); |
| | | } |
| | | return equipmentStatusOverview; |
| | | } |
| | |
| | | result.put("dateList", dateList); |
| | | |
| | | // 计算每个子生产的月度利用率 |
| | | List<UtilizationMonthDto> utilizationMonthDtoList = mdcProductionList.stream() |
| | | List<UtilizationRateDto> utilizationMonthDtoList = mdcProductionList.stream() |
| | | .map(mdcProduction -> createUtilizationMonthDto(mdcProduction, dateLists)) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 计算总厂的月度利用率 |
| | | UtilizationMonthDto totalUtilizationMonthDto = createTotalUtilizationMonthDto(productionId, dateLists); |
| | | UtilizationRateDto totalUtilizationMonthDto = createTotalUtilizationMonthDto(productionId, dateLists); |
| | | utilizationMonthDtoList.add(totalUtilizationMonthDto); |
| | | |
| | | result.put("dataList", utilizationMonthDtoList); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设备周利用率趋势 |
| | | * |
| | | * @param productionId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Map<String, Object> weekUtilizationTendency(String productionId) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | |
| | | // 获取子生产列表 |
| | | List<MdcProduction> mdcProductionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, productionId)); |
| | | |
| | | if (mdcProductionList == null || mdcProductionList.isEmpty()) { |
| | | return result; |
| | | } |
| | | // 生成周范围 |
| | | List<String> dateList = DateUtils.getNearWeek(); |
| | | result.put("dateList", dateList); |
| | | // 计算每个工段的利用率 |
| | | List<UtilizationRateDto> utilizationMonthDtoList = mdcProductionList.stream().map(mdcProduction -> { |
| | | UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); |
| | | utilizationRateDto.setProductionId(mdcProduction.getId()); |
| | | utilizationRateDto.setProductionName(mdcProduction.getProductionName()); |
| | | List<UtilizationRate> utilizationRates = dateList.stream() |
| | | .map(date -> { |
| | | UtilizationRate utilizationMonth = new UtilizationRate(); |
| | | utilizationMonth.setDate(date); |
| | | BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationWeek(mdcProduction.getId(), date.replaceAll("-", "")); |
| | | utilizationMonth.setUtilizationRate(utilizationRate); |
| | | return utilizationMonth; |
| | | }).collect(Collectors.toList()); |
| | | utilizationRateDto.setUtilizationRateList(utilizationRates); |
| | | return utilizationRateDto; |
| | | }).collect(Collectors.toList()); |
| | | //计算总厂的利用率 |
| | | UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); |
| | | utilizationRateDto.setProductionName("总厂"); |
| | | List<UtilizationRate> utilizationRates = dateList.stream() |
| | | .map(date -> { |
| | | UtilizationRate utilizationMonth = new UtilizationRate(); |
| | | utilizationMonth.setDate(date); |
| | | BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationWeekTotal(productionId, date.replaceAll("-", "")); |
| | | utilizationMonth.setUtilizationRate(utilizationRate); |
| | | return utilizationMonth; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | utilizationRateDto.setUtilizationRateList(utilizationRates); |
| | | utilizationMonthDtoList.add(utilizationRateDto); |
| | | result.put("dataList", utilizationMonthDtoList); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设备日利用率 |
| | | * |
| | | * @param productionId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Map<String, Object> dayUtilizationTendency(String productionId) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | // 获取子生产列表 |
| | | List<MdcProduction> mdcProductionList = mdcProductionService.list( |
| | | new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, productionId) |
| | | ); |
| | | |
| | | if (mdcProductionList == null || mdcProductionList.isEmpty()) { |
| | | return result; |
| | | } |
| | | List<String> productionList = mdcProductionList.stream().map(MdcProduction::getProductionName).collect(Collectors.toList()); |
| | | result.put("productionList", productionList); |
| | | |
| | | String date = LocalDate.now().minusDays(1).toString().replaceAll("-", ""); |
| | | List<UtilizationDayDto> utilizationDayDtos = mdcProductionList.stream().map(mdcProduction -> { |
| | | UtilizationDayDto utilizationDayDto = new UtilizationDayDto(); |
| | | utilizationDayDto.setProductionName(mdcProduction.getProductionName()); |
| | | BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationWeek(mdcProduction.getId(), date); |
| | | utilizationDayDto.setUtilizationRate(utilizationRate); |
| | | return utilizationDayDto; |
| | | }).collect(Collectors.toList()); |
| | | result.put("dataList", utilizationDayDtos); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设备报警信息 |
| | | * |
| | | * @param productionId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<AlarmInfoDto> getAlarmInfo(String productionId) { |
| | | return equipmentAlarmService.getAlarmInfo(productionId); |
| | | } |
| | | |
| | | /** |
| | | * 工段列表 |
| | | * @param productionId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MdcProduction> productionList(String productionId) { |
| | | return mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, productionId).eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0)); |
| | | } |
| | | |
| | | /** |
| | | * 创建子生产的月度利用率 DTO |
| | | */ |
| | | private UtilizationMonthDto createUtilizationMonthDto(MdcProduction mdcProduction, List<String[]> dateLists) { |
| | | UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto(); |
| | | private UtilizationRateDto createUtilizationMonthDto(MdcProduction mdcProduction, List<String[]> dateLists) { |
| | | UtilizationRateDto utilizationMonthDto = new UtilizationRateDto(); |
| | | utilizationMonthDto.setProductionId(mdcProduction.getId()); |
| | | utilizationMonthDto.setProductionName(mdcProduction.getProductionName()); |
| | | |
| | | List<UtilizationMonth> utilizationMonthList = calculateUtilizationRates(mdcProduction.getId(), dateLists); |
| | | utilizationMonthDto.setUtilizationMonthList(utilizationMonthList); |
| | | List<UtilizationRate> utilizationMonthList = calculateUtilizationRates(mdcProduction.getId(), dateLists); |
| | | utilizationMonthDto.setUtilizationRateList(utilizationMonthList); |
| | | |
| | | return utilizationMonthDto; |
| | | } |
| | |
| | | /** |
| | | * 创建总厂的月度利用率 DTO |
| | | */ |
| | | private UtilizationMonthDto createTotalUtilizationMonthDto(String productionId, List<String[]> dateLists) { |
| | | UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto(); |
| | | private UtilizationRateDto createTotalUtilizationMonthDto(String productionId, List<String[]> dateLists) { |
| | | UtilizationRateDto utilizationMonthDto = new UtilizationRateDto(); |
| | | utilizationMonthDto.setProductionName("总厂"); |
| | | |
| | | List<UtilizationMonth> utilizationMonthList = calculateUtilizationRatesTotal(productionId, dateLists); |
| | | utilizationMonthDto.setUtilizationMonthList(utilizationMonthList); |
| | | List<UtilizationRate> utilizationMonthList = calculateUtilizationRatesTotal(productionId, dateLists); |
| | | utilizationMonthDto.setUtilizationRateList(utilizationMonthList); |
| | | |
| | | return utilizationMonthDto; |
| | | } |
| | |
| | | /** |
| | | * 计算子生产的月度利用率 |
| | | */ |
| | | private List<UtilizationMonth> calculateUtilizationRates(String productionId, List<String[]> dateLists) { |
| | | private List<UtilizationRate> calculateUtilizationRates(String productionId, List<String[]> dateLists) { |
| | | return dateLists.stream() |
| | | .map(dates -> { |
| | | UtilizationMonth utilizationMonth = new UtilizationMonth(); |
| | | utilizationMonth.setMonth(dates[2]); |
| | | UtilizationRate utilizationMonth = new UtilizationRate(); |
| | | utilizationMonth.setDate(dates[2]); |
| | | BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonth(productionId, dates[0], dates[1]); |
| | | utilizationMonth.setUtilizationRate(utilizationRate); |
| | | return utilizationMonth; |
| | |
| | | /** |
| | | * 计算总厂的月度利用率 |
| | | */ |
| | | private List<UtilizationMonth> calculateUtilizationRatesTotal(String productionId, List<String[]> dateLists) { |
| | | private List<UtilizationRate> calculateUtilizationRatesTotal(String productionId, List<String[]> dateLists) { |
| | | return dateLists.stream() |
| | | .map(dates -> { |
| | | UtilizationMonth utilizationMonth = new UtilizationMonth(); |
| | | utilizationMonth.setMonth(dates[2]); |
| | | UtilizationRate utilizationMonth = new UtilizationRate(); |
| | | utilizationMonth.setDate(dates[2]); |
| | | BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonthTotal(productionId, dates[0], dates[1]); |
| | | utilizationMonth.setUtilizationRate(utilizationRate); |
| | | return utilizationMonth; |