From a28c013704c3545505f2940b3fd6f86a7bf4a87c Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Fri, 28 Jul 2023 13:33:43 +0800
Subject: [PATCH] fix:矩形调整

---
 screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java  |    6 +
 screen-api/src/main/resources/mapper/HistorySecondUavMapper.xml                    |    2 
 screen-api/src/main/java/com/moral/api/controller/UAVController.java               |  121 ++++++++++++++++++++++-----------------
 screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java |   12 +++-
 4 files changed, 83 insertions(+), 58 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/controller/UAVController.java b/screen-api/src/main/java/com/moral/api/controller/UAVController.java
index b97df8d..bf614b4 100644
--- a/screen-api/src/main/java/com/moral/api/controller/UAVController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/UAVController.java
@@ -86,30 +86,17 @@
         ArrayList<Double> flyLatList = new ArrayList<>();
         //������
         ArrayList<Double> flyLonList = new ArrayList<>();
-//        HashMap<String, Object> map = new HashMap<>();
-//        String mac ="p5dnd7a0243592";
-//        String time1 ="2023-05-14 10:40:00";
-//        String time2 ="2023-05-14 11:10:00";
-//        map.put("mac",mac);
-//        map.put("time1",time1);
-//        map.put("time2",time2);
-//        map.put("height",0.5);
-//        List<UAVResultDTO> uavResultDTOS = historySecondUavMapper.reList(map);
-//        QueryWrapper<HistorySecondUav> queryWrapper = new QueryWrapper<>();
-//        queryWrapper.select("value");
-//        queryWrapper.eq("mac",mac);
-//        queryWrapper.between("time",time1,time2);
-//        List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(queryWrapper);
         List<HistorySecondUav> historySecondUavs = historySecondUavMapper.reList(params);
         if (ObjectUtils.isEmpty(historySecondUavs)){
             return new ResultMessage(ResponseCodeEnum.TARGET_IS_NULL,"null");
         }
-
+        int ik=1;
         for (HistorySecondUav historySecondUav : historySecondUavs) {
             String value = historySecondUav.getValue();
             Map map1 = JSON.parseObject(value, Map.class);
             flyLatList.add(Double.parseDouble(map1.get("flylat").toString()));
             flyLonList.add(Double.parseDouble(map1.get("flylon").toString()));
+            historySecondUav.setId(ik++);
 
         }
         Double maxLat = Collections.max(flyLatList);
@@ -166,23 +153,8 @@
                 }
             }
         }
-        ArrayList<UAVResultDTO> uavResultDTOS1 = new ArrayList<>();
-        for (UAVGteForDTO uavGteForDTO : list) {
-            ArrayList<String[]> doubleArrayList = new ArrayList<>();
-            doubleArrayList.add(uavGteForDTO.getLeftTop());
-            doubleArrayList.add(uavGteForDTO.getLeftBottom());
-            doubleArrayList.add(uavGteForDTO.getRightTop());
-            doubleArrayList.add(uavGteForDTO.getRightBottom());
-//            UAVResultDTO result = getResult(doubleArrayList);
-//            uavResultDTOS1.add(result);
-        }
-        if (!ObjectUtils.isEmpty(uavResultDTOS1)){
-            return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),uavResultDTOS1);
-
-        }
-
-
         HashMap<String,List<String>> rsMap = new HashMap<>();
+        List<String>  stringList = new ArrayList<>();
         for (UAVGteForDTO uavGteForDTO : list) {
             ArrayList<String> list1 = new ArrayList<>();
             ArrayList<String[]> doubleArrayList = new ArrayList<>();
@@ -190,6 +162,12 @@
             doubleArrayList.add(uavGteForDTO.getLeftBottom());
             doubleArrayList.add(uavGteForDTO.getRightTop());
             doubleArrayList.add(uavGteForDTO.getRightBottom());
+            String[] leftTops = uavGteForDTO.getLeftTop();
+            String[] rightBottoms = uavGteForDTO.getRightBottom();
+            Double x1 = Double.parseDouble(leftTops[0]);
+            Double x2 = Double.parseDouble(rightBottoms[0]);
+            Double y1 = Double.parseDouble(leftTops[1]);
+            Double y2 = Double.parseDouble(rightBottoms[1]);
             //������������������
             for (int i = 0; i < historySecondUavs.size(); i++) {
                 HistorySecondUav historySecondUav = historySecondUavs.get(i);
@@ -198,32 +176,20 @@
                 String flylat = map1.get("flylat").toString();
                 String flylon = map1.get("flylon").toString();
                 //���������������������������
-                boolean flag = isInPolygon(flylon,flylat,doubleArrayList);
+                boolean flag = isInPolygon(flylon,flylat,x1,x2,y1,y2);
                 if (flag){
-                    list1.add(historySecondUav.getValue());
-                    historySecondUavs.remove(i);
+                    String time = DateUtils.dateToDateString(historySecondUav.getTime());
+                    //historySecondUavs.remove(i);
+                    if(!stringList.contains(time)){
+                        list1.add(historySecondUav.getValue());
+                        stringList.add(time);
+                    }
                 }
             }
             //���������������������
             String result = getResult(doubleArrayList);
             rsMap.put(result,list1);
-            }
-//            for (HistorySecondUav historySecondUav : historySecondUavs) {
-//                String value = historySecondUav.getValue();
-//                Map map1 = JSON.parseObject(value, Map.class);
-//                String flylat = map1.get("flylat").toString();
-//                String flylon = map1.get("flylon").toString();
-//                //���������������������������
-//                boolean flag = isInPolygon(flylon,flylat,doubleArrayList);
-//                if (flag){
-//                    historySecondUavs.remove(historySecondUav);
-//                    list1.add(historySecondUav.getValue());
-//                }
-//            }
-//            //���������������������
-//            String result = getResult(doubleArrayList);
-//            rsMap.put(result,list1);
-//        }
+        }
 
         //���������������������������������������
         ArrayList<UAVResultDTO> uavResultDTOS = new ArrayList<>();
@@ -405,8 +371,12 @@
                     ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
         //������������������
         List<UAVQueryTimeSlotDTO> dtos = historySecondUavService.queryTimeSlot(form);
+        if (ObjectUtils.isEmpty(dtos)){
+            return new ResultMessage(ResponseCodeEnum.TARGET_IS_NULL,null);
+        }
         //������vo���
         UAVQueryTimeSlotVOs vo = UAVQueryTimeSlotVOs.convert(dtos);
+
         //������������
         return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
     }
@@ -502,6 +472,40 @@
 
         return rsLon+"_"+rsLat;
 //        return uavResultDTO;
+    }
+
+
+    //���������������
+    public static UAVResultDTO getResults(ArrayList<String[]> doubleArrayList){
+        UAVResultDTO uavResultDTO = new UAVResultDTO();
+        int total = doubleArrayList.size();
+        double X = 0, Y = 0, Z = 0;
+        for (int i = 0; i < total; i++) {
+            double lat, lon, x, y, z;
+            String[] strings = doubleArrayList.get(i);
+            lon = Double.parseDouble(strings[0]) * Math.PI / 180;
+            lat = Double.parseDouble(strings[1]) * Math.PI / 180;
+            x = Math.cos(lat) * Math.cos(lon);
+            y = Math.cos(lat) * Math.sin(lon);
+            z = Math.sin(lat);
+            X += x;
+            Y += y;
+            Z += z;
+        }
+        X = X / total;
+        Y = Y / total;
+        Z = Z / total;
+        double Lon = Math.atan2(Y, X);
+        double Hyp = Math.sqrt(X * X + Y * Y);
+        double Lat = Math.atan2(Z, Hyp);
+
+        double rsLon = Lon * 180 / Math.PI;
+        double rsLat = Lat * 180 / Math.PI;
+        uavResultDTO.setFlyLon(rsLon);
+        uavResultDTO.setFlyLat(rsLat);
+
+//        return rsLon+"_"+rsLat;
+        return uavResultDTO;
     }
 
     /**
@@ -611,9 +615,7 @@
         double p_x =Double.parseDouble(X);
         double p_y =Double.parseDouble(Y);
         Point2D.Double point = new Point2D.Double(p_x, p_y);
-
         List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
-
         for (String[] strings : doubleArrayList) {
             double polygonPoint_x=Double.parseDouble(strings[0]);
             double polygonPoint_y=Double.parseDouble(strings[1]);
@@ -624,4 +626,17 @@
 
     }
 
+    public boolean isInPolygon(String X,String Y,double x1,double x2,double y1,double y2){
+        boolean result = false;
+        double x =Double.parseDouble(X);
+        double y =Double.parseDouble(Y);
+        if(x >= Math.min(x1, x2) && x <= Math.max(x1, x2) ){
+            if(y >= Math.min(y1, y2) && y <= Math.max(y1, y2)){
+                result = true;
+            }
+        }
+        return result;
+
+    }
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java b/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java
index bda0b44..ebdfc28 100644
--- a/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java
+++ b/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java
@@ -1,3 +1,4 @@
+/*
 package com.moral.api.exception.consumer;
 
 import com.moral.api.utils.AdjustDataUtils;
@@ -25,9 +26,11 @@
 import com.moral.api.websocket.CruiserWebSocketServer;
 import com.moral.constant.KafkaConstants;
 
+*/
 /*
  * ������������������������
- * */
+ * *//*
+
 @Component
 @Slf4j
 public class CruiserDataConsumer implements ConsumerSeekAware {
@@ -64,8 +67,10 @@
                     continue;
                 }
                 Double sourceDataD = Double.valueOf(String.valueOf(data.get(code)));
-                /*BigDecimal bg = new BigDecimal(sourceDataD);
-                bg = bg.setScale(2, BigDecimal.ROUND_FLOOR);*/
+                */
+/*BigDecimal bg = new BigDecimal(sourceDataD);
+                bg = bg.setScale(2, BigDecimal.ROUND_FLOOR);*//*
+
                 String sourceData = String.valueOf(sourceDataD);
                 //������������
                 //������������
@@ -112,3 +117,4 @@
 
     }
 }
+*/
diff --git a/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java b/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java
index 8fe36e2..bb8d4a2 100644
--- a/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java
+++ b/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java
@@ -1,3 +1,4 @@
+/*
 package com.moral.api.exception.consumer;
 
 import com.alibaba.fastjson.JSON;
@@ -22,13 +23,15 @@
 import java.util.Map;
 import java.util.concurrent.CopyOnWriteArraySet;
 
+*/
 /**
  * @ClassName SecondsDataConsumer1
  * @Description TODO
  * @Author ���������
  * @Date 2021/6/15 14:49
  * @Version TODO
- **/
+ **//*
+
 @Component
 @Slf4j
 public class SecondDataConsumer implements ConsumerSeekAware {
@@ -116,3 +119,4 @@
 
 }
 
+*/
diff --git a/screen-api/src/main/resources/mapper/HistorySecondUavMapper.xml b/screen-api/src/main/resources/mapper/HistorySecondUavMapper.xml
index 8756866..cda70d3 100644
--- a/screen-api/src/main/resources/mapper/HistorySecondUavMapper.xml
+++ b/screen-api/src/main/resources/mapper/HistorySecondUavMapper.xml
@@ -12,7 +12,7 @@
         </resultMap>
 
     <select id="reList" resultType="com.moral.api.entity.HistorySecondUav">
-        SELECT `value`
+        SELECT history_second_uav.time,`value`
         FROM history_second_uav WHERE mac = #{mac}
         AND batch = #{batch}
         HAVING abs(`value`->>'$.flyhig') <![CDATA[>=]]> #{height}

--
Gitblit v1.8.0