From 7881cef5c3dcea8e6037101db2c3eeb2fd3ba5da Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期六, 27 十二月 2025 23:42:36 +0800
Subject: [PATCH] 1211

---
 src/zhangaiwu/AddDikuai.java |   92 +++++++++++++++++++++++++++++----------------
 1 files changed, 59 insertions(+), 33 deletions(-)

diff --git a/src/zhangaiwu/AddDikuai.java b/src/zhangaiwu/AddDikuai.java
index 65e96d6..b881409 100644
--- a/src/zhangaiwu/AddDikuai.java
+++ b/src/zhangaiwu/AddDikuai.java
@@ -23,7 +23,7 @@
 import dikuai.Gecaokuanjisuan;
 import dikuai.Gecaoanquanjuli;
 import bianjie.Bianjieyouhuatoxy;
-import lujing.Lunjingguihua;
+
 import lujing.Qufenxingzhuang;
 import lujing.AoxinglujingNoObstacle;
 import lujing.YixinglujingNoObstacle;
@@ -1469,17 +1469,10 @@
                     YixinglujingNoObstacle.planPath(boundaryCoords, widthMetersStr, safetyDistanceMetersStr);
                 plannedPath = formatYixingPathSegments(segments);
             } else {
-                // 鏃犳硶鍒ゆ柇鍦板潡绫诲瀷锛屼娇鐢ㄩ粯璁ゆ柟娉曚綔涓哄悗澶�
-                JOptionPane.showMessageDialog(this, "鏃犳硶鍒ゆ柇鍦板潡绫诲瀷锛屼娇鐢ㄩ粯璁よ矾寰勭敓鎴愭柟娉�", 
+                // 鏃犳硶鍒ゆ柇鍦板潡绫诲瀷
+                JOptionPane.showMessageDialog(this, "鏃犳硶鍒ゆ柇鍦板潡绫诲瀷锛屾棤娉曠敓鎴愯矾寰�", 
                     "鎻愮ず", JOptionPane.WARNING_MESSAGE);
-                String plannerMode = resolvePlannerMode(patternDisplay);
-                plannedPath = Lunjingguihua.generatePathFromStrings(
-                    boundaryCoords,
-                    obstacleCoords != null ? obstacleCoords : "",
-                    widthMetersStr,
-                    safetyDistanceMetersStr,
-                    plannerMode
-                );
+                plannedPath = "";
             }
             
             if (!isMeaningfulValue(plannedPath)) {
@@ -1523,18 +1516,19 @@
             return "";
         }
         StringBuilder sb = new StringBuilder();
-        AoxinglujingNoObstacle.Point last = null;
-        for (AoxinglujingNoObstacle.PathSegment segment : segments) {
-            // 鍙坊鍔犲壊鑽夊伐浣滄锛岃烦杩囪繃娓℃
-            if (segment.isMowing) {
-                // 濡傛灉璧风偣涓庝笂涓�涓粓鐐逛笉鍚岋紝娣诲姞璧风偣
-                if (last == null || !equalsAoxingPoint(last, segment.start)) {
-                    appendAoxingPoint(sb, segment.start);
-                }
-                // 娣诲姞缁堢偣
-                appendAoxingPoint(sb, segment.end);
-                last = segment.end;
+        AoxinglujingNoObstacle.Point lastEnd = null;
+        boolean firstWritten = false;
+        for (AoxinglujingNoObstacle.PathSegment s : segments) {
+            if (!firstWritten) {
+                appendAoxingPoint(sb, s.start);
+                firstWritten = true;
+                lastEnd = s.start;
+            } else if (lastEnd == null || !equalsAoxingPoint(lastEnd, s.start)) {
+                appendAoxingPoint(sb, s.start);
+                lastEnd = s.start;
             }
+            appendAoxingPointWithType(sb, s.end, s.isMowing);
+            lastEnd = s.end;
         }
         return sb.toString();
     }
@@ -1547,18 +1541,19 @@
             return "";
         }
         StringBuilder sb = new StringBuilder();
-        YixinglujingNoObstacle.Point last = null;
-        for (YixinglujingNoObstacle.PathSegment segment : segments) {
-            // 鍙坊鍔犲壊鑽夊伐浣滄锛岃烦杩囪繃娓℃
-            if (segment.isMowing) {
-                // 濡傛灉璧风偣涓庝笂涓�涓粓鐐逛笉鍚岋紝娣诲姞璧风偣
-                if (last == null || !equalsYixingPoint(last, segment.start)) {
-                    appendYixingPoint(sb, segment.start);
-                }
-                // 娣诲姞缁堢偣
-                appendYixingPoint(sb, segment.end);
-                last = segment.end;
+        YixinglujingNoObstacle.Point lastEnd = null;
+        boolean firstWritten = false;
+        for (YixinglujingNoObstacle.PathSegment s : segments) {
+            if (!firstWritten) {
+                appendYixingPoint(sb, s.start);
+                firstWritten = true;
+                lastEnd = s.start;
+            } else if (lastEnd == null || !equalsYixingPoint(lastEnd, s.start)) {
+                appendYixingPoint(sb, s.start);
+                lastEnd = s.start;
             }
+            appendYixingPointWithType(sb, s.end, s.isMowing);
+            lastEnd = s.end;
         }
         return sb.toString();
     }
@@ -1578,6 +1573,12 @@
      * 娣诲姞 AoxinglujingNoObstacle.Point 鍒板瓧绗︿覆鏋勫缓鍣�
      */
     private void appendAoxingPoint(StringBuilder sb, AoxinglujingNoObstacle.Point point) {
+            private void appendAoxingPointWithType(StringBuilder sb, AoxinglujingNoObstacle.Point point, boolean isMowing) {
+                if (sb.length() > 0) {
+                    sb.append(";");
+                }
+                sb.append(String.format(java.util.Locale.US, "%.2f,%.2f,%s", point.x, point.y, isMowing ? "M" : "T"));
+            }
         if (sb.length() > 0) {
             sb.append(";");
         }
@@ -1599,6 +1600,12 @@
      * 娣诲姞 YixinglujingNoObstacle.Point 鍒板瓧绗︿覆鏋勫缓鍣�
      */
     private void appendYixingPoint(StringBuilder sb, YixinglujingNoObstacle.Point point) {
+            private void appendYixingPointWithType(StringBuilder sb, YixinglujingNoObstacle.Point point, boolean isMowing) {
+                if (sb.length() > 0) {
+                    sb.append(";");
+                }
+                sb.append(String.format(java.util.Locale.US, "%.2f,%.2f,%s", point.x, point.y, isMowing ? "M" : "T"));
+            }
         if (sb.length() > 0) {
             sb.append(";");
         }
@@ -2684,6 +2691,25 @@
 
     private String generateNewLandNumber() {
         Map<String, Dikuai> existing = Dikuai.getAllDikuai();
+        
+        // 鑾峰彇鍓茶崏鏈虹紪鍙�
+        String mowerId = Setsys.getPropertyValue("mowerId");
+        
+        // 濡傛灉鏈夊壊鑽夋満缂栧彿锛屼娇鐢� 缂栧彿+涓や綅鑷鏁板瓧 鏍煎紡
+        if (mowerId != null && !mowerId.trim().isEmpty() && !"-1".equals(mowerId)) {
+            int attempt = 1;
+            while (true) {
+                // 鏍煎紡鍖栦负涓や綅鏁板瓧锛屽 01, 02, ...
+                String suffix = String.format("%02d", attempt);
+                String candidate = mowerId + suffix;
+                if (!existing.containsKey(candidate)) {
+                    return candidate;
+                }
+                attempt++;
+            }
+        }
+        
+        // 濡傛灉娌℃湁鍓茶崏鏈虹紪鍙凤紝鍥為��鍒伴粯璁ら�昏緫
         int attempt = 1;
         while (true) {
             String candidate = "LAND" + attempt;

--
Gitblit v1.10.0