From f11afb84d32ed6d2b582ed193db2f9805cd365ec Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 18 十二月 2023 15:13:32 +0800
Subject: [PATCH] 工作通知定时任务
---
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