nidapeng
2024-04-25 98bdeccac3ce7ed188992d7d727fc9c6160991c8
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -1,12 +1,12 @@
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.*;
@@ -17,14 +17,14 @@
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.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.MemberCard;
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;
@@ -92,7 +92,7 @@
                                boolean iscard = false;//是否有卡片下发成功
                                //更新已完成下载任务
                                String remark = "";
                                String cardInfo = "卡片下发失败";
                                String cardInfo ="";
                                TaskPersonDetailCardFaceResponse d = model.getPersonDownloadDetail();
                                if (d.getCards() != null && d.getCards().size() > 0) {
                                    for (TaskPersonDetailCardInfoResponse card : d.getCards()) {
@@ -103,7 +103,11 @@
                                    }
                                    if(iscard){
                                        cardInfo = "卡片【"+cardInfo+"】下发成功";
                                    }else{
                                        cardInfo = "卡片下发失败";
                                    }
                                }else {
                                    cardInfo = "卡片下发失败";
                                }
                                if (d.getFaces() == null || d.getFaces().size() == 0) {
                                    remark = cardInfo + ", 无人脸下发!";
@@ -185,25 +189,42 @@
     * @param id
     * @param date
     */
    private boolean doHkDeleteUser(Integer  id,String delHkIds,  Date 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)){
            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));
                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,"已同步")//同步失败
@@ -212,9 +233,8 @@
                //删除所有绑定的卡片信息
                memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,id));
            }
            return true;
        }
        return false;
        return succes;
    }
    /**
@@ -230,7 +250,7 @@
                        .ne(Empower::getFailFlag,Constants.ONE)
                        .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0){
                    //如果权限都已经删除成功,则删除海康人员和卡片数据
                     doHkDeleteUser(memberId,memberHkid,date);
                     doHkDeleteUser(memberId,memberHkid,date,memberMapper,memberCardMapper);
//            }
        }
    }
@@ -321,6 +341,15 @@
                                            .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){
@@ -393,6 +422,11 @@
//        }
//        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){
                //查询所有需要同步的数据,重新下发最新人员权限即可
@@ -515,9 +549,16 @@
        List<Empower> successList = new ArrayList<>();
        List<Empower> errorList = new ArrayList<>();
        List<Empower> waitList = new ArrayList<>();
        List<Empower> cancelList = new ArrayList<>();
        List<Empower> faceErrorList = new ArrayList<>();
        for(Empower c : list) {
            //向任务添加人员、设备信息数据
            if (Constants.equalsInteger(c.getDeviceDeleted(),Constants.ONE) ||
                    (Constants.equalsInteger(c.getMemberDeleted(), Constants.ONE) &&
                            Constants.equalsInteger(c.getMemberHkStatus(), Constants.ONE))){
                cancelList.add(c);
                continue;
            }
            if(c.getDeviceOnline() !=null && Constants.equalsInteger(c.getDeviceOnline(),0)){
                waitList.add(c);
                continue;
@@ -576,6 +617,20 @@
                update.setSendStatus(Constants.EmpowerStatus.fail);
                update.setRemark( "设备状态异常,等待重新下发");
                update.setSendInfo( "设备状态异常,等待重新下发");
                empowerMapper.updateById(update);
            }
        }
        if(cancelList.size()>0){
            for(Empower model : cancelList){
                Empower update = new Empower();
                update.setId(model.getId());
                update.setSendDate(date);
                update.setEditDate(date);
                update.setHkId(taskId);
                update.setFailFlag(Constants.ONE);
                update.setSendStatus(Constants.EmpowerStatus.cancel);
                update.setRemark( "设备或人员已删除,取消下发");
                update.setSendInfo( "设备或人员已删除,取消下发");
                empowerMapper.updateById(update);
            }
        }
@@ -737,7 +792,10 @@
        queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo);
        queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId);
        queryWrapper.selectAs(Member::getFaceStatus,Empower::getMemberFaceStatus);
        queryWrapper.selectAs(Member::getMemberHkStatus,Empower::getMemberHkStatus);
        queryWrapper.selectAs(Device::getOnline,Empower::getDeviceOnline);
        queryWrapper.selectAs(Device::getIsdeleted,Empower::getDeviceDeleted);
        queryWrapper.selectAs(Member::getIsdeleted,Empower::getMemberDeleted);
        queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode);
        queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType);
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId);
@@ -761,8 +819,8 @@
        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 );
        queryWrapper.ne( Empower::getFailFlag,Constants.ONE);
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper);
        return list;
    }