zhanghua
2023-12-18 e328acd399dae70ccdf413a6dce94272563477b5
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正常有消息");
            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;
    }
    /**
     * 发送markdown消息
     *
     * @param receiverIds 接收人用户ID(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,48 @@
                } while (isHasPage);
            }
        }
        //补充accountId
        if(CollectionUtils.isNotEmpty(employeeCodes)) {
            log.info("开始补充accountId");
            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));
                    }
                }
            }
        }
        JSONArray arr = new JSONArray(Collections.singletonList(dingUserInfoList));
        redisTemplate.opsForValue().set("userJsonList", arr.toJSONString());
        return dingUserInfoList;
    }
    /**
     * 根据员工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();
        JSONObject resObj = parsingJson(apiResult);
        if (null != resObj) {
            return resObj.getJSONArray("data");
        }
        return null;
    }
    @Resource
@@ -324,14 +387,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 +610,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");//消息类型,此时固定为:markdown
        JSONObject markdown = new JSONObject();
        markdown.put("title", title);//首屏会话透出的展示内容
        markdown.put("text",text);//消息内容,建议500字符以内
        jsonObject.put("markdown", markdown);
        String jsonStr = JSONObject.toJSONString(jsonObject);
        return jsonStr;
    }
    /**
     * 拼接要发送的消息   链接消息
     *