| | |
| | | // 判断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"); |
| | |
| | | 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")); |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | * 根据员工Code查询详情 |
| | | * |
| | | * @param employeeCode 员工code列表 |
| | | * @param TENANT_ID 租户id |
| | | * @param tenantId 租户id |
| | | * @return |
| | | */ |
| | | public JSONObject getEmpByCode(String employeeCode, String tenantId) { |
| | |
| | | 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; |
| | | } |
| | | /** |
| | | * 发送链接消息 |
| | | * |
| | |
| | | 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); |
| | |
| | | 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)) { |
| | |
| | | } 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("开始补充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)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //分批执行 |
| | | 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 |
| | |
| | | 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); |
| | | // } |
| | | } |
| | | } |
| | | //职位信息 |
| | |
| | | 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; |
| | | } |
| | | /** |
| | | * 拼接要发送的消息 链接消息 |
| | | * |