From 866ad48e6cb4f108afff157b48fcc7eeadbebdf6 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期四, 04 十二月 2025 10:36:54 +0800
Subject: [PATCH] 1 feat: 添加 QA 消息推送功能并优化消息发送逻辑 3 - 为 MesQaDingtalkService 添加了巡检和入库检消息发送功能 4 - 在 MesQaDingtalkController 中新增统一消息发送接口 5 - 优化了消息格式并添加了 ID 判空处理 6 - 实现了根据 qaType 动态调用不同消息发送方法

---
 src/main/java/com/gs/dingtalk/service/QaRkjService.java                  |   13 +
 src/main/java/com/gs/dingtalk/service/QaXjService.java                   |   13 +
 src/main/java/com/gs/dingtalk/service/impl/QaXjServiceImpl.java          |   22 ++
 src/main/java/com/gs/dingtalk/controller/MesQaDingtalkController.java    |   85 +++++++++
 src/main/java/com/gs/dingtalk/mapper/QaRkjMapper.java                    |   18 ++
 src/main/java/com/gs/dingtalk/entity/QaRkj.java                          |   62 ++++++
 src/main/resources/mapper/QaXjMapper.xml                                 |    7 
 src/test/java/com/gs/dingtalk/MesQaDingtalkServiceTest.java              |    1 
 src/main/java/com/gs/dingtalk/entity/QaXj.java                           |   62 ++++++
 src/main/java/com/gs/dingtalk/service/impl/QaRkjServiceImpl.java         |   22 ++
 src/main/java/com/gs/dingtalk/dto/QaMsgDto.java                          |    2 
 src/main/java/com/gs/dingtalk/service/impl/MesQaDingtalkServiceImpl.java |  149 +++++++++++++++
 src/main/java/com/gs/dingtalk/entity/QaSj.java                           |    4 
 src/main/resources/mapper/QaRkjMapper.xml                                |    7 
 src/main/java/com/gs/dingtalk/mapper/QaXjMapper.java                     |   18 ++
 src/main/java/com/gs/dingtalk/service/MesQaDingtalkService.java          |    4 
 16 files changed, 481 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/gs/dingtalk/controller/MesQaDingtalkController.java b/src/main/java/com/gs/dingtalk/controller/MesQaDingtalkController.java
new file mode 100644
index 0000000..2fdb3e7
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/controller/MesQaDingtalkController.java
@@ -0,0 +1,85 @@
+package com.gs.dingtalk.controller;
+
+import com.gs.dingtalk.config.ResultMessage;
+import com.gs.dingtalk.dto.QaMsgDto;
+import com.gs.dingtalk.service.MesQaDingtalkService;
+import com.gs.dingtalk.dto.Result;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * MES QA 閽夐拤娑堟伅鎺ㄩ�佹帶鍒跺櫒
+ */
+@RestController
+@RequestMapping("MesQaDingtalk")
+@RequiredArgsConstructor
+@CrossOrigin(origins = "*") //璺ㄥ煙璇锋眰
+public class MesQaDingtalkController {
+
+    private final MesQaDingtalkService mesQaDingtalkService;
+
+    /**
+     * 缁熶竴鍙戦�丵A娑堟伅
+     * 鏍规嵁QaMsgDto.qaType鐨勫�兼潵璋冪敤鐩稿簲鐨勬柟娉�
+     * 棣栦欢棣栨瀹屾垚 -> sendQaMsgSJ
+     * 宸℃妫�楠屽畬鎴� -> sendQaMsgXJ
+     * 鍏ュ簱妫�妫�楠屽畬鎴� -> sendQaMsgRKJ
+     */
+    @PostMapping("/sendQaMsg")
+    public ResultMessage sendQaMsg(@RequestBody QaMsgDto dto) {
+        try {
+            String qaType = dto.getQaType();
+            if ("棣栦欢棣栨瀹屾垚".equals(qaType)) {
+                mesQaDingtalkService.sendQaMsgSJ(dto);
+            } else if ("宸℃妫�楠屽畬鎴�".equals(qaType)) {
+                mesQaDingtalkService.sendQaMsgXJ(dto);
+            } else if ("鍏ュ簱妫�妫�楠屽畬鎴�".equals(qaType)) {
+                mesQaDingtalkService.sendQaMsgRKJ(dto);
+            } else {
+                return ResultMessage.error("鏈煡鐨凲A绫诲瀷: " + qaType);
+            }
+            return ResultMessage.ok();
+        } catch (Exception e) {
+            return ResultMessage.error("QA娑堟伅鍙戦�佸け璐�: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鍙戦�侀浠舵楠屾秷鎭�
+     */
+    @PostMapping("/sendQaMsgSJ")
+    public ResultMessage sendQaMsgSJ(@RequestBody QaMsgDto dto) {
+        try {
+            mesQaDingtalkService.sendQaMsgSJ(dto);
+            return ResultMessage.ok();
+        } catch (Exception e) {
+            return ResultMessage.error("棣栦欢妫�楠屾秷鎭彂閫佸け璐�: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鍙戦�佸贰妫�娑堟伅
+     */
+    @PostMapping("/sendQaMsgXJ")
+    public ResultMessage sendQaMsgXJ(@RequestBody QaMsgDto dto) {
+        try {
+            mesQaDingtalkService.sendQaMsgXJ(dto);
+            return ResultMessage.ok();
+        } catch (Exception e) {
+            return ResultMessage.error("宸℃娑堟伅鍙戦�佸け璐�: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鍙戦�佸叆搴撴娑堟伅
+     */
+    @PostMapping("/sendQaMsgRKJ")
+    public ResultMessage sendQaMsgRKJ(@RequestBody QaMsgDto dto) {
+        try {
+            mesQaDingtalkService.sendQaMsgRKJ(dto);
+            return ResultMessage.ok();
+        } catch (Exception e) {
+            return ResultMessage.error("鍏ュ簱妫�娑堟伅鍙戦�佸け璐�: " + e.getMessage());
+        }
+    }
+}
diff --git a/src/main/java/com/gs/dingtalk/dto/QaMsgDto.java b/src/main/java/com/gs/dingtalk/dto/QaMsgDto.java
index 806f691..5494b53 100644
--- a/src/main/java/com/gs/dingtalk/dto/QaMsgDto.java
+++ b/src/main/java/com/gs/dingtalk/dto/QaMsgDto.java
@@ -6,8 +6,8 @@
 @Data
 public class QaMsgDto {
 
+    private String id;
     private String lineName;
     private String workshopName;
     private String qaType;
-    private String billNo;
 }
diff --git a/src/main/java/com/gs/dingtalk/entity/QaRkj.java b/src/main/java/com/gs/dingtalk/entity/QaRkj.java
new file mode 100644
index 0000000..b3bde0d
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/entity/QaRkj.java
@@ -0,0 +1,62 @@
+package com.gs.dingtalk.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName QA_RKJ
+ */
+@TableName(value ="QA_RKJ")
+@Data
+public class QaRkj implements Serializable {
+    /**
+     * 鍗曞彿id
+     */
+    private Long id;
+
+    /**
+     * 妫�楠屽崟鍙�
+     */
+    private String releaseNo;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    private String itemNo;
+
+    /**
+     * 鐗╂枡鍚嶇О
+     */
+    private String itemName;
+
+    /**
+     * 绾夸綋
+     */
+    private String daa020;
+
+    /**
+     * 杞﹂棿
+     */
+    private String departmentname;
+
+    /**
+     * 鎻愪氦鏍囪瘑
+     */
+    private Long fsubmit;
+
+    /**
+     * 宸ュ崟鍙�
+     */
+    private String daa001;
+
+    /**
+     * 妫�楠岀粨鏋�
+     */
+    private String fcheckResu;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/dingtalk/entity/QaSj.java b/src/main/java/com/gs/dingtalk/entity/QaSj.java
index b8c3ac0..e2bc2b6 100644
--- a/src/main/java/com/gs/dingtalk/entity/QaSj.java
+++ b/src/main/java/com/gs/dingtalk/entity/QaSj.java
@@ -13,6 +13,10 @@
 @Data
 public class QaSj implements Serializable {
     /**
+     * 妫�楠屽崟id
+     */
+    private Long id;
+    /**
      * 妫�楠屽崟鍙�
      */
     private String billNo;
diff --git a/src/main/java/com/gs/dingtalk/entity/QaXj.java b/src/main/java/com/gs/dingtalk/entity/QaXj.java
new file mode 100644
index 0000000..ed16059
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/entity/QaXj.java
@@ -0,0 +1,62 @@
+package com.gs.dingtalk.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName QA_XJ
+ */
+@TableName(value ="QA_XJ")
+@Data
+public class QaXj implements Serializable {
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 妫�楠屽崟鍙�
+     */
+    private String releaseNo;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    private String itemNo;
+
+    /**
+     * 鐗╂枡鍚嶇О
+     */
+    private String itemName;
+
+    /**
+     * 绾夸綋
+     */
+    private String lineName;
+
+    /**
+     * 杞﹂棿
+     */
+    private String departmentname;
+
+    /**
+     * 鎻愪氦鏍囪瘑
+     */
+    private Long fsubmit;
+
+    /**
+     * 宸ュ崟鍙�
+     */
+    private String daa001;
+
+    /**
+     * 妫�楠岀粨鏋�
+     */
+    private String fcheckResu;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/dingtalk/mapper/QaRkjMapper.java b/src/main/java/com/gs/dingtalk/mapper/QaRkjMapper.java
new file mode 100644
index 0000000..ee3de57
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/mapper/QaRkjMapper.java
@@ -0,0 +1,18 @@
+package com.gs.dingtalk.mapper;
+
+import com.gs.dingtalk.entity.QaRkj;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�怮A_RKJ銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-12-04 09:49:14
+* @Entity com.gs.dingtalk.entity.QaRkj
+*/
+public interface QaRkjMapper extends BaseMapper<QaRkj> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/dingtalk/mapper/QaXjMapper.java b/src/main/java/com/gs/dingtalk/mapper/QaXjMapper.java
new file mode 100644
index 0000000..66d4be6
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/mapper/QaXjMapper.java
@@ -0,0 +1,18 @@
+package com.gs.dingtalk.mapper;
+
+import com.gs.dingtalk.entity.QaXj;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�怮A_XJ銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-12-04 09:49:37
+* @Entity com.gs.dingtalk.entity.QaXj
+*/
+public interface QaXjMapper extends BaseMapper<QaXj> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/dingtalk/service/MesQaDingtalkService.java b/src/main/java/com/gs/dingtalk/service/MesQaDingtalkService.java
index e0ae4b6..92c451b 100644
--- a/src/main/java/com/gs/dingtalk/service/MesQaDingtalkService.java
+++ b/src/main/java/com/gs/dingtalk/service/MesQaDingtalkService.java
@@ -13,4 +13,8 @@
 
     void sendQaMsgSJ(QaMsgDto dto);
 
+    void sendQaMsgXJ(QaMsgDto dto);
+
+    void sendQaMsgRKJ(QaMsgDto dto);
+
 }
diff --git a/src/main/java/com/gs/dingtalk/service/QaRkjService.java b/src/main/java/com/gs/dingtalk/service/QaRkjService.java
new file mode 100644
index 0000000..4461a90
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/QaRkjService.java
@@ -0,0 +1,13 @@
+package com.gs.dingtalk.service;
+
+import com.gs.dingtalk.entity.QaRkj;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�怮A_RKJ銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-12-04 09:49:14
+*/
+public interface QaRkjService extends IService<QaRkj> {
+
+}
diff --git a/src/main/java/com/gs/dingtalk/service/QaXjService.java b/src/main/java/com/gs/dingtalk/service/QaXjService.java
new file mode 100644
index 0000000..e671e20
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/QaXjService.java
@@ -0,0 +1,13 @@
+package com.gs.dingtalk.service;
+
+import com.gs.dingtalk.entity.QaXj;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�怮A_XJ銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-12-04 09:49:37
+*/
+public interface QaXjService extends IService<QaXj> {
+
+}
diff --git a/src/main/java/com/gs/dingtalk/service/impl/MesQaDingtalkServiceImpl.java b/src/main/java/com/gs/dingtalk/service/impl/MesQaDingtalkServiceImpl.java
index d388f14..5ca2b38 100644
--- a/src/main/java/com/gs/dingtalk/service/impl/MesQaDingtalkServiceImpl.java
+++ b/src/main/java/com/gs/dingtalk/service/impl/MesQaDingtalkServiceImpl.java
@@ -5,11 +5,11 @@
 import com.gs.dingtalk.dto.DingTalkMessage;
 import com.gs.dingtalk.dto.QaMsgDto;
 import com.gs.dingtalk.entity.MesQaDingtalk;
+import com.gs.dingtalk.entity.QaRkj;
 import com.gs.dingtalk.entity.QaSj;
-import com.gs.dingtalk.service.MesQaDingtalkService;
+import com.gs.dingtalk.entity.QaXj;
+import com.gs.dingtalk.service.*;
 import com.gs.dingtalk.mapper.MesQaDingtalkMapper;
-import com.gs.dingtalk.service.QaSjService;
-import com.gs.dingtalk.service.SimpleExample;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -30,13 +30,22 @@
 public class MesQaDingtalkServiceImpl extends ServiceImpl<MesQaDingtalkMapper, MesQaDingtalk>
         implements MesQaDingtalkService {
 
-
     private final SimpleExample simpleExample;
 
     private final QaSjService qaSjService;
 
+    private final QaXjService qaXjService;
+
+    private final QaRkjService qaRkjService;
+
     @Override
     public void sendQaMsgSJ(QaMsgDto dto) {
+        // 瀵筪to.getId()杩涜鍒ょ┖澶勭悊
+        if (dto.getId() == null) {
+            log.warn("妫�楠孖D涓虹┖锛屾棤娉曞彂閫佹秷鎭�");
+            return;
+        }
+
         LambdaQueryWrapper<MesQaDingtalk> wrapper = new LambdaQueryWrapper<>();
 
         wrapper.eq(MesQaDingtalk::getLineName, dto.getLineName())
@@ -52,7 +61,7 @@
         }
 
         LambdaQueryWrapper<QaSj> qaSjQueryWrapper = new LambdaQueryWrapper<>();
-        qaSjQueryWrapper.eq(QaSj::getBillNo, dto.getBillNo());
+        qaSjQueryWrapper.eq(QaSj::getId, dto.getId());
         QaSj qaSj = qaSjService.getOne(qaSjQueryWrapper, false);
 
         if (qaSj == null) {
@@ -60,10 +69,138 @@
             return;
         }
 
-        String message = String.format("棣栦欢[妫�楠屽崟鍙�:%s, 鐗╂枡缂栫爜:%s, 鐗╂枡鍚嶇О:%s, 杞﹂棿:%s, 绾夸綋:%s, 宸ュ崟鍙�:%s, 妫�楠岀粨鏋�:%s]锛岃杩涜鍚庣画鎿嶄綔",
+        String message = String.format("棣栦欢妫�楠屽崟鍙�:%s, 鐗╂枡:%s-%s, 杞﹂棿:%s绾夸綋:%s, 宸ュ崟:%s, 缁撴灉:%s, 璇疯繘琛屽悗缁鐞�",
                 qaSj.getBillNo(), qaSj.getItemNo(), qaSj.getItemName(), qaSj.getWorkshopName(),
                 qaSj.getLineName(), qaSj.getDaa001(), qaSj.getJyjg());
 
+        List<String> sidList = list.stream()
+                .map(MesQaDingtalk::getTelephone)
+                .collect(Collectors.toList());
+
+        List<String> userIdList = getDingtalkUserIdListByPhones(sidList);
+
+        if (userIdList == null || userIdList.isEmpty()) {
+            log.warn("娌℃湁鏈夋晥鐨勯拤閽夌敤鎴稩D");
+            return;
+        }
+
+        String userIdListStr = String.join(",", userIdList);
+
+
+        DingTalkMessage dingTalkMessage = null;
+        try {
+            dingTalkMessage = simpleExample.sendMessage(userIdListStr, message);
+        } catch (Exception e) {
+            throw new RuntimeException("鍙戦�侀拤閽夋秷鎭け璐�", e);
+        }
+
+        if (dingTalkMessage != null && dingTalkMessage.getErrcode() == 0) {
+            System.out.println("鍙戦�佹垚鍔�");
+        } else {
+            System.out.println("鍙戦�佸け璐�");
+        }
+    }
+
+    @Override
+    public void sendQaMsgXJ(QaMsgDto dto) {
+        // 瀵筪to.getId()杩涜鍒ょ┖澶勭悊
+        if (dto.getId() == null) {
+            log.warn("宸℃ID涓虹┖锛屾棤娉曞彂閫佹秷鎭�");
+            return;
+        }
+
+        LambdaQueryWrapper<MesQaDingtalk> wrapper = new LambdaQueryWrapper<>();
+
+        wrapper.eq(MesQaDingtalk::getLineName, dto.getLineName())
+                .eq(MesQaDingtalk::getDepartmentname, dto.getWorkshopName())
+                .eq(MesQaDingtalk::getQaType, dto.getQaType());
+
+        //鑾峰彇鍒扮敤鎴穒d锛屽綋鐢ㄦ埛娌℃湁id鏃堕噸鏂拌幏鍙栧苟鏇存柊MesQaDingtalk琛�
+        List<MesQaDingtalk> list = list(wrapper);
+
+        if (list.isEmpty()) {
+            // 濡傛灉娌℃湁鎵惧埌瀵瑰簲鐨勭敤鎴凤紝鐩存帴杩斿洖
+            return;
+        }
+
+        LambdaQueryWrapper<QaXj> qaXjQueryWrapper = new LambdaQueryWrapper<>();
+        qaXjQueryWrapper.eq(QaXj::getId, dto.getId());
+        QaXj qaXj = qaXjService.getOne(qaXjQueryWrapper, false);
+
+        if (qaXj == null) {
+            // 濡傛灉娌℃湁鎵惧埌瀵瑰簲鐨勫贰妫�淇℃伅锛岀洿鎺ヨ繑鍥�
+            return;
+        }
+
+        String message = String.format("宸℃鍗曞彿:%s, 鐗╂枡:%s-%s, 杞﹂棿:%s绾夸綋:%s, 宸ュ崟:%s, 缁撴灉:%s, 璇疯繘琛屽悗缁鐞�",
+                qaXj.getReleaseNo(), qaXj.getItemNo(), qaXj.getItemName(), qaXj.getDepartmentname(),
+                qaXj.getLineName(), qaXj.getDaa001(), qaXj.getFcheckResu());
+
+        // 鎶奓ist<MesQaDingtalk>涓殑userId浣跨敤,鎷兼帴璧锋潵鍙樻垚userIdList杩欎釜鍙橀噺
+
+        List<String> sidList = list.stream()
+                .map(MesQaDingtalk::getTelephone)
+                .collect(Collectors.toList());
+
+        List<String> userIdList = getDingtalkUserIdListByPhones(sidList);
+
+        if (userIdList == null || userIdList.isEmpty()) {
+            log.warn("娌℃湁鏈夋晥鐨勯拤閽夌敤鎴稩D");
+            return;
+        }
+
+        String userIdListStr = String.join(",", userIdList);
+
+
+        DingTalkMessage dingTalkMessage = null;
+        try {
+            dingTalkMessage = simpleExample.sendMessage(userIdListStr, message);
+        } catch (Exception e) {
+            throw new RuntimeException("鍙戦�侀拤閽夋秷鎭け璐�", e);
+        }
+
+        if (dingTalkMessage != null && dingTalkMessage.getErrcode() == 0) {
+            System.out.println("鍙戦�佹垚鍔�");
+        } else {
+            System.out.println("鍙戦�佸け璐�");
+        }
+    }
+
+    @Override
+    public void sendQaMsgRKJ(QaMsgDto dto) {
+        // 瀵筪to.getId()杩涜鍒ょ┖澶勭悊
+        if (dto.getId() == null) {
+            log.warn("鍏ュ簱妫�ID涓虹┖锛屾棤娉曞彂閫佹秷鎭�");
+            return;
+        }
+
+        LambdaQueryWrapper<MesQaDingtalk> wrapper = new LambdaQueryWrapper<>();
+
+        wrapper.eq(MesQaDingtalk::getLineName, dto.getLineName())
+                .eq(MesQaDingtalk::getDepartmentname, dto.getWorkshopName())
+                .eq(MesQaDingtalk::getQaType, dto.getQaType());
+
+        //鑾峰彇鍒扮敤鎴穒d锛屽綋鐢ㄦ埛娌℃湁id鏃堕噸鏂拌幏鍙栧苟鏇存柊MesQaDingtalk琛�
+        List<MesQaDingtalk> list = list(wrapper);
+
+        if (list.isEmpty()) {
+            // 濡傛灉娌℃湁鎵惧埌瀵瑰簲鐨勭敤鎴凤紝鐩存帴杩斿洖
+            return;
+        }
+
+        LambdaQueryWrapper<QaRkj> qaRkjQueryWrapper = new LambdaQueryWrapper<>();
+        qaRkjQueryWrapper.eq(QaRkj::getId, dto.getId());
+        QaRkj qaRkj = qaRkjService.getOne(qaRkjQueryWrapper, false);
+
+        if (qaRkj == null) {
+            // 濡傛灉娌℃湁鎵惧埌瀵瑰簲鐨勫叆搴撴淇℃伅锛岀洿鎺ヨ繑鍥�
+            return;
+        }
+
+        String message = String.format("鍏ュ簱妫�鍗曞彿:%s, 鐗╂枡:%s-%s, 杞﹂棿:%s绾夸綋:%s, 宸ュ崟:%s, 缁撴灉:%s, 璇疯繘琛屽悗缁鐞�",
+                qaRkj.getReleaseNo(), qaRkj.getItemNo(), qaRkj.getItemName(), qaRkj.getDepartmentname(),
+                qaRkj.getDaa020(), qaRkj.getDaa001(), qaRkj.getFcheckResu());
+
         // 鎶奓ist<MesQaDingtalk>涓殑userId浣跨敤,鎷兼帴璧锋潵鍙樻垚userIdList杩欎釜鍙橀噺
 
         List<String> sidList = list.stream()
diff --git a/src/main/java/com/gs/dingtalk/service/impl/QaRkjServiceImpl.java b/src/main/java/com/gs/dingtalk/service/impl/QaRkjServiceImpl.java
new file mode 100644
index 0000000..8058c2c
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/impl/QaRkjServiceImpl.java
@@ -0,0 +1,22 @@
+package com.gs.dingtalk.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.dingtalk.entity.QaRkj;
+import com.gs.dingtalk.service.QaRkjService;
+import com.gs.dingtalk.mapper.QaRkjMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�怮A_RKJ銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-12-04 09:49:14
+*/
+@Service
+public class QaRkjServiceImpl extends ServiceImpl<QaRkjMapper, QaRkj>
+    implements QaRkjService{
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/dingtalk/service/impl/QaXjServiceImpl.java b/src/main/java/com/gs/dingtalk/service/impl/QaXjServiceImpl.java
new file mode 100644
index 0000000..07a88d3
--- /dev/null
+++ b/src/main/java/com/gs/dingtalk/service/impl/QaXjServiceImpl.java
@@ -0,0 +1,22 @@
+package com.gs.dingtalk.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.dingtalk.entity.QaXj;
+import com.gs.dingtalk.service.QaXjService;
+import com.gs.dingtalk.mapper.QaXjMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�怮A_XJ銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-12-04 09:49:37
+*/
+@Service
+public class QaXjServiceImpl extends ServiceImpl<QaXjMapper, QaXj>
+    implements QaXjService{
+
+}
+
+
+
+
diff --git a/src/main/resources/mapper/QaRkjMapper.xml b/src/main/resources/mapper/QaRkjMapper.xml
new file mode 100644
index 0000000..0de592b
--- /dev/null
+++ b/src/main/resources/mapper/QaRkjMapper.xml
@@ -0,0 +1,7 @@
+<?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="com.gs.dingtalk.mapper.QaRkjMapper">
+
+</mapper>
diff --git a/src/main/resources/mapper/QaXjMapper.xml b/src/main/resources/mapper/QaXjMapper.xml
new file mode 100644
index 0000000..687fb15
--- /dev/null
+++ b/src/main/resources/mapper/QaXjMapper.xml
@@ -0,0 +1,7 @@
+<?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="com.gs.dingtalk.mapper.QaXjMapper">
+
+</mapper>
diff --git a/src/test/java/com/gs/dingtalk/MesQaDingtalkServiceTest.java b/src/test/java/com/gs/dingtalk/MesQaDingtalkServiceTest.java
index 7c0f29e..e22ac9f 100644
--- a/src/test/java/com/gs/dingtalk/MesQaDingtalkServiceTest.java
+++ b/src/test/java/com/gs/dingtalk/MesQaDingtalkServiceTest.java
@@ -29,7 +29,6 @@
         dto.setLineName("娉ㄥ3鍙锋満");
         dto.setWorkshopName("娉ㄥ杞﹂棿");
         dto.setQaType("棣栦欢棣栨瀹屾垚");
-        dto.setBillNo("SJ202509150022");
 
         mesQaDingtalkService.sendQaMsgSJ(dto);
     }

--
Gitblit v1.9.3