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