lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/MesPartProcessInfoJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,117 @@ package org.jeecg.modules.mdc.job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jeecg.modules.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.mdcJc.dto.MesRcJobreport; import org.jeecg.modules.mdcJc.entity.MdcJcRcJobreport; import org.jeecg.modules.mdcJc.service.IMdcJcRcJobreportService; import org.jeecg.modules.mdcJc.service.MesRcJobreportService; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.entity.SysQuartzLog; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.jeecg.modules.quartz.service.ISysQuartzLogService; import org.jeecg.modules.system.service.ISysAnnouncementService; import org.quartz.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @Author: Lius * @CreateTime: 2025-04-14 * @Description: 忥MESå 工信æ¯ï¼åæ ¼çï¼ */ @PersistJobDataAfterExecution @DisallowConcurrentExecution @Slf4j public class MesPartProcessInfoJob implements Job { /** * è¥åæ°åéåä¿®æ¹ QuartzJobControllerä¸ä¹é对åºä¿®æ¹ æ¶é´ï¼ yyyyMMdd ä¾ï¼ 20230414 */ private String parameter; public void setParameter(String parameter) { this.parameter = parameter; } @Resource private IQuartzJobService quartzJobService; @Resource private ISysAnnouncementService sysAnnouncementService; @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private IMdcJcRcJobreportService mdcJcRcJobreportService; @Resource private MesRcJobreportService mesRcJobreportService; @Resource private IMdcEquipmentService mdcEquipmentService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } log.info("宿¶è·åMESç³»ç»å 工个æ°ä»»å¡ MesPartProcessInfoJob start! æ¶é´:" + DateUtils.getNow()); long startTime = System.currentTimeMillis(); try { if (StringUtils.isNotBlank(parameter)) { String date = ""; if (StringUtils.isNotBlank(this.parameter)) { date = DateUtils.format(DateUtils.toDate(this.parameter, DateUtils.STRDATE), DateUtils.STR_DATE); } else { date = DateUtils.format(DateUtils.getNow(), DateUtils.STR_DATE); } mdcJcRcJobreportService.remove(new LambdaQueryWrapper<MdcJcRcJobreport>().eq(MdcJcRcJobreport::getTheDate, date)); //è·å设å¤å表 List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(); if (mdcEquipmentList != null && !mdcEquipmentList.isEmpty()) { List<String> equipmentIdList = mdcEquipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList()); List<MesRcJobreport> mesRcJobreportList = mesRcJobreportService.findPartProcessInfo(date, equipmentIdList); if (mesRcJobreportList != null && !mesRcJobreportList.isEmpty()) { List<MdcJcRcJobreport> mdcJcRcJobreportList = new ArrayList<>(); for (MesRcJobreport mesRcJobreport : mesRcJobreportList) { MdcJcRcJobreport mdcJcRcJobreport = new MdcJcRcJobreport(); mdcJcRcJobreport.setEquipmentId(mesRcJobreport.getDeviceNumber()); mdcJcRcJobreport.setOkuqty(mesRcJobreport.getOkuqty().intValue()); mdcJcRcJobreport.setProcessCount(mesRcJobreport.getQty().intValue()); mdcJcRcJobreport.setTheDate(date); mdcJcRcJobreportList.add(mdcJcRcJobreport); } if (!mdcEquipmentList.isEmpty()) { mdcJcRcJobreportService.saveBatch(mdcJcRcJobreportList); } } } } quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); // åéæ¶æ¯éç¥ sysAnnouncementService.jobSendMessage("宿¶è·åMESç³»ç»å 工个æ°ä»»å¡", quartzLog.getExceptionDetail()); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
@@ -15,6 +15,7 @@ import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.vo.MdcOeeComputeVo; import org.jeecg.modules.mdc.vo.MdcOeeInfoVo; import org.jeecg.modules.mdcJc.service.IMdcJcRcJobreportService; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; @@ -45,8 +46,11 @@ @Resource private IMdcDowntimeService mdcDowntimeService; // @Resource // private IMdcPartProcessInfoService mdcPartProcessInfoService; @Resource private IMdcPartProcessInfoService mdcPartProcessInfoService; private IMdcJcRcJobreportService mdcJcRcJobreportService; @Resource private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService; @@ -204,13 +208,17 @@ mdcOeeInfo.setTimeActuationRate(timeActuationRate); // ææè¿è¡æ¶é´ --- æéæ±ç»´æ¤é¶ä»¶å å·¥æ»æ¶é¿||ç³»ç»ä¸»è½´è´è½½æ¶é´ Integer effectiveRunLong = 0; Integer totalProcessLong = mdcPartProcessInfoService.selectTotalProcessLong(equipmentId, validDate); if (totalProcessLong == 0) { // Integer totalProcessLong = mdcPartProcessInfoService.selectTotalProcessLong(equipmentId, validDate); //æ¥è¯¢è®¾å¤è¿è¡æ¶é´ effectiveRunLong = mdcEquipmentStatisticalInfoService.selectProcessLong(equipmentId, validDate.replace("-", "")); } else { effectiveRunLong = totalProcessLong; if (effectiveRunLong == null) { effectiveRunLong = 0; } // if (totalProcessLong == 0) { // // } else { // effectiveRunLong = totalProcessLong; // } mdcOeeInfo.setEffectiveRunLong(effectiveRunLong); // æ§è½å¼å¨ç --- ææè¿è¡æ¶é´/å¼å¨æ¶é´ BigDecimal performanceRate = BigDecimal.ZERO; @@ -219,10 +227,21 @@ } mdcOeeInfo.setPerformanceRate(performanceRate); // å å·¥é¶ä»¶æ°é --- æç»´æ¤æ°æ®ç»è®¡å½å¤© Integer processCount = mdcPartProcessInfoService.selectTotalProcessCount(equipmentId, validDate); // Integer processCount = mdcPartProcessInfoService.selectTotalProcessCount(equipmentId, validDate); // mdcOeeInfo.setProcessCount(processCount); // // åæ ¼é¶ä»¶æ°é --- æç»´æ¤æ°æ®ç»è®¡å½å¤© // Integer passCount = mdcPartProcessInfoService.selectTotalPassCount(equipmentId, validDate); // mdcOeeInfo.setPassCount(passCount); // // åæ ¼ç --- åæ ¼æ°/å å·¥æ° // BigDecimal passRate = BigDecimal.ZERO; // if (processCount != 0 && passCount != 0) { // passRate = new BigDecimal(passCount).divide(new BigDecimal(processCount), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); // } // å å·¥é¶ä»¶æ°é Integer processCount = mdcJcRcJobreportService.selectTotalProcessCount(equipmentId, validDate); mdcOeeInfo.setProcessCount(processCount); // åæ ¼é¶ä»¶æ°é --- æç»´æ¤æ°æ®ç»è®¡å½å¤© Integer passCount = mdcPartProcessInfoService.selectTotalPassCount(equipmentId, validDate); // åæ ¼é¶ä»¶æ°é Integer passCount = mdcJcRcJobreportService.selectTotalPassCount(equipmentId, validDate); mdcOeeInfo.setPassCount(passCount); // åæ ¼ç --- åæ ¼æ°/å å·¥æ° BigDecimal passRate = BigDecimal.ZERO; lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/dto/MesRcJobreport.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package org.jeecg.modules.mdcJc.dto; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-04-14 * @Description: */ @Data public class MesRcJobreport { private String billDate; private String deviceNumber; /** * åæ ¼æ° */ private BigDecimal okuqty; /** * æ»æ° */ private BigDecimal qty; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/entity/MdcJcRcJobreport.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package org.jeecg.modules.mdcJc.entity; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.system.base.entity.JeecgEntity; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; /** * @Description: 设å¤éæmesåæ ¼ç表 * @Author: jeecg-boot * @Date: 2025-04-14 * @Version: V1.0 */ @Data @TableName("mdcJc_rc_jobreport") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value = "mdcJc_rc_jobreport对象", description = "设å¤éæmesåæ ¼ç表") public class MdcJcRcJobreport extends JeecgEntity implements Serializable { /** * 设å¤ç¼å· */ @Excel(name = "设å¤ç¼å·", width = 15) @ApiModelProperty(value = "设å¤ç¼å·") private String equipmentId; /** * å å·¥é¶ä»¶æ°é */ @Excel(name = "å å·¥é¶ä»¶æ°é", width = 15) @ApiModelProperty(value = "å å·¥é¶ä»¶æ°é") private Integer processCount; /** * åæ ¼æ°é */ @Excel(name = "åæ ¼æ°é", width = 15) @ApiModelProperty(value = "åæ ¼æ°é") private Integer okuqty; /** * ä¸åæ ¼é¶ä»¶æ°é */ @Excel(name = "ä¸åæ ¼é¶ä»¶æ°é", width = 15) @ApiModelProperty(value = "ä¸åæ ¼é¶ä»¶æ°é") private Integer nookqty; /** * æ¥æ */ @Excel(name = "æ¥æ", width = 15) @ApiModelProperty(value = "æ¥æ") private String theDate; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MdcJcRcJobreportMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package org.jeecg.modules.mdcJc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdcJc.dto.MesRcJobreport; import org.jeecg.modules.mdcJc.entity.MdcJcRcJobreport; import java.util.List; /** * @Description: 设å¤éæmesåæ ¼ç表 * @Author: Lius * @Date: 2025-04-14 */ public interface MdcJcRcJobreportMapper extends BaseMapper<MdcJcRcJobreport> { Integer selectTotalProcessCount(@Param("equipmentId") String equipmentId, @Param("date") String validDate); Integer selectTotalPassCount(@Param("equipmentId") String equipmentId, @Param("date") String validDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MesRcJobreportMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package org.jeecg.modules.mdcJc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.mdcJc.dto.MesRcJobreport; /** * @Author: Lius * @CreateTime: 2025-04-14 * @Description: */ public interface MesRcJobreportMapper extends BaseMapper<MesRcJobreport> { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MdcJcRcJobreportMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdcJc.mapper.MdcJcRcJobreportMapper"> <select id="selectTotalProcessCount" resultType="java.lang.Integer"> SELECT okuqty + nookqty FROM mdcJc_rc_jobreport WHERE equipment_id = #{equipmentId} AND the_date = #{date} </select> <select id="selectTotalPassCount" resultType="java.lang.Integer"> SELECT okuqty FROM mdcJc_rc_jobreport WHERE equipment_id = #{equipmentId} AND the_date = #{date} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MesRcJobreportMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdcJc.mapper.MesRcJobreportMapper"> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/IMdcJcRcJobreportService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.mdcJc.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdcJc.dto.MesRcJobreport; import org.jeecg.modules.mdcJc.entity.MdcJcRcJobreport; import java.util.List; /** * @Description: 设å¤éæmesåæ ¼ç表 * @Author: Lius * @Date: 2025-04-14 */ public interface IMdcJcRcJobreportService extends IService<MdcJcRcJobreport> { Integer selectTotalProcessCount(String equipmentId, String validDate); Integer selectTotalPassCount(String equipmentId, String validDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/MesRcJobreportService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package org.jeecg.modules.mdcJc.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdcJc.dto.MesRcJobreport; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-04-14 * @Description: */ public interface MesRcJobreportService { List<MesRcJobreport> findPartProcessInfo(String date, List<String> equipmentIdList); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MdcJcRcJobreportServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package org.jeecg.modules.mdcJc.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.mdcJc.dto.MesRcJobreport; import org.jeecg.modules.mdcJc.entity.MdcJcRcJobreport; import org.jeecg.modules.mdcJc.mapper.MdcJcRcJobreportMapper; import org.jeecg.modules.mdcJc.service.IMdcJcRcJobreportService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.List; /** * @Description: 设å¤éæmesåæ ¼ç表 * @Author: Lius * @Date: 2025-04-14 */ @Service @Slf4j public class MdcJcRcJobreportServiceImpl extends ServiceImpl<MdcJcRcJobreportMapper, MdcJcRcJobreport> implements IMdcJcRcJobreportService { @Override public Integer selectTotalProcessCount(String equipmentId, String validDate) { Integer totalProcessCount = this.baseMapper.selectTotalProcessCount(equipmentId, validDate); if (totalProcessCount == null) { return 0; } else { return totalProcessCount; } } @Override public Integer selectTotalPassCount(String equipmentId, String validDate) { Integer totalPassCount = this.baseMapper.selectTotalPassCount(equipmentId, validDate); if (totalPassCount == null) { return 0; } else { return totalPassCount; } } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MesRcJobreportServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package org.jeecg.modules.mdcJc.service.impl; import org.jeecg.common.util.dynamic.db.DynamicDBUtil; import org.jeecg.modules.mdcJc.dto.MesRcJobreport; import org.jeecg.modules.mdcJc.service.MesRcJobreportService; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author: Lius * @CreateTime: 2025-04-14 * @Description: */ @Service public class MesRcJobreportServiceImpl implements MesRcJobreportService { @Override public List<MesRcJobreport> findPartProcessInfo(String date, List<String> equipmentIdList) { List<MesRcJobreport> result = new ArrayList<>(); // ç©ºåæ°æ£æ¥ if (equipmentIdList == null || equipmentIdList.isEmpty()) { return result; } // æå»ºå¨æINåå¥ String inClause = String.join(",", Collections.nCopies(equipmentIdList.size(), "?")); // æå»ºå®å ¨SQLï¼æ³¨æWHEREåå¥çç©ºæ ¼ï¼ String sql = "SELECT the_data AS thedate, " + "device_number AS deviceNumber, " + "okuqty, qty " + "FROM hegelv " + "WHERE the_data = ? " + // 使ç¨åæ°åæ¥è¯¢ "AND device_number IN (" + inClause + ")"; // åå¤åæ°ï¼æ¥æå¨åï¼è®¾å¤IDå¨åï¼ List<String> params = new ArrayList<>(); params.add(date); params.addAll(equipmentIdList); System.out.println("SQLåæ°: date=" + date + ", equipmentIds=" + equipmentIdList); List<Map<String, Object>> mapList = DynamicDBUtil.findList("basicDB", sql, params.toArray()); if (mapList == null || mapList.isEmpty()) { return result; } result = mapList.stream().map(map -> { MesRcJobreport mesRcJobreport = new MesRcJobreport(); mesRcJobreport.setBillDate(map.get("thedate").toString()); mesRcJobreport.setDeviceNumber(map.get("deviceNumber").toString()); mesRcJobreport.setOkuqty(new BigDecimal(map.get("okuqty").toString())); mesRcJobreport.setQty(new BigDecimal(map.get("qty").toString())); return mesRcJobreport; }).collect(Collectors.toList()); return result; } }