From b7da1f32d5d9997378b5ac535593a3f6144af46b Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 15 十月 2025 17:15:38 +0800
Subject: [PATCH] 新增AGV与堆垛机移库判断及缓存优化

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs                                         |   60 +
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs                           |  429 ++++++++-
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json                         |  216 ++--
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs             |  338 +++++++
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                                   |    8 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs                                  |   17 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfo_Hty.cs                          |   36 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db          |    0 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm      |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs                           |  139 --
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json                                |   72 +
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs                          |   17 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Task/TaskController.cs                         |   35 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs                                       |   19 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs                                          |    2 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs                                         |    2 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db     |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs                                    |    2 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs                                                |    3 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs                                   |    5 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm |    0 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json                                |  224 ++---
 项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_LocationInfo.vue                          |    5 
 项目代码/PDA/pages/task/AGVCarry.vue                                                                        |   32 
 项目代码/PDA/pages/task/AcrossFloor.vue                                                                     |   28 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs                                             |   26 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Services/Sys_DictionaryService.cs                                    |  122 ++
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Repository/Sys_DictionaryRepository.cs                               |   31 
 项目代码/PDA/common/config.js                                                                               |   23 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal |    0 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs                                        |    3 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail_Hty.cs                     |   77 -
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs                                 |   37 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs                                         |  128 ++
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs                                 |   11 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/GlobalUsing.cs                                             |    3 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs                                    |  113 ++
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IServices/ISys_DictionaryService.cs                                  |    4 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json                         |   78 +
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs                    |   45 +
 项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_Task.vue                                   |   11 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs                                |  137 ++
 /dev/null                                                                                               |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                                           |    1 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db          |    0 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal      |    0 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                                    |   59 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db     |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfoDetail_Hty.cs                    |   34 
 49 files changed, 1,884 insertions(+), 748 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/common/config.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/common/config.js"
index b438031..47f2efa 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/common/config.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/common/config.js"
@@ -100,21 +100,26 @@
 		text: "鍑哄簱杈撻�佺嚎2"
 	}],
 	organizeValue: "",
-	organizeRange: [{
-			value: "SZ",
-			text: "SZ"
+	AreaId: [
+		{
+			value: "4",
+			text: "涓�妤糀GV鍏ュ簱鍖�"
 		},
 		{
-			value: "SH",
-			text: "SH"
+			value: "2",
+			text: "涓�妤糀GV鍑哄簱鍖�"
 		},
 		{
-			value: "GD",
-			text: "GD"
+			value: "3",
+			text: "AGV绔嬪簱缂撳瓨鍖�"
 		},
 		{
-			value: "DG",
-			text: "DG"
+			value: "5",
+			text: "浜屾ゼAGVB4-G4缂撳瓨鍖�"
+		},
+		{
+			value: "6",
+			text: "浜屾ゼAGVB5-G5缂撳瓨鍖�"
 		}
 	]
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AGVCarry.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AGVCarry.vue"
index 85cbf52..69999da 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AGVCarry.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AGVCarry.vue"
@@ -13,9 +13,9 @@
 						<uni-easyinput type="text" :focus="istrue" v-model="SourceAddress" placeholder="璇疯緭鍏GV鎼繍璧风偣"
 							ref='midInput' />
 					</uni-forms-item>
-					<uni-forms-item label="鎼繍缁堢偣鍖哄煙">
+					<uni-forms-item label="缁堢偣鍖哄煙">
 						<uni-data-select :focus="!istrue" v-model="AreaId" :localdata="range"
-							placeholder="璇疯緭鍏GV鎼繍缁堢偣鍖哄煙"></uni-data-select>
+							placeholder="璇烽�夋嫨AGV鎼繍缁堢偣鍖哄煙"></uni-data-select>
 					</uni-forms-item>
 				</uni-forms>
 				<button @click="RequestAGVCarryTaskAsync" type="primary" size="default"
@@ -49,6 +49,9 @@
 </template>
 
 <script>
+	import {
+		config
+	} from '../../common/config';
 	export default {
 		data() {
 			return {
@@ -63,29 +66,12 @@
 				SourceAddress: "",
 				items: ['AGV鍖哄煙鎼繍', '鐐瑰鐐规惉杩�'],
 				current: 0,
-				range: [{
-						value: "4",
-						text: "涓�妤煎叆搴撳尯"
-					},
-					{
-						value: "2",
-						text: "涓�妤煎嚭搴撳尯"
-					},
-					{
-						value: "3",
-						text: "绔嬪簱缂撳瓨鍖�"
-					},
-					{
-						value: "5",
-						text: "浜屾ゼB4-G4缂撳瓨鍖�"
-					},
-					{
-						value: "6",
-						text: "浜屾ゼB5-G5缂撳瓨鍖�"
-					}
-				],
+				range: [],
 			}
 		},
+		onLoad(e){
+			this.range=config.AreaId
+		},
 		methods: {
 			onClickItem(e) {
 				if (this.current != e.currentIndex) {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AcrossFloor.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AcrossFloor.vue"
index a142869..afb45a9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AcrossFloor.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/AcrossFloor.vue"
@@ -49,6 +49,9 @@
 </template>
 
 <script>
+	import {
+		config
+	} from '../../common/config';
 	export default {
 		data() {
 			return {
@@ -63,29 +66,12 @@
 				SourceAddress: "",
 				items: ['璺ㄦゼ灞傛惉杩�', '璺ㄦゼ灞傜偣瀵圭偣鎼繍'],
 				current: 0,
-				range: [{
-						value: "4",
-						text: "涓�妤煎叆搴撳尯"
-					},
-					{
-						value: "2",
-						text: "涓�妤煎嚭搴撳尯"
-					},
-					{
-						value: "3",
-						text: "绔嬪簱缂撳瓨鍖�"
-					},
-					{
-						value: "5",
-						text: "浜屾ゼB4-G4缂撳瓨鍖�"
-					},
-					{
-						value: "6",
-						text: "浜屾ゼB5-G5缂撳瓨鍖�"
-					}
-				],
+				range: []
 			}
 		},
+		onLoad(res) {
+			this.range = config.AreaId;
+		},
 		methods: {
 			onClickItem(e) {
 				if (this.current != e.currentIndex) {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db"
index 16bc432..3b174d7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
deleted file mode 100644
index 4cdf8d2..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
+++ /dev/null
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
deleted file mode 100644
index ebed01f..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
+++ /dev/null
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
index dcffa59..08d62a8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
deleted file mode 100644
index e479fa8..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
+++ /dev/null
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
deleted file mode 100644
index 8644a42..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
+++ /dev/null
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json"
index 45a4d46..08dcb97 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json"
@@ -3,52 +3,48 @@
   "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\const\\sysconfigkeyconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\const\\sysconfigkeyconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agv\\commonagvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agv\\commonagvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_dto\\wms\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\wms\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -58,123 +54,109 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 8,
+          "SelectedChildIndex": 7,
           "Children": [
             {
               "$type": "Document",
               "DocumentIndex": 1,
-              "Title": "TaskEnumHelper.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
-              "RelativeToolTip": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
-              "ViewState": "AgIAACoAAAAAAAAAAAD4v0YAAAB9AAAAAAAAAA==",
+              "Title": "Dt_Task.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
+              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
+              "ViewState": "AgIAAIgAAAAAAAAAAAAswKUAAABQAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T05:26:17.406Z",
+              "WhenOpened": "2025-10-14T08:37:29.99Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 5,
-              "Title": "RequestTaskDto.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "RelativeToolTip": "WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "ViewState": "AgIAAAMAAAAAAAAAAAAUwBkAAAAqAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T04:11:09.755Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2025-10-13T03:45:03.095Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "SysConfigKeyConst.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "RelativeToolTip": "WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "ViewState": "AgIAABUAAAAAAAAAAAAAADUAAAA+AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T03:32:36.798Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "AGVSignal.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "ViewState": "AgIAAFAAAAAAAAAAAAAAAGAAAABTAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T01:17:34.312Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
               "Title": "CommonConveyorLineJob.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ViewState": "AgIAAE0AAAAAAAAAAAAewFkAAAA7AAAAAAAAAA==",
+              "ViewState": "AgIAAEIAAAAAAAAAAAAawF4AAAAYAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-10-09T03:25:18.917Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "CommonAGVJob.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
-              "ViewState": "AgIAABIAAAAAAAAAAAAAAB4AAAATAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-09T05:11:29.775Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
+              "DocumentIndex": 4,
               "Title": "CommonStackerCraneJob.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAE0AAAAcAAAAAAAAAA==",
+              "ViewState": "AgIAAEIBAAAAAAAAAAAAAGsBAAAzAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-10-08T02:55:34.719Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
+              "DocumentIndex": 3,
               "Title": "TaskService.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
               "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ViewState": "AgIAAOoBAAAAAAAAAAAjwAgCAAAYAAAAAAAAAA==",
+              "ViewState": "AgIAAEIAAAAAAAAAAAAtwGIAAAAuAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-09-25T03:21:17.498Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "appsettings.json",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwgAAAACAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
+              "WhenOpened": "2025-10-13T03:45:03.095Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "AGVSignal.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "ViewState": "AgIAAFMAAAAAAAAAAAAAAGYAAABKAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-13T01:17:34.312Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "AGVTaskService.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "ViewState": "AgIAABkAAAAAAAAAAAAtwDYAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-10T05:30:35.074Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "CommonAGVJob.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
+              "ViewState": "AgIAABoAAAAAAAAAAAAtwOMAAAAJAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-09T05:11:29.775Z",
               "EditorCaption": ""
             },
             {
@@ -191,7 +173,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 7,
+              "DocumentIndex": 6,
               "Title": "TaskController.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
@@ -204,15 +186,15 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "AGVTaskService.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "ViewState": "AgIAAEAAAAAAAAAAAAAIwDgAAAA3AAAAAAAAAA==",
+              "DocumentIndex": 9,
+              "Title": "TaskEnumHelper.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "RelativeToolTip": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "ViewState": "AgIAACoAAAAAAAAAAAD4v0YAAAB9AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-10T05:30:35.074Z"
+              "WhenOpened": "2025-10-13T05:26:17.406Z"
             }
           ]
         }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json"
index 6ebe1d8..9fa7383 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json"
@@ -3,6 +3,10 @@
   "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agv\\commonagvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agv\\commonagvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
       "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
@@ -11,40 +15,28 @@
       "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\const\\sysconfigkeyconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\const\\sysconfigkeyconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agv\\commonagvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agv\\commonagvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_dto\\wms\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\wms\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agv\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -58,115 +50,96 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 10,
+          "SelectedChildIndex": 6,
           "Children": [
             {
               "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "RequestTaskDto.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "RelativeToolTip": "WIDESEAWCS_DTO\\WMS\\RequestTaskDto.cs",
-              "ViewState": "AgIAAAMAAAAAAAAAAAAUwBkAAAAqAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T04:11:09.755Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2025-10-13T03:45:03.095Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "SysConfigKeyConst.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "RelativeToolTip": "WIDESEAWCS_Common\\Const\\SysConfigKeyConst.cs",
-              "ViewState": "AgIAABUAAAAAAAAAAAAAADUAAAA+AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T03:32:36.798Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "AGVSignal.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
-              "ViewState": "AgIAAFAAAAAAAAAAAAAAAGAAAABTAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T01:17:34.312Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
+              "DocumentIndex": 4,
               "Title": "CommonConveyorLineJob.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ViewState": "AgIAAE0AAAAAAAAAAAAewFkAAAA7AAAAAAAAAA==",
+              "ViewState": "AgIAAEIAAAAAAAAAAAAawF4AAAAYAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-09T03:25:18.917Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-10-09T03:25:18.917Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
+              "DocumentIndex": 3,
+              "Title": "CommonStackerCraneJob.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "ViewState": "AgIAAEIBAAAAAAAAAAAAAGsBAAAzAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-08T02:55:34.719Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "TaskService.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "ViewState": "AgIAAEIAAAAAAAAAAAAtwGIAAAAuAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-09-25T03:21:17.498Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "appsettings.json",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwgAAAACAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
+              "WhenOpened": "2025-10-13T03:45:03.095Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "AGVSignal.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGV\\AGVSignal.cs",
+              "ViewState": "AgIAAFMAAAAAAAAAAAAAAGYAAABKAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-13T01:17:34.312Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "AGVTaskService.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
+              "ViewState": "AgIAABkAAAAAAAAAAAAtwDYAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-10T05:30:35.074Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
               "Title": "CommonAGVJob.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\AGV\\CommonAGVJob.cs",
-              "ViewState": "AgIAABIAAAAAAAAAAAAAAB4AAAATAAAAAAAAAA==",
+              "ViewState": "AgIAABsAAAAAAAAAAAAAAFMAAAAMAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-10-09T05:11:29.775Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "CommonStackerCraneJob.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAE0AAAAcAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-08T02:55:34.719Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "TaskService.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ViewState": "AgIAAAICAAAAAAAAAAAjwCMCAAAgAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-09-25T03:21:17.498Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 11,
+              "DocumentIndex": 9,
               "Title": "CommonElevatorJob.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
@@ -178,7 +151,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 8,
+              "DocumentIndex": 5,
               "Title": "TaskController.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
@@ -186,25 +159,11 @@
               "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
               "ViewState": "AgIAAAkAAAAAAAAAAAASwCQAAAAsAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-10T06:49:30.021Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-10-10T06:49:30.021Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "AGVTaskService.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
-              "ViewState": "AgIAADYAAAAAAAAAAAAMwCgAAAAuAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-10T05:30:35.074Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
+              "DocumentIndex": 8,
               "Title": "TaskEnumHelper.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
@@ -212,8 +171,7 @@
               "RelativeToolTip": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
               "ViewState": "AgIAACoAAAAAAAAAAAD4v0YAAAB9AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T05:26:17.406Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-10-13T05:26:17.406Z"
             }
           ]
         }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs"
index 498106b..adc4e65 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs"
@@ -53,6 +53,17 @@
         /// </summary>
         public const string AcrossFloorTask = "AcrossFloorTask";
 
+        /// <summary>
+        /// 璇锋眰鍫嗗灈鏈哄嚭搴撴槸鍚﹂渶瑕佺Щ搴�
+        /// </summary>
+        public const string StackerIsNeedRelocation = "StackerIsNeedRelocation";
+
+
+        /// <summary>
+        /// 璇锋眰AGV鍑哄簱鏄惁闇�瑕佺Щ搴�
+        /// </summary>
+        public const string AGVIsNeedRelocation = "AGVIsNeedRelocation";
+
 
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index 775ba89..bb35a10 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -100,7 +100,13 @@
         /// AGV鎼繍
         /// </summary>
         [Description("AGV鎼繍")]
-        Carry = 400
+        Carry = 400,
+
+        /// <summary>
+        /// AGV绉诲簱鎼繍
+        /// </summary>
+        [Description("AGV绉诲簱鎼繍")]
+        CarryReloction = 410
     }
     public enum TaskAcrossFloorTypeEnum
     {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
index 6dfa9be..d218fb5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
@@ -58,5 +58,8 @@
         /// AGV浠诲姟鍙�
         ///</summary>
         public string AGVTaskNum { get; set; }
+
+
+        public string Remark { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs"
index 3bce2f1..f5c114a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs"
@@ -21,6 +21,8 @@
         /// 浠诲姟绫诲瀷
         /// </summary>
         public string RequestType { get; set; } = string.Empty;
+
+        public int TaskNum { get; set; }
     }
 
     public class RequestAcrossFloorTaskDto
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 9e2d51d..f2f9f1a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -96,6 +96,7 @@
                     Dt_Task task = _mapper.Map<Dt_Task>(item);
                     // 璁剧疆浠诲姟鐨勫垱寤鸿�呬负"WMS"
                     task.Creater = "WMS";
+                    task.Remark = item.Remark;
                     // 鍒ゆ柇浠诲姟绫诲瀷鏄惁涓哄嚭搴撲换鍔�
                     if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                     {
@@ -380,42 +381,42 @@
                     {
                         #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
 
-                        var taskDto = new RequestTaskDto()
-                        {
-                            Position = task.NextAddress,
-                            PalletCode = task.PalletCode,
-                        };
+                        //var taskDto = new RequestTaskDto()
+                        //{
+                        //    Position = task.NextAddress,
+                        //    PalletCode = task.PalletCode,
+                        //};
 
-                        // 鑾峰彇WMSip鍦板潃
-                        var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
-                        var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
-                        var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue;
-                        if (wmsBasez == null || requestLocation == null)
-                        {
-                            throw new InvalidOperationException("WMS IP 鏈厤缃�");
-                        }
-                        var wmsIpAddrss = wmsBasez + requestLocation;
+                        //// 鑾峰彇WMSip鍦板潃
+                        //var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+                        //var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
+                        //var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue;
+                        //if (wmsBasez == null || requestLocation == null)
+                        //{
+                        //    throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                        //}
+                        //var wmsIpAddrss = wmsBasez + requestLocation;
 
-                        // 鍙戦�佽姹傚苟绛夊緟鍝嶅簲
-                        var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
-                        if (abc == null)
-                            return content.Error();
-                        // 鍙嶅簭鍒楀寲鍝嶅簲鍐呭
-                        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
+                        //// 鍙戦�佽姹傚苟绛夊緟鍝嶅簲
+                        //var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
+                        //if (abc == null)
+                        //    return content.Error();
+                        //// 鍙嶅簭鍒楀寲鍝嶅簲鍐呭
+                        //content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
 
-                        LogFactory.WriteError($"Info_鑾峰彇璐т綅", $"鑾峰彇璐т綅,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙凤細銆恵task.PalletCode}銆戣繑鍥炲弬鏁般�恵JsonConvert.SerializeObject(content)}銆憑Environment.NewLine}{Environment.NewLine}");
+                        //LogFactory.WriteError($"Info_鑾峰彇璐т綅", $"鑾峰彇璐т綅,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙凤細銆恵task.PalletCode}銆戣繑鍥炲弬鏁般�恵JsonConvert.SerializeObject(content)}銆憑Environment.NewLine}{Environment.NewLine}");
 
-                        // 妫�鏌ョ姸鎬佸苟杩斿洖
-                        if (!content.Status)
-                        {
-                            return content;
-                        }
+                        //// 妫�鏌ョ姸鎬佸苟杩斿洖
+                        //if (!content.Status)
+                        //{
+                        //    return content;
+                        //}
 
-                        // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
-                        var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
+                        //// 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
+                        //var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
 
                         task.CurrentAddress = task.NextAddress;
-                        task.NextAddress = taskResult.TargetAddress;
+                        task.NextAddress = task.TargetAddress;
                         task.TargetAddress = task.NextAddress;
 
                         #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs"
index ffde2f2..853bb61 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs"
@@ -1,4 +1,6 @@
 锘縰sing HslCommunication;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
 using Quartz;
 using System;
 using System.Collections.Generic;
@@ -6,9 +8,16 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_DTO.WMS;
+using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 using WIDESEAWCS_Tasks.ElevatorJob;
@@ -20,10 +29,12 @@
     {
         private readonly ITaskRepository _taskRepository;
         private readonly ITaskService _taskService;
-        public CommonAGVJob(ITaskRepository taskRepository,ITaskService taskService) 
+        private readonly ISys_ConfigService _sys_ConfigService;
+        public CommonAGVJob(ITaskRepository taskRepository,ITaskService taskService,ISys_ConfigService configService) 
         {
             _taskRepository = taskRepository;
             _taskService = taskService;
+            _sys_ConfigService = configService;
         }
 
         public Task Execute(IJobExecutionContext context)
@@ -71,29 +82,91 @@
             #endregion
 
             #region AGV鍚屽眰鎼繍浠诲姟
+
+            var CarryTask = _taskRepository.QueryData(x => x.TaskType == (int)TaskAGVCarryTypeEnum.CarryReloction && x.TaskState == (int)TaskAGVCarryStatusEnum.CarryNew);
             var Carry = _taskRepository.QueryFirst(x => x.TaskState == (int)TaskAGVCarryStatusEnum.CarryNew);
+            if (CarryTask .Count>0)
+            {
+                foreach (var item in CarryTask)
+                {
+                    AGVSendTask(item);
+                }
+            }
 
             if (Carry != null)
             {
-                if (Carry.SourceAddress.Contains("XB001") || Carry.TargetAddress.Contains("XB001"))
+                var task = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskAGVCarryStatusEnum.CarryNew);
+                if (task == null)
                 {
-                    _taskService.SendAgvTask("cattleCarry1", Carry.TaskNum);
-                    Carry.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
-                    _taskRepository.UpdateData(Carry);
-                }
-                else if (Carry.Floor == "1F")
-                {
-                    _taskService.SendAgvTask("forkAutoTemplate1", Carry.TaskNum);
-                    Carry.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
-                    _taskRepository.UpdateData(Carry);
-                }
-                else
-                {
-                    _taskService.SendAgvTask("cattleCarry1", Carry.TaskNum);
-                    Carry.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
-                    _taskRepository.UpdateData(Carry);
+                    var taskDto = new RequestTaskDto()
+                    {
+                        Position = Carry.SourceAddress,
+                        PalletCode = Carry.PalletCode,
+                        TaskNum = Carry.TaskNum
+                    };
+
+                    // 鑾峰彇WMSip鍦板潃
+                    var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+                    var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
+                    var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.AGVIsNeedRelocation).FirstOrDefault()?.ConfigValue;
+                    if (wmsBasez == null || requestLocation == null)
+                    {
+                        throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                    }
+                    var wmsIpAddrss = wmsBasez + requestLocation;
+
+                    var result = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
+
+                    WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
+
+                    if (!content.Status)
+                    {
+                        Carry.ExceptionMessage = content.Message;
+                        _taskRepository.UpdateData(Carry);
+                        return null;
+                    }
+
+                    // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
+                    var taskDTO = JsonConvert.DeserializeObject<List<WMSTaskDTO>>(content.Data.ToString());
+                    bool IsAddTask = false;
+                    foreach (var t in taskDTO)
+                    {
+                        if (t.TaskNum == Carry.TaskNum)
+                        {
+                            IsAddTask = true;
+                            break;
+                        }
+                        else
+                        {
+                            IsAddTask = true;
+                        }
+                    }
+                    if (IsAddTask)
+                        _taskService.ReceiveWMSTask(taskDTO);
+
+                    var taskNew = _taskRepository.QueryData(x => x.TaskType == (int)TaskAGVCarryTypeEnum.CarryReloction && x.TaskState == (int)TaskAGVCarryStatusEnum.CarryNew);
+                    if (taskNew.Count > 0)
+                    {
+                        if (taskNew[0].Remark == "2")
+                        {
+                            foreach (var item in taskNew.OrderBy(x => x.Grade).ToList())
+                            {
+                                AGVSendTask(item);
+                            }
+                        }
+                        else
+                        {
+                            foreach (var item in taskNew.OrderByDescending(x => x.Grade).ToList())
+                            {
+                                AGVSendTask(item);
+                            }
+                        }
+                    }
+
+                    AGVSendTask(Carry);
                 }
             }
+
             #endregion
 
             #region 1妤糀GV鍏ュ簱浠诲姟
@@ -132,5 +205,26 @@
 
             return Task.CompletedTask;
         }
+        public void AGVSendTask(Dt_Task task)
+        {
+            if (task.SourceAddress.Contains("XB001") || task.TargetAddress.Contains("XB001"))
+            {
+                _taskService.SendAgvTask("cattleCarry1", task.TaskNum);
+                task.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
+                _taskRepository.UpdateData(task);
+            }
+            else if (task.Floor == "1F")
+            {
+                _taskService.SendAgvTask("forkAutoTemplate1", task.TaskNum);
+                task.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
+                _taskRepository.UpdateData(task);
+            }
+            else
+            {
+                _taskService.SendAgvTask("cattleCarry1", task.TaskNum);
+                task.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
+                _taskRepository.UpdateData(task);
+            }
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 9329ec4..06af2dd 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -2,15 +2,19 @@
 using Mapster;
 using Microsoft.AspNetCore.Components.Routing;
 using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using Quartz;
 using System.Diagnostics.CodeAnalysis;
 using System.Text;
 using WIDESEAWCS_BasicInfoRepository;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Caches;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_DTO.WMS;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
@@ -323,6 +327,47 @@
                 }
                 else
                 {
+                    string[] sourceCodes = task.SourceAddress.Split("-");
+                    if (sourceCodes[0].Contains("3"))
+                    {
+                        var taskDto = new RequestTaskDto()
+                        {
+                            Position = task.SourceAddress,
+                            PalletCode = task.PalletCode,
+                            TaskNum = task.TaskNum
+                        };
+
+                        // 鑾峰彇WMSip鍦板潃
+                        var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+                        var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
+                        var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.StackerIsNeedRelocation).FirstOrDefault()?.ConfigValue;
+                        if (wmsBasez == null || requestLocation == null)
+                        {
+                            throw new InvalidOperationException("WMS IP 鏈厤缃�");
+                        }
+                        var wmsIpAddrss = wmsBasez + requestLocation;
+
+                        var result = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
+
+                        WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
+
+                        if (!content.Status)
+                        {
+                            task.ExceptionMessage = content.Message;
+                            _taskRepository.UpdateData(task);
+                            return null;
+                        }
+
+                        // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
+                        var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
+
+                        if (taskDTO.TaskNum != task.TaskNum)
+                        {
+                            _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+                            return _taskRepository.QueryFirst(x => x.TaskNum == taskDTO.TaskNum);
+                        }
+                    }
+
                     CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x=>x.DeviceCode =="1001") as CommonConveyorLine;
                     if (conveyorLine != null)
                     {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_LocationInfo.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_LocationInfo.vue"
index 51fd09f..3735622 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_LocationInfo.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_LocationInfo.vue"
@@ -46,8 +46,9 @@
             ]
         ]);
         const columns = ref([{ field: 'locationID', title: '璐т綅ID', type: 'int', width: 110, hidden: true, readonly: true, require: true, align: 'left' },
+        { field: 'areaId', title: '鍖哄煙', type: 'int', width: 130, align: 'left',bind: { key: "AreaType", data: [] } },
         { field: 'locationCode', title: '璐т綅缂栧彿', type: 'string', width: 110, require: true, align: 'left' },
-        { field: 'locationName', title: '璐т綅鍚嶇О', type: 'string', width: 120, align: 'left' },
+        { field: 'locationName', title: '璐т綅鍚嶇О', type: 'string', width: 120, align: 'left' ,hidden:true},
         { field: 'roadwayNo', title: '宸烽亾鍙�', type: 'string', width: 110, require: true, align: 'left', sort: true },
         { field: 'row', title: '琛�', type: 'string', width: 70, align: 'left' },
         { field: 'column', title: '鍒�', type: 'string', width: 70, align: 'left' },
@@ -56,7 +57,7 @@
         { field: 'locationType', title: '璐т綅绫诲瀷', type: 'int', width: 110, align: 'left',bind: { key: "LocationType", data: [] } },
         { field: 'locationStatus', title: '璐т綅鐘舵��', type: 'int', width: 110, align: 'left', bind: { key: "LocationState", data: [] } },
         { field: 'enalbeStatus', title: '鏄惁绂佺敤', type: 'int', width: 75, align: 'left', bind: { key: "EnalbeStatus", data: [] }}, 
-        { field: 'remark', title: '妫�娴嬫煖鍏佽', type: 'string', width: 110, align: 'left' ,bind: { key: "AllowStatus", data: [] }},
+        { field: 'remark', title: '澶囨敞', type: 'string', width: 110, align: 'left' ,hidden:true},
         { field: 'creater', title: '鍒涘缓浜�', type: 'string', sort: true, width: 110, align: 'left' },
         { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', sort: true, width: 150, align: 'left', sort: true },
         { field: 'modifier', title: '淇敼浜�', type: 'string', sort: true, width: 100, align: 'left' },
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_Task.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_Task.vue"
index 923d039..30b0b9e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_Task.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_Task.vue"
@@ -60,14 +60,13 @@
         { field: 'groupID', title: '搴撳瓨ID', type: 'int', width: 110, hidden: true, align: 'left' },
         { field: 'groupDetailId', title: '缁勭洏鏄庣粏ID', type: 'int', width: 110, hidden: true, align: 'left' },
         { field: 'roadway', title: '宸烽亾', type: 'string', width: 110, align: 'left' },
-        { field: 'taskType', title: '浠诲姟绫诲瀷', type: 'int', width: 110, align: 'left', bind: { key: "TaskType", data: [] } },
-        { field: 'taskState', title: '浠诲姟鐘舵��', type: 'int', width: 110, align: 'left', bind: { key: "TaskStatus", data: [] } },
+        { field: 'taskType', title: '浠诲姟绫诲瀷', type: 'int', width: 130, align: 'left', bind: { key: "taskType", data: [] } },
+        { field: 'taskState', title: '浠诲姟鐘舵��', type: 'int', width: 130, align: 'left', bind: { key: "taskState", data: [] } },
         { field: 'sourceAddress', title: '璧峰浣嶇疆', type: 'string', width: 110, align: 'left' },
         { field: 'currentAddress', title: '褰撳墠浣嶇疆', type: 'string', width: 110, align: 'left' },
         { field: 'nextAddress', title: '涓嬩竴浣嶇疆', type: 'string', width: 110, align: 'left' },
         { field: 'targetAddress', title: '鐩爣浣嶇疆', type: 'string', width: 110, align: 'left' },
         { field: 'grade', title: '浼樺厛绾�', type: 'int', width: 60, align: 'left' },
-        { field: 'productionLine', title: '浜х嚎', type: 'string', width: 70, align: 'left', bind: { key: "ProductionLine", data: [] }  },
         { field: 'errorMessage', title: '寮傚父淇℃伅', type: 'string', width: 110,  align: 'left',sort: true },
         { field: 'dispatchertime', title: '浠诲姟涓嬪彂鏃堕棿', type: 'datetime', width: 150, align: 'left', sort: true },
         { field: 'remark', title: '澶囨敞', type: 'string', width: 110, align: 'left',hidden: true, },
@@ -75,12 +74,8 @@
         { field: 'modifyDate', title: '淇敼鏃堕棿', type: 'datetime', sort: true, width: 150, align: 'left', sort: true },
         { field: 'creater', title: '鍒涘缓浜�', type: 'string', sort: true, width: 110, align: 'left' },
         { field: 'modifier', title: '淇敼浜�', type: 'string', sort: true, width: 100, align: 'left' },
-        { field: 'locationCode', title: '璐т綅鍙�', type: 'string', width: 110, hidden: true, align: 'left' },
         { field: 'materialNo', title: '鐗╂枡缂栧彿', type: 'string', width: 110, hidden: true, align: 'left' },
-        { field: 'targetAddress', title: '鐩爣鍦板潃', type: 'string', width: 110, hidden: true, align: 'left' },
-        { field: 'processCode', title: '宸ュ簭', type: 'string', width: 90, align: 'left' },
-        { field: 'createID', title: '鍒涘缓ID', type: 'int', sort: true, width: 100, hidden: true, align: 'left' },
-        { field: 'modifyID', title: '淇敼浜篒D', type: 'int', sort: true, width: 100, hidden: true, align: 'left' },]);
+    ]);
         const detail = ref({
             cnName: "#detailCnName",
             table: "#detailTable",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
index 5bab2b1..8e48c50 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
index cab6b45..0387628 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
index 27edd6c..0ede793 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
index 5acad28..71da3d0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
index 3b838e1..55ced8c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
index 714ebb5..4c3c870 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json"
index e677b16..8ff876e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json"
@@ -3,24 +3,28 @@
   "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1}|WIDESEA_IStorageTaskService\\WIDESEA_IStorageTaskServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_istoragetaskservice\\task\\idt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1}|WIDESEA_IStorageTaskService\\WIDESEA_IStorageTaskServices.csproj|solutionrelative:widesea_istoragetaskservice\\task\\idt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_dto\\basic\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\basic\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_core\\enums\\manageenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\manageenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
       "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -34,20 +38,19 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 5,
+          "SelectedChildIndex": 4,
           "Children": [
             {
               "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "RequestTaskDto.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "RelativeDocumentMoniker": "WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "RelativeToolTip": "WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAAAKAAAAAAAAAA==",
+              "DocumentIndex": 5,
+              "Title": "CustomProfile.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvxYAAAApAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T03:17:53.056Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-10-14T08:51:32.158Z"
             },
             {
               "$type": "Document",
@@ -57,22 +60,22 @@
               "RelativeDocumentMoniker": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
               "RelativeToolTip": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
-              "ViewState": "AgIAAFcAAAAAAAAAAAAMwHYAAAApAAAAAAAAAA==",
+              "ViewState": "AgIAACcAAAAAAAAAAAAjwDoAAAAZAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T01:19:55.909Z",
+              "WhenOpened": "2025-10-14T07:36:33.735Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "TaskController.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "ViewState": "AgIAAE8AAAAAAAAAAAAewGMAAAAEAAAAAAAAAA==",
+              "DocumentIndex": 3,
+              "Title": "ManageEnum.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "RelativeToolTip": "WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "ViewState": "AgIAABIAAAAAAAAAAAAMwCYAAAAIAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T01:01:30.714Z",
+              "WhenOpened": "2025-10-14T07:30:08.5Z",
               "EditorCaption": ""
             },
             {
@@ -83,32 +86,45 @@
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
               "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAaAAAAAAAAAA==",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
               "WhenOpened": "2025-10-11T07:35:46.539Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 5,
+              "DocumentIndex": 0,
+              "Title": "TaskController.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "ViewState": "AgIAAHQAAAAAAAAAAAApwIoAAABFAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-13T01:01:30.714Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
               "Title": "Program.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Program.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
               "RelativeToolTip": "WIDESEA_WMSServer\\Program.cs",
-              "ViewState": "AgIAAFQAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "ViewState": "AgIAAGsAAAAAAAAAAAD4v38AAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-10-10T06:51:04.096Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
+              "DocumentIndex": 1,
               "Title": "Dt_TaskService.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
               "RelativeDocumentMoniker": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
               "RelativeToolTip": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
-              "ViewState": "AgIAAM0CAAAAAAAAAAArwOECAAANAAAAAAAAAA==",
+              "ViewState": "AgIAAOoBAAAAAAAAAAAAAD0CAABpAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-09-25T03:08:03.698Z",
               "EditorCaption": ""
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json"
index 8bbab85..5b8b451 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json"
@@ -15,12 +15,16 @@
       "RelativeMoniker": "D:0:0:{986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1}|WIDESEA_IStorageTaskService\\WIDESEA_IStorageTaskServices.csproj|solutionrelative:widesea_istoragetaskservice\\task\\idt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_dto\\basic\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\basic\\requesttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_core\\enums\\manageenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\manageenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
       "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -34,20 +38,19 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 5,
+          "SelectedChildIndex": 6,
           "Children": [
             {
               "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "RequestTaskDto.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "RelativeDocumentMoniker": "WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "RelativeToolTip": "WIDESEA_DTO\\Basic\\RequestTaskDto.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAAAKAAAAAAAAAA==",
+              "DocumentIndex": 5,
+              "Title": "CustomProfile.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvxYAAAApAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T03:17:53.056Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-10-14T08:51:32.158Z"
             },
             {
               "$type": "Document",
@@ -57,22 +60,22 @@
               "RelativeDocumentMoniker": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
               "RelativeToolTip": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
-              "ViewState": "AgIAAFcAAAAAAAAAAAAMwHYAAAApAAAAAAAAAA==",
+              "ViewState": "AgIAACcAAAAAAAAAAAAjwDoAAAAZAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T01:19:55.909Z",
+              "WhenOpened": "2025-10-14T07:36:33.735Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "TaskController.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
-              "ViewState": "AgIAAE8AAAAAAAAAAAAewGMAAAAEAAAAAAAAAA==",
+              "DocumentIndex": 3,
+              "Title": "ManageEnum.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "RelativeToolTip": "WIDESEA_Core\\Enums\\ManageEnum.cs",
+              "ViewState": "AgIAABIAAAAAAAAAAAAMwCYAAAAIAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-13T01:01:30.714Z",
+              "WhenOpened": "2025-10-14T07:30:08.5Z",
               "EditorCaption": ""
             },
             {
@@ -83,20 +86,33 @@
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
               "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAaAAAAAAAAAA==",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
               "WhenOpened": "2025-10-11T07:35:46.539Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 5,
+              "DocumentIndex": 1,
+              "Title": "TaskController.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
+              "ViewState": "AgIAAHQAAAAAAAAAAAApwIoAAABFAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-13T01:01:30.714Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
               "Title": "Program.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Program.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
               "RelativeToolTip": "WIDESEA_WMSServer\\Program.cs",
-              "ViewState": "AgIAAFQAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "ViewState": "AgIAAGsAAAAAAAAAAAD4v38AAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-10-10T06:51:04.096Z"
             },
@@ -106,9 +122,9 @@
               "Title": "Dt_TaskService.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
               "RelativeDocumentMoniker": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs*",
-              "RelativeToolTip": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs*",
-              "ViewState": "AgIAAM0BAAAAAAAAAAAAACgCAAAMAAAAAAAAAA==",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
+              "RelativeToolTip": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
+              "ViewState": "AgIAAOQAAAAAAAAAAAAhwP4AAAAhAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-09-25T03:08:03.698Z",
               "EditorCaption": ""
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
index 4a5e263..c04251f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
@@ -7,6 +7,7 @@
 using System.Linq.Expressions;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core.Enums;
 
 namespace WIDESEA_Core.BaseRepository
 {
@@ -78,6 +79,10 @@
 
         Task<bool> DeleteDataByIdAsync(object id);
 
+        bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType);
+
+        bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType);
+
         /// <summary>
         /// 閫氳繃涓婚敭鏁版嵁鍒犻櫎澶氭潯鏁版嵁
         /// </summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
index ee96461..7032f8e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
@@ -1,23 +1,26 @@
-锘縰sing SqlSugar;
-using System.Data;
-using System.Linq.Expressions;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Reflection;
-using WIDESEA_Core.Helper;
+锘縰sing AngleSharp.Dom;
 using Microsoft.Data.SqlClient;
-using System.Drawing.Printing;
-using WIDESEA_Core.Tenants;
-using WIDESEA_Core.Seed;
-using WIDESEA_Core.DB;
-using WIDESEA_Core.Const;
-using WIDESEA_Core.AOP;
-using AngleSharp.Dom;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using SharpCompress.Common;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Drawing.Printing;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.AOP;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+using WIDESEA_Core.Tenants;
+using WIDESEA_Core.Utilities;
 
 namespace WIDESEA_Core.BaseRepository
 {
@@ -890,6 +893,106 @@
             return _db.UpdateNav(Entity).IncludesAllFirstLayer().ExecuteCommand();
         }
 
+        public bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType)
+        {
+            Type type = entity.GetType();
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
+                if (obj != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    operateTypePro.SetValue(obj, operateType.ToString());
+                    sourceIdPro.SetValue(obj, keyPro.GetValue(entity));
+
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+
+                    for (int i = 0; i < propertyInfos.Count; i++)
+                    {
+                        PropertyInfo propertyInfo = propertyInfos[i];
+                        PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                        if (property != null)
+                        {
+                            if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                            {
+                                propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
+                            }
+                            else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                            {
+                                propertyInfo.SetValue(obj, DateTime.Now);
+                            }
+                            else
+                            {
+                                propertyInfo.SetValue(obj, property.GetValue(entity));
+                            }
+                        }
+                    }
+                    if (obj != null)
+                        _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
+                }
+            }
+            return DeleteData(entity);
+        }
+
+        public bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType)
+        {
+            Type type = typeof(TEntity);
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj2 = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
+                if (obj2 != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+                    List<object> list = new List<object>();
+                    foreach (var item in entities)
+                    {
+                        object? obj = Activator.CreateInstance(htyType);
+                        if (obj != null)
+                        {
+                            operateTypePro.SetValue(obj, operateType.ToString());
+                            sourceIdPro.SetValue(obj, keyPro.GetValue(item));
+                            for (int i = 0; i < propertyInfos.Count; i++)
+                            {
+                                PropertyInfo propertyInfo = propertyInfos[i];
+                                PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                                if (property != null)
+                                {
+                                    if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                                    {
+                                        propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
+                                    }
+                                    else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                                    {
+                                        propertyInfo.SetValue(obj, DateTime.Now);
+                                    }
+                                    else
+                                    {
+                                        propertyInfo.SetValue(obj, property.GetValue(item));
+                                    }
+                                }
+                            }
+                            list.Add(obj);
+                        }
+                    }
+                    if (list.Count > 0)
+                        _db.InsertableByObject(list).AS(type.Name + "_Hty").ExecuteCommand();
+
+                }
+            }
+            return DeleteData(entities);
+        }
+
         //List<TResult> QueryMuch<T, T2, T3, TResult>(
         //    Expression<Func<T, T2, T3, object[]>> joinExpression,
         //    Expression<Func<T, T2, T3, TResult>> selectExpression,
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs"
new file mode 100644
index 0000000..7deecbf
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/ICacheService.cs"
@@ -0,0 +1,60 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Caches
+{
+    public interface ICacheService : IDisposable
+    {
+        /// <summary>
+        /// 楠岃瘉缂撳瓨椤规槸鍚﹀瓨鍦�
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        bool Exists(string key);
+
+        /// <summary>
+        /// 娣诲姞缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <param name="value">缂撳瓨Value</param>
+        /// <param name="expiresIn">缂撳瓨鏃堕暱</param>
+        /// <param name="isSliding">鏄惁婊戝姩杩囨湡锛堝鏋滃湪杩囨湡鏃堕棿鍐呮湁鎿嶄綔锛屽垯浠ュ綋鍓嶆椂闂寸偣寤堕暱杩囨湡鏃堕棿锛� //new TimeSpan(0, 60, 0);</param>
+        /// <returns></returns>
+        bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false);
+
+        bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false);
+
+        void AddOrUpdate(string key, string value, int expireSeconds = -1, bool isSliding = false);
+
+        /// <summary>
+        /// 鍒犻櫎缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        bool Remove(string key);
+
+        /// <summary>
+        /// 鎵归噺鍒犻櫎缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key闆嗗悎</param>
+        /// <returns></returns>
+        void Remove(IEnumerable<string> keys);
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        T Get<T>(string key) where T : class;
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨
+        /// </summary>
+        /// <param name="key">缂撳瓨Key</param>
+        /// <returns></returns>
+        string Get(string key);
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs"
new file mode 100644
index 0000000..5c92ef9
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/MemoryCacheService.cs"
@@ -0,0 +1,113 @@
+锘縰sing Microsoft.Extensions.Caching.Memory;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Caches
+{
+    public class MemoryCacheService : ICacheService
+    {
+        protected IMemoryCache _cache;
+        public MemoryCacheService(IMemoryCache cache)
+        {
+            _cache = cache;
+
+        }
+
+        public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false)
+        {
+            return AddObject(key, value, expireSeconds, isSliding);
+        }
+
+        public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false)
+        {
+            if (expireSeconds != -1)
+            {
+                _cache.Set(key,
+                    value,
+                    new MemoryCacheEntryOptions()
+                    .SetSlidingExpiration(new TimeSpan(0, 0, expireSeconds))
+                    );
+            }
+            else
+            {
+                _cache.Set(key, value);
+            }
+
+            return true;
+        }
+
+        public void AddOrUpdate(string key, string value, int expireSeconds = -1, bool isSliding = false)
+        {
+            if (!string.IsNullOrEmpty(Get(key)))
+            {
+                Remove(key);
+                Add(key, value, expireSeconds, isSliding);
+            }
+            else
+            {
+                Add(key, value, expireSeconds, isSliding);
+            }
+        }
+
+        public void Dispose()
+        {
+            if (_cache != null)
+                _cache.Dispose();
+            GC.SuppressFinalize(this);
+        }
+
+        public bool Exists(string key)
+        {
+            if (key == null)
+            {
+                throw new ArgumentNullException(nameof(key));
+            }
+            return _cache.Get(key) != null;
+        }
+
+        public T Get<T>(string key) where T : class
+        {
+            if (key == null)
+            {
+                throw new ArgumentNullException(nameof(key));
+            }
+            return _cache.Get(key) as T;
+        }
+
+        public string Get(string key)
+        {
+            try
+            {
+                return _cache.Get(key)?.ToString();
+            }
+            catch
+            {
+                return string.Empty;
+            }
+        }
+
+        public bool Remove(string key)
+        {
+            if (key == null)
+            {
+                throw new ArgumentNullException(nameof(key));
+            }
+            _cache.Remove(key);
+
+            return !Exists(key);
+        }
+
+        public void Remove(IEnumerable<string> keys)
+        {
+            if (keys == null)
+            {
+                throw new ArgumentNullException(nameof(keys));
+            }
+
+            keys.ToList().ForEach(item => _cache.Remove(item));
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/SqlSugarCacheService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/SqlSugarCacheService.cs"
deleted file mode 100644
index 4b6d04d..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Caches/SqlSugarCacheService.cs"
+++ /dev/null
@@ -1,69 +0,0 @@
-锘縰sing Microsoft.Extensions.Caching.Memory;
-using SqlSugar;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WIDESEA_Core.Caches
-{
-    /// <summary>
-    /// 瀹炵幇SqlSugar鐨処CacheService鎺ュ彛
-    /// </summary>
-    public class SqlSugarCacheService : ICacheService
-    {
-        private readonly Lazy<ICaching> _caching = new(() => App.GetService<ICaching>(false));
-        private ICaching Caching => _caching.Value;
-
-        public void Add<V>(string key, V value)
-        {
-            Caching.Set(key, value);
-        }
-
-        public void Add<V>(string key, V value, int cacheDurationInSeconds)
-        {
-            Caching.Set(key, value, TimeSpan.FromSeconds(cacheDurationInSeconds));
-        }
-
-        public bool ContainsKey<V>(string key)
-        {
-            return Caching.Exists(key);
-        }
-
-        public V Get<V>(string key)
-        {
-            return Caching.Get<V>(key);
-        }
-
-        public IEnumerable<string> GetAllKey<V>()
-        {
-            return Caching.GetAllCacheKeys();
-        }
-
-        public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
-        {
-            if (!ContainsKey<V>(cacheKey))
-            {
-                var value = create();
-                Caching.Set(cacheKey, value, TimeSpan.FromSeconds(cacheDurationInSeconds));
-                return value;
-            }
-
-            return Caching.Get<V>(cacheKey);
-        }
-
-        public void Remove<V>(string key)
-        {
-            Caching.Remove(key);
-        }
-
-        public bool RemoveAll()
-        {
-            Caching.RemoveAll();
-            return true;
-        }
-    }
-}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs"
new file mode 100644
index 0000000..a5b560f
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/DB/Models/IBaseHistoryEntity.cs"
@@ -0,0 +1,37 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.DB.Models
+{
+    public interface IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs"
index 09846c1..79c37b5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs"
@@ -9,12 +9,6 @@
     public enum EnableEnum
     {
         /// <summary>
-        /// 鍏ㄩ儴
-        /// </summary>
-        [Description("鍏ㄩ儴")]
-        All = -1,
-
-        /// <summary>
         /// 绂佺敤
         /// </summary>
         [Description("绂佺敤")]
@@ -32,12 +26,6 @@
     /// </summary>
     public enum LocationEnum
     {
-        /// <summary>
-        /// 鍏ㄩ儴
-        /// </summary>
-        [Description("鍏ㄩ儴")]
-        All = -1,
-
         /// <summary>
         /// 绌洪棽
         /// </summary>
@@ -67,12 +55,6 @@
         /// </summary>
         [Description("鏃犺揣绂佺敤")]
         FreeDisable = 4,
-
-        /// <summary>
-        /// 棰勫垎閰�
-        /// </summary>
-        [Description("棰勫垎閰�")]
-        Distribute = 5,
     }
 
     public enum LocationState
@@ -226,7 +208,13 @@
         /// AGV鎼繍
         /// </summary>
         [Description("AGV鎼繍")]
-        Carry = 400
+        Carry = 400,
+
+        /// <summary>
+        /// AGV绉诲簱鎼繍
+        /// </summary>
+        [Description("AGV绉诲簱鎼繍")]
+        CarryReloction = 410
     }
     public enum TaskAcrossFloorTypeEnum
     {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs"
index 4d3a5ab..b2a5e8e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/MemoryCacheSetup.cs"
@@ -14,14 +14,15 @@
         public static void AddMemoryCacheSetup(this IServiceCollection services)
         {
             if (services == null) throw new ArgumentNullException(nameof(services));
-
-            services.AddScoped<ICaching, Caching>();
-            services.AddSingleton<IMemoryCache>(factory =>
-            {
-                var value = factory.GetRequiredService<IOptions<MemoryCacheOptions>>();
-                var cache = new MemoryCache(value);
-                return cache;
-            });
+            services.AddSingleton<ICacheService, MemoryCacheService>();
+            services.AddMemoryCache();
+            //services.AddScoped<ICaching, Caching>();
+            //services.AddSingleton<IMemoryCache>(factory =>
+            //{
+            //    var value = factory.GetRequiredService<IOptions<MemoryCacheOptions>>();
+            //    var cache = new MemoryCache(value);
+            //    return cache;
+            //});
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs"
index 2fcf1a9..1d6a747 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs"
@@ -24,6 +24,8 @@
 
     public int AreaId { get; set; }
 
+    public int TaskNum { get; set; }
+
 }
 public class RequestAcrossFloorTaskDto
 {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs"
new file mode 100644
index 0000000..ffa7f3b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/System/VueDictionaryDTO.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.System
+{
+    public class VueDictionaryDTO
+    {
+        public string DicNo { get; set; }
+
+        public string Config { get; set; }
+
+        public object Data {  get; set; }
+
+        public bool SaveCache { get; set; } = true;
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs"
index d910e35..05b6d69 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs"
@@ -58,5 +58,8 @@
         /// 澶�  娉�: 鎵樼洏浜х嚎
         ///</summary>
         public string? AGVTaskNum { get; set; }
+
+
+        public string? Remark { get; set; }
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IServices/ISys_DictionaryService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IServices/ISys_DictionaryService.cs"
index 9bf55c4..0fb6035 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IServices/ISys_DictionaryService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IServices/ISys_DictionaryService.cs"
@@ -4,12 +4,14 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.System;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IServices
 {
     public interface ISys_DictionaryService : IService<Sys_Dictionary>
     {
-        object GetVueDictionary(string[] dicNos);
+        //object GetVueDictionary(string[] dicNos);
+        List<VueDictionaryDTO> GetVueDictionary(string[] dicNos);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockInfoTimeoutRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockInfoTimeoutRepository.cs"
deleted file mode 100644
index ffa1ef1..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockInfoTimeoutRepository.cs"
+++ /dev/null
@@ -1,6 +0,0 @@
-锘縩amespace WIDESEA_IStorageBasicRepository
-{
-    public interface IStockInfoTimeoutRepository : IRepository<DtStockInfo>
-    {
-    }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs"
deleted file mode 100644
index bc8ba08..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs"
+++ /dev/null
@@ -1,14 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEA_Core.BaseRepository;
-using WIDESEA_Model.Models;
-
-namespace WIDESEA_IStorageBasicRepository
-{
-    public interface IStockQuantityChangeRecordRepository : IRepository<DtStockQuantityChangeRecord>
-    {
-    }
-}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockInfoTimeoutService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockInfoTimeoutService.cs"
deleted file mode 100644
index e3d5578..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockInfoTimeoutService.cs"
+++ /dev/null
@@ -1,5 +0,0 @@
-锘縩amespace WIDESEA_IStorageBasicService;
-
-public interface IStockInfoTimeoutService : IService<DtStockInfo>
-{
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs"
deleted file mode 100644
index e1a8b81..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs"
+++ /dev/null
@@ -1,5 +0,0 @@
-锘縩amespace WIDESEA_IStorageBasicService;
-
-public interface IStockQuantityChangeRecordService : IService<DtStockQuantityChangeRecord>
-{
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs"
index 8a7a5f0..98208ae 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs"
@@ -56,7 +56,7 @@
     /// <param name="AreaId"></param>
     /// <returns></returns>
 
-    Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId);
+    Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId, DtLocationInfo location);
 
     /// <summary>
     /// 璇锋眰浠诲姟璐т綅
@@ -118,4 +118,19 @@
 
     Task<WebResponseContent> RequestPointAGVCarryTaskAsync(RequestTaskDto taskDto);
 
+
+    /// <summary>
+    /// 鍫嗗灈鏈哄嚭搴撴槸鍚﹂渶瑕佺Щ搴�
+    /// </summary>
+    /// <param name="taskDto"></param>
+    /// <returns></returns>
+    Task<WebResponseContent> StackerIsNeedRelocationAsync(RequestTaskDto taskDto);
+
+    /// <summary>
+    /// AGV鍑哄簱鏄惁闇�瑕佺Щ搴�
+    /// </summary>
+    /// <param name="taskDto"></param>
+    /// <returns></returns>
+    Task<WebResponseContent> AGVIsNeedRelocationAsync(RequestTaskDto taskDto);
+
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfoDetail_Hty.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfoDetail_Hty.cs"
new file mode 100644
index 0000000..ade0f42
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfoDetail_Hty.cs"
@@ -0,0 +1,34 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System.ComponentModel.DataAnnotations;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models;
+
+[SugarTable(nameof(DtBoxingInfoDetail_Hty), "缁勭洏鏄庣粏鍘嗗彶")]
+public class DtBoxingInfoDetail_Hty : DtBoxingInfoDetail,IBaseHistoryEntity
+{
+    //// <summary>
+    /// 鍘熻〃涓婚敭
+    /// </summary>
+    [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+    [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+    [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+    public int SourceId { get; set; }
+
+    /// <summary>
+    /// 鎿嶄綔绫诲瀷
+    /// </summary>
+    [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+    [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+    [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+    public string OperateType { get; set; }
+
+    /// <summary>
+    /// 绉诲叆鍘嗗彶鏃堕棿
+    /// </summary>
+    [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+    [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+    [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+    public DateTime InsertTime { get; set; }
+}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfo_Hty.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfo_Hty.cs"
new file mode 100644
index 0000000..434ac58
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtBoxingInfo_Hty.cs"
@@ -0,0 +1,36 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using Masuit.Tools.Core.Validator;
+using SqlSugar;
+using System.ComponentModel.DataAnnotations;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(DtBoxingInfo_Hty), "缁勭洏鍘嗗彶淇℃伅")]
+    public class DtBoxingInfo_Hty : DtBoxingInfo,IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail_Hty.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail_Hty.cs"
index 7436de3..86d3402 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail_Hty.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail_Hty.cs"
@@ -1,74 +1,33 @@
-锘縰sing SqlSugar;
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
 using WIDESEA_Core.DB.Models;
 
 namespace WIDESEA_Model.Models;
 
 [SugarTable(nameof(DtStockInfoDetail_Hty), "搴撳瓨淇℃伅鏄庣粏")]
-public class DtStockInfoDetail_Hty : BaseEntity
+public class DtStockInfoDetail_Hty : DtStockInfoDetail, IBaseHistoryEntity
 {
     /// <summary>
-    /// 涓婚敭
+    /// 鍘熻〃涓婚敭
     /// </summary>
-    [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
-    public int Id { get; set; }
+    [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+    [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+    [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+    public int SourceId { get; set; }
 
     /// <summary>
-    /// 搴撳瓨淇℃伅涓婚敭
+    /// 鎿嶄綔绫诲瀷
     /// </summary>
-    [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨淇℃伅涓婚敭")]
-    public int StockId { get; set; }
+    [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+    [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+    [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+    public string OperateType { get; set; }
 
     /// <summary>
-    /// 鐗╂枡缂栧彿
+    /// 绉诲叆鍘嗗彶鏃堕棿
     /// </summary>
-    [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
-    public string MaterielCode { get; set; }
-
-    /// <summary>
-    /// 鐗╂枡鍚嶇О
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
-    public string MaterielName { get; set; }
-
-    /// <summary>
-    /// 鍗曟嵁缂栧彿
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
-    public string OrderNo { get; set; }
-
-    /// <summary>
-    /// 鎵规鍙�
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鎵规鍙�")]
-    public string BatchNo { get; set; }
-
-    /// <summary>
-    /// 搴忓垪鍙�
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 100, ColumnDescription = "搴忓垪鍙�")]
-    public string SerialNumber { get; set; }
-
-    /// <summary>
-    /// 搴撳瓨鏁伴噺
-    /// </summary>
-    [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "搴撳瓨鏁伴噺")]
-    public decimal StockQuantity { get; set; }
-
-    /// <summary>
-    /// 鍑哄簱鏁伴噺
-    /// </summary>
-    [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍑哄簱鏁伴噺", DefaultValue = "0")]
-    public decimal OutboundQuantity { get; set; }
-
-    /// <summary>
-    /// 搴撳瓨鏄庣粏鐘舵��
-    /// </summary>
-    [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨鏄庣粏鐘舵��")]
-    public int Status { get; set; }
-
-    /// <summary>
-    /// 澶囨敞
-    /// </summary>
-    [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞", Length = int.MaxValue)]
-    public string Remark { get; set; }
+    [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+    [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+    [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+    public DateTime InsertTime { get; set; }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs"
index cb15130..b8c8a02 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs"
@@ -5,137 +5,30 @@
 namespace WIDESEA_Model.Models
 {
     [SugarTable(nameof(DtStockInfo_Hty), "搴撳瓨淇℃伅鍘嗗彶")]
-    public class DtStockInfo_Hty : BaseEntity
+    public class DtStockInfo_Hty : DtStockInfo, IBaseHistoryEntity
     {
         /// <summary>
-        /// 涓婚敭
+        /// 鍘熻〃涓婚敭
         /// </summary>
-        [ImporterHeader(Name = "涓婚敭")]
-        [ExporterHeader(DisplayName = "涓婚敭")]
-        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
-        public int Id { get; set; }
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
 
         /// <summary>
-        /// 鎵樼洏缂栧彿
+        /// 鎿嶄綔绫诲瀷
         /// </summary>
-        [ImporterHeader(Name = "鎵樼洏缂栧彿")]
-        [ExporterHeader(DisplayName = "鎵樼洏缂栧彿")]
-        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
-        public string PalletCode { get; set; }
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
 
         /// <summary>
-        /// 璐т綅缂栧彿
+        /// 绉诲叆鍘嗗彶鏃堕棿
         /// </summary>
-        [ImporterHeader(Name = "璐т綅ID")]
-        [ExporterHeader(DisplayName = "璐т綅ID")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "璐т綅ID")]
-        public int LocationId { get; set; }
-
-        /// <summary>
-        /// 璐т綅缂栧彿
-        /// </summary>
-        [ImporterHeader(Name = "璐т綅缂栧彿")]
-        [ExporterHeader(DisplayName = "璐т綅缂栧彿")]
-        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "璐т綅缂栧彿")]
-        public string LocationCode { get; set; }
-
-        /// <summary>
-        /// 鏄惁婊$洏
-        /// </summary>
-        [ImporterHeader(Name = "鏄惁瀹炵洏")]
-        [ExporterHeader(DisplayName = "鏄惁瀹炵洏")]
-        [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁婊$洏", DefaultValue = "0")]
-        public bool IsFull { get; set; }
-
-        /// <summary>
-        /// 澶囨敞 (闈欏埗\闄堝寲鏃堕棿)
-        /// </summary>
-        [ImporterHeader(Name = "鐢佃姱鏁伴噺")]
-        [ExporterHeader(DisplayName = "鐢佃姱鏁伴噺")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "鐢佃姱鏁伴噺")]
-        public string Remark { get; set; }
-
-        /// <summary>
-        /// 鍏宠仈宸ュ簭杩斿洖鏃堕棿锛堟敞娑瞈闈欑疆鏃堕暱锛�
-        /// </summary>
-        [ImporterHeader(Name = "宸ュ簭杩斿洖鏃堕棿")]
-        [ExporterHeader(DisplayName = "宸ュ簭杩斿洖鏃堕棿")]
-        public string LinedProcessFeedbackTime { get; set; }
-
-        /// <summary>
-        /// 鐗瑰緛鍙傛暟杩斿洖(闈欑疆鏃堕暱)
-        /// </summary>
-        [ImporterHeader(Name = "闈欑疆鏃堕暱")]
-        [ExporterHeader(DisplayName = "闈欑疆鏃堕暱")]
-        public string SpecialParameterDuration { get; set; }
-
-        /// <summary>
-        /// 鐢熶骇浜х嚎
-        /// </summary>
-        [ImporterHeader(Name = "鐢熶骇浜х嚎")]
-        [ExporterHeader(DisplayName = "鐢熶骇浜х嚎")]
-        public string ProductionLine { get; set; }
-
-        /// <summary>
-        /// 鍖哄煙缂栫爜
-        /// </summary>
-        [ImporterHeader(Name = "鍖哄煙缂栫爜")]
-        [ExporterHeader(DisplayName = "鍖哄煙缂栫爜")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "鍖哄煙缂栫爜")]
-        public string AreaCode { get; set; }
-
-        /// <summary>
-        /// 搴斿嚭搴撴椂闂�
-        /// </summary>
-        [ImporterHeader(Name = "搴斿嚭搴撴椂闂�")]
-        [ExporterHeader(DisplayName = "搴斿嚭搴撴椂闂�")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "搴斿嚭搴撴椂闂�")]
-        public DateTime? OutboundTime { get; set; }
-
-        /// <summary>
-        /// 鍙傛暟淇℃伅
-        /// </summary>
-        [ImporterHeader(Name = "鍙傛暟淇℃伅")]
-        [ExporterHeader(DisplayName = "鍙傛暟淇℃伅")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "鍙傛暟淇℃伅", Length = int.MaxValue)]
-        public string ParameterInfos { get; set; }
-
-        /// <summary>
-        /// 搴撳瓨鐘舵��
-        /// </summary>
-        [ImporterHeader(Name = "搴撳瓨鐘舵��")]
-        [ExporterHeader(DisplayName = "搴撳瓨鐘舵��")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "搴撳瓨鐘舵��")]
-        public int StockStatus { get; set; }
-
-        /// <summary>
-        /// 褰撳墠宸ュ簭
-        /// </summary>
-        [ImporterHeader(Name = "褰撳墠宸ュ簭")]
-        [ExporterHeader(DisplayName = "褰撳墠宸ュ簭")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "褰撳墠宸ュ簭")]
-        public string ProcessCode { get; set; }
-
-        /// <summary>
-        /// 涓嬩竴宸ュ簭
-        /// </summary>
-        [ImporterHeader(Name = "涓嬩竴宸ュ簭")]
-        [ExporterHeader(DisplayName = "涓嬩竴宸ュ簭")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "涓嬩竴宸ュ簭")]
-        public string NextProcessCode { get; set; }
-
-        /// <summary>
-        /// 搴撳瓨鏄庣粏
-        /// </summary>
-        [SugarColumn(ColumnName = "StockInfoDetails")]
-        [Navigate(NavigateType.OneToMany, nameof(DtStockInfoDetail_Hty.StockId))]
-        public List<DtStockInfoDetail_Hty>? StockInfoDetails { get; set; }
-
-        /// <summary>
-        /// 璐т綅鏁版嵁
-        /// </summary>
-        [SugarColumn(ColumnName = "LocationInfo")]
-        [Navigate(NavigateType.OneToOne, nameof(LocationId), nameof(DtLocationInfo.Id))]
-        public DtLocationInfo? LocationInfo { get; set; }
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockQuantityChangeRecord.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockQuantityChangeRecord.cs"
deleted file mode 100644
index e6c2df1..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockQuantityChangeRecord.cs"
+++ /dev/null
@@ -1,109 +0,0 @@
-锘縰sing SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEA_Core.DB.Models;
-
-namespace WIDESEA_Model.Models;
-
-[SugarTable(nameof(DtStockQuantityChangeRecord), "搴撳瓨鍙樺姩淇℃伅璁板綍")]
-public class DtStockQuantityChangeRecord : BaseEntity
-{
-    /// <summary>
-    /// 涓婚敭
-    /// </summary>
-    [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
-    public int Id { get; set; }
-
-    /// <summary>
-    /// 搴撳瓨鏄庣粏涓婚敭
-    /// </summary>
-    [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨鏄庣粏涓婚敭")]
-    public int StockDetailId { get; set; }
-
-    /// <summary>
-    /// 鎵樼洏缂栧彿
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
-    public string PalleCode { get; set; }
-
-    /// <summary>
-    /// 鐗╂枡缂栧彿
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
-    public string MaterielCode { get; set; }
-
-    /// <summary>
-    /// 鐗╂枡鍚嶇О
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
-    public string MaterielName { get; set; }
-
-    /// <summary>
-    /// 鎵规鍙�
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鎵规鍙�")]
-    public string BatchNo { get; set; }
-
-    /// <summary>
-    /// 搴忓垪鍙�
-    /// </summary>
-    [SugarColumn(IsNullable = false, Length = 100, ColumnDescription = "搴忓垪鍙�")]
-    public string SerilNumber { get; set; }
-
-    /// <summary>
-    /// 鍗曟嵁缂栧彿
-    /// </summary>
-    [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
-    public string OrderNo { get; set; }
-
-    /// <summary>
-    /// 鍗曟嵁涓婚敭
-    /// </summary>
-    [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁涓婚敭")]
-    public int? OrderId { get; set; }
-
-    /// <summary>
-    /// 鍗曟嵁鏄庣粏涓婚敭
-    /// </summary>
-    [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁鏄庣粏涓婚敭")]
-    public int? OrderDetailId { get; set; }
-
-    /// <summary>
-    /// 浠诲姟鍙�
-    /// </summary>
-    [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟鍙�")]
-    public int? TaskNum { get; set; }
-
-    /// <summary>
-    /// 鍙樺姩绫诲瀷锛堝嚭搴撱�佸叆搴撱�佹墜鍔ㄨ皟鏁�...
-    /// </summary>
-    [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩绫诲瀷锛堝嚭搴撱�佸叆搴撱�佹墜鍔ㄨ皟鏁�...锛�")]
-    public int ChangeType { get; set; }
-
-    /// <summary>
-    /// 鍙樺姩鏁伴噺锛堟鏁拌〃绀哄鍔狅紝璐熸暟琛ㄧず鍑忓皯锛�"
-    /// </summary>
-    [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍙樺姩鏁伴噺锛堟鏁拌〃绀哄鍔狅紝璐熸暟琛ㄧず鍑忓皯锛�")]
-    public decimal ChangeQuantity { get; set; }
-
-    /// <summary>
-    /// 鍙樺姩鍓嶅簱瀛橀噺
-    /// </summary>
-    [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍙樺姩鍓嶅簱瀛橀噺", DefaultValue = "0")]
-    public decimal BeforeQuantity { get; set; }
-
-    /// <summary>
-    /// 鍙樺姩鍚庡簱瀛橀噺
-    /// </summary>
-    [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍙樺姩鍚庡簱瀛橀噺", DefaultValue = "0")]
-    public decimal AfterQuantity { get; set; }
-
-    /// <summary>
-    /// 澶囨敞
-    /// </summary>
-    [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
-    public string Remark { get; set; }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Repository/Sys_DictionaryRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Repository/Sys_DictionaryRepository.cs"
index d60dbd6..4ed2cf3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Repository/Sys_DictionaryRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Repository/Sys_DictionaryRepository.cs"
@@ -25,20 +25,20 @@
         /// <returns></returns>
         public IEnumerable<Sys_Dictionary> GetDictionaries(IEnumerable<string> dicNos, bool executeSql = true)
         {
-            List<Sys_Dictionary> Dictionaries = GetAllDictionary();
+            List<Sys_Dictionary> Dictionaries = GetAllDictionary(dicNos);
 
-            foreach (var item in Dictionaries.Where(x => dicNos.Contains(x.DicNo)))
-            {
-                if (executeSql)
-                {
-                    //  2020.05.01澧炲姞鏍规嵁鐢ㄦ埛淇℃伅鍔犺浇瀛楀吀鏁版嵁婧恠ql
-                    string sql = item.DBSql;
-                    if (!string.IsNullOrEmpty(sql))
-                    {
-                        item.DicList = Query(sql);
-                    }
-                }
-            }
+            //foreach (var item in Dictionaries.Where(x => dicNos.Contains(x.DicNo)))
+            //{
+            //    if (executeSql)
+            //    {
+            //        //  2020.05.01澧炲姞鏍规嵁鐢ㄦ埛淇℃伅鍔犺浇瀛楀吀鏁版嵁婧恠ql
+            //        string sql = item.DBSql;
+            //        if (!string.IsNullOrEmpty(sql))
+            //        {
+            //            item.DicList = Query(sql);
+            //        }
+            //    }
+            //}
 
             return Dictionaries;
         }
@@ -59,10 +59,11 @@
             }
         }
 
-        private List<Sys_Dictionary> GetAllDictionary()
+        private List<Sys_Dictionary> GetAllDictionary(IEnumerable<string> dicNos)
         {
             //base.QueryData().ToList();
-            List<Sys_Dictionary> _dictionaries = Db.Queryable<Sys_Dictionary>().Includes(x => x.DicList).Where(x => x.Enable == 1).ToList();
+            //List<Sys_Dictionary> _dictionaries = Db.Queryable<Sys_Dictionary>().Includes(x => x.DicList).Where(x => x.Enable == 1).ToList();
+            List<Sys_Dictionary> _dictionaries = Db.Queryable<Sys_Dictionary>().Includes(x => x.DicList).Where(x => x.Enable == 1 && dicNos.Contains(x.DicNo)).ToList();
             return _dictionaries;
         }
     }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Services/Sys_DictionaryService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Services/Sys_DictionaryService.cs"
index 621a3ec..186f3da 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Services/Sys_DictionaryService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Services/Sys_DictionaryService.cs"
@@ -1,10 +1,22 @@
-锘縰sing System;
+锘縰sing Autofac.Core;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
+using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
+using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Caches;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.System;
 using WIDESEA_IRepository;
 using WIDESEA_IServices;
 using WIDESEA_Model.Models;
@@ -14,37 +26,105 @@
     public class Sys_DictionaryService : ServiceBase<Sys_Dictionary, ISys_DictionaryRepository>, ISys_DictionaryService
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
-        public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        private readonly ICacheService _cacheService;
+        public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
+            _cacheService = cacheService;
         }
 
-        public object GetVueDictionary(string[] dicNos)
+        //public object GetVueDictionary(string[] dicNos)
+        //{
+        //    if (dicNos == null || dicNos.Count() == 0) return new string[] { };
+
+        //    var dicConfig = BaseDal.GetDictionaries(dicNos, false).Select(s => new
+        //    {
+        //        dicNo = s.DicNo,
+        //        config = s.Config,
+        //        dbSql = s.DBSql,
+        //        list = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName })
+        //    }).ToList();
+
+        //    object GetSourceData(string dicNo, string dbSql, object data)
+        //    {
+        //        if (string.IsNullOrEmpty(dbSql))
+        //        {
+        //            return data as object;
+        //        }
+        //        return BaseDal.QueryObjectDataBySql(dbSql, null);
+        //    }
+        //    return dicConfig.Select(item => new
+        //    {
+        //        item.dicNo,
+        //        item.config,
+        //        data = GetSourceData(item.dicNo, item.dbSql, item.list)
+        //    }).ToList();
+        //}
+
+        public List<VueDictionaryDTO> GetVueDictionary(string[] dicNos)
         {
-            if (dicNos == null || dicNos.Count() == 0) return new string[] { };
+            if (dicNos == null || dicNos.Count() == 0) return new List<VueDictionaryDTO>();
+            List<VueDictionaryDTO> vueDictionaryDTOs = new List<VueDictionaryDTO>();
 
-            var dicConfig = BaseDal.GetDictionaries(dicNos, false).Select(s => new
+            List<string> cacheDicNos = new List<string>();
+            foreach (string n in dicNos)
             {
-                dicNo = s.DicNo,
-                config = s.Config,
-                dbSql = s.DBSql,
-                list = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName })
-            }).ToList();
-
-            object GetSourceData(string dicNo, string dbSql, object data)
-            {
-                if (string.IsNullOrEmpty(dbSql))
+                string? str = _cacheService.Get(n);
+                if (!string.IsNullOrEmpty(str))
                 {
-                    return data as object;
+                    VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
+
+                    if (vueDictionary != null)
+                    {
+                        vueDictionaryDTOs.Add(vueDictionary);
+                        cacheDicNos.Add(n);
+                    }
                 }
-                return BaseDal.QueryObjectDataBySql(dbSql, null);
             }
-            return dicConfig.Select(item => new
+            if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
             {
-                item.dicNo,
-                item.config,
-                data = GetSourceData(item.dicNo, item.dbSql, item.list)
-            }).ToList();
+                List<string> list = dicNos.Where(x => !cacheDicNos.Contains(x)).ToList();
+                List<Sys_Dictionary> dictionaries = BaseDal.GetDictionaries(list).ToList();
+
+                List<VueDictionaryDTO> selectDics = dictionaries.Select(s => new VueDictionaryDTO
+                {
+                    DicNo = s.DicNo,
+                    Config = s.Config,
+                    //dbSql = s.Sql,
+                    Data = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName })
+                }).ToList();
+
+                foreach (var v in dictionaries)
+                {
+                    if (!string.IsNullOrEmpty(v.DBSql))
+                    {
+                        VueDictionaryDTO? temp = selectDics.FirstOrDefault(x => x.DicNo == v.DicNo);
+                        if (temp != null)
+                            selectDics.Remove(temp);
+                        selectDics.Add(new VueDictionaryDTO
+                        {
+                            Config = v.Config,
+                            DicNo = v.DicNo,
+                            Data = BaseDal.QueryDynamicDataBySql(v.DBSql),
+                            SaveCache = false,
+                        });
+                    }
+                }
+
+                foreach (var item in selectDics)
+                {
+                    if (!_cacheService.Exists(item.DicNo) && item.SaveCache)
+                    {
+                        _cacheService.Add(item.DicNo, item.Serialize());
+                    }
+                }
+                vueDictionaryDTOs.AddRange(selectDics);
+            }
+
+            return vueDictionaryDTOs;
         }
+
+
+       
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/Stock/StockInfoTimeoutRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/Stock/StockInfoTimeoutRepository.cs"
deleted file mode 100644
index 667d5cd..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/Stock/StockInfoTimeoutRepository.cs"
+++ /dev/null
@@ -1,9 +0,0 @@
-锘縩amespace WIDESEA_StorageBasicRepository
-{
-    public class StockInfoTimeoutRepository : RepositoryBase<DtStockInfo>, IStockInfoTimeoutRepository
-    {
-        public StockInfoTimeoutRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
-        {
-        }
-    }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs"
deleted file mode 100644
index 4697014..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs"
+++ /dev/null
@@ -1,9 +0,0 @@
-锘縩amespace WIDESEA_StorageBasicRepository
-{
-    public class StockQuantityChangeRecordRepository : RepositoryBase<DtStockQuantityChangeRecord>, IStockQuantityChangeRecordRepository
-    {
-        public StockQuantityChangeRecordRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
-        {
-        }
-    }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoTimeoutService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoTimeoutService.cs"
deleted file mode 100644
index 5007d2d..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoTimeoutService.cs"
+++ /dev/null
@@ -1,88 +0,0 @@
-锘縰sing SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEA_Cache;
-
-namespace WIDESEA_StorageBasicServices.Stock
-{
-    public class StockInfoTimeoutService : ServiceBase<DtStockInfo, IStockInfoRepository>, IStockInfoTimeoutService
-    {
-
-        private readonly ISimpleCacheService _simpleCacheService;
-        private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
-        public StockInfoTimeoutService(IStockInfoRepository BaseDal, ISimpleCacheService simpleCacheService, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository) : base(BaseDal)
-        {
-            _simpleCacheService = simpleCacheService;
-            _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository;
-        }
-
-        public override PageGridData<DtStockInfo> GetPageData(PageDataOptions options)
-        {
-            string wheres = ValidatePageOptions(options);
-            //鑾峰彇鎺掑簭瀛楁
-            Dictionary<string, SqlSugar.OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
-            List<OrderByModel> orderByModels = new List<OrderByModel>();
-            foreach (var item in orderbyDic)
-            {
-                OrderByModel orderByModel = new()
-                {
-                    FieldName = item.Key,
-                    OrderByType = item.Value
-                };
-                orderByModels.Add(orderByModel);
-            }
-
-
-            int totalCount = 0;
-            List<SearchParameters> searchParametersList = new List<SearchParameters>();
-            if (!string.IsNullOrEmpty(options.Wheres))
-            {
-                try
-                {
-                    searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
-                    options.Filter = searchParametersList;
-                }
-                catch { }
-            }
-
-            Expression<Func<DtStockInfo, bool>> locationStatus = null;
-            Expression<Func<DtStockInfo, bool>> roadwayNo = null;
-            Expression<Func<DtStockInfo, bool>> materielCode = null;
-            foreach (var item in searchParametersList)
-            {
-                if (item.Name.Contains("locationStatus"))
-                {
-                    locationStatus = x => x.LocationInfo.LocationStatus == Convert.ToInt32(item.Value);
-                }
-                else if (item.Name.Contains("roadwayNo"))
-                {
-                    roadwayNo = x => x.LocationInfo.RoadwayNo.Contains(item.Value);
-                }
-                else if (item.Name.Contains("materielCode"))
-                {
-                    materielCode = x => x.StockInfoDetails.Any(d => d.MaterielCode.Contains(item.Value));
-                }
-            }
-
-            var now = DateTime.Now;
-            // 浣跨敤Subtract鏂规硶
-            var threeHoursAgo = now.Subtract(TimeSpan.FromHours(3));
-
-            var data = BaseDal.Db.Queryable<DtStockInfo>()
-                .Includes(x => x.StockInfoDetails)
-                .Includes(x => x.LocationInfo)
-                .Where(x => x.OutboundTime < threeHoursAgo)
-                .WhereIF(!wheres.IsNullOrEmpty(), wheres)
-                .WhereIF(locationStatus != null, locationStatus)
-                .WhereIF(roadwayNo != null, roadwayNo)
-                .WhereIF(materielCode != null, materielCode)
-                .OrderBy(orderByModels)
-                .ToPageList(options.Page, options.Rows, ref totalCount);
-            return new PageGridData<DtStockInfo>(totalCount, data);
-        }
-    }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs"
deleted file mode 100644
index a43d519..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs"
+++ /dev/null
@@ -1,8 +0,0 @@
-锘縩amespace WIDESEA_StorageBasicService;
-
-public class StockQuantityChangeRecordService : ServiceBase<DtStockQuantityChangeRecord, IStockQuantityChangeRecordRepository>, IStockQuantityChangeRecordService
-{
-    public StockQuantityChangeRecordService(IStockQuantityChangeRecordRepository BaseDal) : base(BaseDal)
-    {
-    }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs"
index 30e9837..e91b1a3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs"
@@ -2,16 +2,20 @@
 using log4net.Core;
 using Mapster;
 using Masuit.Tools;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
 using OfficeOpenXml.Table.PivotTable;
 using SixLabors.Fonts.Tables.AdvancedTypographic;
 using SqlSugar;
 using System;
+using System.Collections.Generic;
 using System.Reflection.Metadata;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using WIDESEA_Cache;
 using WIDESEA_Common;
+using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.Const;
+using WIDESEA_Core.Enums;
 using WIDESEA_DTO.Location;
 using WIDESEA_DTO.WMS;
 using WIDESEA_IServices;
@@ -19,6 +23,7 @@
 using WIDESEA_Model.Models.Basic;
 using WIDESEAWCS_BasicInfoRepository;
 using WIDESEAWCS_QuartzJob.Models;
+using static System.Collections.Specialized.BitVector32;
 
 namespace WIDESEA_StorageTaskServices;
 
@@ -169,6 +174,12 @@
         WebResponseContent content = new WebResponseContent();
         try
         {
+            var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress);
+            var Targetlocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress);
+
+            UpdateLocationStatus(Sourcelocation, LocationEnum.Free);
+            UpdateLocationStatus(Targetlocation, LocationEnum.InStock);
+
             task.TaskState = (int)TaskAGVCarryStatusEnum.CarryFinish;
             var taskHty = task.Adapt<Dt_Task_Hty>();
             taskHty.FinishTime = DateTime.Now;
@@ -240,7 +251,8 @@
 
 
         // 楠岃瘉搴撳瓨鏄惁瀛樺湪
-        var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
+        //var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
+        DtStockInfo stock = null;
 
         if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
         {
@@ -282,11 +294,18 @@
 
             var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
 
+            var TargetAddress = await GetEmptyLocation("SC1");
+
+            if (location == null || TargetAddress == null)
+            {
+                return content.Error("璧风偣鏈畾涔夋垨缁堢偣鍖哄煙鏈壘鍒扮┖闂插簱浣�");
+            }
+
             Dt_Task taskNew = new Dt_Task
             {
                 Grade = 1,
                 Roadway = "SC1",
-                TargetAddress = "SC1",
+                TargetAddress = TargetAddress.LocationCode,
                 Dispatchertime = DateTime.Now,
                 MaterialNo = "",
                 NextAddress = station.stationChildCode,
@@ -304,7 +323,7 @@
             };
             var taskDTO = CreateListTaskDTO(taskNew);
 
-            var isResult = await AddInBoundTaskAsync(taskNew, location);
+            var isResult = await AddTaskAsync(taskNew, location,TargetAddress);
             if (!isResult)
             {
                 _unitOfWorkManage.RollbackTran();
@@ -435,7 +454,11 @@
 
             var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
 
-            DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(2);
+            DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(2, Sourcelocation);
+            if (Targetlocation == null || Sourcelocation == null)
+            {
+                return content.Error("璧风偣鏈畾涔夋垨缁堢偣鍖哄煙鏈壘鍒扮┖闂插簱浣�");
+            }
             Dt_Task taskNew = new Dt_Task
             {
                 Grade = 1,
@@ -543,14 +566,13 @@
     #region 璇锋眰璺ㄦゼ灞備换鍔�
     public async Task<WebResponseContent> RequestAcrossFloorTaskAsync(RequestTaskDto taskDto)
     {
-        LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "绉诲簱浠诲姟瀹屾垚", $"111111");
         WebResponseContent content = new WebResponseContent();
         try
         {
 
             var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
 
-            DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId);
+            DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId, Sourcelocation);
 
             if (Targetlocation == null || Sourcelocation == null)
             {
@@ -676,7 +698,7 @@
         {
             var Sourcelocation = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
 
-            DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId);
+            DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(taskDto.AreaId,Sourcelocation);
 
             if (Targetlocation == null || Sourcelocation == null)
             {
@@ -695,7 +717,7 @@
                 TargetAddress = Targetlocation.LocationCode,
                 Dispatchertime = DateTime.Now,
                 MaterialNo = "",
-                NextAddress = taskDto.TargetAddress,
+                NextAddress = Targetlocation.LocationCode,
                 OrderNo = null,
                 PalletCode = taskDto.PalletCode,
                 SourceAddress = taskDto.Position,
@@ -710,6 +732,9 @@
             };
             var taskDTO = CreateListTaskDTO(taskNew);
 
+            UpdateLocationStatus(Sourcelocation, LocationEnum.InStockDisable);
+            UpdateLocationStatus(Targetlocation, LocationEnum.Lock);
+
             var isResult = await AddTaskAsync(taskNew, Sourcelocation, Targetlocation);
             if (!isResult)
             {
@@ -717,7 +742,8 @@
                 return content.Error("鏂板浠诲姟澶辫触");
             }
 
-            return content = await SendWCSTask(taskDTO);
+            //return content = await SendWCSTask(taskDTO);
+            return content.OK();
         }
         catch (Exception ex)
         {
@@ -751,7 +777,7 @@
                 TargetAddress = Targetlocation.LocationCode,
                 Dispatchertime = DateTime.Now,
                 MaterialNo = "",
-                NextAddress = taskDto.TargetAddress,
+                NextAddress = Targetlocation.LocationCode,
                 OrderNo = null,
                 PalletCode = taskDto.PalletCode,
                 SourceAddress = taskDto.Position,
@@ -782,6 +808,188 @@
     }
     #endregion
 
+    #region  鍒ゆ柇鏄惁闇�瑕佺Щ搴�
+
+    /// <summary>
+    /// 鍒ゆ柇鍫嗗灈鏈哄嚭搴撴槸鍚﹂渶瑕佺Щ搴�
+    /// </summary>
+    /// <param name="taskDto"></param>
+    /// <returns></returns>
+    public async Task<WebResponseContent> StackerIsNeedRelocationAsync(RequestTaskDto taskDto)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            var task = BaseDal.QueryFirst(x => x.PalletCode == taskDto.PalletCode && x.TaskNum == taskDto.TaskNum);
+            if (task == null)
+            {
+                return content.Error("鏈壘鍒颁换鍔�");
+            }
+
+            var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
+
+            if (location == null || location.Depth != 2)
+            {
+                return content.Error("鏈壘鍒拌揣浣嶆垨鑰呰搴撲綅涓嶆槸浜屾繁璐т綅");
+            }
+
+            var locationLateral = _locationRepository.QueryFirst(x => x.RoadwayNo == location.RoadwayNo && x.Row == 1 && x.Layer == location.Layer && x.Column == location.Column);
+            if (locationLateral != null && (locationLateral.LocationStatus == 0 || locationLateral.EnalbeStatus == 1))
+            {
+                return content.OK(data: _mapper.Map<WMSTaskDTO>(task));
+            }
+            else if (locationLateral != null && (locationLateral.LocationStatus == 1 || locationLateral.EnalbeStatus == 1))
+            {
+                return content.Error($"涓�娣变綅寮傚父閿佸畾鏆備笉鍙嚭搴�");
+            }
+            else if (locationLateral != null && (locationLateral.LocationStatus == 2 || locationLateral.EnalbeStatus == 1))
+            {
+                var TargetAddress = await GetEmptyLocation("SC1");
+
+                if (TargetAddress == null)
+                {
+                    return content.Error($"鏈壘鍒板彲鍒嗛厤璐т綅,璇锋煡鐪嬫槸鍚﹁繕鏈夌┖闂插彲浣跨敤璐т綅");
+                }
+
+                //todo鏌ヨ鍐呬晶搴撳瓨淇℃伅
+                var stock = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == locationLateral.LocationCode && x.LocationId == locationLateral.Id);
+
+                Dt_Task taskNew = new Dt_Task
+                {
+                    Grade = 1,
+                    Roadway = "SC1",
+                    TargetAddress = TargetAddress.LocationCode,
+                    Dispatchertime = DateTime.Now,
+                    MaterialNo = "",
+                    NextAddress = TargetAddress.LocationCode,
+                    OrderNo = null,
+                    PalletCode = taskDto.PalletCode+"001",
+                    SourceAddress = locationLateral.LocationCode,
+                    CurrentAddress = locationLateral.LocationCode,
+                    TaskState = (int)TaskRelocationStatusEnum.RelocationNew,
+                    TaskType = (int)TaskRelocationTypeEnum.Relocation,
+                    TaskNum = BaseDal.GetTaskNo().Result,
+                    CreateDate = DateTime.Now,
+                    TaskId = 0,
+                    Floor = "1F",
+                };
+                var taskDTO = CreateListTaskDTO(taskNew);
+
+                var isResult = await AddTaskAsync(taskNew, locationLateral, TargetAddress);
+                if (!isResult)
+                {
+                    _unitOfWorkManage.RollbackTran();
+                    return content.Error("鏂板浠诲姟澶辫触");
+                }
+                return content.OK(data: taskDTO);
+            }
+            else
+            {
+                return content.Error("璐т綅寮傚父闇�浜哄伐纭鎵嶅彲鍑哄簱");
+            }
+        }
+        catch (Exception ex)
+        {
+            return content.Error(ex.Message);
+        }
+    }
+
+    public async Task<WebResponseContent> AGVIsNeedRelocationAsync(RequestTaskDto taskDto)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            var task = BaseDal.QueryFirst(x => x.PalletCode == taskDto.PalletCode && x.TaskNum == taskDto.TaskNum);
+            if (task == null)
+            {
+                return content.Error("鏈壘鍒颁换鍔�");
+            }
+
+            var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position);
+
+            if (location == null)
+            {
+                return content.Error("鏈壘鍒拌揣浣嶆垨鑰呰搴撲綅涓嶆槸浜屾繁璐т綅");
+            }
+            List<DtLocationInfo> locationInfos = new List<DtLocationInfo>();
+            switch (location.AreaId)
+            {
+                case 2:
+                    locationInfos = _locationRepository.QueryData(x => x.Row == location.Row && x.Column > location.Column && x.Remark == location.Remark && x.AreaId == location.AreaId);
+                    break;
+                case 5:
+                case 6:
+                    locationInfos = _locationRepository.QueryData(x => x.Row == location.Row && x.Column < location.Column && x.Remark == location.Remark && x.AreaId == location.AreaId);
+                    break;
+                default:
+                    break;
+            }
+
+            if (locationInfos.Count == 0)
+            {
+                return content.OK(data: new List<WMSTaskDTO> { _mapper.Map<WMSTaskDTO>(task) });
+            }
+
+            List<WMSTaskDTO> taskDTO = new List<WMSTaskDTO>();
+
+            foreach (var item in locationInfos)
+            {
+                if (item.LocationStatus == 0 && item.EnalbeStatus == 1)
+                {
+                    continue;
+                }
+                else
+                {
+                    DtLocationInfo Targetlocation = await GetAGVEmptyCacheLocation(item.AreaId, item);
+
+                    if (Targetlocation == null)
+                    {
+                        return content.Error("璧风偣鏈畾涔夋垨缁堢偣鍖哄煙鏈壘鍒扮┖闂插簱浣�");
+                    }
+                    //todo鏌ヨ绉诲簱搴撳瓨淇℃伅
+
+                    Dt_Task taskNew = new Dt_Task
+                    {
+                        Grade = item.Column,
+                        Roadway = "AGV",
+                        TargetAddress = Targetlocation.LocationCode,
+                        Dispatchertime = DateTime.Now,
+                        MaterialNo = "",
+                        NextAddress = Targetlocation.LocationCode,
+                        OrderNo = null,
+                        PalletCode = _random.Next(0, 10000).ToString(),
+                        SourceAddress = item.LocationCode,
+                        CurrentAddress = item.LocationCode,
+                        TaskState = (int)TaskAGVCarryStatusEnum.CarryNew,
+                        TaskType = (int)TaskAGVCarryTypeEnum.CarryReloction,
+                        TaskNum = BaseDal.GetTaskNo().Result,
+                        CreateDate = DateTime.Now,
+                        TaskId = 0,
+                        AGVTaskNum = GenerateUniqueId(),
+                        Floor = item.Floor,
+                        Remark = item.AreaId.ToString(),
+                    };
+                    taskDTO.Add(CreateTaskDTO(taskNew));
+
+                    var isResult = await AddTaskAsync(taskNew, item, Targetlocation);
+                    if (!isResult)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return content.Error("鏂板浠诲姟澶辫触");
+                    }
+
+                }
+            }
+            return content.OK(data: taskDTO);
+        }
+        catch (Exception ex)
+        {
+            return content.Error(ex.Message);
+        }
+    }
+
+
+    #endregion
 
     #region 鑾峰彇AGV浠诲姟鍙�
 
@@ -799,6 +1007,7 @@
         return $"{timestamp}{randomPart}";
     }
     #endregion
+
 
     #endregion 澶栭儴鎺ュ彛鏂规硶
 
@@ -828,6 +1037,98 @@
     #endregion
 
     #region 鍐呴儴璋冪敤鏂规硶
+
+    public void UpdateLocationStatus(DtLocationInfo location, LocationEnum locationStatus)
+    {
+        List<DtLocationInfo> locations = GetGroupLocations(location);
+
+        List<DtLocationInfo> Beforelocation = locations;
+
+        foreach (var item in locations)
+        {
+            if (locationStatus == LocationEnum.Lock)
+            {
+                if (item.LocationCode == location.LocationCode)
+                {
+                    item.LocationStatus = (int)LocationEnum.Lock;
+                }
+                else if (item.LocationStatus == (int)LocationEnum.Free)
+                {
+                    item.LocationStatus = (int)LocationEnum.FreeDisable;
+                }
+            }
+            else if (locationStatus == LocationEnum.InStock)
+            {
+                if (item.LocationCode == location.LocationCode)
+                {
+                    item.LocationStatus = (int)LocationEnum.InStock;
+                }
+                else if (item.LocationStatus == (int)LocationEnum.FreeDisable)
+                {
+                    item.LocationStatus = (int)LocationEnum.Free;
+                }
+            }
+            else if (locationStatus == LocationEnum.InStockDisable)
+            {
+                if (item.LocationStatus == (int)LocationEnum.InStock)
+                {
+                    item.LocationStatus = (int)LocationEnum.InStockDisable;
+                }
+                else if (item.LocationStatus == (int)LocationEnum.Free)
+                {
+                    item.LocationStatus = (int)LocationEnum.FreeDisable;
+                }
+            }
+            else if (locationStatus == LocationEnum.Free)
+            {
+                if (item.LocationCode == location.LocationCode)
+                {
+                    item.LocationStatus = (int)LocationEnum.Free;
+                }
+                else if (item.LocationStatus == (int)LocationEnum.FreeDisable || item.LocationStatus == (int)LocationEnum.InStockDisable)
+                {
+                    item.LocationStatus = (int)LocationEnum.Free;
+                }
+            }
+        }
+
+        _locationRepository.UpdateData(locations);
+    }
+
+    public List<DtLocationInfo> GetGroupLocations(DtLocationInfo location)
+    {
+        List<DtLocationInfo> locationInfos = _locationRepository.QueryData(x => x.AreaId == location.AreaId);
+        List<DtLocationInfo> locations = new List<DtLocationInfo>() { location };
+        if (location.AreaId == 1)
+        {
+            if (location.Depth == 2)
+            {
+                DtLocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == 1 && x.Column == location.Column && x.Layer == location.Layer && x.Row == 1);
+                if (locationInfo != null)
+                {
+                    locations.Add(locationInfo);
+                }
+            }
+        }
+        else if (location.AreaId == 2)
+        {
+            var locationLateral = _locationRepository.QueryData(x => x.Row == location.Row && x.Column > location.Column && x.Remark == location.Remark);
+            if (locationLateral.Count > 0)
+            {
+                locations.AddRange(locationLateral);
+            }
+        }
+        else if (location.AreaId == 5 || location.AreaId == 6)
+        {
+            var locationLateral = _locationRepository.QueryData(x => x.Row == location.Row && x.Column < location.Column && x.Remark == location.Remark);
+            if (locationLateral.Count > 0)
+            {
+                locations.AddRange(locationLateral);
+            }
+        }
+        return locations;
+
+    }
 
     /// <summary>
     /// 鍒涘缓浠诲姟DTO
@@ -863,6 +1164,7 @@
             Id = 0,
             TaskType = task.TaskType,
             AGVTaskNum = task.AGVTaskNum,
+            Remark= task.Remark
         };
     }
 
@@ -1084,30 +1386,6 @@
         return isResult && Source && Target;
     }
 
-    private async Task<bool> AddInBoundTaskAsync(Dt_Task task, DtLocationInfo location)
-    {
-        bool isResult = await BaseDal.AddDataAsync(task) > 0;
-        int beforeStatus = location.LocationStatus;
-
-        location.LocationStatus = (int)LocationEnum.InStockDisable;
-
-        LocationChangeRecordDto changeRecordDto = new LocationChangeRecordDto()
-        {
-            AfterStatus = location.LocationStatus,
-            BeforeStatus = beforeStatus,
-            TaskNum = task.TaskNum.Value,
-            LocationId = location.Id,
-            LocationCode = location.LocationCode,
-            ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage,
-
-        };
-
-        bool isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
-        bool loc = await _locationRepository.UpdateDataAsync(location);
-
-        return isResult && loc;
-    }
-
     /// <summary>
     /// 鑾峰彇璐т綅鍙�
     /// </summary>
@@ -1116,19 +1394,34 @@
     {
         try
         {
-            List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.RoadwayNo == "SC1" && x.LocationStatus == 0 && x.EnalbeStatus == 1);
+            List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.RoadwayNo == "SC1" && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1);
+            List<DtLocationInfo> locationInfos = new List<DtLocationInfo>();
+            var locationInside = locations.Where(x => x.Row == 3).ToList();
 
-            if (locations.Where(x => x.Row == 2).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null)
+            if (locations.Where(x => x.Row == 2).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null)
             {
                 return locations.Where(x => x.Row == 2).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault();
             }
-            else if (locations.Where(x => x.Row == 3).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null)
+            else if (locationInside.Count > 0)
             {
-                return locations.Where(x => x.Row == 3).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault();
+                foreach (var item in locationInside)
+                {
+                    var locationLateral = _locationRepository.QueryFirst(x => x.Row == 1 && x.Layer == item.Layer && x.Column == item.Column);
+                    if (locationLateral.LocationStatus == (int)LocationEnum.Free && locationLateral.EnalbeStatus == 1)
+                    {
+                        locationInfos.Add(item);
+                    }
+                }
+
+                return locationInfos.OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault();
+            }
+            else if (locations.Where(x => x.Row == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault() != null)
+            {
+                return locations.Where(x => x.Row == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault();
             }
             else
             {
-                return locations.Where(x => x.Row == 1).ToList().OrderBy(x => x.Layer).ThenBy(x => x.Column).FirstOrDefault();
+                return null;
             }
         }
         catch (Exception ex)
@@ -1137,7 +1430,7 @@
         }
     }
 
-    public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId)
+    public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId, DtLocationInfo loc)
     {
         try
         {
@@ -1145,14 +1438,14 @@
             switch (AreaId)
             {
                 case 2:
-                    location = await FromShallowToDeep(AreaId);
+                    location = await FromShallowToDeep(AreaId, loc);
                     break;
-                    case 3:
+                case 3:
                     location = await AGVLIKU(AreaId);
                     break;
                 case 5:
                 case 6:
-                    location = await FromDeepToShallow(AreaId);
+                    location = await FromDeepToShallow(AreaId, loc);
                     break;
                 default:
                     break;
@@ -1162,7 +1455,7 @@
         }
         catch (Exception ex)
         {
-            throw new Exception(ex.Message) ;
+            throw new Exception(ex.Message);
         }
     }
 
@@ -1171,15 +1464,28 @@
     /// </summary>
     /// <param name="AreaId"></param>
     /// <returns></returns>
-    public async Task<DtLocationInfo> FromDeepToShallow(int AreaId)
+    public async Task<DtLocationInfo> FromDeepToShallow(int AreaId, DtLocationInfo loc)
     {
         try
         {
-            List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == 0 && x.EnalbeStatus == 1);
+            List<DtLocationInfo> locations = new List<DtLocationInfo>();
 
-            var location = locations.OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
+            locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row);
 
-            return location;
+            List<DtLocationInfo> locationInfos = new List<DtLocationInfo>();
+            foreach (var item in locations)
+            {
+                var locationLateral = _locationRepository.QueryData(x => x.Row == item.Row && x.Column < item.Column && x.Remark == item.Remark);
+                foreach (var lateral in locationLateral)
+                {
+                    if (lateral.LocationStatus == (int)LocationEnum.Free && lateral.EnalbeStatus == 1)
+                    {
+                        locationInfos.Add(item);
+                    }
+                }
+            }
+
+            return locationInfos.OrderByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
         }
         catch (Exception ex)
         {
@@ -1192,13 +1498,32 @@
     /// </summary>
     /// <param name="AreaId"></param>
     /// <returns></returns>
-    public async Task<DtLocationInfo> FromShallowToDeep(int AreaId)
+    public async Task<DtLocationInfo> FromShallowToDeep(int AreaId, DtLocationInfo loc)
     {
         try
         {
-            List<DtLocationInfo> locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == 0 && x.EnalbeStatus == 1);
-            var location = locations.OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
-            return location;
+            List<DtLocationInfo> locations = new List<DtLocationInfo>();
+
+            locations = await _locationRepository.QueryDataAsync(x => x.AreaId == AreaId && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1 && x.Row != loc.Row);
+           
+            if (locations.Count == 0)
+            {
+                return null;
+            }
+            List<DtLocationInfo> locationInfos = new List<DtLocationInfo>();
+            foreach (var item in locations)
+            {
+                var locationLateral = _locationRepository.QueryData(x => x.Row == item.Row && x.Column > item.Column && x.Remark == item.Remark);
+                foreach (var Lateral in locationLateral)
+                {
+                    if (Lateral.LocationStatus == (int)LocationEnum.Free && Lateral.EnalbeStatus == 1)
+                    {
+                        locationInfos.Add(item);
+                    }
+                }
+            }
+
+            return locationInfos.OrderBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
         }
         catch (Exception ex)
         {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/StockQuantityChangeRecordController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/StockQuantityChangeRecordController.cs"
deleted file mode 100644
index f146be0..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/StockQuantityChangeRecordController.cs"
+++ /dev/null
@@ -1,12 +0,0 @@
-锘縰sing WIDESEA_IStorageBasicService;
-
-namespace WIDESEA_WMSServer.Controllers;
-
-[Route("api/StockQuantityChangeRecord")]
-[ApiController]
-public class StockQuantityChangeRecordController : ApiBaseController<IStockQuantityChangeRecordService, DtStockQuantityChangeRecord>
-{
-    public StockQuantityChangeRecordController(IStockQuantityChangeRecordService service) : base(service)
-    {
-    }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs"
index 78815e1..aa8a92b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs"
@@ -1,19 +1,351 @@
-锘縩amespace WIDESEA_WMSServer.Controllers;
+锘縰sing Newtonsoft.Json;
+using System.ComponentModel;
+using System.Reflection;
+using WIDESEA_Core.Caches;
+using WIDESEA_Core.Enums;
+
+namespace WIDESEA_WMSServer.Controllers;
 
 [Route("api/Sys_Dictionary")]
 [ApiController]
 public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
 {
     private readonly IHttpContextAccessor _httpContextAccessor;
+    private readonly ICacheService _cacheService;
 
-    public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor) : base(service)
+    public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor, ICacheService cacheService) : base(service)
     {
         _httpContextAccessor = httpContextAccessor;
+        _cacheService = cacheService;
     }
 
     [HttpPost, Route("GetVueDictionary"), AllowAnonymous]
     public IActionResult GetVueDictionary([FromBody] string[] dicNos)
     {
-        return Content(Service.GetVueDictionary(dicNos).Serialize());
+        List<VueDictionaryDTO> vueDictionaryDTOs = Service.GetVueDictionary(dicNos);
+        try
+        {
+            List<string> cacheDicNos = new List<string>();
+            foreach (string n in dicNos)
+            {
+                string str = _cacheService.Get(n);
+                if (!string.IsNullOrEmpty(str))
+                {
+                    VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
+
+                    if (vueDictionary != null)
+                    {
+                        vueDictionaryDTOs.Add(vueDictionary);
+                        cacheDicNos.Add(n);
+                    }
+                }
+            }
+            List<string> dicList = dicNos.ToList();
+            if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
+            {
+                string str = AppSettings.Configuration["dics"];
+                if (!string.IsNullOrEmpty(str))
+                {
+                    List<string> cusDics = new List<string>();
+
+                    List<string> dics = str.Split(",").ToList();
+
+                    foreach (var item in dics)
+                    {
+                        dicList.Remove(item);
+                        cusDics.Add(item);
+                    }
+
+                    foreach (var item in cusDics)
+                    {
+                        VueDictionaryDTO vueDictionaryDTO = GetVueDictionary(item.Trim());
+                        if (vueDictionaryDTO != null)
+                        {
+                            vueDictionaryDTOs.Add(vueDictionaryDTO);
+                            if (!_cacheService.Exists(item) && vueDictionaryDTO.SaveCache)
+                            {
+                                _cacheService.Add(item, vueDictionaryDTO.Serialize());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        catch
+        {
+
+        }
+        return Json(vueDictionaryDTOs);
+    }
+    private VueDictionaryDTO GetVueDictionary(string key)
+    {
+        VueDictionaryDTO result = null;
+        try
+        {
+            switch (key)
+            {
+                case "taskType":
+                    {
+                        List<object> data = new List<object>();
+
+                        #region TaskInboundTypeEnum
+                        {
+                            Type type = typeof(TaskInboundTypeEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskOutboundTypeEnum
+                        {
+                            Type type = typeof(TaskOutboundTypeEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskRelocationTypeEnum
+                        {
+                            Type type = typeof(TaskRelocationTypeEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskOtherTypeEnum
+                        {
+                            Type type = typeof(TaskOtherTypeEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskOtherTypeEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskOtherTypeEnum).GetField(((TaskOtherTypeEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskAGVCarryTypeEnum
+                        {
+                            Type type = typeof(TaskAGVCarryTypeEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskAGVCarryTypeEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskAGVCarryTypeEnum).GetField(((TaskAGVCarryTypeEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskAcrossFloorTypeEnum
+                        {
+                            Type type = typeof(TaskAcrossFloorTypeEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskAcrossFloorTypeEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskAcrossFloorTypeEnum).GetField(((TaskAcrossFloorTypeEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                    }
+                    break;
+                case "taskState":
+                    {
+                        List<object> data = new List<object>();
+
+                        #region TaskInStatusEnum
+                        {
+                            Type type = typeof(TaskInStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskOutStatusEnum
+                        {
+                            Type type = typeof(TaskOutStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskRelocationStatusEnum
+                        {
+                            Type type = typeof(TaskRelocationStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskRelocationStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskRelocationStatusEnum).GetField(((TaskRelocationStatusEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskAGVCarryStatusEnum
+                        {
+                            Type type = typeof(TaskAGVCarryStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskAGVCarryStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskAGVCarryStatusEnum).GetField(((TaskAGVCarryStatusEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        #region TaskAcrossFloorStatusEnum
+                        {
+                            Type type = typeof(TaskAcrossFloorStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(TaskAcrossFloorStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(TaskAcrossFloorStatusEnum).GetField(((TaskAcrossFloorStatusEnum)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+                        }
+                        #endregion
+
+                        result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                    }
+                    break;
+            }
+            return result;
+        }
+        catch (Exception ex)
+        {
+            return null;
+        }
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Task/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Task/TaskController.cs"
index beabf62..04f3c84 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Task/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Task/TaskController.cs"
@@ -24,7 +24,6 @@
     /// <param name="saveModel">浠诲姟鍙�</param>
     /// <returns>鎴愬姛鎴栧け璐�</returns>
     [HttpGet, Route("CompleteTaskAsync"), AllowAnonymous]
-    //[TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })] // 5绉掕妭娴�
     public async Task<WebResponseContent> CompleteTaskAsync(int taskNum)
     {
         return await Service.CompleteAsync(taskNum);
@@ -35,7 +34,7 @@
     /// <param name="input">璇锋眰鏁版嵁</param>
     /// <returns></returns>
     [HttpPost, AllowAnonymous, Route("RequestTaskAsync")]
-    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })] // 5绉掕妭娴�
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<WebResponseContent> RequestTaskAsync([FromBody] RequestTaskDto input)
     {
         return await Service.RequestTaskAsync(input);
@@ -47,7 +46,7 @@
     /// <param name="input">璇锋眰鏁版嵁</param>
     /// <returns></returns>
     [HttpPost, AllowAnonymous, Route("RequestLocationAsync")]
-    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })] // 5绉掕妭娴�
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<WebResponseContent> RequestLocationAsync([FromBody] RequestTaskDto input)
     {
         return await Service.RequestLocationAsync(input);
@@ -59,7 +58,7 @@
     /// <param name="request">璇锋眰鏁版嵁</param>
     /// <returns></returns>
     [HttpPost, AllowAnonymous, Route("RequestOutTaskAsync")]
-    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })] // 5绉掕妭娴�
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<WebResponseContent> RequestOutTaskAsync([FromBody] RequestTaskDto taskDto)
     {
         return await Service.RequestOutTaskAsync(taskDto);
@@ -71,7 +70,7 @@
     /// <param name="input">璇锋眰鏁版嵁</param>
     /// <returns></returns>
     [HttpPost,HttpGet,Route("UpdateTaskStatus") ,AllowAnonymous]
-    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })] // 5绉掕妭娴�
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })] 
     public async Task<WebResponseContent> UpdateTaskStatus([FromBody] UpdateStatusDto input)
     {
         return await Service.UpdateTaskStatus(input.TaskNum, input.TaskState);
@@ -94,12 +93,14 @@
     /// <param name="taskDto"></param>
     /// <returns></returns>
     [HttpPost, AllowAnonymous, Route("RequestAcrossFloorTaskAsync")]
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<WebResponseContent> RequestAcrossFloorTaskAsync([FromBody] RequestTaskDto taskDto)
     {
         return await Service.RequestAcrossFloorTaskAsync(taskDto);
     }
 
     [HttpPost, AllowAnonymous, Route("RequestPointAcrossFloorTaskAsync")]
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<WebResponseContent> RequestPointAcrossFloorTaskAsync([FromBody] RequestTaskDto taskDto)
     {
         return await Service.RequestPointAcrossFloorTaskAsync(taskDto);
@@ -111,26 +112,44 @@
     /// <param name="taskDto"></param>
     /// <returns></returns>
     [HttpPost, AllowAnonymous, Route("RequestAGVCarryTaskAsync")]
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<WebResponseContent> RequestAGVCarryTaskAsync([FromBody] RequestTaskDto taskDto)
     {
         return await Service.RequestAGVCarryTaskAsync(taskDto);
     }
 
-    [HttpPost, AllowAnonymous, Route("RequestAGVCarryTaskAsync")]
+    [HttpPost, AllowAnonymous, Route("RequestPointAGVCarryTaskAsync")]
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<WebResponseContent> RequestPointAGVCarryTaskAsync([FromBody] RequestTaskDto taskDto)
     {
         return await Service.RequestPointAGVCarryTaskAsync(taskDto);
     }
 
     [HttpPost, AllowAnonymous, Route("GetEmptyLocation")]
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
     public async Task<DtLocationInfo> GetEmptyLocation(string roadWay)
     {
         return await Service.GetEmptyLocation(roadWay);
     }
 
     [HttpPost, AllowAnonymous, Route("GetAGVEmptyCacheLocation")]
-    public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId)
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
+    public async Task<DtLocationInfo> GetAGVEmptyCacheLocation(int AreaId,DtLocationInfo location)
     {
-        return await Service.GetAGVEmptyCacheLocation(AreaId);
+        return await Service.GetAGVEmptyCacheLocation(AreaId,location);
+    }
+
+    [HttpPost, AllowAnonymous, Route("StackerIsNeedRelocationAsync")]
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
+    public async Task<WebResponseContent> StackerIsNeedRelocationAsync([FromBody] RequestTaskDto taskDto)
+    {
+        return await Service.StackerIsNeedRelocationAsync(taskDto);
+    }
+
+    [HttpPost, AllowAnonymous, Route("AGVIsNeedRelocationAsync")]
+    [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 5 })]
+    public async Task<WebResponseContent> AGVIsNeedRelocationAsync([FromBody] RequestTaskDto taskDto)
+    {
+        return await Service.AGVIsNeedRelocationAsync(taskDto);
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
index 2c07c86..59754ba 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
@@ -6,6 +6,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_DTO.System;
+using WIDESEA_DTO.WMS;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_WMSServer.Filter
@@ -19,6 +20,7 @@
         {
             CreateMap<Sys_Menu, MenuDTO>();
             CreateMap<Dt_Task, Dt_Task_Hty>();
+            CreateMap<Dt_Task, WMSTaskDTO>();
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/GlobalUsing.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/GlobalUsing.cs"
index 8f60758..3965c89 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/GlobalUsing.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/GlobalUsing.cs"
@@ -11,5 +11,4 @@
 global using WIDESEA_Model.Models.System;
 global using WIDESEA_Core.Authorization;
 global using WIDESEA_Core.Utilities;
-global using WIDESEA_Model;
-global using WIDESEA_StorageBasicServices;
\ No newline at end of file
+global using WIDESEA_Model;
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
index 2099503..6144754 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
@@ -5,6 +5,7 @@
       "Microsoft.AspNetCore": "Warning"
     }
   },
+  "dics": "taskType,taskState,operateTypeEnum",
   "AllowedHosts": "*",
   "urls": "http://*:5000",
   "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\212\200\346\234\257\345\215\217\350\256\256/~$\346\230\216\345\222\214 \345\240\206\345\236\233\346\234\272\347\253\213\345\272\223\351\241\271\347\233\256\350\275\257\344\273\266\345\274\200\345\217\221\343\200\201\346\265\213\350\257\225\345\217\212\347\273\264\346\212\244\346\234\215\345\212\241-\346\212\200\346\234\257\345\215\217\350\256\256-2025.09.09.doc" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\212\200\346\234\257\345\215\217\350\256\256/~$\346\230\216\345\222\214 \345\240\206\345\236\233\346\234\272\347\253\213\345\272\223\351\241\271\347\233\256\350\275\257\344\273\266\345\274\200\345\217\221\343\200\201\346\265\213\350\257\225\345\217\212\347\273\264\346\212\244\346\234\215\345\212\241-\346\212\200\346\234\257\345\215\217\350\256\256-2025.09.09.doc"
deleted file mode 100644
index fcd42e3..0000000
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\212\200\346\234\257\345\215\217\350\256\256/~$\346\230\216\345\222\214 \345\240\206\345\236\233\346\234\272\347\253\213\345\272\223\351\241\271\347\233\256\350\275\257\344\273\266\345\274\200\345\217\221\343\200\201\346\265\213\350\257\225\345\217\212\347\273\264\346\212\244\346\234\215\345\212\241-\346\212\200\346\234\257\345\215\217\350\256\256-2025.09.09.doc"
+++ /dev/null
Binary files differ

--
Gitblit v1.9.3