jiangping
2024-06-21 b0ea50dd24a7ed5ada38dc6c8209f78fc09f0441
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl.hksync.ferp;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
@@ -19,6 +20,7 @@
import com.doumee.dao.business.model.*;
import com.doumee.service.business.ext.ERPSyncService;
import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
@@ -55,6 +57,8 @@
    private MemberCardMapper memberCardMapper;
    @Autowired
    private MemberJoinMapper memberMapper;
    @Autowired
    private MemberMapper memberMapper1;
    @Autowired
    private ERPSyncService erpSyncService;
    @Autowired
@@ -288,6 +292,85 @@
            Constants.DEALING_HK_USER =false;
        }
    }
    /**
     * 同步海康人员信息
     * @return
     */
    @Override
    public   void syncMemberDelData(){
        if(Constants.DEALING_HK_DEL_USER  || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.erp){
            return   ;
        }
        Constants.DEALING_HK_DEL_USER =true;
        try {
            dealWaitDelMemberData();//等待删除权限数据的删除下发
//            dealFailDelMemberData();//处理删除失败数据重新下发
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_DEL_USER =false;
        }
    }
    /**
     *  处理删除失败数据重新下发
     */
    private void dealFailDelMemberData() {
        //查询所有需要同步的企业数据
        List<Member> list = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                .selectAll(Member.class )
                .eq(Member::getHkStatus,Constants.TWO)//等待下发完成的
                .eq(Member::getIsdeleted,Constants.ONE)//已删除的
                .eq(Member::getType,Constants.memberType.internal)
                .orderByAsc(Member::getEditDate));
        if(list ==null || list.size()==0){
            return;
        }
        Date date = new Date();
        for(Member member : list){
            if(member!=null && Constants.equalsInteger(member.getIsdeleted(),Constants.ONE) ){
                if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda()
                        .eq(Empower::getMemberId, member.getId())
                        .eq(Empower::getIsdeleted,Constants.ONE)
                        .ne(Empower::getFailFlag,Constants.ONE)
                        .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0) {
                    //如果权限都已经删除成功,则删除海康人员和卡片数据
                    HkSyncEmpowerServiceImpl.doHkDeleteUser(member.getId(),member.getHkId(),new Date(),memberMapper1,memberCardMapper);
                }
            }
        }
    }
    /**
     * 等待删除权限数据的删除下发
     */
    private void dealWaitDelMemberData() {
        //查询所有需要同步的企业数据
        List<Member> list = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                .selectAll(Member.class )
                .eq(Member::getHkStatus,Constants.FOUR)//等待下发完成的
                .eq(Member::getIsdeleted,Constants.ONE)//已删除的
                .eq(Member::getType,Constants.memberType.internal)
                .orderByAsc(Member::getEditDate));
        if(list ==null || list.size()==0){
            return;
        }
        Date date = new Date();
        for(Member member : list){
            if(member!=null && Constants.equalsInteger(member.getIsdeleted(),Constants.ONE) ){
                if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda()
                        .eq(Empower::getMemberId, member.getId())
                        .eq(Empower::getIsdeleted,Constants.ONE)
                        .ne(Empower::getFailFlag,Constants.ONE)
                        .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0) {
                    //如果权限都已经删除成功,则删除海康人员和卡片数据
                    HkSyncEmpowerServiceImpl.doHkDeleteUser(member.getId(),member.getHkId(),date,memberMapper1,memberCardMapper);
                }
            }
        }
    }
    public static   List<Integer>  getRoleIdByParam(  Member member,DeviceRoleMapper deviceRoleMapper) {
            //查询数据库存在的权限
            List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
@@ -353,10 +436,19 @@
                .set(ParkBook::getIsdeleted,Constants.ONE)
                .eq(ParkBook::getIsdeleted,Constants.ZERO)
                .set(ParkBook::getHkStatus,Constants.ZERO));
            //把所有待下发的任务改成 已取消
            empowerMapper.update(null,new UpdateWrapper<Empower>().lambda()
                    .eq(Empower::getMemberId,member.getId())
                    .eq(Empower::getIsdeleted,Constants.ZERO)
                    .eq(Empower::getSendStatus,Constants.EmpowerStatus.wait)
                    .set(Empower::getIsdeleted,Constants.ONE)
                    .set(Empower::getSendStatus,Constants.EmpowerStatus.cancel));
            return  empowerMapper.update(null,new UpdateWrapper<Empower>().lambda()
                        .eq(Empower::getMemberId,member.getId())
                        .set(Empower::getIsdeleted,Constants.ONE)
                        .notIn(Empower::getSendStatus,Constants.EmpowerStatus.fail)
                        .set(Empower::getRemark,"等待同步删除安防平台")
                        .eq(Empower::getIsdeleted,Constants.ZERO)
                        .eq(Empower::getIsdeleted,Constants.ZERO)
                        .set(Empower::getSendStatus,Constants.ZERO));
    }
@@ -402,6 +494,7 @@
                model.setSendInfo("待同步安防平台");
                model.setRemark("待同步安防平台");
                model.setStartTime(member.getStartTime());
                model.setFailFlag(Constants.ZERO);
                model.setEndTime(member.getEndTime());
                //默认给于虚拟卡
                model.setCardNos(Constants.VIRTUAL_CARD_INDEX+member.getId());
@@ -461,6 +554,7 @@
                model.setCreateDate(new Date());
                model.setMemberId(member.getId());
                model.setIsdeleted(Constants.ZERO);
                model.setFailFlag(Constants.ZERO);
                model.setDeviceId(deviceRole.getId());
                model.setSendStatus(Constants.ZERO);
                model.setSendInfo("待同步安防平台");
@@ -578,15 +672,13 @@
            if(rr >0){
                //如果有權限待刪除,等待删除完成再删除人员
                c.setHkStatus(Constants.FOUR );
                c.setFaceStatus(Constants.ONE);//把异常人脸状态改为正常,用于删除权限数据
                c.setRemark( "等待删除授权!");
                c.setEditDate(date);
                memberMapper.updateById(c);
            }else{
                //没有权限直接删除人员
                boolean r = doHkDeleteUser(c.getId(),c.getHkId(),date);
                c.setHkStatus(r?Constants.ONE:Constants.TWO);
                c.setRemark(r?null:"删除海康人员信息失败!");
                c.setIsdeleted(r? Constants.ONE: Constants.ZERO);//删除失败,恢复数据
                //删除所有绑定的卡片信息
                memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,c.getId()));
               HkSyncEmpowerServiceImpl.doHkDeleteUser(c.getId(),c.getHkId(),new Date(),memberMapper1,memberCardMapper);;
            }
        }else{
            //处理修改数据,并且更新人脸
@@ -598,10 +690,10 @@
                    //如果有人脸照片,处理人脸照片同步
                    String faceid = dealMemberFace(c,path);
                    if(StringUtils.isBlank(faceid)){
                        noticeErpFail(c,Constants.ZERO,"人脸信息更新失败,请检查人脸照片是否合法!");
                        c.setHkStatus(Constants.TWO);
                        c.setFaceStatus(Constants.TWO);
                        c.setRemark("人脸信息更新失败,请检查人脸照片是否合法!!"+result.getMsg());
                        noticeErpFail(c,Constants.ZERO,"人脸信息更新失败,请检查人脸照片是否合法!");
                    }else{
                        c.setFaceId(faceid);
                        c.setFaceStatus(Constants.ONE);
@@ -615,10 +707,10 @@
                c.setHkStatus(Constants.TWO);
                c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!"+(result!=null?result.getCode()+result.getMsg():""));
            }
            c.setHkDate(date);
            c.setEditDate(date);
            memberMapper.updateById(c);
        }
        c.setHkDate(date);
        memberMapper.updateById(c);
    }
    /**
@@ -681,20 +773,25 @@
     * @return
     */
    public static String dealMemberFace(Member c,String path) {
        if(StringUtils.isBlank(c.getFaceId())){
            BaseResponse<FaceAddOrEditesponse> response = HKService.addFace(getFaceAddModel(c,path));
            if(response !=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)&& response.getData()!=null ){
                return  response.getData().getFaceId();
            }
        }else{
            FaceEditRequest param =getFaceUpdateModel(c,path);
            if(param !=null){
                BaseResponse response = HKService.editFace(param);
                if(StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) ){
                    return  c.getFaceId();
        try {
            if(StringUtils.isBlank(c.getFaceId())){
                BaseResponse<FaceAddOrEditesponse> response = HKService.addFace(getFaceAddModel(c,path));
                if(response !=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)&& response.getData()!=null ){
                    return  response.getData().getFaceId();
                }
            }else{
                FaceEditRequest param =getFaceUpdateModel(c,path);
                if(param !=null){
                    BaseResponse response = HKService.editFace(param);
                    if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) ){
                        return  c.getFaceId();
                    }
                }
            }
        }catch (Exception e){
        }
        return null;
    }
@@ -712,12 +809,12 @@
        //通知ERP人脸数据不正确
        erpSyncService.noticeUserFail(r);
    }
    /**
/*
    *//**
     * 对海康删除组织信息
     * @param id
     * @param date
     */
     *//*
    private boolean doHkDeleteUser(Integer  id,String delHkIds,  Date date ) {
        if(StringUtils.isBlank(delHkIds)){
            return true;
@@ -726,25 +823,26 @@
        request.setPersonIds(new String[]{delHkIds});
        BaseResponse<List<UserDelResponse>> result =  HKService.delBatchUser(request);
        if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
            List<String> fIds = new ArrayList<>();
            //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
            if(result.getData()!=null && result.getData().size()>0){
                log.info("海康删除用户失败:==============="+result.getData().get(0).getPersonId());
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .set(Member::getHkStatus,Constants.TWO)//同步失败
                        .set(Member::getHkDate,date)
                        .set(Member::getRemark,"同步海康删除失败:"+ JSONObject.toJSONString(result.getData().get(0) ))
                        .in(Member::getId, id));
            }else{
                //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .set(Member::getHkStatus,Constants.ONE)//同步成功
                        .set(Member::getHkDate,date)
                        .set(Member::getRemark,"已同步")
                        .in(Member::getId, id));
            }
            return true;
        }
        return false;
    }
    }*/
    /**
     * 删除人员所有设备上的权限信息
@@ -812,4 +910,5 @@
        return  model;
    }
}