From 0639f7feede9614a98f64450792cc83f58f80a84 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 14 五月 2025 17:00:54 +0800
Subject: [PATCH] 与测控一体阀兼容
---
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/inspect/InspectCtrl.java | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 209 insertions(+), 2 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 d71764c..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,9 +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.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.MediaType;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
/**
* @author ZhuBaoMin
@@ -19,4 +40,190 @@
@Autowired
private InspectSv inspectSv;
+ private final IDLongGenerator idLongGenerator;
+
+ // 鍦扮悆鍗婂緞锛屽崟浣嶏細鍗冪背
+ private static final double EARTH_RADIUS = 6371.0;
+
+ public InspectCtrl(IDLongGenerator idLongGenerator) {
+ this.idLongGenerator = idLongGenerator;
+ }
+
+ /**
+ * 娣诲姞宸℃杞ㄨ抗
+ * @param list_Inspects 宸℃瀵硅薄鏁扮粍
+ * @param bindingResult
+ * @return
+ */
+ @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @Transactional(rollbackFor = Exception.class)
+ @SsoAop()
+ public BaseResponse<Boolean> save(@RequestBody @Valid List<Inspects> list_Inspects, BindingResult bindingResult){
+ if(bindingResult != null && bindingResult.hasErrors()){
+ 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);
+
+ Long inspectorId = inspects.getInspectorId();
+ Long inspectId = inspects.getInspectId();
+ Date startTime = inspects.getStartTime();
+ Date stopTime = inspects.getStopTime();
+ List<OpeTrack> tracks = inspects.getTracks();
+
+ if(tracks == null || tracks.size() == 0) {
+ return BaseResponseUtils.buildErrorMsg("鏃犲贰妫�杞ㄨ抗");
+ }
+
+ if(inspectId == null || inspectId.equals(0)) {
+ // 璇ュ贰妫�鏈笂浼犺繃璁板綍
+
+ // 娣诲姞宸℃璁板綍
+ OpeInspect opeInspect = new OpeInspect();
+ opeInspect.setInspectorId(inspectorId);
+ if(startTime != null) {
+ opeInspect.setStartTime(startTime);
+ }
+ if(stopTime != null) {
+ opeInspect.setStopTime(stopTime);
+ }
+ inspectId = inspectSv.addInspect(opeInspect);
+ if(inspectId == null) {
+ 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);
+ }
+ 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 {
+ // 璇ュ贰妫�宸蹭笂浼犺繃璁板綍锛岀画浼�
+ if(stopTime != null) {
+ OpeInspect inspect = new OpeInspect();
+ inspect.setId(inspectId);
+ inspect.setStopTime(stopTime);
+ inspectSv.updateInspect(inspect);
+ }
+
+ if(tracks != null && tracks.size() > 0) {
+ for (int j = 0; j < tracks.size(); j++) {
+ tracks.get(j).setId(idLongGenerator.generate());
+ tracks.get(j).setInspectId(inspectId);
+ }
+ 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);
+ }
+ }
+ }
+ 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