| | |
| | | package org.jeecg.modules.screen.service.impl; |
| | | |
| | | 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.MdcEquipmentMonitor; |
| | | 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.service.MdcLargeScreenService; |
| | | import org.jeecg.modules.system.entity.MdcProduction; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | | import org.jeecg.modules.system.service.ISysDictService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Author: Lius |
| | |
| | | @Resource |
| | | private ISysDictService sysDictService; |
| | | |
| | | @Resource |
| | | private IMdcProductionService mdcProductionService; |
| | | |
| | | @Resource |
| | | private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService; |
| | | |
| | | /** |
| | | * 设备状态情况 |
| | | * |
| | | * @param workshopId |
| | | * @param productionId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public EquipmentStatusOverview equipmentStatusOverview(String workshopId) { |
| | | public EquipmentStatusOverview equipmentStatusOverview(String productionId) { |
| | | EquipmentStatusOverview equipmentStatusOverview = new EquipmentStatusOverview(); |
| | | List<MdcEquipmentMonitor> equipmentMonitorList = mdcEquipmentService.getEquipmentMonitorList(workshopId); |
| | | List<MdcEquipmentMonitor> equipmentMonitorList = mdcEquipmentService.getEquipmentMonitorList(productionId); |
| | | if (equipmentMonitorList != null && !equipmentMonitorList.isEmpty()) { |
| | | equipmentStatusOverview.setEquipmentCount(equipmentMonitorList.size()); |
| | | for (MdcEquipmentMonitor mdcEquipmentMonitor : equipmentMonitorList) { |
| | |
| | | } |
| | | return equipmentStatusOverview; |
| | | } |
| | | |
| | | /** |
| | | * 设备月利用率趋势 |
| | | * |
| | | * @param productionId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Map<String, Object> monthUtilizationTendency(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[]> dateLists = DateUtils.generateMonthlyDateRanges(DateUtils.format(new Date(), DateUtils.STRDATE)); |
| | | List<String> dateList = dateLists.stream() |
| | | .map(array -> array[2]) // 提取月份名称 |
| | | .collect(Collectors.toList()); |
| | | result.put("dateList", dateList); |
| | | |
| | | // 计算每个子生产的月度利用率 |
| | | List<UtilizationMonthDto> utilizationMonthDtoList = mdcProductionList.stream() |
| | | .map(mdcProduction -> createUtilizationMonthDto(mdcProduction, dateLists)) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 计算总厂的月度利用率 |
| | | UtilizationMonthDto totalUtilizationMonthDto = createTotalUtilizationMonthDto(productionId, dateLists); |
| | | utilizationMonthDtoList.add(totalUtilizationMonthDto); |
| | | |
| | | result.put("dataList", utilizationMonthDtoList); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 创建子生产的月度利用率 DTO |
| | | */ |
| | | private UtilizationMonthDto createUtilizationMonthDto(MdcProduction mdcProduction, List<String[]> dateLists) { |
| | | UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto(); |
| | | utilizationMonthDto.setProductionId(mdcProduction.getId()); |
| | | utilizationMonthDto.setProductionName(mdcProduction.getProductionName()); |
| | | |
| | | List<UtilizationMonth> utilizationMonthList = calculateUtilizationRates(mdcProduction.getId(), dateLists); |
| | | utilizationMonthDto.setUtilizationMonthList(utilizationMonthList); |
| | | |
| | | return utilizationMonthDto; |
| | | } |
| | | |
| | | /** |
| | | * 创建总厂的月度利用率 DTO |
| | | */ |
| | | private UtilizationMonthDto createTotalUtilizationMonthDto(String productionId, List<String[]> dateLists) { |
| | | UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto(); |
| | | utilizationMonthDto.setProductionName("总厂"); |
| | | |
| | | List<UtilizationMonth> utilizationMonthList = calculateUtilizationRatesTotal(productionId, dateLists); |
| | | utilizationMonthDto.setUtilizationMonthList(utilizationMonthList); |
| | | |
| | | return utilizationMonthDto; |
| | | } |
| | | |
| | | /** |
| | | * 计算子生产的月度利用率 |
| | | */ |
| | | private List<UtilizationMonth> calculateUtilizationRates(String productionId, List<String[]> dateLists) { |
| | | return dateLists.stream() |
| | | .map(dates -> { |
| | | UtilizationMonth utilizationMonth = new UtilizationMonth(); |
| | | utilizationMonth.setMonth(dates[2]); |
| | | BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonth(productionId, dates[0], dates[1]); |
| | | utilizationMonth.setUtilizationRate(utilizationRate); |
| | | return utilizationMonth; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | /** |
| | | * 计算总厂的月度利用率 |
| | | */ |
| | | private List<UtilizationMonth> calculateUtilizationRatesTotal(String productionId, List<String[]> dateLists) { |
| | | return dateLists.stream() |
| | | .map(dates -> { |
| | | UtilizationMonth utilizationMonth = new UtilizationMonth(); |
| | | utilizationMonth.setMonth(dates[2]); |
| | | BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonthTotal(productionId, dates[0], dates[1]); |
| | | utilizationMonth.setUtilizationRate(utilizationRate); |
| | | return utilizationMonth; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | } |