doum
2 天以前 46e8af542c02d801bea9fa8cf8f55974dcfa8554
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,12 @@
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.request.MemberPushData;
import com.doumee.core.jiandaoyun.model.request.UserPushData;
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;
@@ -59,17 +67,21 @@
import com.doumee.service.business.third.model.response.TmsEmployeeListResponse;
import com.doumee.service.system.SystemLoginService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.taobao.api.ApiException;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.util.DataUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -86,6 +98,7 @@
 * @author 江蹄蹄
 * @date 2023/11/30 15:33
 */
@Slf4j
@Service
public class MemberServiceImpl implements MemberService {
@@ -153,7 +166,7 @@
    @Autowired
    private DingTalk dingTalk;
    @Value("${debug_model}")
    private Boolean isDebug;
    @Override
@@ -169,18 +182,18 @@
        Member insert = initAddMemberModel(member,loginUserInfo);
        //海康人员新增业务
        try {
             if(dealHkUserBiz(insert)){
                memberMapper.insert(insert);
                //创建系统登陆账号(默认无任何角色)
//             if(dealHkUserBiz(insert)){
            memberMapper.insert(insert);
            //创建系统登陆账号(默认无任何角色)
//                if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
                    //如果是内部组织人员,新增系统登陆账号
                    systemUserMapper.insert(createSystemUser(insert,systemDictDataBiz));
                    //处理培训有效期业务
                    dealTrainTIme(member,0,loginUserInfo);
            //如果是内部组织人员,新增系统登陆账号
            systemUserMapper.insert(createSystemUser(insert,systemDictDataBiz));
            //处理培训有效期业务
            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 +206,7 @@
        }
        return insert;
    }
    public static SystemUser createSystemUser(Member insert,SystemDictDataBiz systemDictDataBiz) {
        SystemUser user = new SystemUser();
        // 生成密码盐
@@ -239,12 +253,12 @@
        insert.setHkDate(new Date());
        insert.setDdId(member.getDdId());
        insert.setErpId(member.getErpId());
        insert.setWorkStatus(Constants.ZERO);//默认在职
        insert.setCanVisit(Constants.ZERO);//默认不可访问
        insert.setWorkStatus(Constants.formatIntegerNum(member.getWorkStatus()));//默认在职
        insert.setCanVisit(Constants.formatIntegerNum(member.getCanVisit()));//默认不可访问
        insert.setAuthStatus(Constants.ZERO);
        insert.setName(member.getName());
        insert.setHkId(UUID.randomUUID().toString().replace("-",""));
        insert.setHkStatus(Constants.ONE);
        insert.setHkStatus(Constants.ZERO);
        insert.setSex(Constants.getSexByCardNo( member.getIdcardNo()));//根据身份证号获取性别
        insert.setJobDate(member.getJobDate());
        insert.setIsDangyuan(member.getIsDangyuan());
@@ -365,7 +379,7 @@
    private void isMemberParamValid(Member member) {
        if(member.getCompanyId() == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"所属组织不存在!");
        }
        if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"电话号码格式有误");
@@ -387,13 +401,13 @@
                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【"+member.getPhone()+"】已被使用,不能重复");
        }
        Company company = companyMapper.selectById(member.getCompanyId());
        Company company = member.getCompany()!=null ?member.getCompany(): companyMapper.selectById(member.getCompanyId());
        if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息已被删除,请刷新页面重试!");
            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)){
@@ -477,7 +491,7 @@
            isNeedUpdateUser = true;
        }
        if(StringUtils.isNotBlank(member.getCode()) && StringUtils.equals(member.getPhone(),model.getCode())){
                // 验证工号
            // 验证工号
            SystemUser queryUserDto = new SystemUser();
            queryUserDto = new SystemUser();
            queryUserDto.setDeleted(Boolean.FALSE);
@@ -491,7 +505,7 @@
        }
        if(member.getCompanyId()!=null && !Constants.equalsInteger(member.getCompanyId(),model.getCompanyId())){
            //如果组织发生变化
            Company company = companyMapper.selectById(member.getCompanyId());
            Company company = member.getCompany()!=null ?member.getCompany(): companyMapper.selectById(member.getCompanyId());
            if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息已被删除,请刷新页面重试!");
            }
@@ -508,15 +522,15 @@
        if(isNeedUpdateUser){
            //更新系统用户账号信息
            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
                            .set(SystemUser::getUpdateUser,member.getLoginUserInfo().getId())
                            .set(SystemUser::getUpdateTime,new Date())
                            .set(StringUtils.isNotBlank(member.getFaceImg()),SystemUser::getAvatar,member.getFaceImg())
                            .set(StringUtils.isNotBlank(member.getName()),SystemUser::getPinyin,Constants.getChinesePingyin(member.getName()))
                            .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getMobile,member.getPhone())
                            .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getUsername,member.getPhone())
                            .set(StringUtils.isNotBlank(member.getName()),SystemUser::getRealname,member.getName())
                            .set(member.getCompanyId() !=null,SystemUser::getCompanyId,member.getCompanyId())
                            .set(StringUtils.isNotBlank(member.getCode()),SystemUser::getEmpNo,member.getCode())
                    .set(SystemUser::getUpdateUser,member.getLoginUserInfo()!=null?member.getLoginUserInfo().getId():null)
                    .set(SystemUser::getUpdateTime,new Date())
                    .set(StringUtils.isNotBlank(member.getFaceImg()),SystemUser::getAvatar,member.getFaceImg())
                    .set(StringUtils.isNotBlank(member.getName()),SystemUser::getPinyin,Constants.getChinesePingyin(member.getName()))
                    .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getMobile,member.getPhone())
                    .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getUsername,member.getPhone())
                    .set(StringUtils.isNotBlank(member.getName()),SystemUser::getRealname,member.getName())
                    .set(member.getCompanyId() !=null,SystemUser::getCompanyId,member.getCompanyId())
                    .set(StringUtils.isNotBlank(member.getCode()),SystemUser::getEmpNo,member.getCode())
                    .eq(SystemUser::getMemberId,model.getId()));
        }
        if(Constants.equalsInteger(model.getCompanyType(),Constants.ZERO)
@@ -524,7 +538,7 @@
                && member.getTrainStartTime()!=null){
            TrainTime trainTime = new TrainTime();
            trainTime.setIsdeleted(Constants.ZERO);
            trainTime.setCreator(member.getLoginUserInfo().getId());
            trainTime.setCreator(member.getLoginUserInfo()!=null?member.getLoginUserInfo().getId():null);
            trainTime.setCreateDate(new Date());
            trainTime.setEdirot(trainTime.getCreator());
            trainTime.setEditDate(trainTime.getCreateDate());
@@ -609,7 +623,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("人员已删除,等待删除门禁权限");
@@ -633,20 +647,20 @@
        );
        if (carsList!=null && carsList.size()>0){
            for(Cars car :carsList){
               if(Constants.equalsInteger(car.getAuthStatus(),Constants.ONE)){
                   carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
                           .eq(Cars::getId,car.getId())
                           .set(Cars::getStartTime,null)
                if(Constants.equalsInteger(car.getAuthStatus(),Constants.ONE)){
                    carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
                                    .eq(Cars::getId,car.getId())
                                    .set(Cars::getStartTime,null)
//                           .set(Cars::getMemberId,null)
                           .set(Cars::getEndTime,null)
                           .set(Cars::getAuthTimeType,null)
                           .set(Cars::getAuthStatus,Constants.ZERO)
                           .set(Cars::getEditDate,member.getEditDate())
                           .set(Cars::getEdirot,member.getEditor())
                   );
                   //删除已授权下发的包期授权
                   CarsServiceImpl.dealCancelBookBiz(car.getCode(),date,parkBookMapper);
               }
                                    .set(Cars::getEndTime,null)
                                    .set(Cars::getAuthTimeType,null)
                                    .set(Cars::getAuthStatus,Constants.ZERO)
                                    .set(Cars::getEditDate,member.getEditDate())
                                    .set(Cars::getEdirot,member.getEditor())
                    );
                    //删除已授权下发的包期授权
                    CarsServiceImpl.dealCancelBookBiz(car.getCode(),date,parkBookMapper);
                }
            }
        }
    }
@@ -683,14 +697,14 @@
            }
        }
        if(Constants.equalsInteger(memberRole.getTimeType(),Constants.ZERO) ){
           memberRole.setStartTime(null);
           memberRole.setEndTime(null);
            memberRole.setStartTime(null);
            memberRole.setEndTime(null);
        }
        for (Integer id : memberRole.getIds()){
            Member member = memberMapper.selectById(id);
            if(member==null || member.getIsdeleted().equals(Constants.ONE)){
                //如果员工信息不合法直接跳过
               continue;
                continue;
            }
            if(StringUtils.isBlank(member.getFaceId()) || !Constants.equalsInteger(member.getFaceStatus(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,用户【"+member.getName()+"】的人脸信息不满足授权条件,请返回完善后再进行该操作!");
@@ -729,7 +743,7 @@
            saveUserActionBiz(member,memberRole.getLoginUserInfo(), Constants.UserActionType.AUTH_ROLE,userActionJoinMapper,null);
            //重新授权
            HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,member,deviceRoleMapper,empowerMapper,deviceMapper);
         }
        }
    }
    public static   Integer   getRoleIdByParam(Integer[] param, Member member,MemberRoleMapper memberRoleMapper,DeviceRoleMapper deviceRoleMapper) {
@@ -744,7 +758,7 @@
            //检查用户情况权限原本就是空的, 则无需处理
            return  0;
        }
         if((param == null || param.length==0 ) &&( roleList!=null && roleList.size()>0) ){
        if((param == null || param.length==0 ) &&( roleList!=null && roleList.size()>0) ){
            //如果清空原来有权限,接口进行权限删除原有权限即可
            memberRoleMapper.delete(new QueryWrapper<MemberRole>().lambda().eq(MemberRole::getMemberId,member.getId()));
            return 1;
@@ -831,14 +845,14 @@
    @Override
    public     void empowerByList(Member member) {
        if(member.getIdList()!=null && member.getIdList().size() >0){
             List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                     .in(Member::getId,member.getIdList())
                     .eq(Member::getIsdeleted,Constants.ZERO));
             if(members!=null){
                 for(Member m : members){
                     HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,m,deviceRoleMapper,empowerMapper,deviceMapper);
                 }
             }
            List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .in(Member::getId,member.getIdList())
                    .eq(Member::getIsdeleted,Constants.ZERO));
            if(members!=null){
                for(Member m : members){
                    HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,m,deviceRoleMapper,empowerMapper,deviceMapper);
                }
            }
        }
    }
@@ -951,45 +965,47 @@
        }
        //校验参数 并且更新systemuser 手机号和工号信息(如果需要修改的话)
        Member model =   isMemberUpdateParamValid(updateMember);
        updateMember.setEditor(loginUserInfo.getId());
        updateMember.setEditor(loginUserInfo!=null?loginUserInfo.getId():null);
        updateMember.setEditDate(new Date());
        //海康人员新增业务
        if(dealHkUserForUpdateBiz(updateMember)){
            updateMember.setHkId(null);
            updateMember.setAuthStatus(Constants.ZERO);
            memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                    .set(Member::getStartTime,null)
                    .set(Member::getEndTime,null)
                    .set(Member::getRoleId,null)
                    .set(StringUtils.isNotBlank(updateMember.getPhone()),Member::getPhone,updateMember.getPhone())
                    .set(StringUtils.isNotBlank(updateMember.getName()),Member::getName,updateMember.getName())
                    .set(Member::getEditDate,updateMember.getEditDate())
                    .set(Member::getEditor,updateMember.getEditor())
                    .set(StringUtils.isNotBlank(updateMember.getName()),Member::getPinyin,Constants.getChinesePingyin(updateMember.getName()))
                    .set(StringUtils.isNotBlank(updateMember.getIdcardNo()),Member::getIdcardNo,updateMember.getIdcardNo())
                    .set(StringUtils.isNotBlank(updateMember.getIdcardDecode()),Member::getIdcardDecode,updateMember.getIdcardDecode())
                    .set( Member::getAuthStatus,Constants.ZERO)
                    .set(updateMember.getHkStatus()!=null,Member::getHkStatus,updateMember.getHkStatus())
                    .set(updateMember.getSex()!=null,Member::getSex,updateMember.getSex())
                    .set(updateMember.getFaceStatus()!=null,Member::getFaceStatus,updateMember.getFaceStatus())
                    .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
                    .set(StringUtils.isNotBlank(updateMember.getRemark()),Member::getRemark,updateMember.getRemark())
                    .set(StringUtils.isNotBlank(updateMember.getFaceImg()),Member::getFaceImg,updateMember.getFaceImg())
                    .set(updateMember.getFaceId()!=null,Member::getFaceId,updateMember.getFaceId())
                    .set(updateMember.getCompanyId()!=null,Member::getCompanyId,updateMember.getCompanyId())
                    .set(Member::getCode,updateMember.getCode())
//        if(dealHkUserForUpdateBiz(updateMember)){
        updateMember.setHkId(null);
        updateMember.setAuthStatus(Constants.ZERO);
        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                .set(Member::getStartTime,null)
                .set(Member::getEndTime,null)
                .set(Member::getRoleId,null)
                .set(StringUtils.isNotBlank(updateMember.getPhone()),Member::getPhone,updateMember.getPhone())
                .set(StringUtils.isNotBlank(updateMember.getName()),Member::getName,updateMember.getName())
                .set(Member::getEditDate,updateMember.getEditDate())
                .set(Member::getEditor,updateMember.getEditor())
                .set(StringUtils.isNotBlank(updateMember.getName()),Member::getPinyin,Constants.getChinesePingyin(updateMember.getName()))
                .set(StringUtils.isNotBlank(updateMember.getIdcardNo()),Member::getIdcardNo,updateMember.getIdcardNo())
                .set(StringUtils.isNotBlank(updateMember.getIdcardDecode()),Member::getIdcardDecode,updateMember.getIdcardDecode())
                .set( Member::getAuthStatus,Constants.ZERO)
                .set(updateMember.getHkStatus()!=null,Member::getHkStatus,updateMember.getHkStatus())
                .set(updateMember.getSex()!=null,Member::getSex,updateMember.getSex())
                .set(updateMember.getCanVisit()!=null,Member::getCanVisit,updateMember.getCanVisit())
                .set(updateMember.getFaceStatus()!=null,Member::getFaceStatus,updateMember.getFaceStatus())
                .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
                .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
                .set(StringUtils.isNotBlank(updateMember.getRemark()),Member::getRemark,updateMember.getRemark())
                .set(StringUtils.isNotBlank(updateMember.getFaceImg()),Member::getFaceImg,updateMember.getFaceImg())
                .set(updateMember.getFaceId()!=null,Member::getFaceId,updateMember.getFaceId())
                .set(updateMember.getCompanyId()!=null,Member::getCompanyId,updateMember.getCompanyId())
                .set(Member::getCode,updateMember.getCode())
//                    .set(StringUtils.isNotBlank(updateMember.getCode()),Member::getCode,updateMember.getCode())
                    .set( updateMember.getPositionId()!=null,Member::getPositionId,updateMember.getPositionId())
                    .set( updateMember.getIsDangyuan()!=null,Member::getIsDangyuan,updateMember.getIsDangyuan())
                    .set( updateMember.getJobDate()!=null,Member::getJobDate,updateMember.getJobDate())
                    .eq(Member::getId,updateMember.getId()));
            dealTrainTIme(updateMember,1,loginUserInfo);
            cancelAllMemberEmpower(updateMember,memberRoleMapper,empowerMapper);
            //记录操作日志
            saveUserActionBiz(updateMember,loginUserInfo,Constants.UserActionType.EDIT,userActionJoinMapper,null);
        }else{
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
        }
                .set( updateMember.getPositionId()!=null,Member::getPositionId,updateMember.getPositionId())
                .set( updateMember.getIsDangyuan()!=null,Member::getIsDangyuan,updateMember.getIsDangyuan())
                .set( updateMember.getJobDate()!=null,Member::getJobDate,updateMember.getJobDate())
                .eq(Member::getId,updateMember.getId()));
        dealTrainTIme(updateMember,1,loginUserInfo);
        cancelAllMemberEmpower(updateMember,memberRoleMapper,empowerMapper);
        //记录操作日志
        saveUserActionBiz(updateMember,loginUserInfo,Constants.UserActionType.EDIT,userActionJoinMapper,null);
//        }else{
//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
//        }
    }
    private void dealTrainTIme(Member updateMember, int i,LoginUserInfo loginUserInfo) {
@@ -1015,7 +1031,7 @@
    public static void saveUserActionBiz(Member updateMember,LoginUserInfo user, Constants.UserActionType type,UserActionJoinMapper userActionMapper,String content) {
        updateMember.setEditDate(updateMember.getEditDate()==null?new Date():updateMember.getEditDate());
       UserAction userAction=new UserAction();
        UserAction userAction=new UserAction();
        userAction.setIsdeleted(Constants.ZERO);
        userAction.setCreateDate(updateMember.getEditDate());
        userAction.setCreator(updateMember.getEditor());
@@ -1033,39 +1049,39 @@
        QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
        wrapper.lambda().ne(Member::getRemark,"人脸已同步最新");
        List<Member> list =memberMapper.selectList(wrapper);
       if(list!=null){
           String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode()
                   +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
           for(Member m : list){
             String faceId=  HkSyncOrgUserToHKServiceImpl.dealMemberFace(m,path);
             if(StringUtils.isNotBlank(faceId)){
                 Member update = new Member();
                 update.setId(m.getId());
                 update.setFaceId(faceId);
                 update.setRemark("人脸已同步最新");
                 update.setFaceStatus(Constants.ONE);
                 memberMapper.updateById(update);
                 return true;
             }
           }
       }
       return false;
        if(list!=null){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
            for(Member m : list){
                String faceId=  HkSyncOrgUserToHKServiceImpl.dealMemberFace(m,path);
                if(StringUtils.isNotBlank(faceId)){
                    Member update = new Member();
                    update.setId(m.getId());
                    update.setFaceId(faceId);
                    update.setRemark("人脸已同步最新");
                    update.setFaceStatus(Constants.ONE);
                    memberMapper.updateById(update);
                    return true;
                }
            }
        }
        return false;
    }
    @Override
    public void delHkForce(Member member) {
      Member model  =memberMapper.selectById(member.getId());
       if(model ==null) {
        Member model  =memberMapper.selectById(member.getId());
        if(model ==null) {
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,人员信息不存在!");
       }
        }
        if(!Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,只有针对离职人员可进行该操作!");
       }
        }
        if(Constants.equalsInteger(model.getHkStatus(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该人员已被删除!");
       }
        }
        if(StringUtils.isBlank(model.getHkId())){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该人员非安防平台创建人员,不能进行该操作!");
       }
        }
        HkSyncEmpowerServiceImpl.doHkDeleteUser(model.getId(),model.getHkId(),new Date(),memberMapper,memberCardMapper);
    }
    @Override
@@ -1074,23 +1090,23 @@
        if(model ==null) {
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,人员信息不存在!");
        }
       if(model.getCompanyId()!=null) {
           if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){
               //如果是取消主管
               companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                       .eq(Company::getId,model.getCompanyId())
                       .set(Company::getHeadId,member.getId()));
               //记录操作日志
               saveUserActionBiz(member,member.getLoginUserInfo(), Constants.UserActionType.BE_HEAD,userActionJoinMapper,null);
           }else{
               //如果是设为主管
               companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                       .eq(Company::getId,model.getCompanyId())
                       .set(Company::getHeadId,null)
               );
               saveUserActionBiz(member,member.getLoginUserInfo(),Constants.UserActionType.NOT_HEAD,userActionJoinMapper,null);
           }
       }
        if(model.getCompanyId()!=null) {
            if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){
                //如果是取消主管
                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                        .eq(Company::getId,model.getCompanyId())
                        .set(Company::getHeadId,member.getId()));
                //记录操作日志
                saveUserActionBiz(member,member.getLoginUserInfo(), Constants.UserActionType.BE_HEAD,userActionJoinMapper,null);
            }else{
                //如果是设为主管
                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                        .eq(Company::getId,model.getCompanyId())
                        .set(Company::getHeadId,null)
                );
                saveUserActionBiz(member,member.getLoginUserInfo(),Constants.UserActionType.NOT_HEAD,userActionJoinMapper,null);
            }
        }
    }
    @Override
@@ -1273,12 +1289,12 @@
        List<Member> list =  memberJoinMapper.selectList(queryWrapper);
        if(list!=null){
            for(Member m : list){
               if(m.getName()!=null){
                   Member u = new Member();
                   u.setId(m.getId());
                   u.setPinyin(Constants.getChinesePingyin(m.getName()));
                   memberMapper.updateById(u);
               }
                if(m.getName()!=null){
                    Member u = new Member();
                    u.setId(m.getId());
                    u.setPinyin(Constants.getChinesePingyin(m.getName()));
                    memberMapper.updateById(u);
                }
            }
        }
@@ -1316,7 +1332,7 @@
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getKeyword() != null) {
            queryWrapper.lambda().and( ms->ms.like(Member::getName,pageWrap.getModel().getKeyword())
                            .or().like(Member::getPhone,pageWrap.getModel().getKeyword())
                    .or().like(Member::getPhone,pageWrap.getModel().getKeyword())
                    .or().like(Member::getCode,pageWrap.getModel().getKeyword()));
        }
        if(pageWrap.getModel().getType() != null){
@@ -1576,7 +1592,7 @@
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
            //门禁组信息
            List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                            .select(DeviceRole::getId,DeviceRole::getName)
                    .select(DeviceRole::getId,DeviceRole::getName)
                    .eq(DeviceRole::getIsdeleted,Constants.ZERO));
            for (Member memberInfoDTO:memberIPage.getRecords()) {
                //获得门禁组名称数组
@@ -1642,8 +1658,8 @@
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.selectAll(Member.class)
                .selectAs(Company::getName,Member::getCompanyName)
        .selectAs(Position::getName,Member::getPositionName)
         .leftJoin(Position.class,Position::getId,Member::getPositionId)
                .selectAs(Position::getName,Member::getPositionName)
                .leftJoin(Position.class,Position::getId,Member::getPositionId)
                .selectAs(Member::getLastVisitDate,Member::getLastVisitDate)
                .select(" (select count(v.id) from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 and v.status  in (7,8) ) as visitTimes");
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Member::getName,pageWrap.getModel().getName())
@@ -1682,14 +1698,14 @@
                .selectAs(Company::getCompanyNamePath,Member::getCompanyName)
                .select(" (select ua.remark from user_action ua where ua.MEMBER_ID=t.id and ua.ISDELETED=0 and ua.type="+actiontype+"  order by ua.CREATE_DATE desc  limit 1) as optRemark")
                .eq(Member::getIsdeleted,Constants.ZERO);
                queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCreaterId()),Member::getEditor,pageWrap.getModel().getCreaterId());
                queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Member::getType,pageWrap.getModel().getType());
                queryWrapper
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCreaterId()),Member::getEditor,pageWrap.getModel().getCreaterId());
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Member::getType,pageWrap.getModel().getType());
        queryWrapper
                .and(StringUtils.isNotBlank(pageWrap.getModel().getName()),ms->ms.like(Member::getPhone,pageWrap.getModel().getName())
                        .or().like(Member::getName,pageWrap.getModel().getName()))
                .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
                        ms->ms.like(Company::getName,pageWrap.getModel().getCompanyName())
                        .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
                                .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
                .like(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,pageWrap.getModel().getIdcardNo())
                .eq(Member::getStatus,Constants.Status.FREEZE.getValue())
                .eq((pageWrap.getModel().getCompanyId())!=null,Company::getId,pageWrap.getModel().getCompanyId())
@@ -1797,7 +1813,7 @@
                .apply("to_days(LAST_VISIT_DATE)+ "+days+" < to_days(now())" )
                .orderByAsc(Member::getPinyin));
        if(CollectionUtils.isEmpty(memberList)){
           return;
            return;
        }
        List<Integer> memberIds = memberList.stream().map(m->m.getId()).collect(Collectors.toList());
        //冻结状态
@@ -2044,7 +2060,7 @@
    public List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO){
        List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                .selectAll(Member.class)
                        .selectAs(Company::getName,Member::getCompanyName)
                .selectAs(Company::getName,Member::getCompanyName)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .selectAs(Position::getName,Member::getPositionName)
                .leftJoin(Position.class,Position::getId,Member::getPositionId)
@@ -2106,6 +2122,10 @@
    }
    @Override
    public StagingDataVO stagingHead(StagingDataVO stagingHeadVO){
        //人员信息
@@ -2140,8 +2160,8 @@
                        .groupBy(Company::getId,Company::getName)
        );
        List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>()
                        .select(" count(1) as memberCount, type as memberType ")
                        .ne(Retention::getType,3)
                .select(" count(1) as memberCount, type as memberType ")
                .ne(Retention::getType,3)
                .groupBy(Retention::getType)
        );
        stagingHeadVO.setCompanyUsers(companyMaps);
@@ -2183,10 +2203,10 @@
                model.setPhone(ScientificNotationTUtil.convertToString(model.getPhone()));
                model.setIdcardNo(ScientificNotationTUtil.convertToString(model.getIdcardNo()));
                if(StringUtils.isBlank(model.getName())
                       &&StringUtils.isBlank(model.getIdcardNo())
                        &&StringUtils.isBlank(model.getIdcardNo())
                        &&StringUtils.isBlank(model.getPhone())
                        &&StringUtils.isBlank(model.getCompanyName())){
                      continue;
                    continue;
                }
                Member member = checkModelParam(model,newList,i,loginUserInfo,list,companyList,companyType,positionList);
                newList.add(member);
@@ -2220,8 +2240,8 @@
            for(Member insert: newList){
                //创建系统登陆账号(默认无任何角色)
//                if(Constants.equalsInteger(insert.getCompanyType(),Constants.ONE)){
                    //如果是内部组织人员,新增系统登陆账号
                    userList.add(createSystemUser(insert,systemDictDataBiz));
                //如果是内部组织人员,新增系统登陆账号
                userList.add(createSystemUser(insert,systemDictDataBiz));
//                }
            }
            if(userList.size()>0){
@@ -2355,7 +2375,7 @@
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void registerDriver(RegisterDriverDTO registerDriverDTO){
        if(Objects.isNull(registerDriverDTO)
        || StringUtils.isBlank(registerDriverDTO.getName())
                || StringUtils.isBlank(registerDriverDTO.getName())
                || StringUtils.isBlank(registerDriverDTO.getPassword())
                || StringUtils.isBlank(registerDriverDTO.getValidCode())
                || StringUtils.isBlank(registerDriverDTO.getPhone())
@@ -2371,7 +2391,7 @@
        };
        if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
                .eq(SystemUser::getDeleted,Constants.ZERO)
                        .and(i->i.eq(SystemUser::getMobile,registerDriverDTO.getPhone()).or().eq(SystemUser::getUsername,registerDriverDTO.getPhone()))
                .and(i->i.eq(SystemUser::getMobile,registerDriverDTO.getPhone()).or().eq(SystemUser::getUsername,registerDriverDTO.getPhone()))
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"手机号已注册!");
        };
@@ -2410,23 +2430,206 @@
     * 同步钉钉内部员工信息
     */
    @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;
            }
            log.error("钉钉人员信息同步行数:"+ list.size());
            log.error("钉钉人员信息同步内容:"+ JSONObject.toJSONString(list));
            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
    @Async
    public void  sendMemberInfoResult(String username, String info, int status){
        try {
            String url = systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_MEMBER_PUSH_STATUS_URL).getCode();
            log.error("==========推送人员{}:同步结果开始=====status={},username={},info={},url={}",username,status,info,url);
            JSONObject object = new JSONObject();
            object.put("status",status);
            object.put("username",username);
            object.put("info",info);
            String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object));
            log.error("==========推送人员{}:同步结果结束=====",result);
        }catch (Exception e){
        }
    }
    /**
     * 处理简道云用户信息
     * @param data
     */
    @Override
    public void dealJdyMemberInfo(MemberPushData data){
        if(StringUtils.isBlank(data.getUsername())
                ||StringUtils.isBlank(data.getPhone())
                ||StringUtils.isBlank(data.getName())){
            throw  new BusinessException(ResponseStatus.JDY_BAD_REQUEST.getCode(),"人员信息不完整!");
        }
        //内部人员信息
        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                .eq( Member::getErpId,data.getUsername() )
                .eq( Member::getIsdeleted,Constants.ZERO )
                .eq( Member::getType,Constants.TWO )
                .last("limit 1"));
        if(member == null){
            //新增人员
            if(data.getDeleter()!=null){
                //如果是已经删除人员,不处理
                return;
            }
            member = getAddOrUpdateModelFromJDY(data,true);
            this.create(member);
        }else{
            //更新人员
            if(data.getDeleter()!=null){
                //如果是已经删除人员,不处理
                this.deleteById(member.getId(),null);
            }else{
                //更新人员信息
                Member updateMember =getAddOrUpdateModelFromJDY(data,false);
                updateMember.setId(member.getId());
                this.updateById(updateMember);
            }
        }
    }
    private Member getAddOrUpdateModelFromJDY(MemberPushData data, boolean add) {
        Member member =  new Member();
        member.setName(data.getName());
        member.setType(Constants.TWO);
        member.setIdcardType(Constants.ZERO);
        member.setIdcardNo(data.getIdcardno());
        member.setPhone(data.getPhone());
        if(StringUtils.isNotBlank(data.getSex())){
            member.setSex(StringUtils.equals(data.getSex(),"男")?0:1);
        }
        if(StringUtils.isNotBlank(data.getStatus())){
            member.setWorkStatus(StringUtils.equals(data.getStatus(),"在职")?0:1);
        }
        if(StringUtils.isNotBlank(data.getCan_visit())){
            member.setCanVisit(StringUtils.equals(data.getCan_visit(),"可拜访")?1:0);
        }
        member.setErpId(data.getUsername());
        if(data.getDepartment()!=null){
            member.setErpOrgId(data.getDepartment().getDept_no());
        }
        member.setHkStatus(Constants.ZERO);//待更新
        if(data.getImgurl()!=null &&data.getImgurl().size()>0){
            String imgurl = data.getImgurl().get(0).getUrl();
            if(StringUtils.isNotBlank(imgurl)){
                member.setImgurl(getMemberImgByJdyImg(imgurl));
                member.setFaceStatus(Constants.ZERO);
                member.setFaceImg(member.getImgurl());
            }
        }
        member.setCreateDate(DateUtil.getISO8601DateByStr(data.getCreateTime()));
        member.setEditDate(DateUtil.getISO8601DateByStr(data.getUpdateTime()));
        member.setCode(data.getCode());
        member.setJobDate(DateUtil.getISO8601DateByStr(data.getJob_date()));
        member.setIsdeleted(Constants.ZERO);
        if(add ){
            SystemUser c=   getSystemuserByErpId(data.getCreator());//查询创建人
            if(c!=null){
                member.setCreator(c.getId());
            }
        }
        SystemUser up=   getSystemuserByErpId(data.getUpdater()); //查询更新人
        if(up!=null){
            member.setEditor(up.getId());
        }
        //查询组织信息
        Company depart = companyMapper.selectOne(new QueryWrapper<Company>().lambda()
                .eq( Company::getErpId,data.getDepartment().getDept_no() )
                .eq( Company::getIsdeleted,Constants.ZERO ));
        if(depart!=null){
            member.setCompanyId(depart.getId());
        }
        member.setCompany(depart);
        return  member;
    }
    private String getMemberImgByJdyImg(String imgurl) {
        try {
            String folder =   systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
            FtpUtil ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
                    Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
            String date = DateUtil.getNowShortDate()+"/";
            String name = UUID.randomUUID().toString();
            if(ftp.uploadOnlineFile(imgurl,folder+date,name)){
                log.error("=======上传简道云图片成功:result:{}=url:{}",date+name,imgurl);
                return date+name;
            }
        }catch (Exception e){
            log.error("=======上传简道云图片失败:url:{}",imgurl);
        }
        return null;
    }
    private SystemUser getSystemuserByErpId(UserPushData user) {
        if(user!=null &&StringUtils.isNotBlank(user.getUsername())){
            return   systemUserMapper.selectJoinOne(SystemUser.class,new MPJLambdaWrapper<SystemUser>().
                    selectAll(SystemUser.class )
                    .leftJoin(Member.class,Member::getId,SystemUser::getMemberId)
                    .eq(SystemUser::getDeleted,Boolean.FALSE)
                    .eq(Member::getErpId,user.getUsername())
                    .last("limit 1"));
        }
       return null;
    }
    @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) {
@@ -2462,25 +2665,63 @@
            }
        }
    }
    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);
@@ -2505,7 +2746,7 @@
        }
        if(Objects.nonNull(deptIdList)){
            List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda().in(Company::getErpId,deptIdList)
                    .eq(Company::getType,Constants.ONE).eq(Company::getIsdeleted,Constants.ZERO)
                            .eq(Company::getType,Constants.ONE).eq(Company::getIsdeleted,Constants.ZERO)
//                    .isNotNull(Company::getHkId) 暂时无法同步海康 先注释
            );
            if(CollectionUtils.isNotEmpty(companyList)){
@@ -2515,7 +2756,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) {
@@ -2532,14 +2773,14 @@
            }
        }
    }
    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);
@@ -2601,40 +2842,52 @@
        }
        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 {
        JSONArray jsonArray = eventData.getJSONArray("userId");
        if(jsonArray.isEmpty()){
            return;
        }
        if(eventType.equals("user_leave_org")){
            //删除对人员信息
            List<String> userIdList = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
                String deptId = jsonArray.getString(i);
                userIdList.add(deptId);
    public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData)   {
        try {
            JSONArray jsonArray = eventData.getJSONArray("userId");
            if(jsonArray.isEmpty()){
                return;
            }
            if(CollectionUtils.isNotEmpty(userIdList)){
                syncDelMember(userIdList);
            }
        }else if(eventType.equals("user_add_org")||eventType.equals("user_modify_org")){
            for (int i = 0; i < jsonArray.size(); i++) {
                OapiV2UserGetResponse.UserGetResponse userGetResponse =  dingTalk.syncUserInfo(jsonArray.getString(i));
                Member member  = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                        .eq(Member::getIsdeleted,Constants.ZERO)
                        .eq(Member::getErpId,userGetResponse.getUnionid())
                        .last(" limit 1")
                );
                if(Objects.isNull(member)){
                    member = new Member();
                    getAddMemberModel(userGetResponse,member);
                }else{
                    getUpdateMemberModel(userGetResponse,member);
            if(eventType.equals("user_leave_org")){
                //删除对人员信息
                List<String> userIdList = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                    String deptId = jsonArray.getString(i);
                    userIdList.add(deptId);
                }
                if(CollectionUtils.isNotEmpty(userIdList)){
                    syncDelMember(userIdList);
                }
            }else if(eventType.equals("user_add_org")||eventType.equals("user_modify_org")){
                for (int i = 0; i < jsonArray.size(); i++) {
                    OapiV2UserGetResponse.UserGetResponse userGetResponse =  dingTalk.syncUserInfo(jsonArray.getString(i));
                    Member member  = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                            .eq(Member::getIsdeleted,Constants.ZERO)
                            .eq(Member::getErpId,userGetResponse.getUnionid())
                            .last(" limit 1")
                    );
                    if(Objects.isNull(member)){
                        member = new Member();
                        getAddMemberModel(userGetResponse,member);
                    }else{
                        getUpdateMemberModel(userGetResponse,member);
                    }
                }
            }
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"数据处理失败!");
        }
    }
    /**
@@ -2642,25 +2895,25 @@
     * @param code
     * @param source
     * @return
     * @throws ApiException
     */
    @Override
    public DDAuthorizeVO ddAuthorize(String code, Integer source) throws ApiException {
        if(StringUtils.isBlank(code)||Objects.isNull(source)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        OapiV2UserGetuserinfoResponse.UserGetByCodeResponse userGetByCodeResponse = dingTalk.getDDUserByCode(code);
        if(Objects.isNull(userGetByCodeResponse)
                || StringUtils.isBlank(userGetByCodeResponse.getUnionid())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钉钉授权失败");
        }
        String unionId = userGetByCodeResponse.getUnionid();
    public DDAuthorizeVO ddAuthorize(String code, Integer source)  {
        try {
            if(StringUtils.isBlank(code)||Objects.isNull(source)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
            OapiV2UserGetuserinfoResponse.UserGetByCodeResponse userGetByCodeResponse = dingTalk.getDDUserByCode(code);
            if(Objects.isNull(userGetByCodeResponse)
                    || StringUtils.isBlank(userGetByCodeResponse.getUnionid())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钉钉授权失败");
            }
            String unionId = userGetByCodeResponse.getUnionid();
        DDAuthorizeVO ddAuthorizeVO = new DDAuthorizeVO();
        if(StringUtils.isBlank(unionId)){
            return ddAuthorizeVO;
        }
        ddAuthorizeVO.setUnionId(unionId);
            DDAuthorizeVO ddAuthorizeVO = new DDAuthorizeVO();
            if(StringUtils.isBlank(unionId)){
                return ddAuthorizeVO;
            }
            ddAuthorizeVO.setUnionId(unionId);
//        if(source==1){
//            //处理普通访客人员自动授权逻辑
//            dealVisitUserAuthBiz(wxAuthorizeVO,openId,source);
@@ -2674,7 +2927,12 @@
            //如果是内部人员,则从system_user查询
            dealSystemUserAuthBizByDD(ddAuthorizeVO,unionId,source);
//        }
        return ddAuthorizeVO;
            return ddAuthorizeVO;
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR);
        }
    }