From 1d1a9472606e6c1ed52be701c3ffc98aeb360cfd Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期二, 24 六月 2025 18:16:57 +0800
Subject: [PATCH] 钉钉根据人员动态推送
---
src/main/java/com/gs/xky/entity/DingtalkInfo.java | 4 +
src/main/java/com/gs/xky/entity/DingtalkMsg.java | 10 +++
src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java | 119 +++++++++++++++++++++++++++++++++++++--
3 files changed, 126 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/gs/xky/entity/DingtalkInfo.java b/src/main/java/com/gs/xky/entity/DingtalkInfo.java
index 7c42e5d..702ab5b 100644
--- a/src/main/java/com/gs/xky/entity/DingtalkInfo.java
+++ b/src/main/java/com/gs/xky/entity/DingtalkInfo.java
@@ -36,4 +36,8 @@
* 閽夐拤閫氱煡
*/
private Integer isSendDingtalk;
+ /**
+ * 鍥哄畾鎺ㄩ�侊紝1琛ㄧず鏄浐瀹氭帹閫佺殑
+ */
+ private Integer isHead;
}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xky/entity/DingtalkMsg.java b/src/main/java/com/gs/xky/entity/DingtalkMsg.java
index b12dbb0..1ddf816 100644
--- a/src/main/java/com/gs/xky/entity/DingtalkMsg.java
+++ b/src/main/java/com/gs/xky/entity/DingtalkMsg.java
@@ -36,11 +36,19 @@
*/
private String itemNo;
/**
- * 瀹℃牳浜�
+ * 瀹℃牳浜轰腑鏂�
*/
private String fname;
/**
* 澶勭悊鏂瑰紡
*/
private String fngHandle;
+ /**
+ * 閲囪喘浜哄憳
+ */
+ private String employeeName;
+ /**
+ * 瀹℃牳浜�
+ */
+ private String modify1By;
}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java b/src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java
index d0f4835..17bb4e3 100644
--- a/src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java
+++ b/src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java
@@ -8,8 +8,10 @@
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.gs.xky.entity.DingtalkInfo;
import com.gs.xky.entity.DingtalkMsg;
+import com.gs.xky.entity.MesStaff;
import com.gs.xky.mapper.DingtalkInfoMapper;
import com.gs.xky.mapper.DingtalkMsgMapper;
+import com.gs.xky.mapper.MesStaffMapper;
import com.gs.xky.service.DingtalkInfoService;
import com.gs.xky.service.SimpleExample;
import lombok.RequiredArgsConstructor;
@@ -35,6 +37,7 @@
private final SimpleExample simpleExample;
private final DingtalkMsgMapper dingtalkMsgMapper;
+ private final MesStaffMapper mesStaffMapper;
@Override
public boolean sendMessage(String releaseNo) {
@@ -59,8 +62,45 @@
dingtalkMsg.getSuppName(), createDateStr, dingtalkMsg.getProjectCodes(),
dingtalkMsg.getItemNo(), dingtalkMsg.getFname(), dingtalkMsg.getFngHandle());
- // 璋冪敤getDingtalkUserIdList鏂规硶鑾峰彇UserIdList
- List<String> userIdList = getDingtalkUserIdList();
+ // 鏀堕泦闇�瑕佹帹閫佺殑浜哄憳sid
+ List<Long> sidList = new ArrayList<>();
+
+ // 1. 鍥哄畾鎺ㄩ�佷汉鍛橈紙isSendDingtalk=1锛�
+ List<DingtalkInfo> fixedList = baseMapper.selectList(
+ new LambdaQueryWrapper<DingtalkInfo>().eq(DingtalkInfo::getIsSendDingtalk, 1)
+ );
+ for (DingtalkInfo info : fixedList) {
+ sidList.add(info.getSid());
+ }
+
+ // 2. 閲囪喘浜哄憳锛坋mployeeName锛�
+ if (StringUtils.hasText(dingtalkMsg.getEmployeeName())) {
+ MesStaff buyer = mesStaffMapper.selectOne(
+ new LambdaQueryWrapper<MesStaff>().eq(MesStaff::getStaffName, dingtalkMsg.getEmployeeName())
+ );
+ if (buyer != null) {
+ DingtalkInfo buyerInfo = baseMapper.selectOne(
+ new LambdaQueryWrapper<DingtalkInfo>().eq(DingtalkInfo::getSid, buyer.getId())
+ );
+ if (buyerInfo != null) sidList.add(buyerInfo.getSid());
+ }
+ }
+
+ // 3. 瀹℃牳浜猴紙modify1By锛�
+ if (StringUtils.hasText(dingtalkMsg.getModify1By())) {
+ MesStaff auditor = mesStaffMapper.selectOne(
+ new LambdaQueryWrapper<MesStaff>().eq(MesStaff::getStaffNo, dingtalkMsg.getModify1By())
+ );
+ if (auditor != null) {
+ DingtalkInfo auditorInfo = baseMapper.selectOne(
+ new LambdaQueryWrapper<DingtalkInfo>().eq(DingtalkInfo::getSid, auditor.getId())
+ );
+ if (auditorInfo != null) sidList.add(auditorInfo.getSid());
+ }
+ }
+
+ // 4. 鏍规嵁鏀堕泦鐨剆id鑾峰彇dingtalkId (澶嶇敤getDingtalkUserIdList鐨勫叧閿�昏緫)
+ List<String> userIdList = getDingtalkUserIdListBySids(sidList);
if (userIdList == null || userIdList.isEmpty()) {
log.warn("娌℃湁闇�瑕佸彂閫侀拤閽夋秷鎭殑鐢ㄦ埛");
@@ -80,11 +120,25 @@
}
}
- private List<String> getDingtalkUserIdList() {
+ /**
+ * 鏍规嵁鎸囧畾鐨剆id鍒楄〃鑾峰彇閽夐拤鐢ㄦ埛ID鍒楄〃
+ *
+ * @param sidList sid鍒楄〃
+ * @return 閽夐拤鐢ㄦ埛ID鍒楄〃
+ */
+ private List<String> getDingtalkUserIdListBySids(List<Long> sidList) {
try {
- LambdaQueryWrapper<DingtalkInfo> wrapper = new LambdaQueryWrapper<>();
- wrapper.ge(DingtalkInfo::getIsSendDingtalk, 1);
- List<DingtalkInfo> list = list(wrapper);
+ if (sidList == null || sidList.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ // 鍘婚噸
+ sidList = sidList.stream().distinct().collect(Collectors.toList());
+
+ // 鏍规嵁sid鏌ヨDingtalkInfo
+ List<DingtalkInfo> list = baseMapper.selectList(
+ new LambdaQueryWrapper<DingtalkInfo>().in(DingtalkInfo::getSid, sidList)
+ );
if (list == null || list.isEmpty()) {
return new ArrayList<>();
@@ -149,6 +203,59 @@
return client.execute(request, accessToken);
}
+
+ /**
+ * 鑾峰彇isSendDingtalk=1鐨勭敤鎴风殑閽夐拤鐢ㄦ埛ID鍒楄〃锛堜繚鐣欏師鏈夋柟娉曪紝鍚戝悗鍏煎锛�
+ */
+ private List<String> getDingtalkUserIdList() {
+ try {
+ LambdaQueryWrapper<DingtalkInfo> wrapper = new LambdaQueryWrapper<>();
+ wrapper.ge(DingtalkInfo::getIsSendDingtalk, 1);
+ List<DingtalkInfo> list = list(wrapper);
+
+ if (list == null || list.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ // 浣跨敤stream娴佽繃婊ゅ嚭list涓璬ingtalkId涓虹┖鐨勬暟鎹�
+ List<DingtalkInfo> emptyDingtalkIdList = list.stream()
+ .filter(info -> !StringUtils.hasText(info.getDingtalkId()))
+ .collect(Collectors.toList());
+
+ // 濡傛灉瀛樺湪涓虹┖鐨勬暟鎹氨閫氳繃閽夐拤鐨勬帴鍙h幏鍙栵紝涓篸ingtalkId璧嬪�硷紝骞朵笖鏇存柊鏁版嵁搴�
+ if (!emptyDingtalkIdList.isEmpty()) {
+ String accessToken = simpleExample.getAccessToken();
+
+ for (DingtalkInfo info : emptyDingtalkIdList) {
+ if (StringUtils.hasText(info.getPhone())) {
+ try {
+ // 閫氳繃鎵嬫満鍙疯幏鍙栭拤閽夌敤鎴稩D
+ com.dingtalk.api.response.OapiV2UserGetbymobileResponse response =
+ simpleExample.getOapiV2UserGetbymobileResponse(info.getPhone(), accessToken);
+
+ if (response != null && response.getResult() != null) {
+ info.setDingtalkId(response.getResult().getUserid());
+ // 鏇存柊鏁版嵁搴�
+ updateById(info);
+ }
+ } catch (Exception e) {
+ log.error("鑾峰彇閽夐拤鐢ㄦ埛ID澶辫触锛屾墜鏈哄彿锛歿}", info.getPhone(), e);
+ }
+ }
+ }
+ }
+
+ // 涓嶅瓨鍦ㄤ负绌虹殑鏁版嵁鎴栬�呭鐞嗗畬绌烘暟鎹悗锛岃繑鍥炴墍鏈夋湁鏁堢殑dingtalkId鍒楄〃
+ return list.stream()
+ .map(DingtalkInfo::getDingtalkId)
+ .filter(StringUtils::hasText)
+ .distinct()
+ .collect(Collectors.toList());
+ } catch (Exception e) {
+ log.error("鑾峰彇閽夐拤鐢ㄦ埛鍒楄〃澶辫触", e);
+ return new ArrayList<>();
+ }
+ }
}
--
Gitblit v1.9.3