rk
12 小时以前 a71874bb31fc0ca16c81ebcd6ef9bd9d27dec030
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,7 +2,9 @@
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.PhoneUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -23,6 +25,10 @@
import com.doumee.core.haikang.model.param.respose.UserAddResponse;
import com.doumee.core.haikang.model.param.respose.UserDelResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.jiandaoyun.api.arch.DeptApiClient;
import com.doumee.core.jiandaoyun.constants.HttpConstant;
import com.doumee.core.jiandaoyun.model.dept.DeptEntityModel;
import com.doumee.core.jiandaoyun.model.user.UserEntityModel;
import com.doumee.dao.web.response.DDAuthorizeVO;
import com.doumee.service.business.third.TmsService;
import com.doumee.service.business.third.model.LoginUserInfo;
@@ -169,7 +175,7 @@
        Member insert = initAddMemberModel(member,loginUserInfo);
        //海康人员新增业务
        try {
             if(dealHkUserBiz(insert)){
//             if(dealHkUserBiz(insert)){
                memberMapper.insert(insert);
                //创建系统登陆账号(默认无任何角色)
//                if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
@@ -178,9 +184,9 @@
                    //处理培训有效期业务
                    dealTrainTIme(member,0,loginUserInfo);
//                }
            }else{
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
            }
//            }else{
//                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
//            }
        }catch (BusinessException e){
            //如果发生异常,删除已经创建的人员信息
            deleteHkUserBiz(new String[]{insert.getHkId()});
@@ -193,6 +199,7 @@
        }
        return insert;
    }
    public static SystemUser createSystemUser(Member insert,SystemDictDataBiz systemDictDataBiz) {
        SystemUser user = new SystemUser();
        // 生成密码盐
@@ -391,9 +398,9 @@
        if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息已被删除,请刷新页面重试!");
        }
        if(StringUtils.isBlank(company.getHkId())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息未同步安防平台,请先前往【组织管理】菜单进行维护!");
        }
//        if(StringUtils.isBlank(company.getHkId())){
//            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息未同步安防平台,请先前往【组织管理】菜单进行维护!");
//        }
        member.setHkOrgId(company.getHkId());
        member.setCompanyType(company.getType());
        if(Constants.equalsInteger(company.getType(),Constants.ONE)){
@@ -609,7 +616,7 @@
        Member member=new Member();
        member.setId(id);
        member.setIsdeleted(Constants.ONE);
        member.setEditor(loginUserInfo.getId());
        member.setEditor(loginUserInfo!=null?loginUserInfo.getId():null);
        member.setEditDate(date);
        member.setHkStatus(Constants.ZERO);
        member.setRemark("人员已删除,等待删除门禁权限");
@@ -954,7 +961,7 @@
        updateMember.setEditor(loginUserInfo.getId());
        updateMember.setEditDate(new Date());
        //海康人员新增业务
        if(dealHkUserForUpdateBiz(updateMember)){
//        if(dealHkUserForUpdateBiz(updateMember)){
            updateMember.setHkId(null);
            updateMember.setAuthStatus(Constants.ZERO);
            memberMapper.update(null,new UpdateWrapper<Member>().lambda()
@@ -987,9 +994,9 @@
            cancelAllMemberEmpower(updateMember,memberRoleMapper,empowerMapper);
            //记录操作日志
            saveUserActionBiz(updateMember,loginUserInfo,Constants.UserActionType.EDIT,userActionJoinMapper,null);
        }else{
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
        }
//        }else{
//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
//        }
    }
    private void dealTrainTIme(Member updateMember, int i,LoginUserInfo loginUserInfo) {
@@ -1549,7 +1556,8 @@
                .eq(pageWrap.getModel().getHkStatus()!=null,Member::getHkStatus,pageWrap.getModel().getHkStatus())
                .orderByAsc(Company::getSortnum)
                .orderByAsc(Position::getSortnum);
                .orderByAsc(Position::getSortnum)
                .orderByAsc(Member::getId);
//                .orderByAsc(!Constants.equalsInteger(pageWrap.getModel().getIsdeleted(),Constants.ONE),Member::getPinyin)
//                .orderByDesc(Constants.equalsInteger(pageWrap.getModel().getIsdeleted(),Constants.ONE),Member::getEditDate);
        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin())==DataSyncConfig.origin.erp){
@@ -1917,15 +1925,15 @@
                .eq(SystemUser::getDeleted,Constants.ZERO)
                .last(" limit 1 "));
        //非访客用户 进行判断是否存在用户
        if(!Objects.isNull(user)){
        if(Objects.isNull(user)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"您的账号暂未绑定系统,请联系管理员");
        }else{
            Member member = memberMapper.selectById(user.getMemberId());
            if(member == null || member.getIsdeleted() == Constants.ONE){
                return;
//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"账号绑定异常,请联系管理员");
            }
            if(member.getStatus() != Constants.ZERO){
                return;
//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员");
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"您的账号已禁用,请联系管理员");
            }
            if(StringUtils.isNotBlank(member.getIdcardNo())){
                member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()));
@@ -2413,23 +2421,60 @@
     * 同步钉钉内部员工信息
     */
    @Override
    public void syncDDUserInfo() throws ApiException {
        List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo();
        if(CollectionUtils.isEmpty(list)){
            return;
        }
        List<Member> addList = new ArrayList<>();
        List<Member> updateList = new ArrayList<>();
        List<String> delIds = new ArrayList<>();//修改为使用钉钉id  erpId
        List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getType,Constants.TWO));
        dealMemberChangeList(list,addList,updateList,delIds,allList);
    public void syncDDUserInfo(){
        try {
            List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo();
            if(CollectionUtils.isEmpty(list)){
                return;
            }
            List<Member> addList = new ArrayList<>();
            List<Member> updateList = new ArrayList<>();
            List<String> delIds = new ArrayList<>();//修改为使用钉钉id  erpId
            List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .eq(Member::getType,Constants.TWO));
            dealMemberChangeList(list,addList,updateList,delIds,allList);
        if(delIds.size()>0){
            syncDelMember(delIds);
            if(delIds.size()>0){
                syncDelMember(delIds);
            }
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"同步钉钉人员信息异常!");
        }
    }
    @Override
    public String syncJdyUserInfo() {
        DeptApiClient deptApiClient = new DeptApiClient(HttpConstant.API_KEY, HttpConstant.HOST);
        try {
            Map<String, Object> result =  deptApiClient.deptMemberList(1,true,deptApiClient.getDefaultVersion());
            if(result!=null && result.get("users")!=null ){
                TypeReference<List<UserEntityModel>> typeReference =     new TypeReference<List<UserEntityModel>>(){};
                Object obj = result.get("users");
                List<UserEntityModel> list =  com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(obj), typeReference.getType());
                if(list !=null && list.size()>0){
                     List<Member> addList = new ArrayList<>();
                    List<Member> updateList = new ArrayList<>();
                    List<String> delIds = new ArrayList<>();//修改为使用钉钉id  erpId
                    List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                            .eq(Member::getIsdeleted,Constants.ZERO)
                            .eq(Member::getType,Constants.TWO));
                    dealMemberChangeListJdy(list,addList,updateList,delIds,allList);
                    if(delIds.size()>0){
                        syncDelMember(delIds);
                    }
                    return "同步数据:新增【"+addList.size()+"】条,更新【"+updateList.size()+"】条,删除【"+delIds.size()+"】条";
                }else{
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步钉钉数据为空!");
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步数据异常!");
        }
        return null;
    }
    private void syncDelMember(List<String> delIds) {
@@ -2465,25 +2510,65 @@
            }
        }
    }
    private void dealMemberChangeListJdy(List<UserEntityModel> list, List<Member> addList, List<Member> updateList, List<String> delIds, List<Member> allList) {
        Date date = new Date();
        for(UserEntityModel respone : list){
            //根据erpid查询企业信息,判断是新增还是更新
            Member param = new Member();
            param.setErpId(respone.getUsername());
            param.setName(respone.getName());
            param.setDdId(respone.getIntegrate_id());
            param.setCompanyIdList(respone.getDepartments());
            Member member = findMemberByERPId(allList,respone.getUsername());
            if(member == null){
                //如果是新增
                //封装新增组织对象数据
                addList.add(syncDDAddMemberModel(param,new Member()));
            }else{
                updateList.add(syncDDEditMemberModel(param,member));
            }
        }
        if(allList!=null && allList.size()>0){
            for(Member m : allList){
                if(!isMemberDeletedJdy(m,list)){
                    delIds.add(m.getErpId());
                }
            }
        }
    }
    private Member getAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
        return  syncDDAddMemberModel(deptGetResponse,member);
        Member param = new Member();
        param.setErpId(deptGetResponse.getUnionid());
        param.setPhone(deptGetResponse.getMobile());
        param.setName(deptGetResponse.getName());
        param.setCode(deptGetResponse.getJobNumber());
        param.setDdId(deptGetResponse.getUserid());
        param.setCompanyIdList(deptGetResponse.getDeptIdList());
        return  syncDDAddMemberModel(param,member);
    }
    private Member getUpdateMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
        return  syncDDEditMemberModel(deptGetResponse,member);
        Member param = new Member();
        param.setErpId(deptGetResponse.getUnionid());
        param.setPhone(deptGetResponse.getMobile());
        param.setName(deptGetResponse.getName());
        param.setCode(deptGetResponse.getJobNumber());
        param.setDdId(deptGetResponse.getUserid());
        param.setCompanyIdList(deptGetResponse.getDeptIdList());
        return  syncDDEditMemberModel(param,member);
    }
    private Member syncDDAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
    private Member syncDDAddMemberModel(Member deptGetResponse,Member member) {
        member.setCreateDate(new Date());
        member.setErpId(deptGetResponse.getUnionid());
        member.setPhone(deptGetResponse.getMobile());
        member.setErpId(deptGetResponse.getErpId());
        member.setPhone(deptGetResponse.getPhone());
        member.setName(deptGetResponse.getName());
        member.setCode(deptGetResponse.getJobNumber());
        member.setDdId(deptGetResponse.getUserid());
        isMemberParamValidDetail(member,deptGetResponse.getDeptIdList());
        member.setCode(deptGetResponse.getCode());
        member.setDdId(deptGetResponse.getDdId());
        isMemberParamValidDetail(member,deptGetResponse.getCompanyIdList());
        //获取出生日期
        //脱敏操作
        Member insert = initAddMemberModel(member,null);
@@ -2518,7 +2603,7 @@
        }
        member.setCompanyType(Constants.ONE);
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(member.getPhone());
        queryUserDto.setUsername(StringUtils.defaultString(member.getPhone(),member.getErpId()));
        queryUserDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1"));
        if (user != null) {
@@ -2536,13 +2621,13 @@
        }
    }
    
    public Member syncDDEditMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member updateMember) {
    public Member syncDDEditMemberModel(Member deptGetResponse1,Member updateMember) {
        updateMember.setEditDate(new Date());
        updateMember.setErpId(deptGetResponse.getUnionid());
        updateMember.setPhone(deptGetResponse.getMobile());
        updateMember.setName(deptGetResponse.getName());
        updateMember.setCode(deptGetResponse.getJobNumber());
        updateMember.setDdId(deptGetResponse.getUserid());
//        updateMember.setErpId(deptGetResponse.getErpId());
//        updateMember.setPhone(deptGetResponse.getPhone());
//        updateMember.setName(deptGetResponse.getName());
//        updateMember.setCode(deptGetResponse.getCode());
//        updateMember.setDdId(deptGetResponse.getDdId());
        updateMember.setHkId(null);
        updateMember.setAuthStatus(Constants.ZERO);
        Boolean hkFlag = dealHkUserForUpdateBiz(updateMember);
@@ -2604,7 +2689,14 @@
        }
        return false;
    }
    private boolean isMemberDeletedJdy(Member member, List<UserEntityModel> list) {
        for(UserEntityModel m : list){
            if(StringUtils.equals(m.getUsername(),member.getErpId())){
                return  true;
            }
        }
        return false;
    }
    @Override
    public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException {