fuliqi
2023-12-16 3794effa1e9e78e82e81253d6a6d54ad6db89b7e
同步accoutId
7个文件已修改
202 ■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/constant/DingConst.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/dingding/DingCommon.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/IDispatchHandleServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/timer/GetDingToken.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/timer/GetDingUserOrgTimer.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/test/java/com/ycl/sccgplatform/Test1.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
}