nidapeng
2024-03-28 d16520069e7a89b5ac0d13d0c8ba4e30af023279
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -6,6 +6,7 @@
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.BaseResponse;
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.respose.*;
@@ -80,47 +81,74 @@
                        //查询下发状态
                        BaseResponse<TaskPersonDetailListResponse> response = HKService.taskPersoDetail(param);
                        if(response!=null
                                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) && response.getData()!=null
                        ){
                            if (response.getData().getList() != null
                                    && response.getData().getList().size() > 0) {
                                && 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 != null && StringUtils.equals(model.getPersondownloadResult(), "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) {
                                        cardInfo = "卡片:【";
                                        for (TaskPersonDetailCardInfoResponse card : d.getCards()) {
                                        if(StringUtils.equals(card.getErrorCode(),HKResponseCode.ReturnCode.RESPONSE_SUCCEE.getKey())){
                                            cardInfo += card.getId() + " ";
                                            iscard=true;
                                        }
                                        cardInfo += "】下发成功";
                                    }
                                    if(iscard){
                                        cardInfo = "卡片【"+cardInfo+"】下发成功";
                                    }
                                    }
                                    if (d.getFaces() == null || d.getFaces().size() == 0) {
                                        remark = cardInfo + ", 不支持人脸设备!";
                                    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, Constants.EmpowerStatus.pass));
                                    if(Constants.equalsInteger(c.getMemberDeleted(), Constants.ONE)&& Constants.equalsInteger(c.getIsdeleted(), Constants.ONE) ){
                                        .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());
                                    }
                                } else {
                                    empowerMapper.update(null, new UpdateWrapper<Empower>()
                                            .lambda()
                                            .eq(Empower::getId, c.getId())
                                            .set(Empower::getRemark, "下发失败")
                                            .set(Empower::getSendInfo, "下发失败")
                                            .set(Empower::getSendStatus, Constants.EmpowerStatus.fail));
                                continue;
                                }
                            } else {
                        }
                        //所有异常情况都标记为下发失败
                                //如果是已删除的数据,下发失败(防止设备离线),则尝试重新下发任务
                                if(Constants.equalsInteger(c.getIsdeleted(), Constants.ONE) ){
                                    empowerMapper.update(null, new UpdateWrapper<Empower>()
@@ -134,27 +162,15 @@
                                    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));
                                }
                            }
                        }else if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_DOWNLOAD_ERROR)                        ){
                            empowerMapper.update(null, new UpdateWrapper<Empower>()
                                    .lambda()
                                    .eq(Empower::getId, c.getId())
                                    .set(Empower::getRemark, "下发失败")
//                                    .set(Empower::getFailFlag, Constants.ONE)//无需重发(下载任务不存在)
                                    .set(Empower::getTryNum,Constants.formatIntegerNum(c.getTryNum())+1)
                                    .set(Empower::getSendInfo, "下发失败")
                                    .set(Empower::getSendStatus, Constants.EmpowerStatus.fail));
                        }
                    }
                }catch (Exception e){
                }finally {
//                    Constants.DEALING_HK_EMPOWER_DETAIL=false;
                    e.printStackTrace();
                }
            }
        });
@@ -301,6 +317,7 @@
                                            .lambda()
                                            .eq(Empower::getHkId,c.getHkId() )
                                            .set(Empower::getSendInfo,"任务已下载完成" )
                                            .set(Empower::getRemark,"任务已下载完成" )
                                            .set(Empower::getSendStatus,Constants.EmpowerStatus.downloaded) );
                                }
@@ -332,9 +349,6 @@
            List<Integer> noIds = new ArrayList<>();
            for(Empower empower:allList){
                //如果是删除的权限下发,查询是否伺候有下发成功的数据,如果有,则不处理
                if(empower.getId().equals(392479)){
                    System.out.println("============================");
                }
//                int flag= empowerMapper.selectCount(new QueryWrapper<Empower>().lambda()
//                        .eq(Empower::getMemberId,empower.getMemberId())
//                        .eq(Empower::getDeviceId,empower.getDeviceId() )
@@ -382,25 +396,10 @@
            List<Empower> allList =getAllWaitDealList( endId);
            if(allList !=null && allList.size()>0){
                //查询所有需要同步的数据,重新下发最新人员权限即可
//            dealNewListTask(getDealList(Constants.ZERO,endId));
                List<Empower> dellist = new ArrayList<>();
                List<Empower> addlist = new ArrayList<>();
                for(Empower e : allList){
                    if(Constants.equalsInteger(e.getIsdeleted(),Constants.ONE)){
                        dellist.add(e);
                    }else {
                        addlist.add(e);
                    }
                }
                Thread t1=new Thread(new Runnable() {
                    @Override
                    public void run() {
                        if(dellist!=null &&dellist.size()>0) {
                            dealDelListTask(dellist);
                        }
                        if(addlist!=null &&addlist.size()>0) {
                            dealNewListTask(addlist);
                        }
                        dealAllListTask(allList);
                    }
                });
                t1.start();
@@ -475,7 +474,7 @@
                    .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)
@@ -486,6 +485,8 @@
                .set(Empower::getRemark, "添加下发任务数据刪除授权失败")
                .set(Empower::getEditDate,date)
                .in(Empower::getId,errorList));
        }
    }
    public class TaskRuner implements Runnable{
        private    List<Empower> list ;
@@ -501,6 +502,99 @@
        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) {
        //按照父级申请分批处理每次申请数据
@@ -538,6 +632,7 @@
            }
        }
        if(errorList.size()>0){
        for(Empower model : errorList){
            Empower update = new Empower();
            update.setId(model.getId());
@@ -549,6 +644,8 @@
            update.setSendInfo( "添加下发任务数据失败");
            empowerMapper.updateById(update);
        }
        }
    }
@@ -639,6 +736,8 @@
        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);
@@ -656,6 +755,10 @@
        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.orderByAsc(Empower::getId );