k94314517
2024-03-18 52f8e08715abd234c3bd6908e4338b1da1d8b0b4
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;
@@ -12,16 +13,16 @@
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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@@ -39,7 +40,13 @@
    @Autowired
    private EmpowerJoinMapper empowerMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private MemberCardMapper memberCardMapper;
    /**
     * 定时查询权限下发任务进度执行结果
@@ -55,6 +62,12 @@
            List<Empower>  list = getDealListDetail();
           if(list == null || list.size() ==0){
               return;
           }
           int tryNum = 1;
           try {
               tryNum = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.RETRY_CONNECT_NUM).getCode());
           }catch (Exception e){
           }
           for(Empower c : list){
               TaskPersonDetailRequest param = new TaskPersonDetailRequest();
@@ -72,36 +85,73 @@
               //查询下发状态
               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 ){
                   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+",人脸下发成功!";
                       && 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));
                       }
                       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 {
                       //如果是已删除的数据,下发失败(防止设备离线),则尝试重新下发任务
                       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));
                       }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));
                       }
                      /* empowerMapper.update(null, new UpdateWrapper<Empower>()
                               .lambda()
                               .eq(Empower::getId, c.getId())
                               .set(Empower::getRemark, Constants.equalsInteger(c.getIsdeleted(), Constants.ZERO) ? "下发失败" : "删除权限成功")
                               .set(Empower::getSendInfo, "删除权限成功")
                               .set(Empower::getSendStatus, Constants.equalsInteger(c.getIsdeleted(), Constants.ZERO) ? Constants.EmpowerStatus.fail : Constants.EmpowerStatus.pass));
                         */
                     }
                   checkDelMemberTask(c.getMemberId());
               }
           }
        }catch (Exception e){
@@ -111,6 +161,60 @@
        }
    }
    /**
     * 对海康删除组织信息
     * @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::getRemark,"同步海康删除失败")//同步失败
                        .set(Member::getHkDate,date)
                        .in(Member::getId, id));
            }else{
                //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
                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 true;
        }
        return false;
    }
    /**
     * 检查删除人员的权限是否都删除完成,如果权限删除完成, 进行海康人员的删除操作
     */
    private void checkDelMemberTask(Integer memberId) {
            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,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   ;
@@ -189,8 +293,8 @@
                   empowerMapper.update(null,new UpdateWrapper<Empower>()
                           .lambda()
                           .eq(Empower::getHkId,c.getHkId() )
                           .set(Empower::getSendInfo,"任务已下载完成" )
                           .set(Empower::getSendStatus,Constants.EmpowerStatus.downloaded) );
               }
           }
        }catch (Exception e){
@@ -221,6 +325,18 @@
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_EMPOWER =false;
        }
    }
    @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 {
        }
    }
@@ -404,9 +520,7 @@
            return  false;
        }
    }
    private List<Empower> getDealList(int del ) {
    private List<Empower> getDealList(int del  ) {
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Empower.class);
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo);
@@ -417,7 +531,29 @@
        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.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 ,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;
    }