From 5ee4872b888b80ebda97b76ec75adfbf68731089 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期五, 04 七月 2025 23:43:41 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java | 152 +++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 130 insertions(+), 22 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..ed51e7d 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()),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 +120,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 +249,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