aijinhui
2023-10-21 cf695c6db30c07e2ea9783f31660936787f67eb9
推送入栏
已添加3个文件
已重命名6个文件
已修改5个文件
235 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/sy/controller/OilWallController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/domain/ArdAccessFence.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/domain/ArdOilWall.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdAccessFenceMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdOilWallMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/param/OilWallParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/ArdOilWallService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdOilWallServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/gps/GeoTools.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
        }
    }
}