jiangping
2024-07-31 bed3eee53f72f47f49b493772a4525e6c6b3e7be
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.config.DataSyncConfig;
import com.doumee.config.SpringContextUtil;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsInfoRequest;
@@ -10,9 +11,7 @@
import com.doumee.core.haikang.model.param.request.event.acs.EventDeviceDataRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkInfoRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitDataRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
import com.doumee.core.haikang.model.param.request.event.visit.*;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
@@ -55,6 +54,10 @@
    private DeviceEventMapper deviceEventMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private DataSyncConfig dataSyncConfig;
    @Autowired
    private CarEventMapper carEventMapper;
    @Autowired
@@ -110,7 +113,7 @@
        }catch (Exception e) {
            log.error("【海康门禁事件推送】========失败=======:\n" + e.getMessage());
        }finally {
            saveInterfaceLog(param,"/business/hksync/push/acs",result);
            saveInterfaceLog(param,"/business/hksync/push/acs",result,false);//不计日志
        }
        return  null;
@@ -129,8 +132,12 @@
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,userNo).last("limit 1"));
            if(member !=null){
                //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件)
                Device d = deviceMapper.selectOne(new QueryWrapper<Device>().lambda()
                        .eq(Device::getDoorId,request.getSrcIndex())
                        .eq(Device::getIsdeleted,Constants.ZERO)
                        .last("limit 1" ));
                delRetentionLis.add(member.getId());
                if(Constants.formatIntegerNum(request.getData().getExtEventInOut()) == Constants.ONE){
                if(!(Constants.equalsInteger(d.getIsEntrance(),Constants.ONE) && Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE)){
                    //如果是进门,录入人员的在场数据记录
                    retentionList.add(getRetentionModelByRequest(member,request));
                }
@@ -225,7 +232,7 @@
    private Retention getRetentionModelByRequest(Member member, EventAcsInfoRequest request) {
        Retention retention = new Retention();
        retention.setIsdeleted(Constants.ZERO);
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getData().getExtReceiveTime()));
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        retention.setClasses(member.getClasses());
        retention.setCode(member.getCode());
        retention.setIdcardNo(member.getIdcardNo());
@@ -236,7 +243,7 @@
        retention.setCompanyId(member.getCompanyId());
        retention.setCompanyName(member.getCompanyName());
        retention.setEventCode(request.getData().getExtEventCode()+"");
        retention.setEventDate(DateUtil.getISO8601DateByStr(request.getData().getExtReceiveTime()));
        retention.setEventDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        retention.setFaceImg(member.getFaceImg());
        retention.setImgurl(member.getImgurl());
        retention.setPhone(member.getPhone());
@@ -247,6 +254,58 @@
        return retention;
    }
    /**
     * 海康访客事件推送
     * @param param
     * @param response
     * @return
     */
    @Override
    public String    dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){
        log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param));
        String result = null;
        try {
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){
                return null;
            }
            //门禁事件集合
            List<EventVisitIccmInfoRequest> events  = param.getParams().getEvents();
            List<VisitEvent> list = new ArrayList<>();
            List<Integer> delRetentionLis = new ArrayList<>();
            List<Retention> retentionList = new ArrayList<>();
            for(EventVisitIccmInfoRequest request : events){
                if(request.getData() ==null || request.getData().getVisitorInvoices() ==null){
                    continue;
                }
                if(request.getData().getVisitorInformationList() == null || request.getData().getVisitorInformationList().size() ==0){
                    continue;
                }
                //海康访客记录编码
                dealVisitDataByRequstIccm(request,delRetentionLis,retentionList,list);
            }
            if(list.size()>0){
                //插入门禁记录
                visitEventMapper.insertBatchSomeColumn(list);
            }
            if(delRetentionLis.size()>0){
                //先删除原有的在场人员(普通访客)
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                        .eq(Retention::getType,Constants.memberType.visitor)
                        .in(Retention::getMemberId,delRetentionLis));
            }
            if(retentionList.size()>0){
                //再插入最新的在厂人员
                retentionMapper.insertBatchSomeColumn(retentionList);
            }
            log.error("【海康访客事件推送】========成功=======");
        }catch (Exception e){
            log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage());
        }
        saveInterfaceLog(param,"/business/hksync/push/visitIccm",result,true);
        return  null;
    }
    /**
     * 海康访客事件推送
     * @param param
@@ -297,7 +356,7 @@
            log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage());
        }
        saveInterfaceLog(param,"/business/hksync/push/visit",result);
        saveInterfaceLog(param,"/business/hksync/push/visit",result,true);
        return  null;
    }
@@ -305,6 +364,143 @@
    /**
     *  根据访客推送访客记录编码,处理访客记录、在场人员等信息
     */
    private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,List<VisitEvent> list) {
        EventVisitIccmInvoiceParamRequest data =  request.getData().getVisitorInvoices();
        Integer memberId = null;
        if(request.getData().getTargetPerson().getPersonId()!=null){
            Member m = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                    .eq(Member::getHkId,request.getData().getTargetPerson().getPersonId())
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .last( "limit 1"));
            if(m!=null){
                memberId = m.getId();
            }
        }
        for(EventVisitIccmDetailParamRequest model : request.getData().getVisitorInformationList()){
            Visits updateVistis = new Visits();
            MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
            queryWrapper.selectAll(Visits.class);
            queryWrapper.selectAs(Member::getType,Visits::getMemberType);
            queryWrapper.eq(Visits::getHkId,model.getVisitorId() );
            queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId );
            queryWrapper.last("limit 1");
            Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper);
            if(visits !=null) {
                //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件)
                delRetentionLis.add(visits.getMemberId());
                if (dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk) {
                    //如果是伊利大屏项目,不做处理
                    return;
                }
                updateVistis.setId(visits.getId());
                if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()) {
                    //如果是访客登记,录入人员的在场数据记录
                    retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()));
                    //来访时间
                    updateVistis.setStatus(Constants.VisitIccmStatus.signin);
                    updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime()));
                    updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime()));
                    updateVistis.setEditDate(new Date());
                    //更新访客来访或者签离时间信息
                    visitsMapper.updateById(updateVistis);
                    //更新最新来访时间
                    Member member = new Member();
                    member.setLastVisitDate(updateVistis.getInDate());
                    member.setId(visits.getMemberId());
                    memberMapper.updateById(member);
                } else  if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey())  {
                    //如果是访客签离事件
                    updateVistis.setStatus(Constants.VisitIccmStatus.signout);
                    updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime()));
                    updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime()));
                    updateVistis.setOutType(Constants.ZERO);
                    updateVistis.setOutInfo("访客正常签离");
                    updateVistis.setEditDate(new Date());
                    //更新访客来访或者签离时间信息
                    visitsMapper.updateById(updateVistis);
                }else{
                    updateVistis.setStatus(visits.getStatus());
                }
            }else{
                //新增访客登记数据
               addNewVisitInfo(request,model,updateVistis.getStatus());
            }
            //封装门禁事件信息表对象
            list.add(getVisitEventModelByRequest(request,model));
        }
    }
    private void addNewVisitInfo(EventVisitIccmInfoRequest request, EventVisitIccmDetailParamRequest model,Integer status) {
        try{
            Visits c = new Visits();
            c.setHkId(model.getVisitorId());
            c.setCode(model.getAppointmentCode());
            c.setName(model.getVisitorName());
            c.setHkStatus(Constants.ONE);
            c.setHkDate(new Date());
            c.setIsdeleted(Constants.ZERO);
            c.setCreateDate(c.getHkDate());
            c.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, model.getCertNo()));
            c.setIdcardDecode(Constants.getTuominStr(model.getCertNo()));
            c.setIdcardType( model.getCertType());
            c.setStarttime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getBeginTime()));
            c.setEndtime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getFinishTime()));
            c.setReason(request.getData().getVisitorInvoices().getVisitReason());
            c.setStatus(status);
            c.setType(Constants.ONE);
            if(StringUtils.isNotBlank(request.getData().getTargetPerson().getPersonId())){
                //被访问人
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId
                        ,request.getData().getTargetPerson().getPersonId()).last("limit 1"));
                c.setReceptMemberId(member!=null?member.getId():null);
            }
            c.setCompanyName(model.getUnit());
            c.setPhone(model.getPhone());
            c.setCarNos(model.getPlateNo());
            if(StringUtils.isNotBlank(model.getCertNo())){
                //被访问人
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                        .eq(Member::getType,Constants.ONE)
                        .eq(Member::getIdcardNo , c.getIdcardNo())
                        .last("limit 1"));
                if(member == null){
                    member = new Member();
                    member.setName(model.getVisitorName());
                    member.setPhone(model.getPhone());
                    member.setSex(model.getSex());
                    member.setIsdeleted(Constants.ZERO);
                    member.setType(Constants.ONE);
                    member.setIdcardNo(c.getIdcardNo());
                    member.setIdcardDecode(c.getIdcardDecode());
                    member.setVisitCompanyName(model.getUnit());
                    member.setCreateDate(new Date());
                    if(StringUtils.isNotBlank(model.getFacePic())){
                        member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic());
                        member.setFaceServerIndexCode(model.getFaceDeviceId());
                    }
                    memberMapper.insert(member);
                }else{
                    member.setIsdeleted(Constants.ZERO);
                    member.setEditDate(new Date());
                    member.setName(model.getVisitorName());
                    member.setPhone(model.getPhone());
                    member.setSex(model.getSex());
                    member.setVisitCompanyName(model.getUnit());
                    if(StringUtils.isNotBlank(model.getFacePic())){
                        member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic());
                        member.setFaceServerIndexCode(model.getFaceDeviceId());
                    }
                    memberMapper.updateById(member);
                }
                c.setMemberId(member.getId());
                visitsMapper.insert(c);
            }
        }catch (Exception e){
            log.error("====================访客推送新增访客记录失败:"+e.getMessage());
        }
    }
    private void dealVisitDataByRequst(EventVisitInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) {
        EventVisitDataRequest model = request.getData();
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
@@ -317,11 +513,15 @@
        if(visits !=null){
            //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件)
            delRetentionLis.add(visits.getMemberId());
            if(dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk){
                //如果是伊利大屏项目,不做处理
                return;
            }
            Visits updateVistis = new Visits();
            updateVistis.setId(visits.getId());
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_IN.getKey()){
                //如果是访客登记,录入人员的在场数据记录
                retentionList.add(getRetentionModelByVisitRequest(visits,request));
                retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()));
                //来访时间
                updateVistis.setStatus(Constants.VisitStatus.signin);
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
@@ -345,6 +545,49 @@
        }
    }
    private VisitEvent getVisitEventModelByRequest(EventVisitIccmInfoRequest request,EventVisitIccmDetailParamRequest detail) {
        if(request.getData().getTargetPerson() ==null){
            request.getData().setTargetPerson(new EventVisitIccmTargetParamRequest());
        }
        VisitEvent event = new VisitEvent();
        event.setIsdeleted(Constants.ZERO);
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        event.setVisitorWorkUint(detail.getUnit());
        event.setVisitorId(detail.getVisitorId());
        event.setVisitorCode(detail.getAppointmentCode());
        event.setTimeout(request.getTimeout());
        event.setSvrIndexCode(request.getSrcIndex());
        event.setHappenTime(request.getHappenTime());
        event.setStatus(request.getStatus());
        event.setEndTime(request.getData().getVisitorInvoices().getFinishTime());
        event.setStartTime(request.getData().getVisitorInvoices().getBeginTime());
        event.setSrcType(request.getSrcType());
        event.setSrcParentIndex(request.getSrcParentIndex());
        event.setSrcName(request.getSrcName());
        event.setSrcIndex(request.getSrcIndex());
        event.setSex(detail.getSex());
        event.setPurpose(request.getData().getVisitorInvoices().getVisitReason());
        event.setPhone(detail.getPhone());
        event.setBeVisitedPersonId(request.getData().getVisitorInvoices().getVisitTargetId());
        event.setBeVisitedPersonName(request.getData().getTargetPerson().getName());
        event.setBeVisitedPersonOrg(request.getData().getTargetPerson().getOrgPathName());
        event.setBeVisitedPersonOrgId(request.getData().getTargetPerson().getName());
        event.setPhotoUrl(getHkImgUrl(detail.getFacePic()));
        event.setPersonName(detail.getVisitorName());
        event.setCarNo(detail.getPlateNo());
        event.setIdType(detail.getCertType());
        String idnum = detail.getCertNo();
        if(StringUtils.isNotBlank(idnum)){
            //身份证号存储密文
            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密
            //脱敏手机号显示n
            event.setIdcardDecode(Constants.getTuominStr(idnum));
        }
        event.setEventType(request.getEventType());
        event.setEventId(request.getEventId());
        return event;
    }
    private VisitEvent getVisitEventModelByRequest(EventVisitInfoRequest request) {
        VisitEvent event = new VisitEvent();
        event.setIsdeleted(Constants.ZERO);
@@ -395,10 +638,10 @@
        return event;
    }
    private Retention getRetentionModelByVisitRequest(Visits visits, EventVisitInfoRequest request) {
    private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) {
        Retention retention = new Retention();
        retention.setIsdeleted(Constants.ZERO);
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        retention.setCreateDate(DateUtil.getISO8601DateByStr(happentTime));
        retention.setClasses(visits.getClasses());
        retention.setCode(visits.getCode());
        retention.setIdcardNo(visits.getIdcardNo());
@@ -408,14 +651,14 @@
        retention.setType(visits.getMemberType());
        retention.setCompanyId(visits.getCompanyId());
        retention.setCompanyName(visits.getCompanyName());
        retention.setEventCode(request.getEventType()+"");
        retention.setEventCode(srcType);
        retention.setEventDate(retention.getCreateDate());
        retention.setFaceImg(visits.getFaceImg());
        retention.setImgurl(visits.getImgurl());
        retention.setPhone(visits.getPhone());
        retention.setMemberId(visits.getMemberId());
        retention.setDeviceName(request.getSrcName());
        retention.setDeviceIndex(request.getSrcIndex());
//        retention.setDeviceName(request.getSrcName());
//        retention.setDeviceIndex(request.getSrcIndex());
        return retention;
    }
@@ -460,12 +703,12 @@
                //再插入最新的在厂人员
                retentionMapper.insertBatchSomeColumn(retentionList);
            }
            log.error("【海康停车场事件推送】========成功=======");
            log.info("【海康停车场事件推送】========成功=======");
        }catch (Exception e){
            log.error("【海康停车场事件推送】========失败=======:\n"+e.getMessage());
        }
        saveInterfaceLog(param,"/business/hksync/push/parks",result);
        saveInterfaceLog(param,"/business/hksync/push/parks",result,false);
        return  null;
    }
@@ -528,14 +771,32 @@
            event.setPlatePicUrl(getHkImgUrl(request.getData().getPicUrl().getPlatePicUrl()));
        }
        if(StringUtils.isNotBlank(event.getPlateNos())){
                ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda()
                        .eq(ParkBook::getCarCode,event.getPlateNos())
                                .eq(ParkBook::getIsdeleted,Constants.ONE )
            ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda()
                    .eq(ParkBook::getCarCode,event.getPlateNos())
                    .eq(ParkBook::getParkId,event.getParkIndex())
                            .eq(ParkBook::getIsdeleted,Constants.ZERO )
                    .last("limit 1" ));
            Cars c = carsMapper.selectOne(new QueryWrapper<Cars>().lambda()
                    .eq(Cars::getCode,event.getPlateNos())
                    .eq(Cars::getIsdeleted,Constants.ZERO)
                    .last("limit 1" ));
            if(cars!=null || c!=null){
                //优先查询内部车辆信息
                event.setMemberId(cars!=null?cars.getMemberId():(c!=null?c.getMemberId():null));
            }else{
                //去访客信息中查询
                Visits visits =  visitsMapper.selectOne(new QueryWrapper<Visits>().lambda()
                        .eq(Visits::getCarNos,event.getPlateNos())
                        .eq(Visits::getIsdeleted,Constants.ZERO )
                        .in(Visits::getStatus,Constants.VisitStatus.signin,Constants.VisitStatus.signout)//最近一个已到达或者已签离
                        .isNull(Visits::getParentId)
                        .orderByDesc(Visits::getId)
                        .last("limit 1" ));
                if(cars!=null){
                    event.setMemberId(cars.getMemberId());
                if(visits!=null){
                    //最近使用该车的申请人(已到达)
                    event.setMemberId(visits.getMemberId());
                }
            }
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){
                //如果是入厂放行
                delRetentionList.add(event.getPlateNos());
@@ -562,18 +823,26 @@
        return retention;
    }
    private void saveInterfaceLog(Object param, String path,String result) {
        InterfaceLog hkMonitoryLogDO=new InterfaceLog();
        hkMonitoryLogDO.setType(1);
        hkMonitoryLogDO.setCreateDate(new Date());
        hkMonitoryLogDO.setIsdeleted(0);
        if(param!=null){
            hkMonitoryLogDO.setRequest(JSONObject.toJSONString(param));
    private void saveInterfaceLog(Object param, String path,String result,boolean need) {
        if(!need){
            return;
        }
        hkMonitoryLogDO.setRepose(result);
        hkMonitoryLogDO.setName(path);
        hkMonitoryLogDO.setUrl(path);
        interfaceLogMapper.insert(hkMonitoryLogDO);
        try {
            InterfaceLog hkMonitoryLogDO=new InterfaceLog();
            hkMonitoryLogDO.setType(1);
            hkMonitoryLogDO.setCreateDate(new Date());
            hkMonitoryLogDO.setIsdeleted(0);
            if(param!=null){
                hkMonitoryLogDO.setRequest(JSONObject.toJSONString(param));
            }
            hkMonitoryLogDO.setRepose(result);
            hkMonitoryLogDO.setName(path);
            hkMonitoryLogDO.setUrl(path);
            interfaceLogMapper.insert(hkMonitoryLogDO);
        }catch (Exception e){
        }
    }