ard-work/src/main/java/com/ruoyi/sy/controller/OilWallController.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/oil/controller/OilWallController.java ÐÞ¸Ä @@ -1,10 +1,15 @@ package com.ruoyi.oil.controller; package com.ruoyi.sy.controller; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.oil.domain.ArdOilWall; import com.ruoyi.oil.param.OilWallParam; import com.ruoyi.oil.service.ArdOilWallService; import com.ruoyi.sy.domain.ArdOilWall; import com.ruoyi.sy.param.OilWallParam; 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.system.service.ISysConfigService; import com.ruoyi.utils.result.Results; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; /** * @author Administrator @@ -23,6 +29,15 @@ @Autowired private ArdOilWallService ardOilWallService; @Autowired private IArdSyCarService carService; @Autowired private IArdSyUserService iArdSyUserService; @Autowired private ISysConfigService sysConfigService; @PostMapping("/add") @ApiOperation("æ·»å çµåå´æ ") @@ -59,4 +74,22 @@ return Results.succeed(ardOilWallService.query(oilWallParam)); } @GetMapping("/wallCar") @ApiOperation("ææè¿å ¥å´æ ç车è¾") public Results wallCar(){ //æ¥è¯¢ææå·²æè½½çè½¦è¾ List<ArdSyCar> carList = carService.all(); //è·å车è¾ä½ç½® String usersId = SecurityUtils.getUserId(); ArdSyUser ardSyUser = iArdSyUserService.userById(usersId); String syURL = sysConfigService.getSYURL(); for (int i = 0; i < carList.size(); i++) { String carId = carList.get(i).getCarId(); carService.getCarGPSBycarId(usersId,carId,syURL,ardSyUser); } return Results.succeed(); } } ard-work/src/main/java/com/ruoyi/sy/domain/ArdAccessFence.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.sy.domain; import lombok.Data; /** * @author Administrator */ @Data public class ArdAccessFence { private String id; private String carId; private String carName; private String deptId; private String deptName; private String lng; private String lat; private String time; } ard-work/src/main/java/com/ruoyi/sy/domain/ArdOilWall.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/oil/domain/ArdOilWall.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.oil.domain; package com.ruoyi.sy.domain; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -13,15 +13,16 @@ import com.gps31.push.netty.client.TcpClient; import com.gps31.push.util.MapUtil; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.sy.domain.ArdOilWall; import com.ruoyi.sy.service.impl.ArdOilWallServiceImpl; import com.ruoyi.sy.service.impl.ArdSyCarDayServiceImpl; import com.ruoyi.sy.service.impl.ArdSyCarServiceImpl; import com.ruoyi.utils.gps.GeoTools; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.awt.geom.Point2D; import java.util.*; /** * <p>Description: </p> @@ -72,12 +73,37 @@ Map<String,Object> gpsMap = pushMsg.getJsonMap(); /*String carName = MapUtil.getStrVal(gpsMap, "carName","");//è·å车çå· SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(new Date())); log.error(String.format(" ---->æ¶å°å®ä½æ°æ®:%s",JSON.toJSONString(gpsMap)));*/ System.out.println(sdf.format(new Date()));*/ // log.error(String.format(" ---->æ¶å°å®ä½æ°æ®:%s",JSON.toJSONString(gpsMap))); 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");//è·åé¨é¨åç§° //å®ä¹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]))); } if(GeoTools.IsPtInPoly(point, pts)){ //è¿å ¥äºå´æ å ¥åº } } gpsMap.putAll(result); String ancestors = (String) gpsMap.get("ancestors");//è·åç¶çº§é¨é¨ String[] ancestorsArray = ancestors.split(","); ard-work/src/main/java/com/ruoyi/sy/mapper/ArdAccessFenceMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,7 @@ package com.ruoyi.sy.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sy.domain.ArdAccessFence; public interface ArdAccessFenceMapper extends BaseMapper<ArdAccessFence> { } ard-work/src/main/java/com/ruoyi/sy/mapper/ArdOilWallMapper.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/oil/mapper/ArdOilWallMapper.java ÐÞ¸Ä @@ -1,7 +1,7 @@ package com.ruoyi.oil.mapper; package com.ruoyi.sy.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.oil.domain.ArdOilWall; import com.ruoyi.sy.domain.ArdOilWall; /** * @author Administrator ard-work/src/main/java/com/ruoyi/sy/param/OilWallParam.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/oil/param/OilWallParam.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.oil.param; package com.ruoyi.sy.param; import lombok.Data; ard-work/src/main/java/com/ruoyi/sy/service/ArdOilWallService.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/oil/service/ArdOilWallService.java ÐÞ¸Ä @@ -1,8 +1,8 @@ package com.ruoyi.oil.service; package com.ruoyi.sy.service; import com.ruoyi.oil.domain.ArdOilWall; import com.ruoyi.oil.param.OilWallParam; import com.ruoyi.sy.domain.ArdOilWall; import com.ruoyi.sy.param.OilWallParam; import java.util.List; @@ -15,4 +15,5 @@ int updOilWall(ArdOilWall ardOilWall); ArdOilWall one(String id); List<ArdOilWall> query(OilWallParam oilWallParam); List<ArdOilWall> all(); } ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
@@ -1,5 +1,6 @@ package com.ruoyi.sy.service; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.domain.ArdSyCarLock; import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.vo.CarLockVo; @@ -33,4 +34,5 @@ RtuVo updRtu(String carId); int updRtuCar(ArdSyCarRtu ardSyCarRtu); int access(ArdAccessFence ardAccessFence); } ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
@@ -4,6 +4,7 @@ import java.util.Map; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.domain.ArdSyUser; import com.ruoyi.utils.result.Results; @@ -143,4 +144,7 @@ * è·åéè¿èå´å ç车è¾ä¿¡æ¯(å¤è¾¹å½¢) * */ List<Map<String, Object>> getNearCarWithPolygon(SchedulingParam param); List<ArdSyCar> all(); } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdOilWallServiceImpl.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/oil/service/impl/ArdOilWallServiceImpl.java ÐÞ¸Ä @@ -1,10 +1,10 @@ package com.ruoyi.oil.service.impl; package com.ruoyi.sy.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.oil.domain.ArdOilWall; import com.ruoyi.oil.mapper.ArdOilWallMapper; import com.ruoyi.oil.service.ArdOilWallService; import com.ruoyi.oil.param.OilWallParam; import com.ruoyi.sy.domain.ArdOilWall; import com.ruoyi.sy.mapper.ArdOilWallMapper; import com.ruoyi.sy.service.ArdOilWallService; import com.ruoyi.sy.param.OilWallParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -46,4 +46,9 @@ .eq(oilWallParam.getType()!=null,"type",oilWallParam.getType()); return ardOilWallMapper.selectList(queryWrapper); } @Override public List<ArdOilWall> all() { return ardOilWallMapper.selectList(null); } } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
@@ -2,9 +2,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.domain.ArdSyCarLock; import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.mapper.ArdAccessFenceMapper; import com.ruoyi.sy.mapper.ArdSyCarLockMapper; import com.ruoyi.sy.mapper.ArdSyCarMapper; import com.ruoyi.sy.mapper.ArdSyCarRtuMapper; @@ -34,6 +36,8 @@ private ArdSyCarRtuMapper rtuMapper; @Autowired private ArdSyCarLockMapper lockMapper; @Autowired private ArdAccessFenceMapper ardAccessFenceMapper; @Override public List<CarVo> car() { @@ -160,6 +164,19 @@ 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<>(); for (int i = 0; i < ardSyCars.size(); i++) { ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -17,6 +17,7 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.gis.Point; import com.ruoyi.scheduling.domian.SchedulingParam; @@ -1163,4 +1164,12 @@ } return filteredList; } @Override public List<ArdSyCar> all() { QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>(); queryWrapper.ne("reserved_1",""); return ardSyCarMapper.selectList(queryWrapper); } } ard-work/src/main/java/com/ruoyi/utils/gps/GeoTools.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,69 @@ package com.ruoyi.utils.gps; import java.awt.geom.Point2D; import java.util.List; public class GeoTools { public static boolean IsPtInPoly(Point2D.Double point, List<Point2D.Double> pts){ int N = pts.size(); boolean boundOrVertex = true; //妿ç¹ä½äºå¤è¾¹å½¢çé¡¶ç¹æè¾¹ä¸ï¼ä¹ç®åç¹å¨å¤è¾¹å½¢å ï¼ç´æ¥è¿åtrue int intersectCount = 0;//cross points count of x double precision = 2e-10; //æµ®ç¹ç±»åè®¡ç®æ¶åä¸0æ¯è¾æ¶åç容差 Point2D.Double p1, p2;//neighbour bound vertices Point2D.Double p = point; //å½åç¹ p1 = pts.get(0);//left vertex for(int i = 1; i <= N; ++i){//check all rays if(p.equals(p1)){ return boundOrVertex;//p is an vertex } p2 = pts.get(i % N);//right vertex if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){//ray is outside of our interests p1 = p2; continue;//next ray left point } if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){//ray is crossing over by the algorithm (common part of) if(p.y <= Math.max(p1.y, p2.y)){//x is before of ray if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){//overlies on a horizontal ray return boundOrVertex; } if(p1.y == p2.y){//ray is vertical if(p1.y == p.y){//overlies on a vertical ray return boundOrVertex; }else{//before ray ++intersectCount; } }else{//cross point on the left side double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;//cross point of y if(Math.abs(p.y - xinters) < precision){//overlies on a ray return boundOrVertex; } if(p.y < xinters){//before ray ++intersectCount; } } } }else{//special case when ray is crossing through the vertex if(p.x == p2.x && p.y <= p2.y){//p crossing over p2 Point2D.Double p3 = pts.get((i+1) % N); //next vertex if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){//p.x lies between p1.x & p3.x ++intersectCount; }else{ intersectCount += 2; } } } p1 = p2;//next ray left point } if(intersectCount % 2 == 0){//å¶æ°å¨å¤è¾¹å½¢å¤ return false; } else { //奿°å¨å¤è¾¹å½¢å return true; } } }