ard-work/src/main/java/com/ruoyi/sy/controller/OilWallController.java
@@ -1,21 +1,29 @@ package com.ruoyi.sy.controller; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.domain.ArdOilWall; import com.ruoyi.sy.param.OilWallParam; import com.ruoyi.sy.service.ArdAccessFenceService; import com.ruoyi.sy.service.ArdOilWallService; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.domain.ArdSyUser; import com.ruoyi.sy.service.IArdSyCarService; import com.ruoyi.sy.service.IArdSyUserService; import com.ruoyi.sy.service.impl.ArdAccessFenceServiceImpl; import com.ruoyi.sy.service.impl.ArdOilWallServiceImpl; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.utils.gps.GeoTools; import com.ruoyi.utils.result.Results; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -38,6 +46,9 @@ @Autowired private ISysConfigService sysConfigService; @Autowired private ArdAccessFenceService ardAccessFenceService; @PostMapping("/add") @ApiOperation("添加电子围栏") @@ -91,5 +102,12 @@ return Results.succeed(); } @GetMapping("/accessAll") @ApiOperation("查询所有电子围栏") public Results accessAll(){ return Results.succeed(ardAccessFenceService.all()); } } ard-work/src/main/java/com/ruoyi/sy/domain/ArdAccessFence.java
@@ -14,9 +14,8 @@ private String deptName; private String lng; private String lat; private String time; private String intoShipment; private String intoShipmentTime; private String intoUnload; private String intoUnloadId; private String intoUnloadTime; } ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -16,10 +16,7 @@ import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.domain.ArdOilWall; import com.ruoyi.sy.domain.ArdSyCarLock; import com.ruoyi.sy.service.impl.ArdOilWallServiceImpl; import com.ruoyi.sy.service.impl.ArdSyCarDayServiceImpl; import com.ruoyi.sy.service.impl.ArdSyCarLockServiceImpl; import com.ruoyi.sy.service.impl.ArdSyCarServiceImpl; import com.ruoyi.sy.service.impl.*; import com.ruoyi.utils.gps.GeoTools; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -81,42 +78,98 @@ String carId = (String)gpsMap.get("carId"); ((ArdSyCarDayServiceImpl)SpringUtils.getBean("ardSyCarDayServiceImpl")).insertArdSyCarDay(carId);//新增车辆上报时间 Map<String,Object> result = ((ArdSyCarServiceImpl)SpringUtils.getBean("ardSyCarServiceImpl")).getArdSyCarAndDeptByCarId(carId);//查询车辆及部门 // log.error("---------------------"+result); if(result != null){ //清淤定位 //清淤入栏开始---------- String lng = (String) gpsMap.get("lng");//获取经度 String lat = (String) gpsMap.get("lat");//获取纬度 String carName = (String) gpsMap.get("carName");//获取车牌号 String time = (String) gpsMap.get("result");//定位时间 String deptNum = (String) result.get("deptId");//获取部门ID String deptName = (String) result.get("deptName");//获取部门名称 // String carId = "13"; // String lng = "124.74695492384757"; // String lat = "46.09510768522894"; // String carName = "黑E21397";//获取车牌号 // String time = "20231019161815";//定位时间 // String deptNum = "100";//获取部门ID // String deptName = "厂级";//获取部门名称 //定义2维空间 Point2D.Double point = new Point2D.Double(Double.parseDouble(lng), Double.parseDouble(lat)); List<Point2D.Double> pts = new ArrayList<Point2D.Double>(); //匹配全部围栏 List<ArdOilWall> ardOilWalls = ((ArdOilWallServiceImpl)SpringUtils.getBean("ArdOilWallServiceImpl")).all(); 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]))); //查询定位油车表中是否有该车辆 ArdAccessFence ardAccessFence = ((ArdAccessFenceServiceImpl)SpringUtils.getBean("ArdAccessFenceServiceImpl")).queryAccess(carId); //如果没有说明车辆未进入装油点,需要匹配所有装油点围栏 if(ardAccessFence==null){ //匹配全部装油点围栏 List<ArdOilWall> ardOilWalls = ((ArdOilWallServiceImpl)SpringUtils.getBean("ArdOilWallServiceImpl")).accessAll(); 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.setIntoShipment("进入装油点"); ardAccessFence1.setIntoShipmentTime(time); ardAccessFence1.setLng(lng); ardAccessFence1.setLat(lat); ((ArdAccessFenceServiceImpl)SpringUtils.getBean("ArdAccessFenceServiceImpl")).access(ardAccessFence1); break; } } if(GeoTools.IsPtInPoly(point, pts)){ //进入了围栏入库 ArdAccessFence ardAccessFence = new ArdAccessFence(); ardAccessFence.setId(String.valueOf(UUID.randomUUID())); ardAccessFence.setCarId(carId); ardAccessFence.setCarName(carName); ardAccessFence.setDeptId(deptNum); ardAccessFence.setDeptName(deptName); ardAccessFence.setIntoShipment("进入装油点"); ardAccessFence.setIntoShipmentTime(time); }else { String unload = ardAccessFence.getIntoUnloadId(); //如果unload为空,判断是否进入卸油点 if(unload==null){ //查询全部卸油点 List<ArdOilWall> ardOilWalls = ((ArdOilWallServiceImpl) SpringUtils.getBean("ArdOilWallServiceImpl")).uploadAll(); 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)) { //进入卸油点,存入卸油点围栏ID ardAccessFence.setIntoUnloadId(ardOilWall.getId()); ardAccessFence.setIntoUnloadTime(time); break; } } ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); ((ArdSyCarLockServiceImpl)SpringUtils.getBean("ArdSyCarLockServiceImpl")).access(ardAccessFence); ((ArdAccessFenceServiceImpl)SpringUtils.getBean("ArdAccessFenceServiceImpl")).updAccess(ardAccessFence); }else { //如果unload有值,则继续判断是否出了卸油点,匹配卸油点的唯一ID ArdOilWall ardOilWall = ((ArdOilWallServiceImpl) SpringUtils.getBean("ArdOilWallServiceImpl")).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)) { //开出了卸油点围栏,删除该条车辆数据 ((ArdAccessFenceServiceImpl) SpringUtils.getBean("ArdAccessFenceServiceImpl")).delAccess(carId); }else { //未开出卸油点,更新经纬度保存 ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); ((ArdAccessFenceServiceImpl)SpringUtils.getBean("ArdAccessFenceServiceImpl")).updAccess(ardAccessFence); } } } //清淤入栏结束------------ gpsMap.putAll(result); String ancestors = (String) gpsMap.get("ancestors");//获取父级部门 String[] ancestorsArray = ancestors.split(","); ard-work/src/main/java/com/ruoyi/sy/service/ArdAccessFenceService.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.sy.service; import com.ruoyi.sy.domain.ArdAccessFence; import java.util.List; public interface ArdAccessFenceService { int access(ArdAccessFence ardAccessFence); ArdAccessFence queryAccess(String carId); int updAccess(ArdAccessFence ardAccessFence); int delAccess(String carId); List<ArdAccessFence> all(); } ard-work/src/main/java/com/ruoyi/sy/service/ArdOilWallService.java
@@ -15,5 +15,6 @@ int updOilWall(ArdOilWall ardOilWall); ArdOilWall one(String id); List<ArdOilWall> query(OilWallParam oilWallParam); List<ArdOilWall> all(); List<ArdOilWall> accessAll(); List<ArdOilWall> uploadAll(); } ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
@@ -34,5 +34,5 @@ RtuVo updRtu(String carId); int updRtuCar(ArdSyCarRtu ardSyCarRtu); int access(ArdAccessFence ardAccessFence); } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdAccessFenceServiceImpl.java
New file @@ -0,0 +1,55 @@ package com.ruoyi.sy.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.mapper.ArdAccessFenceMapper; import com.ruoyi.sy.service.ArdAccessFenceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class ArdAccessFenceServiceImpl implements ArdAccessFenceService { @Autowired private ArdAccessFenceMapper ardAccessFenceMapper; @Override public int access(ArdAccessFence ardAccessFence) { int num = 0; String carId = ardAccessFence.getCarId(); QueryWrapper<ArdAccessFence> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); ArdAccessFence ardAccessFence1 = ardAccessFenceMapper.selectOne(queryWrapper); if(ardAccessFence1==null){ num = ardAccessFenceMapper.insert(ardAccessFence); } return num; } @Override public ArdAccessFence queryAccess(String carId) { QueryWrapper<ArdAccessFence> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); return ardAccessFenceMapper.selectOne(queryWrapper); } @Override public int updAccess(ArdAccessFence ardAccessFence) { return ardAccessFenceMapper.updateById(ardAccessFence); } @Override public int delAccess(String carId) { QueryWrapper<ArdAccessFence> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); return ardAccessFenceMapper.delete(queryWrapper); } @Override public List<ArdAccessFence> all() { return ardAccessFenceMapper.selectList(null); } } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdOilWallServiceImpl.java
@@ -48,7 +48,16 @@ } @Override public List<ArdOilWall> all() { return ardOilWallMapper.selectList(null); public List<ArdOilWall> accessAll() { QueryWrapper<ArdOilWall> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type","1"); return ardOilWallMapper.selectList(queryWrapper); } @Override public List<ArdOilWall> uploadAll() { QueryWrapper<ArdOilWall> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type","2"); return ardOilWallMapper.selectList(queryWrapper); } } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
@@ -36,8 +36,7 @@ private ArdSyCarRtuMapper rtuMapper; @Autowired private ArdSyCarLockMapper lockMapper; @Autowired private ArdAccessFenceMapper ardAccessFenceMapper; @Override public List<CarVo> car() { @@ -164,18 +163,6 @@ return ardSyCarMapper.updateById(ardSyCar); } @Override public int access(ArdAccessFence ardAccessFence) { int num = 0; String carId = ardAccessFence.getCarId(); QueryWrapper<ArdAccessFence> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); ArdAccessFence ardAccessFence1 = ardAccessFenceMapper.selectOne(queryWrapper); if(ardAccessFence1==null){ num = ardAccessFenceMapper.insert(ardAccessFence); } return num; } public List<CarVo> carAnalysis(List<ArdSyCar> ardSyCars){ List<CarVo> list = new ArrayList<>();