From acea9131318ee6823d008b386e52fee573882b2e Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 18 十二月 2023 15:14:01 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ycl-platform/src/main/java/com/ycl/common/dingding/DingCommon.java | 127 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 118 insertions(+), 9 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 0c61fef..471af60 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 @@ -62,6 +62,7 @@ // 鍒ゆ柇ding 淇℃伅鏄惁瀛樺湪 boolean hasDing = redisTemplate.hasKey("ding"); if (hasDing) { + log.info("redis姝e父鏈夋秷鎭�"); String dingStr = redisTemplate.opsForValue().get("ding"); JSONObject dingObj = JSONObject.parseObject(dingStr); String getToken = dingObj.getString("token"); @@ -74,6 +75,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 +86,6 @@ 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")); return dingUserInfo; } } @@ -95,7 +96,7 @@ * 鏍规嵁鍛樺伐Code鏌ヨ璇︽儏 * * @param employeeCode 鍛樺伐code鍒楄〃 - * @param TENANT_ID 绉熸埛id + * @param tenantId 绉熸埛id * @return */ public JSONObject getEmpByCode(String employeeCode, String tenantId) { @@ -127,13 +128,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 +262,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 +299,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 +313,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 @@ -312,7 +411,6 @@ //鏌ヨ浠昏亴 JSONArray jobArr = getStaffAppointment(employeeCode); assert jobArr != null; - log.info("浠昏亴----------------->{}",jobArr); //涓存椂淇濆瓨浠昏亴鐨刬ds锛堢郴缁熺殑鐢ㄦ埛浣撶郴锛� List<Long> posIds = new ArrayList<>(); //鐢ㄦ埛瑙掕壊code @@ -324,14 +422,12 @@ if (isMain) { JSONObject holdapost = jobArr.getJSONObject(0); String orgCode = holdapost.getString("organizationCode"); - log.info("orgCode---------------->{}",orgCode); if (StrUtil.isNotBlank(orgCode)) { // 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())); - log.info("瑙e瘑鍚庣殑orgId-------------->{}",orgId); empCodeObj.put("orgId", orgId); // empCodeObj.put("orgName", orgName); // } @@ -369,7 +465,6 @@ //杞崲涓哄疄浣撶被 DingUserInfo dingUserInfo = BeanUtil.toBean(empCodeObj, DingUserInfo.class); Long orgId = dingUserInfo.getOrgId(); - log.info("鏈�鍚庣粨鏋滅殑orgId----------->{}",orgId); if (ObjectUtil.isNotEmpty(orgId)) { dingUserInfo.setPosIdList(posIds); dingUserInfo.setRoleCodeList(roleCodeList); @@ -390,7 +485,6 @@ postClient.addParameter("employeeCode", empCode); String apiResult = postClient.post(); JSONObject dataObj = parsingJson(apiResult); - log.info("浠昏亴------------->{}",dataObj); if (null != dataObj) { return dataObj.getJSONArray("data"); } @@ -552,7 +646,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