jiangping
2024-08-28 42f57295f5fe64132c11a25f55cd25c3c8acf167
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -9,8 +9,7 @@
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsInfoRequest;
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
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.parks.*;
import com.doumee.core.haikang.model.param.request.event.visit.*;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
@@ -66,6 +65,12 @@
    private VisitsJoinMapper visitsMapper;
    @Autowired
    private RetentionMapper retentionMapper;
    @Autowired
    private PlatformMapper platformMapper;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    private PlatformJobMapper platformJobMapper;
    private PlatformLogMapper platformLogMapper;
    /**
     * 海康门禁事件推送
     * @param param
@@ -308,6 +313,7 @@
        return  null;
    }
    /**
     * 海康访客事件推送
     * @param param
@@ -769,5 +775,179 @@
        interfaceLogMapper.insert(hkMonitoryLogDO);
    }
    /**
     * 处理月台工作状态事件订阅后推送数据逻辑逻辑
     * @param param
     * @param response
     * @return
     */
    @Override
    public String dealPlatformStatusEvent(EventPlatformRequest 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<EventPlatformInfoRequest> events  = param.getParams().getEvents();
            List<Platform> list = new ArrayList<>();
            for(EventPlatformInfoRequest request : events){
                List<EventPlatformDataRequest>  dataList = request.getData();
                if(dataList ==null || dataList.size()==0){
                    continue;
                }
                Integer  workStatus = 0;
                for(EventPlatformDataRequest data : dataList){
                    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()){
                    }
                    break;//只处理第一个数据状态
                }
            }
            result = "成功";
            log.error("【海康月台工作状态事件推送】========成功=======");
        }catch (Exception e) {
            result = "失败"+e.getMessage();
            log.error("【海康月台工作状态事件推送】========失败=======:\n" + e.getMessage());
        }finally {
            saveInterfaceLog(param,"/business/hksync/push/platform/workstatus",result,false);//不计日志
        }
        return  null;
    }
    /**
     * 处理月台车辆状态事件订阅后推送数据逻辑逻辑
     * @param param
     * @param response
     * @return
     */
    @Override
    public  String dealPlatformCarsEvent(EventPlatformCarsRequest 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<EventPlatformCarsInfoRequest> events  = param.getParams().getEvents();
            for(EventPlatformCarsInfoRequest request : events){
                if( request.getData() ==null ||  request.getData().size()==0){
                    continue;
                }
                Integer  workStatus = 0;
                for(EventPlatformCarsDataRequest data :  request.getData()){
                    if( data.getHPVehicleStatus() ==null ||  data.getHPVehicleStatus().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(EventPlatformCarsStatusInfoRequest status : data.getHPVehicleStatus()){
                        if(StringUtils.isBlank(status.getPlateNo())){
                            continue;//如果车辆信息为空,不处理直接跳过
                        }
                        PlatformJob job = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
                                .eq(StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeFront,status.getPlateNo() )//前车牌号
                                .eq(!StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeBack,status.getPlateNo() )//后车牌号
                                .eq(PlatformJob::getIsdeleted,Constants.ZERO )
                                .last("limit 1 "));
                        PlatformJob update = new PlatformJob();
                        update.setId(job.getId());
                        update.setEditDate(new Date());
                        if(StringUtils.equals(status.getMotionStatus(),"leave")){
                            //如果是车辆离开
                            if(job ==null && !Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){
                                continue;//如果没查到对应的作业或者作业并非作业中,不做业务处理
                            }
                            //如果是正在作业的状态,标记作业已完成
                            update.setStatus(Constants.PlatformJobStatus.DONE.getKey());//作业已完成
                            update.setDoneDate(update.getEditDate());
                        }else  if(StringUtils.equals(status.getMotionStatus(),"enter")){
                            //如果是车辆进入
                            if(job ==null || !Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){
                                //说明车辆进错月台 或者还未叫号状态,发起警告
                                dealCarsInErrorPlatformBiz(job,status);
                            }
                            update.setStatus(Constants.PlatformJobStatus.WORKING.getKey());//开始作业
                        }else{
                            continue;//其他状态不处理,跳过
                        }
                        platformJobMapper.updateById(update);//更新作业状态
                        dealPlatformJobLogBiz(update,status);//记录作业日志
                    }
                    break;//只处理第一个数据状态
                }
            }
            result = "成功";
            log.error("【海康月台车辆状态事件推送】========成功=======");
        }catch (Exception e) {
            result = "失败"+e.getMessage();
            log.error("【海康月台车辆状态事件推送】========失败=======:\n" + e.getMessage());
        }finally {
            saveInterfaceLog(param,"/business/hksync/push/platform/workstatus",result,false);//不计日志
        }
        return  null;
    }
    /**
     * 记录月台作业日志
     * @param job
     * @param status
     */
    private void dealPlatformJobLogBiz(PlatformJob job,EventPlatformCarsStatusInfoRequest status) {
        PlatformLog log = new PlatformLog();
        log.setIsdeleted(Constants.ZERO);
        log.setCreateDate(new Date());
        log.setEditDate(log.getCreateDate());
        log.setJobId(job.getId());
        log.setObjId(job.getId()+"");
        if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){
            //如果是作业完成
//            log.setObjType(Constants.LOg);
            //查询最后一次开始作业的日志
            PlatformLog lastBeginPlatform = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda()
                    .eq(PlatformLog::getIsdeleted,Constants.ZERO)
                    .eq(PlatformLog::getObjType,Constants.PlatformJobStatus.WORKING.getKey())
                    .eq(PlatformLog::getJobId,job.getJobId())
                    .orderByDesc(PlatformLog::getCreateDate)
                    .last(" limit 1");
        }else{
            //如果是作业中
            log.setParam1(DateUtil.getDate(lastBeginPlatform.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
//            log.setObjType(Constants.Jobl);
        }
        platformLogMapper.insert(log);
    }
    /**
     * 处理车辆进入错误月台业务逻辑
     * @param model (月台设备关联信息)
     * @param status
     */
    private void dealCarsInErrorPlatformBiz( PlatformJob model,EventPlatformCarsStatusInfoRequest status) {
        //TODO-----------------处理车辆进入错误月台业务逻辑
    }
}