From d4b0b578752a1478f6c11b352fbb8d2bad1f9e1d Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 22 十月 2025 17:18:49 +0800
Subject: [PATCH] 1

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IOrderRepository/IDt_OutboundOrderRepository.cs                      |    8 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs                           |   69 -
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IOrderServices/IDt_OutboundOrderDetailService.cs                     |   11 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs             |   90 ++
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrder.cs                               |   96 ++
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrderDetail.cs                         |   76 +
 项目代码/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_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock_Hty.vue                        |   12 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs                           |   12 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json                                |  201 +++-
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm      |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/RequestTaskDto.cs                                          |    6 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db     |    0 
 项目代码/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/HandOutbound.vue                      |   91 ++
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs                       |  243 ++++++
 项目代码/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock_Hty.jsx                    |   35 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Order/OutboundOrderController.cs               |   24 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_OutboundOrderService.cs                             |   23 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_OutboundOrderDetailService.cs                       |   23 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm |    0 
 项目代码/WMS/WIDESEA_WMSClient/src/router/tables.js                                                         |    6 
 项目代码/PDA/pages/task/Inbound.vue                                                                         |    4 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/GenerateOutTaskDto.cs                                      |   32 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs                                             |   80 +
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OrderRepository/Dt_OutboundOrderDetailRepository.cs                  |   12 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Boxing/IBoxingInfoService.cs                    |   13 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Order/OutboundOrderDetailController.cs         |   24 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs                               |   12 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs                    |    3 
 项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/OutboundOrder.vue                                |  217 +++++
 项目代码/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/OutboundOrder.js                             |   73 +
 项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/InboundOrder.vue                                 |    8 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_InboundOrder.cs                                |   59 +
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/BoxingInfoController.cs                  |   13 
 项目代码/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/StockSelect.vue                       |  247 ++++++
 项目代码/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock.jsx                        |    6 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs                            |   12 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json                         |  197 +++-
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/StockInfoController.cs                   |   43 +
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/GroupPlate.cs                                              |    2 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Boxing/BoxingInfoService.cs                     |  143 ---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OrderRepository/Dt_OutboundOrderRepository.cs                        |   12 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs                                      |   21 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                                           |    2 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db          |    0 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal      |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IOrderRepository/IDt_OutboundOrderDetailRepository.cs                |    8 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoHtyService.cs                    |   11 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal      |    0 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                                    |   56 
 项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db     |    0 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockInfoService.cs                      |   33 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IOrderServices/IDt_OutboundOrderService.cs                           |   11 
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail.cs                         |    6 
 项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock.vue                            |   14 
 59 files changed, 1,980 insertions(+), 420 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/Inbound.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/Inbound.vue"
index 06ed47d..67d40ce 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/Inbound.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/PDA/pages/task/Inbound.vue"
@@ -164,7 +164,7 @@
 					"PalletCode": this.PalletCode2,
 					"OrderNos": this.OrderNos
 				}
-				this.$u.post('/api/BoxingInfo/AddBoxingInfo', param).then(res => {
+				this.$u.post('/api/StockInfo/AddGroupPlateAsync', param).then(res => {
 					if (res.status) {
 						this.$refs.luToast.show({
 							title: res.message,
@@ -194,7 +194,7 @@
 				var param = {
 					"PalletCode": this.PalletCode3,
 				}
-				this.$u.post('/api/BoxingInfo/DeleteBoxingInfoAsync', param).then(res => {
+				this.$u.post('/api/StockInfo/DeleteGroupPlateAsync', param).then(res => {
 					if (res.status) {
 						this.$refs.luToast.show({
 							title: res.message,
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 7d6abad..4fba76a 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"
new file mode 100644
index 0000000..c791dd6
--- /dev/null
+++ "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"
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"
new file mode 100644
index 0000000..5ac2ff6
--- /dev/null
+++ "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"
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 75a7e80..7f5fa3d 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"
new file mode 100644
index 0000000..f14fe49
--- /dev/null
+++ "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"
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"
new file mode 100644
index 0000000..a30c470
--- /dev/null
+++ "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"
Binary files differ
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 27df166..244db76 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"
@@ -495,39 +495,39 @@
                     {
                         #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($"鑾峰彇璐т綅", $"鑾峰彇璐т綅,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙凤細銆恵task.PalletCode}銆戣繑鍥炲弬鏁般�恵JsonConvert.SerializeObject(content)}銆�");
 
-                        //// 妫�鏌ョ姸鎬佸苟杩斿洖
-                        //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 = task.TargetAddress;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
index 26928ae..3c60aaf 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
@@ -87,7 +87,8 @@
                             var task = _taskRepository.QueryFirst(x => x.TaskState == (int)TaskInStatusEnum.Line_InExecuting && x.TaskNum == conmmand.ConveyorLineTargetAddress);
                             if (task != null)
                             {
-                                _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                WriteInfo(conveyorLine.DeviceName, $"{JsonConvert.SerializeObject(content)}");
                             }
                         }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/OutboundOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/OutboundOrder.js"
new file mode 100644
index 0000000..bf6ec35
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/OutboundOrder.js"
@@ -0,0 +1,73 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/StockSelect.vue'
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: gridBody,
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        this.columns.push({
+          field: '鎿嶄綔',
+          title: '鎿嶄綔',
+          width: 90,
+          fixed: 'right',
+          align: 'center',
+          formatter: (row) => {
+              return (
+                  '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">鏌ョ湅鏄庣粏</i>'
+              );
+          },
+          click: (row) => {
+              this.$refs.gridBody.open(row);
+          }
+      });
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        //this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/HandOutbound.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/HandOutbound.vue"
new file mode 100644
index 0000000..a7316f4
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/HandOutbound.vue"
@@ -0,0 +1,91 @@
+<template>
+  <vol-box v-model="show" title="鎵嬪姩鍑哄簱" :width="800" :height="600">
+    <template #content>
+      <el-form ref="form" :model="form" label-width="90px">
+        <el-form-item label="鎵樼洏鍙�">
+          <el-input type="text" v-model="this.form.palletCode" readonly></el-input>
+        </el-form-item>
+        <el-form-item label="鍑哄簱绔欏彴" prop="TargetAddress">
+          <el-select v-model="form.TargetAddress" placeholder="璇烽�夋嫨鍑哄簱绔欏彴">
+            <el-option label="绔欏彴1" value="001-000-001" />
+            <el-option label="绔欏彴2" value="001-022-001" />
+            <el-option label="绔欏彴3" value="004-000-001" />
+            <el-option label="绔欏彴4" value="004-022-001" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="搴撳尯" prop="SCNo">
+          <el-select v-model="form.SCNo" placeholder="璇烽�夋嫨搴撳尯">
+            <el-option label="姝f瀬搴�" value="SC01" />
+            <el-option label="璐熸瀬搴�" value="SC02" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+    </template>
+    <template #footer>
+      <div>
+        <el-button type="danger" size="small" plain @click="submit">
+          <i class="el-icon-check">鍑哄簱</i>
+        </el-button>
+        <el-button size="small" type="primary" plain @click="() => {
+            this.show = false;
+          }
+          ">
+          <i class="el-icon-close">鍏抽棴</i>
+        </el-button>
+      </div>
+    </template>
+  </vol-box>
+</template>
+
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: {
+    "vol-box": VolBox,
+  },
+  data() {
+    return {
+      form:{
+        TargetAddress:"",
+        locationID:"",
+        SCNo:"",
+        palletCode:""
+      },
+      show: false,
+    };
+  },
+  methods: {
+    open(locationID,palletCode) {
+      this.show = true;
+      this.form.locationID=locationID;
+      this.form.palletCode=palletCode;
+    },
+    submit() {
+      this.$emit("parentCall", ($vue) => {
+        if (
+          !this.form.TargetAddress ||
+          !this.form.locationID ||
+          !this.form.SCNo ||
+          this.form.TargetAddress==""||
+          this.form.locationID==""||
+          this.form.SCNo==""
+        ) {
+          this.$message.error("鍙傛暟閿欒");
+          return;
+        }
+        this.http.post("api/Dt_LocationInfo/HandOutbound", this.form, "").then((x) => {
+          if (!x.status) {
+            this.$message.error(x.message);
+          } else {
+            this.$Message.success("鏂板缓鍑哄簱浠诲姟");
+            // $vue.success("鎴愬姛.");
+            this.show = false;
+            $vue.refresh();
+          }
+        });
+      });
+    },
+  },
+
+};
+</script>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/StockSelect.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/StockSelect.vue"
new file mode 100644
index 0000000..95a819b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/Order/extend/StockSelect.vue"
@@ -0,0 +1,247 @@
+<template>
+  <div>
+    <vol-box v-model="showDetialBox" :lazy="true" width="60%" :padding="15" title="鎸囧畾搴撳瓨">
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="22">
+              <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materielName }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materielCode }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">闇�姹傛暟閲忥細 {{ row.orderQuantity }}
+              </span>
+              <el-divider direction="vertical"></el-divider>
+              <span :class="selectionClass">宸插嚭搴撴暟閲忥細 {{ selectionSum }}
+              </span>
+            </el-col>
+            <el-col :span="2">
+              <el-link type="primary" size="small" style="float: right; height: 20px"
+                @click="getData">鍒锋柊</el-link></el-col>
+          </el-row>
+        </el-alert>
+      </div>
+      <div style="margin-top:10px;width:400px">
+        <el-form ref="form" :model="form" label-width="90px">
+          <el-form-item label="缁堢偣鍦板潃">
+            <el-input type="text" v-model="this.form.TargetAddress"></el-input>
+          </el-form-item>
+          <el-form-item label="鍑哄簱绔欏彴" prop="TargetAddress">
+            <el-select v-model="form.areaId" placeholder="璇烽�夋嫨鍑哄簱鍖哄煙">
+              <el-option label="鍫嗗灈鏈哄尯鍩�" value="1" />
+              <el-option label="涓�妤糀GV鍑哄簱缂撳瓨鍖�" value="2" />
+              <el-option label="涓�妤糀GV绔嬪簱缂撳瓨鍖�" value="3" />
+              <el-option label="涓�妤糀GV鍏ュ簱缂撳瓨鍖�" value="4" />
+              <el-option label="浜屾ゼB4-G4缂撳瓨鍖�" value="5" />
+              <el-option label="浜屾ゼB5-G5缂撳瓨鍖�" value="6" />
+            </el-select>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table ref="singleTable" :data="tableData" style="width: 100%; height: 800px" highlight-current-row
+          @row-click="handleRowClick" height="500px" @selection-change="handleSelectionChange">
+          >
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column label="搴忓彿" type="index" fixed="left" width="55" align="center"></el-table-column>
+          <el-table-column v-for="(item, index) in tableColumns.filter((x) => !x.hidden)" :key="index" :prop="item.prop"
+            :label="item.title" :width="item.width" align="center">
+            <template #default="scoped" v-if="item.type == 'icon'">
+              <el-tooltip class="item" effect="dark" :content="item.title" placement="bottom"><el-button type="text"
+                  @click="tableButtonClick(scoped.row, item)"><i :class="item.icon"
+                    style="font-size: 22px"></i></el-button></el-tooltip>
+              import type { formContextKey } from "element-plus";
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <template #footer>
+        <el-button type="primary" size="small" @click="outbound">鐩存帴鍑哄簱</el-button>
+        <el-button type="danger" size="small" @click="showDetialBox = false">鍏抽棴</el-button>
+      </template>
+    </vol-box>
+  </div>
+</template>
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      form: {
+        TargetAddress: "",
+        areaId: "",
+      },
+      row: null,
+      showDetialBox: false,
+      tableData: [],
+      tableColumns: [
+        {
+          prop: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "palletCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          width: 180,
+        },
+        {
+          prop: "useableQuantity",
+          title: "鍙敤鏁伴噺",
+          type: "string",
+        },
+      ],
+      selection: [],
+      selectionSum: 0,
+      selectionClass: "less-style",
+      originalQuantity: 0,
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.originalQuantity = this.row.overOutQuantity;
+      this.selectionSum = this.row.overOutQuantity;
+      this.getData();
+      if (this.selectionSum == this.row.orderQuantity) {
+        this.selectionClass = "equle-style";
+      } else if (this.selectionSum < this.row.orderQuantity) {
+        this.selectionClass = "less-style";
+      } else {
+        this.selectionClass = "more-style";
+      }
+    },
+    outbound() {
+      if (!this.selection || !this.selection.length) {
+        this.$message.error("璇烽�夋嫨闇�瑕佸嚭搴撶殑鎵樼洏");
+        return;
+      }
+      var param = {
+        "orderId": this.row.id,
+        "stockViews": this.selection,
+        "TargetAddress": this.form.TargetAddress,
+        "AreaId": this.form.AreaId,
+      }
+      console.log(param);
+      this.http
+        .post(
+          "api/StockInfo/GenerateOutboundTask",
+          param,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    getData() {
+      this.http
+        .post(
+          "api/StockInfo/GetStockSelectViews?materielCode=" +
+          this.row.materielCode,
+          null,
+          "鏌ヨ涓�"
+        )
+        .then((x) => {
+          this.tableData = x;
+        });
+    },
+    handleSelectionChange(val) {
+      this.selection = val;
+      this.selectionSum =
+        val.reduce(
+          (accumulator, currentValue) =>
+            accumulator + currentValue["useableQuantity"],
+          0
+        ) + this.originalQuantity;
+      if (this.selectionSum == this.row.orderQuantity) {
+        this.selectionClass = "equle-style";
+      } else if (this.selectionSum < this.row.orderQuantity) {
+        this.selectionClass = "less-style";
+      } else {
+        this.selectionClass = "more-style";
+      }
+    },
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach((row) => {
+          this.$refs.singleTable.toggleRowSelection(row);
+        });
+      } else {
+        this.$refs.singleTable.clearSelection();
+      }
+    },
+    clearSelection() {
+      this.$refs.singleTable.clearSelection();
+    },
+    handleRowClick(row) {
+      this.$refs.singleTable.toggleRowSelection(row);
+    },
+  },
+};
+</script>
+<style scoped>
+.less-style {
+  color: black;
+}
+
+.equle-style {
+  color: green;
+}
+
+.more-style {
+  color: red;
+}
+</style>
+
+<style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+
+.el-table .warning-row {
+  background: oldlace;
+}
+
+.box-table .el-table tbody tr:hover>td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row>td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+
+.box-head .el-alert__content {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock.jsx" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock.jsx"
index 0a22470..7fb1009 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock.jsx"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock.jsx"
@@ -111,7 +111,7 @@
             '2F': '浜屾ゼ',
           };
           column.formatter = (row) => {
-            return floorMap[row?.locationInfo?.floor] || '鏈煡妤煎眰'
+            return floorMap[row?.locationInfo?.floor] || ''
           }
         }
         if (column.field == 'areaId') {
@@ -125,7 +125,7 @@
             '6': '浜屾ゼB5-G5缂撳瓨鍖�',
           };
           column.formatter = (row) => {
-            return  floorMap[row?.locationInfo?.areaId] || '鏈煡妤煎眰'
+            return  floorMap[row?.locationInfo?.areaId] || ''
           }
         }
         if (column.field == 'locationStatus') {
@@ -137,7 +137,7 @@
             '4': '鏃犺揣绂佺敤'
           };
           column.formatter = (row) => {
-            return statusMap[row?.locationInfo?.locationStatus] || '鏈煡鐘舵��';
+            return statusMap[row?.locationInfo?.locationStatus] || '';
           }
         }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock_Hty.jsx" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock_Hty.jsx"
index a301399..d0a45c0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock_Hty.jsx"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/extension/widesea_wms/stock/Dt_BillGroupStock_Hty.jsx"
@@ -126,37 +126,44 @@
       // });
 
       this.columns.forEach((column) => {
-        //淇敼棰滆壊
-        if (column.field == 'roadwayNo') {
+
+        if (column.field == 'floor') {
+
+          const floorMap = {
+            '1F': '涓�妤�',
+            '2F': '浜屾ゼ',
+          };
           column.formatter = (row) => {
-            // return '<span style="color: #2d8cf0;">' + row?.locationInfo?.roadwayNo + '</span>'
-            return  row?.locationInfo?.roadwayNo 
+            return floorMap[row?.locationInfo?.floor] || ''
           }
         }
-        if (column.field == 'materielCode') {
+        if (column.field == 'areaId') {
+
+          const floorMap = {
+            '1': '涓�妤煎爢鍨涙満鍖哄煙',
+            '2': '涓�妤糀GV鍑哄簱缂撳瓨鍖�',
+            '3': '涓�妤糀GV绔嬪簱缂撳瓨鍖�',
+            '4': '涓�妤糀GV鍏ュ簱缂撳瓨鍖�',
+            '5': '浜屾ゼB4-G4缂撳瓨鍖�',
+            '6': '浜屾ゼB5-G5缂撳瓨鍖�',
+          };
           column.formatter = (row) => {
-            // return '<span style="color: #2d8cf0;">' + row?.locationInfo?.roadwayNo + '</span>'
-            return  row?.stockInfoDetails[0]?.materielCode 
+            return  floorMap[row?.locationInfo?.areaId] || ''
           }
         }
-        //鏍煎紡鍖栨棩鏈�
-        // 妫�鏌ュ綋鍓嶅垪鐨勫瓧娈垫槸鍚︿负 'locationStatus'
         if (column.field == 'locationStatus') {
-          // 浣跨敤瀵硅薄瀛楅潰閲忔潵鏄犲皠 'locationStatus' 鐨勫�煎拰瀵瑰簲鐨勬枃鏈�
           const statusMap = {
-            '-1': '鍏ㄩ儴',
             '0': '绌洪棽',
             '1': '閿佸畾',
             '2': '鏈夎揣',
             '3': '鏈夎揣绂佺敤',
             '4': '鏃犺揣绂佺敤'
           };
-          // 瀹氫箟涓�涓牸寮忓寲鍑芥暟锛屾牴鎹� 'locationStatus' 鐨勫�艰繑鍥炵浉搴旂殑鏂囨湰
           column.formatter = (row) => {
-            // 浣跨敤 statusMap 瀵硅薄鏉ヨ幏鍙栧搴旂殑鏂囨湰锛屽鏋滄病鏈夊尮閰嶅垯杩斿洖 '鏈煡鐘舵��'
-            return statusMap[row?.locationInfo?.locationStatus] || '鏈煡鐘舵��';
+            return statusMap[row?.locationInfo?.locationStatus] || '';
           }
         }
+
       })
     },
     onInited() {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/router/tables.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/router/tables.js"
index 05fb2de..b38473e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/router/tables.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/router/tables.js"
@@ -100,6 +100,12 @@
     component: () => import('@/views/widesea_wms/Order/InboundOrder.vue'),
     meta: {
     }
+  },{
+    path: '/OutboundOrder',
+    name: 'OutboundOrder',
+    component: () => import('@/views/widesea_wms/Order/OutboundOrder.vue'),
+    meta: {
+    }
   }
 ]
 export default tables
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/InboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/InboundOrder.vue"
index c5ae6c1..0d14565 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/InboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/InboundOrder.vue"
@@ -33,8 +33,8 @@
         });
         const searchFormOptions = ref([
         [
-                { "title": "璁㈠崟鍞竴鍙�", "field": "printCode", "type": "text" },
-                { "title": "璁㈠崟缂栧彿", "field": "orderNo", "type": "text" },
+                { "title": "璁㈠崟缂栧彿", "field": "printCode", "type": "text" },
+                { "title": "涓婃父鍗曞彿", "field": "orderNo", "type": "text" },
                 { "title": "闇�姹傚垎绫�", "field": "demandClassification", "type": "text" },
                 { "title": "鍗曟嵁绫诲瀷", "field": "orderType", "type": "text" },
 
@@ -53,8 +53,8 @@
             ],
         ]);
         const columns = ref([
-            { field: 'printCode', title: '璁㈠崟鍞竴鍙�', type: 'string', width: 180, readonly: true, require: true, align: 'left' },
-            { field: 'orderNo', title: '璁㈠崟缂栧彿', type: 'string', width: 180, align: 'left' },
+            { field: 'orderNo', title: '璁㈠崟缂栧彿', type: 'string', width: 180, readonly: true, require: true, align: 'left' },
+            { field: 'upperOrderNo', title: '涓婃父鍗曞彿', type: 'string', width: 180, align: 'left' },
             { field: 'materialNo', title: '鐗╂枡缂栫爜', type: 'string', width: 180, align: 'left' },
             { field: 'materialName', title: '鐗╂枡鍚嶇О', type: 'string', width: 180, align: 'left' },
             { field: 'demandClassification', title: '闇�姹傚垎绫�', type: 'string', width: 180, align: 'left' },
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/OutboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/OutboundOrder.vue"
new file mode 100644
index 0000000..e6a40ce
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/Order/OutboundOrder.vue"
@@ -0,0 +1,217 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wms/stock/Dt_BillGroupStock.js姝ゅ缂栧啓
+ -->
+
+<template>
+    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+        :table="table" :extend="extend">
+    </view-grid>
+</template>
+<script>
+import extend from "@/extension/widesea_wms/Order/OutboundOrder.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+    setup() {
+        const table = ref({
+            key: 'id',
+            footer: "Foots",
+            cnName: '鍑哄簱鍗曟嵁淇℃伅',
+            name: '',
+            url: "/OutboundOrder/",
+            sortName: "createDate"
+        });
+        const editFormFields = ref({
+            orderNo: "",
+            orderType: "",
+            materielCode: "",
+            materielName: "",
+            demandClassification: "",
+            orderQuantity: "",
+        });
+        const editFormOptions = ref([
+            [
+                { "title": "璁㈠崟缂栧彿", "field": "orderNo", "type": "text" },
+                { "title": "鐗╂枡缂栫爜", "field": "materielCode", type: "text", },
+                { "title": "鐗╂枡鍚嶇О", "field": "materielName", type: "text", dataKey: "OrderTypeEmun", data: [] },
+            ],
+            [
+                { "title": "闇�姹傚垎绫�", "field": "demandClassification", "type": "text" },
+                { "title": "鍗曟嵁鍑哄簱鎬婚噺", "field": "orderQuantity", type: "text" },
+                { "title": "鍗曟嵁绫诲瀷", "field": "orderType", type: "select", dataKey: "OrderTypeEmun", data: [] },
+            ]
+        ]);
+        const searchFormFields = ref({});
+        const searchFormOptions = ref([
+            [
+                { "title": "璁㈠崟缂栧彿", "field": "orderNo", "type": "text" },
+                { "title": "涓婃父鍗曞彿", "field": "upperOrderNo", "type": "text" },
+                { "title": "鍗曟嵁绫诲瀷", "field": "orderType", type: "select", dataKey: "OrderTypeEmun", data: [] },
+
+            ],
+            [
+                { "title": "鍗曟嵁鐘舵��", "field": "orderStatus", type: "select", dataKey: "OrderStateEmun", data: [] },
+                { "title": "鍒涘缓绫诲瀷", "field": "createType", type: "select", dataKey: "OrderCreateTypeEmun", data: [] },
+            ],
+        ]);
+        const columns = ref(
+            [
+            { field: 'id', title: '鍗曟嵁id', type: 'int', width: 110, hidden: true, readonly: true, require: true, align: 'left' },
+            { field: 'orderNo', title: '鍗曟嵁缂栧彿', type: 'string', width: 110, align: 'left', },
+            { field: 'upperOrderNo', title: '涓婃父鍗曟嵁缂栧彿', type: 'string', width: 100, align: 'left', },
+            { field: 'materielCode', title: '鐗╂枡缂栫爜', type: 'string', width: 100, align: 'left', },
+            { field: 'materielName', title: '鐗╂枡鍚嶇О', type: 'string', width: 100, align: 'left', },
+            { field: 'demandClassification', title: '闇�姹傚垎绫�', type: 'string', width: 100, align: 'left', },
+            { field: 'orderQuantity', title: '鍗曟嵁鍑哄簱鎬婚噺', type: 'string', width: 100, align: 'left', },
+            { field: 'overOutQuantity', title: '宸插嚭搴撴暟閲�', type: 'string', width: 100, align: 'left', },
+            { field: 'orderType', title: '鍗曟嵁绫诲瀷', type: 'int', width: 120, align: 'left', bind: { key: "OrderTypeEmun", data: [] } },
+            { field: 'orderStatus', title: '鍗曟嵁鐘舵��', type: 'int', width: 90, align: 'left', bind: { key: "OrderStateEmun", data: [] } },
+            { field: 'createType', title: '鍒涘缓绫诲瀷', type: 'int', width: 120, align: 'left', bind: { key: "OrderCreateTypeEmun", data: [] } },
+            { field: 'remark', title: '澶囨敞', type: 'string', width: 60, align: 'left', hidden: true},
+            { field: 'creater', title: '鍒涘缓浜�', type: 'string', sort: true, width: 110, align: 'left', hidden: true },
+            { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', sort: true, width: 150, align: 'left', },
+            { field: 'modifier', title: '鏈�鍚庝慨鏀逛汉', type: 'string', sort: true, width: 100, align: 'left' },
+            ]
+        );
+        const detail = ref({
+            cnName: "#detailCnName",
+            table: "#detailTable",
+            columns: [],
+            sortName: "",
+            key: ""
+        });
+        // const detail = ref({
+        //     cnName: "鍑哄簱鍗曟嵁鏄庣粏淇℃伅",
+        //     table: "StockInfoDetails",
+        //     columns: [
+        //         {
+        //             field: "id",
+        //             title: "Id",
+        //             type: "int",
+        //             width: 90,
+        //             hidden: true,
+        //             readonly: true,
+        //             require: true,
+        //             align: "left",
+        //         },
+        //         {
+        //             field: "orderId",
+        //             title: "鍑哄簱鍗曟嵁涓婚敭",
+        //             type: "string",
+        //             width: 90,
+        //             align: "left",
+        //             hidden: true,
+        //         },
+        //         {
+        //             field: "materielCode",
+        //             title: "鐗╂枡缂栧彿",
+        //             type: "string",
+        //             width: 150,
+        //             align: "left",
+        //             edit: { type: "string" },
+        //         },
+        //         {
+        //             field: "materielName",
+        //             title: "鐗╂枡鍚嶇О",
+        //             type: "string",
+        //             width: 150,
+        //             align: "left",
+        //             edit: { type: "string" },
+        //         },
+        //         {
+        //             field: "demandClassification",
+        //             title: "闇�姹傚垎绫�",
+        //             type: "decimal",
+        //             width: 180,
+        //             align: "left",
+        //             edit: { type: "string" },
+        //         },
+        //         {
+        //             field: "orderQuantity",
+        //             title: "鍗曟嵁鏁伴噺",
+        //             type: "string",
+        //             width: 120,
+        //             align: "left",
+        //             edit: { type: "string" },
+        //         },
+        //         {
+        //             field: "overOutQuantity",
+        //             title: "宸插嚭搴撴暟閲�",
+        //             type: "int",
+        //             width: 90,
+        //             align: "left",
+        //         },
+        //         {
+        //             field: "lockQuantity",
+        //             title: "閿佸畾鏁伴噺",
+        //             type: "int",
+        //             width: 90,
+        //             align: "left",
+        //             hidden: true,
+        //         },
+        //         {
+        //             field: "orderDetailStatus",
+        //             title: "鍗曟嵁鏄庣粏鐘舵��",
+        //             type: "string",
+        //             width: 120,
+        //             align: "left",
+        //             bind: { key: "OrderStateEmun", data: [] },
+        //         },
+        //         {
+        //             field: "creater",
+        //             title: "鍒涘缓浜�",
+        //             type: "string",
+        //             width: 90,
+        //             align: "left",
+        //         },
+        //         {
+        //             field: "createDate",
+        //             title: "鍒涘缓鏃堕棿",
+        //             type: "datetime",
+        //             width: 160,
+        //             align: "left",
+        //         },
+        //         {
+        //             field: "modifier",
+        //             title: "淇敼浜�",
+        //             type: "string",
+        //             width: 100,
+        //             align: "left",
+        //             hidden: true,
+        //         },
+        //         {
+        //             field: "modifyDate",
+        //             title: "淇敼鏃堕棿",
+        //             type: "datetime",
+        //             width: 160,
+        //             align: "left",
+        //             hidden: true,
+        //         },
+        //         {
+        //             field: "remark",
+        //             title: "澶囨敞",
+        //             type: "string",
+        //             width: 100,
+        //             align: "left",
+        //             hidden: true,
+        //         },
+        //     ],
+        //     sortName: "id",
+        //     key: "id",
+        // });
+        return {
+            table,
+            extend,
+            editFormFields,
+            editFormOptions,
+            searchFormFields,
+            searchFormOptions,
+            columns,
+            detail,
+        };
+    },
+});
+</script>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock.vue"
index e08dd8c..dab4e3c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock.vue"
@@ -34,13 +34,14 @@
         const searchFormOptions = ref([
             [
                 { "title": "鎵樼洏鏉$爜", "field": "palletCode", type: "text" },
-                { "title": "鐢熶骇浜х嚎", "field": "productionLine", type: "select", dataKey: "ProductionLine", data: [] },
-                { "title": "搴撳尯", "field": "areaCode", type: "select", dataKey: "AreaType", data: [] },
-                { "title": "搴撳瓨绫诲瀷", "field": "isFull", type: "select", dataKey: "isFull", data: [] },
+                { "title": "妤煎眰", "field": "floor", type: "select", dataKey: "Floor", data: [] },
+                { "title": "搴撳瓨鐘舵��", "field": "stockStatus", type: "select", dataKey: "StockStateEmun", data: [] },
             ], [
                 { "title": "搴撲綅鍙�", "field": "locationCode", type: "text" },
-                { "title": "宸烽亾", "field": "roadwayNo", type: "text" },
                 { "title": "璐т綅鐘舵��", "field": "locationStatus", type: "select", dataKey: "LocationState", data: [] },
+                { "title": "鍖哄煙", "field": "areaId", type: "select", dataKey: "AreaType", data: []},
+            ]
+            , [
                 { "title": "鐗╂枡缂栫爜", "field": "materielCode", type: "text" },
             ]
         ]);
@@ -50,11 +51,12 @@
             { field: 'locationCode', title: '搴撲綅', type: 'string', width: 100, align: 'left', },
             { field: 'locationStatus', title: '璐т綅鐘舵��', type: 'int', width: 60, align: 'left', bind: { key: "LocationState", data: [] } },
             { field: 'floor', title: '妤煎眰', type: 'int', width: 60, align: 'left', bind: { key: "Floor", data: [] } },
-            { field: 'areaId', title: '鍖哄煙', type: 'int', width: 60, align: 'left', bind: { key: "AreaType", data: [] } },
+            { field: 'areaId', title: '鍖哄煙', type: 'int', width: 120, align: 'left', bind: { key: "AreaType", data: [] } },
+            { field: 'stockStatus', title: '搴撳瓨鐘舵��', type: 'int', width: 90, align: 'left', bind: { key: "StockStateEmun", data: [] } },
             { field: 'remark', title: '澶囨敞', type: 'string', width: 60, align: 'left', },
             { field: 'creater', title: '鍒涘缓浜�', type: 'string', sort: true, width: 110, align: 'left', hidden: true },
             { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', sort: true, width: 150, align: 'left', },
-            { field: 'modifier', title: '鏈�鍚庝慨鏀逛汉', type: 'string', sort: true, width: 100, hidden: true, align: 'left' },
+            { field: 'modifier', title: '鏈�鍚庝慨鏀逛汉', type: 'string', sort: true, width: 100,  align: 'left' },
             ]
         );
         const detail = ref({
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock_Hty.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock_Hty.vue"
index 44b093a..d8d42f4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock_Hty.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock_Hty.vue"
@@ -34,13 +34,14 @@
         const searchFormOptions = ref([
             [
                 { "title": "鎵樼洏鏉$爜", "field": "palletCode", type: "text" },
-                { "title": "鐢熶骇浜х嚎", "field": "productionLine", type: "select", dataKey: "ProductionLine", data: [] },
-                { "title": "搴撳尯", "field": "areaCode", type: "select", dataKey: "AreaType", data: [] },
-                { "title": "搴撳瓨绫诲瀷", "field": "isFull", type: "select", dataKey: "isFull", data: [] },
+                { "title": "妤煎眰", "field": "floor", type: "select", dataKey: "Floor", data: [] },
+                { "title": "搴撳瓨鐘舵��", "field": "stockStatus", type: "select", dataKey: "StockStateEmun", data: [] },
             ], [
                 { "title": "搴撲綅鍙�", "field": "locationCode", type: "text" },
-                { "title": "宸烽亾", "field": "roadwayNo", type: "text" },
                 { "title": "璐т綅鐘舵��", "field": "locationStatus", type: "select", dataKey: "LocationState", data: [] },
+                { "title": "鍖哄煙", "field": "areaId", type: "select", dataKey: "AreaType", data: []},
+            ]
+            , [
                 { "title": "鐗╂枡缂栫爜", "field": "materielCode", type: "text" },
             ]
         ]);
@@ -48,10 +49,11 @@
             [{ field: 'id', title: '搴撳瓨ID', type: 'int', width: 110, hidden: true, readonly: true, require: true, align: 'left' },
             { field: 'palletCode', title: '鎵樼洏鏉$爜', type: 'string', width: 110, align: 'left', link: true, },
             { field: 'locationCode', title: '搴撲綅', type: 'string', width: 100, align: 'left', },
+            { field: 'stockStatus', title: '搴撳瓨鐘舵��', type: 'int', width: 90, align: 'left', bind: { key: "StockStateEmun", data: [] } },
             { field: 'remark', title: '澶囨敞', type: 'string', width: 60, align: 'left', },
             { field: 'creater', title: '鍒涘缓浜�', type: 'string', sort: true, width: 110, align: 'left', hidden: true },
             { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', sort: true, width: 150, align: 'left', },
-            { field: 'modifier', title: '鏈�鍚庝慨鏀逛汉', type: 'string', sort: true, width: 100, hidden: true, align: 'left' },
+            { field: 'modifier', title: '鏈�鍚庝慨鏀逛汉', type: 'string', sort: true, width: 100,  align: 'left' },
             ]
         );
         const detail = ref({
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 f3815d9..38912e3 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 fe9ac28..58b2898 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 e69de29..4446e1f 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 e60a3d6..f9bf737 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 386a519..babcff7 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 00800b5..79f3a7f 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 be474fc..549e881 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,6 +3,34 @@
   "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\",
   "Documents": [
     {
+      "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\\stock\\generateouttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\generateouttaskdto.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\\stock\\stockselectviewdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\stockselectviewdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagebasicservices\\stock\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|solutionrelative:widesea_storagebasicservices\\stock\\stockinfoservice.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\\basic\\stockinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\stockinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{B8B1C352-0398-4A54-B202-D774D48367EB}|WIDESEA_IStorageBasicService\\WIDESEA_IStorageBasicServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_istoragebasicservice\\stock\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{B8B1C352-0398-4A54-B202-D774D48367EB}|WIDESEA_IStorageBasicService\\WIDESEA_IStorageBasicServices.csproj|solutionrelative:widesea_istoragebasicservice\\stock\\istockinfoservice.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:{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:{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}"
     },
@@ -15,20 +43,12 @@
       "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:{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:{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:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagetaskservices\\aspnetcoreschedule.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\aspnetcoreschedule.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\\aspnetcoreschedule.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\aspnetcoreschedule.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -38,63 +58,128 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 1,
+          "SelectedChildIndex": 3,
           "Children": [
             {
               "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "IStockInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "RelativeToolTip": "WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "ViewState": "AgIAAAoAAAAAAAAAAAAcwCIAAAABAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T08:58:23.236Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "StockInfoController.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "ViewState": "AgIAAB8AAAAAAAAAAIA2wDIAAAAXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T08:53:04.13Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "StockSelectViewDTO.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "RelativeToolTip": "WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwgAAAAEAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T08:51:02.987Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "GenerateOutTaskDto.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs",
+              "RelativeToolTip": "WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAuwB0AAAAXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T08:43:04.818Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "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": "AgIAAAAAAAAAAAAAAAAuwB0AAAAEAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T07:45:40.767Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "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": "AgIAAHkAAAAAAAAAAAAAwIoAAAARAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T07:40:38.084Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
               "DocumentIndex": 2,
+              "Title": "StockInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "RelativeToolTip": "WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "ViewState": "AgIAAI8AAAAAAAAAAAAjwJMAAAAEAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T05:33:37.383Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "Sys_DictionaryController.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "ViewState": "AgIAACICAAAAAAAAAAAlwCwCAABXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T03:11:21.896Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
               "Title": "appsettings.json",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
               "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": "AgIAAAAAAAAAAAAAAADwvwcAAAAtAAAAAAAAAA==",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwcAAAB1AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
               "WhenOpened": "2025-10-21T08:37:20.946Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
-              "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": "AgIAAGICAAAAAAAAAAAmwH8CAAAaAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-21T08:35:46.527Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "Sys_DictionaryController.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
-              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs*",
-              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs*",
-              "ViewState": "AgIAAHABAAAAAAAAAAAiwHoBAAA+AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-21T08:34:47.821Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "IDt_TaskService.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
-              "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": "AgIAAIEAAAAAAAAAAAAAAJQAAABEAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-21T03:34:03.341Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
+              "DocumentIndex": 11,
               "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",
@@ -107,26 +192,26 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 6,
+              "DocumentIndex": 10,
               "Title": "AspNetCoreSchedule.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
               "RelativeDocumentMoniker": "WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
               "RelativeToolTip": "WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
-              "ViewState": "AgIAADAAAAAAAAAAAADgvzkAAAApAAAAAAAAAA==",
+              "ViewState": "AgIAAC0AAAAAAAAAAAAWwJIAAAAcAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-10-20T04:05:33.05Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
+              "DocumentIndex": 6,
               "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": "AgIAAKUEAAAAAAAAAAAAAMIEAABNAAAAAAAAAA==",
+              "ViewState": "AgIAALIAAAAAAAAAAAAqwHEBAABQAAAAAAAAAA==",
               "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 6eceeda..0404d17 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"
@@ -3,32 +3,52 @@
   "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagebasicservices\\stock\\erpstockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|solutionrelative:widesea_storagebasicservices\\stock\\erpstockinfoservice.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\\stock\\generateouttaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\generateouttaskdto.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\\aspnetcoreschedule.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\aspnetcoreschedule.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\\stock\\stockselectviewdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\stockselectviewdto.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\\basic\\stockinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\stockinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{B8B1C352-0398-4A54-B202-D774D48367EB}|WIDESEA_IStorageBasicService\\WIDESEA_IStorageBasicServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_istoragebasicservice\\stock\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{B8B1C352-0398-4A54-B202-D774D48367EB}|WIDESEA_IStorageBasicService\\WIDESEA_IStorageBasicServices.csproj|solutionrelative:widesea_istoragebasicservice\\stock\\istockinfoservice.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\\wms\\groupedstockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\wms\\groupedstockinfo.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\\groupplate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\basic\\groupplate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagebasicservices\\stock\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|solutionrelative:widesea_storagebasicservices\\stock\\stockinfoservice.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:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagebasicservices\\location\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{4BDE58B2-5B2E-480B-932F-D63C2A7D557C}|WIDESEA_StorageBasicServices\\WIDESEA_StorageBasicServices.csproj|solutionrelative:widesea_storagebasicservices\\location\\locationinfoservice.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\\controllers\\system\\sys_dictionarycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\system\\sys_dictionarycontroller.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:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagetaskservices\\aspnetcoreschedule.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\aspnetcoreschedule.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}",
@@ -42,76 +62,141 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 0,
+          "SelectedChildIndex": 5,
           "Children": [
             {
               "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "ERPStockInfoService.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Stock\\ERPStockInfoService.cs",
-              "RelativeDocumentMoniker": "WIDESEA_StorageBasicServices\\Stock\\ERPStockInfoService.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Stock\\ERPStockInfoService.cs",
-              "RelativeToolTip": "WIDESEA_StorageBasicServices\\Stock\\ERPStockInfoService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAADwvyEAAAAAAAAAAAAAAA==",
+              "DocumentIndex": 5,
+              "Title": "GroupPlate.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Basic\\GroupPlate.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\Basic\\GroupPlate.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Basic\\GroupPlate.cs",
+              "RelativeToolTip": "WIDESEA_DTO\\Basic\\GroupPlate.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwwAAAAyAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-21T09:12:45.849Z",
+              "WhenOpened": "2025-10-22T09:05:31.445Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "GroupedStockInfo.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\WMS\\GroupedStockInfo.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\WMS\\GroupedStockInfo.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\WMS\\GroupedStockInfo.cs",
+              "RelativeToolTip": "WIDESEA_DTO\\WMS\\GroupedStockInfo.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T09:04:54.385Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 3,
-              "Title": "LocationInfoService.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Location\\LocationInfoService.cs",
-              "RelativeDocumentMoniker": "WIDESEA_StorageBasicServices\\Location\\LocationInfoService.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Location\\LocationInfoService.cs",
-              "RelativeToolTip": "WIDESEA_StorageBasicServices\\Location\\LocationInfoService.cs",
-              "ViewState": "AgIAAE0AAAAAAAAAAAAQwFUAAACTAAAAAAAAAA==",
+              "Title": "IStockInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "RelativeToolTip": "WIDESEA_IStorageBasicService\\Stock\\IStockInfoService.cs",
+              "ViewState": "AgIAAAoAAAAAAAAAAAAcwCIAAAABAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-21T04:13:57.538Z",
+              "WhenOpened": "2025-10-22T08:58:23.236Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "StockInfoController.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\StockInfoController.cs",
+              "ViewState": "AgIAAB8AAAAAAAAAAIA2wDIAAAAXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T08:53:04.13Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "StockSelectViewDTO.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "RelativeToolTip": "WIDESEA_DTO\\Stock\\StockSelectViewDTO.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwgAAAAjAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T08:51:02.987Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "GenerateOutTaskDto.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs*",
+              "RelativeToolTip": "WIDESEA_DTO\\Stock\\GenerateOutTaskDto.cs*",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAPAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T08:43:04.818Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "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": "AgIAAHkAAAAAAAAAAAAAwIoAAAARAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T07:40:38.084Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 6,
+              "Title": "StockInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "RelativeToolTip": "WIDESEA_StorageBasicServices\\Stock\\StockInfoService.cs",
+              "ViewState": "AgIAAI8AAAAAAAAAAAAjwJIAAABFAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T05:33:37.383Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "Sys_DictionaryController.cs",
+              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
+              "ViewState": "AgIAACICAAAAAAAAAAAlwCwCAABXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-10-22T03:11:21.896Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 10,
               "Title": "appsettings.json",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
               "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": "AgIAAAAAAAAAAAAAAADwvwcAAAAtAAAAAAAAAA==",
+              "ViewState": "AgIAAAAAAAAAAAAAAADwvwcAAAB1AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
               "WhenOpened": "2025-10-21T08:37:20.946Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 5,
-              "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": "AgIAAGICAAAAAAAAAAAmwH8CAAAaAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-21T08:35:46.527Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "Sys_DictionaryController.cs",
-              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
-              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
-              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
-              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\System\\Sys_DictionaryController.cs",
-              "ViewState": "AgIAABEBAAAAAAAAAAAiwHQBAAAlAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-10-21T08:34:47.821Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
+              "DocumentIndex": 12,
               "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",
@@ -124,26 +209,26 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
+              "DocumentIndex": 11,
               "Title": "AspNetCoreSchedule.cs",
               "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
               "RelativeDocumentMoniker": "WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
               "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
               "RelativeToolTip": "WIDESEA_StorageTaskServices\\AspNetCoreSchedule.cs",
-              "ViewState": "AgIAACcAAAAAAAAAAAAvwEoAAAA4AAAAAAAAAA==",
+              "ViewState": "AgIAAC0AAAAAAAAAAAAWwJIAAAAcAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-10-20T04:05:33.05Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
+              "DocumentIndex": 7,
               "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": "AgIAANcCAAAAAAAAAAASwP0CAAAlAAAAAAAAAA==",
+              "ViewState": "AgIAALIAAAAAAAAAAAAqwHEBAABQAAAAAAAAAA==",
               "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/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 151165b..59a7cb3 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"
@@ -130,10 +130,16 @@
         OutOther = 110,
 
         /// <summary>
-        /// 鍙枡鍑哄簱
+        /// 鐢熶骇棰嗘枡鍑哄簱
         /// </summary>
-        [Description("鍙枡鍑哄簱")]
-        OutCall = 115,
+        [Description("鐢熶骇棰嗘枡鍑哄簱")]
+        MaterialRequisition = 115,
+
+        /// <summary>
+        /// 鍘熸潗鏂欏嚭搴�
+        /// </summary>
+        [Description("鍘熸潗鏂欏嚭搴�")]
+        RawMaterials = 120,
     }
 
     public enum TaskRelocationTypeEnum
@@ -582,19 +588,59 @@
 
     #endregion 鍘熷鍗曟嵁鍚屾鐘舵��
 
-    #region 鍏ュ簱鍗曟嵁鐘舵��
+    #region 鍗曟嵁鐘舵��
 
     /// <summary>
-    /// 鍏ュ簱鍗曟嵁鐘舵�� 0锛屾湭寮�濮�  1锛屽叆搴撲腑  2锛屽叆搴撳畬鎴�
+    /// 鍏ュ簱鍗曟嵁鐘舵�� 0锛屾湭寮�濮�  1锛屽凡瀹屾垚
     /// </summary>
-    public enum InboundStateEmun
+    public enum OrderStateEmun
     {
+        [Description("鏈紑濮�")]
         鏈紑濮� = 0,
-        鍏ュ簱涓� = 1,
-        鍏ュ簱瀹屾垚 = 2
+
+        [Description("寮�濮�")]
+        寮�濮� = 1,
+
+        [Description("宸插畬鎴�")]
+        宸插畬鎴� = 2,
     }
 
-    #endregion 鍏ュ簱鍗曟嵁鐘舵��
+    #endregion 鍗曟嵁鐘舵��
+
+    #region 鍗曟嵁绫诲瀷
+
+    public enum OrderTypeEmun
+    {
+        [Description("鐩樼偣鍑哄簱鍗�")]
+        鐩樼偣鍑哄簱鍗� = 100,
+
+        [Description("璋冩嫧鍑哄簱鍗�")]
+        璋冩嫧鍑哄簱鍗� = 105,
+
+        [Description("鍏朵粬鍑哄簱鍗�")]
+        鍏朵粬鍑哄簱鍗� = 110,
+
+        [Description("鐢熶骇棰嗘枡鍗�")]
+        鐢熶骇棰嗘枡鍗� = 115,
+
+        [Description("鍘熸潗鏂欓鏂欏崟")]
+        鍘熸潗鏂欓鏂欏崟 = 120,
+    }
+
+    #endregion 鍗曟嵁绫诲瀷
+
+    #region 鍗曟嵁绫诲瀷
+
+    public enum OrderCreateTypeEmun
+    {
+        [Description("鎵嬪姩鍒涘缓")]
+        鎵嬪姩鍒涘缓 = 0,
+
+        [Description("ERP鎺ㄩ��")]
+        ERP鎺ㄩ�� = 1,
+    }
+
+    #endregion 鍗曟嵁绫诲瀷
 
     #region 缁勭洏绫诲瀷
 
@@ -616,14 +662,30 @@
     /// </summary>
     public enum StockStateEmun
     {
+        [Description("缁勭洏鏆傚瓨")]
         缁勭洏鏆傚瓨 = 1,
+
+        [Description("缁勭洏鎾ら攢")]
         缁勭洏鎾ら攢 = 2,
+
+        [Description("鍏ュ簱纭")]
         鍏ュ簱纭 = 3,
+
+        [Description("鍏ュ簱鎾ら攢")]
         鍏ュ簱鎾ら攢 = 4,
+
+        [Description("宸插叆搴�")]
         宸插叆搴� = 5,
+
+        [Description("鍏ュ簱瀹屾垚")]
         鍏ュ簱瀹屾垚 = 6,
+
+        [Description("鍑哄簱閿佸畾")]
         鍑哄簱閿佸畾 = 7,
+
+        [Description("鍑哄簱瀹屾垚")]
         鍑哄簱瀹屾垚 = 8,
+
     }
 
     #endregion 搴撳瓨鐘舵��
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/AddBoxingDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/GroupPlate.cs"
similarity index 89%
rename from "\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/AddBoxingDto.cs"
rename to "\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/GroupPlate.cs"
index 3e7b39b..a8f150c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/AddBoxingDto.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/GroupPlate.cs"
@@ -6,7 +6,7 @@
 
 namespace WIDESEA_DTO.Basic
 {
-    public class AddBoxingDto
+    public class GroupPlate
     {
         public string palletCode { get; set; }
 
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 43dcb4f..ed8a6bb 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"
@@ -17,6 +17,12 @@
     /// </summary>
     public string TargetAddress { get; set; }
 
+
+    public string OrderNo { get; set; }
+
+
+    public string MaterielCode { get; set; }
+
     /// <summary>
     /// 鍖哄煙
     /// </summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/GenerateOutTaskDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/GenerateOutTaskDto.cs"
new file mode 100644
index 0000000..7bfe221
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/GenerateOutTaskDto.cs"
@@ -0,0 +1,32 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Stock
+{
+    public class GenerateOutTaskDto
+    {
+        public int orderId { get; set; }
+
+        public List<StockSelectViewDTO> stockViews { get; set; }
+
+        public string TargetAddress { get; set; }
+
+        public int AreaId { get; set; }
+    }
+
+    public class StockViewDTO
+    {
+        public string materielCode { get; set; }
+
+        public string materielName { get; set; }
+
+        public decimal useableQuantity { get; set; }
+
+        public string palletCode { get; set; }
+
+        public string locationCode { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs"
new file mode 100644
index 0000000..d0a9a2c
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockSelectViewDTO.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Stock
+{
+    public class StockSelectViewDTO
+    {
+        public string MaterielCode { get; set; }
+
+        public string MaterielName { get; set; }
+
+        public decimal UseableQuantity { get; set; }
+
+        public string PalletCode { get; set; }
+
+        public string LocationCode { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderRepository/IDt_OutboundOrderDetailRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderRepository/IDt_OutboundOrderDetailRepository.cs"
new file mode 100644
index 0000000..333505d
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderRepository/IDt_OutboundOrderDetailRepository.cs"
@@ -0,0 +1,8 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_IOrderRepository;
+
+public interface IDt_OutboundOrderDetailRepository : IRepository<Dt_OutboundOrderDetail>
+{
+}
\ 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_IOrderRepository/IDt_OutboundOrderRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderRepository/IDt_OutboundOrderRepository.cs"
new file mode 100644
index 0000000..dd4b2fd
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderRepository/IDt_OutboundOrderRepository.cs"
@@ -0,0 +1,8 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_IOrderRepository;
+
+public interface IDt_OutboundOrderRepository : IRepository<Dt_OutboundOrder>
+{
+}
\ 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_IOrderServices/IDt_OutboundOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderServices/IDt_OutboundOrderDetailService.cs"
new file mode 100644
index 0000000..2739d75
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderServices/IDt_OutboundOrderDetailService.cs"
@@ -0,0 +1,11 @@
+锘縰sing WIDESEA_Core.BaseServices;
+using WIDESEA_DTO;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_IOrderServices;
+
+public interface IDt_OutboundOrderDetailService : IService<Dt_OutboundOrderDetail>
+{
+    
+    
+}
\ 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_IOrderServices/IDt_OutboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderServices/IDt_OutboundOrderService.cs"
new file mode 100644
index 0000000..1c4bcb7
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IOrderServices/IDt_OutboundOrderService.cs"
@@ -0,0 +1,11 @@
+锘縰sing WIDESEA_Core.BaseServices;
+using WIDESEA_DTO;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_IOrderServices;
+
+public interface IDt_OutboundOrderService : IService<Dt_OutboundOrder>
+{
+    
+    
+}
\ 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/Boxing/IBoxingInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Boxing/IBoxingInfoService.cs"
index 160081e..7cf9f4b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Boxing/IBoxingInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Boxing/IBoxingInfoService.cs"
@@ -5,17 +5,4 @@
 
 public interface IBoxingInfoService : IService<DtBoxingInfo>
 {
-    /// <summary>
-    /// 娣诲姞缁勭洏
-    /// </summary>
-    /// <param name="boxingInfo"></param>
-    /// <returns></returns>
-    Task<WebResponseContent> AddBoxingInfoAsync(AddBoxingDto boxingInfo);
-
-    /// <summary>
-    /// 瑙g洏
-    /// </summary>
-    /// <param name="boxingInfo"></param>
-    /// <returns></returns>
-    Task<WebResponseContent> DeleteBoxingInfoAsync(AddBoxingDto boxingInfo);
 }
\ 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/IStockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockInfoService.cs"
index 4947552..8a139e4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IStockInfoService.cs"
@@ -1,6 +1,35 @@
-锘縩amespace WIDESEA_IStorageBasicService;
+锘縰sing WIDESEA_DTO.Basic;
+using WIDESEA_DTO.Stock;
+
+namespace WIDESEA_IStorageBasicService;
 
 public interface IStockInfoService : IService<DtStockInfo>
 {
-   
+    /// <summary>
+    /// 鏍规嵁鐗╂枡缂栫爜鑾峰彇搴撳瓨鍙敤閲忚鍥�
+    /// </summary>
+    /// <param name="materielCode"></param>
+    /// <returns></returns>
+    List<StockSelectViewDTO> GetStockSelectViews(string materielCode);
+
+    /// <summary>
+    /// 缁勭洏
+    /// </summary>
+    /// <param name="groupPlate"></param>
+    /// <returns></returns>
+    Task<WebResponseContent> AddGroupPlateAsync(GroupPlate groupPlate);
+
+    /// <summary>
+    /// 瑙g洏
+    /// </summary>
+    /// <param name="groupPlate"></param>
+    /// <returns></returns>
+    Task<WebResponseContent> DeleteGroupPlateAsync(GroupPlate groupPlate);
+
+    /// <summary>
+    /// 鏍规嵁璇锋眰鍑哄簱浠诲姟
+    /// </summary>
+    /// <param name="requestOut"></param>
+    /// <returns></returns>
+    WebResponseContent GenerateOutboundTask(GenerateOutTaskDto requestOut);
 }
\ 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.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs"
index 4da404e..1396f41 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs"
@@ -45,6 +45,18 @@
         public int StockStatus { get; set; }
 
         /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁绫诲瀷")]
+        public string OrderType { get; set; }
+
+        /// <summary>
         /// 澶囨敞
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail.cs"
index 6629ecd..3602552 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfoDetail.cs"
@@ -39,6 +39,12 @@
     public string MaterielName { get; set; }
 
     /// <summary>
+    /// 闇�姹傚垎绫�
+    /// </summary>
+    [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "闇�姹傚垎绫�")]
+    public string DemandClassification { get; set; }
+
+    /// <summary>
     /// 浠撳簱
     /// </summary>
     [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "浠撳簱")]
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 b920d2a..1527ec0 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"
@@ -42,6 +42,18 @@
         public int StockStatus { get; set; }
 
         /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁绫诲瀷")]
+        public string OrderType { get; set; }
+
+        /// <summary>
         /// 澶囨敞
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_InboundOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_InboundOrder.cs"
index a2d2b9c..9d78880 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_InboundOrder.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_InboundOrder.cs"
@@ -9,7 +9,7 @@
 namespace WIDESEA_Model.Models.Order
 {
     /// <summary>
-    /// 鎵撳嵃鍏ュ簱鍗曟嵁琛�
+    /// 鍏ュ簱鍗曟嵁
     ///</summary>
     [SugarTable("Dt_InboundOrder")]
     public class Dt_InboundOrder : BaseEntity
@@ -17,51 +17,100 @@
         [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
         public int Id { get; set; }
 
-        [SugarColumn(ColumnName= "PrintCode", Length = 255) ]
-        public string PrintCode { get; set; }
-
-        [SugarColumn(ColumnName = "OrderNo", Length = 255)]
+        /// <summary>
+        /// 鍏ュ簱鍗曟嵁
+        /// </summary>
+        [SugarColumn(ColumnName= "OrderNo", Length = 255) ]
         public string OrderNo { get; set; }
 
+        /// <summary>
+        /// 涓婃父鍗曞彿
+        /// </summary>
+        [SugarColumn(ColumnName = "UpperOrderNo", Length = 255)]
+        public string UpperOrderNo { get; set; }
+
+
+        /// <summary>
+        /// 闇�姹傚垎绫�
+        /// </summary>
         [SugarColumn(ColumnName = "DemandClassification", Length = 255)]
         public string DemandClassification { get; set; }
 
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
         [SugarColumn(ColumnName = "OrderType", Length = 255)]
         public string OrderType { get; set; }
 
+        /// <summary>
+        /// 浠撳簱
+        /// </summary>
         [SugarColumn(ColumnName = "WarehouseName", Length = 255)]
         public string WarehouseName { get; set; }
 
+        /// <summary>
+        /// 鏃堕棿
+        /// </summary>
         [SugarColumn(ColumnName = "Datetime", Length = 255)]
         public string Datetime { get; set; }
 
+        /// <summary>
+        /// 琛屽彿
+        /// </summary>
         [SugarColumn(ColumnName = "LineNumber")]
         public int LineNumber { get; set; }
 
+        /// <summary>
+        /// 鍥惧彿
+        /// </summary>
         [SugarColumn(ColumnName = "ProductDrawingNumber", Length = 255)]
         public string ProductDrawingNumber { get; set; }
 
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
         [SugarColumn(ColumnName = "MaterialNo", Length = 255)]
         public string MaterialNo { get; set; }
 
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
         [SugarColumn(ColumnName = "MaterialName", Length = 255)]
         public string MaterialName { get; set; }
 
+        /// <summary>
+        /// 鍗曢噸
+        /// </summary>
         [SugarColumn(ColumnName = "Weight")]
         public decimal Weight { get; set; }
 
+        /// <summary>
+        /// 瑙勬牸
+        /// </summary>
         [SugarColumn(ColumnName = "Specs", Length = 255)]
         public string Specs { get; set; }
 
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
         [SugarColumn(ColumnName = "Unit", Length = 255)]
         public string Unit { get; set; }
 
+        /// <summary>
+        /// 鏉愯川
+        /// </summary>
         [SugarColumn(ColumnName = "Texture", Length = 255)]
         public string Texture { get; set; }
 
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
         [SugarColumn(ColumnName = "Quantity")]
         public decimal Quantity { get; set; }
 
+        /// <summary>
+        /// 鍗曟嵁鐘舵��
+        /// </summary>
         [SugarColumn(ColumnName = "OrderStatus", Length = 255)]
         public string OrderStatus { get; set; }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrder.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrder.cs"
new file mode 100644
index 0000000..c6193a5
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrder.cs"
@@ -0,0 +1,96 @@
+锘縰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.Order
+{
+    /// <summary>
+    /// 鎵撳嵃鍏ュ簱鍗曟嵁琛�
+    ///</summary>
+    [SugarTable("Dt_OutboundOrder")]
+    public class Dt_OutboundOrder : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(ColumnName = "OrderNo", Length = 255)]
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 涓婃父鍗曟嵁缂栧彿
+        /// </summary>
+        [SugarColumn(ColumnName = "UpperOrderNo", Length = 255)]
+        public string UpperOrderNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        [SugarColumn(ColumnName = "MaterielCode", Length = 255)]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(ColumnName = "MaterielName", Length = 255)]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 闇�姹傚垎绫�
+        /// </summary>
+
+        [SugarColumn(ColumnName = "DemandClassification", Length = 255)]
+        public string DemandClassification { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱鏁伴噺
+        /// </summary>
+        [SugarColumn(ColumnName = "OrderQuantity")]
+        public decimal OrderQuantity { get; set; }
+
+        /// <summary>
+        /// 宸插嚭搴撴暟閲�
+        /// </summary>
+        [SugarColumn(ColumnName = "OverOutQuantity")]
+        public decimal OverOutQuantity { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁绫诲瀷
+        /// </summary>
+
+        [SugarColumn(ColumnName = "OrderType")]
+        public int OrderType { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鐘舵��
+        /// </summary>
+        [SugarColumn(ColumnName = "OrderStatus")]
+        public int OrderStatus { get; set; }
+
+
+        /// <summary>
+        /// 鍒涘缓鏂瑰紡
+        /// </summary>
+        [SugarColumn(ColumnName = "CreateType")]
+        public int CreateType { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(ColumnName = "Remark", Length = 255)]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱璁㈠崟鏄庣粏
+        /// </summary>
+        [SugarColumn(ColumnName = "OutorderDetails")]
+        [Navigate(NavigateType.OneToMany, nameof(Dt_OutboundOrderDetail.OrderId))]
+        public List<Dt_OutboundOrderDetail>? OutorderDetails { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrderDetail.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrderDetail.cs"
new file mode 100644
index 0000000..e9df104
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Order/Dt_OutboundOrderDetail.cs"
@@ -0,0 +1,76 @@
+锘縰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.Order
+{
+    /// <summary>
+    /// 鍑哄簱鍗曟嵁鏄庣粏琛�
+    ///</summary>
+    [SugarTable("Dt_OutboundOrderDetail")]
+    public class Dt_OutboundOrderDetail : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱鍗曟嵁涓婚敭ID
+        /// </summary>
+        [SugarColumn(ColumnName = "OrderId", Length = 255)]
+        public int OrderId { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        [SugarColumn(ColumnName = "MaterielCode", Length = 255)]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(ColumnName = "MaterielName", Length = 255)]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 闇�姹傚垎绫�
+        /// </summary>
+
+        [SugarColumn(ColumnName = "DemandClassification", Length = 255)]
+        public string DemandClassification { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱鏁伴噺
+        /// </summary>
+        [SugarColumn(ColumnName = "OrderQuantity")]
+        public decimal OrderQuantity { get; set; }
+
+
+        /// <summary>
+        /// 閿佸畾鏁伴噺
+        /// </summary>
+        [SugarColumn(ColumnName = "LockQuantity")]
+        public decimal LockQuantity { get; set; }
+
+        /// <summary>
+        /// 宸插嚭搴撴暟閲�
+        /// </summary>
+        [SugarColumn(ColumnName = "OverOutQuantity")]
+        public decimal OverOutQuantity { get; set; }
+
+        /// <summary>
+        /// 鍗曟嵁鏄庣粏鐘舵��
+        /// </summary>
+        [SugarColumn(ColumnName = "OrderDetailStatus")]
+        public int OrderDetailStatus { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(ColumnName = "Remark", Length = 255)]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderRepository/Dt_OutboundOrderDetailRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderRepository/Dt_OutboundOrderDetailRepository.cs"
new file mode 100644
index 0000000..7898016
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderRepository/Dt_OutboundOrderDetailRepository.cs"
@@ -0,0 +1,12 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_IOrderRepository;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_OrderRepository;
+
+public class Dt_OutboundOrderDetailRepository : RepositoryBase<Dt_OutboundOrderDetail>, IDt_OutboundOrderDetailRepository
+{
+    public Dt_OutboundOrderDetailRepository(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_OrderRepository/Dt_OutboundOrderRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderRepository/Dt_OutboundOrderRepository.cs"
new file mode 100644
index 0000000..77f7f96
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderRepository/Dt_OutboundOrderRepository.cs"
@@ -0,0 +1,12 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_IOrderRepository;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_OrderRepository;
+
+public class Dt_OutboundOrderRepository : RepositoryBase<Dt_OutboundOrder>, IDt_OutboundOrderRepository
+{
+    public Dt_OutboundOrderRepository(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_OrderServices/Dt_OutboundOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_OutboundOrderDetailService.cs"
new file mode 100644
index 0000000..f587c64
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_OutboundOrderDetailService.cs"
@@ -0,0 +1,23 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IOrderRepository;
+using WIDESEA_IOrderServices;
+using WIDESEA_IStorageTaskRepository;
+using WIDESEA_IStorageTaskServices;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_OrderServices
+{
+    public class Dt_OutboundOrderDetailService : ServiceBase<Dt_OutboundOrderDetail, IDt_OutboundOrderDetailRepository>, IDt_OutboundOrderDetailService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public Dt_OutboundOrderDetailService(IDt_OutboundOrderDetailRepository BaseDal,
+                                        IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_OutboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_OutboundOrderService.cs"
new file mode 100644
index 0000000..915a1eb
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OrderServices/Dt_OutboundOrderService.cs"
@@ -0,0 +1,23 @@
+锘縰sing WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IOrderRepository;
+using WIDESEA_IOrderServices;
+using WIDESEA_IStorageTaskRepository;
+using WIDESEA_IStorageTaskServices;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Order;
+
+namespace WIDESEA_OrderServices
+{
+    public class Dt_OutboundOrderService : ServiceBase<Dt_OutboundOrder, IDt_OutboundOrderRepository>, IDt_OutboundOrderService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public Dt_OutboundOrderService(IDt_OutboundOrderRepository BaseDal,
+                                        IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Boxing/BoxingInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Boxing/BoxingInfoService.cs"
index 87df8eb..61e8777 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Boxing/BoxingInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Boxing/BoxingInfoService.cs"
@@ -11,11 +11,9 @@
 
 public class BoxingInfoService : ServiceBase<DtBoxingInfo, IBoxingInfoRepository>, IBoxingInfoService
 {
-    private readonly IDt_InboundOrderRepository _inboundOrderRepository;
     private readonly IUnitOfWorkManage _unitOfWorkManage;
-    public BoxingInfoService(IBoxingInfoRepository BaseDal, IDt_InboundOrderRepository inboundOrderRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+    public BoxingInfoService(IBoxingInfoRepository BaseDal,IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
     {
-        _inboundOrderRepository = inboundOrderRepository;
         _unitOfWorkManage = unitOfWorkManage;
     }
     public override PageGridData<DtBoxingInfo> GetPageData(PageDataOptions options)
@@ -53,144 +51,5 @@
             .ToPageList(options.Page, options.Rows, ref totalCount);
         new PageGridData<DtBoxingInfo>(totalCount, data);
         return new PageGridData<DtBoxingInfo>(totalCount, data);
-    }
-
-    public async Task<WebResponseContent> AddBoxingInfoAsync(AddBoxingDto boxingInfo)
-    {
-        WebResponseContent content = new WebResponseContent();
-        try
-        {
-            if(boxingInfo == null || boxingInfo.OrderNos.IsNullOrEmpty() || boxingInfo.palletCode.IsNullOrEmpty())
-            {
-                return content.Error("鍙傛暟閿欒");
-            }
-            var info = await BaseDal.QueryFirstAsync(x => x.PalletCode == boxingInfo.palletCode);
-            if (!info.IsNullOrEmpty())
-            {
-                content.Error("璇ユ墭鐩樺凡瀛樺湪缁勭洏");
-            }
-            else
-            {
-                List<DtBoxingInfoDetail> details = new List<DtBoxingInfoDetail>();
-                foreach (var item in boxingInfo.OrderNos)
-                {
-                    var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.PrintCode == item);
-
-                    if(InboundOrder != null)
-                    {
-                        var x = details.Where(x => x.MaterielCode == InboundOrder.MaterialNo && x.Warehouse == InboundOrder.WarehouseName && x.DrawingNumber==InboundOrder.ProductDrawingNumber &&x.DemandClassification ==InboundOrder.DemandClassification).FirstOrDefault();
-                        if (x != null)
-                        {
-                            details.Remove(x);
-                            x.MaterielCode = InboundOrder.MaterialNo;
-                            x.MaterielName = InboundOrder.MaterialName;
-                            x.DemandClassification = InboundOrder.DemandClassification;
-                            x.Warehouse = InboundOrder.WarehouseName;
-                            x.OrderNo = InboundOrder.OrderNo;
-                            x.Unit = InboundOrder.Unit;
-                            x.Specs = InboundOrder.Specs;
-                            x.Weight = InboundOrder.Weight;
-                            x.Quantity = x.Quantity + InboundOrder.Quantity;
-                            x.DrawingNumber = InboundOrder.ProductDrawingNumber;
-                            x.Date = InboundOrder.Datetime;
-                            details.Add(x);
-                        }
-                        else
-                        {
-                            DtBoxingInfoDetail detail = new DtBoxingInfoDetail()
-                            {
-                                MaterielCode = InboundOrder.MaterialNo,
-                                MaterielName = InboundOrder.MaterialName,
-                                DemandClassification = InboundOrder.DemandClassification,
-                                Warehouse = InboundOrder.WarehouseName,
-                                OrderNo = InboundOrder.OrderNo,
-                                Unit = InboundOrder.Unit,
-                                Specs = InboundOrder.Specs,
-                                Weight = InboundOrder.Weight,
-                                Quantity = InboundOrder.Quantity,
-                                DrawingNumber = InboundOrder.ProductDrawingNumber,
-                                Date = InboundOrder.Datetime,
-                            };
-                            details.Add(detail);
-                        }
-                    }
-                    else
-                    {
-                        return content.Error("鏈壘鍒板叆搴撳崟鎹俊鎭�");
-                    }
-                }
-
-                DtBoxingInfo boxing = new DtBoxingInfo()
-                {
-                    PalletCode=boxingInfo.palletCode,
-                    BoxingInfoDetails= details
-                };
-                await BaseDal.AddDataNavAsync(boxing);
-                content.OK("缁勭洏鎴愬姛");
-            }
-            return content;
-        }
-        catch (Exception ex)
-        {
-            return content.Error(ex.Message);
-        }
-    }
-
-    public async Task<WebResponseContent> DeleteBoxingInfoAsync(AddBoxingDto boxingInfo)
-    {
-        WebResponseContent content = new WebResponseContent();
-        try
-        {
-            if (boxingInfo == null || boxingInfo.palletCode.IsNullOrEmpty())
-            {
-                return content.Error("鍙傛暟閿欒");
-            }
-            var boxing = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == boxingInfo.palletCode);
-            if (!boxing.IsNullOrEmpty())
-            {
-                DtBoxingInfo_Hty boxingInfo_Hty = boxing.Adapt<DtBoxingInfo_Hty>();
-                boxingInfo_Hty.ModifyDate = DateTime.Now;
-                await _unitOfWorkManage.UseTranAsync(async () =>
-                {
-                    await BaseDal.Db.DeleteNav<DtBoxingInfo>(x => x.Id == boxing.Id)
-                                            .Include(x => x.BoxingInfoDetails)
-                                            .ExecuteCommandAsync();
-                    await AddBoxingHtyAsync(boxingInfo_Hty);
-                });
-                content.OK("瑙g洏鎴愬姛");
-            }
-            else
-            {
-                content.Error("鏈壘鍒扮粍鐩樻暟鎹�");
-            }
-            return content;
-        }
-        catch (Exception ex)
-        {
-            return content.Error(ex.Message);
-        }
-    }
-    private async Task AddBoxingHtyAsync(DtBoxingInfo_Hty boxingInfo)
-    {
-        var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(boxingInfo).IncludesAllFirstLayer().ExecuteCommandAsync();
-        if (!isStockAdd)
-        {
-            throw new Exception("缁勭洏鍘嗗彶淇℃伅娣诲姞澶辫触");
-        }
-    }
-
-    // 楠岃瘉妯″瀷
-    public static List<ValidationResult> ValidateModel(object model)
-    {
-        // 鍒涘缓涓�涓獙璇佺粨鏋滃垪琛�
-        var validationResults = new List<ValidationResult>();
-        // 鍒涘缓涓�涓獙璇佷笂涓嬫枃
-        var validationContext = new ValidationContext(model, serviceProvider: null, items: null);
-
-        // 浣跨敤楠岃瘉鍣ㄥ皾璇曢獙璇佹ā鍨嬶紝骞跺皢楠岃瘉缁撴灉娣诲姞鍒伴獙璇佺粨鏋滃垪琛ㄤ腑
-        Validator.TryValidateObject(model, validationContext, validationResults, validateAllProperties: true);
-
-        // 杩斿洖楠岃瘉缁撴灉鍒楄〃
-        return validationResults;
     }
 }
\ 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/StockInfoHtyService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoHtyService.cs"
index 06d3149..cd49b05 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoHtyService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoHtyService.cs"
@@ -1,6 +1,7 @@
 锘縰sing AngleSharp.Dom;
 using Mapster;
 using Masuit.Tools;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using SqlSugar;
 using System.Collections;
 using System.Collections.Generic;
@@ -10,6 +11,7 @@
 using WIDESEA_Cache;
 using WIDESEA_Common;
 using WIDESEA_Core;
+using WIDESEA_Core.Enums;
 
 namespace WIDESEA_StorageBasicService;
 
@@ -54,10 +56,19 @@
             }
             catch { }
         }
+        Expression<Func<DtStockInfo_Hty, bool>> materielCode = null;
+        foreach (var item in searchParametersList)
+        {
+            if (item.Name.Contains("materielCode"))
+            {
+                materielCode = x => x.StockInfoDetails.Any(d => d.MaterielCode == item.Value);
+            }
+        }
         var data = BaseDal.Db.Queryable<DtStockInfo_Hty>()
             .Includes(x => x.StockInfoDetails)
             .Where(x=>x.CreateDate>DateTime.Now.AddMonths(-1))
             .WhereIF(!wheres.IsNullOrEmpty(), wheres)
+             .WhereIF(materielCode != null, materielCode)
             .OrderBy(orderByModels)
             .ToPageList(options.Page, options.Rows, ref totalCount);
         return new PageGridData<DtStockInfo_Hty>(totalCount, data);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs"
index bcd9bd1..5815c76 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs"
@@ -1,6 +1,7 @@
 锘縰sing AngleSharp.Dom;
 using Mapster;
 using Masuit.Tools;
+using NewLife.Reflection;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using SqlSugar;
 using System.Collections;
@@ -11,16 +12,35 @@
 using WIDESEA_Cache;
 using WIDESEA_Common;
 using WIDESEA_Core;
+using WIDESEA_DTO;
+using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IOrderRepository;
 using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Order;
+using WIDESEA_OrderRepository;
 
 namespace WIDESEA_StorageBasicService;
 
 public class StockInfoService : ServiceBase<DtStockInfo, IStockInfoRepository>, IStockInfoService
 {
-    private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
-    public StockInfoService(IStockInfoRepository BaseDal, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository) : base(BaseDal)
+    private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; 
+    private readonly IDt_InboundOrderRepository _inboundOrderRepository;
+    private readonly IUnitOfWorkManage _unitOfWorkManage;
+    private readonly IDt_OutboundOrderRepository _outorderRepository;
+    private readonly IDt_OutboundOrderDetailRepository _outorderdetailRepository;
+    public StockInfoService(IStockInfoRepository BaseDal, 
+                                ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository,
+                                IDt_InboundOrderRepository inboundOrderRepository,
+                                IUnitOfWorkManage unitOfWorkManage,
+                                IDt_OutboundOrderRepository outorderRepository,
+                                IDt_OutboundOrderDetailRepository outorderdetailRepository) : base(BaseDal)
     {
         _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository;
+        _inboundOrderRepository = inboundOrderRepository;
+        _unitOfWorkManage = unitOfWorkManage;
+        _outorderRepository = outorderRepository;
+        _outorderdetailRepository = outorderdetailRepository;
     }
 
     /// <summary>
@@ -60,6 +80,7 @@
         Expression<Func<DtStockInfo, bool>> locationStatus = null;
         Expression<Func<DtStockInfo, bool>> floor = null;
         Expression<Func<DtStockInfo, bool>> areaId = null;
+        Expression<Func<DtStockInfo, bool>> materielCode = null;
         foreach (var item in searchParametersList)
         {
             if (item.Name.Contains("locationStatus"))
@@ -74,6 +95,10 @@
             {
                 areaId = x => x.LocationInfo.AreaId== Convert.ToInt32(item.Value);
             }
+            else if (item.Name.Contains("materielCode"))
+            {
+                materielCode = x => x.StockInfoDetails.Any(d => d.MaterielCode == item.Value);
+            }
         }
         //.IncludesAllFirstLayer()
         var data = BaseDal.Db.Queryable<DtStockInfo>()
@@ -83,12 +108,226 @@
             .WhereIF(locationStatus != null, locationStatus)
             .WhereIF(floor != null, floor)
             .WhereIF(areaId != null, areaId)
+            .WhereIF(materielCode != null, materielCode)
             .OrderBy(orderByModels)
             .ToPageList(options.Page, options.Rows, ref totalCount);
         new PageGridData<DtStockInfo>(totalCount, data);
         return new PageGridData<DtStockInfo>(totalCount, data);
     }
 
+    public List<StockSelectViewDTO> GetStockSelectViews(string materielCode)
+    {
+        var stock = BaseDal.Db.Queryable<DtStockInfo>()
+        .Includes(x => x.StockInfoDetails)
+        .Includes(x => x.LocationInfo)
+        .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable)
+        .Where(x => x.StockInfoDetails.Any(d => d.MaterielCode == materielCode && d.Quantity > 0)).ToList().OrderBy(x=>x.CreateDate);
+
+        var result = stock.Select(s => new StockSelectViewDTO
+        {
+            MaterielCode = s.StockInfoDetails
+            .FirstOrDefault(d => d.MaterielCode == materielCode)?.MaterielCode ?? string.Empty,
+
+            MaterielName = s.StockInfoDetails
+            .FirstOrDefault(d => d.MaterielCode == materielCode)?.MaterielName ?? string.Empty,
+
+            UseableQuantity = s.StockInfoDetails
+            .Where(d => d.MaterielCode == materielCode && d.Quantity > 0)
+            .Sum(d => (decimal?)d.Quantity) ?? 0,  // 澶勭悊绌哄�兼儏鍐�
+
+            PalletCode = s.PalletCode ?? string.Empty,
+            LocationCode = s.LocationInfo?.LocationCode ?? string.Empty
+        }).ToList();
+
+        return result;
+    }
+
+    #region 鏍规嵁鍗曟嵁鏄庣粏鐢熸垚鍑哄簱浠诲姟
+
+    public WebResponseContent GenerateOutboundTask(GenerateOutTaskDto requestOut)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            List<RequestTaskDto> taskDtos = new List<RequestTaskDto>();
+            Dt_OutboundOrder outboundOrder = _outorderRepository.QueryFirst(x => x.Id == requestOut.orderId);
+
+            if (outboundOrder == null)
+            {
+                throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅!");
+            }
+            List<DtStockInfo>? stockInfos = null;
+            Dt_OutboundOrderDetail? orderDetail = null;
+            List<DtLocationInfo>? locationInfos = null;
+            if (outboundOrder.OrderStatus != OrderStateEmun.宸插畬鎴�.ObjToInt())
+            {
+                return content.Error("璇ュ嚭搴撳崟宸插畬鎴愶紝鏃犳硶鐢熸垚鍑哄簱浠诲姟");
+            }
+            else
+            {
+                if (requestOut.stockViews.Count == 0)
+                {
+
+                }
+                else
+                {
+                    foreach (var item in requestOut.stockViews)
+                    {
+                        decimal availableQuantity = item.UseableQuantity;
+                        if (availableQuantity <= 0)
+                        {
+                            continue; // 鏃犲彲鐢ㄥ簱瀛橈紝缁х画涓嬩竴涓�
+                        }
+                        var stock = BaseDal.QueryFirst(x => x.LocationCode == item.LocationCode && x.PalletCode == item.PalletCode);
+                        // 鍒涘缓浠诲姟
+                        RequestTaskDto task = new RequestTaskDto
+                        {
+                            TaskType = outboundOrder.OrderStatus,
+                            OrderNo = outboundOrder.OrderNo,
+                            MaterielCode = item.MaterielCode,
+                            Position = item.LocationCode,
+                        };
+                        taskDtos.Add(task);
+                    }
+                }
+            }
+            return content.OK("鍑哄簱浠诲姟鐢熸垚鎴愬姛");
+        }
+        catch (Exception ex)
+        {
+            return content.Error(ex.Message);
+        }
+               
+    }
+
+    #endregion 鏍规嵁鍗曟嵁鏄庣粏鐢熸垚鍑哄簱浠诲姟
+
+
+    public async Task<WebResponseContent> AddGroupPlateAsync(GroupPlate groupPlate)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            if (groupPlate == null || groupPlate.OrderNos.IsNullOrEmpty() || groupPlate.palletCode.IsNullOrEmpty())
+            {
+                return content.Error("鍙傛暟閿欒");
+            }
+            var info = await BaseDal.QueryFirstAsync(x => x.PalletCode == groupPlate.palletCode);
+            if (!info.IsNullOrEmpty())
+            {
+                content.Error("璇ユ墭鐩樺凡瀛樺湪缁勭洏");
+            }
+            else
+            {
+                List<DtStockInfoDetail> details = new List<DtStockInfoDetail>();
+                foreach (var item in groupPlate.OrderNos)
+                {
+                    var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.OrderNo == item);
+
+                    if (InboundOrder != null)
+                    {
+                        var x = details.Where(x => x.MaterielCode == InboundOrder.MaterialNo && x.Warehouse == InboundOrder.WarehouseName && x.DrawingNumber == InboundOrder.ProductDrawingNumber && x.DemandClassification == InboundOrder.DemandClassification).FirstOrDefault();
+                        if (x != null)
+                        {
+                            details.Remove(x);
+                            x.MaterielCode = InboundOrder.MaterialNo;
+                            x.MaterielName = InboundOrder.MaterialName;
+                            x.DemandClassification = InboundOrder.DemandClassification;
+                            x.Warehouse = InboundOrder.WarehouseName;
+                            x.OrderNo = InboundOrder.UpperOrderNo;
+                            x.Unit = InboundOrder.Unit;
+                            x.Specs = InboundOrder.Specs;
+                            x.Weight = InboundOrder.Weight;
+                            x.Quantity = x.Quantity + InboundOrder.Quantity;
+                            x.DrawingNumber = InboundOrder.ProductDrawingNumber;
+                            x.Date = InboundOrder.Datetime;
+                            details.Add(x);
+                        }
+                        else
+                        {
+                            DtStockInfoDetail detail = new DtStockInfoDetail()
+                            {
+                                MaterielCode = InboundOrder.MaterialNo,
+                                MaterielName = InboundOrder.MaterialName,
+                                DemandClassification = InboundOrder.DemandClassification,
+                                Warehouse = InboundOrder.WarehouseName,
+                                OrderNo = InboundOrder.UpperOrderNo,
+                                Unit = InboundOrder.Unit,
+                                Specs = InboundOrder.Specs,
+                                Weight = InboundOrder.Weight,
+                                Quantity = InboundOrder.Quantity,
+                                DrawingNumber = InboundOrder.ProductDrawingNumber,
+                                Date = InboundOrder.Datetime,
+                            };
+                            details.Add(detail);
+                        }
+                    }
+                    else
+                    {
+                        return content.Error("鏈壘鍒板叆搴撳崟鎹俊鎭�");
+                    }
+                }
+                DtStockInfo boxing = new DtStockInfo()
+                {
+                    PalletCode = groupPlate.palletCode,
+                    StockStatus = (int)StockStateEmun.缁勭洏鏆傚瓨,
+                    StockInfoDetails = details
+                };
+                await BaseDal.AddDataNavAsync(boxing);
+                content.OK("缁勭洏鎴愬姛");
+            }
+            return content;
+        }
+        catch (Exception ex)
+        {
+            return content.Error(ex.Message);
+        }
+    }
+
+    public async Task<WebResponseContent> DeleteGroupPlateAsync(GroupPlate groupPlate)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            if (groupPlate == null || groupPlate.palletCode.IsNullOrEmpty())
+            {
+                return content.Error("鍙傛暟閿欒");
+            }
+            var stock = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == groupPlate.palletCode && x.StockStatus == (int)StockStateEmun.缁勭洏鏆傚瓨);
+            if (!stock.IsNullOrEmpty())
+            {
+                stock.StockStatus = (int)StockStateEmun.缁勭洏鎾ら攢;
+                DtStockInfo_Hty stockhty = stock.Adapt<DtStockInfo_Hty>();
+                stockhty.ModifyDate = DateTime.Now;
+                await _unitOfWorkManage.UseTranAsync(async () =>
+                {
+                    await BaseDal.Db.DeleteNav<DtStockInfo>(x => x.Id == stock.Id)
+                                            .Include(x => x.StockInfoDetails)
+                                            .ExecuteCommandAsync();
+                    await AddStockHtyAsync(stockhty);
+                });
+                content.OK("瑙g洏鎴愬姛");
+            }
+            else
+            {
+                content.Error("鏈壘鍒扮粍鐩樻暟鎹�");
+            }
+            return content;
+        }
+        catch (Exception ex)
+        {
+            return content.Error(ex.Message);
+        }
+    }
+    private async Task AddStockHtyAsync(DtStockInfo_Hty stockhty)
+    {
+        var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(stockhty).IncludesAllFirstLayer().ExecuteCommandAsync();
+        if (!isStockAdd)
+        {
+            throw new Exception("搴撳瓨鍘嗗彶淇℃伅娣诲姞澶辫触");
+        }
+    }
+
     /// <summary>
     /// 鎵归噺鍒犻櫎
     /// </summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs"
index 6080888..2e84e57 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs"
@@ -63,13 +63,13 @@
                 List<Dt_InboundOrder> inboundOrderUpdate = new List<Dt_InboundOrder>();
                 foreach (var item in ERPPrintChecklist)
                 {
-                    var x = printCheckList.Where(x => x.MaterialNo == item.鏂欏彿 && x.OrderNo == item.鍗曞彿 && x.WarehouseName == item.鍏ュ簱浠撳簱鍚嶇О).FirstOrDefault();
+                    var x = printCheckList.Where(x => x.MaterialNo == item.鏂欏彿 && x.UpperOrderNo == item.鍗曞彿 && x.WarehouseName == item.鍏ュ簱浠撳簱鍚嶇О).FirstOrDefault();
                     if (x == null)
                     {
                         Dt_InboundOrder Print = new Dt_InboundOrder()
                         {
-                            PrintCode = GetOrderPintCode(),
-                            OrderNo = item.鍗曞彿,
+                            OrderNo = GetOrderPintCode(),
+                            UpperOrderNo = item.鍗曞彿,
                             DemandClassification = item.闇�姹傚垎绫�,
                             OrderType = item.鍗曟嵁绫诲瀷,
                             WarehouseName = item.鍏ュ簱浠撳簱鍚嶇О,
@@ -90,10 +90,10 @@
                     }
                     else
                     {
-                        if (x.PrintCode == null || x.PrintCode == "")
+                        if (x.OrderNo == null || x.OrderNo == "")
                         {
-                            x.PrintCode = GetOrderPintCode();
-                            x.OrderNo = item.鍗曞彿;
+                            x.OrderNo = GetOrderPintCode();
+                            x.UpperOrderNo = item.鍗曞彿;
                             x.DemandClassification = item.闇�姹傚垎绫�;
                             x.OrderType = item.鍗曟嵁绫诲瀷;
                             x.WarehouseName = item.鍏ュ簱浠撳簱鍚嶇О;
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 fb047f2..ede4e60 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"
@@ -23,7 +23,9 @@
 using WIDESEA_Core.Enums;
 using WIDESEA_DTO.ERP;
 using WIDESEA_DTO.Location;
+using WIDESEA_DTO.Stock;
 using WIDESEA_DTO.WMS;
+using WIDESEA_IOrderRepository;
 using WIDESEA_IServices;
 using WIDESEA_Model.Models;
 using WIDESEA_Model.Models.Basic;
@@ -49,6 +51,8 @@
     private readonly IDt_AreaInfoRepository _areaInfoRepository; //鍖哄煙
     private readonly IDt_StationManagerRepository _stationManagerRepository;
     private readonly ISys_ConfigService _configService;
+    private readonly IDt_OutboundOrderRepository _outorderRepository;
+    private readonly IDt_OutboundOrderDetailRepository _outorderdetailRepository;
 
     public Dt_TaskService(IDt_TaskRepository BaseDal,
                                 IUnitOfWorkManage unitOfWorkManage,
@@ -62,7 +66,9 @@
                                 IDt_AreaInfoRepository areaInfoRepository,
                                 IStockInfoDetailRepository stockInfoDetailRepository,
                                 IDt_StationManagerRepository stationManagerRepository,
-                                ISys_ConfigService configService) : base(BaseDal)
+                                ISys_ConfigService configService,
+                                IDt_OutboundOrderRepository outorderRepository,
+                                IDt_OutboundOrderDetailRepository outorderdetailRepository) : base(BaseDal)
     {
         _unitOfWorkManage = unitOfWorkManage;
         _stockInfoRepository = stockInfoRepository;
@@ -76,6 +82,8 @@
         _stockInfoDetailRepository = stockInfoDetailRepository;
         _stationManagerRepository = stationManagerRepository;
         _configService = configService;
+        _outorderRepository = outorderRepository;
+        _outorderdetailRepository = outorderdetailRepository;
     }
 
     #region 澶栭儴鎺ュ彛鏂规硶
@@ -181,18 +189,16 @@
         WebResponseContent content = new WebResponseContent();
         try
         {
-            var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
+            var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode && x.StockStatus == (int)StockStateEmun.缁勭洏鏆傚瓨);
             var locationStart = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress);
             var locationEnd = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress);
 
-            if (boxing == null)
+            if (stock == null)
             {
                 return content.Error("鏈壘鍒扮粍鐩樻暟鎹�");
             }
-
-            DtStockInfo stock = CreatePalletStock(task, boxing);
-            DtBoxingInfo_Hty boxingInfo_Hty = boxing.Adapt<DtBoxingInfo_Hty>();
-            boxingInfo_Hty.ModifyDate = DateTime.Now;
+            stock.LocationCode = task.TargetAddress;
+            stock.StockStatus = (int)StockStateEmun.宸插叆搴�;
 
             task.TaskState = (int)TaskInStatusEnum.InFinish;
             var taskHty = task.Adapt<Dt_Task_Hty>();
@@ -202,15 +208,11 @@
 
             await _unitOfWorkManage.UseTranAsync(async () =>
             {
-                await _stockInfoRepository.AddDataNavAsync(stock);
+                await _stockInfoRepository.UpdateDataAsync(stock);
                 await DeleteTaskAsync(task.TaskId);
                 await AddTaskHtyAsync(taskHty);
-                await _boxingInfoRepository.Db.DeleteNav<DtBoxingInfo>(x => x.Id == boxing.Id)
-                                        .Include(x => x.BoxingInfoDetails)
-                                        .ExecuteCommandAsync();
                 UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
                 UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
-                await AddBoxingHtyAsync(boxingInfo_Hty);
             });
             content.OK("鍏ュ簱瀹屾垚");
         }
@@ -370,8 +372,8 @@
         WebResponseContent content = new WebResponseContent();
         try
         {
-            var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode);
-            if (boxingInfo == null)
+            var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode && x.StockStatus == (int)StockStateEmun.缁勭洏鏆傚瓨);
+            if (stock == null)
             {
                 return content.Error("鎵樼洏淇℃伅涓嶅瓨鍦紝璇风‘璁ゆ墭鐩樺凡缁勭洏鎴愬姛");
             }
@@ -399,7 +401,7 @@
                 switch (taskDto.AreaId)
                 {
                     case 1:
-                        return await InboundStakerArea(taskDto, StartAddress, await GetEmptyLocation("SC1"));
+                        return await InboundStakerArea(taskDto, StartAddress);
                     case 2:
                     case 3:
                     case 4:
@@ -418,7 +420,7 @@
                     switch (location.AreaId)
                     {
                         case 1:
-                            return await InboundStakerArea(taskDto, StartAddress, location);
+                            return await InboundStakerArea(taskDto, StartAddress);
                         case 2:
                         case 3:
                         case 4:
@@ -445,22 +447,18 @@
         }
     }
 
-    public async Task<WebResponseContent> InboundStakerArea(RequestTaskDto taskDto,DtLocationInfo StartAddress, DtLocationInfo location)
+    public async Task<WebResponseContent> InboundStakerArea(RequestTaskDto taskDto,DtLocationInfo StartAddress)
     {
         WebResponseContent content = new WebResponseContent();
         try
         {
             var station = _stationManagerRepository.QueryFirst(x => x.stationType == 1 && x.Roadway == "SC1");
 
-            if (location == null)
-            {
-                return content.Error("缁堢偣鍖哄煙鏈壘鍒扮┖闂插簱浣�");
-            }
             Dt_Task taskNew = new Dt_Task
             {
                 Grade = 1,
                 Roadway = "SC1",
-                TargetAddress = location.LocationCode,
+                TargetAddress = "SC1",
                 Dispatchertime = DateTime.Now,
                 MaterialNo = "",
                 NextAddress = station.stationChildCode,
@@ -481,10 +479,8 @@
             BaseDal.AddData(taskNew);
 
             UpdateLocationStatus(StartAddress, LocationEnum.InStockDisable, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
-            UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
+            //UpdateLocationStatus(location, LocationEnum.Lock, taskNew.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound);
             
-            
-
             //return content.OK();
             return content = await SendWCSTask(taskDTO);
         }
@@ -1850,29 +1846,6 @@
         }
     }
 
-    private DtStockInfo CreatePalletStock(Dt_Task task, DtBoxingInfo boxing)
-    {
-        var loation = _locationRepository.QueryFirst(x => x.RoadwayNo == task.Roadway && x.LocationCode == task.TargetAddress);
-        if (loation == null)
-            throw new Exception("鏈壘鍒板搴斾綅缃俊鎭�");
-
-
-        var boxDetail = boxing.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>();
-        boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.宸插叆搴�; });
-        var stock = new DtStockInfo()
-        {
-            PalletCode = task.PalletCode,
-            LocationCode = task.TargetAddress,
-            CreateDate = DateTime.Now,
-            Creater = "system",
-            IsFull = boxing.IsFull,
-            StockInfoDetails = boxDetail,
-        };
-
-        stock.StockStatus = 1;
-
-        return stock;
-    }
 
     #endregion 浠诲姟璇锋眰鏂规硶
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/BoxingInfoController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/BoxingInfoController.cs"
index 0836c6a..ecb9508 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/BoxingInfoController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/BoxingInfoController.cs"
@@ -9,17 +9,4 @@
     public BoxingInfoController(IBoxingInfoService service) : base(service)
     {
     }
-
-    // POST api/<BoxingInfoController>
-    [HttpPost,HttpGet, Route("AddBoxingInfo"), AllowAnonymous]
-    public Task<WebResponseContent> AddBoxingInfoAsync([FromBody] AddBoxingDto boxingInfo)
-    {
-        return Service.AddBoxingInfoAsync(boxingInfo);
-    }
-
-    [HttpPost, HttpGet, Route("DeleteBoxingInfoAsync"), AllowAnonymous]
-    public Task<WebResponseContent> DeleteBoxingInfoAsync([FromBody] AddBoxingDto boxingInfo)
-    {
-        return Service.DeleteBoxingInfoAsync(boxingInfo);
-    }
 }
\ 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/Basic/StockInfoController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/StockInfoController.cs"
index 101e060..3881f84 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/StockInfoController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/StockInfoController.cs"
@@ -1,4 +1,6 @@
-锘縰sing WIDESEA_IStorageBasicService;
+锘縰sing WIDESEA_DTO.Basic;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStorageBasicService;
 
 namespace WIDESEA_WMSServer.Controllers;
 
@@ -8,6 +10,45 @@
 {
     public StockInfoController(IStockInfoService service) : base(service)
     {
+
+    }
+    /// <summary>
+    /// 鏍规嵁鐗╂枡缂栫爜鑾峰彇搴撳瓨鍙敤閲忚鍥�
+    /// </summary>
+    /// <param name="materielCode"></param>
+    /// <returns></returns>
+    [HttpPost, HttpGet, Route("GetStockSelectViews"), AllowAnonymous]
+    public List<StockSelectViewDTO> GetStockSelectViews(string materielCode)
+    {
+        return Service.GetStockSelectViews(materielCode);
+    }
+
+    /// <summary>
+    /// 缁勭洏
+    /// </summary>
+    /// <param name="groupPlate"></param>
+    /// <returns></returns>
+    [HttpPost, HttpGet, Route("AddGroupPlateAsync"), AllowAnonymous]
+    public Task<WebResponseContent> AddGroupPlateAsync([FromBody] GroupPlate groupPlate)
+    {
+        return Service.AddGroupPlateAsync(groupPlate);
+    }
+
+    /// <summary>
+    /// 瑙g洏
+    /// </summary>
+    /// <param name="groupPlate"></param>
+    /// <returns></returns>
+    [HttpPost, HttpGet, Route("DeleteGroupPlateAsync"), AllowAnonymous]
+    public Task<WebResponseContent> DeleteGroupPlateAsync([FromBody] GroupPlate groupPlate)
+    {
+        return Service.DeleteGroupPlateAsync(groupPlate);
+    }
+
+    [HttpPost, HttpGet, Route("GenerateOutboundTask"), AllowAnonymous]
+    public WebResponseContent GenerateOutboundTask([FromBody] GenerateOutTaskDto requestOut)
+    {
+        return Service.GenerateOutboundTask(requestOut);
     }
 
 }
\ 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/Order/OutboundOrderController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Order/OutboundOrderController.cs"
new file mode 100644
index 0000000..0e01de4
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Order/OutboundOrderController.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_BusinessServices;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBusinessServices;
+using WIDESEA_IOrderServices;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Basic;
+using WIDESEA_Model.Models.Order;
+using WIDESEAWCS_BasicInfoService;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    [Route("api/OutboundOrder")]
+    [ApiController]
+    public class OutboundOrderController : ApiBaseController<IDt_OutboundOrderService, Dt_OutboundOrder>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public OutboundOrderController(IDt_OutboundOrderService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Order/OutboundOrderDetailController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Order/OutboundOrderDetailController.cs"
new file mode 100644
index 0000000..521b9a1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Order/OutboundOrderDetailController.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_BusinessServices;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBusinessServices;
+using WIDESEA_IOrderServices;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Basic;
+using WIDESEA_Model.Models.Order;
+using WIDESEAWCS_BasicInfoService;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    [Route("api/OutboundOrderDetail")]
+    [ApiController]
+    public class OutboundOrderDetailController : ApiBaseController<IDt_OutboundOrderDetailService, Dt_OutboundOrderDetail>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public OutboundOrderDetailController(IDt_OutboundOrderDetailService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+
+    }
+}
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 aab3422..59fa653 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"
@@ -486,6 +486,96 @@
                         result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                     }
                     break;
+
+                case "OrderStateEmun":
+                    {
+                        List<object> data = new List<object>();
+
+                        #region OrderStateEmun
+                        {
+                            Type type = typeof(OrderStateEmun);
+                            List<int> enums = Enum.GetValues(typeof(OrderStateEmun)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(OrderStateEmun).GetField(((OrderStateEmun)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 "OrderTypeEmun":
+                    {
+                        List<object> data = new List<object>();
+
+                        #region OrderTypeEmun
+                        {
+                            Type type = typeof(OrderTypeEmun);
+                            List<int> enums = Enum.GetValues(typeof(OrderTypeEmun)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(OrderTypeEmun).GetField(((OrderTypeEmun)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 "OrderCreateTypeEmun":
+                    {
+                        List<object> data = new List<object>();
+
+                        #region OrderCreateTypeEmun
+                        {
+                            Type type = typeof(OrderCreateTypeEmun);
+                            List<int> enums = Enum.GetValues(typeof(OrderCreateTypeEmun)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(OrderCreateTypeEmun).GetField(((OrderCreateTypeEmun)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;
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 fc84b76..61b240c 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,7 +5,7 @@
       "Microsoft.AspNetCore": "Warning"
     }
   },
-  "dics": "taskType,taskState,operateTypeEnum,StatusChangeType,LocationState,StockStateEmun,EnableEnum",
+  "dics": "taskType,taskState,operateTypeEnum,StatusChangeType,LocationState,StockStateEmun,EnableEnum,OrderStateEmun,OrderTypeEmun,OrderCreateTypeEmun",
   "AllowedHosts": "*",
   "urls": "http://*:5000",
   "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue

--
Gitblit v1.9.3