From 85392bb7db247c4596d3fbf49c9e00cfd0e76a13 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期四, 11 九月 2025 09:15:11 +0800
Subject: [PATCH] 1

---
 algo-zkd/src/main/java/com/algo/service/TaskAllocationService.java   |   34 ++----
 algo-zkd/src/main/java/com/algo/expose/impl/BaseDataServiceImpl.java |   39 +++++++
 algo-zkd/src/main/java/com/algo/config/BaseDataConfig.java           |   18 +++
 algo-zkd/src/main/java/com/algo/expose/impl/AlgoSupportImpl.java     |   16 ++
 algo-zkd/src/main/java/com/algo/config/EnvDataConfig.java            |   32 ++++++
 algo-zkd/src/main/java/com/algo/expose/AlgoSupport.java              |    2 
 algo-zkd/src/main/java/com/algo/service/PathPlanningService.java     |   62 +++---------
 algo-zkd/pom.xml                                                     |    7 +
 algo-zkd/src/main/java/com/algo/AlgorithmMain.java                   |   23 ++--
 algo-zkd/target/classes/META-INF/spring.factories                    |    3 
 algo-zkd/src/main/java/com/algo/expose/BaseDataService.java          |   40 ++++++++
 11 files changed, 192 insertions(+), 84 deletions(-)

diff --git a/algo-zkd/pom.xml b/algo-zkd/pom.xml
index d4b218e..1e21f94 100644
--- a/algo-zkd/pom.xml
+++ b/algo-zkd/pom.xml
@@ -40,6 +40,13 @@
             <artifactId>junit</artifactId>
         </dependency>
 
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.20</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/algo-zkd/src/main/java/com/algo/AlgorithmMain.java b/algo-zkd/src/main/java/com/algo/AlgorithmMain.java
index e596e88..a8774ff 100644
--- a/algo-zkd/src/main/java/com/algo/AlgorithmMain.java
+++ b/algo-zkd/src/main/java/com/algo/AlgorithmMain.java
@@ -6,18 +6,24 @@
 import com.algo.service.PathPlanningService;
 import com.algo.service.TaskAllocationService;
 import com.algo.util.AgvTaskUtils;
-import com.algo.util.JsonUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.List;
-import java.util.Map;
 
 @SpringBootTest
 @RunWith(SpringRunner.class)
 public class AlgorithmMain {
+
+
+    @Autowired
+    private TaskAllocationService taskAllocationService;
+
+    @Autowired
+    private PathPlanningService pathPlanningService;
 
 
     /**
@@ -25,12 +31,7 @@
      */
     @Test
     public void taskAllocationService() {
-        Map<String, Map<String, Integer>> pathMapping = JsonUtils.loadPathMapping("path_mapping.json");
-        System.out.println(pathMapping);
-        Map<String, Object> environment = JsonUtils.loadEnvironment("environment.json");
-        System.out.println(environment);
 
-        TaskAllocationService taskAllocationService = new TaskAllocationService(pathMapping, environment);
 
         List<AGVStatus> agvStatusList = AgvTaskUtils.loadAgvStatus("ctu_agv_status.json");
         System.out.println(agvStatusList);
@@ -50,17 +51,13 @@
      */
     @Test
     public void pathPlanningService() {
-        Map<String, Map<String, Integer>> pathMapping = JsonUtils.loadPathMapping("path_mapping.json");
-        System.out.println(pathMapping);
-        Map<String, Object> environment = JsonUtils.loadEnvironment("environment.json");
-        System.out.println(environment);
+
         List<TaskData> taskList = AgvTaskUtils.loadTaskList("ctu_task_data.json");
         System.out.println(taskList);
 
-        PathPlanningService pathPlanningService = new PathPlanningService(pathMapping, environment, taskList);
         List<AGVStatus> agvStatusList = AgvTaskUtils.loadAgvStatus("ctu_agv_status.json");
         System.out.println(agvStatusList);
-        PathPlanningService.PathPlanningResult planningResult = pathPlanningService.planAllAgvPaths(agvStatusList, true, null);
+        PathPlanningService.PathPlanningResult planningResult = pathPlanningService.planAllAgvPaths(taskList, agvStatusList, true, null);
         System.out.println(planningResult);
     }
 
diff --git a/algo-zkd/src/main/java/com/algo/config/BaseDataConfig.java b/algo-zkd/src/main/java/com/algo/config/BaseDataConfig.java
new file mode 100644
index 0000000..24e04a6
--- /dev/null
+++ b/algo-zkd/src/main/java/com/algo/config/BaseDataConfig.java
@@ -0,0 +1,18 @@
+//package com.algo.config;
+//
+//import com.algo.expose.BaseDataService;
+//import com.algo.expose.impl.BaseDataServiceImpl;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//
+//@Configuration
+//public class BaseDataConfig {
+//
+//
+//    @Bean
+//    public BaseDataService baseDataService() {
+//        return new BaseDataServiceImpl();
+//    }
+//
+//
+//}
diff --git a/algo-zkd/src/main/java/com/algo/config/EnvDataConfig.java b/algo-zkd/src/main/java/com/algo/config/EnvDataConfig.java
new file mode 100644
index 0000000..ca6238f
--- /dev/null
+++ b/algo-zkd/src/main/java/com/algo/config/EnvDataConfig.java
@@ -0,0 +1,32 @@
+package com.algo.config;
+
+import com.algo.expose.BaseDataService;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Map;
+
+@Component
+@Data
+public class EnvDataConfig {
+
+    @Autowired
+    private BaseDataService baseDataService;
+
+
+    private Map<String, Map<String, Integer>> pathMapping;
+
+
+    private Map<String, Object> environmentConfig;
+
+    /**
+     * 鍒濆鍖�
+     */
+    @PostConstruct
+    public void init() {
+        setEnvironmentConfig(baseDataService.loadEnvironment());
+        setPathMapping(baseDataService.loadPathMapping());
+    }
+}
diff --git a/algo-zkd/src/main/java/com/algo/expose/AlgoSupport.java b/algo-zkd/src/main/java/com/algo/expose/AlgoSupport.java
index 010bd27..25c6d62 100644
--- a/algo-zkd/src/main/java/com/algo/expose/AlgoSupport.java
+++ b/algo-zkd/src/main/java/com/algo/expose/AlgoSupport.java
@@ -20,6 +20,6 @@
      *
      * @return
      */
-    PathPlanningService.PathPlanningResult planAllAgvPaths(List<AGVStatus> agvStatusList, boolean flag, List<double[]> constraints);
+    PathPlanningService.PathPlanningResult planAllAgvPaths(List<TaskData> taskList, List<AGVStatus> agvStatusList, boolean flag, List<double[]> constraints);
 
 }
diff --git a/algo-zkd/src/main/java/com/algo/expose/BaseDataService.java b/algo-zkd/src/main/java/com/algo/expose/BaseDataService.java
new file mode 100644
index 0000000..7fb962a
--- /dev/null
+++ b/algo-zkd/src/main/java/com/algo/expose/BaseDataService.java
@@ -0,0 +1,40 @@
+package com.algo.expose;
+
+import com.algo.model.AGVStatus;
+import com.algo.model.TaskData;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍩虹
+ */
+public interface BaseDataService {
+    /**
+     * 鍔犺浇璺緞鏄犲皠
+     *
+     * @return
+     */
+    Map<String, Map<String, Integer>> loadPathMapping();
+
+    /**
+     * 鍔犺浇鐜鍙傛暟
+     *
+     * @return
+     */
+    Map<String, Object> loadEnvironment();
+
+    /**
+     * 鍔犺浇agv鐘舵��
+     *
+     * @return
+     */
+    List<AGVStatus> loadAgvStatus();
+
+    /**
+     * 鍔犺浇浠诲姟鍒楄〃
+     *
+     * @return
+     */
+    List<TaskData> loadTaskList();
+}
diff --git a/algo-zkd/src/main/java/com/algo/expose/impl/AlgoSupportImpl.java b/algo-zkd/src/main/java/com/algo/expose/impl/AlgoSupportImpl.java
index ebbbeb4..fb150b1 100644
--- a/algo-zkd/src/main/java/com/algo/expose/impl/AlgoSupportImpl.java
+++ b/algo-zkd/src/main/java/com/algo/expose/impl/AlgoSupportImpl.java
@@ -5,22 +5,30 @@
 import com.algo.model.TaskAssignment;
 import com.algo.model.TaskData;
 import com.algo.service.PathPlanningService;
+import com.algo.service.TaskAllocationService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
 import java.util.List;
 
 @Service
 public class AlgoSupportImpl implements AlgoSupport {
 
 
+    @Autowired
+    private TaskAllocationService taskAllocationService;
+
+    @Autowired
+    private PathPlanningService pathPlanningService;
+
+
     @Override
     public List<TaskAssignment> allocateTasks(List<AGVStatus> agvStatusList, List<TaskData> taskList) {
-        return Collections.emptyList();
+        return taskAllocationService.allocateTasks(agvStatusList, taskList);
     }
 
     @Override
-    public PathPlanningService.PathPlanningResult planAllAgvPaths(List<AGVStatus> agvStatusList, boolean flag, List<double[]> constraints) {
-        return null;
+    public PathPlanningService.PathPlanningResult planAllAgvPaths(List<TaskData> taskList, List<AGVStatus> agvStatusList, boolean flag, List<double[]> constraints) {
+        return pathPlanningService.planAllAgvPaths(taskList, agvStatusList, true, null);
     }
 }
diff --git a/algo-zkd/src/main/java/com/algo/expose/impl/BaseDataServiceImpl.java b/algo-zkd/src/main/java/com/algo/expose/impl/BaseDataServiceImpl.java
new file mode 100644
index 0000000..6968d08
--- /dev/null
+++ b/algo-zkd/src/main/java/com/algo/expose/impl/BaseDataServiceImpl.java
@@ -0,0 +1,39 @@
+package com.algo.expose.impl;
+
+import com.algo.expose.BaseDataService;
+import com.algo.model.AGVStatus;
+import com.algo.model.TaskData;
+import com.algo.util.AgvTaskUtils;
+import com.algo.util.JsonUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍩虹
+ */
+@Service
+public class BaseDataServiceImpl implements BaseDataService {
+
+
+    @Override
+    public Map<String, Map<String, Integer>> loadPathMapping() {
+        return JsonUtils.loadPathMapping("path_mapping.json");
+    }
+
+    @Override
+    public Map<String, Object> loadEnvironment() {
+        return JsonUtils.loadEnvironment("environment.json");
+    }
+
+    @Override
+    public List<AGVStatus> loadAgvStatus() {
+        return AgvTaskUtils.loadAgvStatus("ctu_agv_status.json");
+    }
+
+    @Override
+    public List<TaskData> loadTaskList() {
+        return AgvTaskUtils.loadTaskList("ctu_task_data.json");
+    }
+}
diff --git a/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java b/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
index 9fef948..833510e 100644
--- a/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
+++ b/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
@@ -1,26 +1,23 @@
 package com.algo.service;
 
+import com.algo.config.EnvDataConfig;
 import com.algo.model.*;
 import com.algo.util.JsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import java.util.*;
 import java.util.concurrent.*;
 
 /**
  * 璺緞瑙勫垝鏈嶅姟
  */
+@Service
 public class PathPlanningService {
 
-    /**
-     * 璺緞鏄犲皠琛�
-     */
-    private Map<String, Map<String, Integer>> pathMapping;
-
-    /**
-     * 鐜閰嶇疆
-     */
-    private Map<String, Object> environmentConfig;
+    @Autowired
+    private EnvDataConfig envDataConfig;
 
     /**
      * 鎵ц涓换鍔℃彁鍙�
@@ -47,63 +44,35 @@
      */
     private RemainingPathProcessor remainingPathProcessor;
 
-    /**
-     * 绾跨▼姹犲ぇ灏�
-     */
-    private final int threadPoolSize;
 
     /**
      * 绾跨▼姹�
      */
-    private final ExecutorService executorService;
+    private final ExecutorService executorService = Executors.newFixedThreadPool(Math.max(4, Runtime.getRuntime().availableProcessors()));
 
     /**
      * CTU鎵瑰鐞嗗ぇ灏�
      */
     private final int batchSize = 10;
 
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param pathMapping       璺緞鏄犲皠琛�
-     * @param environmentConfig 鐜閰嶇疆
-     * @param taskDataList      浠诲姟鏁版嵁鍒楄〃
-     */
-    public PathPlanningService(Map<String, Map<String, Integer>> pathMapping,
-                               Map<String, Object> environmentConfig,
-                               List<TaskData> taskDataList) {
-        this.pathMapping = pathMapping;
-        this.environmentConfig = environmentConfig;
-
-        this.threadPoolSize = Math.max(4, Runtime.getRuntime().availableProcessors());
-        this.executorService = Executors.newFixedThreadPool(threadPoolSize);
-
-        // 鍒濆鍖�
-        initializeComponents(taskDataList);
-
-        System.out.println("璺緞瑙勫垝鏈嶅姟鍒濆鍖栧畬鎴愶紙绾跨▼姹犲ぇ灏�: " + threadPoolSize + "锛�");
-    }
 
     /**
      * 鍒濆鍖栧悇涓粍浠�
-     *
-     * @param taskDataList 浠诲姟鏁版嵁鍒楄〃
      */
-    private void initializeComponents(List<TaskData> taskDataList) {
-        // 鍒濆鍖栦换鍔℃彁鍙栧櫒
-        this.taskExtractor = new ExecutingTaskExtractor(pathMapping, taskDataList);
+    @PostConstruct
+    public void initializeComponents() {
 
         // 鍒濆鍖栬矾寰勮鍒掑櫒
-        this.pathPlanner = new AStarPathPlanner(pathMapping);
+        this.pathPlanner = new AStarPathPlanner(envDataConfig.getPathMapping());
 
         // 鍒濆鍖栫鎾炴娴嬪櫒
-        this.collisionDetector = new CollisionDetector(pathMapping);
+        this.collisionDetector = new CollisionDetector(envDataConfig.getPathMapping());
 
         // 鍒濆鍖栫鎾炶В鍐冲櫒
         this.collisionResolver = new CollisionResolver(collisionDetector);
 
         // 鍒濆鍖栧墿浣欒矾寰勫鐞嗗櫒
-        this.remainingPathProcessor = new RemainingPathProcessor(pathMapping);
+        this.remainingPathProcessor = new RemainingPathProcessor(envDataConfig.getPathMapping());
     }
 
     /**
@@ -114,9 +83,12 @@
      * @param constraints    璺緞绾︽潫鏉′欢
      * @return 璺緞瑙勫垝缁撴灉
      */
-    public PathPlanningResult planAllAgvPaths(List<AGVStatus> agvStatusList,
+    public PathPlanningResult planAllAgvPaths(List<TaskData> taskList, List<AGVStatus> agvStatusList,
                                               boolean includeIdleAgv,
                                               List<double[]> constraints) {
+        // 鍒濆鍖栦换鍔℃彁鍙栧櫒
+        this.taskExtractor = new ExecutingTaskExtractor(envDataConfig.getPathMapping(), taskList);
+
         long startTime = System.currentTimeMillis();
 
         System.out.println("寮�濮嬩负 " + agvStatusList.size() + " 涓狢TU瑙勫垝");
@@ -416,7 +388,7 @@
         long currentTime = System.currentTimeMillis() / 1000; // 杞崲涓虹
 
         for (PathCode pathCode : codeList) {
-            int[] coord = JsonUtils.getCoordinate(pathCode.getCode(), pathMapping);
+            int[] coord = JsonUtils.getCoordinate(pathCode.getCode(), envDataConfig.getPathMapping());
             if (coord != null) {
                 String spaceTimeKey = coord[0] + "," + coord[1] + "," + currentTime;
                 occupancyMap.put(spaceTimeKey, agvStatus.getAgvId());
diff --git a/algo-zkd/src/main/java/com/algo/service/TaskAllocationService.java b/algo-zkd/src/main/java/com/algo/service/TaskAllocationService.java
index dbe8985..fd1946f 100644
--- a/algo-zkd/src/main/java/com/algo/service/TaskAllocationService.java
+++ b/algo-zkd/src/main/java/com/algo/service/TaskAllocationService.java
@@ -1,10 +1,12 @@
 package com.algo.service;
 
+import com.algo.config.EnvDataConfig;
 import com.algo.model.AGVStatus;
 import com.algo.model.BackpackData;
 import com.algo.model.TaskAssignment;
 import com.algo.model.TaskData;
 import com.algo.util.JsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -13,22 +15,14 @@
 /**
  * 浠诲姟鍒嗛厤鏈嶅姟绫�
  */
+@Service
 public class TaskAllocationService {
 
-    private Map<String, Map<String, Integer>> pathMapping;
-    private Map<String, Object> environmentConfig;
+    @Autowired
+    private EnvDataConfig envDataConfig;
 
-    /**
-     * 鏋勯�犲嚱鏁�
-     *
-     * @param pathMapping       璺緞鏄犲皠淇℃伅
-     * @param environmentConfig 鐜閰嶇疆淇℃伅
-     */
-    public TaskAllocationService(Map<String, Map<String, Integer>> pathMapping,
-                                 Map<String, Object> environmentConfig) {
-        this.pathMapping = pathMapping;
-        this.environmentConfig = environmentConfig;
-    }
+
+
 
     /**
      * 鎵ц浠诲姟鍒嗛厤
@@ -42,9 +36,9 @@
         System.out.println("寮�濮嬩换鍔″垎閰嶏紝AGV鏁伴噺: " + agvStatusList.size() + ", 浠诲姟鏁伴噺: " + taskList.size());
 
         // 杈撳嚭鐜淇℃伅
-        System.out.println("鐜淇℃伅锛氬搴�=" + environmentConfig.get("width") +
-                ", 楂樺害=" + environmentConfig.get("height") +
-                ", 宸ヤ綔绔欐暟閲�=" + environmentConfig.get("stationCount"));
+        System.out.println("鐜淇℃伅锛氬搴�=" + envDataConfig.getEnvironmentConfig().get("width") +
+                ", 楂樺害=" + envDataConfig.getEnvironmentConfig().get("height") +
+                ", 宸ヤ綔绔欐暟閲�=" + envDataConfig.getEnvironmentConfig().get("stationCount"));
 
         List<TaskAssignment> assignments = new ArrayList<>();
 
@@ -109,8 +103,8 @@
             System.out.println("澶勭悊璧风偣 " + startLocation + " 鐨勪换鍔★紝鏁伴噺: " + locationTasks.size());
 
             // 妫�鏌ユ槸鍚︿负宸ヤ綔绔�
-            if (JsonUtils.isStation(startLocation, environmentConfig)) {
-                Map<String, Object> stationInfo = JsonUtils.getStationInfo(startLocation, environmentConfig);
+            if (JsonUtils.isStation(startLocation, envDataConfig.getEnvironmentConfig())) {
+                Map<String, Object> stationInfo = JsonUtils.getStationInfo(startLocation, envDataConfig.getEnvironmentConfig());
                 if (stationInfo != null) {
                     Integer capacity = (Integer) stationInfo.get("capacity");
                     System.out.println("宸ヤ綔绔� " + startLocation + " 瀹归噺: " + capacity);
@@ -203,7 +197,7 @@
         AGVStatus bestAgv = null;
         double minDistance = Double.MAX_VALUE;
 
-        int[] targetCoord = JsonUtils.getCoordinate(targetLocation, pathMapping);
+        int[] targetCoord = JsonUtils.getCoordinate(targetLocation, envDataConfig.getPathMapping());
         if (targetCoord == null) {
             System.out.println("鏃犳硶鑾峰彇鐩爣浣嶇疆 " + targetLocation + " 鐨勫潗鏍�");
             return availableAgvs.isEmpty() ? null : availableAgvs.get(0);
@@ -216,7 +210,7 @@
                 continue;
             }
 
-            int[] agvCoord = JsonUtils.getCoordinate(agv.getPosition(), pathMapping);
+            int[] agvCoord = JsonUtils.getCoordinate(agv.getPosition(), envDataConfig.getPathMapping());
             if (agvCoord != null) {
                 double distance = JsonUtils.calculateManhattanDistance(agvCoord, targetCoord);
 
diff --git a/algo-zkd/target/classes/META-INF/spring.factories b/algo-zkd/target/classes/META-INF/spring.factories
index ab43764..82fa48f 100644
--- a/algo-zkd/target/classes/META-INF/spring.factories
+++ b/algo-zkd/target/classes/META-INF/spring.factories
@@ -1 +1,2 @@
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.algo.service.PathPlanningService
+

--
Gitblit v1.9.1