ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java
@@ -102,6 +102,9 @@ @ApiModelProperty(value = "应用+用户唯—标识") private String openid; @ApiModelProperty(value = "钉钉账户id") private Long accountId; @ApiModelProperty(value = "是否为网格管理员:0->不是;1->是") private Integer isGrid; ycl-platform/src/main/java/com/ycl/common/constant/DingConst.java
@@ -71,6 +71,10 @@ * 查询员工任职 */ String POST_STAFF_APPOINTMENT = "/mozi/employee/listEmployeePositionsByEmployeeCode"; /** * 查询员工任职 */ String POST_ACCOUNTID_BY_EMPLOYEECODE = "/mozi/employee/listEmployeeAccountIds"; /** * 根据组织Code查询详情 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 @@ -312,7 +375,6 @@ //查询任职 JSONArray jobArr = getStaffAppointment(employeeCode); assert jobArr != null; log.info("任职----------------->{}",jobArr); //临时保存任职的ids(系统的用户体系) List<Long> posIds = new ArrayList<>(); //用户角色code @@ -324,14 +386,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("解密后的orgId-------------->{}",orgId); empCodeObj.put("orgId", orgId); // empCodeObj.put("orgName", orgName); // } @@ -369,7 +429,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 +449,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 +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; } /** * 拼接要发送的消息 链接消息 * ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/IDispatchHandleServiceImpl.java
@@ -1,22 +1,31 @@ package com.ycl.service.caseHandler.impl; import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.gson.JsonObject; import com.ycl.common.constant.BaseCaseStatus; import com.ycl.common.constant.StepName; import com.ycl.common.dingding.DingCommon; import com.ycl.controller.user.UmsAdminController; import com.ycl.dto.caseHandler.DispatchInfoParam; import com.ycl.entity.caseHandler.BaseCase; import com.ycl.entity.caseHandler.DispatchInfo; import com.ycl.entity.caseHandler.DisposeRecord; import com.ycl.entity.caseHandler.WorkflowConfigStep; import com.ycl.entity.user.UmsAdmin; import com.ycl.exception.ApiException; import com.ycl.mapper.caseHandler.BaseCaseMapper; import com.ycl.mapper.caseHandler.DispatchInfoMapper; import com.ycl.mapper.caseHandler.DisposeRecordMapper; import com.ycl.mapper.caseHandler.WorkflowConfigStepMapper; import com.ycl.service.caseHandler.IDispatchHandleService; import com.ycl.service.user.UmsAdminService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,6 +43,7 @@ */ @Service @Transactional @Slf4j public class IDispatchHandleServiceImpl extends ServiceImpl<DispatchInfoMapper, DispatchInfo> implements IDispatchHandleService { @Resource @@ -42,7 +52,10 @@ DisposeRecordMapper disposeRecordMapper; @Resource WorkflowConfigStepMapper workflowConfigStepMapper; @Autowired DingCommon dingCommon; @Autowired UmsAdminService umsAdminService; @Override @Transactional public DispatchInfo dispatch(DispatchInfoParam dispatchInfoParam) { @@ -97,6 +110,18 @@ stepNextRecord.setCreateTime(LocalDateTime.now()); disposeRecordMapper.insert(stepNextRecord); //发送钉钉工作通知消息 log.info("发送一条工作通知"); BaseCase baseCaseForCode = baseCaseMapper.selectById(dispatchInfoParam.getBaseCaseId()); String baseCaseCode = baseCaseForCode.getCode(); String text ="您有一条工作通知 \n " + " 遂昌云执法:有待处理的任务 \n " + "·您有1条待处理事件。事件编号: \n " + baseCaseCode; Long lawEnforcer = dispatchInfoParam.getLawEnforcer(); UmsAdmin user = umsAdminService.getById(lawEnforcer); dingCommon.sendDingMsgStr(user.getAccountId()+"",text); return dispatchInfo; } ycl-platform/src/main/java/com/ycl/timer/GetDingToken.java
@@ -91,7 +91,7 @@ // runAction(); } } // @Scheduled(cron ="0 0/2 * * * ? ") @Scheduled(cron ="0 0/2 * * * ? ") public void runAction() { //gettoken String getToken = getToken(); ycl-platform/src/main/java/com/ycl/timer/GetDingUserOrgTimer.java
@@ -33,10 +33,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.*; @Slf4j @@ -72,7 +69,7 @@ @Autowired private UmsAdminRoleRelationService umsAdminRoleRelationService; //@Scheduled(cron = "0 0 00 * * ?") @Scheduled(cron = "40 50 16 * * ?") @Transactional(rollbackFor = Exception.class) public void run() { log.info("开始同步任务"); @@ -114,12 +111,14 @@ /** // * 根据组织code 查询 通讯录人员信息 // */ Set<DingUserInfo> dingList = dingCommon.getPersonInfoByOrgCode(); //查询所有用户 List<UmsAdmin> userList = umsAdminService.list(); //查询用户组织关联表 List<UmsDepartManage> empOrgList = departManageService.list(); Iterator<DingUserInfo> iterator = dingList.iterator(); //查询所有用户 Set<DingUserInfo> dingList = dingCommon.getPersonInfoByOrgCode(); Set<DingUserInfo> dingUsers = new HashSet<>(dingList); log.info("dinglistStart----->{}",dingList); List<UmsAdmin> userList = umsAdminService.list(); Iterator<DingUserInfo> iterator = dingUsers.iterator(); while (iterator.hasNext()) { DingUserInfo dingUserInfo = iterator.next(); //判断用户是否存在,输出新用户 @@ -137,9 +136,12 @@ } } } log.info("dinglistEnd----->{}",dingUsers); ArrayList<UmsAdminRoleRelation> relations = new ArrayList<>(); // log.info(TAG + " elapsed time:" + timer.interval()); for (DingUserInfo dingUserInfo : dingList) { for (DingUserInfo dingUserInfo : dingUsers) { //1.添加用户 UmsAdmin user = new UmsAdmin(); //账号 @@ -151,6 +153,9 @@ user.setNickName(dingUserInfo.getEmployeeName()); } //code //accountId log.info("员工账户id{}",dingUserInfo.getAccountId()); user.setAccountId(dingUserInfo.getAccountId()); //头像 user.setIcon(dingUserInfo.getGovEmpAvatar()); //姓名 @@ -168,26 +173,26 @@ //状态为停用(不可用状态)点击登录后才能使用 user.setStatus(1); umsAdminService.save(user); //员工信息,关联组织 UmsDepartManage departManage = new UmsDepartManage(); departManage.setDepartId(dingUserInfo.getOrgId()); departManage.setIsLeader(0); departManage.setUserId(dingUserInfo.getUserId()); departManageService.saveOrUpdate(departManage); //角色信息 List<String> roleCode = dingUserInfo.getRoleCodeList(); if (CollectionUtils.isNotEmpty(roleCode)) { List<UmsRole> roleList = roleService.getRoleListByCodes(roleCode); roleList.forEach(item -> { UmsAdminRoleRelation relation = new UmsAdminRoleRelation(); relation.setAdminId(dingUserInfo.getUserId()); relation.setRoleId(item.getId()); relations.add(relation); }); } } if (CollUtil.isNotEmpty(relations)) { umsAdminRoleRelationService.saveBatch(relations, IService.DEFAULT_BATCH_SIZE); // //员工信息,关联组织 // UmsDepartManage departManage = new UmsDepartManage(); // departManage.setDepartId(dingUserInfo.getOrgId()); // departManage.setIsLeader(0); // departManage.setUserId(dingUserInfo.getUserId()); // departManageService.saveOrUpdate(departManage); // //角色信息 // List<String> roleCode = dingUserInfo.getRoleCodeList(); // if (CollectionUtils.isNotEmpty(roleCode)) { // List<UmsRole> roleList = roleService.getRoleListByCodes(roleCode); // roleList.forEach(item -> { // UmsAdminRoleRelation relation = new UmsAdminRoleRelation(); // relation.setAdminId(dingUserInfo.getUserId()); // relation.setRoleId(item.getId()); // relations.add(relation); // }); // } // } // if (CollUtil.isNotEmpty(relations)) { // umsAdminRoleRelationService.saveBatch(relations, IService.DEFAULT_BATCH_SIZE); } log.info("同步任务结束"); // log.info(TAG + "update user size " + dingList.size()); ycl-platform/src/test/java/com/ycl/sccgplatform/Test1.java
@@ -1,10 +1,8 @@ package com.ycl.sccgplatform; import com.alibaba.fastjson.JSONObject; import com.ycl.common.util.UtilNumber; import com.ycl.dto.video.Camera; import com.ycl.dto.video.HttpResponseResult; import com.ycl.dto.video.PageResult; import com.ycl.entity.dingding.DingUserInfo; import com.ycl.entity.user.UmsAdmin; import com.ycl.mapper.unlawful.UnlawfulMapper; import com.ycl.service.oss.OssService; import org.junit.jupiter.api.Test; @@ -14,8 +12,7 @@ import javax.annotation.Resource; import javax.xml.bind.DatatypeConverter; import java.io.*; import java.util.List; import java.util.UUID; import java.util.*; @SpringBootTest public class Test1 { @@ -74,3 +71,4 @@ fis.close(); } }