From 7c0f82055e064831c9971aad068106241705030e Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期二, 04 三月 2025 11:20:07 +0800 Subject: [PATCH] update --- lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 220 insertions(+), 5 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..175df00 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.IEquipmentAlarmService; import org.jeecg.modules.mdc.service.IMdcEquipmentService; -import org.jeecg.modules.screen.dto.EquipmentStatusOverview; +import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoService; +import org.jeecg.modules.mdc.util.DateUtils; +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 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.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; /** * @Author: Lius @@ -26,16 +35,25 @@ @Resource private ISysDictService sysDictService; + @Resource + private IMdcProductionService mdcProductionService; + + @Resource + private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService; + + @Resource + private IEquipmentAlarmService equipmentAlarmService; + /** * 璁惧鐘舵�佹儏鍐� * - * @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 +90,201 @@ } 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<UtilizationRateDto> utilizationMonthDtoList = mdcProductionList.stream() + .map(mdcProduction -> createUtilizationMonthDto(mdcProduction, dateLists)) + .collect(Collectors.toList()); + + // 璁$畻鎬诲巶鐨勬湀搴﹀埄鐢ㄧ巼 + UtilizationRateDto totalUtilizationMonthDto = createTotalUtilizationMonthDto(productionId, dateLists); + utilizationMonthDtoList.add(totalUtilizationMonthDto); + + result.put("dataList", utilizationMonthDtoList); + return result; + } + + /** + * 璁惧鍛ㄥ埄鐢ㄧ巼瓒嬪娍 + * + * @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 = new ArrayList<>(); + for (MdcProduction mdcProduction : mdcProductionList) { + 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(productionId, date.replaceAll("-", "")); + utilizationMonth.setUtilizationRate(utilizationRate); + return utilizationMonth; + }) + .collect(Collectors.toList()); + utilizationRateDto.setUtilizationRateList(utilizationRates); + utilizationMonthDtoList.add(utilizationRateDto); + } + //璁$畻鎬诲巶鐨勫埄鐢ㄧ巼 + 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 = new ArrayList<>(); + for (MdcProduction mdcProduction : mdcProductionList) { + UtilizationDayDto utilizationDayDto = new UtilizationDayDto(); + utilizationDayDto.setProductionName(mdcProduction.getProductionName()); + BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationWeekTotal(mdcProduction.getId(), date); + utilizationDayDto.setUtilizationRate(utilizationRate); + utilizationDayDtos.add(utilizationDayDto); + } + result.put("dataList", utilizationDayDtos); + return result; + } + + /** + * 璁惧鎶ヨ淇℃伅 + * + * @param productionId + * @return + */ + @Override + public List<AlarmInfoDto> getAlarmInfo(String productionId) { + return equipmentAlarmService.getAlarmInfo(productionId); + } + + /** + * 鍒涘缓瀛愮敓浜х殑鏈堝害鍒╃敤鐜� DTO + */ + private UtilizationRateDto createUtilizationMonthDto(MdcProduction mdcProduction, List<String[]> dateLists) { + UtilizationRateDto utilizationMonthDto = new UtilizationRateDto(); + utilizationMonthDto.setProductionId(mdcProduction.getId()); + utilizationMonthDto.setProductionName(mdcProduction.getProductionName()); + + List<UtilizationRate> utilizationMonthList = calculateUtilizationRates(mdcProduction.getId(), dateLists); + utilizationMonthDto.setUtilizationRateList(utilizationMonthList); + + return utilizationMonthDto; + } + + /** + * 鍒涘缓鎬诲巶鐨勬湀搴﹀埄鐢ㄧ巼 DTO + */ + private UtilizationRateDto createTotalUtilizationMonthDto(String productionId, List<String[]> dateLists) { + UtilizationRateDto utilizationMonthDto = new UtilizationRateDto(); + utilizationMonthDto.setProductionName("鎬诲巶"); + + List<UtilizationRate> utilizationMonthList = calculateUtilizationRatesTotal(productionId, dateLists); + utilizationMonthDto.setUtilizationRateList(utilizationMonthList); + + return utilizationMonthDto; + } + + /** + * 璁$畻瀛愮敓浜х殑鏈堝害鍒╃敤鐜� + */ + private List<UtilizationRate> calculateUtilizationRates(String productionId, List<String[]> dateLists) { + return dateLists.stream() + .map(dates -> { + UtilizationRate utilizationMonth = new UtilizationRate(); + utilizationMonth.setDate(dates[2]); + BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonth(productionId, dates[0], dates[1]); + utilizationMonth.setUtilizationRate(utilizationRate); + return utilizationMonth; + }) + .collect(Collectors.toList()); + } + + /** + * 璁$畻鎬诲巶鐨勬湀搴﹀埄鐢ㄧ巼 + */ + private List<UtilizationRate> calculateUtilizationRatesTotal(String productionId, List<String[]> dateLists) { + return dateLists.stream() + .map(dates -> { + UtilizationRate utilizationMonth = new UtilizationRate(); + utilizationMonth.setDate(dates[2]); + BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonthTotal(productionId, dates[0], dates[1]); + utilizationMonth.setUtilizationRate(utilizationRate); + return utilizationMonth; + }) + .collect(Collectors.toList()); + } } -- Gitblit v1.9.3