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); } 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); } 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> 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> 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); } 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); } 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); } } 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 -> { 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"); // è§£æä¼ å ¥çæ¥æ 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; } } 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) } 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; } 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; } 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); } 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()); } }