k94314517
2024-03-04 aed1ef97d6ae1d3961b9a57c767758c9d34e1b93
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -12,12 +12,11 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.DeviceMapper;
import com.doumee.dao.business.MemberCardMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.join.EmpowerJoinMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
import com.doumee.dao.business.model.Device;
import com.doumee.dao.business.model.Empower;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Visits;
import com.doumee.dao.business.model.*;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -39,7 +38,11 @@
    @Autowired
    private EmpowerJoinMapper empowerMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private MemberCardMapper memberCardMapper;
    /**
     * 定时查询权限下发任务进度执行结果
@@ -104,6 +107,7 @@
               }
           }
           checkDelMemberTask();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
@@ -111,6 +115,62 @@
        }
    }
    /**
     * 对海康删除组织信息
     * @param id
     * @param date
     */
    private boolean doHkDeleteUser(Integer  id,String delHkIds,  Date date ) {
        if(StringUtils.isBlank(delHkIds)){
            return true;
        }
        UserDelRequest request = new UserDelRequest();
        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)
                        .in(Member::getId, id));
            }else{
                //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .set(Member::getHkStatus,Constants.ONE)//同步成功
                        .set(Member::getHkDate,date)
                        .in(Member::getId, id));
                //删除所有绑定的卡片信息
                memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,id));
            }
            return true;
        }
        return false;
    }
    /**
     * 检查删除人员的权限是否都删除完成,如果权限删除完成, 进行海康人员的删除操作
     */
    private void checkDelMemberTask() {
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                .eq(Member::getIsdeleted,Constants.ONE)
                .eq(Member::getHkStatus,Constants.FOUR));
        if(memberList!=null &&memberList.size()>0 ){
            Date date = new Date();
            for(Member member : memberList){
                if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda()
                        .eq(Empower::getMemberId,member.getId())
                        .eq(Empower::getIsdeleted,Constants.ONE)
                        .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0){
                    //如果权限都已经删除成功,则删除海康人员和卡片数据
                     doHkDeleteUser(member.getId(),member.getHkId(),date);
                }
            }
        }
    }
    public  void syncEmpowerDetailDataOld(){
        if(Constants.DEALING_HK_EMPOWER_DETAIL){
            return   ;
@@ -224,7 +284,28 @@
        }
    }
    /**
     * 分段请求下发权限
     * @param list
     */
    private void dealDelListTask(List<Empower> list) {
        int sublistSize = 100;
        int startIndex = 0;
        int endIndex = sublistSize;
        while (startIndex < list.size()) {
            if (endIndex > list.size()) {
                endIndex = list.size();
            }
            List<Empower> sublist = list.subList(startIndex, endIndex);
            if(sublist.size()>0){
                dealDelListTaskDo(sublist);
            }
            startIndex = endIndex;
            endIndex += sublistSize;
        }
    }
    private void dealDelListTaskDo(List<Empower> list) {
        //按照父级申请分批处理每次申请数据
        if(list ==null || list.size()==0){
            return;
@@ -232,43 +313,41 @@
        Date date = new Date();
        //创建任务
        String taskId = hkTaskAddtion();
        List<Empower> successList = new ArrayList<>();
        List<Empower> errorList = new ArrayList<>();
        List<Integer> successList = new ArrayList<>();
        List<Integer> errorList = new ArrayList<>();
        for(Empower c : list) {
            //向任务添加人员、设备信息数据
            if(addTaskData(c,taskId,HKConstants.OPERA_TYPE.DEL.getKey())){
                successList.add(c);
                successList.add(c.getId());
            }else{
                errorList.add(c);
                errorList.add(c.getId());
            }
        }
        if(successList.size()>0){
            //开始执行下发
            boolean status = startTask(taskId);
            for(Empower model : successList){
                Empower update = new Empower();
                update.setId(model.getId());
                update.setSendDate(date);
                update.setEditDate(date);
                update.setHkId(taskId);
                update.setRemark(status?"下发任务执行成功":"下发任务执行失败");
                update.setSendInfo(status?"下发任务执行成功":"下发任务执行失败");
                //下发中
                update.setSendStatus(status?Constants.EmpowerStatus.ing:Constants.EmpowerStatus.fail);
                empowerMapper.updateById(update);
            }
            empowerMapper.update(null,new UpdateWrapper<Empower>()
                    .lambda()
                    .set(Empower::getSendDate,date)
                    .set(Empower::getEditDate,date)
                    .set(Empower::getSendStatus,status?Constants.EmpowerStatus.ing:Constants.EmpowerStatus.fail)
                    .set(Empower::getHkId,taskId)
                    .set(Empower::getSendInfo,status?"下发任务执行成功":"下发任务执行失败")
                    .set(Empower::getRemark,status?"下发任务执行成功":"下发任务执行失败")
                    .set(Empower::getEditDate,date)
                    .in(Empower::getId,successList));
        }
        for(Empower model : errorList){
            Empower update = new Empower();
            update.setId(model.getId());
            update.setSendDate(date);
            update.setEditDate(date);
            update.setHkId(taskId);
            update.setSendStatus(Constants.EmpowerStatus.fail);
            update.setSendInfo( "添加下发任务数据刪除授权失败");
            update.setRemark( "添加下发任务数据刪除授权失败");
            empowerMapper.updateById(update);
        }
        empowerMapper.update(null,new UpdateWrapper<Empower>()
                .lambda()
                .set(Empower::getSendStatus,Constants.EmpowerStatus.fail)
                .set(Empower::getSendDate,date)
                .set(Empower::getEditDate,date)
                .set(Empower::getHkId,taskId)
                .set(Empower::getSendInfo, "添加下发任务数据刪除授权失败")
                .set(Empower::getRemark, "添加下发任务数据刪除授权失败")
                .set(Empower::getEditDate,date)
                .in(Empower::getId,errorList));
    }
    private void dealNewListTask(List<Empower> list) {
@@ -407,13 +486,13 @@
        queryWrapper.selectAll(Empower.class);
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo);
        queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId);
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId);
        queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode);
        queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType);
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId);
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId);
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.downloaded);
        queryWrapper.isNotNull(Member::getHkId) ;
        queryWrapper.orderByAsc(Empower::getSendDate);
        queryWrapper.isNotNull(Empower::getMemberHkId) ;
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper);
        return list;
    }