From 75d26035001d85c12dc3ca93455b0fee477c3f77 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期一, 03 三月 2025 16:47:58 +0800 Subject: [PATCH] 看板设备状态概况及月利用路趋势接口 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 115 insertions(+), 4 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java index 5bb85fa..b33f90f 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java @@ -1,16 +1,25 @@ 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 @@ -26,16 +35,22 @@ @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) { @@ -72,4 +87,100 @@ } 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()); + } } -- Gitblit v1.9.3