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/service/Impl/DingtalkInfoServiceImpl.java | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 113 insertions(+), 6 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 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