From 9b208eb3947358169df8f46472a246eb6ea8ca32 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 18 十二月 2023 17:08:09 +0800
Subject: [PATCH] 工作通知

---
 ycl-platform/src/main/java/com/ycl/common/dingding/DingCommon.java |  141 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 130 insertions(+), 11 deletions(-)

diff --git a/ycl-platform/src/main/java/com/ycl/common/dingding/DingCommon.java b/ycl-platform/src/main/java/com/ycl/common/dingding/DingCommon.java
index f3f58e4..e36d906 100644
--- a/ycl-platform/src/main/java/com/ycl/common/dingding/DingCommon.java
+++ b/ycl-platform/src/main/java/com/ycl/common/dingding/DingCommon.java
@@ -74,6 +74,7 @@
             postClient.addParameter("auth_code", code);//涓存椂鎺堟潈鐮�
             String apiResult = postClient.post();
             JSONObject resObj = parsingJson(apiResult);
+            log.info("resObj--------------->{}",resObj);
             if (null != resObj) {
                 resObj = resObj.getJSONObject("data");
                 redisTemplate.opsForValue().set("realmId", resObj.getString("realmId"));
@@ -84,7 +85,12 @@
                 DingUserInfo dingUserInfo = BeanUtil.toBean(resObj, DingUserInfo.class);
                 String accId = DingEncodeUtil.getMD5(resObj.getString("employeeCode").getBytes());
                 dingUserInfo.setUserId(Long.parseLong(accId));
-                dingUserInfo.setAccountId(resObj.getLong("accountId"));
+                String employeeCode = resObj.getString("employeeCode");
+                JSONArray users = getAccountId(Arrays.asList(employeeCode));
+                JSONObject jsonObject = users.getJSONObject(0);
+                String accountId = jsonObject.getString("accountId");
+                dingUserInfo.setAccountId(Long.parseLong(accountId));
+
                 return dingUserInfo;
             }
         }
@@ -95,7 +101,7 @@
      * 鏍规嵁鍛樺伐Code鏌ヨ璇︽儏
      *
      * @param employeeCode 鍛樺伐code鍒楄〃
-     * @param TENANT_ID    绉熸埛id
+     * @param tenantId    绉熸埛id
      * @return
      */
     public JSONObject getEmpByCode(String employeeCode, String tenantId) {
@@ -127,13 +133,34 @@
         postClient.addParameter("tenantId", dingConfig.getTenantId());
         postClient.addParameter("msg", getJsonStringText(content));
         String apiResult = postClient.post();
+        log.info("apiResult------>{}",apiResult);
         JSONObject resObj = parsingJson(apiResult);
         if (null != resObj) {
             resObj = resObj.getJSONObject("data");
         }
         return resObj;
     }
-
+    /**
+     * 鍙戦�乵arkdown娑堟伅
+     *
+     * @param receiverIds 鎺ユ敹浜虹敤鎴稩D(accountId)锛� 澶氫釜浜烘椂浣跨敤鍗婅閫楀彿鍒嗛殧锛�
+     * @param text     娑堟伅锛屾渶濂�500瀛椾互鍐�
+     * @return
+     */
+    public JSONObject sendDingMsgMarkDown(String receiverIds, String title,String text) {
+        //鑾峰彇鐢ㄦ埛淇℃伅
+        PostClient postClient = executableClient.newPostClient(POST_SEND_NOTIFY);
+        postClient.addParameter("receiverIds", receiverIds);
+        postClient.addParameter("tenantId", dingConfig.getTenantId());
+        postClient.addParameter("msg", getJsonMarkDown(title,text));
+        String apiResult = postClient.post();
+        log.info("apiResult------>{}",apiResult);
+        JSONObject resObj = parsingJson(apiResult);
+        if (null != resObj) {
+            resObj = resObj.getJSONObject("data");
+        }
+        return resObj;
+    }
     /**
      * 鍙戦�侀摼鎺ユ秷鎭�
      *
@@ -240,6 +267,7 @@
         orgLambdaQueryWrapper.likeRight(UmsDepart::getCode, "GO_");
         List<UmsDepart> orgList = umsDepartService.list(orgLambdaQueryWrapper);
         Set<DingUserInfo> dingUserInfoList = new HashSet<>();
+        List<String> employeeCodes = new ArrayList();
         for (UmsDepart org : orgList) {
             if (ObjectUtil.isNotEmpty(org.getCode())) {
                 IntelligentGetClient intelligentGetClient = executableClient.newIntelligentGetClient(POST_PERSON_INFO_BY_ORG_CODE);
@@ -276,6 +304,7 @@
                                 JSONObject data = dataArr.getJSONObject(i);
 //                                String empName = data.getString("employeeName");
                                 String employeeCode = data.getString("employeeCode");
+                                employeeCodes.add(employeeCode);
                                 //鏍规嵁鍛樺伐code 鑾峰彇鍛樺伐璇︽儏
                                 DingUserInfo dingUserInfo = getEmpInfoByCode(employeeCode);
                                 if (ObjectUtil.isNotEmpty(dingUserInfo)) {
@@ -289,9 +318,84 @@
                 } while (isHasPage);
             }
         }
+
+        //琛ュ厖accountId
+        dingAccoutId(employeeCodes,dingUserInfoList);
+
         JSONArray arr = new JSONArray(Collections.singletonList(dingUserInfoList));
         redisTemplate.opsForValue().set("userJsonList", arr.toJSONString());
         return dingUserInfoList;
+    }
+    //琛ュ厖DingUserInfo涓殑accountId
+    private void insertAccoutId(Set<DingUserInfo> dingUserInfoList, List<String> employeeCodes) {
+        if(CollectionUtils.isNotEmpty(employeeCodes)) {
+            log.info("寮�濮嬭ˉ鍏卆ccountId");
+            JSONArray users = getAccountId(employeeCodes);
+            if(CollectionUtils.isNotEmpty(users)) {
+                for (int i = 0; i < users.size(); i++) {
+                    JSONObject jsonObject = users.getJSONObject(i);
+                    String employeeCode = jsonObject.getString("employeeCode");
+                    String accountId = jsonObject.getString("accountId");
+                    Optional<DingUserInfo> first = dingUserInfoList.stream().filter(dingUserInfo -> dingUserInfo.getEmployeeCode().equals(employeeCode))
+                            .findFirst();
+                    if(first.isPresent()){
+                        DingUserInfo dingUserInfo = first.get();
+                        dingUserInfo.setAccountId(Long.parseLong(accountId));
+                    }
+                }
+            }
+        }
+    }
+
+    //鍒嗘壒鎵ц
+    private void dingAccoutId(List<String> employeeCodes,Set<DingUserInfo> dingUserInfoList) {
+        // 姣忔鎻掑叆鐨勬暟閲�
+        int batchSize = 99;
+        // 璁$畻闇�瑕佸垎澶氬皯鎵�
+        int batch = employeeCodes.size() / batchSize;
+        // 璁$畻鏈�鍚庝竴鎵圭殑澶у皬
+        int lastSize = employeeCodes.size() % batchSize;
+
+        log.info("鎻掑叆鏁伴噺{},鍒嗗灏戞壒{},鏈�鍚庝竴鎵圭殑澶у皬{}", batchSize, batch, lastSize);
+        // 灏嗙瓫閫夊嚭鐨勭粨鏋滃垎鎵规娣诲姞
+        int num = 1;
+        for (int i = batchSize; i <= batch * batchSize; i = i + batchSize) {
+            log.info("寮�濮�");
+            // 鎴彇鏈瑕佹坊鍔犵殑鏁版嵁
+            List<String> insertList = employeeCodes.subList(i - batchSize, i);
+            // 娣诲姞鏈壒娆℃暟鎹�
+            log.info("鎵归噺瀵煎叆鏁版嵁绗瑊}娆�", num);
+            insertAccoutId(dingUserInfoList, insertList);
+            num++;
+        }
+        // 鏈�鍚庝竴鎵瑰厓绱犵殑澶у皬鏄惁涓�0
+        if (lastSize != 0) {
+            // 濡傛灉鍏冪礌鏈夊墿浣欏垯灏嗘墍鏈夊厓绱犱竴娆℃�ф彃鍏�
+            List<String> lastList = employeeCodes.subList(batchSize * batch, employeeCodes.size());
+            log.info("鏈�鍚庝竴娆″鍏ユ暟鎹�");
+            insertAccoutId(dingUserInfoList, lastList);
+        }
+    }
+    /**
+     * 鏍规嵁鍛樺伐code 鑾峰彇鍛樺伐accountId
+     *
+     * @param employeeCodes 鍛樺伐code
+     * @return 閽夐拤鐢ㄦ埛浣撶郴瀹炰綋瀵硅薄
+     */
+    private JSONArray getAccountId(List<String> employeeCodes) {
+        log.info("Code鍙傛暟闆嗗悎------>{}",employeeCodes);
+        PostClient postClient = executableClient.newPostClient(POST_ACCOUNTID_BY_EMPLOYEECODE);
+        for (String code : employeeCodes) {
+            postClient.addParameter("employeeCodes",code);
+        }
+        postClient.addParameter("tenantId", dingConfig.getTenantId());
+        String apiResult = postClient.post();
+        log.info("鑾峰彇鍛樺伐accountId鎺ュ彛杩斿洖------>{}",apiResult);
+        JSONObject resObj = parsingJson(apiResult);
+        if (null != resObj) {
+            return resObj.getJSONArray("data");
+        }
+        return null;
     }
 
     @Resource
@@ -324,14 +428,14 @@
                         JSONObject holdapost = jobArr.getJSONObject(0);
                         String orgCode = holdapost.getString("organizationCode");
                         if (StrUtil.isNotBlank(orgCode)) {
-                            JSONObject orgDetail = getOrgDetailByCode(orgCode);
-                            if (null != orgDetail) {
-                                String orgId = orgDetail.getString("organizationCode");
-                                String orgName = orgDetail.getString("organizationName");
-                                orgId = DingEncodeUtil.getMD5(orgId.getBytes());
+//                            JSONObject orgDetail = getOrgDetailByCode(orgCode);
+//                            if (null != orgDetail) {
+//                                String orgId = orgDetail.getString("organizationCode");
+//                                String orgName = orgDetail.getString("organizationName");
+                                Long orgId = Long.parseLong(DingEncodeUtil.getMD5(orgCode.getBytes()));
                                 empCodeObj.put("orgId", orgId);
-                                empCodeObj.put("orgName", orgName);
-                            }
+//                                empCodeObj.put("orgName", orgName);
+//                            }
                         }
                     }
                     //鑱屼綅淇℃伅
@@ -547,7 +651,22 @@
         String jsonStr = JSONObject.toJSONString(jsonObject);
         return jsonStr;
     }
-
+    /**
+     * 鎷兼帴瑕佸彂閫佺殑娑堟伅  markdown娑堟伅
+     * json瀵硅薄 蹇呴』 {"msgtype":"markdown","markdown":{"title":"棣栧睆浼氳瘽閫忓嚭鐨勫睍绀哄唴瀹�","text":"娑堟伅鍐呭"}}
+     *
+     * @param title 棣栧睆浼氳瘽閫忓嚭鐨勫睍绀哄唴瀹�
+     */
+    private String getJsonMarkDown(String title,String text) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("msgtype", "markdown");//娑堟伅绫诲瀷锛屾鏃跺浐瀹氫负锛歮arkdown
+        JSONObject markdown = new JSONObject();
+        markdown.put("title", title);//棣栧睆浼氳瘽閫忓嚭鐨勫睍绀哄唴瀹�
+        markdown.put("text",text);//娑堟伅鍐呭锛屽缓璁�500瀛楃浠ュ唴
+        jsonObject.put("markdown", markdown);
+        String jsonStr = JSONObject.toJSONString(jsonObject);
+        return jsonStr;
+    }
     /**
      * 鎷兼帴瑕佸彂閫佺殑娑堟伅   閾炬帴娑堟伅
      *

--
Gitblit v1.8.0