From b839bdc85e784e545cb5d371ed3f638747fb6a06 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期一, 22 十二月 2025 09:05:22 +0800
Subject: [PATCH] 新增企业微信的接口
---
src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java | 168 +++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 143 insertions(+), 25 deletions(-)
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 7b91468..68af584 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;
@@ -20,6 +22,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -35,6 +38,7 @@
private final SimpleExample simpleExample;
private final DingtalkMsgMapper dingtalkMsgMapper;
+ private final MesStaffMapper mesStaffMapper;
@Override
public boolean sendMessage(String releaseNo) {
@@ -55,12 +59,58 @@
dateFormat.format(dingtalkMsg.getCreateDate()) : "鏈煡";
// 鏋勫缓娑堟伅鍐呭
- String message = String.format("渚涘簲鍟哰%s] 鏉ユ枡鏃ユ湡[%s] 椤圭洰[%s] 鏂欏彿[%s]鐨勪笉鍚堟牸妫�楠屽崟琚玔%s]瀹℃壒涓篬%s]锛岃鏌ユ敹!",
- dingtalkMsg.getSuppName(), createDateStr, dingtalkMsg.getProjectCodes(),
- dingtalkMsg.getItemNo(), dingtalkMsg.getFname(), dingtalkMsg.getFngHandle());
+// String message = String.format("渚涘簲鍟哰%s] 鏉ユ枡鏃ユ湡[%s] 椤圭洰[%s] 鏂欏彿[%s]鐨勪笉鍚堟牸妫�楠屽崟琚玔%s]瀹℃壒涓篬%s]锛岃鏌ユ敹!",
+// dingtalkMsg.getSuppName(), createDateStr, dingtalkMsg.getProjectCodes(),
+// dingtalkMsg.getItemNo(), dingtalkMsg.getFname(), dingtalkMsg.getFngHandle());
- // 璋冪敤getDingtalkUserIdList鏂规硶鑾峰彇UserIdList
- List<String> userIdList = getDingtalkUserIdList();
+ String message = String.format(
+ "渚涘簲鍟哰%s] 鏉ユ枡鏃ユ湡[%s] 椤圭洰[%s] 鏂欏彿[%s]鐨勪笉鍚堟牸妫�楠屽崟琚玔%s]瀹℃壒涓篬%s]锛岃鏌ユ敹!",
+ Optional.ofNullable(dingtalkMsg.getSuppName()).orElse(" 鏈煡渚涘簲鍟�"),
+ createDateStr,
+ Optional.ofNullable(dingtalkMsg.getProjectCodes()).orElse(" 鏈煡椤圭洰"),
+ Optional.ofNullable(dingtalkMsg.getItemNo()).orElse(" 鏈煡鏂欏彿"),
+ Optional.ofNullable(dingtalkMsg.getFname()).orElse(" 鏈煡瀹℃壒浜�"),
+ Optional.ofNullable(dingtalkMsg.getFngHandle()).orElse(" 鏈煡瀹℃壒缁撴灉"));
+
+ // 鏀堕泦闇�瑕佹帹閫佺殑浜哄憳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()), false
+ );
+ if (buyer != null) {
+ DingtalkInfo buyerInfo = baseMapper.selectOne(
+ new LambdaQueryWrapper<DingtalkInfo>().eq(DingtalkInfo::getSid, buyer.getId()), false
+ );
+ 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,6 +130,93 @@
}
}
+ /**
+ * 鏍规嵁鎸囧畾鐨剆id鍒楄〃鑾峰彇閽夐拤鐢ㄦ埛ID鍒楄〃
+ *
+ * @param sidList sid鍒楄〃
+ * @return 閽夐拤鐢ㄦ埛ID鍒楄〃
+ */
+ private List<String> getDingtalkUserIdListBySids(List<Long> sidList) {
+ try {
+ 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<>();
+ }
+
+ // 浣跨敤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<>();
+ }
+ }
+
+ private OapiMessageCorpconversationAsyncsendV2Response sendMessage(String userIdListStr, String message) throws Exception {
+
+ String accessToken = simpleExample.getAccessToken();
+
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
+ OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
+ request.setAgentId(3917187842L);
+ request.setUseridList(userIdListStr);
+ request.setToAllUser(false);
+
+ OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
+ msg.setMsgtype("text");
+ msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
+ msg.getText().setContent(message);
+ request.setMsg(msg);
+
+ return client.execute(request, accessToken);
+
+ }
+
+ /**
+ * 鑾峰彇isSendDingtalk=1鐨勭敤鎴风殑閽夐拤鐢ㄦ埛ID鍒楄〃锛堜繚鐣欏師鏈夋柟娉曪紝鍚戝悗鍏煎锛�
+ */
private List<String> getDingtalkUserIdList() {
try {
LambdaQueryWrapper<DingtalkInfo> wrapper = new LambdaQueryWrapper<>();
@@ -122,31 +259,12 @@
return list.stream()
.map(DingtalkInfo::getDingtalkId)
.filter(StringUtils::hasText)
+ .distinct()
.collect(Collectors.toList());
} catch (Exception e) {
log.error("鑾峰彇閽夐拤鐢ㄦ埛鍒楄〃澶辫触", e);
return new ArrayList<>();
}
- }
-
- private OapiMessageCorpconversationAsyncsendV2Response sendMessage(String userIdListStr, String message) throws Exception {
-
- String accessToken = simpleExample.getAccessToken();
-
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
- OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
- request.setAgentId(3917187842L);
- request.setUseridList(userIdListStr);
- request.setToAllUser(false);
-
- OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
- msg.setMsgtype("text");
- msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
- msg.getText().setContent(message);
- request.setMsg(msg);
-
- return client.execute(request, accessToken);
-
}
}
--
Gitblit v1.9.3