| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.doumee.config.DataSyncConfig; |
| | | import com.doumee.config.SpringContextUtil; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.haikang.model.HKConstants; |
| | | import com.doumee.core.haikang.model.param.request.CustomBroadcastRequest; |
| | | import com.doumee.core.haikang.model.param.request.TransparentChannelBodyRequest; |
| | | import com.doumee.core.haikang.model.param.request.TransparentChannelHeadRequest; |
| | | 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.*; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.*; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | | import com.doumee.core.utils.DateUtil; |
| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.yaml.snakeyaml.scanner.Constant; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | |
| | | private PlatformMapper platformMapper; |
| | | @Autowired |
| | | private PlatformDeviceMapper platformDeviceMapper; |
| | | @Autowired |
| | | private PlatformJobMapper platformJobMapper; |
| | | @Autowired |
| | | private PlatformWmsDetailMapper platformWmsDetailMapper; |
| | | @Autowired |
| | | private PlatformEventMapper platformEventMapper; |
| | | @Autowired |
| | | private PlatformLogMapper platformLogMapper; |
| | | /** |
| | | * 海康门禁事件推送 |
| | |
| | | } |
| | | //门禁事件集合 |
| | | List<EventPlatformCarsInfoRequest> events = param.getParams().getEvents(); |
| | | List<PlatformEvent> eventList = new ArrayList<>(); |
| | | for(EventPlatformCarsInfoRequest request : events){ |
| | | if( request.getData() ==null || request.getData().size()==0){ |
| | | continue; |
| | |
| | | } |
| | | //各车道车辆状态 |
| | | for(EventPlatformCarsStatusInfoRequest status : data.getHPVehicleStatus()){ |
| | | eventList.add(initPlatformEventModel(request,data,status));//封装事件(已月台通道为维度) |
| | | if(StringUtils.isBlank(status.getPlateNo())){ |
| | | continue;//如果车辆信息为空,不处理直接跳过 |
| | | } |
| | |
| | | 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())){ |
| | | //如果是车辆离开,不做相关自动完成作业业务处理 |
| | | /* if(job ==null && !Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ |
| | | continue;//如果没查到对应的作业或者作业并非作业中,不做业务处理 |
| | | } |
| | | if(Constants.equalsInteger(job.getType(), Constants.THREE) || Constants.equalsInteger(job.getType(), Constants.TWO)){ |
| | | //如果是wms推送的外协车辆外协车辆 |
| | | if(platformWmsDetailMapper.selectCount(new QueryWrapper<PlatformWmsDetail>().lambda() |
| | | .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) |
| | | .eq(PlatformWmsDetail::getJobId,job.getId()) |
| | | .ne(PlatformWmsDetail::getLockStatus,Constants.ONE)) >0){ |
| | | continue;//如果外协任务作业,合同号有未上锁的情况,不做自动完成作业逻辑处理,跳过不处理 |
| | | } |
| | | } |
| | | //如果是正在作业的状态,标记作业已完成 |
| | | update.setStatus(Constants.PlatformJobStatus.DONE.getKey());//作业已完成 |
| | | update.setDoneDate(update.getEditDate()); |
| | | |
| | | 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); |
| | | } |
| | | if(job.getStartDate() == null){ |
| | | update.setStartDate(update.getEditDate()); |
| | | } |
| | | update.setStatus(Constants.PlatformJobStatus.WORKING.getKey());//开始作业 |
| | | }else{ |
| | | continue;//其他状态不处理,跳过 |
| | | } |
| | | platformJobMapper.updateById(update);//更新作业状态 |
| | | dealPlatformJobLogBiz(update,status);//记录作业日志 |
| | | //暂时不做相关自动完成作业业务处理 |
| | | // dealPlatformJobLogBiz(update,status);//记录作业日志 |
| | | } |
| | | break;//只处理第一个数据状态 |
| | | } |
| | | } |
| | | if(eventList.size()>0){ |
| | | //生成事件 |
| | | platformEventMapper.insert(eventList); |
| | | } |
| | | result = "成功"; |
| | | log.error("【海康月台车辆状态事件推送】========成功======="); |
| | |
| | | return null; |
| | | } |
| | | |
| | | private PlatformEvent initPlatformEventModel(EventPlatformCarsInfoRequest request, EventPlatformCarsDataRequest data, EventPlatformCarsStatusInfoRequest status) { |
| | | PlatformEvent model = new PlatformEvent(); |
| | | model.setCreateDate(new Date()); |
| | | model.setIsdeleted(Constants.ZERO); |
| | | model.setEditDate(model.getCreateDate()); |
| | | model.setEventId(request.getEventId()); |
| | | // model.setRemark(JSONObject.toJSONString(request)); |
| | | model.setEventType(request.getEventType()); |
| | | model.setDataEventType(data.getEventType()); |
| | | model.setHappenTime(request.getHappenTime()); |
| | | model.setSrcIndex(request.getSrcIndex()); |
| | | model.setSrcType(request.getSrcType()); |
| | | model.setStatus(request.getStatus()); |
| | | model.setTimeout(request.getTimeout()); |
| | | model.setDateTime(data.getDateTime()); |
| | | model.setDataType(data.getDataType()); |
| | | model.setSendTime(data.getSendTime()); |
| | | model.setIpAddress(data.getIpAddress()); |
| | | model.setIpv6Address(data.getIpv6Address()); |
| | | model.setPortNo(data.getPortNo()); |
| | | model.setMacAddress(data.getMacAddress()); |
| | | model.setProtocol(data.getProtocol()); |
| | | model.setChannelId(data.getChannelID()); |
| | | model.setChannelName(data.getChannelName()); |
| | | model.setEventState(data.getEventState()); |
| | | model.setActivePostCount(data.getActivePostCount()); |
| | | model.setEventDescription(data.getEventDescription()); |
| | | model.setDeviceId(data.getDeviceID()); |
| | | model.setHpno(status.getHPNo()); |
| | | model.setMotionStatus(status.getMotionStatus()); |
| | | model.setPlateNo(status.getPlateNo()); |
| | | model.setVehicleDoorStatus(status.getVehicleDoorStatus()); |
| | | model.setStockStatus(status.getStockStatus()); |
| | | model.setBackgroundImageContent(status.getBackgroundImage()!=null?status.getBackgroundImage().getResourcesContent():null); |
| | | model.setPlateScore(status.getPlateScore()); |
| | | model.setPlatePictureContent(status.getPlatePicture()!=null?status.getPlatePicture().getResourcesContent():null); |
| | | return model; |
| | | } |
| | | |
| | | /** |
| | | * 记录月台作业日志 |
| | | * @param job |
| | | * @param status |
| | | */ |
| | | @Transactional |
| | | private void dealPlatformJobLogBiz(PlatformJob job,EventPlatformCarsStatusInfoRequest status) { |
| | | platformJobMapper.updateById(job);//更新作业状态 |
| | | PlatformLog log = new PlatformLog(); |
| | | log.setIsdeleted(Constants.ZERO); |
| | | log.setCreateDate(new Date()); |
| | |
| | | log.setObjId(job.getId()+""); |
| | | if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ |
| | | //如果是作业完成 |
| | | // log.setObjType(Constants.LOg); |
| | | log.setObjType(Constants.PlatformJobLogType.DONE.getKey()); |
| | | log.setTitle(Constants.PlatformJobLogType.DONE.getName()); |
| | | log.setContent(Constants.PlatformJobLogType.DONE.getInfo()); |
| | | //查询最后一次开始作业的日志 |
| | | 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()) |
| | | .eq(PlatformLog::getObjType,Constants.PlatformJobLogType.WORKING.getKey()) |
| | | .eq(PlatformLog::getJobId,job.getId()) |
| | | .orderByDesc(PlatformLog::getCreateDate) |
| | | .last(" limit 1"); |
| | | |
| | | .last(" limit 1")); |
| | | String v = Long.toString(job.getDoneDate().getTime() - lastBeginPlatform.getCreateDate().getTime() / 1000) ; |
| | | lastBeginPlatform.setParam3(v); |
| | | lastBeginPlatform.setParam2(DateUtil.getDate(lastBeginPlatform.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); |
| | | platformLogMapper.updateById(lastBeginPlatform);//更新上一次作业的完成时间和作业时长 |
| | | }else{ |
| | | //如果是作业中 |
| | | log.setParam1(DateUtil.getDate(lastBeginPlatform.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); |
| | | // log.setObjType(Constants.Jobl); |
| | | log.setObjType(Constants.PlatformJobLogType.WORKING.getKey()); |
| | | log.setTitle(Constants.PlatformJobLogType.WORKING.getName()); |
| | | log.setContent(Constants.PlatformJobLogType.WORKING.getInfo()); |
| | | log.setParam1(DateUtil.getDate(log.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); |
| | | } |
| | | |
| | | platformLogMapper.insert(log); |
| | | } |
| | | |
| | |
| | | */ |
| | | private void dealCarsInErrorPlatformBiz( PlatformJob model,EventPlatformCarsStatusInfoRequest status) { |
| | | //TODO-----------------处理车辆进入错误月台业务逻辑 |
| | | |
| | | List<PlatformDevice> deviceList = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda() |
| | | .eq(PlatformDevice::getPlatformId,model.getPlatformId()) |
| | | .eq(PlatformDevice::getIsdeleted,Constants.ZERO)); |
| | | if(deviceList ==null || deviceList.size() == 0){ |
| | | return; |
| | | } |
| | | String content ="车辆"+model.getCarCodeFront()+"停错月台了"; |
| | | List<String> broadcastList = new ArrayList<>(); |
| | | for(PlatformDevice device : deviceList){ |
| | | if(StringUtils.isNotBlank(device.getHkId())){ |
| | | continue; |
| | | } |
| | | if(Constants.equalsInteger(device.getType(),Constants.ZERO)){ |
| | | //如果是LED |
| | | TransparentChannelBodyRequest request = new TransparentChannelBodyRequest(); |
| | | TransparentChannelHeadRequest head = new TransparentChannelHeadRequest(); |
| | | head.setAbility("cld");//固定值 |
| | | head.setTreatyType("haixuan_led_net");//固定值 |
| | | head.setDeviceIndexCode(device.getHkId()); |
| | | request.setMethod("ControlLedGereral");//固定值 |
| | | request.setIndexCode(device.getHkId()); |
| | | request.setActionType(0); |
| | | request.setContent(content); |
| | | request.setOperationType(219);//固定值 |
| | | request.setRegionNo(1); |
| | | request.setRegionType(14); |
| | | request.setFontColor(1); |
| | | request.setCircleTimes(1);//循环次数 |
| | | request.setFontSize(16);// |
| | | request.setStayTime(1);//单位?? |
| | | HKService.transparentchannel(head,request); |
| | | }else if(Constants.equalsInteger(device.getType(),Constants.ZERO)){ |
| | | //如果是广播点 |
| | | broadcastList.add(device.getHkId()); |
| | | } |
| | | } |
| | | if(broadcastList.size()>0){ |
| | | CustomBroadcastRequest request = new CustomBroadcastRequest(); |
| | | request.setAudioPointIndexCode(broadcastList); |
| | | request.setPlayDuration(60);//单位秒 |
| | | request.setBroadCastMode("tts"); |
| | | request.setPriority(15); |
| | | request.setState(1);//播放/停止标识 1-播放,0-停止 |
| | | request.setPlayTtsContent(content); |
| | | HKService.customBroadcast(request); |
| | | } |
| | | |
| | | } |
| | | } |