jiangping
2025-04-29 7f17cd5b503840c750e03ca9f51e780b7991f462
最新版本541200007
已修改9个文件
532 ■■■■ 文件已修改
server/startsh/DBbackup.sh 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/InoutRecord.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 398 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/startsh/DBbackup.sh
@@ -4,14 +4,6 @@
# 删除7天前的备份数据
find /usr/local/jars/dbbackup -name "antaiwuliu_*.sql" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
/usr/local/mysql/bin/mysqldump -h127.0.0.1 -uroot -pAtwl@2024 antaiwuliu > /usr/local/jars/dbbackup/antaiwuliu_0228JP.sql
# shellcheck disable=SC1036
delete from platform_books where id not int (298,297,296,294,290,293)
delete from platform_job a where not exist(select b.id from platform_books b where b.job_id=a.id and b.id in (298,297,296,294,290,293))
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -411,15 +411,44 @@
         int invalid =9;
    }
    /**
     *   0=访客车辆-访客车辆
     *   1=wms推送的物流车辆(非自有车):货运车辆-外协运输车辆
     *   2= 市公司的预约入园车辆:货运车辆-市公司卸货车辆
     *   3= 安泰的预约入园车辆:货运车辆-加工烟卸货车辆
     *   4= 安泰公务车:公务车-安泰物流公务用车
     *   5= 安泰自有车:货运车辆-安泰物流货运车辆
     */
    public interface RetentionCarType{
        //车辆类型 0内部车辆 1相关方车辆 2访客车辆 3内运物流车 4外协车辆 5市公司卸货车
         int internal = 0;
         int relation = 1;
         int visitor = 2;
         int selfTruck = 3;
         int outTruck = 4;
         int cityComTruck = 5;
         int unknown = 6;
        //作业类型 0自有车卸货 1自有车装货 2外协车卸货 3外协车装货 4市公司外协车卸货
//         int internal = 0;
//         int relation = 1;
//         int visitor = 2;
//         int selfTruck = 3;
//         int outTruck = 4;
//         int cityComTruck = 5;
//         int unknown = 6;
        int fkCar = 0;//访客车辆-访客车辆
        int wxysCar = 1;//推送的物流车辆(非自有车):货运车辆-外协运输车辆
        int sgsxhCar = 2;//市公司的预约入园车辆:货运车辆-市公司卸货车辆
         int jgyxhCar = 3;//安泰的预约入园车辆:货运车辆-加工烟卸货车辆
         int atwlgwCar = 4;//安泰公务车:公务车-安泰物流公务用车
         int atwlzyCar = 5;//安泰自有车:货运车辆-安泰物流货运车辆
         int other = 6;//未知车辆
    }
    /**
     * 在场人员类型
     */
    public interface RetentionMemberType{
        //类型 0劳务访客 1普通访客 2内部员工 3车辆信息 4相关方人员 5货运司机
        int lwfk = 0;//0劳务访客
        int fk = 1;//1普通访客
        int internalMember = 2;//内部员工
         int car = 3;//车辆信息
         int relMember = 4;//相关方人员
         int driver = 5;//货运司机
    }
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java
@@ -194,6 +194,9 @@
    @ApiModelProperty(value = "一级分类主键", example = "1")
    @TableField(exist = false)
    private Integer catePId;
    @ApiModelProperty(value = "车辆业务类型关联categoryBizTYpe", example = "1")
    @TableField(exist = false)
    private Integer bizType;
    @ApiModelProperty(value = "分类名称", example = "1")
    @TableField(exist = false)
@@ -235,5 +238,18 @@
    @TableField(exist = false)
    private  List<ParkBook> parkBookList;
    @ApiModelProperty(value = "人脸照片")
    @TableField(exist = false)
    private String faceImg;
    @ApiModelProperty(value = "身份证号(MD4加密)")
    @TableField(exist = false)
    private String idcardNo;
    @ApiModelProperty(value = "证件显示信息")
    @TableField(exist = false)
    private String idcardDecode;
    @ApiModelProperty(value = "证件显示信息")
    @TableField(exist = false)
    private String memberCode;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
@@ -71,12 +71,13 @@
    @ApiModelProperty(value = "类型 0公司类型 1车辆类型")
     //@ExcelColumn(name="类型 0公司类型 1车辆类型")
    private Integer type;
    @ApiModelProperty(value = "业务类型 业务类型 0=访客车辆-访客车辆 ;" +
    @ApiModelProperty(value = "业务类型 " +
            "0=访客车辆-访客车辆 ;" +
            "1=wms推送的物流车辆(非自有车):货运车辆-外协运输车辆 ;" +
            "2=wms市公司的预约入园车辆:货运车辆-市公司卸货车辆;" +
            "3=wms、安泰的预约入园车辆:货运车辆-加工烟卸货车辆 ;" +
            "4=wms安泰公务车:公务车-安泰物流公务用车;" +
            "5=wms安泰自有车:货运车辆-安泰物流货运车辆' ")
            "2=市公司的预约入园车辆:货运车辆-市公司卸货车辆;" +
            "3=安泰的预约入园车辆:货运车辆-加工烟卸货车辆 ;" +
            "4=安泰公务车:公务车-安泰物流公务用车;" +
            "5=安泰自有车:货运车辆-安泰物流货运车辆 ")
    private Integer bizType;
    @ApiModelProperty(value = "父级编码(自关联)")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/InoutRecord.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -88,8 +89,8 @@
    @ExcelColumn(name="车辆业务类型")
    private Integer carBizType;
    @ApiModelProperty(value = "用户类型  0访客 1内部人员 2相关方人员 3货运司机", example = "1")
    @ExcelColumn(name="用户类型  0访客 1内部人员 2相关方人员 3货运司机")
    @ApiModelProperty(value = "用户类型 0劳务访客 1普通访客 2内部员工 3车辆信息 4相关方人员 5货运司机 ", example = "1")
    @ExcelColumn(name="用户类型   0劳务访客 1普通访客 2内部员工 3车辆信息 4相关方人员 5货运司机 ")
    private Integer memberType;
    @ApiModelProperty(value = "人员名称")
@@ -112,7 +113,10 @@
    @ApiModelProperty(value = "关联对象类型 0车辆 1人员 2访客申请记录 3访客报备申请记录 4月台作业记录", example = "1")
    @ExcelColumn(name="关联对象类型 0车辆 1人员 2访客申请记录 3访客报备申请记录 4月台作业记录")
    private Integer objType;
    @ApiModelProperty(value = "统计日期(2024-10-12 00:00:00)")
    @ExcelColumn(name="统计日期(2024-10-12 00:00:00)")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date timeInfo;
    @ApiModelProperty(value = "关联对象编码", example = "1")
    @ExcelColumn(name="关联对象编码")
    private Integer objId;
@@ -125,4 +129,16 @@
    @ExcelColumn(name="进出设备名称")
    private String deviceName;
    @ApiModelProperty(value = "人脸照片")
    @TableField(exist = false)
    private String faceImg;
    @ApiModelProperty(value = "身份证号(MD4加密)")
    @TableField(exist = false)
    private String idcardNo;
    @ApiModelProperty(value = "证件显示信息")
    @TableField(exist = false)
    private String idcardDecode;
    @ApiModelProperty(value = "证件显示信息")
    @TableField(exist = false)
    private String memberCode;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
@@ -52,9 +52,9 @@
    @ApiModelProperty(value = "健康码")
    private String imgurl;
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客 2内部员工 3车辆信息")
//    @ExcelColumn(name="人员类型" ,index = 5, valueMapping="0=劳务访客;1=普通访客;2=内部员工;3=车辆信息;",width = 8)
    //用户类型  0访客 1内部人员 2相关方人员 3货运司机
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客 2内部员工 3车辆信息 4相关方人员 5货运司机  ")
//    @ExcelColumn(name="人员类型" ,index = 5, valueMapping="0=劳务访客;1=普通访客;2=内部员工;3=车辆信息;4=相关方人员;5=货运司机",width = 8)
    private Integer type;
    @ApiModelProperty(value = " 类型 0相关方组织 1内部人员 2访客")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -140,6 +140,7 @@
    void auditApprove(AuditApproveDTO auditApproveDTO);
    void  visitLevel(Integer visitId);
    void  visitLevelForCarOut(Visits visits);
    void  visitCancel(Integer visitId);
    /**
     * 处理待审核、审核中、已审核的数据取消业务
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -1530,8 +1530,24 @@
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public  void  visitLevelForCarOut(Visits visits){
        visitLevelBiz(visits);
        visits.setRemark("跟随访客车辆离园自动签离");
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void  visitLevel(Integer visitId){
        Visits visits = visitsMapper.selectById(visitId);
        visits.setRemark("平台管理员手动签离成功");
        visitLevelBiz(visits);
        //产出在场人员信息
        retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                .eq(Retention::getType,Constants.memberType.visitor)
                .eq(Retention::getMemberId,visits.getMemberId()));
    }
    private void visitLevelBiz(Visits visits) {
        if(Objects.isNull(visits)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
@@ -1543,13 +1559,12 @@
        //调用海康强制签离
        BaseResponse response =  HKService.iccmSignoff(request);
//        BaseResponse response =  HKService.outVisitAppiontment(request);
        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.VisitStatus.signout)
                .eq(Visits::getId,visitId));
        //产出在场人员信息
        retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                .eq(Retention::getType,Constants.memberType.visitor)
                .eq(Retention::getMemberId,visits.getMemberId()));
        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda()
                .set(Visits::getStatus,Constants.VisitStatus.signout)
                .set(Visits::getRemark,visits.getRemark())
                .eq(Visits::getId,visits.getId()));
    }
    @Override
    public void  visitCancel(Integer visitId){
        Visits visits = visitsMapper.selectById(visitId);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -1,6 +1,7 @@
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;
@@ -24,15 +25,17 @@
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.VisitsService;
import com.doumee.service.business.impl.PlatformWarnEventServiceImpl;
import com.doumee.service.business.third.TmsService;
import com.doumee.service.business.third.model.request.TmsOrderInfoRequest;
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.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -89,6 +92,8 @@
    private PlatformJobMapper platformJobMapper;
    @Autowired
    private TmsService tmsService;
    @Autowired
    private VisitsService visitsService;
    @Autowired
    private PlatformWmsDetailMapper platformWmsDetailMapper;
    @Autowired
@@ -229,6 +234,7 @@
                    .last("limit 1" ));
            InoutRecord record = new InoutRecord();
            record.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime()));
            record.setTimeInfo(Utils.Date.getStart(record.getCreateDate()));
            record.setType(Constants.ONE);//人员
            record.setMemberType(Constants.ZERO);//默认为未知人员(访客)
            record.setIsdeleted(Constants.ZERO);
@@ -554,6 +560,7 @@
                delRetentionLis.add(visits.getMemberId());
                InoutRecord record = new InoutRecord();
                record.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime()));
                record.setTimeInfo(Utils.Date.getStart(record.getCreateDate()));
                record.setType(Constants.ONE);//人员
                record.setMemberType(Constants.ZERO);
                record.setIsdeleted(Constants.ZERO);
@@ -812,13 +819,15 @@
            List<CarEvent> list = new ArrayList<>();
            List<Retention> retentionList = new ArrayList<>();
            List<String> delRetentionList = new ArrayList<>();
            List<Integer> delMemberRetentionList = new ArrayList<>();
            InoutDayCount inoutDayCount = new InoutDayCount();
            List<InoutRecord> inoutRecordList = new ArrayList<>();
            for(EventParkInfoRequest request : events){
                if(request.getData() ==null ||StringUtils.isBlank(request.getData().getPlateNo())){
                    continue;
                }
                //封装事件信息表对象
                list.add(getParkEventModelByRequest(request,delRetentionList,retentionList,inoutDayCount));
                list.add(getParkEventModelByRequest(request,delRetentionList,retentionList,delMemberRetentionList,inoutDayCount,inoutRecordList));
            }
            if(list.size()>0){
                //插入门禁记录
@@ -830,9 +839,19 @@
                        .eq(Retention::getType,Constants.THREE)
                        .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::getMemberId,delMemberRetentionList));
            }
            if(retentionList.size()>0){
                //再插入最新的在厂人员
                retentionMapper.insert(retentionList);
            }
            if(inoutRecordList.size()>0){
                //再插入最新的人车出入明细
                inoutRecordMapper.insert(inoutRecordList);
            }
            dealInoutDayCountBiz(inoutDayCount);
            log.info("【海康停车场事件推送】========成功=======");
@@ -849,7 +868,243 @@
     * @param request
     * @return
     */
    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request, List<String> delRetentionList , List<Retention> retentionList,InoutDayCount inoutDayCount ) {
    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request
            , List<String> delRetentionList
            , List<Retention> retentionList
            , List<Integer> delMemberRetentionList
            , InoutDayCount inoutDayCount
            , List<InoutRecord> inoutRecordList) {
        CarEvent event =initCarEventModelByRequest(request);
        if(StringUtils.isNotBlank(event.getPlateNos())){
            //标记车辆进出记录
            List<Visits> visitsList = null;
                    InoutRecord carrecord = new InoutRecord();
            carrecord.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime()));
            carrecord.setTimeInfo(Utils.Date.getStart(carrecord.getCreateDate()));
            carrecord.setType(Constants.ZERO);//车辆
            carrecord.setIsdeleted(Constants.ZERO);
            carrecord.setObjType(Constants.ZERO);
            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)
                            .leftJoin(Company.class,Company::getId,Cars::getGroupId)
                            .leftJoin(Category.class,Category::getId,Cars::getCateId)
                            .leftJoin(Member.class,Member::getId,Cars::getMemberId)
                            .eq(Cars::getCode,event.getPlateNos())
                            .eq(Cars::getIsdeleted,Constants.ZERO)
                            .last(" limit 1"));
            if(carModel!=null){
                //0安泰公务车 1安泰自有物流车 2其它
                event.setMemberId(carModel.getMemberId());
                event.setCompanyId(carModel.getGroupId());
                //-----------------20250429改造----start---------------
                event.setCarType(carModel.getBizType());//车辆业务类型
                carrecord.setObjType(Constants.FOUR);
                carrecord.setMemberName(carModel.getMemberName());//司机
                carrecord.setMemberPhone(carModel.getMemberPhone());//司机
                carrecord.setObjId(carModel.getId());
                carrecord.setObjType(Constants.ZERO);
                carrecord.setFaceImg(carModel.getFaceImg());
                carrecord.setIdcardDecode(carModel.getIdcardDecode());
                carrecord.setIdcardNo(carModel.getIdcardNo());
                carrecord.setMemberCode(carModel.getMemberCode());
                carrecord.setCompanyId(carModel.getGroupId());
                carrecord.setCompanyName(carModel.getCompanyName());
                carrecord.setMemberType( Constants.RetentionMemberType.car);//只是车辆的记录
                if(carModel.getMemberId()!=null){
                    if(Constants.equalsInteger(carModel.getCompanyType(),Constants.ONE)){
                        //内部组织
                        carrecord.setMemberType(Constants.RetentionMemberType.internalMember);
                    }else{
                        //相关方组织
                        carrecord.setMemberType( Constants.RetentionMemberType.relMember);
                    }
                }
//              carrecord.setMemberPhone(carTypeJob.getDrivierPhone());
                //-----------------20250429改造----end---------------
            }
            if(event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other)){//如果为识别到车型
                PlatformJob carTypeJob = platformJobMapper.selectJoinOne(PlatformJob.class,
                        new MPJLambdaWrapper<PlatformJob>(). selectAll(PlatformJob.class)
                                .selectAs(PlatformGroup::getType,PlatformJob::getGroupType)
                                .leftJoin(PlatformGroup.class,PlatformGroup::getId,PlatformJob::getPlatformGroupId)
                                .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                                .orderByAsc(PlatformJob::getCreateDate)
                                .last(" limit 1"));
                if(carTypeJob!=null ) {
                    /**
                     * 如果非固定车辆,检查是否货运车辆
                     * 货运车辆优先级:
                     * 1、安泰自有车:货运车辆-安泰物流货运车辆(固定车辆上面已处理,此处不考虑)
                     * 2、wms推送的物流车辆(非自有车):货运车辆-外协运输车辆  对应grouptype为:安泰物流卸货 2
                     * 3、安泰的预约入园车辆:货运车辆-加工烟卸货车辆  对应grouptype为0安泰物流卸货 2市公司卸货
                     * 4、市公司的预约入园车辆:货运车辆-市公司卸货车辆
                     */
                    carrecord.setMemberName(carTypeJob.getDriverName());//司机
                    carrecord.setMemberPhone(carTypeJob.getDrivierPhone());//司机
                    carrecord.setObjId(carTypeJob.getId());
                    carrecord.setMemberId(carTypeJob.getDriverId());//司机编码
                    carrecord.setObjType(Constants.FOUR);
                    carrecord.setCompanyId(carTypeJob.getCompanyId());
                    carrecord.setCompanyName(carTypeJob.getCompanyNamePath());
                    carrecord.setMemberType(Constants.RetentionMemberType.car);
                    if(carModel.getMemberPhone()!=null || StringUtils.isNotBlank(carModel.getMemberName())){
                        //货运司机(如果司机手机号或者姓名不为空)
                        carrecord.setMemberType(Constants.RetentionMemberType.driver);
                    }
                    //如果非固定车辆,则查询是否货运车辆 作业类型 0自有车卸货 1自有车装货 2外协车卸货 3外协车装货 4市公司外协车卸货
                    if(Constants.equalsInteger(carTypeJob.getOrigin(),Constants.ONE)){
                        //如果是推送的wms非自有车
                        event.setCarType(Constants.RetentionCarType.wxysCar);//外协车
                    }else  if(Constants.equalsInteger(carTypeJob.getType(),Constants.FOUR)){
                        if(Constants.equalsInteger(carTypeJob.getGroupType(),Constants.TWO)){
                            ///安泰的预约入园车辆:货运车辆-加工烟卸货车辆
                            event.setCarType(Constants.RetentionCarType.jgyxhCar);//加工烟卸货车辆
                        }else  if(Constants.equalsInteger(carTypeJob.getGroupType(),Constants.TWO)){
                            //市公司的预约入园车辆:货运车辆-市公司卸货车辆
                            event.setCarType(Constants.RetentionCarType.sgsxhCar);//市公司卸货车辆
                        }
                    }
                }
            }
            //处理自有车自动签到业务
            dealSelTruckAutoSignBiz(request,event);
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){
                //如果是入厂放行
                delRetentionList.add(event.getPlateNos());
                delMemberRetentionList.add(event.getMemberId());
                retentionList.add(getRetentionModelByParkRequest(request,event));//在厂车辆信息
                inoutDayCount.setInCarNum(Constants.formatIntegerNum(inoutDayCount.getInCarNum())+1);
                carrecord.setInOrOut(Constants.ZERO);
            }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){
                //如果是出场放行
                delRetentionList.add(event.getPlateNos());
                delMemberRetentionList.add(event.getMemberId());
                inoutDayCount.setOutCarNum(Constants.formatIntegerNum(inoutDayCount.getOutCarNum())+1);
                carrecord.setInOrOut(Constants.ZERO);
            }
            //车辆进入记录对应业务类型
            if(event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other)){//如果为识别到车型
                //如果不是固定车 也不是货运车辆,则检查是否是访客车
                visitsList =  visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
                                .eq(Visits::getCarNos,event.getPlateNos())
                                .eq(Visits::getIsdeleted,Constants.ZERO )
                                .in(Visits::getStatus,Constants.VisitStatus.signin)//最近一个已到达或者已签离
                                .isNull(Visits::getParentId)
                                .orderByDesc(Visits::getId)
//                        .last("limit 1" )
                );
                if(visitsList!=null && visitsList.size()>0){
                    //最近使用该车的申请人(已到达)
                    event.setMemberId(visitsList.get(0).getMemberId());
                    event.setCarType(Constants.RetentionCarType.fkCar);
                    int index =0;
                    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.setCarBizType(Constants.RetentionCarType.fkCar);
                        copyObj.setMemberType(Constants.ZERO);
                        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)){
                            //如果是车辆出园区,访客申请自动签离
                            visitsService.visitLevelForCarOut(v);
                        }else{
                            //如果是进入园区,访客录入在园人员记录
                            retentionList.add(getRetentionModelByRequest(copyObj,request));
                        }
                    }
                }
            }
            //车辆进入记录对应业务类型
            if(event.getCarType() !=null &&  event.getCarType().equals(Constants.RetentionCarType.fkCar)) {
                //录入非访客类型车辆进出记录
                carrecord.setCarBizType(event.getCarType()==null?Constants.RetentionCarType.other:event.getCarType());
                if(Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.internalMember)
                    ||Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.relMember)
                    ||Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.driver)){
                    retentionList.add(getRetentionModelByRequest(carrecord,request));
                }
                inoutRecordList.add(carrecord);
            }
        }
        return event;
    }
    private void dealSelTruckAutoSignBiz(EventParkInfoRequest request, CarEvent event) {
        ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda()
                .eq(ParkBook::getCarCode,event.getPlateNos())
                .eq(ParkBook::getHkStatus,Constants.ONE )
                .eq(ParkBook::getIsdeleted,Constants.ZERO )
                .last("limit 1" ));
        if(cars!=null){
            event.setMemberId(cars.getMemberId());
            //自有车  查询当前是否有待签到的任务
            if(carsMapper.selectCount(new QueryWrapper<Cars>()
                    .lambda().eq(Cars::getCode,event.getPlateNos())
                    .eq(Cars::getType,Constants.ONE)
                    .eq(Cars::getIsdeleted,Constants.ZERO)
            )>Constants.ZERO){
                //查询车辆当前是否存在进行中的任务
                if( platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
                        .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getStatus,
                                Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                Constants.PlatformJobStatus.CALLED.getKey(),
                                Constants.PlatformJobStatus.WORKING.getKey(),
                                Constants.PlatformJobStatus.TRANSFERING.getKey(),
                                Constants.PlatformJobStatus.EXCEPTION.getKey()
                        )
                )==Constants.ZERO){//如果没进行中任务
                    PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
                            .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                            .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                            .in(PlatformJob::getStatus,
                                    Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(),
                                    Constants.PlatformJobStatus.WART_SIGN_IN.getKey()
                            )
                            .orderByAsc(PlatformJob::getCreateDate)
                            .last(" limit 1")
                    );
                    if(Objects.nonNull(platformJob)){
                        if(Constants.equalsInteger(platformJob.getType(),Constants.ONE)){
                            //如果是自有车装货自动签到
                            jobAutoSignBiz(platformJob);
                        }else  if(Constants.equalsInteger(platformJob.getType(),Constants.ZERO)){
                            //如果是自有车卸货 查询TMS合同状态,决定是否自动签到
                            checkTmsContractStatusBiz(platformJob);
                        }
                    }
                }
            }
        }
    }
    private CarEvent initCarEventModelByRequest(EventParkInfoRequest request) {
        CarEvent event = new CarEvent();
        event.setIsdeleted(Constants.ZERO);
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
@@ -887,7 +1142,7 @@
        event.setEventCmd(request.getData().getEventCmd());
        event.setCardNo(request.getData().getCardNo());
        event.setCarAttributeName(request.getData().getCarAttributeName());
        event.setCarType(Constants.RetentionCarType.unknown);//默认未登记车辆
        event.setCarType(Constants.RetentionCarType.other);//默认未登记车辆
        if(request.getData().getInResult()!=null && request.getData().getInResult().getRlsResult() !=null ){
            //放行方式
            event.setReleaseWay(request.getData().getInResult().getRlsResult().getReleaseWay());
@@ -900,116 +1155,6 @@
            //车辆和和车牌照片
            event.setVehiclePicUrl(getHkImgUrl(request.getData().getPicUrl().getVehiclePicUrl()));
            event.setPlatePicUrl(getHkImgUrl(request.getData().getPicUrl().getPlatePicUrl()));
        }
        if(StringUtils.isNotBlank(event.getPlateNos())){
            Cars carModel = carsMapper.selectJoinOne(Cars.class,new MPJLambdaWrapper<Cars>()
                            .selectAll(Cars.class )
                            .selectAs(Company::getType,Cars::getCompanyType)
                            .leftJoin(Company.class,Company::getId,Cars::getGroupId)
                            .eq(Cars::getCode,event.getPlateNos())
                            .eq(Cars::getIsdeleted,Constants.ZERO)
                            .last(" limit 1"));
            if(carModel!=null){
                //0安泰公务车 1安泰自有物流车 2其它
                event.setMemberId(carModel.getMemberId());
                event.setCompanyId(carModel.getGroupId());
                if(Constants.equalsInteger(carModel.getType(),Constants.ONE)){
                    event.setCarType(Constants.RetentionCarType.selfTruck);
                }else {
                    if(Constants.equalsInteger(carModel.getCompanyType(),Constants.ONE)){
                        event.setCarType(Constants.RetentionCarType.internal);//内部车辆
                    }else{
                        event.setCarType(Constants.RetentionCarType.relation);//相关方车辆
                    }
                }
            }
            PlatformJob carTypeJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
                            .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                            .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                            .orderByAsc(PlatformJob::getCreateDate)
                            .last(" limit 1"));
            if(carTypeJob!=null){
                //作业类型 0自有车卸货 1自有车装货 2外协车卸货 3外协车装货 4市公司外协车卸货
                if(Constants.equalsInteger(carTypeJob.getType(),Constants.FOUR)){
                    event.setCarType(Constants.RetentionCarType.cityComTruck);//市公司车辆
                }else if(Constants.equalsInteger(carTypeJob.getType(),Constants.TWO)
                        || Constants.equalsInteger(carTypeJob.getType(),Constants.THREE)){
                    event.setCarType(Constants.RetentionCarType.outTruck);//外协车
                }else{
                    event.setCarType(Constants.RetentionCarType.selfTruck);//自有车
                }
            }
            ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda()
                    .eq(ParkBook::getCarCode,event.getPlateNos())
                            .eq(ParkBook::getIsdeleted,Constants.ZERO )
                    .last("limit 1" ));
            if(cars!=null){
                event.setMemberId(cars.getMemberId());
                //自有车  查询当前是否有待签到的任务
                if(carsMapper.selectCount(new QueryWrapper<Cars>()
                        .lambda().eq(Cars::getCode,event.getPlateNos())
                        .eq(Cars::getType,Constants.ONE)
                        .eq(Cars::getIsdeleted,Constants.ZERO)
                )>Constants.ZERO){
                    //查询车辆当前是否存在进行中的任务
                    if( platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
                            .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                            .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                            .in(PlatformJob::getStatus,
                                    Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                    Constants.PlatformJobStatus.CALLED.getKey(),
                                    Constants.PlatformJobStatus.WORKING.getKey(),
                                    Constants.PlatformJobStatus.TRANSFERING.getKey(),
                                    Constants.PlatformJobStatus.EXCEPTION.getKey()
                            )
                    )==Constants.ZERO){//如果没进行中任务
                        PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
                                .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                                .in(PlatformJob::getStatus,
                                        Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(),
                                        Constants.PlatformJobStatus.WART_SIGN_IN.getKey()
                                )
                                .orderByAsc(PlatformJob::getCreateDate)
                                .last(" limit 1")
                        );
                        if(Objects.nonNull(platformJob)){
                            if(Constants.equalsInteger(platformJob.getType(),Constants.ONE)){
                                //如果是自有车装货自动签到
                                jobAutoSignBiz(platformJob);
                            }else  if(Constants.equalsInteger(platformJob.getType(),Constants.ZERO)){
                                //如果是自有车卸货 查询TMS合同状态,决定是否自动签到
                                checkTmsContractStatusBiz(platformJob);
                            }
                        }
                    }
                };
            }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(visits!=null){
                    //最近使用该车的申请人(已到达)
                    event.setMemberId(visits.getMemberId());
                    event.setCarType(Constants.RetentionCarType.visitor);
                }
            }
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){
                //如果是入厂放行
                delRetentionList.add(event.getPlateNos());
                retentionList.add(getRetentionModelByParkRequest(request,event));
                inoutDayCount.setInCarNum(Constants.formatIntegerNum(inoutDayCount.getInCarNum())+1);
            }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){
                //如果是出场放行
                delRetentionList.add(event.getPlateNos());
                inoutDayCount.setOutCarNum(Constants.formatIntegerNum(inoutDayCount.getOutCarNum())+1);
            }
        }
        return event;
    }
@@ -1055,8 +1200,28 @@
        }
        platformJobMapper.updateById(platformJob);
    }
    private Retention getRetentionModelByParkRequest(EventParkInfoRequest request,CarEvent event) {
    private Retention getRetentionModelByRequest(InoutRecord inoutRecord, EventParkInfoRequest request) {
        Retention retention = new Retention();
        retention.setIsdeleted(Constants.ZERO);
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        retention.setCode(inoutRecord.getMemberCode());
        retention.setIdcardNo(inoutRecord.getIdcardNo());
        retention.setIdcardDecode(inoutRecord.getIdcardDecode());
        retention.setName(inoutRecord.getMemberName());
        retention.setType(inoutRecord.getMemberType());
        retention.setCompanyId(inoutRecord.getCompanyId());
        retention.setCompanyName(inoutRecord.getCompanyName());
        retention.setEventCode(request.getEventType()+"");
        retention.setEventDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        retention.setFaceImg(inoutRecord.getFaceImg());
        retention.setPhone(inoutRecord.getMemberPhone());
        retention.setMemberId(inoutRecord.getMemberId());
        retention.setDeviceName(request.getSrcName());
        retention.setDeviceIndex(request.getSrcIndex());
        retention.setRemark("跟随车辆入园区");
        return retention;
    }
    private Retention getRetentionModelByParkRequest(EventParkInfoRequest request,CarEvent event  ) {
        Retention retention = new Retention();
        retention.setIsdeleted(Constants.ZERO);
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
@@ -1067,6 +1232,7 @@
        retention.setCompanyId(event.getCompanyId());
//        retention.setDeviceName(request.getSrcName());
//        retention.setDeviceIndex(request.getSrcIndex());
        return retention;
    }