From f05383c46370ec8c4f4b8b8165ffab3769dd06a2 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Wed, 19 Jun 2024 14:19:09 +0800
Subject: [PATCH] fix:路段定时任务提交

---
 screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java                  |   70 +++++++
 screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java          |   14 +
 screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java                    |   22 ++
 screen-job/src/main/java/com/moral/api/controller/PubController.java                       |   12 +
 screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java |  203 ++++++++++++++++++++++
 screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java                              |   62 ++++++
 screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java                        |   76 ++++++++
 screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml                      |   31 +++
 screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java            |   16 +
 9 files changed, 506 insertions(+), 0 deletions(-)

diff --git a/screen-job/src/main/java/com/moral/api/controller/PubController.java b/screen-job/src/main/java/com/moral/api/controller/PubController.java
index bf074cd..bc9dde8 100644
--- a/screen-job/src/main/java/com/moral/api/controller/PubController.java
+++ b/screen-job/src/main/java/com/moral/api/controller/PubController.java
@@ -54,6 +54,9 @@
     @Autowired
     private DeviceService deviceService;
 
+    @Autowired
+    private ManageCoordinateDetailService manageCoordinateDetailService;
+
     private final EmailSpringUtil emailSpringUtil;
     private final CityWeatherForecastService cityWeatherForecastService;
 
@@ -160,6 +163,15 @@
         return new ResultMessage();
     }
 
+    @GetMapping("insertCoordinateDetail")
+    @ApiOperation(value = "������������", notes = "������������")
+    public ResultMessage insertCoordinateDetail() {
+        String startTime ="2024-06-06 00:07:01";
+        String endTime ="2024-06-06 23:07:01";
+        manageCoordinateDetailService.insertCoordinateDetail(startTime,endTime);
+        return new ResultMessage();
+    }
+
 
     public static void main(String[] args) {
         String host = "https://pair.market.alicloudapi.com";
diff --git a/screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java b/screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java
new file mode 100644
index 0000000..2c0441d
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java
@@ -0,0 +1,62 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName CruiserDTO
+ * @date 2024.06.19 09:15
+ */
+@Data
+public class CruiserDTO {
+
+
+    /**
+     * ������������
+     */
+    private String time;
+
+    /**
+     * ������
+     */
+    @JsonProperty(value = "flylat")
+    private Double flyLat;
+
+    /**
+     * ������
+     */
+    @JsonProperty(value = "flylon")
+    private Double flyLon;
+
+
+    private String data;
+
+
+    private String state;
+
+
+    public CruiserDTO() {
+        this.state = "1"; // ������state������������������1
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        CruiserDTO cruiser = (CruiserDTO) o;
+        //���type���color ������������������������������������true
+        return Objects.equals(flyLat, cruiser.flyLat) &&
+                Objects.equals(flyLon, cruiser.flyLon);
+    }
+    @Override
+    public int hashCode() {
+        return Objects.hash(flyLat, flyLon);
+    }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java
new file mode 100644
index 0000000..2fedb24
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java
@@ -0,0 +1,76 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName ManageCoordinate
+ * @date 2024.06.19 09:13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ManageCoordinate extends Model<ManageCoordinate> {
+
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ������id
+     */
+    @TableId(value = "coordinate_id", type = IdType.AUTO)
+    private  Integer coordinateId;
+    /**
+     * ������������
+     */
+    private  String startPoint;
+    /**
+     * ������������
+     */
+    private  String endPoint;
+    /**
+     *������������
+     */
+    private  Integer isDel;
+    /**
+     * ������������
+     */
+    private Date createTime;
+    /**
+     * ������������
+     */
+    private Date  updateTime;
+
+    /**
+     * ���������id
+     *
+     */
+    private  Integer updateUserId;
+    /**
+     * ���������������
+     */
+    private  String updayeUserName;
+
+
+    private  Integer organizationId;
+
+    /**
+     * ���������������
+     */
+    private  String value;
+
+
+    /**
+     * ���������������������
+     */
+    private  String bdValue;
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java
new file mode 100644
index 0000000..e85b570
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java
@@ -0,0 +1,70 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName ManageCoordinateDetail
+ * @date 2024.06.19 09:21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ManageCoordinateDetail  extends Model<ManageCoordinateDetail> {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * ���������id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private  Integer id;
+
+    /**
+     * ������id
+     */
+    private  Integer coordinateId;
+    /**
+     * ������
+     */
+    private  Double longitude;
+    /**
+     *������
+     */
+    private  Double latitude;
+    /**
+     * ������������
+     */
+    private Date createTime;
+    /**
+     * ������������
+     */
+    private Date  updateTime;
+
+    /**
+     * ���������id
+     *
+     */
+    private  Integer updateUserId;
+    /**
+     * ���������������
+     */
+    private  String updayeUserName;
+
+
+    private String state;
+
+
+    @TableField(exist = false)
+    private  String code;
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java b/screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java
new file mode 100644
index 0000000..0199ec0
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java
@@ -0,0 +1,16 @@
+package com.moral.api.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.CruiserDTO;
+import com.moral.api.entity.ManageCoordinate;
+import com.moral.api.entity.ManageCoordinateDetail;
+
+public interface ManageCoordinateDetailMapper extends BaseMapper<ManageCoordinateDetail> {
+
+    List<ManageCoordinate> selectCoordinate();
+
+    List<CruiserDTO> getCruiserInfo(Map<String,Object> params);
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java b/screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java
new file mode 100644
index 0000000..cb3fb2d
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java
@@ -0,0 +1,14 @@
+package com.moral.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.ManageCoordinateDetail;
+
+public interface ManageCoordinateDetailService extends IService<ManageCoordinateDetail> {
+
+    /**
+     * ������������������
+     */
+    void insertCoordinateDetail(String startTime,String endTime);
+
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java
new file mode 100644
index 0000000..fb327c3
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java
@@ -0,0 +1,203 @@
+package com.moral.api.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.entity.CruiserDTO;
+import com.moral.api.entity.ManageCoordinate;
+import com.moral.api.entity.ManageCoordinateDetail;
+import com.moral.api.mapper.ManageCoordinateDetailMapper;
+import com.moral.api.service.ManageCoordinateDetailService;
+import com.moral.util.DateUtils;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName ManageCoordinateDetailServiceImpl
+ * @date 2024.06.19 09:23
+ */
+@Service
+@Slf4j
+public class ManageCoordinateDetailServiceImpl  extends ServiceImpl<ManageCoordinateDetailMapper, ManageCoordinateDetail> implements ManageCoordinateDetailService {
+
+
+    @Autowired
+    private ManageCoordinateDetailMapper manageCoordinateDetailMapper;
+
+
+    @Override
+    @Transactional
+    public void insertCoordinateDetail(String startTime,String endTime) {
+        HashMap<String, Object> params = new HashMap<>();
+
+        if (ObjectUtils.isEmpty(startTime)&&ObjectUtils.isEmpty(endTime)){
+            //������������������������
+             startTime = DateUtils.getDateStringOfDay(-1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+            //������������������
+             endTime = DateUtils.getCurDate(DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+        }
+        params.put("startTime",startTime);
+        params.put("endTime",endTime);
+
+        //������������������
+        List<ManageCoordinate> coordinates = manageCoordinateDetailMapper.selectCoordinate();
+        //���������������������
+        List<CruiserDTO> cruiserInfo = manageCoordinateDetailMapper.getCruiserInfo(params);
+        cruiserInfo = cruiserInfo.stream().distinct().collect(Collectors.toList());
+        List<ManageCoordinateDetail> result = new ArrayList<>();
+        for (ManageCoordinate coordinate : coordinates) {
+            String value = coordinate.getValue();
+            if (!ObjectUtils.isEmpty(value)){
+                List<Map<String, Object>> parse = (List<Map<String, Object>>) JSONArray.parse(value);
+
+                for (int i = 0; i < cruiserInfo.size(); i++) {
+                    CruiserDTO cruiserDTO = cruiserInfo.get(i);
+                    if (ObjectUtils.isEmpty(cruiserDTO)){
+                        continue;
+                    }
+                    Double flyLat = cruiserDTO.getFlyLat();
+                    Double flyLon = cruiserDTO.getFlyLon();
+                    if (ObjectUtils.isEmpty(flyLat)||ObjectUtils.isEmpty(flyLon)){
+                        continue;
+                    }
+                    boolean inPolygon = isInPolygon(flyLon, flyLat, parse);
+                    if (inPolygon){
+                        LambdaQueryWrapper<ManageCoordinateDetail> wr = new LambdaQueryWrapper<>();
+                        wr.eq(ManageCoordinateDetail::getLongitude,flyLon);
+                        wr.eq(ManageCoordinateDetail::getLatitude,flyLat);
+                        List<ManageCoordinateDetail> manageCoordinateDetails = manageCoordinateDetailMapper.selectList(wr);
+                        if (ObjectUtils.isEmpty(manageCoordinateDetails)){
+                            ManageCoordinateDetail rsDTO = new ManageCoordinateDetail();
+                            rsDTO.setLatitude(flyLat);
+                            rsDTO.setLongitude(flyLon);
+                            rsDTO.setState("2");
+                            rsDTO.setCreateTime(new Date());
+                            rsDTO.setUpdateTime(new Date());
+                            rsDTO.setCoordinateId(coordinate.getCoordinateId());
+                            result.add(rsDTO);
+                            cruiserInfo.remove(i);
+                            i--;
+                        }
+                    }
+                }
+
+            }
+        }
+        if(!CollectionUtils.isEmpty(result)){
+            this.saveBatch(result);
+//            log.info(result.size()+"");
+        }
+
+    }
+
+
+    /**
+     * ���������������������������������������������
+     * @param
+     * @param mapList ������������
+     * @return
+     */
+    public static boolean isInPolygon(Double X,Double Y,List<Map<String, Object>> mapList){
+
+
+        Point2D.Double point = new Point2D.Double(X, Y);
+        List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
+
+        for (Map<String, Object> param : mapList) {
+            //������
+            String lat = param.get("lat").toString();
+            //������
+            String lng = param.get("lng").toString();
+            Point2D.Double polygonPoint = new Point2D.Double(Double.parseDouble(lng),Double.parseDouble(lat));
+            pointList.add(polygonPoint);
+        }
+        return IsPtInPoly(point,pointList);
+
+    }
+
+    /**
+     * ������������������������������������������������������������������������������������������������������������������������true
+     * @param point ���������
+     * @param pts   ������������������
+     * @return      ������������������������true,������������false
+     */
+    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);
+            if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){
+                p1 = p2;
+                continue;
+            }
+
+            if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){
+                if(p.y <= Math.max(p1.y, p2.y)){
+                    if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){
+                        return boundOrVertex;
+                    }
+
+                    if(p1.y == p2.y){
+                        if(p1.y == p.y){
+                            return boundOrVertex;
+                        }else{//before ray
+                            ++intersectCount;
+                        }
+                    }else{
+                        double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;
+                        if(Math.abs(p.y - xinters) < precision){
+                            return boundOrVertex;
+                        }
+
+                        if(p.y < xinters){
+                            ++intersectCount;
+                        }
+                    }
+                }
+            }else{
+                if(p.x == p2.x && p.y <= p2.y){
+                    Point2D.Double p3 = pts.get((i+1) % N);
+                    if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){
+                        ++intersectCount;
+                    }else{
+                        intersectCount += 2;
+                    }
+                }
+            }
+            p1 = p2;
+        }
+
+        if(intersectCount % 2 == 0){//���������������������
+            return false;
+        } else { //���������������������
+            return true;
+        }
+    }
+}
diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
index 05cbeb5..9ae95c9 100644
--- a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
+++ b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
@@ -8,6 +8,7 @@
 import com.moral.api.service.HistoryHourlyService;
 import com.moral.api.service.HistoryMonthlyService;
 import com.moral.api.service.HistoryWeeklyService;
+import com.moral.api.service.ManageCoordinateDetailService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
@@ -32,6 +33,10 @@
 
     @Autowired
     private HistoryMonthlyService historyMonthlyService;
+
+
+    @Autowired
+    private ManageCoordinateDetailService manageCoordinateDetailService;
 
     //5������������������
     @XxlJob("insertHistoryFiveMinutely")
@@ -143,4 +148,21 @@
     }
 
 
+    /**
+     * ������������������
+     * @return
+     */
+    @XxlJob("manageCoordinateDetail")
+    public ReturnT manageCoordinateDetail(){
+        try {
+            manageCoordinateDetailService.insertCoordinateDetail(null,null);
+        } catch (Exception e) {
+            XxlJobHelper.log(e.getMessage());
+            return new ReturnT(ReturnT.FAIL_CODE, e.getMessage());
+        }
+        return ReturnT.SUCCESS;
+
+    }
+
+
 }
diff --git a/screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml b/screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml
new file mode 100644
index 0000000..ab7b9c5
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.ManageCoordinateDetailMapper">
+
+    <!-- ������������������������ -->
+    <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageCoordinateDetail">
+        <id column="id" property="id" />
+        <result column="coordinate_id" property="coordinateId" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_user_id" property="updateUserId" />
+        <result column="updaye_user_name" property="updayeUserName" />
+    </resultMap>
+
+
+    <select id="selectCoordinate" resultType="com.moral.api.entity.ManageCoordinate">
+        SELECT * FROM manage_coordinate WHERE  is_del =0
+    </select>
+
+    <select id="getCruiserInfo" resultType="com.moral.api.entity.CruiserDTO">
+        select  DATE_FORMAT(`time`, #{dateFormat}) AS time,value ->>'$.flylat' as flyLat,value ->>'$.flylon' as flyLon
+        from history_second_cruiser
+        WHERE
+        `time` <![CDATA[>=]]> #{startTime}
+        AND `time` <![CDATA[<=]]> #{endTime}
+        order by time
+    </select>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0