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 ++++++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml | 36 +++- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml | 27 +++ lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/MdcLargeScreenService.java | 14 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java | 21 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/controller/MdcLargeScreenController.java | 19 +- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java | 40 +++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonth.java | 23 +++ lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonthDto.java | 35 +++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java | 20 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java | 4 14 files changed, 337 insertions(+), 37 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java index 9be2447..dda4d65 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java @@ -127,8 +127,8 @@ /** * 鏍规嵁浜х嚎id鑾峰彇璁惧鐘舵�佸垪琛� - * @param workshopId + * @param productionId * @return */ - List<MdcEquipmentMonitor> getEquipmentMonitorList(@Param("workshopId") String workshopId); + List<MdcEquipmentMonitor> getEquipmentMonitorList(@Param("productionId") String productionId); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java index c63deec..ccdc298 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java @@ -4,6 +4,8 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; +import java.math.BigDecimal; + /** * @Description: 璁惧鍗曟棩杩愯鏁版嵁琛� * @Author: jeecg-boot @@ -27,4 +29,8 @@ Integer selectProcessLong(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate); MdcEquipmentStatisticalInfo findMdcEquipmentStatisticalInfo(@Param("equipmentId") String equipmentId, @Param("data") String data); + + BigDecimal computeUtilizationMonth(@Param("productionId") String productionId, @Param("startDate") String startDate, @Param("endDate") String endDate); + + BigDecimal computeUtilizationMonthTotal(@Param("productionId") String productionId, @Param("startDate") String startDate, @Param("endDate") String endDate); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml index 58aaf78..05d4b7d 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml @@ -281,19 +281,29 @@ <!--鏍规嵁浜х嚎id鑾峰彇璁惧鐘舵�佸垪琛�--> <select id="getEquipmentMonitorList" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentMonitor"> - SELECT e.equipment_id, - et.CollectTime, - e.equipment_name, - et.Oporation, - e.id, - e.equipment_status, - e.equipment_type AS equipmentType, - etp.equipment_type_pictures - FROM mdc_equipment e - LEFT JOIN Equipment et ON e.equipment_id = et.EquipmentID - LEFT JOIN mdc_equipment_type etp ON e.equipment_type = etp.equipment_type_name - JOIN mdc_workshop_equipment we ON e.equipment_id = we.equipment_id - WHERE we.workshop_id = #{workshopId} + SELECT + t1.equipment_id, + t2.CollectTime, + t1.equipment_name, + t2.Oporation, + t1.id, + t1.equipment_status, + t1.equipment_type AS equipmentType, + t3.equipment_type_pictures + FROM + mdc_equipment t1 + JOIN + mdc_workshop_equipment t4 + ON t1.equipment_id = t4.equipment_id + JOIN + mdc_workshop_info t5 + ON t4.workshop_id = t5.id AND t5.production_id = #{productionId} + LEFT JOIN + Equipment t2 + ON t1.equipment_id = t2.EquipmentID + LEFT JOIN + mdc_equipment_type t3 + ON t1.equipment_type = t3.equipment_type_name </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml index dc24767..0f53f20 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml @@ -16,4 +16,31 @@ <select id="findMdcEquipmentStatisticalInfo" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo"> SELECT TOP 1 * FROM mdc_equipment_statistical_info WHERE equipment_id = #{equipmentId} AND the_date = #{data} </select> + + <select id="computeUtilizationMonth" resultType="java.math.BigDecimal"> + SELECT + AVG(t1.process_long) AS processLong + FROM + mdc_equipment_statistical_info t1 + INNER JOIN mdc_equipment t2 + ON t1.equipment_id = t2.equipment_id + INNER JOIN mdc_production_equipment t3 + ON t2.id = t3.equipment_id + AND t3.production_id = #{productionId} + WHERE + t1.the_date BETWEEN #{startDate} AND #{endDate} + </select> + + <select id="computeUtilizationMonthTotal" resultType="java.math.BigDecimal"> + SELECT AVG + ( t1.process_long ) AS processLong + FROM + mdc_equipment_statistical_info t1 + INNER JOIN mdc_equipment t2 ON t1.equipment_id = t2.equipment_id + INNER JOIN mdc_production_equipment t3 ON t2.id = t3.equipment_id + INNER JOIN mdc_production t4 ON t3.production_id = t4.id + WHERE + t4.parent_id = #{productionId} + AND t1.the_date BETWEEN #{startDate} AND #{endDate} + </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java index 87a1a43..d6775c8 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java @@ -213,8 +213,8 @@ /** * 鏍规嵁浜х嚎id鑾峰彇璁惧鐘舵�佸垪琛� * - * @param workshopId + * @param productionId * @return */ - List<MdcEquipmentMonitor> getEquipmentMonitorList(String workshopId); + List<MdcEquipmentMonitor> getEquipmentMonitorList(String productionId); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java index 953b23f..9e5116a 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java @@ -3,6 +3,8 @@ import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; import com.baomidou.mybatisplus.extension.service.IService; +import java.math.BigDecimal; + /** * @Description: 璁惧鍗曟棩杩愯鏁版嵁琛� * @Author: lius @@ -35,4 +37,22 @@ * @return */ MdcEquipmentStatisticalInfo findMdcEquipmentStatisticalInfo(String equipmentId, String date); + + /** + * 璁$畻宸ユ鏈堝埄鐢ㄧ巼 + * @param productionId + * @param startDate + * @param endDate + * @return + */ + BigDecimal computeUtilizationMonth(String productionId, String startDate, String endDate); + + /** + * + * @param productionId + * @param startDate + * @param endDate + * @return + */ + BigDecimal computeUtilizationMonthTotal(String productionId, String startDate, String endDate); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java index 6c195c4..ee12d77 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java @@ -908,12 +908,12 @@ /** * 鏍规嵁浜х嚎id鑾峰彇璁惧鐘舵�佸垪琛� * - * @param workshopId + * @param productionId * @return */ @Override - public List<MdcEquipmentMonitor> getEquipmentMonitorList(String workshopId) { - return this.baseMapper.getEquipmentMonitorList(workshopId); + public List<MdcEquipmentMonitor> getEquipmentMonitorList(String productionId) { + return this.baseMapper.getEquipmentMonitorList(productionId); } } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java index 267b539..994ec9e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java @@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import io.swagger.models.auth.In; import org.apache.commons.lang.StringUtils; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.mdc.entity.*; @@ -99,6 +98,26 @@ return this.baseMapper.findMdcEquipmentStatisticalInfo(equipmentId, date.replaceAll("-", "")); } + @Override + public BigDecimal computeUtilizationMonth(String productionId, String startDate, String endDate) { + BigDecimal processLong = this.baseMapper.computeUtilizationMonth(productionId, startDate, endDate); + if (processLong != null && processLong.compareTo(BigDecimal.ZERO) > 0) { + return processLong.divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP); + } else { + return BigDecimal.ZERO; + } + } + + @Override + public BigDecimal computeUtilizationMonthTotal(String productionId, String startDate, String endDate) { + BigDecimal processLong = this.baseMapper.computeUtilizationMonthTotal(productionId, startDate, endDate); + if (processLong != null && processLong.compareTo(BigDecimal.ZERO) > 0) { + return processLong.divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP); + } else { + return BigDecimal.ZERO; + } + } + private List<EquipmentStatisticalInfo> dataHandle(List<MdcEquipmentStatisticalInfo> list) { List<EquipmentStatisticalInfo> result = new ArrayList<>(); list.forEach(item -> { diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java index 2c31126..0129bd6 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java @@ -1,8 +1,6 @@ package org.jeecg.modules.mdc.util; -import io.swagger.models.auth.In; - import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.ParseException; @@ -10,6 +8,8 @@ import java.time.DayOfWeek; import java.time.LocalDate; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.TextStyle; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.util.*; @@ -1098,4 +1098,40 @@ return formattedHours + "灏忔椂" + formattedMinutes + "鍒�" + formattedSeconds + "绉�"; } + + + public static List<String[]> generateMonthlyDateRanges(String inputDate) { + List<String[]> dateRanges = new ArrayList<>(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + + // 瑙f瀽浼犲叆鐨勬棩鏈� + LocalDate date = LocalDate.parse(inputDate, formatter); + + // 濡傛灉褰撳墠鏃ユ湡鏄�18鍙锋垨涔嬪墠锛岀粨鏉熸棩鏈熸槸涓婁釜鏈堢殑18鍙� + LocalDate endDate = date.getDayOfMonth() <= 18 + ? date.minusMonths(1).withDayOfMonth(18) + : date.withDayOfMonth(18); + + // 寰幆鐢熸垚12涓湀鐨勬棩鏈熻寖鍥� + for (int i = 0; i < 12; i++) { + // 寮�濮嬫棩鏈燂細涓婁笂涓湀鐨�19鍙� + LocalDate startDate = endDate.minusMonths(1).withDayOfMonth(19); + String startDateStr = startDate.format(formatter); + String endDateStr = endDate.format(formatter); + + // 鑾峰彇鏈堜唤鍚嶇О锛堝锛�2鏈堬級 + String monthName = endDate.getMonth().getDisplayName(TextStyle.FULL, Locale.CHINA); + + // 灏嗘棩鏈熻寖鍥村拰鏈堜唤鍚嶇О娣诲姞鍒伴泦鍚堜腑锛堝�掑簭鎻掑叆锛� + dateRanges.add(0, new String[]{startDateStr, endDateStr, monthName}); + + // 鍥為��鍒颁笂涓湀鐨�18鍙� + endDate = endDate.minusMonths(1).withDayOfMonth(18); + } + + return dateRanges; + } + + + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/controller/MdcLargeScreenController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/controller/MdcLargeScreenController.java index 31b0207..d075732 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/controller/MdcLargeScreenController.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/controller/MdcLargeScreenController.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.Map; /** * @Author: Lius @@ -28,16 +29,18 @@ @ApiOperation(value = "澶у睆鐪嬫澘-璁惧鎯呭喌", notes = "澶у睆鐪嬫澘-璁惧鎯呭喌") @GetMapping("/equipmentStatusOverview") - public Result<EquipmentStatusOverview> equipmentStatusOverview(String workshopId) { - EquipmentStatusOverview equipmentStatusOverview = mdcLargeScreenService.equipmentStatusOverview(workshopId); + public Result<EquipmentStatusOverview> equipmentStatusOverview(String productionId) { + EquipmentStatusOverview equipmentStatusOverview = mdcLargeScreenService.equipmentStatusOverview(productionId); return Result.OK(equipmentStatusOverview); } -// @ApiOperation(value = "澶у睆鐪嬫澘-鏈堝埄鐢ㄧ巼瓒嬪娍", notes = "澶у睆鐪嬫澘-鏈堝埄鐢ㄧ巼瓒嬪娍") -// @GetMapping("/monthUtilizationTendency") -// public Result<EquipmentStatusOverview> monthUtilizationTendency(String workshopId) { -// -// return Result.OK(equipmentStatusOverview); -// } + @ApiOperation(value = "澶у睆鐪嬫澘-鏈堝埄鐢ㄧ巼瓒嬪娍", notes = "澶у睆鐪嬫澘-鏈堝埄鐢ㄧ巼瓒嬪娍") + @GetMapping("/monthUtilizationTendency") + public Result<Map<String, Object>> monthUtilizationTendency(String productionId) { + Map<String, Object> result = mdcLargeScreenService.monthUtilizationTendency(productionId); + return Result.OK(result); + } + +// public Result<?> monthUtilizationTendency(String) } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonth.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonth.java new file mode 100644 index 0000000..3cccda3 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonth.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.screen.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author: Lius + * @CreateTime: 2025-03-03 + * @Description: + */ +@Data +@ApiModel(value = "鏈堝埄鐢ㄧ巼resp", description = "鏈堝埄鐢ㄧ巼resp") +public class UtilizationMonth { + + @ApiModelProperty(value = "鏈堜唤") + private String month; + + @ApiModelProperty(value = "鍒╃敤鐜�") + private BigDecimal utilizationRate = BigDecimal.ZERO; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonthDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonthDto.java new file mode 100644 index 0000000..bb52b5e --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonthDto.java @@ -0,0 +1,35 @@ +package org.jeecg.modules.screen.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.UUID; + +/** + * @Author: Lius + * @CreateTime: 2025-03-03 + * @Description: + */ +@Data +@ApiModel(value = "鏈堝埄鐢ㄧ巼resp", description = "鏈堝埄鐢ㄧ巼resp") +public class UtilizationMonthDto { + + /** + * 宸ユid + */ + @ApiModelProperty(value = "宸ユid") + private String productionId = UUID.randomUUID().toString().replace("-", ""); + /** + * 宸ユ鍚嶇О + */ + @ApiModelProperty(value = "宸ユ鍚嶇О") + private String productionName; + /** + * 鏈堝埄鐢ㄧ巼 + */ + @ApiModelProperty(value = "鏈堝埄鐢ㄧ巼") + private List<UtilizationMonth> utilizationMonthList; + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/MdcLargeScreenService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/MdcLargeScreenService.java index c09ee64..bf5a962 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/MdcLargeScreenService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/MdcLargeScreenService.java @@ -2,6 +2,8 @@ import org.jeecg.modules.screen.dto.EquipmentStatusOverview; +import java.util.Map; + /** * @Author: Lius * @CreateTime: 2025-02-28 @@ -12,8 +14,16 @@ /** * 璁惧鎯呭喌 * - * @param workshopId + * @param productionId * @return */ - EquipmentStatusOverview equipmentStatusOverview(String workshopId); + EquipmentStatusOverview equipmentStatusOverview(String productionId); + + /** + * 璁惧鏈堝埄鐢ㄧ巼瓒嬪娍 + * + * @param productionId + * @return + */ + Map<String, Object> monthUtilizationTendency(String productionId); } 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