lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java
@@ -14,6 +14,7 @@ import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.service.IMdcHomeService; import org.jeecg.modules.mdc.vo.MdcCommonVo; import org.jeecg.modules.mdc.vo.MdcHomeEfficiencyVo; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IMdcProductionService; import org.springframework.web.bind.annotation.GetMapping; @@ -73,7 +74,7 @@ List<MdcCommonVo> resultMap = mdcHomeService.getEquipmentStatusStatistics(userId, key); Map<String, Object> map = new HashMap<>(); map.put("list", resultMap); map.put("producitonId", key); map.put("productionId", key); return Result.OK(map); } @@ -191,5 +192,23 @@ return Result.OK(result); } @ApiOperation(value = "MDCé¦é¡µæ¥å£-å·¥æ®µçº§è®¾å¤æçç»è®¡", notes = "MDCé¦é¡µæ¥å£-å·¥æ®µçº§è®¾å¤æçç»è®¡") @GetMapping("/equipmentEfficiencyStatistics") public Result<?> equipmentEfficiencyStatistics(String productionCode) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); String key = ""; if (StringUtils.isNotBlank(productionCode)) { //ååº MdcProduction mdcProduction = mdcProductionService.getOne(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getProductionCode, productionCode).eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString())); key = mdcProduction.getId(); } else { //工段 æ¥è¯¢ç¨æ·æ¥æç工段æé key = mdcProductionService.findThreeProductionId(userId); } MdcHomeEfficiencyVo result = mdcHomeService.getEquipmentEfficiencyStatistics(userId, key); return Result.OK(result); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcHomeMapper.java
@@ -73,4 +73,18 @@ */ List<MdcOverallEquipmentEfficiency> getEquipmentOEEMonthStatistics(@Param("validDate") String validDate, @Param("equipmentIdList") List<String> equipmentIdList); /** * è·åæ¨å¤©çå©ç¨ç * * @param equipmentIdList * @param date * @return */ MdcEquipmentStatisticalInfo getUtilizationByDay(@Param("equipmentIdList") List<String> equipmentIdList, @Param("date") String date); /** * æ¥è¯¢åä¸å¤©å©ç¨ç */ List<MdcEquipmentStatisticalInfo> getEquipmentSevenUtilizationStatistics(@Param("equipmentIdList") List<String> equipmentIdList, @Param("start") String start, @Param("end") String end); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcHomeMapper.xml
@@ -102,4 +102,45 @@ </where> </select> <select id="getUtilizationByDay" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo"> SELECT the_date, SUM ( process_long ) processLong, SUM ( open_long ) openLong FROM mdc_equipment_statistical_info <where> AND the_date = #{date} <if test="equipmentIdList != null and equipmentIdList.size() > 0 "> AND equipment_id IN <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> </where> GROUP BY the_date </select> <select id="getEquipmentSevenUtilizationStatistics" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo"> SELECT equipment_id, SUM ( process_long ) processLong, SUM ( open_long ) openLong FROM mdc_equipment_statistical_info <where> AND the_date BETWEEN #{start} AND #{end} <if test="equipmentIdList != null and equipmentIdList.size() > 0 "> AND equipment_id IN <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> </where> GROUP BY equipment_id </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcHomeService.java
@@ -2,6 +2,7 @@ import org.jeecg.modules.mdc.entity.MdcOverallEquipmentEfficiency; import org.jeecg.modules.mdc.vo.MdcCommonVo; import org.jeecg.modules.mdc.vo.MdcHomeEfficiencyVo; import java.util.List; import java.util.Map; @@ -41,4 +42,9 @@ * æ¥è¯¢è®¾å¤ä¸æOEE */ List<MdcOverallEquipmentEfficiency> getEquipmentOEEMonthStatistics(String userId, String key); /** * å·¥æ®µçº§è®¾å¤æç */ MdcHomeEfficiencyVo getEquipmentEfficiencyStatistics(String userId, String key); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/IMdcHomeServiceImpl.java
@@ -12,6 +12,7 @@ import org.jeecg.modules.mdc.vo.EquipmentDayUtilizationVo; import org.jeecg.modules.mdc.vo.MdcCommonVo; import org.jeecg.modules.mdc.vo.MdcEquipmentStatusVo; import org.jeecg.modules.mdc.vo.MdcHomeEfficiencyVo; import org.jeecg.modules.system.entity.MdcProduction; import org.springframework.stereotype.Service; @@ -241,9 +242,27 @@ Map<String, Object> result = new HashMap<>(); List<String> equipmentIdList = mdcEquipmentService.getEquipmentIdsProduction(userId, key); //è·ååä¸å¤©æ¥æéå Date start = DateUtils.toDate(LocalDate.now().plusDays(-7).toString(), DateUtils.STR_DATE); Date end = DateUtils.toDate(LocalDate.now().plusDays(-1).toString(), DateUtils.STR_DATE); List<String> dayBetween = DateUtils.getDatesStringList2(start, end); String start = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-7).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); String end = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-1).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); if (equipmentIdList != null && !equipmentIdList.isEmpty()) { result.put("equipmentIdList", equipmentIdList); List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfoList = mdcHomeMapper.getEquipmentSevenUtilizationStatistics(equipmentIdList, start, end); List<EquipmentDayUtilizationVo> dataList = new ArrayList<>(); if (mdcEquipmentStatisticalInfoList != null && !mdcEquipmentStatisticalInfoList.isEmpty()) { for (MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo : mdcEquipmentStatisticalInfoList) { EquipmentDayUtilizationVo equipmentDayUtilizationVo = new EquipmentDayUtilizationVo(); equipmentDayUtilizationVo.setEquipmentId(mdcEquipmentStatisticalInfo.getEquipmentId()); equipmentDayUtilizationVo.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(mdcEquipmentStatisticalInfoList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); if (BigDecimal.ZERO.compareTo(mdcEquipmentStatisticalInfo.getOpenLong()) == -1) { equipmentDayUtilizationVo.setOpenRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); equipmentDayUtilizationVo.setStartRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(mdcEquipmentStatisticalInfoList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); } dataList.add(equipmentDayUtilizationVo); } } result.put("dataList", dataList); } /*List<String> dayBetween = DateUtils.getDatesStringList2(start, end); List<String> dateList = new ArrayList<>(); List<EquipmentDayUtilizationVo> dataList = new ArrayList<>(); for (String date : dayBetween) { @@ -260,9 +279,9 @@ } else { String sub = item.substring(2); if (sub.startsWith("0")) { item = item.substring(0, 2) + "æ" + sub.substring(2) + "æ¥"; item = item.substring(0, 2) + "æ" + sub.substring(2) + "æ¥"; } else { item = item.substring(0, 2) + "æ" + item.substring(2) + "æ¥"; item = item.substring(0, 2) + "æ" + item.substring(2) + "æ¥"; } } dateList.add(item); @@ -288,7 +307,7 @@ } } result.put("dateList", dateList); result.put("dataList", dataList); result.put("dataList", dataList);*/ return result; } @@ -305,4 +324,34 @@ } return result; } /** * å·¥æ®µçº§è®¾å¤æç */ @Override public MdcHomeEfficiencyVo getEquipmentEfficiencyStatistics(String userId, String key) { MdcHomeEfficiencyVo result = new MdcHomeEfficiencyVo(); List<String> equipmentIdList = mdcEquipmentService.getEquipmentIdsProduction(userId, key); if (equipmentIdList != null && !equipmentIdList.isEmpty()) { // è·åå©ç¨çæ°æ® String date = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-1).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcHomeMapper.getUtilizationByDay(equipmentIdList, date); if (mdcEquipmentStatisticalInfo != null) { result.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); if (BigDecimal.ZERO.compareTo(mdcEquipmentStatisticalInfo.getOpenLong()) == -1) { result.setOpenRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); result.setStartRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); } } //è·åOEEæ°æ® String month = DateUtils.format(DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE), DateUtils.STR_YEAR_MONTH); BigDecimal oee = mdcHomeMapper.getOeeByDate(equipmentIdList, month); if (oee == null || oee.compareTo(BigDecimal.ZERO) == 0) { result.setOverallEquipmentEfficiency(BigDecimal.ZERO); } else { result.setOverallEquipmentEfficiency(oee.divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); } } return result; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquipmentDayUtilizationVo.java
@@ -11,9 +11,9 @@ @Data public class EquipmentDayUtilizationVo { /** * æ¥æ * 设å¤ç¼å· */ private String date; private String equipmentId; /** * å©ç¨ç */ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcHomeEfficiencyVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package org.jeecg.modules.mdc.vo; import lombok.Data; import java.math.BigDecimal; /** * @author Lius * @date 2024/4/11 9:29 */ @Data public class MdcHomeEfficiencyVo { /** * å©ç¨ç */ private BigDecimal utilizationRate = BigDecimal.ZERO; /** * å¼å¨ç */ private BigDecimal startRate = BigDecimal.ZERO; /** * 弿ºç */ private BigDecimal openRate = BigDecimal.ZERO; /** * OEE */ private BigDecimal overallEquipmentEfficiency = BigDecimal.ZERO; }