From ea9bdf217e8202a5fa475262dba1792decb05bcb Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期五, 13 九月 2024 15:36:00 +0800
Subject: [PATCH] 1

---
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8d854c1d-3953-4118-905c-6e5e5a843136.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs                                  |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs                                       |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs                                    |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs                                          |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs                                      |   26 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs                                   |   40 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs                                                      |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs                         |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj                            |    3 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3dfde05d-a5a2-4fcc-8f16-01b7d188fff6.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IWarehouseRepository.cs                                  |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs                                          |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs                                      |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs                               |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs                                 |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs                            |  204 ++++++++
 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue                                              |    9 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs                                        |   14 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                                          |    5 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs                                 |    8 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs                              |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs                                        |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs                      |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                                     |   39 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs                              |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs                                |    8 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs                                        |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs                                   |    3 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d8e0fc94-3eb1-4d2c-ac54-1343a3bbf1a6.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs                          |   12 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoRepository/ITaskRepository.cs                                    |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs                                     |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs                                             |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj                            |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs                       |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/RoadwayInfoService.cs                                        |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordSetvice.cs                        |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaInfoRepository.cs                                   |    8 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordSetvice.cs                      |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs                                        |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs                                     |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs                                    |    2 
 代码管理/WMS/WIDESEA_WMSClient/src/api/http.js                                                                   |    2 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue                                  |   92 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IRoadwayInfoService.cs                                      |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaInfoService.cs                                           |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ILocationInfoRepository.cs                               |   28 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs                                |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs                                          |    5 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs                                      |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs                             |  131 ++++-
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs                                        |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs                             |  229 +++++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs                                                   |   30 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs                                        |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs                                        |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs                                          |    3 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue                                     |   17 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaInfoService.cs                                         |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs                                       |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs                                    |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                            |  291 ------------
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs                                  |    3 
 /dev/null                                                                                                    |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs                           |    9 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs           |   12 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs                             |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs                                          |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs                                          |    3 
 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue                                        |    7 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs                        |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs                                          |    2 
 73 files changed, 969 insertions(+), 377 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/api/http.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/api/http.js"
index b885aed..bd86d8b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/api/http.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/api/http.js"
@@ -19,7 +19,7 @@
 }
 
 else if (process.env.NODE_ENV == 'production') {
-    axios.defaults.baseURL = 'http://127.0.0.1:8098/';
+    axios.defaults.baseURL = 'http://115.159.85.185:9291/';
 }
 if (!axios.defaults.baseURL.endsWith('/')) {
     axios.defaults.baseURL+="/";
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue"
index 39cd9fe..16c7215 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue"
@@ -78,8 +78,12 @@
         </el-table>
       </div>
       <template #footer>
-        <el-button type="primary" size="small" @click="outbound">鐩存帴鍑哄簱</el-button>
-        <el-button type="primary" size="small" @click="lockStock">閿佸畾搴撳瓨</el-button>
+        <el-button type="primary" size="small" @click="outbound"
+          >鐩存帴鍑哄簱</el-button
+        >
+        <el-button type="primary" size="small" @click="lockStock"
+          >閿佸畾搴撳瓨</el-button
+        >
         <el-button type="danger" size="small" @click="showDetialBox = false"
           >鍏抽棴</el-button
         >
@@ -140,6 +144,13 @@
       this.originalQuantity = this.row.lockQuantity;
       this.selectionSum = this.row.lockQuantity;
       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";
+      }
     },
     lockStock() {
       this.http
@@ -157,7 +168,7 @@
           });
         });
     },
-    outbound(){
+    outbound() {
       this.http
         .post(
           "api/Task/GenerateOutboundTask?id=" + this.row.id,
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
index b47fd63..da17d3b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
@@ -8,15 +8,36 @@
       title="鍗曟嵁鏄庣粏淇℃伅"
     >
       <div class="box-head">
-        <!-- <el-row>
-          <el-col :span="24">
-            <span>宸查�変腑 {{ true ? 1 : 0 }} 椤�</span>
-            <el-divider direction="vertical"></el-divider>
-            <el-button type="text" size="medium"
-              ><i class="el-icon-edit">鍏抽棴</i
-            ></el-button>
-          </el-col>
-        </el-row> -->
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="16">
+              <span>宸查�変腑 {{ selection.length }} 椤�</span>
+            </el-col>
+            <el-col :span="8">
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px"
+                @click="lockstocks"
+                >閿佸畾搴撳瓨</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="outbound"
+                >鐩存帴鍑哄簱</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="getData"
+                >鍒锋柊</el-link
+              ></el-col
+            >
+          </el-row>
+        </el-alert>
       </div>
       <div class="box-table" style="margin-top: 1%">
         <el-table
@@ -26,7 +47,10 @@
           highlight-current-row
           @current-change="handleCurrentChange"
           height="500px"
+          @row-click="handleRowClick"
+          @selection-change="handleSelectionChange"
         >
+          <el-table-column type="selection" width="55"> </el-table-column>
           <el-table-column
             label="搴忓彿"
             type="index"
@@ -79,6 +103,7 @@
       showDetialBox: false,
       flag: false,
       currentRow: null,
+      selection: [],
       tableData: [],
       tableColumns: [
         {
@@ -247,12 +272,43 @@
     tableButtonClick(row, column) {
       if (column.prop == "assignStock") {
         this.$refs.child.open(row);
-      }else{
+      } else {
         this.$refs.selectedStock.open(row);
       }
     },
-    assignStock() {},
-    viewDetail() {},
+    lockstocks() {
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+      this.http
+        .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    outbound() {
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+
+      this.http
+        .post("api/Task/GenerateOutboundTasks", keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
     setCurrent(row) {
       this.$refs.singleTable.setCurrentRow(row);
     },
@@ -261,7 +317,11 @@
     },
     getButtonEnable(propName, row) {
       if (propName == "assignStock") {
-        if (row.orderDetailStatus !== 0 && row.orderDetailStatus !== 60 && row.orderDetailStatus !== 70) {
+        if (
+          row.orderDetailStatus !== 0 &&
+          row.orderDetailStatus !== 60 &&
+          row.orderDetailStatus !== 70
+        ) {
           return true;
         } else {
           return false;
@@ -275,6 +335,12 @@
       }
       fun(this);
     },
+    handleRowClick(row) {
+      this.$refs.singleTable.toggleRowSelection(row);
+    },
+    handleSelectionChange(val) {
+      this.selection = val;
+    },
   },
 };
 </script>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
index 5712ece..0f7617f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
@@ -29,6 +29,7 @@
     const editFormFields = ref({
       orderType: "",
       upperOrderNo: "",
+      orderStatus: "",
       remark: "",
     });
     const editFormOptions = ref([
@@ -47,6 +48,14 @@
           type: "string",
         },
         {
+          title: "鍗曟嵁鐘舵��",
+          field: "orderStatus",
+          type: "select",
+          dataKey: "inboundState",
+          data: [],
+          readonly: true,
+        },
+        {
           title: "澶囨敞",
           field: "remark",
           type: "textarea",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue"
index 1425acd..e992c4c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue"
@@ -104,7 +104,6 @@
           width: 90,
           hidden: true,
           readonly: true,
-          require: true,
           align: "left",
         },
         {
@@ -121,8 +120,6 @@
           type: "string",
           width: 150,
           align: "left",
-          edit: { type: "string" },
-          required: true,
         },
         {
           field: "materielName",
@@ -137,8 +134,6 @@
           type: "decimal",
           width: 90,
           align: "left",
-          edit: { type: "string" },
-          required: true,
         },
         {
           field: "orderQuantity",
@@ -146,8 +141,6 @@
           type: "string",
           width: 90,
           align: "left",
-          edit: { type: "number" },
-          required: true,
         },
         {
           field: "lockQuantity",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3dfde05d-a5a2-4fcc-8f16-01b7d188fff6.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3dfde05d-a5a2-4fcc-8f16-01b7d188fff6.vsidx"
new file mode 100644
index 0000000..53f1235
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3dfde05d-a5a2-4fcc-8f16-01b7d188fff6.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8d854c1d-3953-4118-905c-6e5e5a843136.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8d854c1d-3953-4118-905c-6e5e5a843136.vsidx"
new file mode 100644
index 0000000..8d99cd0
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8d854c1d-3953-4118-905c-6e5e5a843136.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8f68f6b2-80bb-4d2f-ab81-67151e8aeeb3.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8f68f6b2-80bb-4d2f-ab81-67151e8aeeb3.vsidx"
deleted file mode 100644
index cffec00..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8f68f6b2-80bb-4d2f-ab81-67151e8aeeb3.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c25c0959-7ed5-454b-8c7e-6d209867e5c4.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c25c0959-7ed5-454b-8c7e-6d209867e5c4.vsidx"
deleted file mode 100644
index aa489d6..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c25c0959-7ed5-454b-8c7e-6d209867e5c4.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d8e0fc94-3eb1-4d2c-ac54-1343a3bbf1a6.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d8e0fc94-3eb1-4d2c-ac54-1343a3bbf1a6.vsidx"
new file mode 100644
index 0000000..0420c48
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d8e0fc94-3eb1-4d2c-ac54-1343a3bbf1a6.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f32a6908-78df-435f-ab6a-bcc81d7efe7e.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f32a6908-78df-435f-ab6a-bcc81d7efe7e.vsidx"
deleted file mode 100644
index d81d3f3..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f32a6908-78df-435f-ab6a-bcc81d7efe7e.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaInfoService.cs"
index 7f7f36f..a6aedaa 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaInfoService.cs"
@@ -15,5 +15,7 @@
         public AreaInfoService(IAreaInfoRepository BaseDal) : base(BaseDal)
         {
         }
+
+        public IAreaInfoRepository Repository => BaseDal;
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
index 81bd0f6..5b0b8d9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
@@ -30,6 +30,8 @@
             { nameof(Dt_LocationInfo.Row), OrderByType.Asc },
         };
 
+        public ILocationInfoRepository Repository => BaseDal;
+
         public LocationInfoService(ILocationInfoRepository BaseDal, IAreaInfoRepository areaInfoRepository, IWarehouseRepository warehouseRepository, IRoadwayInfoRepository roadwayInfoRepository) : base(BaseDal)
         {
             _areaInfoRepository = areaInfoRepository;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
index e55d9bf..fc08d5c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielInfoService.cs"
@@ -16,6 +16,8 @@
         {
         }
 
+        public IMaterielInfoRepository Repository => BaseDal;
+
         public bool ExsitMateriel(string materielCode)
         {
             return BaseDal.QueryFirst(x => x.MaterielCode == materielCode) != null;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/RoadwayInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/RoadwayInfoService.cs"
index 72b53b8..98016c2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/RoadwayInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/RoadwayInfoService.cs"
@@ -15,5 +15,7 @@
         public RoadwayInfoService(IRoadwayInfoRepository BaseDal) : base(BaseDal)
         {
         }
+
+        public IRoadwayInfoRepository Repository => BaseDal;
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs"
index 1606e4f..1923d9f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WarehouseService.cs"
@@ -15,5 +15,7 @@
         public WarehouseService(IWarehouseRepository BaseDal) : base(BaseDal)
         {
         }
+
+        public IWarehouseRepository Repository => BaseDal;
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs"
index 330bb8b..31f4763 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/AOP/SqlSugarAop.cs"
@@ -46,21 +46,25 @@
                 SequenceAttirbute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttirbute>();
                 if (sequenceAttirbute != null)
                 {
-                    SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig
+                    if (propertyInfo.GetValue(entityInfo.EntityValue)?.ObjToInt() <= 0)
                     {
-                        ConfigId = MainDb.CurrentDbConnId,
-                        ConnectionString = DBContext.GetMainConnectionDb().Connection,
-                        IsAutoCloseConnection = true,
-                        DbType = MainDb.DbType,
-                    });
-                    int count = sugarClient.Ado.GetScalar($"SELECT COUNT(*) FROM sys.sequences WHERE name = '{sequenceAttirbute.SequenceName}'").ObjToInt();
-                    if (count == 0)
-                    {
-                        string sql = $"CREATE SEQUENCE {sequenceAttirbute.SequenceName} AS [int] START WITH {sequenceAttirbute.StartWith} INCREMENT BY {sequenceAttirbute.Increment} MINVALUE {sequenceAttirbute.SeqMinValue} MAXVALUE {sequenceAttirbute.SeqMaxValue} {(sequenceAttirbute.IsCycle ? "CYCLE" : "")} CACHE";
-                        sugarClient.Ado.ExecuteCommand(sql);
+                        SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig
+                        {
+                            ConfigId = MainDb.CurrentDbConnId,
+                            ConnectionString = DBContext.GetMainConnectionDb().Connection,
+                            IsAutoCloseConnection = true,
+                            DbType = MainDb.DbType,
+                        });
+                        int count = sugarClient.Ado.GetScalar($"SELECT COUNT(*) FROM sys.sequences WHERE name = '{sequenceAttirbute.SequenceName}'").ObjToInt();
+                        if (count == 0)
+                        {
+                            string sql = $"CREATE SEQUENCE {sequenceAttirbute.SequenceName} AS [int] START WITH {sequenceAttirbute.StartWith} INCREMENT BY {sequenceAttirbute.Increment} MINVALUE {sequenceAttirbute.SeqMinValue} MAXVALUE {sequenceAttirbute.SeqMaxValue} {(sequenceAttirbute.IsCycle ? "CYCLE" : "")} CACHE";
+                            sugarClient.Ado.ExecuteCommand(sql);
+                        }
+                        int seq = sugarClient.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceAttirbute.SequenceName}").ObjToInt();
+                        propertyInfo.SetValue(entityInfo.EntityValue, seq, null);
                     }
-                    int seq = sugarClient.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceAttirbute.SequenceName}").ObjToInt();
-                    propertyInfo.SetValue(entityInfo.EntityValue, seq, null);
+                  
                 }
             }
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs"
index 763acef..a5cb22c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/IService.cs"
@@ -8,7 +8,7 @@
 
 namespace WIDESEA_Core.BaseServices
 {
-    public interface IService<TEntity> : IDependency where TEntity : class
+    public interface IService<TEntity> : IDependency where TEntity : class, new()
     {
         ISqlSugarClient Db { get; }
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
index 707c213..610c767 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
@@ -59,7 +59,6 @@
             return pageGridData;
         }
 
-
         protected string ValidatePageOptions(PageDataOptions options)
         {
             options = options ?? new PageDataOptions();
@@ -358,7 +357,7 @@
                 {
                     return WebResponseContent.Instance.Error("浼犲弬閿欒,鍙傛暟涓嶈兘涓虹┖");
                 }
-                string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, false, TProperties, list?.ToArray());
+                string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, false, TProperties, list?.ToArray() ?? null);
 
                 if (!string.IsNullOrEmpty(validResult))
                 {
@@ -376,7 +375,7 @@
                 List<string> listCol = new List<string>();
                 foreach (var item in saveModel.MainData)
                 {
-                    PropertyInfo propertyInfo = typeof(TEntity).GetProperty(item.Key);
+                    PropertyInfo? propertyInfo = typeof(TEntity).GetProperty(item.Key);
                     if (propertyInfo == null)
                     {
                         propertyInfo = typeof(TEntity).GetProperty(item.Key.FirstLetterToLower());
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
index 2683b7b..7bce347 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
@@ -146,7 +146,7 @@
         /// <param name="removeNotContains">绉婚櫎涓嶅瓨鍦ㄥ瓧娈�</param>
         /// <param name="removerKey">绉婚櫎涓婚敭</param>
         /// <returns></returns>
-        public static string ValidateDicInEntity(this Type typeinfo, Dictionary<string, object> dic, bool removerKey, PropertyInfo[] propertyInfo, string[] ignoreFields = null)
+        public static string ValidateDicInEntity(this Type typeinfo, Dictionary<string, object> dic, bool removerKey, PropertyInfo[] propertyInfo, string[]? ignoreFields = null)
         {
             if (dic == null || dic.Count == 0) { return "鍙傛暟鏃犳晥"; }
 
@@ -168,15 +168,23 @@
 
             foreach (PropertyInfo property in propertyInfo)
             {
-                SugarColumn sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
                 if (sugarColumn == null)
+                {
+                    Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                    if(navigate != null)
+                    {
+                        continue;
+                    }
                     return "璇烽厤缃甋ugarColumn灞炴��";
+                }
+                    
                 //蹇界暐涓庝富閿殑瀛楁涓嶅仛楠岃瘉
                 if (property.Name == keyName.FirstLetterToUpper() || (ignoreFields != null && ignoreFields.Contains(property.Name)) || sugarColumn.IsOnlyIgnoreInsert || sugarColumn.IsOnlyIgnoreUpdate || sugarColumn.IsIgnore)
                     continue;
 
                 //涓嶅湪缂栬緫涓殑鍒楋紝鏄惁涔熻蹇呭~
-                if (!dic.ContainsKey(property.Name.FirstLetterToLower()))
+                if (!dic.ContainsKey(property.Name.FirstLetterToLower()) /*&& !dic.ContainsKey(property.Name.FirstLetterToUpper())*/)
                 {
                     if (!sugarColumn.IsNullable)
                     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaInfoRepository.cs"
index 021f418..fa93ee3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaInfoRepository.cs"
@@ -10,8 +10,16 @@
 {
     public interface IAreaInfoRepository : IRepository<Dt_AreaInfo>
     {
+        /// <summary>
+        /// 鍚敤鐨勫尯鍩熶富閿泦鍚�
+        /// </summary>
         public List<int> EnableAreaIds { get; }
 
+        /// <summary>
+        /// 浠撳簱閲岄潰鍚姩鐨勫尯鍩熶富閿泦鍚�
+        /// </summary>
+        /// <param name="enableWarehouseIds">浠撳簱涓婚敭闆嗗悎</param>
+        /// <returns></returns>
         List<int> GetEnableAreaIds(List<int> enableWarehouseIds);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ILocationInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ILocationInfoRepository.cs"
index 922a94a..f3b6d7b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ILocationInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ILocationInfoRepository.cs"
@@ -12,14 +12,42 @@
 {
     public interface ILocationInfoRepository : IRepository<Dt_LocationInfo>
     {
+        /// <summary>
+        /// 鏍规嵁宸烽亾鑾峰彇鎵�鏈変竴娣便�佷簩娣卞搴旂殑涓�缁勮揣浣嶆暟鎹泦鍚�
+        /// </summary>
+        /// <param name="roadway">宸烽亾鍙�</param>
+        /// <returns></returns>
         List<LocationGroupDTO> GetAllLocationGroups(string roadway);
 
+        /// <summary>
+        /// 鏍规嵁宸烽亾銆佷竴娣变綅璐т綅鐘舵�併�佷簩娣变綅璐т綅鐘舵�佽幏鍙栧搴旂殑涓�缁勮揣浣嶆暟鎹泦鍚�
+        /// </summary>
+        /// <param name="roadway">宸烽亾鍙�</param>
+        /// <param name="locationAStatus">涓�娣变綅璐т綅鐘舵��</param>
+        /// <param name="locationBStatus">浜屾繁浣嶈揣浣嶇姸鎬�</param>
+        /// <returns></returns>
         List<LocationGroupDTO> GetLocationGroups(string roadway, LocationStatusEnum locationAStatus, LocationStatusEnum locationBStatus);
 
+        /// <summary>
+        /// 鏍规嵁宸烽亾鍙烽泦鍚堛�佸尯鍩熼泦鍚堣幏鍙栧彲鍑哄簱鐨勮揣浣嶇紪鍙烽泦鍚�
+        /// </summary>
+        /// <param name="roadways">宸烽亾鍙烽泦鍚�</param>
+        /// <param name="areaIds">鍖哄煙闆嗗悎</param>
+        /// <returns></returns>
         List<string> GetCanOutLocationCodes(List<string> roadways, List<int> areaIds);
 
+        /// <summary>
+        /// 鏍规嵁璐т綅缂栧彿闆嗗悎鑾峰彇璐т綅瀹炰綋闆嗗悎
+        /// </summary>
+        /// <param name="locationCodes">璐т綅缂栧彿闆嗗悎</param>
+        /// <returns></returns>
         List<Dt_LocationInfo> GetLocationInfos(List<string> locationCodes);
 
+        /// <summary>
+        /// 鎵归噺鏇存柊璐т綅鐘舵��
+        /// </summary>
+        /// <param name="locationInfos">璐т綅瀹炰綋闆嗗悎</param>
+        /// <param name="locationStatus">璐т綅鐘舵��</param>
         void UpdateLocationStatus(List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IWarehouseRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IWarehouseRepository.cs"
index 8b0391b..508ec8f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IWarehouseRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IWarehouseRepository.cs"
@@ -10,6 +10,9 @@
 {
     public interface IWarehouseRepository : IRepository<Dt_Warehouse>
     {
+        /// <summary>
+        /// 鍚敤鐨勪粨搴撲富閿泦鍚�
+        /// </summary>
         public List<int> EnableWarehouseIds { get; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaInfoService.cs"
index 594c049..b470d1b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaInfoService.cs"
@@ -4,11 +4,13 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IBasicService
 {
     public interface IAreaInfoService : IService<Dt_AreaInfo>
     {
+       IAreaInfoRepository Repository { get; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
index aff94e6..d003d8c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
@@ -6,12 +6,15 @@
 using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_DTO.Basic;
+using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IBasicService
 {
     public interface ILocationInfoService : IService<Dt_LocationInfo>
     {
+        ILocationInfoRepository Repository { get; }
+
         WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO);
 
         Dt_LocationInfo AdjacentDepthLocation(string locationCode);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs"
index c407cc8..709bdf7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs"
@@ -4,12 +4,15 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IBasicService
 {
     public interface IMaterielInfoService : IService<Dt_MaterielInfo>
     {
+        IMaterielInfoRepository Repository { get; }
+
         bool ExsitMateriel(string materielCode);
 
         bool ExsitMateriels(List<string> materielCodes);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IRoadwayInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IRoadwayInfoService.cs"
index 5ae2a46..d68bef9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IRoadwayInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IRoadwayInfoService.cs"
@@ -4,11 +4,13 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IBasicService
 {
     public interface IRoadwayInfoService : IService<Dt_RoadwayInfo>
     {
+        IRoadwayInfoRepository Repository { get; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs"
index a5fdcac..79d4145 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs"
@@ -4,11 +4,13 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IBasicService
 {
     public interface IWarehouseService : IService<Dt_Warehouse>
     {
+        IWarehouseRepository Repository { get; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs"
index 928f6a2..e25fd55 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs"
@@ -4,12 +4,15 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IInboundRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IInboundService
 {
     public interface IInboundOrderDetailService : IService<Dt_InboundOrderDetail>
     {
+        IInboundOrderDetailRepository Repository { get; }
+
         List<Dt_InboundOrderDetail> UpdateReceiptQuantity(List<Dt_InboundOrderDetail> inboundOrderDetails, decimal receiptQuantity);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
index f3715ed..e27698e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
@@ -6,12 +6,15 @@
 using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IInboundService
 {
     public interface IInboundOrderService : IService<Dt_InboundOrder>
     {
+        IInboundOrderRepository Repository { get; }
+
         WebResponseContent AddInboundOrder(InboundOrderAddDTO orderAddDTO);
 
         WebResponseContent MaterielGroup(MaterielGroupDTO materielGroupDTO);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs"
index ceca076..eac800f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs"
@@ -4,14 +4,20 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_IOutboundRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IOutboundService
 {
     public interface IOutStockLockInfoService : IService<Dt_OutStockLockInfo>
     {
+        IOutStockLockInfoRepository Repository { get; }
+
         List<Dt_OutStockLockInfo> GetOutStockLockInfos(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, List<Dt_StockInfo> outStocks, int? taskNum = null);
 
         List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId);
+
+        List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId, OutStockStatus outStockStatus);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs"
index c88ae7b..c72e63f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs"
@@ -8,19 +8,24 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
 using WIDESEA_DTO.Stock;
+using WIDESEA_IOutboundRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IOutboundService
 {
     public interface IOutboundOrderDetailService : IService<Dt_OutboundOrderDetail>
     {
+        IOutboundOrderDetailRepository Repository { get; }
+
         WebResponseContent LockOutboundStock(int orderDetailId);
 
-        (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
+        (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(Dt_OutboundOrderDetail outboundOrderDetail, List<StockSelectViewDTO> stockSelectViews);
 
         WebResponseContent LockOutboundStock(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
 
-        WebResponseContent LockOutboundStockDataUpdate(List<Dt_StockInfo> stockInfos, Dt_OutboundOrderDetail outboundOrderDetail, List<Dt_OutStockLockInfo> outStockLockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock);
+        WebResponseContent LockOutboundStock(int[] keys);
+
+        WebResponseContent LockOutboundStockDataUpdate(List<Dt_StockInfo> stockInfos, List<Dt_OutboundOrderDetail> outboundOrderDetails, List<Dt_OutStockLockInfo> outStockLockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null);
 
         WebResponseContent RevokeLockOutboundStock(int orderDetailId);
     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
index 0725279..49aadf2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
@@ -6,12 +6,15 @@
 using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_DTO.Outbound;
+using WIDESEA_IOutboundRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IOutboundService
 {
     public interface IOutboundOrderService : IService<Dt_OutboundOrder>
     {
+        IOutboundOrderRepository Repository { get; }
+
         WebResponseContent AddOutboundOrder(OutboundOrderAddDTO orderAddDTO);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordSetvice.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordSetvice.cs"
index b53b873..1263804 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordSetvice.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordSetvice.cs"
@@ -4,12 +4,15 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IRecordRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IRecordService
 {
     public interface ILocationStatusChangeRecordSetvice : IService<Dt_LocationStatusChangeRecord>
     {
+        ILocationStatusChangeRecordRepository Repository { get; }
+
         void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, int lastStatus, int changeType, string orderNo, int? taskNum);
 
         void AddLocationStatusChangeRecord(List<Dt_LocationInfo> locationInfos, int newStatus, int changeType, string? orderNo, List<int>? taskNums);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs"
index acd6952..8fca34b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IStockQuantityChangeRecordService.cs"
@@ -5,12 +5,15 @@
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
+using WIDESEA_IRecordRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IRecordService
 {
     public interface IStockQuantityChangeRecordService : IService<Dt_StockQuantityChangeRecord>
     {
+        IStockQuantityChangeRecordRepository Repository { get; }
+
         void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> stockInfoDetails, decimal beforeQuantity, decimal totalQuantity, StockChangeType changeType);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
index cb23e74..af8d936 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
@@ -4,12 +4,15 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_IStockRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IStockService
 {
     public interface IStockInfoDetailService : IService<Dt_StockInfoDetail>
     {
+        IStockInfoDetailRepository Repository { get; }
+
         bool ExistSerialNumber(string SerialNumber);
 
         bool ExistSerialNumbers(List<string> SerialNumbers);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
index c3ebddd..823df49 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
@@ -5,12 +5,15 @@
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_DTO.Stock;
+using WIDESEA_IStockRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_IStockService
 {
     public interface IStockInfoService : IService<Dt_StockInfo>
     {
+        IStockInfoRepository Repository { get; }
+
         Dt_StockInfo? GetStockByPalletCode(string palletCode);
 
         void AddMaterielGroup(Dt_StockInfo stockInfo);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs"
index 4da7e8d..1299a5d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryListService.cs"
@@ -4,11 +4,13 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_ISystemRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_ISystemService
 {
     public interface ISys_DictionaryListService : IService<Sys_DictionaryList>
     {
+        ISys_DictionaryListRepository Repository { get; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs"
index 1aeff18..4696d74 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_DictionaryService.cs"
@@ -5,12 +5,15 @@
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_DTO.System;
+using WIDESEA_ISystemRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_ISystemService
 {
     public interface ISys_DictionaryService : IService<Sys_Dictionary>
     {
+        ISys_DictionaryRepository Repository { get; }
+
         List<VueDictionaryDTO> GetVueDictionary(string[] dicNos);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs"
index 3de860e..9bc3c84 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_MenuService.cs"
@@ -6,12 +6,15 @@
 using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_DTO.System;
+using WIDESEA_ISystemRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_ISystemService
 {
     public interface ISys_MenuService : IService<Sys_Menu>
     {
+        ISys_MenuRepository Repository { get; }
+
         object GetCurrentMenuActionList();
 
         List<MenuDTO> GetUserMenuList(int roleId);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs"
index f8248ce..43ead43 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleAuthService.cs"
@@ -4,11 +4,13 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_ISystemRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_ISystemService
 {
     public interface ISys_RoleAuthService : IService<Sys_RoleAuth>
     {
+        ISys_RoleAuthRepository Repository { get; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs"
index 4440aac..8fa588e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_RoleService.cs"
@@ -8,12 +8,16 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Model.Models;
 using WIDESEA_Model.Models.System;
+using WIDESEA_ISystemRepository;
 
 namespace WIDESEA_ISystemService
 {
     public interface ISys_RoleService : IService<Sys_Role>
     {
+        ISys_RoleRepository Repository { get; }
+
         List<RoleNodes> GetAllChildren(int roleId);
+
         WebResponseContent GetCurrentTreePermission();
 
         WebResponseContent GetUserTreePermission(int role_Id);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs"
index 50bd4fb..2d3c3d1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_TenantService.cs"
@@ -5,12 +5,15 @@
 using System.Threading.Tasks;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_ISystemRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_ISystemService
 {
     public interface ISys_TenantService : IService<Sys_Tenant>
     {
+        ISys_TenantRepository Repository { get; }
+
         WebResponseContent InitTenantInfo(string tenantName, int tenantType);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs"
index d10b8f4..cc46628 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ISystemService/ISys_UserService.cs"
@@ -6,6 +6,7 @@
 using System.Threading.Tasks;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_ISystemRepository;
 using WIDESEA_Model;
 using WIDESEA_Model.Models;
 
@@ -13,6 +14,8 @@
 {
     public interface ISys_UserService : IService<Sys_User>
     {
+        ISys_UserRepository Repository { get; }
+
         WebResponseContent Login(LoginInfo loginInfo);
 
         WebResponseContent GetCurrentUserInfo();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoRepository/ITaskRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoRepository/ITaskRepository.cs"
index 6e91bbb..62bca91 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoRepository/ITaskRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoRepository/ITaskRepository.cs"
@@ -27,6 +27,6 @@
 {
     public interface ITaskRepository : IRepository<Dt_Task>
     {
-
+        int GetTaskNum(string sequenceName);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
index 97eeb7d..1d6a01e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -26,16 +26,21 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
 using WIDESEA_DTO.Stock;
+using WIDESEA_ITaskInfoRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_ITaskInfoService
 {
     public interface ITaskService : IService<Dt_Task>
     {
+        ITaskRepository Repository { get; }
+
         WebResponseContent GenerateInboundTask(string stationCode, int taskType, string palletCode);
 
         WebResponseContent TaskCompleted(int taskNum);
 
         WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
+
+        WebResponseContent GenerateOutboundTask(int[] keys);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs"
index 3a90abe..81e799e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs"
@@ -14,6 +14,8 @@
 {
     public class InboundOrderDetailService : ServiceBase<Dt_InboundOrderDetail, IInboundOrderDetailRepository>, IInboundOrderDetailService
     {
+        public IInboundOrderDetailRepository Repository => BaseDal;
+
         public InboundOrderDetailService(IInboundOrderDetailRepository BaseDal) : base(BaseDal)
         {
         }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index 0ad089b..58da11f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -32,6 +32,8 @@
         private readonly IInboundOrderDetailService _inboundOrderDetailService;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
 
+        public IInboundOrderRepository Repository => BaseDal;
+
         public InboundOrderService(IInboundOrderRepository BaseDal, IMapper mapper, IMaterielInfoService materielInfoService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService, ITaskRepository taskRepository, IInboundOrderDetailService inboundOrderDetailService, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
         {
             _mapper = mapper;
@@ -43,6 +45,11 @@
             _unitOfWorkManage = unitOfWorkManage;
         }
 
+        /// <summary>
+        /// 娣诲姞鍗曟嵁
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
         public override WebResponseContent AddData(SaveModel saveModel)
         {
             InboundOrderAddDTO orderAddDTO = saveModel.MainData.DicToModel<InboundOrderAddDTO>();
@@ -50,6 +57,11 @@
             return AddInboundOrder(orderAddDTO);
         }
 
+        /// <summary>
+        /// 娣诲姞鍗曟嵁
+        /// </summary>
+        /// <param name="orderAddDTO">鍗曟嵁娣诲姞DTO</param>
+        /// <returns></returns>
         public WebResponseContent AddInboundOrder(InboundOrderAddDTO orderAddDTO)
         {
             WebResponseContent content = new();
@@ -76,6 +88,11 @@
             return content;
         }
 
+        /// <summary>
+        /// 楠岃瘉鍗曟嵁娣诲姞DTO瀵硅薄
+        /// </summary>
+        /// <param name="inboundOrderAddDTO">鍗曟嵁娣诲姞DTO</param>
+        /// <returns></returns>
         private (bool, string, object?) CheckInboundOrderAddData(InboundOrderAddDTO inboundOrderAddDTO)
         {
             (bool, string, object?) result1 = ModelValidate.ValidateModelData(inboundOrderAddDTO);
@@ -103,6 +120,11 @@
             return (true, "鎴愬姛", inboundOrderAddDTO);
         }
 
+        /// <summary>
+        /// 鏍规嵁鍏ュ簱鍗曞彿鑾峰彇鍏ュ簱鍗�(鍚槑缁�)
+        /// </summary>
+        /// <param name="inboundOrderNo"></param>
+        /// <returns></returns>
         public Dt_InboundOrder GetInboundOrder(string inboundOrderNo)
         {
             return BaseDal.Db.Queryable<Dt_InboundOrder>().Includes(x => x.Details).First(x => x.OrderNo == inboundOrderNo); ;
@@ -184,6 +206,13 @@
             return content;
         }
 
+        /// <summary>
+        /// 缁勭洏鏁版嵁鏇存柊
+        /// </summary>
+        /// <param name="inboundOrder">鍏ュ簱鍗�</param>
+        /// <param name="inboundOrderDetails">鍏ュ簱鍗曟槑缁�</param>
+        /// <param name="stockInfo">缁勭洏鏁版嵁</param>
+        /// <returns></returns>
         public WebResponseContent MaterielGroupUpdateData(Dt_InboundOrder inboundOrder, List<Dt_InboundOrderDetail> inboundOrderDetails, Dt_StockInfo stockInfo)
         {
             try
@@ -202,6 +231,16 @@
             }
         }
 
+        /// <summary>
+        /// 楠岃瘉缁勭洏鏁版嵁
+        /// </summary>
+        /// <param name="materielGroupDTO">鐗╂枡缁勭洏DTO</param>
+        /// <param name="matSerialNumberDTOs">鎵爜搴忓垪鍙�</param>
+        /// <param name="materielInfos">鐗╂枡淇℃伅</param>
+        /// <param name="materielCodes">鐗╂枡缂栧彿</param>
+        /// <param name="inboundOrder">鍏ュ簱鍗曟嵁</param>
+        /// <param name="stockInfo">缁勭洏淇℃伅</param>
+        /// <returns></returns>
         public (bool, string, object?) CheckMaterielGroupParam(MaterielGroupDTO materielGroupDTO, List<MatSerialNumberDTO> matSerialNumberDTOs, List<Dt_MaterielInfo> materielInfos, List<string> materielCodes, Dt_InboundOrder inboundOrder, Dt_StockInfo stockInfo)
         {
             (bool, string, object?) result = ModelValidate.ValidateModelData(materielGroupDTO);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
index 3a879c5..2e0b0a1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs"
@@ -16,19 +16,19 @@
         public int Id { get; set; }
 
         [CodeRule(WIDESEA_Core.Enums.RuleCode.OutboundOrderRule)]
-        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
         public string OrderNo { get; set; }
 
-        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "涓婃父鍗曟嵁缂栧彿")]
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "涓婃父鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
         public string UpperOrderNo { get; set; }
 
-        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)]
         public int OrderType { get; set; }
 
         [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鐘舵��")]
         public int OrderStatus { get; set; }
 
-        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡", IsOnlyIgnoreUpdate = true)]
         public int CreateType { get; set; }
 
         [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs"
index 05e0899..6e040ac 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Record/Dt_LocationStatusChangeRecord.cs"
@@ -9,7 +9,7 @@
 namespace WIDESEA_Model.Models
 {
     [SugarTable(nameof(Dt_LocationStatusChangeRecord),"璐т綅鐘舵�佸彉鍔ㄨ褰�")]
-    public class Dt_LocationStatusChangeRecord
+    public class Dt_LocationStatusChangeRecord : BaseEntity
     {
         [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
         public int Id { get; set; }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs"
index c00a308..663de64 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs"
@@ -109,6 +109,9 @@
         [SugarColumn(IsNullable = false, ColumnDescription = "浼樺厛绾�")]
         public int Grade { get; set; }
 
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "婧愪富閿�")]
+        public int SourceKey { get; set; }
+
         /// <summary>
         /// 浠诲姟涓嬪彂鏃堕棿
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
index d8eefe1..bac59b1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
@@ -13,6 +13,8 @@
 {
     public class OutStockLockInfoService : ServiceBase<Dt_OutStockLockInfo, IOutStockLockInfoRepository>, IOutStockLockInfoService
     {
+        public IOutStockLockInfoRepository Repository => BaseDal;
+
         public OutStockLockInfoService(IOutStockLockInfoRepository BaseDal) : base(BaseDal)
         {
         }
@@ -44,10 +46,14 @@
 
             return outStockLockInfos;
         }
-
         public List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId)
         {
             return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId);
         }
+
+        public List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId, OutStockStatus outStockStatus)
+        {
+            return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId && x.Status == outStockStatus.ObjToInt());
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
index 7fa06cc..1ff7cd0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
@@ -12,8 +12,10 @@
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO.Stock;
 using WIDESEA_IBasicRepository;
+using WIDESEA_IBasicService;
 using WIDESEA_IOutboundRepository;
 using WIDESEA_IOutboundService;
+using WIDESEA_IRecordService;
 using WIDESEA_IStockRepository;
 using WIDESEA_IStockService;
 using WIDESEA_Model.Models;
@@ -24,24 +26,24 @@
     public class OutboundOrderDetailService : ServiceBase<Dt_OutboundOrderDetail, IOutboundOrderDetailRepository>, IOutboundOrderDetailService
     {
         private readonly IStockInfoService _stockInfoService;
-        private readonly IStockInfoRepository _stockInfoRepository;
+        private readonly IStockInfoDetailService _stockInfoDetailService;
         private readonly IOutStockLockInfoService _outStockLockInfoService;
-        private readonly IOutboundOrderRepository _outboundOrderRepository;
-        private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
-        private readonly IOutStockLockInfoRepository _outStockLockInfoRepository;
-        private readonly ILocationInfoRepository _locationInfoRepository;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly ILocationStatusChangeRecordSetvice _locationStatusChangeRecordSetvice;
+        private readonly IOutboundOrderService _outboundOrderService;
+        private readonly ILocationInfoService _locationInfoService;
 
-        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IStockInfoService stockInfoService, IStockInfoRepository stockInfoRepository, IOutStockLockInfoService outStockLockInfoService, IOutboundOrderRepository outboundOrderRepository, IStockInfoDetailRepository stockInfoDetailRepository, IOutStockLockInfoRepository outStockLockInfoRepository, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        public IOutboundOrderDetailRepository Repository => BaseDal;
+
+        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IStockInfoService stockInfoService, IOutStockLockInfoService outStockLockInfoService, IUnitOfWorkManage unitOfWorkManage, ILocationStatusChangeRecordSetvice locationStatusChangeRecordSetvice, IOutboundOrderService outboundOrderService, ILocationInfoService locationInfoService, IStockInfoDetailService stockInfoDetailService) : base(BaseDal)
         {
             _stockInfoService = stockInfoService;
-            _stockInfoRepository = stockInfoRepository;
             _outStockLockInfoService = outStockLockInfoService;
-            _outboundOrderRepository = outboundOrderRepository;
-            _stockInfoDetailRepository = stockInfoDetailRepository;
-            _outStockLockInfoRepository = outStockLockInfoRepository;
-            _locationInfoRepository = locationInfoRepository;
             _unitOfWorkManage = unitOfWorkManage;
+            _locationStatusChangeRecordSetvice = locationStatusChangeRecordSetvice;
+            _outboundOrderService = outboundOrderService;
+            _locationInfoService = locationInfoService;
+            _stockInfoDetailService = stockInfoDetailService;
         }
         //
         public WebResponseContent LockOutboundStock(int orderDetailId)
@@ -145,19 +147,26 @@
             return (true, "鎴愬姛");
         }
 
-        public (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
+        public (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(Dt_OutboundOrderDetail outboundOrderDetail, List<StockSelectViewDTO> stockSelectViews)
         {
-            Dt_OutboundOrderDetail outboundOrderDetail = BaseDal.QueryFirst(x => x.Id == orderDetailId);
-            (bool, string) result = CheckSelectStockDeital(outboundOrderDetail, stockSelectViews);
-            if (!result.Item1) throw new Exception(result.Item2);
+            (bool, string) checkResult = CheckSelectStockDeital(outboundOrderDetail, stockSelectViews);
+            if (!checkResult.Item1) throw new Exception(checkResult.Item2);
 
-            Dt_OutboundOrder outboundOrder = _outboundOrderRepository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
+            Dt_OutboundOrder outboundOrder = _outboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
             decimal originalNeedQuantity = outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity;
 
             decimal needQuantity = originalNeedQuantity;
 
-            List<Dt_StockInfo> outStocks = _stockInfoRepository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
-            decimal assignQuantity = stockSelectViews.Sum(x => x.UseableQuantity);
+            List<Dt_StockInfo> outStocks = _stockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
+            decimal assignQuantity = 0;
+            outStocks.ForEach(x =>
+            {
+                x.Details.ForEach(v =>
+                {
+                    assignQuantity += v.StockQuantity - v.OutboundQuantity;
+                });
+            });
+
             outboundOrderDetail.LockQuantity += assignQuantity;
             outStocks.ForEach(x =>
             {
@@ -183,7 +192,7 @@
 
             List<Dt_OutStockLockInfo> outStockLockInfos = _outStockLockInfoService.GetOutStockLockInfos(outboundOrder, outboundOrderDetail, outStocks);
 
-            List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList());
+            List<Dt_LocationInfo> locationInfos = _locationInfoService.Repository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList());
 
             return (outStocks, outboundOrderDetail, outStockLockInfos, locationInfos);
         }
@@ -192,10 +201,14 @@
         {
             try
             {
-                (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = AssignStockOutbound(orderDetailId, stockSelectViews);
+                Dt_OutboundOrderDetail outboundOrderDetail = BaseDal.QueryFirst(x => x.Id == orderDetailId);
+                (bool, string) checkResult = CheckSelectStockDeital(outboundOrderDetail, stockSelectViews);
+                if (!checkResult.Item1) throw new Exception(checkResult.Item2);
+
+                (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = AssignStockOutbound(outboundOrderDetail, stockSelectViews);
 
                 _unitOfWorkManage.BeginTran();
-                WebResponseContent content = LockOutboundStockDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4);
+                WebResponseContent content = LockOutboundStockDataUpdate(result.Item1, new List<Dt_OutboundOrderDetail> { result.Item2 }, result.Item3, result.Item4);
                 if (content.Status)
                 {
                     _unitOfWorkManage.CommitTran();
@@ -213,26 +226,80 @@
             }
         }
 
-        public WebResponseContent LockOutboundStockDataUpdate(List<Dt_StockInfo> stockInfos, Dt_OutboundOrderDetail outboundOrderDetail, List<Dt_OutStockLockInfo> outStockLockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock)
+        public WebResponseContent LockOutboundStock(int[] keys)
         {
             try
             {
-                _stockInfoRepository.UpdateData(stockInfos);
+                List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
+                List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
+                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
+                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+                foreach (var item in keys)
+                {
+                    Dt_OutboundOrderDetail outboundOrderDetail = BaseDal.QueryFirst(x => x.Id == item);
+                    (bool, string) checkResult = CheckSelectStockDeital(outboundOrderDetail, stockSelectViews);
+                    if (!checkResult.Item1) throw new Exception(checkResult.Item2);
+
+                    (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = AssignStockOutbound(outboundOrderDetail, stockSelectViews);
+                    if (result.Item1.Count > 0)
+                    {
+                        stockInfos.AddRange(result.Item1);
+                        outboundOrderDetails.Add(result.Item2);
+                        outStockLockInfos.AddRange(result.Item3);
+                        locationInfos.AddRange(result.Item4);
+                    }
+                }
+
+                _unitOfWorkManage.BeginTran();
+                WebResponseContent content = LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
+                if (content.Status)
+                {
+                    _unitOfWorkManage.CommitTran();
+                }
+                else
+                {
+                    _unitOfWorkManage.RollbackTran();
+                }
+                return content;
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent LockOutboundStockDataUpdate(List<Dt_StockInfo> stockInfos, List<Dt_OutboundOrderDetail> outboundOrderDetails, List<Dt_OutStockLockInfo> outStockLockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null)
+        {
+            try
+            {
+                _stockInfoService.Repository.UpdateData(stockInfos);
                 List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
                 foreach (var item in stockInfos)
                 {
                     stockInfoDetails.AddRange(item.Details);
                 }
-                _stockInfoDetailRepository.UpdateData(stockInfoDetails);
-                BaseDal.UpdateData(outboundOrderDetail);
-                _outStockLockInfoRepository.AddData(outStockLockInfos);
+                _stockInfoDetailService.Repository.UpdateData(stockInfoDetails);
+                BaseDal.UpdateData(outboundOrderDetails);
 
-                _locationInfoRepository.UpdateLocationStatus(locationInfos, locationStatus);
+                List<Dt_OutStockLockInfo> addOutStockLockInfos = outStockLockInfos.Where(x => x.Id == 0).ToList();
+                if (addOutStockLockInfos != null && addOutStockLockInfos.Any())
+                {
+                    _outStockLockInfoService.Repository.AddData(addOutStockLockInfos);
+                }
+                List<Dt_OutStockLockInfo> updateOutStockLockInfos = outStockLockInfos.Where(x => x.Id > 0).ToList();
+                if (updateOutStockLockInfos != null && updateOutStockLockInfos.Any())
+                {
+                    _outStockLockInfoService.Repository.UpdateData(updateOutStockLockInfos);
+                }
+
+                _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus.ObjToInt(), StockChangeType.Outbound.ObjToInt(), "", tasks?.Select(x => x.TaskNum).ToList());
+                _locationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus);
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
             {
-
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
@@ -260,10 +327,10 @@
             (bool, string) result = CheckRevoke(outboundOrderDetail);
             if (!result.Item1) return WebResponseContent.Instance.Error(result.Item2);
 
-            List<Dt_OutStockLockInfo> outStockLockInfos = _outStockLockInfoService.GetByOrderDetailId(orderDetailId);
+            List<Dt_OutStockLockInfo> outStockLockInfos = _outStockLockInfoService.GetByOrderDetailId(orderDetailId, OutStockStatus.宸插垎閰�);
             if (outStockLockInfos.Count > 0)
             {
-                List<Dt_StockInfo> stocks = _stockInfoRepository.GetStockInfosByPalletCodes(outStockLockInfos.Select(x => x.PalletCode).ToList());
+                List<Dt_StockInfo> stocks = _stockInfoService.Repository.GetStockInfosByPalletCodes(outStockLockInfos.Select(x => x.PalletCode).ToList());
                 if (stocks.Count > 0)
                 {
                     stocks.ForEach(x =>
@@ -282,9 +349,9 @@
                         x.Status = OutStockStatus.鎾ら攢.ObjToInt();
                     });
 
-                    List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetLocationInfos(stocks.Select(x => x.LocationCode).ToList());
+                    List<Dt_LocationInfo> locationInfos = _locationInfoService.Repository.GetLocationInfos(stocks.Select(x => x.LocationCode).ToList());
 
-                    return LockOutboundStockDataUpdate(stocks, outboundOrderDetail, outStockLockInfos, locationInfos, LocationStatusEnum.InStock);
+                    return LockOutboundStockDataUpdate(stocks, new List<Dt_OutboundOrderDetail> { outboundOrderDetail }, outStockLockInfos, locationInfos, LocationStatusEnum.InStock);
                 }
                 return WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
             }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
index 70b01da..3e529c7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
@@ -1,4 +1,6 @@
 锘縰sing AutoMapper;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -26,6 +28,8 @@
         private readonly IStockInfoService _stockInfoService;
         private readonly IStockInfoDetailService _stockDetailService;
 
+        public IOutboundOrderRepository Repository => BaseDal;
+
         public OutboundOrderService(IOutboundOrderRepository BaseDal, IMapper mapper, IMaterielInfoService materielInfoService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService) : base(BaseDal)
         {
             _mapper = mapper;
@@ -37,8 +41,38 @@
         public override WebResponseContent AddData(SaveModel saveModel)
         {
             OutboundOrderAddDTO outboundOrder = saveModel.MainData.DicToModel<OutboundOrderAddDTO>();
-            outboundOrder.Details = saveModel.DetailData.DicToIEnumerable<OutboundOrderDetailAddDTO>();
+            List<OutboundOrderDetailAddDTO> orderDetailAddDTOs = saveModel.DetailData.DicToIEnumerable<OutboundOrderDetailAddDTO>();
+            outboundOrder.Details = orderDetailAddDTOs.GroupBy(x => x.MaterielCode).Select(x => new OutboundOrderDetailAddDTO
+            {
+                BatchNo = x.FirstOrDefault()?.BatchNo ?? "",
+                MaterielCode = x.Key,
+                OrderQuantity = x.Sum(x => x.OrderQuantity),
+                Remark = x.FirstOrDefault(v => !string.IsNullOrEmpty(v.Remark))?.Remark ?? ""
+            }).ToList();
             return AddOutboundOrder(outboundOrder);
+        }
+
+        public override WebResponseContent UpdateData(SaveModel saveModel)
+        {
+            List<Dt_OutboundOrderDetail> outboundOrderDetails = saveModel.DetailData.DicToIEnumerable<Dt_OutboundOrderDetail>();
+            if (outboundOrderDetails.GroupBy(x => x.MaterielCode).Select(x => x.Count()).Any(x => x > 1))
+            {
+                return WebResponseContent.Instance.Error("鐗╂枡閲嶅");
+            }
+            outboundOrderDetails = outboundOrderDetails.Where(x => (x.Id > 0 && x.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) || x.Id == 0).ToList();
+            
+            List<Dictionary<string, object>> dics = new List<Dictionary<string, object>>();
+            JsonSerializerSettings settings = new JsonSerializerSettings();
+            settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
+            foreach (var item in outboundOrderDetails)
+            {
+                string str = JsonConvert.SerializeObject(item, settings);
+                Dictionary<string, object>? dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(str);
+                if (dic != null)
+                    dics.Add(dic);
+            }
+            saveModel.DetailData = dics;
+            return base.UpdateData(saveModel);
         }
 
         public WebResponseContent AddOutboundOrder(OutboundOrderAddDTO orderAddDTO)
@@ -101,13 +135,11 @@
             {
 
             }
-            catch(Exception ex)
+            catch (Exception ex)
             {
 
             }
             return content;
         }
-
-        
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj"
index 003d1eb..b11d170 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/WIDESEA_OutboundService.csproj"
@@ -9,6 +9,7 @@
   <ItemGroup>
     <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
     <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
     <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
   </ItemGroup>
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordSetvice.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordSetvice.cs"
index 1d4fffd..a1d34b9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordSetvice.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/LocationStatusChangeRecordSetvice.cs"
@@ -19,6 +19,8 @@
         {
         }
 
+        public ILocationStatusChangeRecordRepository Repository => BaseDal;
+
         public void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, int lastStatus, int changeType, string? orderNo, int? taskNum)
         {
             Dt_LocationStatusChangeRecord locationStatusChangeRecord = new Dt_LocationStatusChangeRecord()
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs"
index 9b69481..8201fa2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/StockQuantityChangeRecordService.cs"
@@ -21,6 +21,8 @@
             _mapper = mapper;
         }
 
+        public IStockQuantityChangeRecordRepository Repository => BaseDal;
+
         public void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> stockInfoDetails, decimal beforeQuantity, decimal totalQuantity, StockChangeType changeType)
         {
             List<Dt_StockQuantityChangeRecord> stockQuantityChangeRecords = new List<Dt_StockQuantityChangeRecord>();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
index 49029ed..cb432c4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
@@ -16,6 +16,8 @@
         {
         }
 
+        public IStockInfoDetailRepository Repository => BaseDal;
+
         public bool ExistSerialNumber(string SerialNumber)
         {
             return BaseDal.QueryFirst(x => x.SerialNumber == SerialNumber) != null;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
index 102b6b7..df24206 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
@@ -30,6 +30,8 @@
         private readonly IAreaInfoRepository _areaInfoRepository;
         private readonly ILocationInfoRepository _locationInfoRepository;
 
+        public IStockInfoRepository Repository => BaseDal;
+
         public StockInfoService(IStockInfoRepository BaseDal, IMapper mapper, IStockQuantityChangeRecordService stockQuantityChangeRecordService, IStockInfoDetailRepository stockInfoDetailRepository, IWarehouseRepository warehouseRepository, IRoadwayInfoRepository roadwayInfoRepository, IAreaInfoRepository areaInfoRepository, ILocationInfoRepository locationInfoRepository) : base(BaseDal)
         {
             _mapper = mapper;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs"
index 284014c..b69644f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryListService.cs"
@@ -15,5 +15,7 @@
         public Sys_DictionaryListService(ISys_DictionaryListRepository BaseDal) : base(BaseDal)
         {
         }
+
+        public ISys_DictionaryListRepository Repository => BaseDal;
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
index 9e6fbdd..7ee22e0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
@@ -26,6 +26,8 @@
             _unitOfWorkManage = unitOfWorkManage;
         }
 
+        public ISys_DictionaryRepository Repository => BaseDal;
+
         public List<VueDictionaryDTO> GetVueDictionary(string[] dicNos)
         {
             if (dicNos == null || dicNos.Count() == 0) return new List<VueDictionaryDTO>();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs"
index de5c9f2..327680c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs"
@@ -21,6 +21,8 @@
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
 
+        public ISys_MenuRepository Repository => BaseDal;
+
         public Sys_MenuService(ISys_MenuRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs"
index 5c6b659..0ce0c7d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleAuthService.cs"
@@ -15,5 +15,7 @@
         public Sys_RoleAuthService(ISys_RoleAuthRepository BaseDal) : base(BaseDal)
         {
         }
+
+        public ISys_RoleAuthRepository Repository => BaseDal;
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs"
index 0b29f9e..3372776 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_RoleService.cs"
@@ -24,6 +24,9 @@
         private readonly ISys_MenuRepository _MenuRepository;
         private readonly ISys_MenuService _MenuService;
         private readonly ISys_RoleAuthRepository _RoleAuthRepository;
+
+        public ISys_RoleRepository Repository => BaseDal;
+
         public Sys_RoleService(ISys_RoleRepository BaseDal, ISys_MenuRepository MenuRepository, ISys_MenuService MenuService, ISys_RoleAuthRepository roleAuthRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs"
index 689d293..03e22c9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_TenantService.cs"
@@ -20,6 +20,9 @@
     public class Sys_TenantService : ServiceBase<Sys_Tenant, ISys_TenantRepository>, ISys_TenantService
     {
         private IUnitOfWorkManage _unitOfWorkManage;
+
+        public ISys_TenantRepository Repository => BaseDal;
+
         public Sys_TenantService(ISys_TenantRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs"
index 167b1d1..ce2892d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_UserService.cs"
@@ -20,6 +20,9 @@
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly ICacheService _cacheService;
+
+        public ISys_UserRepository Repository => BaseDal;
+
         public Sys_UserService(ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService) : base(repository)
         {
             _unitOfWorkManage = unitOfWorkManage;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs"
index 8f9d98f..87598ea 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs"
@@ -20,7 +20,9 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
 using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Helper;
 using WIDESEA_ITaskInfoRepository;
 using WIDESEA_Model.Models;
 
@@ -32,5 +34,29 @@
         {
         }
 
+        public int GetTaskNum(string sequenceName)
+        {
+            return Db.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceName}").ObjToInt();
+        }
+
+        public override int AddData(Dt_Task entity)
+        {
+            return base.AddData(entity);
+        }
+
+        public override int AddData(List<Dt_Task> listEntity)
+        {
+            if (listEntity.GroupBy(x => x.PalletCode).Select(x => x.Count()).Any(x => x > 1))
+            {
+                throw new Exception("浠诲姟鏁扮粍鏁版嵁鎵樼洏鍙烽噸澶�");
+            }
+
+            if (QueryFirst(x => listEntity.Select(v => v.PalletCode).Contains(x.PalletCode)) != null)
+            {
+                throw new Exception("鏈夐噸澶嶄换鍔�");
+            }
+
+            return base.AddData(listEntity);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs"
new file mode 100644
index 0000000..d2c5191
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs"
@@ -0,0 +1,229 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core;
+using WIDESEA_Model.Models;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_TaskInfoService
+{
+    public partial class TaskService
+    {
+        /// <summary>
+        /// PDA鐢宠鍏ュ簱--鍫嗗灈鏈虹珛搴撳叆搴�
+        /// </summary>
+        /// <param name="stationCode">璧峰鍦板潃</param>
+        /// <param name="taskType">浠诲姟绫诲瀷--鍏ョ┖锛屽叆鏂�</param>
+        /// <param name="palletCode">鎵樼洏缂栧彿</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        public WebResponseContent GenerateInboundTask(string stationCode, int taskType, string palletCode)
+        {
+            string? name = Enum.GetName(typeof(TaskTypeEnum), taskType);
+            MethodInfo? methodInfo = GetType().GetMethod(name + "Request");
+            if (methodInfo != null)
+            {
+                WebResponseContent? responseContent = (WebResponseContent?)methodInfo.Invoke(this, new object[] { stationCode, palletCode });
+                if (responseContent != null)
+                {
+                    return responseContent;
+                }
+            }
+            else
+            {
+                return WebResponseContent.Instance.Error("鏈壘鍒拌浠诲姟绫诲瀷涓氬姟");
+            }
+            return WebResponseContent.Instance.Error("閿欒");
+        }
+
+        /// <summary>
+        /// 绌烘墭鐩樺叆搴�
+        /// </summary>
+        /// <param name="stationCode">璧峰鍦板潃</param>
+        /// <param name="palletCode">鎵樼洏缂栧彿</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        public WebResponseContent PalletInboundRequest(string stationCode, string palletCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                (bool, string) result = CheckRequestInbound(stationCode, palletCode, false);
+                if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
+                content = AssignLocUpdateData(stationCode, TaskTypeEnum.PalletInbound.ObjToInt(), palletCode, false);
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 鐗╂枡鍏ュ簱
+        /// </summary>
+        /// <param name="stationCode">璧峰鍦板潃</param>
+        /// <param name="palletCode">鎵樼洏缂栧彿</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        public WebResponseContent InboundRequest(string stationCode, string palletCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StockInfo stockInfo = _stockInfoService.Repository.GetStockInfo(palletCode);
+                (bool, string) result = CheckRequestInbound(stationCode, palletCode, true, stockInfo);
+                if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
+                content = AssignLocUpdateData(stationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo);
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 鍏ュ簱鍒嗛厤璐т綅鍙婂鐞嗘暟鎹�
+        /// </summary>
+        /// <param name="stationCode">璧峰鍦板潃</param>
+        /// <param name="taskType">浠诲姟绫诲瀷</param>
+        /// <param name="palletCode">鎵樼洏缂栧彿</param>
+        /// <param name="isUpdateStock">鏄惁鏇存柊缁勭洏淇℃伅--鍖哄垎鐗╂枡鍏ュ簱鍜岀┖鎵樺叆搴�</param>
+        /// <param name="stockInfo">缁勭洏淇℃伅--鍙┖</param>
+        /// <param name="orderNo">璁㈠崟鍙�--鍙┖</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        private WebResponseContent AssignLocUpdateData(string stationCode, int taskType, string palletCode, bool isUpdateStock = true, Dt_StockInfo? stockInfo = null, string orderNo = "")
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation(stationCode, taskType);
+                if (locationInfo != null)
+                {
+                    Dt_Task task = new()
+                    {
+                        CurrentAddress = stationCode,
+                        Grade = 0,
+                        PalletCode = palletCode,
+                        NextAddress = locationInfo.LocationCode,
+                        Roadway = locationInfo.RoadwayNo,
+                        SourceAddress = stationCode,
+                        TargetAddress = locationInfo.LocationCode,
+                        TaskStatus = InTaskStatusEnum.InNew.ObjToInt(),
+                        TaskType = taskType,
+                    };
+                    BaseDal.AddData(task);
+                    int beforeStatus = locationInfo.LocationStatus;
+
+                    locationInfo.LocationStatus = LocationStatusEnum.PalletLock.ObjToInt();
+                    if (isUpdateStock)
+                    {
+                        locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                        if (stockInfo != null && stockInfo.Details != null && stockInfo.Details.Count > 0)
+                        {
+                            orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
+
+                            stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+                            _stockInfoService.Repository.UpdateData(stockInfo);
+                        }
+                        else
+                        {
+                            return content = WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
+                        }
+                    }
+                    _locationInfoService.Repository.UpdateData(locationInfo);
+                    _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), orderNo, task.TaskNum);
+
+                    return content = WebResponseContent.Instance.OK();
+                }
+                return content = WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤璐т綅");
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 楠岃瘉鏁版嵁
+        /// </summary>
+        /// <param name="stationCode">璧峰鍦板潃</param>
+        /// <param name="palletCode">鎵樼洏缂栧彿</param>
+        /// <param name="isCheckStock">鏄惁妫�鏌ョ粍鐩樹俊鎭�--鍖哄垎鐗╂枡鍏ュ簱鍜岀┖鎵樺叆搴�</param>
+        /// <param name="stockInfo">缁勭洏淇℃伅--鍙┖</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        private (bool, string) CheckRequestInbound(string stationCode, string palletCode, bool isCheckStock = true, Dt_StockInfo? stockInfo = null)
+        {
+            if (BaseDal.QueryFirst(x => x.PalletCode == palletCode) != null)
+            {
+                return (false, "璇ユ墭鐩樺彿宸叉湁浠诲姟");
+            }
+            if (BaseDal.QueryFirst(x => (x.SourceAddress == stationCode || x.CurrentAddress == stationCode) && x.TaskStatus == InTaskStatusEnum.InNew.ObjToInt()) != null)
+            {
+                return (false, "褰撳墠鍏ュ簱绔欏彴宸叉湁涓�鏉℃柊寤轰换鍔�");
+            }
+            if (isCheckStock)
+            {
+                if (stockInfo == null)
+                {
+                    return (false, "鏈壘鍒扮粍鐩樹俊鎭�");
+                }
+                if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
+                {
+                    return (false, "璇ョ粍鐩樼姸鎬佷笉鍙叆搴�");
+                }
+                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
+                {
+                    return (false, "璇ユ墭鐩樺凡缁戝畾璐т綅");
+                }
+                if (stockInfo.Details == null || stockInfo.Details.Count == 0)
+                {
+                    return (false, "娌℃湁搴撳瓨鏄庣粏淇℃伅");
+                }
+            }
+            else
+            {
+                if (_stockInfoService.Repository.QueryFirst(x => x.PalletCode == palletCode) != null)
+                {
+                    return (false, "璇ユ墭鐩樺凡瀛樺湪搴撳唴");
+                }
+            }
+
+            return (true, "鎴愬姛");
+        }
+
+        /// <summary>
+        /// 绌烘墭鐩樺叆搴撳畬鎴愬鐞�
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋瀵硅薄</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        public WebResponseContent PalletInboundTaskCompleted(Dt_Task task)
+        {
+            Dt_StockInfo stockInfo = new Dt_StockInfo()
+            {
+                PalletCode = task.PalletCode,
+                LocationCode = task.TargetAddress,
+                StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt()
+            };
+            Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+
+            CheckInboundCompleted(stockInfo, locationInfo);
+
+            _stockInfoService.Repository.AddData(stockInfo);
+
+            int beforeStatus = locationInfo.LocationStatus;
+            locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
+            _locationInfoService.Repository.UpdateData(locationInfo);
+
+
+            BaseDal.DeleteData(task);
+
+            _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
+
+            return WebResponseContent.Instance.OK();
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs"
new file mode 100644
index 0000000..924d427
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs"
@@ -0,0 +1,204 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core;
+using WIDESEA_DTO.Stock;
+using WIDESEA_Model.Models;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_TaskInfoService
+{
+    public partial class TaskService
+    {
+        public List<Dt_Task> GetTasks(List<Dt_StockInfo> stockInfos)
+        {
+            List<Dt_Task> tasks = new List<Dt_Task>();
+            for (int i = 0; i < stockInfos.Count; i++)
+            {
+                Dt_StockInfo stockInfo = stockInfos[i];
+
+                if (stockInfo != null)
+                {
+                    Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
+                    Dt_RoadwayInfo roadwayInfo = _roadwayInfoRepository.QueryFirst(x => x.RoadwayNo == locationInfo.RoadwayNo);
+                    if (roadwayInfo != null)
+                    {
+                        Dt_Task task = new()
+                        {
+                            CurrentAddress = stockInfo.LocationCode,
+                            Grade = 0,
+                            PalletCode = stockInfo.PalletCode,
+                            NextAddress = roadwayInfo.OutSCStationCode,
+                            Roadway = locationInfo.RoadwayNo,
+                            SourceAddress = stockInfo.LocationCode,
+                            TargetAddress = roadwayInfo.OutStationCode,
+                            TaskStatus = InTaskStatusEnum.InNew.ObjToInt(),
+                            TaskType = TaskTypeEnum.Outbound.ObjToInt(),
+                            TaskNum = BaseDal.GetTaskNum("SeqTaskNum")
+                        };
+                        tasks.Add(task);
+                    }
+                }
+            }
+            return tasks;
+        }
+
+        public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) OutboundTaskDataHandle(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
+        {
+            List<Dt_Task> tasks = new List<Dt_Task>();
+            Dt_OutboundOrderDetail outboundOrderDetail = _outboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
+
+            if (outboundOrderDetail == null)
+            {
+                throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+            }
+
+            if (stockSelectViews.Sum(x => x.UseableQuantity) > outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity)
+            {
+                throw new Exception("閫夋嫨鏁伴噺瓒呭嚭鍗曟嵁鏁伴噺");
+            }
+            List<Dt_StockInfo>? stockInfos = null;
+            Dt_OutboundOrderDetail? orderDetail = null;
+            List<Dt_OutStockLockInfo>? outStockLockInfos = null;
+            List<Dt_LocationInfo>? locationInfos = null;
+            if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+            {
+                (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews);
+                if (result.Item1 != null && result.Item1.Count > 0)
+                {
+                    tasks = GetTasks(result.Item1);
+                    result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                    result.Item3.ForEach(x =>
+                    {
+                        x.Status = OutStockStatus.鍑哄簱涓�.ObjToInt();
+                    });
+
+                    stockInfos = result.Item1;
+                    orderDetail = result.Item2;
+                    outStockLockInfos = result.Item3;
+                    locationInfos = result.Item4;
+                }
+                else
+                {
+                    throw new Exception("鏃犲簱瀛�");
+                }
+            }
+            else
+            {
+                List<Dt_OutStockLockInfo> stockLockInfos = _outStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId);
+                if (stockLockInfos != null && stockLockInfos.Count > 0)
+                {
+                    List<Dt_StockInfo> stocks = _stockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
+                    tasks = GetTasks(stocks);
+                }
+            }
+
+            return (tasks, stockInfos, orderDetail == null ? null : new List<Dt_OutboundOrderDetail> { orderDetail }, outStockLockInfos, locationInfos);
+        }
+
+        public WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
+        {
+            try
+            {
+                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = OutboundTaskDataHandle(orderDetailId, stockSelectViews);
+
+                WebResponseContent content = GenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
+
+                return content;
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent GenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_OutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
+        {
+            try
+            {
+                _unitOfWorkManage.BeginTran();
+
+                BaseDal.AddData(tasks);
+                if (stockInfos != null && outboundOrderDetails != null && outStockLockInfos != null && locationInfos != null)
+                {
+                    WebResponseContent content = _outboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
+
+                    if (content.Status)
+                    {
+                        _unitOfWorkManage.CommitTran();
+                    }
+                    else
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                    }
+                    return content;
+                }
+                else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
+                {
+                    outboundOrderDetails.ForEach(x =>
+                    {
+                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                    });
+
+                    _outboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
+                }
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+
+        }
+
+        public WebResponseContent GenerateOutboundTask(int[] keys)
+        {
+            try
+            {
+                List<Dt_Task> tasks = new List<Dt_Task>();
+                List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
+                List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
+                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
+                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+                foreach (int key in keys)
+                {
+                    (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = OutboundTaskDataHandle(key, stockSelectViews);
+                    if (result.Item2 != null && result.Item2.Count > 0)
+                    {
+                        stockInfos.AddRange(result.Item2);
+                    }
+                    if (result.Item3 != null && result.Item3.Count > 0)
+                    {
+                        outboundOrderDetails.AddRange(result.Item3);
+                    }
+                    if (result.Item4 != null && result.Item4.Count > 0)
+                    {
+                        outStockLockInfos.AddRange(result.Item4);
+                    }
+                    if (result.Item5 != null && result.Item5.Count > 0)
+                    {
+                        locationInfos.AddRange(result.Item5);
+                    }
+                    if (result.Item1 != null && result.Item1.Count > 0)
+                    {
+                        tasks.AddRange(result.Item1);
+                    }
+                }
+
+                WebResponseContent content = GenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
+                return content;
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index 469485b..4e92639 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -25,6 +25,7 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using System.Reflection;
+using System.Reflection.Metadata;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core;
@@ -36,9 +37,11 @@
 using WIDESEA_DTO.Stock;
 using WIDESEA_IBasicRepository;
 using WIDESEA_IBasicService;
+using WIDESEA_IOutboundRepository;
 using WIDESEA_IOutboundService;
 using WIDESEA_IRecordService;
 using WIDESEA_IStockRepository;
+using WIDESEA_IStockService;
 using WIDESEA_ITaskInfoRepository;
 using WIDESEA_ITaskInfoService;
 using WIDESEA_Model.Models;
@@ -46,257 +49,46 @@
 
 namespace WIDESEA_TaskInfoService
 {
-    public class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService
+    public partial class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService
     {
         private readonly IMapper _mapper;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly ILocationInfoService _locationInfoService;
-        private readonly ILocationInfoRepository _locationInfoRepository;
-        private readonly IStockInfoRepository _stockInfoRepository;
+        private readonly IStockInfoService _stockInfoService;
         private readonly ILocationStatusChangeRecordSetvice _locationStatusChangeRecordSetvice;
         private readonly IOutboundOrderDetailService _outboundOrderDetailService;
         private readonly IRoadwayInfoRepository _roadwayInfoRepository;
+        private readonly IOutStockLockInfoService _outStockLockInfoService;
 
-        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService, ILocationInfoRepository locationInfoRepository, IStockInfoRepository stockInfoRepository, ILocationStatusChangeRecordSetvice locationStatusChangeRecordSetvice, IOutboundOrderDetailService outboundOrderDetailService, IRoadwayInfoRepository roadwayInfoRepository) : base(BaseDal)
+        public ITaskRepository Repository => BaseDal;
+
+        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService, IStockInfoRepository stockInfoRepository, ILocationStatusChangeRecordSetvice locationStatusChangeRecordSetvice, IOutboundOrderDetailService outboundOrderDetailService, IRoadwayInfoRepository roadwayInfoRepository, IOutStockLockInfoService outStockLockInfoService, IStockInfoService stockInfoService) : base(BaseDal)
         {
             _mapper = mapper;
             _locationInfoService = locationInfoService;
-            _locationInfoRepository = locationInfoRepository;
-            _stockInfoRepository = stockInfoRepository;
+            _stockInfoService = stockInfoService;
             _locationStatusChangeRecordSetvice = locationStatusChangeRecordSetvice;
             _outboundOrderDetailService = outboundOrderDetailService;
             _roadwayInfoRepository = roadwayInfoRepository;
             _unitOfWorkManage = unitOfWorkManage;
-        }
-
-        /// <summary>
-        /// PDA鐢宠鍏ュ簱--鍫嗗灈鏈虹珛搴撳叆搴�
-        /// </summary>
-        /// <param name="stationCode">璧峰鍦板潃</param>
-        /// <param name="taskType">浠诲姟绫诲瀷--鍏ョ┖锛屽叆鏂�</param>
-        /// <param name="palletCode">鎵樼洏缂栧彿</param>
-        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        public WebResponseContent GenerateInboundTask(string stationCode, int taskType, string palletCode)
-        {
-            string? name = Enum.GetName(typeof(TaskTypeEnum), taskType);
-            MethodInfo? methodInfo = GetType().GetMethod(name + "Request");
-            if (methodInfo != null)
-            {
-                WebResponseContent? responseContent = (WebResponseContent?)methodInfo.Invoke(this, new object[] { stationCode, palletCode });
-                if (responseContent != null)
-                {
-                    return responseContent;
-                }
-            }
-            else
-            {
-                return WebResponseContent.Instance.Error("鏈壘鍒拌浠诲姟绫诲瀷涓氬姟");
-            }
-            return WebResponseContent.Instance.Error("閿欒");
-        }
-
-        /// <summary>
-        /// 绌烘墭鐩樺叆搴�
-        /// </summary>
-        /// <param name="stationCode">璧峰鍦板潃</param>
-        /// <param name="palletCode">鎵樼洏缂栧彿</param>
-        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        public WebResponseContent PalletInboundRequest(string stationCode, string palletCode)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                (bool, string) result = CheckRequestInbound(stationCode, palletCode, false);
-                if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
-                content = AssignLocUpdateData(stationCode, TaskTypeEnum.PalletInbound.ObjToInt(), palletCode, false);
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 鐗╂枡鍏ュ簱
-        /// </summary>
-        /// <param name="stationCode">璧峰鍦板潃</param>
-        /// <param name="palletCode">鎵樼洏缂栧彿</param>
-        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        public WebResponseContent InboundRequest(string stationCode, string palletCode)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                Dt_StockInfo stockInfo = _stockInfoRepository.GetStockInfo(palletCode);
-                (bool, string) result = CheckRequestInbound(stationCode, palletCode, true, stockInfo);
-                if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
-                content = AssignLocUpdateData(stationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo);
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 鍏ュ簱鍒嗛厤璐т綅鍙婂鐞嗘暟鎹�
-        /// </summary>
-        /// <param name="stationCode">璧峰鍦板潃</param>
-        /// <param name="taskType">浠诲姟绫诲瀷</param>
-        /// <param name="palletCode">鎵樼洏缂栧彿</param>
-        /// <param name="isUpdateStock">鏄惁鏇存柊缁勭洏淇℃伅--鍖哄垎鐗╂枡鍏ュ簱鍜岀┖鎵樺叆搴�</param>
-        /// <param name="stockInfo">缁勭洏淇℃伅--鍙┖</param>
-        /// <param name="orderNo">璁㈠崟鍙�--鍙┖</param>
-        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        private WebResponseContent AssignLocUpdateData(string stationCode, int taskType, string palletCode, bool isUpdateStock = true, Dt_StockInfo? stockInfo = null, string orderNo = "")
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation(stationCode, taskType);
-                if (locationInfo != null)
-                {
-                    Dt_Task task = new()
-                    {
-                        CurrentAddress = stationCode,
-                        Grade = 0,
-                        PalletCode = palletCode,
-                        NextAddress = locationInfo.LocationCode,
-                        Roadway = locationInfo.RoadwayNo,
-                        SourceAddress = stationCode,
-                        TargetAddress = locationInfo.LocationCode,
-                        TaskStatus = InTaskStatusEnum.InNew.ObjToInt(),
-                        TaskType = taskType,
-                    };
-                    BaseDal.AddData(task);
-                    int beforeStatus = locationInfo.LocationStatus;
-
-                    locationInfo.LocationStatus = LocationStatusEnum.PalletLock.ObjToInt();
-                    if (isUpdateStock)
-                    {
-                        locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
-                        if (stockInfo != null && stockInfo.Details != null && stockInfo.Details.Count > 0)
-                        {
-                            orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
-
-                            stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
-                            _stockInfoRepository.UpdateData(stockInfo);
-                        }
-                        else
-                        {
-                            return content = WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
-                        }
-                    }
-                    _locationInfoRepository.UpdateData(locationInfo);
-                    _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), orderNo, task.TaskNum);
-
-                    return content = WebResponseContent.Instance.OK();
-                }
-                return content = WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤璐т綅");
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 楠岃瘉鏁版嵁
-        /// </summary>
-        /// <param name="stationCode">璧峰鍦板潃</param>
-        /// <param name="palletCode">鎵樼洏缂栧彿</param>
-        /// <param name="isCheckStock">鏄惁妫�鏌ョ粍鐩樹俊鎭�--鍖哄垎鐗╂枡鍏ュ簱鍜岀┖鎵樺叆搴�</param>
-        /// <param name="stockInfo">缁勭洏淇℃伅--鍙┖</param>
-        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        private (bool, string) CheckRequestInbound(string stationCode, string palletCode, bool isCheckStock = true, Dt_StockInfo? stockInfo = null)
-        {
-            if (BaseDal.QueryFirst(x => x.PalletCode == palletCode) != null)
-            {
-                return (false, "璇ユ墭鐩樺彿宸叉湁浠诲姟");
-            }
-            if (BaseDal.QueryFirst(x => (x.SourceAddress == stationCode || x.CurrentAddress == stationCode) && x.TaskStatus == InTaskStatusEnum.InNew.ObjToInt()) != null)
-            {
-                return (false, "褰撳墠鍏ュ簱绔欏彴宸叉湁涓�鏉℃柊寤轰换鍔�");
-            }
-            if (isCheckStock)
-            {
-                if (stockInfo == null)
-                {
-                    return (false, "鏈壘鍒扮粍鐩樹俊鎭�");
-                }
-                if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
-                {
-                    return (false, "璇ョ粍鐩樼姸鎬佷笉鍙叆搴�");
-                }
-                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
-                {
-                    return (false, "璇ユ墭鐩樺凡缁戝畾璐т綅");
-                }
-                if (stockInfo.Details == null || stockInfo.Details.Count == 0)
-                {
-                    return (false, "娌℃湁搴撳瓨鏄庣粏淇℃伅");
-                }
-            }
-            else
-            {
-                if (_stockInfoRepository.QueryFirst(x => x.PalletCode == palletCode) != null)
-                {
-                    return (false, "璇ユ墭鐩樺凡瀛樺湪搴撳唴");
-                }
-            }
-
-            return (true, "鎴愬姛");
-        }
-
-        /// <summary>
-        /// 绌烘墭鐩樺叆搴撳畬鎴愬鐞�
-        /// </summary>
-        /// <param name="task">浠诲姟瀹炰綋瀵硅薄</param>
-        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        public WebResponseContent PalletInboundTaskCompleted(Dt_Task task)
-        {
-            Dt_StockInfo stockInfo = new Dt_StockInfo()
-            {
-                PalletCode = task.PalletCode,
-                LocationCode = task.TargetAddress,
-                StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt()
-            };
-            Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
-
-            CheckInboundCompleted(stockInfo, locationInfo);
-
-            _stockInfoRepository.AddData(stockInfo);
-
-            int beforeStatus = locationInfo.LocationStatus;
-            locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
-            _locationInfoRepository.UpdateData(locationInfo);
-
-
-            BaseDal.DeleteData(task);
-
-            _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
-
-            return WebResponseContent.Instance.OK();
+            _outStockLockInfoService = outStockLockInfoService;
         }
 
         public WebResponseContent InboundTaskCompleted(Dt_Task task)
         {
-            Dt_StockInfo stockInfo = _stockInfoRepository.GetStockInfo(task.PalletCode);
+            Dt_StockInfo stockInfo = _stockInfoService.Repository.GetStockInfo(task.PalletCode);
 
-            Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+            Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
 
             CheckInboundCompleted(stockInfo, locationInfo);
 
             stockInfo.LocationCode = locationInfo.LocationCode;
             stockInfo.StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt();
-            _stockInfoRepository.UpdateData(stockInfo);
+            _stockInfoService.Repository.UpdateData(stockInfo);
 
             int beforeStatus = locationInfo.LocationStatus;
             locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
-            _locationInfoRepository.UpdateData(locationInfo);
+            _locationInfoService.Repository.UpdateData(locationInfo);
 
             BaseDal.DeleteData(task);
 
@@ -355,58 +147,5 @@
             return WebResponseContent.Instance.Error();
         }
 
-        public WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
-        {
-            try
-            {
-                List<Dt_Task> tasks = new List<Dt_Task>();
-                (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundOrderDetailService.AssignStockOutbound(orderDetailId, stockSelectViews);
-                for (int i = 0; i < result.Item1.Count; i++)
-                {
-                    Dt_StockInfo stockInfo = result.Item1[i];
-
-                    if (stockInfo != null)
-                    {
-                        Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
-                        Dt_RoadwayInfo roadwayInfo = _roadwayInfoRepository.QueryFirst(x => x.RoadwayNo == locationInfo.RoadwayNo);
-                        if (roadwayInfo != null)
-                        {
-                            Dt_Task task = new()
-                            {
-                                CurrentAddress = stockInfo.LocationCode,
-                                Grade = 0,
-                                PalletCode = stockInfo.PalletCode,
-                                NextAddress = roadwayInfo.OutSCStationCode,
-                                Roadway = locationInfo.RoadwayNo,
-                                SourceAddress = stockInfo.LocationCode,
-                                TargetAddress = roadwayInfo.OutStationCode,
-                                TaskStatus = InTaskStatusEnum.InNew.ObjToInt(),
-                                TaskType = TaskTypeEnum.Outbound.ObjToInt(),
-                            };
-                            tasks.Add(task);
-                        }
-                    }
-                }
-                result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
-                result.Item3.ForEach(x =>
-                {
-                    x.Status = OutStockStatus.鍑哄簱涓�.ObjToInt();
-                });
-                List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetLocationInfos(result.Item3.Select(x => x.LocationCode).ToList());
-
-                _unitOfWorkManage.BeginTran();
-
-                BaseDal.AddData(tasks);
-                _outboundOrderDetailService.LockOutboundStockDataUpdate(result.Item1, result.Item2, result.Item3, locationInfos);
-                _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock.ObjToInt(), StockChangeType.Outbound.ObjToInt(), "", tasks.Select(x => x.TaskNum).ToList());
-                _unitOfWorkManage.CommitTran();
-                return WebResponseContent.Instance.OK();
-            }
-            catch (Exception ex)
-            {
-                _unitOfWorkManage.RollbackTran();
-                return WebResponseContent.Instance.Error(ex.Message);
-            }
-        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj"
index 1598a30..129d2e7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj"
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+锘�<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>
@@ -11,6 +11,7 @@
     <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" />
     <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
     <ProjectReference Include="..\WIDESEA_IStockRepository\WIDESEA_IStockRepository.csproj" />
+    <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
     <ProjectReference Include="..\WIDESEA_ITaskInfoService\WIDESEA_ITaskInfoService.csproj" />
   </ItemGroup>
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs"
index c41e0d5..a6582f4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs"
@@ -28,16 +28,16 @@
             return Service.LockOutboundStock(id, stockSelectViews);
         }
 
+        [HttpPost, Route("LockOutboundStocks")]
+        public WebResponseContent LockOutboundStocks([FromBody] int[] keys)
+        {
+            return Service.LockOutboundStock(keys);
+        }
+
         [HttpPost, Route("RevokeLockOutboundStock")]
         public WebResponseContent RevokeLockOutboundStock(int id)
         {
             return Service.RevokeLockOutboundStock(id);
-        }
-
-        [HttpPost, Route("AssignStockOutbound")]
-        public (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(int orderDetailId, [FromBody] List<StockSelectViewDTO> stockSelectViews)
-        {
-            return Service.AssignStockOutbound(orderDetailId, stockSelectViews);
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs"
index fa360fe..ed443cd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs"
@@ -6,6 +6,7 @@
 using WIDESEA_Core;
 using WIDESEA_Core.Authorization;
 using WIDESEA_Core.BaseController;
+using WIDESEA_Core.Caches;
 using WIDESEA_Core.Const;
 using WIDESEA_Core.Helper;
 using WIDESEA_Core.HttpContextUser;
@@ -21,10 +22,12 @@
     public class Sys_UserController : ApiBaseController<ISys_UserService, Sys_User>
     {
         private readonly IHttpContextAccessor _httpContextAccessor;
+        private readonly ICacheService _cacheService;
 
-        public Sys_UserController(ISys_UserService userService, IHttpContextAccessor httpContextAccessor) : base(userService)
+        public Sys_UserController(ISys_UserService userService, IHttpContextAccessor httpContextAccessor, ICacheService cacheService) : base(userService)
         {
             _httpContextAccessor = httpContextAccessor;
+            _cacheService = cacheService;
         }
 
         [HttpPost, Route("login"), AllowAnonymous]
@@ -81,6 +84,7 @@
                     UserName = App.User.UserName
                 };
                 string newToken = JwtHelper.IssueJwt(tokenModelJwt);
+                _cacheService.AddOrUpdate(tokenModelJwt.UserId.ToString(), newToken);
                 return responseContent = WebResponseContent.Instance.OK(data: newToken);
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index 5e09d81..404b53f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -17,22 +17,28 @@
         {
         }
 
-        [HttpPost, Route("GenerateInboundTask"), AllowAnonymous]
+        [HttpPost, Route("GenerateInboundTask")]
         public WebResponseContent GenerateInboundTask(string stationCode, int inboundType, string palletCode)
         {
             return Service.GenerateInboundTask(stationCode, inboundType, palletCode);
         }
 
-        [HttpPost, Route("TaskCompleted"), AllowAnonymous]
+        [HttpPost, Route("TaskCompleted")]
         public WebResponseContent TaskCompleted(int taskNum)
         {
             return Service.TaskCompleted(taskNum);
         }
 
-        [HttpPost, Route("GenerateOutboundTask"), AllowAnonymous]
+        [HttpPost, Route("GenerateOutboundTask")]
         public WebResponseContent GenerateOutboundTask(int id, List<StockSelectViewDTO> stockSelectViews)
         {
             return Service.GenerateOutboundTask(id, stockSelectViews);
         }
+
+        [HttpPost, Route("GenerateOutboundTasks")]
+        public WebResponseContent GenerateOutboundTasks([FromBody] int[] keys)
+        {
+            return Service.GenerateOutboundTask(keys);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
index 80e6a5f..44530ed 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
@@ -40,7 +40,7 @@
 builder.Services.AddAllOptionRegister();//读取配置文件
 builder.Services.AddMemoryCacheSetup();//缓存
 builder.Services.AddSqlsugarSetup();//SqlSugar 启动服务
-//builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
+builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
 builder.Services.AddDbSetup();//Db 启动服务
 
 builder.Services.AddAutoMapperSetup();

--
Gitblit v1.9.3