package com.doumee.service.business.impl.hksync; 
 | 
  
 | 
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; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.haikang.model.HKConstants; 
 | 
import com.doumee.core.haikang.model.HKResponseCode; 
 | 
import com.doumee.core.haikang.model.param.BaseListPageResponse; 
 | 
import com.doumee.core.haikang.model.param.BaseResponse; 
 | 
import com.doumee.core.haikang.model.param.request.*; 
 | 
import com.doumee.core.haikang.model.param.respose.*; 
 | 
import com.doumee.core.haikang.service.HKService; 
 | 
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.*; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.scheduling.annotation.Async; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 海康门禁授权业务Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
@Slf4j 
 | 
public class HkSyncEmpowerServiceImpl extends HkSyncBaseServiceImpl { 
 | 
    @Autowired 
 | 
    private EmpowerJoinMapper empowerMapper; 
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
    @Autowired 
 | 
    private DeviceMapper deviceMapper; 
 | 
    @Autowired 
 | 
    private MemberCardMapper memberCardMapper; 
 | 
  
 | 
    /** 
 | 
     * 定时查询权限下发任务进度执行结果 
 | 
     */ 
 | 
    @Override 
 | 
    public  Integer   syncEmpowerDetailData(Integer endId){ 
 | 
//        if(Constants.DEALING_HK_EMPOWER_DETAIL){ 
 | 
//            return   ; 
 | 
//        } 
 | 
//        Constants.DEALING_HK_EMPOWER_DETAIL = true; 
 | 
            //查询所有完成下载,待查询结果的数据记录 
 | 
            List<Empower>  list = getDealListDetail(endId); 
 | 
           if(list == null || list.size() ==0){ 
 | 
               return null; 
 | 
           } 
 | 
        Thread t1=new Thread(new Runnable() { 
 | 
            @Override 
 | 
            public void run() { 
 | 
                try { 
 | 
                    for(Empower c : list){ 
 | 
                        TaskPersonDetailRequest param = new TaskPersonDetailRequest(); 
 | 
                        param.setPageNo(1); 
 | 
                        param.setPageSize(10); 
 | 
                        param.setPersonIds(new String[]{c.getMemberHkId()}); 
 | 
                        param.setTaskId(c.getHkId()); 
 | 
                        TaskDataAdditionResourceRequest rec = new TaskDataAdditionResourceRequest(); 
 | 
                        rec.setResourceIndexCode(c.getDeviceIndexCode()); 
 | 
                        rec.setResourceType(c.getDeviceType()); 
 | 
                        param.setResourceInfo(rec); 
 | 
                        //查询下发状态 
 | 
                        BaseResponse<TaskPersonDetailListResponse> response = HKService.taskPersoDetail(param); 
 | 
                        if(response!=null 
 | 
                                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) 
 | 
                                && response.getData()!=null 
 | 
                                && response.getData().getList() != null 
 | 
                                && response.getData().getList().size() > 0 
 | 
                                &&response.getData().getList().get(0) !=null){ 
 | 
                                TaskPersonDetailResponse model = response.getData().getList().get(0); 
 | 
                            if (model.getPersonDownloadDetail()!=null ) { 
 | 
                                boolean isface = false;//是否人脸下发成功 
 | 
                                boolean iscard = false;//是否有卡片下发成功 
 | 
                                //更新已完成下载任务 
 | 
                                String remark = ""; 
 | 
                                String cardInfo =""; 
 | 
                                TaskPersonDetailCardFaceResponse d = model.getPersonDownloadDetail(); 
 | 
                                if (d.getCards() != null && d.getCards().size() > 0) { 
 | 
                                    for (TaskPersonDetailCardInfoResponse card : d.getCards()) { 
 | 
                                        if(StringUtils.equals(card.getErrorCode(),HKResponseCode.ReturnCode.RESPONSE_SUCCEE.getKey())){ 
 | 
                                            cardInfo += card.getId() + " "; 
 | 
                                            iscard=true; 
 | 
                                        } 
 | 
                                    } 
 | 
                                    if(iscard){ 
 | 
                                        cardInfo = "卡片【"+cardInfo+"】下发成功"; 
 | 
                                    }else{ 
 | 
                                        cardInfo = "卡片下发失败"; 
 | 
                                    } 
 | 
                                }else { 
 | 
                                    cardInfo = "卡片下发失败"; 
 | 
                                } 
 | 
                                if (d.getFaces() == null || d.getFaces().size() == 0) { 
 | 
                                    remark = cardInfo + ", 无人脸下发!"; 
 | 
                                } else { 
 | 
                                    if(d.getFaces().get(0).getErrorCode() !=null && d.getFaces().get(0).getErrorCode().equals(HKConstants.RESPONSE_SUCCEE)){ 
 | 
                                        isface=true; 
 | 
                                        remark = "" + cardInfo + ",人脸下发成功!"; 
 | 
                                    }else{ 
 | 
                                        isface=false; 
 | 
                                        if(d.getFaces().get(0).getErrorCode()!=null && 
 | 
                                                (d.getFaces().get(0).getErrorCode().equals(HKResponseCode.ReturnCode.RESPONSE_FACE_ERROR.getKey()) || 
 | 
                                                        d.getFaces().get(0).getErrorCode().equals(HKResponseCode.ReturnCode.RESPONSE_FACE_ERROR2.getKey()))){ 
 | 
                                            //如果人脸不合格 
 | 
                                            memberMapper.update(null,new UpdateWrapper<Member>().lambda() 
 | 
                                                    .eq(Member::getId,c.getMemberId()) 
 | 
                                                    .set(Member::getFaceStatus,Constants.THREE) 
 | 
                                                    .set(Member::getEditDate,new Date()) 
 | 
                                            ); 
 | 
                                            remark = "" + cardInfo + ",人脸建模失败!"; 
 | 
                                        }else  if(d.getFaces().get(0).getErrorCode()!=null && d.getFaces().get(0).getErrorCode().equals(HKResponseCode.ReturnCode.RESPONSE_DEVICE_NOFAVOR.getKey())){ 
 | 
                                            //如果设备不支持人脸下发 
 | 
                                            isface=true;//此情况不要考虑人脸下发结果 
 | 
                                            remark = "" + cardInfo + ",设备不支持人脸下发!"; 
 | 
                                        }else{ 
 | 
                                            remark = "" + cardInfo + ",人脸下发失败!"; 
 | 
                                        } 
 | 
                                    } 
 | 
                                } 
 | 
                                //如果返回下发成功 或者 人脸下发成功并且卡片下发成功 
 | 
                                boolean isSuccess =StringUtils.equals(model.getPersondownloadResult(), "0") || (iscard&&isface); 
 | 
                                empowerMapper.update(null, new UpdateWrapper<Empower>() 
 | 
                                        .lambda() 
 | 
                                        .eq(Empower::getId, c.getId()) 
 | 
                                        .set(Empower::getRemark, remark) 
 | 
                                        .set(Empower::getEditDate,new Date()) 
 | 
                                        .set(Empower::getSendInfo, remark) 
 | 
                                        .set(Empower::getSendStatus, isSuccess?Constants.EmpowerStatus.pass:Constants.EmpowerStatus.fail)); 
 | 
                                if(isSuccess && Constants.equalsInteger(c.getMemberDeleted(), Constants.ONE)&& Constants.equalsInteger(c.getIsdeleted(), Constants.ONE) ){ 
 | 
                                    //如果是删除权限成功,检查是否删除人员 
 | 
                                    checkDelMemberTask(c.getMemberId(),c.getMemberHkId()); 
 | 
                                } 
 | 
                                continue; 
 | 
                            } 
 | 
                        } 
 | 
                        //所有异常情况都标记为下发失败 
 | 
                        //如果是已删除的数据,下发失败(防止设备离线),则尝试重新下发任务 
 | 
                        if(Constants.equalsInteger(c.getIsdeleted(), Constants.ONE) ){ 
 | 
                            empowerMapper.update(null, new UpdateWrapper<Empower>() 
 | 
                                    .lambda() 
 | 
                                    .eq(Empower::getId, c.getId()) 
 | 
                                    .set(Empower::getRemark, "删除权限下发失败") 
 | 
                                    .set(Empower::getSendInfo, "删除权限下发失败") 
 | 
                                    .set(Empower::getTryNum,Constants.formatIntegerNum(c.getTryNum())+1) 
 | 
                                    .set(Empower::getSendStatus, Constants.EmpowerStatus.fail)); 
 | 
                        }else{ 
 | 
                            empowerMapper.update(null, new UpdateWrapper<Empower>() 
 | 
                                    .lambda() 
 | 
                                    .eq(Empower::getId, c.getId()) 
 | 
                                    .set(Empower::getEditDate,new Date()) 
 | 
                                    .set(Empower::getRemark, "下发失败") 
 | 
                                    .set(Empower::getTryNum,Constants.formatIntegerNum(c.getTryNum())+1) 
 | 
                                    .set(Empower::getSendInfo, "下发失败") 
 | 
                                    .set(Empower::getSendStatus, Constants.EmpowerStatus.fail)); 
 | 
                        } 
 | 
                    } 
 | 
                }catch (Exception e){ 
 | 
                    e.printStackTrace(); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
        t1.start(); 
 | 
         return list.get(list.size()-1).getId(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 对海康删除组织信息 
 | 
     * @param id 
 | 
     * @param date 
 | 
     */ 
 | 
    public static boolean doHkDeleteUser(Integer  id,String delHkIds,  Date date ,MemberMapper memberMapper,MemberCardMapper memberCardMapper) { 
 | 
        if(StringUtils.isBlank(delHkIds)){ 
 | 
  
 | 
            return true; 
 | 
        } 
 | 
        UserDelRequest request = new UserDelRequest(); 
 | 
        request.setPersonIds(new String[]{delHkIds}); 
 | 
        BaseResponse<List<UserDelResponse>> result =  HKService.delBatchUser(request); 
 | 
        boolean succes = false; 
 | 
        if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){ 
 | 
            //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕) 
 | 
            if(result.getData()!=null && result.getData().size()>0){ 
 | 
                UserDelResponse tem = result.getData().get(0); 
 | 
                if(tem!=null && StringUtils.equals(tem.getPersonId(),delHkIds)){ 
 | 
                    UserByParamListRequest param = new UserByParamListRequest(); 
 | 
                    param.setPersonIds(delHkIds); 
 | 
                    param.setPageNo(1); 
 | 
                    param.setPageSize(2); 
 | 
                    BaseResponse<BaseListPageResponse<UserInfoResponse>>  t =  HKService.personList(param); 
 | 
                    if(t!=null && t.getData()!=null && t.getData().getTotal()  ==0){ 
 | 
                        //人员信息已被删除的异常 作为已删除成功处理 
 | 
                        succes =true; 
 | 
                    }else{ 
 | 
                        //排除人员信息已被删除的异常 
 | 
                        memberMapper.update(null,new UpdateWrapper<Member>().lambda() 
 | 
                                .set(Member::getHkStatus,Constants.TWO)//同步失败 
 | 
                                .set(Member::getRemark,"同步海康删除失败" + JSONObject.toJSONString(result.getData().get(0)))//同步失败 
 | 
                                .set(Member::getHkDate,date) 
 | 
                                .in(Member::getId, id)); 
 | 
                    } 
 | 
                } 
 | 
            }else{ 
 | 
                //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕) 
 | 
                succes =true; 
 | 
            } 
 | 
            if(succes){ 
 | 
                memberMapper.update(null,new UpdateWrapper<Member>().lambda() 
 | 
                        .set(Member::getHkStatus,Constants.ONE)//同步成功 
 | 
                        .set(Member::getRemark,"已同步")//同步失败 
 | 
                        .set(Member::getHkDate,date) 
 | 
                        .in(Member::getId, id)); 
 | 
                //删除所有绑定的卡片信息 
 | 
                memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,id)); 
 | 
            } 
 | 
        } 
 | 
        return succes; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 检查删除人员的权限是否都删除完成,如果权限删除完成, 进行海康人员的删除操作 
 | 
     */ 
 | 
    private void checkDelMemberTask(Integer memberId,String memberHkid) { 
 | 
            Date date = new Date(); 
 | 
//            Member member = memberMapper.selectById(memberId); 
 | 
//            if(member!=null && Constants.equalsInteger(member.getIsdeleted(),Constants.ONE) ){ 
 | 
                if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda() 
 | 
                        .eq(Empower::getMemberId,memberId) 
 | 
                        .eq(Empower::getIsdeleted,Constants.ONE) 
 | 
                        .ne(Empower::getFailFlag,Constants.ONE) 
 | 
                        .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0){ 
 | 
                    //如果权限都已经删除成功,则删除海康人员和卡片数据 
 | 
                     doHkDeleteUser(memberId,memberHkid,date,memberMapper,memberCardMapper); 
 | 
//            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public  void syncEmpowerDetailDataOld(){ 
 | 
        if(Constants.DEALING_HK_EMPOWER_DETAIL){ 
 | 
            return   ; 
 | 
        } 
 | 
        Constants.DEALING_HK_EMPOWER_DETAIL = true; 
 | 
        try { 
 | 
            //查询所有完成下载,待查询结果的数据记录 
 | 
            List<Empower>  list = getDealListDetail(0); 
 | 
           if(list == null || list.size() ==0){ 
 | 
               return; 
 | 
           } 
 | 
           for(Empower c : list){ 
 | 
               AuthItemListRequest param = new AuthItemListRequest(); 
 | 
               param.setPageNo(1); 
 | 
               param.setPageSize(100); 
 | 
//               param.setPersonIds(new ArrayList<>()); 
 | 
  
 | 
               param.setPersonIds(new String[]{c.getMemberHkId()}); 
 | 
               param.setQueryType(c.getDeviceType()); 
 | 
               TaskDataAdditionResourceRequest rec = new TaskDataAdditionResourceRequest(); 
 | 
               rec.setResourceIndexCode(c.getDeviceIndexCode()); 
 | 
               rec.setResourceType(c.getDeviceType()); 
 | 
//               rec.setChannelNos(c.getDeviceChannelNo().split(",")); 
 | 
               List<TaskDataAdditionResourceRequest> resourceRequests = new ArrayList<>(); 
 | 
               resourceRequests.add(rec); 
 | 
//               param.setResourceInfos(resourceRequests); 
 | 
               //查询已下载 
 | 
//               param.setPersonStatus(new Integer[]{3}); 
 | 
               //查询下发状态 
 | 
               BaseResponse<AuthItemListResponse> response = HKService.authItemList(param); 
 | 
               if(response!=null 
 | 
                       && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) 
 | 
                       && response.getData()!=null 
 | 
                       && response.getData().getList() != null 
 | 
                       && response.getData().getList().size()>0 ){ 
 | 
                   //更新已完成下载任务 
 | 
                   empowerMapper.update(null,new UpdateWrapper<Empower>() 
 | 
                           .lambda() 
 | 
                           .eq(Empower::getId,c.getId() ) 
 | 
                           .set(Empower::getSendStatus,Constants.EmpowerStatus.pass) ); 
 | 
               } 
 | 
           } 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        }finally { 
 | 
            Constants.DEALING_HK_EMPOWER_DETAIL=false; 
 | 
        } 
 | 
  
 | 
    } 
 | 
    /** 
 | 
     * 定时查询权限下发任务进度执行结果 
 | 
     */ 
 | 
    @Override 
 | 
    public  Integer syncEmpowerResultData(Integer endId){ 
 | 
//        if(Constants.DEALING_HK_EMPOWER_RESULT){ 
 | 
//            return  null ; 
 | 
//        } 
 | 
//        Constants.DEALING_HK_EMPOWER_RESULT=true; 
 | 
            //查询所有执行中得数据 
 | 
         List<Empower>  list = getIngTaskListResult(Constants.formatIntegerNum(endId)); 
 | 
           if(list == null || list.size() ==0){ 
 | 
               return null; 
 | 
           } 
 | 
            Thread t1=new Thread(new Runnable() { 
 | 
                @Override 
 | 
                public void run() { 
 | 
                    try { 
 | 
                        for(Empower c : list){ 
 | 
                            TaskProgressRequest param = new TaskProgressRequest(); 
 | 
                            param.setTaskId(c.getHkId()); 
 | 
                            //查询下发状态 
 | 
                            BaseResponse<TaskProgressNumResponse> response = HKService.taskProgressNum(param); 
 | 
                            if(response!=null 
 | 
                                    && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) 
 | 
                                    && response.getData()!=null){ 
 | 
                                //更新已完成下载任务 
 | 
                                if(  response.getData().getIsDownloadFinished() != null 
 | 
                                        && response.getData().getIsDownloadFinished() ){ 
 | 
                                    empowerMapper.update(null,new UpdateWrapper<Empower>() 
 | 
                                            .lambda() 
 | 
                                            .eq(Empower::getHkId,c.getHkId() ) 
 | 
                                            .set(Empower::getSendInfo,"任务已下载完成" ) 
 | 
                                            .set(Empower::getRemark,"任务已下载完成" ) 
 | 
                                            .set(Empower::getSendStatus,Constants.EmpowerStatus.downloaded) ); 
 | 
  
 | 
                                } 
 | 
                            }else if(response!=null 
 | 
                                    && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) 
 | 
                                    && response.getData()==null){ 
 | 
                                empowerMapper.update(null,new UpdateWrapper<Empower>() 
 | 
                                        .lambda() 
 | 
                                        .eq(Empower::getHkId,c.getHkId() ) 
 | 
                                        .set(Empower::getSendInfo,"任务已被删除,下发失败" ) 
 | 
                                        .set(Empower::getRemark,"任务已被删除,下发失败" ) 
 | 
                                        .set(Empower::getSendStatus,Constants.EmpowerStatus.fail) ); 
 | 
                            } 
 | 
                        } 
 | 
                    }catch (Exception e1){ 
 | 
                        e1.printStackTrace(); 
 | 
                    }finally { 
 | 
                        Constants.DEALING_HK_EMPOWER_RESULT =false; 
 | 
                    } 
 | 
                } 
 | 
            }); 
 | 
            t1.start(); 
 | 
            return list.get(list.size()-1).getId(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 处理人员授权数据,定时下发 
 | 
     */ 
 | 
    @Override 
 | 
    public  Integer syncEmpowerFailData(Integer endId) { 
 | 
        List<Empower> allList =getAllFailDealList( endId); 
 | 
        if(allList!=null && allList.size()>0){ 
 | 
            Date date = new Date(); 
 | 
            List<Integer> retryIds = new ArrayList<>(); 
 | 
            List<Integer> noIds = new ArrayList<>(); 
 | 
            for(Empower empower:allList){ 
 | 
                //如果是删除的权限下发,查询是否伺候有下发成功的数据,如果有,则不处理 
 | 
//                int flag= empowerMapper.selectCount(new QueryWrapper<Empower>().lambda() 
 | 
//                        .eq(Empower::getMemberId,empower.getMemberId()) 
 | 
//                        .eq(Empower::getDeviceId,empower.getDeviceId() ) 
 | 
//                        .gt(Empower::getId,empower.getId()) 
 | 
//                        .last("limit 1")); 
 | 
                    if(empower.getTempCouunt() ==0){ 
 | 
                        retryIds.add(empower.getId()); 
 | 
                    }else{ 
 | 
                        //如果之后时间内又重新下发记录,则跳过不做处理 
 | 
                        noIds.add(empower.getId()); 
 | 
                    } 
 | 
            } 
 | 
  
 | 
             if(retryIds.size()>0){ 
 | 
                empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() 
 | 
                        .set(Empower::getCreateDate,date) 
 | 
                        .set(Empower::getSendStatus,Constants.EmpowerStatus.wait) 
 | 
                        .set(Empower::getEditDate,date) 
 | 
                        .set(Empower::getRemark,"下发失败,待重新下发~") 
 | 
                        .set(Empower::getSendInfo,"下发失败,待重新下发~") 
 | 
                        .in(Empower::getId,retryIds)); 
 | 
            } 
 | 
            if(noIds.size()>0){ 
 | 
                empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() 
 | 
                        .set(Empower::getEditDate,date) 
 | 
                        .set(Empower::getRemark,"下发失败,已失效~") 
 | 
                        .set(Empower::getSendInfo,"下发失败,已失效~") 
 | 
                        .set(Empower::getFailFlag,Constants.ONE) 
 | 
                        .in(Empower::getId,noIds)); 
 | 
            } 
 | 
            return allList.get(allList.size()-1).getId(); 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
    /** 
 | 
     * 处理人员授权数据,定时下发 
 | 
     */ 
 | 
    @Override 
 | 
    public  Integer syncEmpowerData(Integer endId) { 
 | 
//        if(Constants.DEALING_HK_EMPOWER){ 
 | 
//            return  null ; 
 | 
//        } 
 | 
//        Constants.DEALING_HK_EMPOWER =true; 
 | 
            //先删除所有需要取消授权的数据 
 | 
            if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda() 
 | 
                    .eq(Empower::getSendStatus,Constants.EmpowerStatus.ing)) > 1000){ 
 | 
                //如果当前任务大于1000个(大概10个任务) 
 | 
                return endId; 
 | 
            } 
 | 
            List<Empower> allList =getAllWaitDealList( endId); 
 | 
            if(allList !=null && allList.size()>0){ 
 | 
                //查询所有需要同步的数据,重新下发最新人员权限即可 
 | 
                Thread t1=new Thread(new Runnable() { 
 | 
                    @Override 
 | 
                    public void run() { 
 | 
                        dealAllListTask(allList); 
 | 
                    } 
 | 
                }); 
 | 
                t1.start(); 
 | 
                return allList.get(allList.size()-1).getId(); 
 | 
            } 
 | 
        return null; 
 | 
    } 
 | 
    @Override 
 | 
    public  void syncEmpowerDataNew(int start,int end) { 
 | 
        try { 
 | 
            //先删除所有需要取消授权的数据 
 | 
            dealDelListTask(getDealList(Constants.ONE,start,end)); 
 | 
            //查询所有需要同步的数据,重新下发最新人员权限即可 
 | 
            dealNewListTask(getDealList(Constants.ZERO,start,end)); 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        }finally { 
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 分段请求下发权限 
 | 
     * @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; 
 | 
        } 
 | 
        Date date = new Date(); 
 | 
        //创建任务 
 | 
        String taskId = hkTaskAddtion(); 
 | 
        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.getId()); 
 | 
            }else{ 
 | 
                errorList.add(c.getId()); 
 | 
            } 
 | 
        } 
 | 
        if(successList.size()>0){ 
 | 
            //开始执行下发 
 | 
            boolean status = startTask(taskId); 
 | 
            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)); 
 | 
        } 
 | 
        if(errorList.size()>0){ 
 | 
            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)); 
 | 
  
 | 
        } 
 | 
    } 
 | 
    public class TaskRuner implements Runnable{ 
 | 
        private    List<Empower> list ; 
 | 
        @Override 
 | 
        public void run() { 
 | 
            dealNewListTask(list); 
 | 
        } 
 | 
  
 | 
        public List<Empower> getList() { 
 | 
            return list; 
 | 
        } 
 | 
  
 | 
        public void setList(List<Empower> list) { 
 | 
            this.list = list; 
 | 
        } 
 | 
    } 
 | 
    private void dealAllListTask(List<Empower> list) { 
 | 
        //按照父级申请分批处理每次申请数据 
 | 
        if(list ==null || list.size()==0){ 
 | 
            return; 
 | 
        } 
 | 
//        clearAllEmpowerFirst(list); 
 | 
        Date date = new Date(); 
 | 
        //创建任务 
 | 
        String taskId = hkTaskAddtion(); 
 | 
        List<Empower> successList = new ArrayList<>(); 
 | 
        List<Empower> errorList = new ArrayList<>(); 
 | 
        List<Empower> waitList = new ArrayList<>(); 
 | 
        List<Empower> faceErrorList = new ArrayList<>(); 
 | 
        for(Empower c : list) { 
 | 
            //向任务添加人员、设备信息数据 
 | 
            if(c.getDeviceOnline() !=null && Constants.equalsInteger(c.getDeviceOnline(),0)){ 
 | 
                waitList.add(c); 
 | 
                continue; 
 | 
            } 
 | 
            if(  Constants.equalsInteger(c.getMemberFaceStatus(),Constants.THREE)){ 
 | 
                faceErrorList.add(c); 
 | 
                continue; 
 | 
            } 
 | 
            HKConstants.OPERA_TYPE flag = HKConstants.OPERA_TYPE.ADD; 
 | 
            if(Constants.equalsObject(c.getIsdeleted(),Constants.ONE)){ 
 | 
                flag = HKConstants.OPERA_TYPE.DEL; 
 | 
            } 
 | 
            if(addTaskData(c,taskId,flag.getKey())){ 
 | 
                successList.add(c); 
 | 
            }else{ 
 | 
                errorList.add(c); 
 | 
            } 
 | 
        } 
 | 
        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); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        if(errorList.size()>0){ 
 | 
            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.setRemark( "添加下发任务数据失败"); 
 | 
                update.setSendInfo( "添加下发任务数据失败"); 
 | 
                empowerMapper.updateById(update); 
 | 
            } 
 | 
        } 
 | 
        if(waitList.size()>0){ 
 | 
            for(Empower model : waitList){ 
 | 
                Empower update = new Empower(); 
 | 
                update.setId(model.getId()); 
 | 
                update.setSendDate(date); 
 | 
                update.setEditDate(date); 
 | 
                update.setHkId(taskId); 
 | 
                update.setSendStatus(Constants.EmpowerStatus.fail); 
 | 
                update.setRemark( "设备状态异常,等待重新下发"); 
 | 
                update.setSendInfo( "设备状态异常,等待重新下发"); 
 | 
                empowerMapper.updateById(update); 
 | 
            } 
 | 
        } 
 | 
        if(faceErrorList.size()>0){ 
 | 
            for(Empower model : faceErrorList){ 
 | 
                Empower update = new Empower(); 
 | 
                update.setId(model.getId()); 
 | 
                update.setSendDate(date); 
 | 
                update.setEditDate(date); 
 | 
                update.setHkId(taskId); 
 | 
                update.setSendStatus(Constants.EmpowerStatus.fail); 
 | 
                update.setRemark( "人脸建模失败,等待更换人脸后重新下发"); 
 | 
                update.setSendInfo( "人脸建模失败,等待更换人脸后重新下发"); 
 | 
                empowerMapper.updateById(update); 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
  
 | 
    } 
 | 
    private void dealNewListTask(List<Empower> list) { 
 | 
        //按照父级申请分批处理每次申请数据 
 | 
        if(list ==null || list.size()==0){ 
 | 
            return; 
 | 
        } 
 | 
//        clearAllEmpowerFirst(list); 
 | 
        Date date = new Date(); 
 | 
        //创建任务 
 | 
        String taskId = hkTaskAddtion(); 
 | 
        List<Empower> successList = new ArrayList<>(); 
 | 
        List<Empower> errorList = new ArrayList<>(); 
 | 
        for(Empower c : list) { 
 | 
            //向任务添加人员、设备信息数据 
 | 
            if(addTaskData(c,taskId,HKConstants.OPERA_TYPE.ADD.getKey())){ 
 | 
                successList.add(c); 
 | 
            }else{ 
 | 
                errorList.add(c); 
 | 
            } 
 | 
        } 
 | 
        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); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        if(errorList.size()>0){ 
 | 
            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.setRemark( "添加下发任务数据失败"); 
 | 
                update.setSendInfo( "添加下发任务数据失败"); 
 | 
                empowerMapper.updateById(update); 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
  
 | 
    } 
 | 
  
 | 
    private void clearAllEmpowerFirst(List<Empower> list) { 
 | 
        //查询全部数据 
 | 
        List<Device> allDevice = deviceMapper.selectList(new QueryWrapper<Device>().lambda().isNotNull(Device::getHkId)); 
 | 
        //创建任务 
 | 
        String taskId = hkTaskAddtion(); 
 | 
        for(Empower c : list) { 
 | 
            //向任务刪除人员的所有设备信息数据 
 | 
            addTaskDataAllDel(c.getHkId(),taskId,allDevice); 
 | 
        } 
 | 
        startTask(taskId); 
 | 
    } 
 | 
  
 | 
    private boolean addTaskData(Empower c,String taskId,int type) { 
 | 
        if(StringUtils.isBlank(c.getMemberHkId() ) 
 | 
                ||StringUtils.isBlank(c.getDeviceChannelNo()) 
 | 
                ||StringUtils.isBlank(c.getDeviceType()) 
 | 
                ||StringUtils.isBlank(c.getDeviceIndexCode())){ 
 | 
            //必填参数校验 
 | 
            c.setSendInfo("设备信息不支持授权下发,检查人员是否已下发海康或者设备是否【设备类型、通道号】是否完善"); 
 | 
            c.setRemark("设备信息不支持授权下发,检查人员是否已下发海康或者设备是否【设备类型、通道号】是否完善"); 
 | 
            return  false; 
 | 
        } 
 | 
        TaskDataAdditionRequest param = new TaskDataAdditionRequest(); 
 | 
        param.setTaskId(taskId); 
 | 
        List<TaskDataAdditionResourceRequest> resourceInfos = new ArrayList<>();//    object[]    True    资源对象 
 | 
        TaskDataAdditionResourceRequest res = new TaskDataAdditionResourceRequest(); 
 | 
        res.setChannelNos(c.getDeviceChannelNo().split(",")); 
 | 
        res.setResourceType(c.getDeviceType()); 
 | 
        res.setResourceIndexCode(c.getDeviceIndexCode()); 
 | 
        resourceInfos.add(res); 
 | 
        List<TaskDataAdditionPersonRequest> personInfos = new ArrayList<>(); 
 | 
        TaskDataAdditionPersonRequest pinfo = new TaskDataAdditionPersonRequest(); 
 | 
        pinfo.setName(c.getMemberName()); 
 | 
        pinfo.setEndTime(DateUtil.getISO8601Timestamp(c.getEndTime())); 
 | 
        pinfo.setStartTime(DateUtil.getISO8601Timestamp(c.getStartTime())); 
 | 
        pinfo.setOperatorType(type); 
 | 
        pinfo.setPersonId(c.getMemberHkId()); 
 | 
        personInfos.add(pinfo);// 
 | 
        param.setResourceInfos(resourceInfos); 
 | 
        param.setPersonInfos(personInfos); 
 | 
  
 | 
        //--------------卡片添加---------- 
 | 
      /*  if(StringUtils.isNotBlank(c.getCardNos())){ 
 | 
            List<TaskDataAdditionCardRequest> cards = new ArrayList<>(); 
 | 
            for(String s : c.getCardNos().split(",")){ 
 | 
                TaskDataAdditionCardRequest tc = new TaskDataAdditionCardRequest(); 
 | 
                tc.setCard(s); 
 | 
                tc.setStatus(HKConstants.OPERA_TYPE.ADD.getKey()); 
 | 
                tc.setCardType(HKConstants.CARD_TYPE.NORMAL.getKey()); 
 | 
                cards.add(tc); 
 | 
            } 
 | 
            param.setCards(cards); 
 | 
        }*/ 
 | 
        BaseResponse response =  HKService.taskDataAddition(param); 
 | 
        if(response!=null 
 | 
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){ 
 | 
            return true; 
 | 
        }else{ 
 | 
            c.setRemark("添加人员、设备通道权限下发数据失败"+(response!=null?response.getMsg():"")); 
 | 
            c.setSendInfo("添加人员、设备通道权限下发数据失败"+(response!=null?response.getMsg():"")); 
 | 
            return  false; 
 | 
        } 
 | 
    } 
 | 
    private List<Empower> getDealList(int del ,Integer endId ) { 
 | 
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Empower.class); 
 | 
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo); 
 | 
        queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId); 
 | 
        queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); 
 | 
        queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType); 
 | 
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId); 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId); 
 | 
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.wait); 
 | 
//        queryWrapper.eq( Empower::getIsdeleted,del); 
 | 
        queryWrapper.gt(Empower::getId,endId); 
 | 
        queryWrapper.orderByAsc(Empower::getId ); 
 | 
//        queryWrapper.orderByAsc(Empower::getCreateDate ); 
 | 
        queryWrapper.last("limit 100");//每次限制下发100个 
 | 
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper); 
 | 
        return list; 
 | 
    } 
 | 
    private List<Empower> getAllWaitDealList(int endId   ) { 
 | 
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Empower.class); 
 | 
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo); 
 | 
        queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId); 
 | 
        queryWrapper.selectAs(Member::getFaceStatus,Empower::getMemberFaceStatus); 
 | 
        queryWrapper.selectAs(Device::getOnline,Empower::getDeviceOnline); 
 | 
        queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); 
 | 
        queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType); 
 | 
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId); 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId); 
 | 
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.wait); 
 | 
//        queryWrapper.eq( Empower::getIsdeleted,del); 
 | 
        queryWrapper.gt(Empower::getId,endId); 
 | 
        queryWrapper.orderByAsc(Empower::getId ); 
 | 
//        queryWrapper.orderByAsc(Empower::getCreateDate ); 
 | 
        queryWrapper.last("limit 100");//每次限制下发100个 
 | 
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper); 
 | 
        return list; 
 | 
    } 
 | 
    private List<Empower> getAllFailDealList(int endId ) { 
 | 
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.select(Empower::getId,Empower::getMemberId,Empower::getDeviceId,Empower::getIsdeleted); 
 | 
        queryWrapper.select(" (select count(1) from empower ee  where ee.member_id=t.MEMBER_ID and ee.device_id =t.DEVICE_ID   and ee.id>t.id) as tempCouunt"); 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId); 
 | 
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId); 
 | 
        queryWrapper.ne(Member::getFaceStatus,Constants.THREE);//人脸建模没有失败过的 
 | 
        queryWrapper.ne(Device::getOnline,Constants.ZERO+"");//非离线 
 | 
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.fail); 
 | 
        queryWrapper.gt(Empower::getId,endId); 
 | 
        queryWrapper.and(w-> w.eq( Empower::getFailFlag,Constants.ZERO).or().isNull(Empower::getFailFlag)); 
 | 
        queryWrapper.orderByAsc(Empower::getId ); 
 | 
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    private List<Empower> getDealList(int del ,int start,int end) { 
 | 
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Empower.class); 
 | 
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo); 
 | 
        queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId); 
 | 
        queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); 
 | 
        queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType); 
 | 
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId); 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId); 
 | 
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.wait); 
 | 
        queryWrapper.eq( Empower::getIsdeleted,del); 
 | 
        queryWrapper.gt( Empower::getId,start); 
 | 
        queryWrapper.le( Empower::getId,end); 
 | 
        queryWrapper.orderByDesc(Empower::getId ); 
 | 
//        queryWrapper.orderByAsc(Empower::getCreateDate ); 
 | 
        queryWrapper.last("limit 100");//每次限制下发100个 
 | 
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper); 
 | 
        return list; 
 | 
    } 
 | 
    private List<Empower> getDealListDetail(int endId ) { 
 | 
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Empower.class); 
 | 
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo); 
 | 
        queryWrapper.selectAs(Member::getIsdeleted,Empower::getMemberDeleted); 
 | 
        queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId); 
 | 
        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.gt(Empower::getId,endId); 
 | 
        queryWrapper.orderByAsc(Empower::getSendDate); 
 | 
        queryWrapper.last("limit 100");//每次限制下发100个 
 | 
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper); 
 | 
        return list; 
 | 
    } 
 | 
    private List<Empower> getIngTaskListResult(int endId) { 
 | 
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Empower.class); 
 | 
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.ing); 
 | 
        queryWrapper.gt(Empower::getId,endId); 
 | 
        queryWrapper.groupBy(Empower::getHkId); 
 | 
        queryWrapper.orderByAsc(Empower::getSendDate); 
 | 
        queryWrapper.last("limit 100");//每次限制下发100个 
 | 
        List<Empower> list = empowerMapper.selectList(queryWrapper); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |