| | |
| | | ((ArdSyCarDayServiceImpl)SpringUtils.getBean("ardSyCarDayServiceImpl")).insertArdSyCarDay(carId);//新增车辆上报时间 |
| | | Map<String,Object> result = ((ArdSyCarServiceImpl)SpringUtils.getBean("ardSyCarServiceImpl")).getArdSyCarAndDeptByCarId(carId);//查询车辆及部门 |
| | | if(result != null){ |
| | | //清淤开始---------- |
| | | /*try{ |
| | | String lng = (String) gpsMap.get("lng").toString();//获取经度 |
| | | String lat = (String) gpsMap.get("lat").toString();//获取纬度 |
| | | String carName = (String) gpsMap.get("carName");//获取车牌号 |
| | | String time = (String) gpsMap.get("time");//定位时间 |
| | | //时间状态 |
| | | Boolean timeType = true; |
| | | if(time==null || time == ""){ |
| | | timeType = false; |
| | | } |
| | | String deptNum = (String) result.get("deptId").toString();//获取部门ID |
| | | String deptName = (String) result.get("deptName");//获取部门名称 |
| | | String carModel = (String) result.get("carModel");//获取车辆模型 |
| | | Integer drct = (Integer) gpsMap.get("drct");//获取车辆模型 |
| | | Integer speed = (Integer) gpsMap.get("speed");//车速 |
| | | String reserved = (String) result.get("reserved_1");//rtu关联 |
| | | //rtu标识 |
| | | boolean rtuType = true; |
| | | if(reserved==null || reserved==""){ |
| | | //无锁 |
| | | rtuType = false; |
| | | } |
| | | //log.debug("定位数据:车辆carId:"+carId+"经度lng:"+lng+"纬度lat:"+lat); |
| | | //定义2维空间 |
| | | Point2D.Double point = new Point2D.Double(Double.parseDouble(lng), Double.parseDouble(lat)); |
| | | List<Point2D.Double> pts = new ArrayList<Point2D.Double>(); |
| | | //注入带锁车辆Bean |
| | | ArdAccessFenceService ardAccessFenceService = SpringUtils.getBean(ArdAccessFenceService.class); |
| | | //注入油点围栏Bean |
| | | ArdOilWallService ardOilWallService = SpringUtils.getBean(ArdOilWallService.class); |
| | | //注入报警计数Bean |
| | | ArdAccessNumService accessNumService = SpringUtils.getBean(ArdAccessNumService.class); |
| | | //注入电子锁Bean |
| | | ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); |
| | | //注入锁Bean |
| | | ArdSyCarLockService lockService = SpringUtils.getBean(ArdSyCarLockService.class); |
| | | //查询定位油车表中是否有该车辆 |
| | | ArdAccessFence ardAccessFence = ardAccessFenceService.queryAccess(carId); |
| | | //查询所有装油点围栏 |
| | | List<ArdOilWall> ardOilWalls = ardOilWallService.accessAll(); |
| | | //日期格式 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); |
| | | //如果没有说明车辆未进入装油点,需要匹配所有装油点围栏 |
| | | if(ardAccessFence==null){ |
| | | //车辆未进入装油点 |
| | | for (int i = 0; i < ardOilWalls.size(); i++) { |
| | | pts.clear(); |
| | | ArdOilWall ardOilWall = ardOilWalls.get(i); |
| | | String[] coord = ardOilWall.getCoord().split(","); |
| | | for (int j = 0; j < coord.length; j = j + 3) { |
| | | pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j+1]))); |
| | | } |
| | | if(GeoTools.IsPtInPoly(point, pts)){ |
| | | //进入装油点入库 |
| | | ArdAccessFence ardAccessFence1 = new ArdAccessFence(); |
| | | ardAccessFence1.setId(String.valueOf(UUID.randomUUID())); |
| | | ardAccessFence1.setCarId(carId); |
| | | ardAccessFence1.setCarName(carName); |
| | | ardAccessFence1.setDeptId(deptNum); |
| | | ardAccessFence1.setDeptName(deptName); |
| | | ardAccessFence1.setIntoShipmentId(ardOilWall.getId()); |
| | | ardAccessFence1.setIntoShipmentTime(time); |
| | | ardAccessFence1.setLng(lng); |
| | | ardAccessFence1.setLat(lat); |
| | | ardAccessFence1.setLastTime(time); |
| | | ardAccessFence1.setNowWallName("进入装油点:"+ardOilWall.getName()); |
| | | ardAccessFence1.setCarModel(carModel); |
| | | ardAccessFence1.setIsWarning(0); |
| | | ardAccessFence1.setDrct(drct); |
| | | ardAccessFence1.setIsAlarm(0); |
| | | ardAccessFenceService.access(ardAccessFence1); |
| | | if(rtuType){ |
| | | //mqtt发送既定Rtu状态 |
| | | feng(carId,"装油点",carRtuService,lockService); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }else { |
| | | //车速标记 |
| | | Boolean stop = true; |
| | | //判断车速 |
| | | if(rtuType){ |
| | | if(speed>5){ |
| | | //mqtt发送既定Rtu状态 |
| | | feng(carId,"施封",carRtuService,lockService); |
| | | stop = false; |
| | | } |
| | | } |
| | | //车辆有值优先判断是否为手动添加车辆 |
| | | if(ardAccessFence.getIsAlarm() == 0 || ardAccessFence.getIsAlarm() == null){ |
| | | //车辆非手动添加数据,判断是否有进入围栏ID |
| | | if(ardAccessFence.getIntoShipmentId()==null){ |
| | | //没有进入装油点,赋值经纬度 |
| | | ardAccessFence.setLng(lng); |
| | | ardAccessFence.setLat(lat); |
| | | //判断是否进入装油点围栏 |
| | | for (int i = 0; i < ardOilWalls.size(); i++) { |
| | | pts.clear(); |
| | | ArdOilWall ardOilWall = ardOilWalls.get(i); |
| | | String[] coord = ardOilWall.getCoord().split(","); |
| | | for (int j = 0; j < coord.length; j = j + 3) { |
| | | pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j+1]))); |
| | | } |
| | | if(GeoTools.IsPtInPoly(point, pts)){ |
| | | //进入装油点入库 |
| | | ardAccessFence.setIntoShipmentId(ardOilWall.getId()); |
| | | ardAccessFence.setIntoShipmentTime(time); |
| | | ardAccessFence.setNowWallName("进入装油点:"+ardOilWall.getName()); |
| | | ardAccessFence.setLastTime(time); |
| | | if(rtuType){ |
| | | if(stop){ |
| | | //mqtt发送既定Rtu状态 |
| | | feng(carId,"装油点",carRtuService,lockService); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | }else { |
| | | //如果有进入围栏ID,判断是否开出装油点 |
| | | String out = ardAccessFence.getOutShipmentId(); |
| | | //出装油点ID为空 |
| | | if(out == null){ |
| | | //车辆未开出装油点,判断是否开出装油点 |
| | | String into = ardAccessFence.getIntoShipmentId(); |
| | | ArdOilWall ardOilWall = ardOilWallService.one(into); |
| | | pts.clear(); |
| | | String[] coord = ardOilWall.getCoord().split(","); |
| | | for (int j = 0; j < coord.length; j = j + 3) { |
| | | pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j + 1]))); |
| | | } |
| | | if (!GeoTools.IsPtInPoly(point, pts)) { |
| | | //车辆开出装油点 |
| | | ardAccessFence.setOutShipmentId(into); |
| | | ardAccessFence.setOutShipmentTime(time); |
| | | ardAccessFence.setNowWallName("开出装油点:"+ardOilWall.getName()); |
| | | ardAccessFence.setLastTime(time); |
| | | ardAccessFence.setLng(lng); |
| | | ardAccessFence.setLat(lat); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | if(rtuType){ |
| | | //开出装油点围栏,发送上锁及施封命令 |
| | | feng(carId,"施封",carRtuService,lockService); |
| | | } |
| | | } |
| | | }else { |
| | | //车辆已经开出装油点,查看是否有卸油点ID |
| | | String unload = ardAccessFence.getIntoUnloadId(); |
| | | //如果unload为空,判断是否进入卸油点 |
| | | if (unload == null) { |
| | | //车辆未进入卸油点 |
| | | List<ArdOilWall> ardOilWallUpload = ardOilWallService.uploadAll(); |
| | | //是否在路上 |
| | | Boolean isRoad = true; |
| | | //判断是否进去卸油点 |
| | | for (int i = 0; i < ardOilWallUpload.size(); i++) { |
| | | pts.clear(); |
| | | ArdOilWall ardOilWall = ardOilWallUpload.get(i); |
| | | String[] coord = ardOilWall.getCoord().split(","); |
| | | for (int j = 0; j < coord.length; j = j + 3) { |
| | | pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j + 1]))); |
| | | } |
| | | if (GeoTools.IsPtInPoly(point, pts)) { |
| | | //进入卸油点,存入卸油点围栏ID |
| | | ardAccessFence.setIntoUnloadId(ardOilWall.getId()); |
| | | ardAccessFence.setIntoUnloadTime(time); |
| | | ardAccessFence.setLng(lng); |
| | | ardAccessFence.setLat(lat); |
| | | ardAccessFence.setNowWallName("进入卸油点:"+ardOilWall.getName()); |
| | | ardAccessFence.setLastTime(time); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | //已经进入卸油点,不在路上不需要停车报警 |
| | | isRoad = false; |
| | | if(rtuType){ |
| | | if(stop){ |
| | | //mqtt发送既定Rtu状态 |
| | | feng(carId,"卸油点",carRtuService,lockService); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | //不在卸油点就是在路上 |
| | | if(isRoad){ |
| | | //所在围栏名称赋null |
| | | ardAccessFence.setNowWallName("在路上"); |
| | | //如果在路上判断坐标是否与上次一样 |
| | | if(ardAccessFence.getLng().equals(lng) && ardAccessFence.getLat().equals(lat)){ |
| | | if(ardAccessFence.getLastTime()!=null){ |
| | | if(timeType){ |
| | | //如果坐标一样相减 |
| | | Date nowTime = sdf.parse(time); |
| | | Date lastTime = sdf.parse(ardAccessFence.getLastTime()); |
| | | Long diff = (nowTime.getTime() - lastTime.getTime())/1000; |
| | | ArdAccessNum list = accessNumService.queryNum(); |
| | | if(list!=null){ |
| | | int alarm = list.getAlarm(); |
| | | if(diff>=alarm){ |
| | | ardAccessFence.setIsWarning(1); |
| | | ardAccessFence.setAlarmLat(lat); |
| | | ardAccessFence.setAlarmLng(lng); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | } |
| | | } |
| | | }else { |
| | | log.debug(carId+"号车定位时间为空"); |
| | | } |
| | | }else { |
| | | ardAccessFence.setLastTime(time); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | } |
| | | }else { |
| | | //如果不一样更新坐标 |
| | | ardAccessFence.setLat(lat); |
| | | ardAccessFence.setLng(lng); |
| | | ardAccessFence.setLastTime(time); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | } |
| | | } |
| | | }else { |
| | | //车辆已经进入卸油点,判断是否已经开出卸油点 |
| | | ArdOilWall ardOilWall = ardOilWallService.one(unload); |
| | | pts.clear(); |
| | | String[] coord = ardOilWall.getCoord().split(","); |
| | | for (int j = 0; j < coord.length; j = j + 3) { |
| | | pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j + 1]))); |
| | | } |
| | | if (!GeoTools.IsPtInPoly(point, pts)) { |
| | | if(rtuType){ |
| | | //开出了卸油点围栏,发送上锁及施解封指令 |
| | | feng(carId,"施封",carRtuService,lockService); |
| | | } |
| | | //删除该条车辆数据 |
| | | ardAccessFenceService.delAccess(carId); |
| | | }else { |
| | | //未开出卸油点,更新经纬度保存 |
| | | ardAccessFence.setLng(lng); |
| | | ardAccessFence.setLat(lat); |
| | | ardAccessFence.setLastTime(time); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }else |
| | | if(ardAccessFence.getIsAlarm()==1){ |
| | | //1为手动添加车辆无需报警信息,更新位置即可 |
| | | ardAccessFence.setLng(lng); |
| | | ardAccessFence.setLat(lat); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | }else if(ardAccessFence.getIsAlarm() == 2){ |
| | | //2为手动添加报警车辆有报警,所在围栏名称赋null,排查报警信息,只需处理路上情况 |
| | | ardAccessFence.setNowWallName(null); |
| | | //如果在路上判断坐标是否与上次一样 |
| | | if(ardAccessFence.getLng().equals(lng) && ardAccessFence.getLat().equals(lat)){ |
| | | if(timeType){ |
| | | Date nowTime = sdf.parse(time); |
| | | Date lastTime = sdf.parse(ardAccessFence.getLastTime()); |
| | | Long diff = (nowTime.getTime() - lastTime.getTime())/1000; |
| | | ArdAccessNum list = accessNumService.queryNum(); |
| | | if(list!=null){ |
| | | int alarm = list.getAlarm(); |
| | | if(diff>=alarm){ |
| | | //报警字段为1提示报警 |
| | | ardAccessFence.setIsWarning(1); |
| | | ardAccessFence.setAlarmLat(lat); |
| | | ardAccessFence.setAlarmLng(lng); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | } |
| | | } |
| | | }else { |
| | | log.debug(carId+"号车定位时间为空"); |
| | | } |
| | | }else { |
| | | //如果不一样更新坐标 |
| | | ardAccessFence.setLat(lat); |
| | | ardAccessFence.setLng(lng); |
| | | ardAccessFence.setLastTime(time); |
| | | ardAccessFenceService.updAccess(ardAccessFence); |
| | | } |
| | | } |
| | | } |
| | | //清淤结束------------ |
| | | }catch(Exception e){ |
| | | |
| | | }*/ |
| | | |
| | | if(PositionContainer.getTankCarParkingAlarmTHread().get(carId) == null){ |
| | | if(PositionContainer.getTankCarParkingAlarmTHread().get(carId) == null){//异常停车线程 |
| | | Thread tankCarParkingAlarmThread = new Thread(){//创建线程判断罐车异常停车报警 |
| | | @Override |
| | | public void run() { |
| | |
| | | } |
| | | |
| | | |
| | | /*Thread autoProcessThread = new Thread(){//自动操控线程 |
| | | Thread autoProcessThread = new Thread(){//自动操控线程 |
| | | @Override |
| | | public void run() { |
| | | ((ArdTankLockProcessLogServiceImpl)SpringUtils.getBean("ardTankLockProcessLogServiceImpl")).autoProcessArdTankLockByLockId(ip, userId, password, gpsMap); |
| | | ((ArdTankLockProcessLogServiceImpl)SpringUtils.getBean("ardTankLockProcessLogServiceImpl")).autoProcessArdTankLockByLockId(gpsMap); |
| | | } |
| | | }; |
| | | autoProcessThread.start();*/ |
| | | autoProcessThread.start(); |
| | | |
| | | gpsMap.putAll(result); |
| | | String ancestors = (String) gpsMap.get("ancestors");//获取父级部门 |