nidapeng
2024-03-19 6c40e04eb7c2060feb2533735cd3089d438965e5
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -2,6 +2,7 @@
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;
@@ -21,6 +22,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@@ -38,6 +40,8 @@
    @Autowired
    private EmpowerJoinMapper empowerMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private DeviceMapper deviceMapper;
@@ -48,87 +52,113 @@
     * 定时查询权限下发任务进度执行结果
     */
    @Override
    public  void syncEmpowerDetailData(){
        if(Constants.DEALING_HK_EMPOWER_DETAIL){
            return   ;
        }
        Constants.DEALING_HK_EMPOWER_DETAIL = true;
        try {
    public  Integer   syncEmpowerDetailData(Integer endId){
//        if(Constants.DEALING_HK_EMPOWER_DETAIL){
//            return   ;
//        }
//        Constants.DEALING_HK_EMPOWER_DETAIL = true;
            //查询所有完成下载,待查询结果的数据记录
            List<Empower>  list = getDealListDetail();
            List<Empower>  list = getDealListDetail(endId);
           if(list == null || list.size() ==0){
               return;
               return null;
           }
           for(Empower c : list){
               TaskPersonDetailRequest param = new TaskPersonDetailRequest();
               param.setPageNo(1);
               param.setPageSize(100);
//               param.setPersonIds(new ArrayList<>());
               param.setPersonIds(new String[]{c.getMemberHkId()});
               param.setTaskId(c.getHkId());
               TaskDataAdditionResourceRequest rec = new TaskDataAdditionResourceRequest();
               rec.setResourceIndexCode(c.getDeviceIndexCode());
               rec.setResourceType(c.getDeviceType());
//               rec.setChannelNos(c.getDeviceChannelNo().split(","));
               param.setResourceInfo(rec);
               //查询下发状态
               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 ){
                   TaskPersonDetailResponse model = response.getData().getList().get(0);
                   if(model != null && StringUtils.equals(model.getPersondownloadResult(),"0")){
                       //更新已完成下载任务
                           String remark = "";
                           String cardInfo = "卡片下发失败";
                           TaskPersonDetailCardFaceResponse d = model.getPersonDownloadDetail();
                            if(d.getCards() !=null && d.getCards().size()>0){
                                cardInfo = "卡片:【" ;
                                for(TaskPersonDetailCardInfoResponse card : d.getCards()){
                                    cardInfo +=card.getId()+" ";
        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
                        ) {
                            if (response.getData().getList() != null
                                    && response.getData().getList().size() > 0) {
                                TaskPersonDetailResponse model = response.getData().getList().get(0);
                                if (model != null && StringUtils.equals(model.getPersondownloadResult(), "0")) {
                                    //更新已完成下载任务
                                    String remark = "";
                                    String cardInfo = "卡片下发失败";
                                    TaskPersonDetailCardFaceResponse d = model.getPersonDownloadDetail();
                                    if (d.getCards() != null && d.getCards().size() > 0) {
                                        cardInfo = "卡片:【";
                                        for (TaskPersonDetailCardInfoResponse card : d.getCards()) {
                                            cardInfo += card.getId() + " ";
                                        }
                                        cardInfo += "】下发成功";
                                    }
                                    if (d.getFaces() == null || d.getFaces().size() == 0) {
                                        remark = cardInfo + ", 不支持人脸设备!";
                                    } else {
                                        remark = "" + cardInfo + ",人脸下发成功!";
                                    }
                                    empowerMapper.update(null, new UpdateWrapper<Empower>()
                                            .lambda()
                                            .eq(Empower::getId, c.getId())
                                            .set(Empower::getRemark, remark)
                                            .set(Empower::getSendInfo, remark)
                                            .set(Empower::getSendStatus, Constants.EmpowerStatus.pass));
                                } 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));
                                }
                                cardInfo += "】下发成功";
                            } else {
                                //如果是已删除的数据,下发失败(防止设备离线),则尝试重新下发任务
                                if(Constants.equalsInteger(c.getIsdeleted(), Constants.ONE) ){
//                               && Constants.formatIntegerNum(c.getTryNum())+1 < tryNum ){
                                    empowerMapper.update(null, new UpdateWrapper<Empower>()
                                            .lambda()
                                            .eq(Empower::getId, c.getId())
                                            .set(Empower::getRemark,  "下发失败,等待重新删除权限")
//                                   .set(Empower::getHkId,null)
//                                   .set(Empower::getSendDate,null)
                                            .set(Empower::getTryNum,Constants.formatIntegerNum(c.getTryNum())+1)
                                            .set(Empower::getSendInfo, "下发失败,等待重新删除权限")
                                            .set(Empower::getSendStatus, Constants.EmpowerStatus.wait));
                                    empowerMapper.update(null, new UpdateWrapper<Empower>()
                                            .lambda()
                                            .eq(Empower::getId, c.getId())
                                            .set(Empower::getRemark, "删除权限下发失败")
                                            .set(Empower::getSendInfo, "删除权限下发失败")
                                            .set(Empower::getSendStatus, Constants.EmpowerStatus.fail));
                                }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));
                                }
                            }
                           if(d.getFaces() == null || d.getFaces().size() ==0){
                               remark  = cardInfo+", 不支持人脸设备!";
                           }else{
                               remark = ""+cardInfo+",人脸下发成功!";
                           }
                           empowerMapper.update(null,new UpdateWrapper<Empower>()
                                   .lambda()
                                   .eq(Empower::getId,c.getId() )
                                   .set(Empower::getRemark,remark )
                                   .set(Empower::getSendInfo,remark )
                                   .set(Empower::getSendStatus,Constants.EmpowerStatus.pass) );
                       }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) );
                       }
                   }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) );
                            checkDelMemberTask(c.getMemberId());
                        }
                    }
                   checkDelMemberTask(c.getMemberId());
               }
           }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_EMPOWER_DETAIL=false;
        }
                }catch (Exception e){
                }finally {
//                    Constants.DEALING_HK_EMPOWER_DETAIL=false;
                }
            }
        });
        t1.start();
         return list.get(list.size()-1).getId();
    }
    /**
     * 对海康删除组织信息
     * @param id
@@ -190,7 +220,7 @@
        Constants.DEALING_HK_EMPOWER_DETAIL = true;
        try {
            //查询所有完成下载,待查询结果的数据记录
            List<Empower>  list = getDealListDetail();
            List<Empower>  list = getDealListDetail(0);
           if(list == null || list.size() ==0){
               return;
           }
@@ -236,40 +266,49 @@
     * 定时查询权限下发任务进度执行结果
     */
    @Override
    public  void syncEmpowerResultData(){
        if(Constants.DEALING_HK_EMPOWER_RESULT){
            return   ;
        }
        Constants.DEALING_HK_EMPOWER_RESULT=true;
        try {
    public  Integer syncEmpowerResultData(Integer endId){
//        if(Constants.DEALING_HK_EMPOWER_RESULT){
//            return  null ;
//        }
//        Constants.DEALING_HK_EMPOWER_RESULT=true;
            //查询所有执行中得数据
            List<Empower>  list = getIngTaskListResult();
         List<Empower>  list = getIngTaskListResult(Constants.formatIntegerNum(endId));
           if(list == null || list.size() ==0){
               return;
               return null;
           }
           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
                       && response.getData().getIsDownloadFinished() != null
                       && response.getData().getIsDownloadFinished() ){
                   //更新已完成下载任务
                   empowerMapper.update(null,new UpdateWrapper<Empower>()
                           .lambda()
                           .eq(Empower::getHkId,c.getHkId() )
                           .set(Empower::getSendInfo,"任务已下载完成" )
                           .set(Empower::getSendStatus,Constants.EmpowerStatus.downloaded) );
               }
           }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_EMPOWER_RESULT =false;
        }
            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::getSendStatus,Constants.EmpowerStatus.downloaded) );
                                }
                            }
                        }
                    }catch (Exception e1){
                        e1.printStackTrace();
                    }finally {
                        Constants.DEALING_HK_EMPOWER_RESULT =false;
                    }
                }
            });
            t1.start();
            return list.get(list.size()-1).getId();
    }
@@ -279,20 +318,51 @@
     * 处理人员授权数据,定时下发
     */
    @Override
    public  void syncEmpowerData() {
        if(Constants.DEALING_HK_EMPOWER){
            return   ;
        }
        Constants.DEALING_HK_EMPOWER =true;
    public  Integer syncEmpowerData(Integer endId) {
//        if(Constants.DEALING_HK_EMPOWER){
//            return  null ;
//        }
//        Constants.DEALING_HK_EMPOWER =true;
            //先删除所有需要取消授权的数据
            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);
                        }
                    }
                });
                t1.start();
                return allList.get(allList.size()-1).getId();
            }
        return null;
    }
    @Override
    public  void syncEmpowerDataNew(int start,int end) {
        try {
            //先删除所有需要取消授权的数据
            dealDelListTask(getDealList(Constants.ONE));
            dealDelListTask(getDealList(Constants.ONE,start,end));
            //查询所有需要同步的数据,重新下发最新人员权限即可
            dealNewListTask(getDealList(Constants.ZERO));
            dealNewListTask(getDealList(Constants.ZERO,start,end));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_EMPOWER =false;
        }
    }
@@ -361,7 +431,21 @@
                .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 dealNewListTask(List<Empower> list) {
        //按照父级申请分批处理每次申请数据
        if(list ==null || list.size()==0){
@@ -476,9 +560,44 @@
            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(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> getDealList(int del ) {
    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);
@@ -489,11 +608,15 @@
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId);
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.wait);
        queryWrapper.eq( Empower::getIsdeleted,del);
//        queryWrapper.last("limit 100");//每次限制下发100个
        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() {
    private List<Empower> getDealListDetail(int endId ) {
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Empower.class);
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo);
@@ -504,17 +627,23 @@
        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() {
    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);
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper);
        queryWrapper.orderByAsc(Empower::getSendDate);
        queryWrapper.last("limit 100");//每次限制下发100个
        List<Empower> list = empowerMapper.selectList(queryWrapper);
        return list;
    }
}