From 3bb15fc20653b796df0d83770bcb37ba3578b26d Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 18 二月 2025 10:04:43 +0800
Subject: [PATCH] 获取巡检记录

---
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/inspect/InspectCtrl.java |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 109 insertions(+), 4 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/inspect/InspectCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/inspect/InspectCtrl.java
index 26446d4..6e7c743 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/inspect/InspectCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/inspect/InspectCtrl.java
@@ -1,26 +1,30 @@
 package com.dy.pipIrrApp.inspect;
 
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.util.IDLongGenerator;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrApp.inspect.dto.Inspects;
+import com.dy.pipIrrApp.inspect.qo.QoInspect;
 import com.dy.pipIrrGlobal.pojoOp.OpeInspect;
 import com.dy.pipIrrGlobal.pojoOp.OpeTrack;
+import com.dy.pipIrrGlobal.voOp.VoInspect;
+import com.dy.pipIrrGlobal.voOp.VoTrackPoint;
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @author ZhuBaoMin
@@ -37,6 +41,9 @@
     private InspectSv inspectSv;
 
     private final IDLongGenerator idLongGenerator;
+
+    // 鍦扮悆鍗婂緞锛屽崟浣嶏細鍗冪背
+    private static final double EARTH_RADIUS = 6371.0;
 
     public InspectCtrl(IDLongGenerator idLongGenerator) {
         this.idLongGenerator = idLongGenerator;
@@ -56,6 +63,7 @@
             return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
+        JSONArray result_array = new JSONArray();
         if(list_Inspects != null && list_Inspects.size() > 0) {
             for (int i = 0; i < list_Inspects.size(); i++) {
                 Inspects inspects = list_Inspects.get(i);
@@ -87,6 +95,12 @@
                         return BaseResponseUtils.buildErrorMsg("宸℃璁板綍娣诲姞澶辫触");
                     }
 
+                    // 鏋勯�犺繑鍥炲��
+                    JSONObject inspect_job = new JSONObject();
+                    inspect_job.put("inspectorId", inspectorId.toString());
+                    inspect_job.put("inspectId", inspectId.toString());
+                    result_array.add(inspect_job);
+
                     for (int j = 0; j < tracks.size(); j++) {
                         tracks.get(j).setId(idLongGenerator.generate());
                         tracks.get(j).setInspectId(inspectId);
@@ -94,6 +108,11 @@
                     Integer rec = inspectSv.insertTracks(tracks);
                     if(rec == null || rec == 0) {
                         return BaseResponseUtils.buildErrorMsg("宸℃杞ㄨ抗娣诲姞澶辫触");
+                    }
+
+                    Double distance = Optional.ofNullable(getInspectDistance(inspectId)).orElse(0.0);
+                    if(distance > 0) {
+                        inspectSv.updateInspectDistance(inspectId, distance);
                     }
                 }else {
                     // 璇ュ贰妫�宸蹭笂浼犺繃璁板綍锛岀画浼�
@@ -114,11 +133,97 @@
                             return BaseResponseUtils.buildErrorMsg("宸℃杞ㄨ抗娣诲姞澶辫触");
                         }
                     }
+                    Double distance = Optional.ofNullable(getInspectDistance(inspectId)).orElse(0.0);
+                    if(distance > 0) {
+                        inspectSv.updateInspectDistance(inspectId, distance);
+                    }
                 }
+            }
+            if(result_array != null && result_array.size() > 0) {
+                return BaseResponseUtils.buildSuccess(result_array) ;
             }
             return BaseResponseUtils.buildSuccess() ;
         }
         return BaseResponseUtils.buildErrorMsg("鎮ㄦ彁浜ょ殑宸℃杞ㄨ抗涓虹┖");
     }
 
+    /**
+     * 鏌ヨ宸℃杞ㄨ抗
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "/getInspects")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoInspect>>> getInspects(QoInspect qo){
+
+        try{
+            QueryResultVo<List<VoInspect>> res = inspectSv.getInspects(qo);
+            return BaseResponseUtils.buildSuccess(res);
+        }catch (Exception e){
+            log.error("鑾峰彇宸℃鍒楄〃寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏍规嵁宸℃ID鑾峰彇杞ㄨ抗鎬昏窛绂�
+     * @param inspectId
+     * @return
+     */
+    public double getInspectDistance(Long inspectId) {
+        List<VoTrackPoint> points = inspectSv.getTrackPointsById(inspectId);
+        if(points == null || points.size() == 0) {
+            return 0.0;
+        }
+
+        double totalDistance = calculateTotalDistance(points);
+        return totalDistance;
+    }
+
+    // 璁$畻杞ㄨ抗鐨勬�昏窛绂�
+    public static double calculateTotalDistance(List<VoTrackPoint> points) {
+        double totalDistance = 0.0;
+
+        for (int i = 0; i < points.size() - 1; i++) {
+            VoTrackPoint currentPoint = points.get(i);
+            VoTrackPoint nextPoint = points.get(i + 1);
+
+            double distance = haversine( currentPoint.getLat().doubleValue(), currentPoint.getLng().doubleValue(), nextPoint.getLat().doubleValue(), nextPoint.getLng().doubleValue());
+
+            totalDistance += distance;
+        }
+
+        return totalDistance;
+    }
+
+    // Haversine鍏紡璁$畻涓や釜缁忕含搴︾偣涔嬮棿鐨勮窛绂�
+    public static double haversine(double lat1, double lon1, double lat2, double lon2) {
+        double dLat = Math.toRadians(lat2 - lat1);
+        double dLon = Math.toRadians(lon2 - lon1);
+
+        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
+                Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
+                        Math.sin(dLon / 2) * Math.sin(dLon / 2);
+
+        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+
+        return EARTH_RADIUS * c;
+    }
+
+    /**
+     * 鏍规嵁宸℃鍛業D鑾峰彇宸℃鍒楄〃
+     * @param vo
+     * @return
+     */
+    @GetMapping(path = "/getInspectRecords")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoInspect>>> getInspectRecords(QoInspect vo) {
+        try {
+            QueryResultVo<List<VoInspect>> res = inspectSv.getInstectsByInspectorId(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇杩呯柧鐖变綘璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
 }

--
Gitblit v1.8.0