jiangping
2025-05-09 e4ed89aae12459bd54fd3d53a7a46ce48f74e37f
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -1,7 +1,6 @@
package com.doumee.service.business.impl.hksync;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.C;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
@@ -25,7 +24,6 @@
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.web.reqeust.SavePlatformWarnEventDTO;
import com.doumee.service.business.CategoryService;
import com.doumee.service.business.VisitsService;
import com.doumee.service.business.impl.PlatformWarnEventServiceImpl;
import com.doumee.service.business.third.TmsService;
@@ -33,9 +31,7 @@
import com.doumee.service.business.third.model.response.TmsOrderInfoResponse;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.ftp.FTP;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -284,9 +280,9 @@
                            inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//相关方出场人次
                        }
                    }
                }
                if(record.getMemberType()!=null){
                    inoutRecordList.add(record);
                    if(record.getMemberType()!=null){
                        inoutRecordList.add(record);
                    }
                }
            }
        }
@@ -573,7 +569,7 @@
                record.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime()));
                record.setTimeInfo(Utils.Date.getStart(record.getCreateDate()));
                record.setType(Constants.ONE);//人员
                record.setMemberType(Constants.ZERO);
                record.setMemberType(Constants.RetentionMemberType.fk);
                record.setIsdeleted(Constants.ZERO);
                record.setMemberName(visits.getName());
                record.setObjId(visits.getId());
@@ -584,10 +580,12 @@
                record.setInOrOut(Constants.ZERO);
                record.setHkEventId(request.getEventId());
                record.setHkId(visits.getHkId());
                record.setDeviceName((request.getData()!=null &&request.getData().getParamValues()!=null)?
                        request.getData().getParamValues().getSrcName():request.getSrcName());
                //如果是访客通行
                if(request.getData()!=null&&request.getData().getParamValues()!=null &&
                        StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){
                    //如果是访客登记,录入人员的在场数据记录
                    //如果是访客进入,录入人员的在场数据记录
                    Retention r = getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType());
                    r.setCarNo(request.getData().getParamValues().getPlateNos());
                    r.setAccessType(request.getData().getParamValues().getAccessType());
@@ -595,11 +593,48 @@
                    r.setDeviceIndex(request.getData().getParamValues().getSrcIndex());
                    retentionList.add(r);
                    inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1);
                    record.setInOrOut(Constants.ZERO);//进入园区
                }
                if(request.getData()!=null&&request.getData().getParamValues()!=null &&
                         !StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){
                        !StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){
                    inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1);
                    record.setInOrOut(Constants.ONE);
                }
                if( request.getData().getParamValues()!=null
                        && StringUtils.isNotBlank(request.getData().getParamValues().getPlateNos())
                        && StringUtils.isNotBlank(request.getData().getParamValues().getParkIndex())){
                    //如果是停车场事件,记录车辆类型
                    Category category = null;
                    record.setCarCode(request.getData().getParamValues().getPlateNos());
                    if(StringUtils.isNotBlank(record.getCarCode())){
                        category = categoryMapper.selectJoinOne(Category.class, new MPJLambdaWrapper<Category>()
                                .selectAll(Category.class)
                                .select("t4.name",Category::getParentName)
                                .leftJoin("category t4 on t.parent_id=t4.id")
                                .eq(Category::getIsdeleted,Constants.ZERO)
                                .eq(Category::getBizType,Constants.RetentionCarType.fkCar)
                                .last("limit 1"));
                        if(category ==null){
                            category = new Category();
                            category.setName("访客车辆");
                        }
                        category.setParentName(StringUtils.defaultString(category.getParentName(),"访客车辆"));
                    }
                    record.setCarBizType(Constants.RetentionCarType.fkCar);
                    record.setCategoryId(category.getId());
                    record.setDeviceName(request.getData().getParamValues().getGateName());
                    record.setCategoryName(category.getName());
                    record.setCategoryParentId(category.getParentId());
                    record.setCategoryParentName(category.getParentName());
                    if(Constants.equalsInteger(record.getInOrOut(),Constants.ONE)){
                        record.setRemark("访客跟随车辆离园并自动签离");
                        try {
                            //访客申请自动签离
                            visitsService.visitLevelForCarOut(visits);
                        }catch (Exception e){
                            log.error("访客跟随车辆出园自动签离失败:==========="+e.getMessage());
                        }
                    }
                }
                inoutRecordList.add(record);
            }
@@ -665,6 +700,10 @@
        event.setSrcParentIndex(request.getSrcParentIndex());
        event.setSrcName((request.getData()!=null &&request.getData().getParamValues()!=null)?
                request.getData().getParamValues().getSrcName():request.getSrcName());
        if(StringUtils.isBlank(event.getSrcName())){
            event.setSrcName((request.getData()!=null &&request.getData().getParamValues()!=null)?
                    request.getData().getParamValues().getGateName()+ request.getData().getParamValues().getParkIndex():request.getSrcName());
        }
        event.setSrcIndex(request.getSrcIndex());
        event.setSex(detail.getSex());
        event.setPurpose(request.getData().getVisitorInvoices().getVisitReason());
@@ -852,9 +891,11 @@
                        .in(Retention::getCarNo,delRetentionList));
            }
            if(delMemberRetentionList.size()>0){
                //先删除原有的在场人员(内部人员和访客)
                //先删除原有的在场人员(内部人员、相关方和访客)
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                        .in(Retention::getType,Constants.memberType.internal,Constants.memberType.visitor)
                        .in(Retention::getType,Constants.RetentionMemberType.internalMember
                                ,Constants.RetentionMemberType.relMember
                                ,Constants.RetentionMemberType.fk)
                        .in(Retention::getMemberId,delMemberRetentionList));
            }
            if(retentionList.size()>0){
@@ -890,11 +931,11 @@
        if(StringUtils.isNotBlank(event.getPlateNos())){
            //标记车辆进出记录
            List<Category> categoryList = categoryMapper.selectJoinList(Category.class, new MPJLambdaWrapper<Category>()
                        .selectAll(Category.class)
                        .select("t4.name",Category::getParentName)
                        .leftJoin("category t4 on t.parent_id=t4.id")
                        .eq(Category::getIsdeleted,Constants.ZERO)
                        .isNotNull(Category::getBizType));//查询所有带有业务类型的车辆分类编码
                    .selectAll(Category.class)
                    .select("t4.name",Category::getParentName)
                    .leftJoin("category t4 on t.parent_id=t4.id")
                    .eq(Category::getIsdeleted,Constants.ZERO)
                    .isNotNull(Category::getBizType));//查询所有带有业务类型的车辆分类编码
            List<Visits> visitsList = null;
            InoutRecord carrecord = new InoutRecord();
            carrecord.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime()));
@@ -906,27 +947,27 @@
            carrecord.setHkEventId(request.getEventId());
            carrecord.setCarCode(event.getPlateNos());
            Cars carModel = carsMapper.selectJoinOne(Cars.class,new MPJLambdaWrapper<Cars>()
                            .selectAll(Cars.class )
                            .selectAs(Company::getType,Cars::getCompanyType)
                            .selectAs(Member::getName,Cars::getMemberName)
                            .selectAs(Member::getIdcardDecode,Cars::getIdcardDecode)
                            .selectAs(Member::getCode,Cars::getMemberCode)
                            .selectAs(Member::getFaceImg,Cars::getFaceImg)
                            .selectAs(Member::getIdcardNo,Cars::getIdcardNo)
                            .selectAs(Member::getName,Cars::getMemberName)
                            .selectAs(Member::getPhone,Cars::getMemberPhone)
                            .selectAs(Company::getCompanyNamePath,Cars::getCompanyName)
                            .selectAs(Category::getBizType,Cars::getBizType)
                            .selectAs(Category::getName,Cars::getCateName)
                            .select("t4.id",Cars::getCatePId)
                            .select("t4.name",Cars::getCatePName)
                            .leftJoin(Company.class,Company::getId,Cars::getGroupId)
                            .leftJoin(Member.class,Member::getId,Cars::getMemberId)
                            .leftJoin(Category.class,Category::getId,Cars::getCateId)
                            .leftJoin("category t4 on t3.parent_id=t4.id")
                            .eq(Cars::getCode,event.getPlateNos())
                            .eq(Cars::getIsdeleted,Constants.ZERO)
                            .last(" limit 1"));
                    .selectAll(Cars.class )
                    .selectAs(Company::getType,Cars::getCompanyType)
                    .selectAs(Member::getName,Cars::getMemberName)
                    .selectAs(Member::getIdcardDecode,Cars::getIdcardDecode)
                    .selectAs(Member::getCode,Cars::getMemberCode)
                    .selectAs(Member::getFaceImg,Cars::getFaceImg)
                    .selectAs(Member::getIdcardNo,Cars::getIdcardNo)
                    .selectAs(Member::getName,Cars::getMemberName)
                    .selectAs(Member::getPhone,Cars::getMemberPhone)
                    .selectAs(Company::getCompanyNamePath,Cars::getCompanyName)
                    .selectAs(Category::getBizType,Cars::getBizType)
                    .selectAs(Category::getName,Cars::getCateName)
                    .select("t4.id",Cars::getCatePId)
                    .select("t4.name",Cars::getCatePName)
                    .leftJoin(Company.class,Company::getId,Cars::getGroupId)
                    .leftJoin(Member.class,Member::getId,Cars::getMemberId)
                    .leftJoin(Category.class,Category::getId,Cars::getCateId)
                    .leftJoin("category t4 on t3.parent_id=t4.id")
                    .eq(Cars::getCode,event.getPlateNos())
                    .eq(Cars::getIsdeleted,Constants.ZERO)
                    .last(" limit 1"));
            if(carModel!=null){
                //0安泰公务车 1安泰自有物流车 2其它
                event.setMemberId(carModel.getMemberId());
@@ -988,7 +1029,7 @@
                    carrecord.setCompanyId(carTypeJob.getCompanyId());
                    carrecord.setCompanyName(carTypeJob.getCompanyNamePath());
                    carrecord.setType(Constants.RetentionMemberType.car);
                    if(carModel.getMemberPhone()!=null || StringUtils.isNotBlank(carModel.getMemberName())){
                    if(carTypeJob.getDriverName()!=null || StringUtils.isNotBlank(carTypeJob.getDrivierPhone())){
                        //货运司机(如果司机手机号或者姓名不为空)
                        carrecord.setMemberType(Constants.RetentionMemberType.driver);
                    }
@@ -1038,7 +1079,7 @@
                carrecord.setInOrOut(Constants.ONE);
            }
            //车辆进入记录对应业务类型
            if(isCarInOrOutEvent(request) &&( event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other))){
            if( isCarInOrOutEvent(request) &&( event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other))){
                //如果未识别到车型,不是固定车 也不是货运车辆,则检查是否是访客车
                visitsList =  visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
                                .eq(Visits::getCarNos,event.getPlateNos())
@@ -1054,41 +1095,43 @@
                    event.setCarType(Constants.RetentionCarType.fkCar);
                    int index =0;
                    carrecord.setCarBizType(Constants.RetentionCarType.fkCar);
                    Category category =findCategoryByBizType(Constants.RetentionCarType.fkCar,"访客车辆","访客车辆",categoryList);
                    carrecord.setCategoryId(category.getId());
                    carrecord.setCategoryName(StringUtils.defaultString(category.getName(),"访客车辆"));
                    carrecord.setCategoryParentName(StringUtils.defaultString(category.getParentName(),"访客车辆"));
                    carrecord.setCategoryParentId(category.getParentId());
                    for(Visits v :visitsList){
                        delMemberRetentionList.add(event.getMemberId());
                        InoutRecord copyObj = new InoutRecord();
                        BeanUtils.copyProperties(carrecord,copyObj);
                        copyObj.setMemberId(v.getMemberId());
                        copyObj.setMemberName(v.getName());
                        copyObj.setMemberPhone(v.getPhone());
                        copyObj.setCompanyName(v.getCompanyName());
                        copyObj.setType(Constants.ONE);
                        copyObj.setRemark("访客跟随车辆【"+carrecord.getCarCode()+"】离园");
                        copyObj.setCarCode(index>0?null:carrecord.getCarCode());
                        copyObj.setMemberType(Constants.RetentionMemberType.fk);
                        inoutRecordList.add(copyObj);
                        index++;
                        if(Constants.equalsInteger(carrecord.getInOrOut(),Constants.ONE)){
                            //如果是车辆出园区 统计访客进入数
                            inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1);
                            try {
                                //访客申请自动签离
                                visitsService.visitLevelForCarOut(v);
                                //统计签离数
                                inoutDayCount.setLeaveVisitorNum(Constants.formatIntegerNum(inoutDayCount.getLeaveVisitorNum())+1);
                            }catch (Exception e){
                                log.error("访客跟随车辆出园自动签离失败:==========="+e.getMessage());
                    if(1==2){
                        Category category =findCategoryByBizType(Constants.RetentionCarType.fkCar,"访客车辆","访客车辆",categoryList);
                        carrecord.setCategoryId(category.getId());
                        carrecord.setCategoryName(StringUtils.defaultString(category.getName(),"访客车辆"));
                        carrecord.setCategoryParentName(StringUtils.defaultString(category.getParentName(),"访客车辆"));
                        carrecord.setCategoryParentId(category.getParentId());
                        for(Visits v :visitsList){
                            delMemberRetentionList.add(event.getMemberId());
                            InoutRecord copyObj = new InoutRecord();
                            BeanUtils.copyProperties(carrecord,copyObj);
                            copyObj.setMemberId(v.getMemberId());
                            copyObj.setMemberName(v.getName());
                            copyObj.setMemberPhone(v.getPhone());
                            copyObj.setCompanyName(v.getCompanyName());
                            copyObj.setType(Constants.ONE);
                            copyObj.setRemark("访客跟随车辆【"+carrecord.getCarCode()+"】离园");
                            copyObj.setCarCode(index>0?null:carrecord.getCarCode());
                            copyObj.setMemberType(Constants.RetentionMemberType.fk);
                            inoutRecordList.add(copyObj);
                            index++;
                            if(Constants.equalsInteger(carrecord.getInOrOut(),Constants.ONE)){
                                //如果是车辆出园区 统计访客进入数
                                inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1);
                                try {
                                    //访客申请自动签离
                                    visitsService.visitLevelForCarOut(v);
                                    //统计签离数
                                    inoutDayCount.setLeaveVisitorNum(Constants.formatIntegerNum(inoutDayCount.getLeaveVisitorNum())+1);
                                }catch (Exception e){
                                    log.error("访客跟随车辆出园自动签离失败:==========="+e.getMessage());
                                }
                            }else{
                                //如果是进入园区,访客录入在园人员记录
                                retentionList.add(getRetentionModelByRequest(copyObj,request));
                                //统计访客出行数
                                inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1);
                            }
                        }else{
                            //如果是进入园区,访客录入在园人员记录
                            retentionList.add(getRetentionModelByRequest(copyObj,request));
                            //统计访客出行数
                            inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1);
                        }
                    }
                }
@@ -1287,9 +1330,9 @@
            param.setContractNumber(detail.getContractNum());
            TmsOrderInfoResponse response = tmsService.orderInfo(param);
            if(response!=null &&( StringUtils.equals(response.getOrderStatus(),"3")  )
                ||StringUtils.equals(response.getOrderStatus(),"4")
                ||StringUtils.equals(response.getOrderStatus(),"5")
                ||StringUtils.equals(response.getOrderStatus(),"6")){
                    ||StringUtils.equals(response.getOrderStatus(),"4")
                    ||StringUtils.equals(response.getOrderStatus(),"5")
                    ||StringUtils.equals(response.getOrderStatus(),"6")){
                //如果合同在途,则自动签到
                jobAutoSignBiz(platformJob);
            }
@@ -1391,20 +1434,20 @@
                    continue;
                }
                Integer  workStatus = 0;
                    if( data.getHPWorkingStatus() ==null ||  data.getHPWorkingStatus().size() ==0){
                        continue;//如何推送状态集合为空,不处理跳过
                    }
                    PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper<PlatformDevice>().lambda()
                            .eq(PlatformDevice::getDeviceId,request.getSrcIndex())
                            .eq(PlatformDevice::getIsdeleted,Constants.ZERO)
                            .last("limit 1"));
                    if(model ==null){
                        continue;//监控点未同步,跳过处理
                    }
                    //各车道车辆状态
                    for(EventPlatformStatusInfoRequest status : data.getHPWorkingStatus()){
                if( data.getHPWorkingStatus() ==null ||  data.getHPWorkingStatus().size() ==0){
                    continue;//如何推送状态集合为空,不处理跳过
                }
                PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper<PlatformDevice>().lambda()
                        .eq(PlatformDevice::getDeviceId,request.getSrcIndex())
                        .eq(PlatformDevice::getIsdeleted,Constants.ZERO)
                        .last("limit 1"));
                if(model ==null){
                    continue;//监控点未同步,跳过处理
                }
                //各车道车辆状态
                for(EventPlatformStatusInfoRequest status : data.getHPWorkingStatus()){
                    }
                }
            }
            result = "成功";
            log.info("【海康月台工作状态事件推送】========成功=======");
@@ -1521,7 +1564,7 @@
                                platformJobMapper.updateById(update);
                            }
                            dealPlatformContentForLeave(job);
                         }
                        }
                    }
                }else  if(StringUtils.equals(status.getMotionStatus(),"enter")){
                    //如果是车辆进入
@@ -1546,7 +1589,7 @@
                }else{
                    continue;//其他状态不处理,跳过
                }
                        //暂时不做相关自动完成作业业务处理
                //暂时不做相关自动完成作业业务处理
//                        dealPlatformJobLogBiz(update,status);//记录作业日志
            }
            if(eventList.size()>0){