From 6a5cb9b11c95fbde3e56a55ea5379b633651d2ad Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 15 四月 2025 16:54:13 +0800
Subject: [PATCH] Oee合格率数据源切换

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MesRcJobreportServiceImpl.java   |   68 ++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MdcJcRcJobreportServiceImpl.java |   45 +++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/dto/MesRcJobreport.java                       |   28 +++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MesRcJobreportMapper.xml           |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MdcJcRcJobreportMapper.java            |   21 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/MesRcJobreportService.java            |   16 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java         |   39 +++-
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/IMdcJcRcJobreportService.java         |   20 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MdcJcRcJobreportMapper.xml         |   13 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/entity/MdcJcRcJobreport.java                  |   58 +++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MesRcJobreportMapper.java              |   14 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/MesPartProcessInfoJob.java                  |  117 ++++++++++++++
 12 files changed, 434 insertions(+), 10 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/MesPartProcessInfoJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/MesPartProcessInfoJob.java
new file mode 100644
index 0000000..efc0a54
--- /dev/null
+++ b/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);
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
index d166372..550d3f4 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
+++ b/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) {
-                        //鏌ヨ璁惧杩愯鏃堕棿
-                        effectiveRunLong = mdcEquipmentStatisticalInfoService.selectProcessLong(equipmentId, validDate.replace("-", ""));
-                    } else {
-                        effectiveRunLong = totalProcessLong;
+//                    Integer totalProcessLong = mdcPartProcessInfoService.selectTotalProcessLong(equipmentId, validDate);
+                    //鏌ヨ璁惧杩愯鏃堕棿
+                    effectiveRunLong = mdcEquipmentStatisticalInfoService.selectProcessLong(equipmentId, validDate.replace("-", ""));
+                    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;
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/dto/MesRcJobreport.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/dto/MesRcJobreport.java
new file mode 100644
index 0000000..0e56b53
--- /dev/null
+++ b/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;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/entity/MdcJcRcJobreport.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/entity/MdcJcRcJobreport.java
new file mode 100644
index 0000000..826e6c4
--- /dev/null
+++ b/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;
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MdcJcRcJobreportMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MdcJcRcJobreportMapper.java
new file mode 100644
index 0000000..0e00750
--- /dev/null
+++ b/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);
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MesRcJobreportMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/MesRcJobreportMapper.java
new file mode 100644
index 0000000..ade923f
--- /dev/null
+++ b/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> {
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MdcJcRcJobreportMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MdcJcRcJobreportMapper.xml
new file mode 100644
index 0000000..3052f63
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MesRcJobreportMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/mapper/xml/MesRcJobreportMapper.xml
new file mode 100644
index 0000000..19e2e13
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/IMdcJcRcJobreportService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/IMdcJcRcJobreportService.java
new file mode 100644
index 0000000..6e23de2
--- /dev/null
+++ b/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);
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/MesRcJobreportService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/MesRcJobreportService.java
new file mode 100644
index 0000000..e30a8d9
--- /dev/null
+++ b/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);
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MdcJcRcJobreportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MdcJcRcJobreportServiceImpl.java
new file mode 100644
index 0000000..d6d4ad5
--- /dev/null
+++ b/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;
+        }
+    }
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MesRcJobreportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdcJc/service/impl/MesRcJobreportServiceImpl.java
new file mode 100644
index 0000000..333d09d
--- /dev/null
+++ b/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;
+        }
+
+        // 鏋勫缓鍔ㄦ�両N瀛愬彞
+        String inClause = String.join(",", Collections.nCopies(equipmentIdList.size(), "?"));
+
+        // 鏋勫缓瀹夊叏SQL锛堟敞鎰廤HERE瀛愬彞鐨勭┖鏍硷級
+        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;
+    }
+}

--
Gitblit v1.9.3