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; /** * ç»ä¸åéQAæ¶æ¯ * æ ¹æ®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("æªç¥çQAç±»å: " + 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()); } } } 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; } 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; } 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; 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; } 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 é对表ãQA_RKJãçæ°æ®åºæä½Mapper * @createDate 2025-12-04 09:49:14 * @Entity com.gs.dingtalk.entity.QaRkj */ public interface QaRkjMapper extends BaseMapper<QaRkj> { } 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 é对表ãQA_XJãçæ°æ®åºæä½Mapper * @createDate 2025-12-04 09:49:37 * @Entity com.gs.dingtalk.entity.QaXj */ public interface QaXjMapper extends BaseMapper<QaXj> { } 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); } 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 é对表ãQA_RKJãçæ°æ®åºæä½Service * @createDate 2025-12-04 09:49:14 */ public interface QaRkjService extends IService<QaRkj> { } 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 é对表ãQA_XJãçæ°æ®åºæä½Service * @createDate 2025-12-04 09:49:37 */ public interface QaXjService extends IService<QaXj> { } 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) { // 对dto.getId()è¿è¡å¤ç©ºå¤ç if (dto.getId() == null) { log.warn("æ£éªIDä¸ºç©ºï¼æ æ³åéæ¶æ¯"); 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("æ²¡æææçééç¨æ·ID"); 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) { // 对dto.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()); //è·åå°ç¨æ·idï¼å½ç¨æ·æ²¡æ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()); // æList<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("æ²¡æææçééç¨æ·ID"); 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) { // 对dto.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()); //è·åå°ç¨æ·idï¼å½ç¨æ·æ²¡æ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()); // æList<MesQaDingtalk>ä¸çuserId使ç¨,æ¼æ¥èµ·æ¥åæuserIdListè¿ä¸ªåé List<String> sidList = list.stream() 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 é对表ãQA_RKJãçæ°æ®åºæä½Serviceå®ç° * @createDate 2025-12-04 09:49:14 */ @Service public class QaRkjServiceImpl extends ServiceImpl<QaRkjMapper, QaRkj> implements QaRkjService{ } 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 é对表ãQA_XJãçæ°æ®åºæä½Serviceå®ç° * @createDate 2025-12-04 09:49:37 */ @Service public class QaXjServiceImpl extends ServiceImpl<QaXjMapper, QaXj> implements QaXjService{ } 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> 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> 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); }