From d1a2afa67032339c2eb1019a02c6b6d036c0bdb1 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期一, 23 九月 2024 09:09:40 +0800
Subject: [PATCH] 1

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs                                     |  104 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs                                        |   37 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs                                        |   97 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs                                          |  107 +
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/21e966d8-e44a-432b-8c0b-3c4e5e7c05fd.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs                                  |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_MenuService.cs                                          |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs                                   |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs                                 |  179 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj                            |    2 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/79eb5ca9-e241-4647-98b5-bb5bc7256530.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs                                      |  144 +-
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs                                          |   43 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f65c354a-0e46-42e0-8d03-b1244d9e8a93.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs                            |  103 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs                                    |   46 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaRouterService.cs                                         |   21 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs                                        |   25 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaRouterService.cs                                       |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaRouter.cs                                       |   53 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/AreaInfoController.cs                         |   14 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/AGVTaskFeedBackModel.cs                                            |   15 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/AreaRouterRepository.cs                                   |   18 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs                                              |  222 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs                                        |    9 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs                                            |   22 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs                                    |   22 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                                          |    6 
 代码管理/WMS/WIDESEA_WMSClient/src/views/basic/locationInfo.vue                                                  |   19 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs                                            |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaRouterRepository.cs                                 |   14 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs                                    |   27 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs                                                  |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs                                      |   26 
 代码管理/WMS/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue                                                     |  195 ++-
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                                     |   58 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/CachePointRepository.cs                                   |   28 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs                                        |    5 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs                                   |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs                                             |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj                                        |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMaterielInfoService.cs                                     |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs                        |   20 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ICachePointService.cs                                       |   23 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/LocationInfoRepository.cs                                 |   11 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs                                     |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/CachePointService.cs                                         |   73 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs                                  |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ICachePointRepository.cs                                 |   17 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/RoadwayInfoRepository.cs                                  |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs                                        |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_RecordRepository/RecordRepository.cs                                      |   22 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemRepository/Sys_MenuRepository.cs                                    |    9 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IRoadwayInfoService.cs                                      |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaInfoService.cs                                           |    5 
 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue                                                     |  339 +++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs                                        |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskServiceExtendFunc.cs                                  |   15 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/stockView.js                                                  |   58 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs                                          |  112 -
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs                             |   49 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs                             |   41 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/SequenceEnum.cs                                                |   13 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs                                           |   12 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs                   |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IWarehouseService.cs                                        |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs                                           |   35 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs                                          |    3 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue                                     |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs                                            |   71 +
 代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js                                                            |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs                                      |  169 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaInfoService.cs                                         |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs                                        |   18 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs                                     |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs                                       |   50 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IRecordRepository/IRecordRepository.cs                                    |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs                                           |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                            |  166 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs                                                 |   34 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs                                  |   25 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockRepository.cs                                        |   22 
 /dev/null                                                                                                    |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs                                              |   22 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs                                                    |   56 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs                                          |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_RoadwayInfo.cs                                      |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs                                |   18 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs                                          |   22 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockRepository.cs                                      |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs                                      |   18 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CachePoint.cs                                       |   44 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs                        |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs                        |   11 
 94 files changed, 2,917 insertions(+), 515 deletions(-)

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 16c7215..a02362a 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"
@@ -3,7 +3,7 @@
     <vol-box
       v-model="showDetialBox"
       :lazy="true"
-      width="75%"
+      width="60%"
       :padding="15"
       title="鎸囧畾搴撳瓨"
     >
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockView.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockView.js"
new file mode 100644
index 0000000..a39e193
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockView.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js"
index 6bec015..904ba08 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js"
@@ -81,6 +81,10 @@
     path: '/task',
     name: 'task',
     component: () => import('@/views/taskinfo/task.vue')
+  }, {
+    path: '/stockView',
+    name: 'stockView',
+    component: () => import('@/views/stock/stockView.vue')
   }]
 
 export default viewgird
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/locationInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/locationInfo.vue"
index cdde3cd..32a449a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/locationInfo.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/locationInfo.vue"
@@ -64,7 +64,12 @@
         },
       ],
       [
-        { title: "璐т綅绫诲瀷", required: true, field: "locationType", type: "string" },
+        {
+          title: "璐т綅绫诲瀷",
+          required: true,
+          field: "locationType",
+          type: "string",
+        },
         {
           title: "璐т綅鐘舵��",
           required: true,
@@ -85,13 +90,13 @@
         },
       ],
       [
-      {
+        {
           title: "宸烽亾缂栧彿",
           required: true,
           field: "roadwayNo",
           type: "string",
         },
-      ]
+      ],
     ]);
     const searchFormFields = ref({
       locationCode: "",
@@ -125,14 +130,14 @@
         field: "locationCode",
         title: "璐т綅缂栧彿",
         type: "string",
-        width: 150,
+        width: 180,
         align: "left",
       },
       {
         field: "locationName",
         title: "璐т綅鍚嶇О",
         type: "string",
-        width: 150,
+        width: 220,
         align: "left",
       },
       {
@@ -148,6 +153,7 @@
         type: "string",
         width: 90,
         align: "left",
+        hidden: true,
       },
       {
         field: "column",
@@ -155,6 +161,7 @@
         type: "int",
         width: 120,
         align: "left",
+        hidden: true,
       },
       {
         field: "layer",
@@ -162,6 +169,7 @@
         type: "string",
         width: 200,
         align: "left",
+        hidden: true,
       },
       {
         field: "depth",
@@ -169,6 +177,7 @@
         type: "string",
         width: 180,
         align: "left",
+        hidden: true,
       },
       {
         field: "locationType",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue"
new file mode 100644
index 0000000..9799193
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue"
@@ -0,0 +1,339 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/stock/stockView.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "stockId",
+      footer: "Foots",
+      cnName: "搴撳瓨瑙嗗浘",
+      name: "stockView",
+      url: "/stockView/",
+      sortName: "stockId",
+    });
+    const editFormFields = ref({
+      palletCode: "",
+      locationCode: "",
+      locationName: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鎵樼洏缂栧彿",
+          required: true,
+          field: "palletCode",
+          type: "string",
+        },
+        {
+          title: "璐т綅缂栧彿",
+          required: true,
+          field: "locationCode",
+          type: "string",
+        },
+        {
+          title: "璐т綅鍚嶇О",
+          required: true,
+          field: "locationName",
+          type: "string",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      palletCode: "",
+      locationCode: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鎵樼洏缂栧彿", field: "palletCode" },
+        { title: "璐т綅缂栧彿", field: "locationCode" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "stockId",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "palletCode",
+        title: "鎵樼洏缂栧彿",
+        type: "string",
+        width: 150,
+        link: true,
+        align: "left",
+      },
+      {
+        field: "locationCode",
+        title: "璐т綅缂栧彿",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "locationName",
+        title: "璐т綅鍚嶇О",
+        type: "string",
+        width: 220,
+        align: "left",
+      },
+      {
+        field: "roadwayNo",
+        title: "宸烽亾缂栧彿",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "row",
+        title: "璐т綅琛�",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "column",
+        title: "璐т綅鍒�",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "layer",
+        title: "璐т綅灞�",
+        type: "string",
+        width: 200,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "depth",
+        title: "璐т綅娣卞害",
+        type: "string",
+        width: 180,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "stockStatus",
+        title: "搴撳瓨鐘舵��",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "locationType",
+        title: "璐т綅绫诲瀷",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "locationStatus",
+        title: "璐т綅鐘舵��",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "enalbeStatus",
+        title: "绂佺敤鐘舵��",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "isFull",
+        title: "鏄惁婊$洏",
+        type: "string",
+        width: 150,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "搴撳瓨鏄庣粏淇℃伅",
+      table: "StockInfoDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "stockId",
+          title: "搴撳瓨淇℃伅涓婚敭",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "serialNumber",
+          title: "搴忓垪鍙�",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "stockQuantity",
+          title: "搴撳瓨鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "outboundQuantity",
+          title: "鍑哄簱鏁伴噺",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "status",
+          title: "搴撳瓨鏄庣粏鐘舵��",
+          type: "string",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue"
index 93feed5..7b1485d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/system/Sys_Menu.vue"
@@ -1,14 +1,32 @@
 <template>
   <div class="menu-container">
     <!-- <el-input/> -->
-    <vol-box :width="940" :mask="true" :height="500" title="鍥炬爣鍒楄〃" v-model="model">
+    <vol-box
+      :width="940"
+      :mask="true"
+      :height="500"
+      title="鍥炬爣鍒楄〃"
+      v-model="model"
+    >
       <Icons :onSelect="onSelect"></Icons>
       <template #footer>
-        <el-button type="primary" size="mini" @click="model = false">纭� 璁�</el-button>
+        <el-button type="primary" size="mini" @click="model = false"
+          >纭� 璁�</el-button
+        >
       </template>
     </vol-box>
-    <vol-box :width="600" :mask="true" :height="270" title="鍏朵粬鏉冮檺" v-model="actionModel">
-      <vol-form ref="actionForm" :formRules="actionOptions" :formFields="actionFields">
+    <vol-box
+      :width="600"
+      :mask="true"
+      :height="270"
+      title="鍏朵粬鏉冮檺"
+      v-model="actionModel"
+    >
+      <vol-form
+        ref="actionForm"
+        :formRules="actionOptions"
+        :formFields="actionFields"
+      >
         <template #header>
           <div>
             <el-alert show-icon type="success">
@@ -20,7 +38,9 @@
         </template>
       </vol-form>
       <template #footer>
-        <el-button type="primary" size="mini" @click="otherAction">纭� 璁�</el-button>
+        <el-button type="primary" size="mini" @click="otherAction"
+          >纭� 璁�</el-button
+        >
       </template>
     </vol-box>
 
@@ -28,12 +48,21 @@
     <div class="menu-left">
       <div class="m-title"><i class="el-icon-warning-outline"></i>鑿滃崟鍒楄〃</div>
       <el-scrollbar style="height: 100%; width: 200px">
-        <VolMenu :onSelect="getTreeItem" :list="tree" :isCollapse="false"></VolMenu>
+        <VolMenu
+          :onSelect="getTreeItem"
+          :list="tree"
+          :isCollapse="false"
+        ></VolMenu>
       </el-scrollbar>
     </div>
     <div class="menu-right">
       <el-scrollbar style="height: 100%">
-        <el-alert title="鑿滃崟閰嶇疆璇存槑" type="warning" :closable="false" show-icon>
+        <el-alert
+          title="鑿滃崟閰嶇疆璇存槑"
+          type="warning"
+          :closable="false"
+          show-icon
+        >
           <div>
             1銆佸鏋滄槸鐢ㄤ唬鐮佺敓鍣ㄧ敓鎴愮殑Vue椤甸潰,Url涓篤ue椤圭洰涓璼rc->router->viewGrid.js瀵瑰簲琛ㄥ悕鐨刾ath灞炴��
           </div>
@@ -42,31 +71,56 @@
           </div>
         </el-alert>
         <div style="padding: 0px 30px 0 20px">
-          <vol-form class="form-content" ref="form" :formRules="options" :formFields="fields">
+          <vol-form
+            class="form-content"
+            ref="form"
+            :formRules="options"
+            :formFields="fields"
+          >
           </vol-form>
           <div>
             <div class="auth-group">
               <label style="width: 100px">鏉冮檺鎸夐挳锛�</label>
               <div class="ck">
                 <el-checkbox-group v-model="actions">
-                  <el-checkbox v-for="(item, index) in action" :key="index" :label="item.value">{{ item.text + "(" +
-                    item.value + ")" }}</el-checkbox>
+                  <el-checkbox
+                    v-for="(item, index) in action"
+                    :key="index"
+                    :label="item.value"
+                    >{{ item.text + "(" + item.value + ")" }}</el-checkbox
+                  >
                 </el-checkbox-group>
               </div>
             </div>
           </div>
           <div style="padding-left: 100px">
-            <el-button @click="handleCheckAll" size="mini" type="success" plain><i class="el-icon-check"></i>鍏�
-              閫�</el-button>
-            <el-button @click="actionModel = true" size="mini" type="primary" plain><i
-                class="el-icon-plus"></i>鍏朵粬鏉冮檺</el-button>
+            <el-button @click="handleCheckAll" size="mini" type="success" plain
+              ><i class="el-icon-check"></i>鍏� 閫�</el-button
+            >
+            <el-button
+              @click="actionModel = true"
+              size="mini"
+              type="primary"
+              plain
+              ><i class="el-icon-plus"></i>鍏朵粬鏉冮檺</el-button
+            >
           </div>
           <div class="m-btn">
-            <el-button type="primary" @click="save"><i class="el-icon-check"></i>淇濆瓨</el-button>
-            <el-button type="success" @click="add"><i class="el-icon-plus"></i>鏂板缓</el-button>
-            <el-button type="warning" @click="addChild"><i class="el-icon-plus"></i>娣诲姞瀛愮骇</el-button>
-            <el-button type="primary" plain @click="addBrother"><i class="el-icon-circle-plus"></i> 娣诲姞鍚岀骇</el-button>
-            <el-button type="warning" plain @click="delMenu"><i class="el-icon-delete"></i> 鍒犻櫎鑿滃崟</el-button>
+            <el-button type="primary" @click="save"
+              ><i class="el-icon-check"></i>淇濆瓨</el-button
+            >
+            <el-button type="success" @click="add"
+              ><i class="el-icon-plus"></i>鏂板缓</el-button
+            >
+            <el-button type="warning" @click="addChild"
+              ><i class="el-icon-plus"></i>娣诲姞瀛愮骇</el-button
+            >
+            <el-button type="primary" plain @click="addBrother"
+              ><i class="el-icon-circle-plus"></i> 娣诲姞鍚岀骇</el-button
+            >
+            <el-button type="warning" plain @click="delMenu"
+              ><i class="el-icon-delete"></i> 鍒犻櫎鑿滃崟</el-button
+            >
           </div>
         </div>
       </el-scrollbar>
@@ -176,7 +230,11 @@
         tigger = true;
         let menuId = this.fields.menuId;
         this.http
-          .post("/api/Sys_Menu/delMenu?menuId=" + menuId, {}, "姝e湪鍒犻櫎鏁版嵁....")
+          .post(
+            "/api/Sys_Menu/delMenu?menuId=" + menuId,
+            {},
+            "姝e湪鍒犻櫎鏁版嵁...."
+          )
           .then((x) => {
             if (!x.status) return this.$Message.error(x.message);
             this.$refs.form.reset();
@@ -227,7 +285,7 @@
             orderNo: this.fields.orderNo,
             parentId: this.fields.parentId,
           });
-          console.log(this.tree)
+          console.log(this.tree);
         });
       });
     },
@@ -246,11 +304,9 @@
     onOpenChange(node) {
       if (node.length == 0) return;
       this.getTreeItem(node[node.length > 1 ? node.length - 1 : 0]);
-    }
+    },
   },
-  created(){
-
-  },
+  created() {},
   setup() {
     const tree = ref([]);
     const actionValues = ref([]);
@@ -270,10 +326,10 @@
     });
     const initTree = () => {
       http.post("/api/Sys_Menu/getMenu", {}, true).then((x) => {
-        x.forEach(item => {
-          item.icon = 'el-icon-menu';
-        })
-        
+        x.forEach((item) => {
+          item.icon = "el-icon-menu";
+        });
+
         tree.value = x;
       });
     };
@@ -294,9 +350,7 @@
       icon: "",
       orderNo: "",
       enable: 1,
-      createDate: "",
-      creator: "",
-      modifyDate: "",
+      menuType: 0,
     });
 
     const actionFields = ref({
@@ -379,19 +433,18 @@
             { key: 0, value: "绂佺敤" },
           ],
         },
-        // {
-        //   // 2022.03.26澧炵Щ鍔ㄧ鍔犺彍鍗曠被鍨�
-        //   title: "鑿滃崟绫诲瀷",
-        //   field: "menuType",
-        //   required: true,
-        //   type: "select",
-        //   colSize: 4,
-        //   data: [
-        //     { key: 1, value: "WCS鑿滃崟" },
-        //     { key: 0, value: "WMS鑿滃崟" },
-        //     { key: 99, value: "鍏辩敤" }
-        //   ],
-        // },
+        {
+          // 2022.03.26澧炵Щ鍔ㄧ鍔犺彍鍗曠被鍨�
+          title: "鑿滃崟绫诲瀷",
+          field: "menuType",
+          required: true,
+          type: "select",
+          colSize: 4,
+          data: [
+            { key: 0, value: "PC绔彍鍗�" },
+            { key: 1, value: "绉诲姩绔彍鍗�" },
+          ],
+        },
         {
           title: "鍥炬爣Icon",
           field: "icon",
@@ -426,33 +479,35 @@
     ]);
     const refForm = ref();
     const getTreeItem = (node) => {
-      http.post("api/Sys_Menu/getTreeItem?menuId=" + node, {}, true).then((x) => {
-        try {
-          fields.value.icon = x.icon;
-          if (x.auth) {
-            x.auth = JSON.parse(x.auth);
-            action.value.splice(8, action.value.length);
+      http
+        .post("api/Sys_Menu/getTreeItem?menuId=" + node, {}, true)
+        .then((x) => {
+          try {
+            fields.value.icon = x.icon;
+            if (x.auth) {
+              x.auth = JSON.parse(x.auth);
+              action.value.splice(8, action.value.length);
 
-            actions.value = x.auth.map((element) => {
-              if (actionValues.value.indexOf(element.value) == -1) {
-                action.value.push(element);
-              }
-              return element.value;
-            });
-          } else {
-            action.value.splice(8, action.value.length);
+              actions.value = x.auth.map((element) => {
+                if (actionValues.value.indexOf(element.value) == -1) {
+                  action.value.push(element);
+                }
+                return element.value;
+              });
+            } else {
+              action.value.splice(8, action.value.length);
+              x.auth = [];
+              fields.value.icon = "";
+              actions.value = [];
+            }
+          } catch (error) {
+            console.log("鑿滃崟鍔熻兘鏉冮檺杞崲鎴怞SON澶辫触:" + x.auth);
             x.auth = [];
-            fields.value.icon = "";
+            //   this.icon = "";
             actions.value = [];
           }
-        } catch (error) {
-          console.log("鑿滃崟鍔熻兘鏉冮檺杞崲鎴怞SON澶辫触:" + x.auth);
-          x.auth = [];
-          //   this.icon = "";
-          actions.value = [];
-        }
-        refForm.value.reset(x);
-      });
+          refForm.value.reset(x);
+        });
     };
     return {
       tree,
@@ -468,7 +523,7 @@
       actionOptions,
       options,
       form: refForm,
-      getTreeItem
+      getTreeItem,
     };
   },
   data() {
@@ -521,7 +576,7 @@
       margin-top: 1px;
     }
 
-    >div {
+    > div {
       float: left;
     }
   }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/21e966d8-e44a-432b-8c0b-3c4e5e7c05fd.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/21e966d8-e44a-432b-8c0b-3c4e5e7c05fd.vsidx"
new file mode 100644
index 0000000..8d49e9a
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/21e966d8-e44a-432b-8c0b-3c4e5e7c05fd.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/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"
deleted file mode 100644
index 53f1235..0000000
--- "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"
+++ /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/79eb5ca9-e241-4647-98b5-bb5bc7256530.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/79eb5ca9-e241-4647-98b5-bb5bc7256530.vsidx"
new file mode 100644
index 0000000..8cb6306
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/79eb5ca9-e241-4647-98b5-bb5bc7256530.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"
deleted file mode 100644
index 8d99cd0..0000000
--- "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"
+++ /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"
deleted file mode 100644
index 0420c48..0000000
--- "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"
+++ /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/f65c354a-0e46-42e0-8d03-b1244d9e8a93.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f65c354a-0e46-42e0-8d03-b1244d9e8a93.vsidx"
new file mode 100644
index 0000000..173e40a
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f65c354a-0e46-42e0-8d03-b1244d9e8a93.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/AreaRouterRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/AreaRouterRepository.cs"
new file mode 100644
index 0000000..b641e87
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/AreaRouterRepository.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_IBasicRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicRepository
+{
+    public class AreaRouterRepository : RepositoryBase<Dt_AreaRouter>, IAreaRouterRepository
+    {
+        public AreaRouterRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs"
new file mode 100644
index 0000000..b5c95f8
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs"
@@ -0,0 +1,37 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IBasicRepository;
+
+namespace WIDESEA_BasicRepository
+{
+    public class BasicRepository : IBasicRepository
+    {
+        public IAreaInfoRepository AreaInfoRepository { get; }
+
+        public ILocationInfoRepository LocationInfoRepository { get; }
+
+        public IMaterielInfoRepository MaterielInfoRepository { get; }
+
+        public IRoadwayInfoRepository RoadwayInfoRepository { get; }
+
+        public IWarehouseRepository WarehouseRepository { get; }
+
+        public IAreaRouterRepository AreaRouterRepository { get; }
+
+        public ICachePointRepository CachePointRepository { get; }
+
+        public BasicRepository(IAreaInfoRepository areaInfoRepository, ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IRoadwayInfoRepository roadwayInfoRepository, IWarehouseRepository warehouseRepository, IAreaRouterRepository areaRouterRepository, ICachePointRepository cachePointRepository)
+        {
+            AreaInfoRepository = areaInfoRepository;
+            LocationInfoRepository = locationInfoRepository;
+            MaterielInfoRepository = materielInfoRepository;
+            RoadwayInfoRepository = roadwayInfoRepository;
+            WarehouseRepository = warehouseRepository;
+            AreaRouterRepository = areaRouterRepository;
+            CachePointRepository = cachePointRepository;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/CachePointRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/CachePointRepository.cs"
new file mode 100644
index 0000000..f8006f8
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/CachePointRepository.cs"
@@ -0,0 +1,28 @@
+锘�
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Basic;
+using WIDESEA_IBasicRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicRepository
+{
+    public class CachePointRepository : RepositoryBase<Dt_CachePoint>, ICachePointRepository
+    {
+        public CachePointRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+
+        public List<CachePointGroupDTO> GetCachePointGroups(int areaId, LocationStatusEnum locationAStatus, LocationStatusEnum locationBStatus)
+        {
+           return Db.Queryable<Dt_CachePoint>().Where(a => a.Depth == 1 && a.AreaId == areaId && a.PointStatus == locationAStatus.ObjToInt() && a.PointStatus == locationAStatus.ObjToInt()).InnerJoin(Db.Queryable<Dt_CachePoint>().Where(b => b.Depth == 2 && b.AreaId == areaId && b.PointStatus == locationBStatus.ObjToInt() && b.PointStatus == locationBStatus.ObjToInt()), (a, b) => a.Column == b.Column && a.AreaId == b.AreaId && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1).Select((a, b) => new CachePointGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnableStatus, EnableStatusB = b.EnableStatus, IdA = a.Id, IdB = b.Id, PointCodeA = a.PointCode, PointCodeB = b.PointCode, PointStatusA = a.PointStatus, PointStatusB = b.PointStatus, PointTypeA = a.PointType, PointTypeB = b.PointType }).ToList();
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/LocationInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/LocationInfoRepository.cs"
index 9aa9d6f..1663761 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/LocationInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/LocationInfoRepository.cs"
@@ -22,12 +22,17 @@
 
         public List<LocationGroupDTO> GetAllLocationGroups(string roadway)
         {
-            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>((a, b) => a.Column == b.Column && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1, (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnalbeStatus, EnableStatusB = b.EnalbeStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType }, a => a.Depth == 1 && a.RoadwayNo == roadway, b => b.Depth == 2 && b.RoadwayNo == roadway, x => true);
+            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>((a, b) => a.Column == b.Column && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1, (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnableStatus, EnableStatusB = b.EnableStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType }, a => a.Depth == 1 && a.RoadwayNo == roadway, b => b.Depth == 2 && b.RoadwayNo == roadway, x => true);
         }
 
         public List<LocationGroupDTO> GetLocationGroups(string roadway, LocationStatusEnum locationAStatus, LocationStatusEnum locationBStatus)
         {
-            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>((a, b) => a.Column == b.Column && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1, (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnalbeStatus, EnableStatusB = b.EnalbeStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType }, a => a.Depth == 1 && a.RoadwayNo == roadway && a.LocationStatus == locationAStatus.ObjToInt(), b => b.Depth == 2 && b.RoadwayNo == roadway && b.LocationStatus == locationBStatus.ObjToInt(), x => true);
+            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>(
+                (a, b) => a.Column == b.Column && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1, 
+                (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnableStatus, EnableStatusB = b.EnableStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType }, 
+                a => a.Depth == 1 && a.RoadwayNo == roadway && a.LocationStatus == locationAStatus.ObjToInt(), 
+                b => b.Depth == 2 && b.RoadwayNo == roadway && b.LocationStatus == locationBStatus.ObjToInt(), 
+                x => true);
         }
 
         public override bool UpdateData(Dt_LocationInfo entity)
@@ -37,7 +42,7 @@
 
         public List<string> GetCanOutLocationCodes(List<string> roadways, List<int> areaIds)
         {
-            return QueryData(x => x.LocationCode, x => roadways.Contains(x.RoadwayNo) && (areaIds.Contains(x.AreaId) || x.AreaId == 0) && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || x.EnalbeStatus == LocationEnalbeStatusEnum.Normal.ObjToInt())).Distinct().ToList();
+            return QueryData(x => x.LocationCode, x => roadways.Contains(x.RoadwayNo) && (areaIds.Contains(x.AreaId) || x.AreaId == 0) && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == LocationEnalbeStatusEnum.Normal.ObjToInt())).Distinct().ToList();
         }
 
         public List<Dt_LocationInfo> GetLocationInfos(List<string> locationCodes)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/RoadwayInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/RoadwayInfoRepository.cs"
index fc8acad..edeab42 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/RoadwayInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/RoadwayInfoRepository.cs"
@@ -20,6 +20,6 @@
         /// <summary>
         /// 鍙嚭搴撶殑宸烽亾缂栧彿闆嗗悎
         /// </summary>
-        public List<string> CanOutRoadwayNos => QueryData(x => x.RoadwayNo, x => x.EnalbeStatus == RoadwayStatusEnum.Normal.ObjToInt() || x.EnalbeStatus == RoadwayStatusEnum.OnlyOut.ObjToInt()).Distinct().ToList();
+        public List<string> CanOutRoadwayNos => QueryData(x => x.RoadwayNo, x => x.EnableStatus == RoadwayStatusEnum.Normal.ObjToInt() || x.EnableStatus == RoadwayStatusEnum.OnlyOut.ObjToInt()).Distinct().ToList();
     }
 }
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 a6aedaa..3d498d1 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"
@@ -3,7 +3,10 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
 using WIDESEA_IBasicRepository;
 using WIDESEA_IBasicService;
 using WIDESEA_Model.Models;
@@ -17,5 +20,7 @@
         }
 
         public IAreaInfoRepository Repository => BaseDal;
+
+        
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaRouterService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaRouterService.cs"
new file mode 100644
index 0000000..65952e5
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/AreaRouterService.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicService
+{
+    public class AreaRouterService : ServiceBase<Dt_AreaRouter, IAreaRouterRepository>, IAreaRouterService
+    {
+        public AreaRouterService(IAreaRouterRepository BaseDal) : base(BaseDal)
+        {
+        }
+
+        public IAreaRouterRepository Repository => BaseDal;
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs"
new file mode 100644
index 0000000..72c4f21
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs"
@@ -0,0 +1,222 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_BasicService
+{
+    public class BasicService : IBasicService
+    {
+        public IAreaInfoService AreaInfoService { get; }
+
+        public ILocationInfoService LocationInfoService { get; }
+
+        public IMaterielInfoService MaterielInfoService { get; }
+
+        public IRoadwayInfoService RoadwayInfoService { get; }
+
+        public IWarehouseService WarehouseService { get; }
+
+        public IAreaRouterService AreaRouterService { get; }
+
+        public ICachePointService CachePointService { get; }
+
+        public BasicService(IAreaInfoService areaInfoService, ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IRoadwayInfoService roadwayInfoService, IWarehouseService warehouseService, IAreaRouterService areaRouterService, ICachePointService cachePointService)
+        {
+            AreaInfoService = areaInfoService;
+            LocationInfoService = locationInfoService;
+            MaterielInfoService = materielInfoService;
+            RoadwayInfoService = roadwayInfoService;
+            WarehouseService = warehouseService;
+            AreaRouterService = areaRouterService;
+            CachePointService = cachePointService;
+        }
+
+        #region AreaInfo
+        public WebResponseContent AreaEnableStatus(int[] keys)
+        {
+            List<Dt_AreaInfo> areaInfos = AreaInfoService.Repository.QueryData(x => keys.Contains(x.Id));
+            areaInfos.ForEach(x =>
+            {
+                x.AreaStatus = EnableEnum.Enable.ObjToInt();
+            });
+            AreaInfoService.Repository.UpdateData(areaInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent AreaDisableStatus(int[] keys)
+        {
+            List<Dt_AreaInfo> areaInfos = AreaInfoService.Repository.QueryData(x => keys.Contains(x.Id));
+            areaInfos.ForEach(x =>
+            {
+                x.AreaStatus = EnableEnum.Disable.ObjToInt();
+            });
+            AreaInfoService.Repository.UpdateData(areaInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent AreaEnableStatus(int key)
+        {
+            return AreaEnableStatus(new int[] { key });
+        }
+
+        public WebResponseContent AreaDisableStatus(int key)
+        {
+            return AreaDisableStatus(new int[] { key });
+        }
+        #endregion
+
+        #region CachePoint
+        public WebResponseContent CachePointEnableStatus(int[] keys)
+        {
+            List<Dt_CachePoint> cachePoints = CachePointService.Repository.QueryData(x => keys.Contains(x.Id));
+            cachePoints.ForEach(x =>
+            {
+                x.EnableStatus = EnableEnum.Enable.ObjToInt();
+            });
+            CachePointService.Repository.UpdateData(cachePoints);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent CachePointDisableStatus(int[] keys)
+        {
+            List<Dt_CachePoint> cachePoints = CachePointService.Repository.QueryData(x => keys.Contains(x.Id));
+            cachePoints.ForEach(x =>
+            {
+                x.EnableStatus = EnableEnum.Disable.ObjToInt();
+            });
+            CachePointService.Repository.UpdateData(cachePoints);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent CachePointEnableStatus(int key)
+        {
+            return CachePointEnableStatus(new int[] { key });
+        }
+
+        public WebResponseContent CachePointDisableStatus(int key)
+        {
+            return CachePointDisableStatus(new int[] { key });
+        }
+        #endregion
+
+        #region LocationInfo
+        public WebResponseContent LocationEnableStatus(int[] keys)
+        {
+            List<Dt_LocationInfo> locationInfos = LocationInfoService.Repository.QueryData(x => keys.Contains(x.Id));
+            locationInfos.ForEach(x =>
+            {
+                x.EnableStatus = EnableEnum.Enable.ObjToInt();
+            });
+            LocationInfoService.Repository.UpdateData(locationInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent LocationDisableStatus(int[] keys)
+        {
+            List<Dt_LocationInfo> locationInfos = LocationInfoService.Repository.QueryData(x => keys.Contains(x.Id));
+            locationInfos.ForEach(x =>
+            {
+                x.EnableStatus = EnableEnum.Disable.ObjToInt();
+            });
+            LocationInfoService.Repository.UpdateData(locationInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent LocationEnableStatus(int key)
+        {
+            return LocationEnableStatus(new int[] { key });
+        }
+
+        public WebResponseContent LocationDisableStatus(int key)
+        {
+            return LocationDisableStatus(new int[] { key });
+        }
+        #endregion
+
+        #region RoadwayInfo
+        public WebResponseContent RoadwayEnableStatus(int[] keys)
+        {
+            List<Dt_RoadwayInfo> roadwayInfos = RoadwayInfoService.Repository.QueryData(x => keys.Contains(x.Id));
+            roadwayInfos.ForEach(x =>
+            {
+                x.EnableStatus = EnableEnum.Enable.ObjToInt();
+            });
+            RoadwayInfoService.Repository.UpdateData(roadwayInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent RoadwayDisableStatus(int[] keys)
+        {
+            List<Dt_RoadwayInfo> roadwayInfos = RoadwayInfoService.Repository.QueryData(x => keys.Contains(x.Id));
+            roadwayInfos.ForEach(x =>
+            {
+                x.EnableStatus = EnableEnum.Disable.ObjToInt();
+            });
+            RoadwayInfoService.Repository.UpdateData(roadwayInfos);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent RoadwayEnableStatus(int key)
+        {
+            return RoadwayEnableStatus(new int[] { key });
+        }
+
+        public WebResponseContent RoadwayDisableStatus(int key)
+        {
+            return RoadwayDisableStatus(new int[] { key });
+        }
+        #endregion
+
+        #region Warehouse
+        public WebResponseContent WarehouseEnableStatus(int[] keys)
+        {
+            List<Dt_Warehouse> warehouses = WarehouseService.Repository.QueryData(x => keys.Contains(x.Id));
+            warehouses.ForEach(x =>
+            {
+                x.WarehouseStatus = EnableEnum.Enable.ObjToInt();
+            });
+            WarehouseService.Repository.UpdateData(warehouses);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent WarehouseDisableStatus(int[] keys)
+        {
+            List<Dt_Warehouse> warehouses = WarehouseService.Repository.QueryData(x => keys.Contains(x.Id));
+            warehouses.ForEach(x =>
+            {
+                x.WarehouseStatus = EnableEnum.Disable.ObjToInt();
+            });
+            WarehouseService.Repository.UpdateData(warehouses);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        public WebResponseContent WarehouseEnableStatus(int key)
+        {
+            return WarehouseEnableStatus(new int[] { key });
+        }
+
+        public WebResponseContent WarehouseDisableStatus(int key)
+        {
+            return WarehouseDisableStatus(new int[] { key });
+        }
+        #endregion
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/CachePointService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/CachePointService.cs"
new file mode 100644
index 0000000..a9bd2be
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/CachePointService.cs"
@@ -0,0 +1,73 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Basic;
+using WIDESEA_IBasicRepository;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_BasicService
+{
+    public class CachePointService : ServiceBase<Dt_CachePoint, ICachePointRepository>, ICachePointService
+    {
+        public CachePointService(ICachePointRepository BaseDal) : base(BaseDal)
+        {
+        }
+
+        public ICachePointRepository Repository => BaseDal;
+
+        private readonly Dictionary<string, OrderByType> _emptyAssignOrderBy = new()
+        {
+            { nameof(Dt_CachePoint.Depth), OrderByType.Desc },
+            { nameof(Dt_CachePoint.Column), OrderByType.Asc },
+            { nameof(Dt_CachePoint.Row), OrderByType.Asc },
+        };
+
+        public Dt_CachePoint? AssignCachePoint(int areaId)
+        {
+            List<CachePointGroupDTO> cachePointGroups = Repository.GetCachePointGroups(areaId, LocationStatusEnum.InStock, LocationStatusEnum.Free);
+            if (cachePointGroups != null && cachePointGroups.Count > 0)
+            {
+                CachePointGroupDTO? pointGroupDTO = cachePointGroups.FirstOrDefault(x => x.EnableStatusB == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatusB == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = pointGroupDTO?.IdB ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
+            }
+            cachePointGroups = Repository.GetCachePointGroups(areaId, LocationStatusEnum.Free, LocationStatusEnum.Free);
+            if (cachePointGroups != null && cachePointGroups.Count > 0)
+            {
+                CachePointGroupDTO? pointGroupDTO = cachePointGroups.FirstOrDefault(x => x.EnableStatusA == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatusA == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = pointGroupDTO?.IdA ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
+            }
+
+            return BaseDal.QueryFirst(x => x.PointStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == LocationEnalbeStatusEnum.Normal.ObjToInt() && x.AreaId == areaId), _emptyAssignOrderBy);
+        }
+
+        public Dt_CachePoint? GetIbStockCachePoint(int areaId)
+        {
+            List<CachePointGroupDTO> cachePointGroups = Repository.GetCachePointGroups(areaId, LocationStatusEnum.InStock, LocationStatusEnum.Free);
+            if (cachePointGroups != null && cachePointGroups.Count > 0)
+            {
+                CachePointGroupDTO? pointGroupDTO = cachePointGroups.FirstOrDefault(x => x.EnableStatusA == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || x.EnableStatusA == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = pointGroupDTO?.IdA ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
+            }
+            cachePointGroups = Repository.GetCachePointGroups(areaId, LocationStatusEnum.InStock, LocationStatusEnum.InStock);
+            if (cachePointGroups != null && cachePointGroups.Count > 0)
+            {
+                CachePointGroupDTO? pointGroupDTO = cachePointGroups.FirstOrDefault(x => x.EnableStatusB == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || x.EnableStatusB == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = pointGroupDTO?.IdB ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
+            }
+
+            return BaseDal.QueryFirst(x => x.PointStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == LocationEnalbeStatusEnum.Normal.ObjToInt() && x.AreaId == areaId), _emptyAssignOrderBy);
+        }
+    }
+}
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 5b0b8d9..1a043f5 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"
@@ -18,9 +18,7 @@
 {
     public class LocationInfoService : ServiceBase<Dt_LocationInfo, ILocationInfoRepository>, ILocationInfoService
     {
-        private readonly IAreaInfoRepository _areaInfoRepository;
-        private readonly IWarehouseRepository _warehouseRepository;
-        private readonly IRoadwayInfoRepository _roadwayInfoRepository;
+        private readonly IBasicRepository _basicRepository;
 
         private Dictionary<string, OrderByType> _emptyAssignOrderBy = new Dictionary<string, OrderByType>()
         {
@@ -32,11 +30,9 @@
 
         public ILocationInfoRepository Repository => BaseDal;
 
-        public LocationInfoService(ILocationInfoRepository BaseDal, IAreaInfoRepository areaInfoRepository, IWarehouseRepository warehouseRepository, IRoadwayInfoRepository roadwayInfoRepository) : base(BaseDal)
+        public LocationInfoService(ILocationInfoRepository BaseDal, IBasicRepository basicRepository) : base(BaseDal)
         {
-            _areaInfoRepository = areaInfoRepository;
-            _warehouseRepository = warehouseRepository;
-            _roadwayInfoRepository = roadwayInfoRepository;
+            _basicRepository = basicRepository;
         }
 
         public override WebResponseContent AddData(SaveModel saveModel)
@@ -48,17 +44,17 @@
         {
             try
             {
-                Dt_RoadwayInfo roadwayInfo = _roadwayInfoRepository.QueryFirst(x => x.InStationCode == stationCode) ?? throw new Exception("鏈壘鍒拌绔欏彴瀵瑰簲鐨勫贩閬擄紝璇锋鏌ュ熀纭�閰嶇疆淇℃伅");
-                if (roadwayInfo.EnalbeStatus != RoadwayStatusEnum.Normal.ObjToInt() && roadwayInfo.EnalbeStatus != RoadwayStatusEnum.OnlyIn.ObjToInt())
+                Dt_RoadwayInfo roadwayInfo = _basicRepository.RoadwayInfoRepository.QueryFirst(x => x.InStationCode == stationCode) ?? throw new Exception("鏈壘鍒拌绔欏彴瀵瑰簲鐨勫贩閬擄紝璇锋鏌ュ熀纭�閰嶇疆淇℃伅");
+                if (roadwayInfo.EnableStatus != RoadwayStatusEnum.Normal.ObjToInt() && roadwayInfo.EnableStatus != RoadwayStatusEnum.OnlyIn.ObjToInt())
                 {
                     throw new Exception("璇ュ贩閬撲笉鍙叆搴擄紝璇锋鏌ュ贩閬撶鐢ㄤ俊鎭�");
                 }
-                if (roadwayInfo.WarehouseId > 0)
+                if (roadwayInfo.AreaId > 0)
                 {
-                    Dt_Warehouse warehouse = _warehouseRepository.QueryFirst(x => x.Id == roadwayInfo.WarehouseId);
-                    if (warehouse != null && warehouse.WarehouseStatus == EnableEnum.Disable.ObjToInt())
+                    Dt_AreaInfo areaInfo = _basicRepository.AreaInfoRepository.QueryFirst(x => x.Id == roadwayInfo.AreaId);
+                    if (areaInfo != null && areaInfo.AreaStatus == EnableEnum.Disable.ObjToInt())
                     {
-                        throw new Exception("浠撳簱琚鐢紝涓嶅彲鍏ュ簱");
+                        throw new Exception("鍖哄煙琚鐢紝涓嶅彲鍏ュ簱");
                     }
                 }
                 if (inboundType == TaskTypeEnum.PalletInbound.ObjToInt())//绌虹洏鍏ュ簱鍒嗛厤閫昏緫
@@ -80,34 +76,42 @@
 
         private Dt_LocationInfo EmptyAssignLocation(string roadway)
         {
-            List<LocationGroupDTO> locationGroups = BaseDal.GetLocationGroups(roadway, LocationStatusEnum.Free, LocationStatusEnum.Pallet);
+            List<LocationGroupDTO> locationGroups = BaseDal.GetLocationGroups(roadway, LocationStatusEnum.Pallet, LocationStatusEnum.Free);
             if (locationGroups != null && locationGroups.Count > 0)
             {
-                return BaseDal.QueryFirst(x => x.Id == locationGroups.FirstOrDefault().IdA);
+                LocationGroupDTO? locationGroup = locationGroups.FirstOrDefault(x => x.EnableStatusA == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatusA == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = locationGroup?.IdA ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
             }
             locationGroups = BaseDal.GetLocationGroups(roadway, LocationStatusEnum.Free, LocationStatusEnum.Free);
             if (locationGroups != null && locationGroups.Count > 0)
             {
-                return BaseDal.QueryFirst(x => x.Id == locationGroups.FirstOrDefault().IdB);
+                LocationGroupDTO? locationGroup = locationGroups.FirstOrDefault(x => x.EnableStatusB == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatusB == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = locationGroup?.IdB ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
             }
 
-            return BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnalbeStatus == LocationEnalbeStatusEnum.Normal.ObjToInt() && x.RoadwayNo == roadway), _emptyAssignOrderBy);
+            return BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == LocationEnalbeStatusEnum.Normal.ObjToInt() && x.RoadwayNo == roadway), _emptyAssignOrderBy);
         }
 
         private Dt_LocationInfo StoredAssignLocation(string roadway)
         {
-            List<LocationGroupDTO> locationGroups = BaseDal.GetLocationGroups(roadway, LocationStatusEnum.Free, LocationStatusEnum.InStock);
-            if (locationGroups != null && locationGroups.Count > 0)
+            List<LocationGroupDTO> locationGroups = BaseDal.GetLocationGroups(roadway, LocationStatusEnum.InStock, LocationStatusEnum.Free);
+            if (locationGroups != null)
             {
-                return BaseDal.QueryFirst(x => x.Id == locationGroups.FirstOrDefault().IdA);
+                LocationGroupDTO? locationGroup = locationGroups.FirstOrDefault(x => x.EnableStatusA == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatusA == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = locationGroup?.IdA ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
             }
             locationGroups = BaseDal.GetLocationGroups(roadway, LocationStatusEnum.Free, LocationStatusEnum.Free);
             if (locationGroups != null && locationGroups.Count > 0)
             {
-                return BaseDal.QueryFirst(x => x.Id == locationGroups.FirstOrDefault().IdB);
+                LocationGroupDTO? locationGroup = locationGroups.FirstOrDefault(x => x.EnableStatusB == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatusB == LocationEnalbeStatusEnum.Normal.ObjToInt());
+                int id = locationGroup?.IdB ?? 0;
+                return BaseDal.QueryFirst(x => x.Id == id);
             }
 
-            return BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnalbeStatus == LocationEnalbeStatusEnum.Normal.ObjToInt() && x.RoadwayNo == roadway), _emptyAssignOrderBy);
+            return BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == LocationEnalbeStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == LocationEnalbeStatusEnum.Normal.ObjToInt() && x.RoadwayNo == roadway), _emptyAssignOrderBy);
         }
 
         public Dt_LocationInfo AdjacentDepthLocation(string locationCode)
@@ -140,7 +144,7 @@
                             {
                                 AreaId = 0,
                                 Column = j + 1,
-                                EnalbeStatus = LocationEnalbeStatusEnum.Normal.ObjToInt(),
+                                EnableStatus = LocationEnalbeStatusEnum.Normal.ObjToInt(),
                                 Layer = k + 1,
                                 LocationStatus = LocationStatusEnum.Free.ObjToInt(),
                                 LocationType = LocationTypeEnum.Cube.ObjToInt(),
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/AGVTaskFeedBackModel.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/AGVTaskFeedBackModel.cs"
new file mode 100644
index 0000000..ce6e3ec
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/AGVTaskFeedBackModel.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Common
+{
+    public class AGVTaskFeedBackModel
+    {
+        public string Task_id { get; set; }
+
+        public string Task_status { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs"
index bffe798..5ce5196 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseModels/PageDataOptions.cs"
@@ -1,8 +1,13 @@
-锘縰sing System;
+锘縰sing SqlSugar;
+using 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.Helper;
+using WIDESEA_Core.Utilities;
 
 namespace WIDESEA_Core
 {
@@ -24,6 +29,96 @@
         /// 鏌ヨ鏉′欢
         /// </summary>
         public List<SearchParameters> Filter { get; set; }
+
+        public string ValidatePageOptions(PropertyInfo[] entityProperties)
+        {
+            string where = string.Empty;
+            List<SearchParameters> searchParametersList = new List<SearchParameters>();
+            if (this.Filter != null && this.Filter.Count > 0)
+            {
+                searchParametersList.AddRange(Filter);
+            }
+            else if (!string.IsNullOrEmpty(Wheres))
+            {
+                try
+                {
+                    searchParametersList = Wheres.DeserializeObject<List<SearchParameters>>();
+                    Filter = searchParametersList;
+                }
+                catch { }
+            }
+            for (int i = 0; i < searchParametersList.Count; i++)
+            {
+                if (string.IsNullOrEmpty(searchParametersList[i].Value))
+                {
+                    continue;
+                }
+
+                PropertyInfo? property = entityProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
+
+                if (property == null) continue;
+
+                List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList();
+                if (results == null || results.Count() == 0)
+                {
+                    continue;
+                }
+                for (int j = 0; j < results.Count(); j++)
+                {
+                    if (j == 0)
+                    {
+                        where += "(";
+                    }
+                    LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
+                    if (expressionType == LinqExpressionType.Equal)
+                    {
+                        where += $"{searchParametersList[i].Name} = '{results[j].Item3}'";
+                    }
+                    else
+                    {
+                        where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{results[j].Item3}'";
+                    }
+
+                    if (j == results.Count() - 1)
+                    {
+                        where += ")";
+                    }
+                    else
+                    {
+                        where += " or ";
+                    }
+                }
+                if (i < searchParametersList.Count - 1)
+                    where += " and ";
+            }
+            return where;
+        }
+
+
+        public Dictionary<string, OrderByType> GetPageDataSort(PropertyInfo[] propertyInfo)
+        {
+            if (!string.IsNullOrEmpty(Sort))
+            {
+                if (Sort.Contains(","))
+                {
+                    List<string> sortArr = Sort.Split(",").Where(x => propertyInfo.Any(p => p.Name == x)).ToList();
+                    Dictionary<string, OrderByType> sortDic = new Dictionary<string, OrderByType>();
+                    foreach (var item in sortArr)
+                    {
+                        sortDic[item] = Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc;
+                    }
+                    return sortDic;
+                }
+                else if (propertyInfo.Any(x => x.Name == Sort.FirstLetterToLower() || x.Name == Sort.FirstLetterToUpper()))
+                {
+                    return new Dictionary<string, OrderByType> {
+                        {
+                            Sort,Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc
+                        } };
+                }
+            }
+            return new Dictionary<string, OrderByType> { { "CreateDate", Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc } };
+        }
     }
     public class SearchParameters
     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
index 4def7b8..5f57b15 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/IRepository.cs"
@@ -7,6 +7,7 @@
 using System.Linq.Expressions;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core.Enums;
 
 namespace WIDESEA_Core.BaseRepository
 {
@@ -70,6 +71,10 @@
 
         Task<bool> DeleteDataByIdAsync(object id);
 
+        bool DeleteAndMoveIntoHty(TEntity entity, OperateType operateType);
+
+        bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateType operateType);
+
         /// <summary>
         /// 閫氳繃涓婚敭鏁版嵁鍒犻櫎澶氭潯鏁版嵁
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
index 9346461..681b8e3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
@@ -16,6 +16,11 @@
 using WIDESEA_Core.Const;
 using WIDESEA_Core.AOP;
 using OfficeOpenXml.FormulaParsing.ExpressionGraph;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Utilities;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using NetTaste;
+using WIDESEA_Core.DB.Models;
 
 namespace WIDESEA_Core.BaseRepository
 {
@@ -537,7 +542,7 @@
         public virtual List<TResult> QueryTabs<T, T2, TResult>(
            Expression<Func<T, T2, object[]>> joinExpression,
            Expression<Func<T, T2, TResult>> selectExpression,
-           Expression<Func<T,T2, bool>> whereExpressionT1,
+           Expression<Func<T, T2, bool>> whereExpressionT1,
            Expression<Func<TResult, bool>> whereExpression)
         {
             List<TResult> list = _db.Queryable(joinExpression).WhereIF(whereExpressionT1 != null, whereExpressionT1)
@@ -859,6 +864,103 @@
              .WhereIF(whereExpression != null, whereExpression).ToListAsync();
         }
 
+        public bool DeleteAndMoveIntoHty(TEntity entity, OperateType operateType)
+        {
+            Type type = entity.GetType();
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty("SourceId");
+                if (obj != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    operateTypePro.SetValue(obj, operateType.ToString());
+                    sourceIdPro.SetValue(obj, keyPro.GetValue(entity));
+
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+
+                    for (int i = 0; i < propertyInfos.Count; i++)
+                    {
+                        PropertyInfo propertyInfo = propertyInfos[i];
+                        PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                        if (property != null)
+                        {
+                            if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                            {
+                                propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : App.User.UserId.ToString());
+                            }
+                            else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                            {
+                                propertyInfo.SetValue(obj, DateTime.Now);
+                            }
+                            else
+                            {
+                                propertyInfo.SetValue(obj, property.GetValue(entity));
+                            }
+                        }
+                    }
+                    _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
+                }
+            }
+            return DeleteData(entity);
+        }
+
+        public bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateType operateType)
+        {
+            Type type = typeof(TEntity);
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj2 = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty("SourceId");
+                if (obj2 != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+                    List<object> list = new List<object>();
+                    foreach (var item in entities)
+                    {
+                        object? obj = Activator.CreateInstance(htyType);
+                        if (obj != null)
+                        {
+                            operateTypePro.SetValue(obj, operateType.ToString());
+                            sourceIdPro.SetValue(obj, keyPro.GetValue(item));
+                            for (int i = 0; i < propertyInfos.Count; i++)
+                            {
+                                PropertyInfo propertyInfo = propertyInfos[i];
+                                PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                                if (property != null)
+                                {
+                                    if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                                    {
+                                        propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : App.User.UserId.ToString());
+                                    }
+                                    else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                                    {
+                                        propertyInfo.SetValue(obj, DateTime.Now);
+                                    }
+                                    else
+                                    {
+                                        propertyInfo.SetValue(obj, property.GetValue(item));
+                                    }
+                                }
+                            }
+                            list.Add(obj);
+                        }
+                    }
+                    _db.InsertableByObject(list).AS(type.Name + "_Hty").ExecuteCommand();
+
+                }
+            }
+            return DeleteData(entities);
+        }
         //List<TResult> QueryMuch<T, T2, T3, TResult>(
         //    Expression<Func<T, T2, T3, object[]>> joinExpression,
         //    Expression<Func<T, T2, T3, TResult>> selectExpression,
diff --git "a/\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 610c767..6de637e 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"
@@ -34,7 +34,7 @@
         public ISqlSugarClient Db => BaseDal.Db;
 
         private PropertyInfo[] _propertyInfo { get; set; } = null;
-        private PropertyInfo[] TProperties
+        public PropertyInfo[] TProperties
         {
             get
             {
@@ -49,112 +49,14 @@
 
         public virtual PageGridData<TEntity> GetPageData(PageDataOptions options)
         {
-            string wheres = ValidatePageOptions(options);
+            string wheres = options.ValidatePageOptions(TProperties);
             //鑾峰彇鎺掑簭瀛楁
-            Dictionary<string, OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
+            Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
 
             PageGridData<TEntity> pageGridData = new PageGridData<TEntity>();
             pageGridData = BaseDal.QueryPage(wheres, options.Page, options.Rows, orderbyDic);
 
             return pageGridData;
-        }
-
-        protected string ValidatePageOptions(PageDataOptions options)
-        {
-            options = options ?? new PageDataOptions();
-            string where = "";
-            List<SearchParameters> searchParametersList = new List<SearchParameters>();
-            if (options.Filter != null && options.Filter.Count > 0)
-            {
-                searchParametersList.AddRange(options.Filter);
-            }
-            else if (!string.IsNullOrEmpty(options.Wheres))
-            {
-                try
-                {
-                    searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
-                    options.Filter = searchParametersList;
-                }
-                catch { }
-            }
-            QueryRelativeList?.Invoke(searchParametersList);
-
-            for (int i = 0; i < searchParametersList.Count; i++)
-            {
-                if (string.IsNullOrEmpty(searchParametersList[i].Value))
-                {
-                    continue;
-                }
-
-                PropertyInfo property = TProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
-
-                if (property == null) continue;
-
-                List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList();
-                if (results == null || results.Count() > 0)
-                {
-                    continue;
-                }
-                for (int j = 0; j < results.Count(); j++)
-                {
-                    if (j == 0)
-                    {
-                        where += "(";
-                    }
-                    LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
-                    if (expressionType == LinqExpressionType.Equal)
-                    {
-                        where += $"{searchParametersList[i].Name} = '{results[j].Item3}'";
-                    }
-                    else
-                    {
-                        where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{results[j].Item3}'";
-                    }
-
-                    if (j == results.Count() - 1)
-                    {
-                        where += ")";
-                    }
-                    else
-                    {
-                        where += " or ";
-                    }
-                }
-                if (i < searchParametersList.Count - 1)
-                    where += " and ";
-            }
-            return where;
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎺掑簭瀛楁
-        /// </summary>
-        /// <param name="pageData"></param>
-        /// <param name="propertyInfo"></param>
-        /// <returns></returns>
-        private Dictionary<string, OrderByType> GetPageDataSort(PageDataOptions pageData, PropertyInfo[] propertyInfo)
-        {
-            if (!string.IsNullOrEmpty(pageData.Sort))
-            {
-                if (pageData.Sort.Contains(","))
-                {
-                    List<string> sortArr = pageData.Sort.Split(",").Where(x => propertyInfo.Any(p => p.Name == x)).ToList();
-                    Dictionary<string, OrderByType> sortDic = new Dictionary<string, OrderByType>();
-                    foreach (var item in sortArr)
-                    {
-                        sortDic[item] = pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc;
-                    }
-                    return sortDic;
-                }
-                else if (propertyInfo.Any(x => x.Name == pageData.Sort.FirstLetterToLower() || x.Name == pageData.Sort.FirstLetterToUpper()))
-                {
-                    return new Dictionary<string, OrderByType> {
-                        {
-                            pageData.Sort,pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc
-                        } };
-                }
-            }
-            return new Dictionary<string, OrderByType> { { "CreateDate", pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc } };
         }
 
         public virtual object GetDetailPage(PageDataOptions pageData)
@@ -242,8 +144,8 @@
                 }
                 else if (keyPro.PropertyType == typeof(int) || keyPro.PropertyType == typeof(long))
                 {
-                    SugarColumn sugarColumn = keyPro.GetCustomAttribute<SugarColumn>();
-                    if (sugarColumn.IsIdentity)
+                    SugarColumn? sugarColumn = keyPro.GetCustomAttribute<SugarColumn>();
+                    if (sugarColumn?.IsIdentity ?? true)
                     {
                         saveModel.MainData.Remove(keyPro.Name.FirstLetterToUpper());
                         saveModel.MainData.Remove(keyPro.Name.FirstLetterToLower());
@@ -603,9 +505,9 @@
 
                 string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport";
                 IExporter exporter = new ExcelExporter();
-                string wheres = ValidatePageOptions(options);
+                string wheres = options.ValidatePageOptions(TProperties);
                 //鑾峰彇鎺掑簭瀛楁
-                Dictionary<string, OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
+                Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
 
                 List<TEntity> entities = BaseDal.QueryData(wheres, orderbyDic);
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs"
index fb1d6c4..f3afbf0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs"
@@ -38,7 +38,7 @@
 
     #endregion 搴撳瓨鐘舵��
 
-    public enum OperateTypeEnum
+    public enum OperateType
     {
         浜哄伐鍒犻櫎 = 1,
         鑷姩鍒犻櫎 = 2,
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/SequenceEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/SequenceEnum.cs"
new file mode 100644
index 0000000..51cc259
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/SequenceEnum.cs"
@@ -0,0 +1,13 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Enums
+{
+    public enum SequenceEnum
+    {
+        SeqTaskNum
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs"
index 60e7659..2ca34c9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs"
@@ -14,8 +14,6 @@
     /// </summary>
     public enum TaskTypeEnum
     {
-
-
         /// <summary>
         /// 鍑哄簱 =100
         /// </summary>
@@ -89,7 +87,9 @@
         /// <summary>
         /// 搴撳绉诲簱
         /// </summary>
-        RelocationOut = 302
+        RelocationOut = 302,
+
+        AGVCarry = 500,
     }
 
     #endregion 浠诲姟绫诲瀷
@@ -105,27 +105,6 @@
         /// 鏂板缓鍏ュ簱浠诲姟
         /// </summary>
         InNew = 200,
-
-        /// <summary>
-        /// AGV鍏ュ簱鎵ц涓�
-        /// </summary>
-        AGV_InExecuting = 210,
-
-        /// <summary>
-        /// AGV鍏ュ簱瀹屾垚
-        /// </summary>
-        AGV_InFinish = 215,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍏ュ簱鎵ц涓�
-        /// </summary>
-        Line_InExecuting = 220,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍏ュ簱瀹屾垚
-        /// </summary>
-        Line_InFinish = 225,
-
         /// <summary>
         /// 鍫嗗灈鏈哄叆搴撴墽琛屼腑
         /// </summary>
@@ -168,27 +147,6 @@
         /// 鏂板缓浠诲姟
         /// </summary>
         OutNew = 100,
-
-        /// <summary>
-        /// AGV鎵ц涓�
-        /// </summary>
-        AGV_OutExecuting = 110,
-
-        /// <summary>
-        /// AGV鍑哄簱瀹屾垚
-        /// </summary>
-        AGV_OutFinish = 115,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍑哄簱鎵ц涓�
-        /// </summary>
-        Line_OutExecuting = 120,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍑哄簱瀹屾垚
-        /// </summary>
-        Line_OutFinish = 125,
-
         /// <summary>
         /// 鍫嗗灈鏈哄嚭搴撴墽琛屼腑
         /// </summary>
@@ -225,4 +183,12 @@
         OutException = 199
     }
 
+    public enum AGVTaskStatusEnum
+    {
+        AGV_New = 500,
+
+        AGV_Executing = 510,
+
+        AGV_Finish = 520
+    }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs"
index 76d4af1..1bf7f75 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs"
@@ -42,6 +42,8 @@
 
         public string Token => GetToken();
 
+        public int MenuType => (_accessor.HttpContext?.Request.Headers.ContainsKey("uniapp") ?? false) ? 1 : 0;
+
         public bool IsAuthenticated()
         {
             return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs"
index 9bea2d2..1c3acbe 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/IUser.cs"
@@ -28,6 +28,8 @@
 
         string Token { get; }
 
+        int MenuType {  get; }
+
         void UpdateToke(string token);
 
         /// <summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
index ee5aea4..ee5bdd9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs"
@@ -5,6 +5,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using WIDESEA_Core.Helper;
 using WIDESEA_Core.LogHelper;
@@ -20,94 +21,117 @@
         /// 
         /// </summary>
         private readonly RequestDelegate _next;
-        private readonly ILogger<ApiLogMiddleware> _logger;
 
-        public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger)
+        public ApiLogMiddleware(RequestDelegate next)
         {
             _next = next;
-            _logger = logger;
         }
 
         //todo
         public async Task InvokeAsync(HttpContext context)
         {
-            //if (AppSettings.app("Middleware", "RequestResponseLog", "Enabled").ObjToBool())
+            // 杩囨护锛屽彧鏈夋帴鍙�
+            if (context.Request.Path.Value?.Contains("api") ?? false)
             {
-                // 杩囨护锛屽彧鏈夋帴鍙�
-                if (context.Request.Path.Value.Contains("api"))
-                {
-                    context.Request.EnableBuffering();
-                    //Stream originalBody = context.Response.Body;
+                context.Request.EnableBuffering();
+                Stream originalBody = context.Response.Body;
 
+                try
+                {
                     try
                     {
                         // 瀛樺偍璇锋眰鏁版嵁
-                        //string requestParam = GetRequestData(context);
-                        //DateTime beginDate = DateTime.Now;
+                        await RequestDataLog(context);
+                        context.Request.Body.Position = 0;
+                    }
+                    catch { }
+                    using MemoryStream ms = new();
+                    context.Response.Body = ms;
 
-                        //using var ms = new MemoryStream();
-                        //context.Response.Body = ms;
+                    await _next(context);
 
-                        await _next(context);
-
+                    try
+                    {
                         // 瀛樺偍鍝嶅簲鏁版嵁
-                        //DateTime endDate = DateTime.Now;
-                        //string responseParam = GetResponsetData(context);
+                        ResponseDataLog(context.Response, ms);
+                    }
+                    catch { }
 
-                        //context.Response.Body.Position = 0;
-                        //await context.Response.Body.CopyToAsync(originalBody);
+                    ms.Position = 0;
+                    await ms.CopyToAsync(originalBody);
 
-                        //Logger.WriteApiLog2DB(context,requestParam, beginDate, responseParam, endDate, context.Response.StatusCode == 200 ? LoggerStatus.Success : LoggerStatus.Error);
-                    }
-                    catch (Exception ex)
-                    {
-                        // 璁板綍寮傚父                        
-                        _logger.LogError(ex.Message + "" + ex.InnerException);
-                    }
-                    finally
-                    {
-                        //context.Response.Body = originalBody;
-                    }
                 }
-                //else
-                //{
-                //    await _next(context);
-                //}
+                catch (Exception ex)
+                {
+                    // 璁板綍寮傚父
+                    
+                }
+                finally
+                {
+                    context.Response.Body = originalBody;
+                }
             }
-            //else
-            //{
-            //    await _next(context);
-            //}
-        }
-
-        private string GetRequestData(HttpContext context)
-        {
-            try
+            else
             {
-                using StreamReader sr = new StreamReader(context.Request.Body);
-                string request = JsonConvert.SerializeObject(sr.ReadToEnd()); ;
-                context.Request.Body.Position = 0;
-                return request;
-            }
-            catch (Exception ex)
-            {
-                return $"璇锋眰鍙傛暟鑾峰彇閿欒,{ex.Message}";
+                await _next(context);
             }
         }
 
-        private string GetResponsetData(HttpContext context)
+
+        private async Task RequestDataLog(HttpContext context)
         {
-            try
+            var request = context.Request;
+            var sr = new StreamReader(request.Body);
+            //long length = request.Body.Length;
+            RequestLogInfo requestResponse = new RequestLogInfo()
             {
-                using StreamReader sr = new StreamReader(context.Response.Body);
-                string response = JsonConvert.SerializeObject(sr.ReadToEnd()); ;
-                context.Response.Body.Position = 0;
-                return response;
-            }
-            catch (Exception ex)
+                Path = request.Path,
+                QueryString = request.QueryString.ToString(),
+                BodyData = await sr.ReadToEndAsync()
+            };
+            var content = JsonConvert.SerializeObject(requestResponse);
+            if (!string.IsNullOrEmpty(content))
             {
-                return $"鍝嶅簲鍙傛暟鑾峰彇閿欒,{ex.Message}";
+                LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "璇锋眰鏁版嵁 -  璇锋眰鏁版嵁绫诲瀷:" + requestResponse.GetType().ToString(), content });
+                request.Body.Position = 0;
             }
         }
+
+        private void ResponseDataLog(HttpResponse response, MemoryStream ms)
+        {
+            ms.Position = 0;
+            var responseBody = new StreamReader(ms).ReadToEnd();
+
+            // 鍘婚櫎 Html
+            var reg = "<[^>]+>";
+            var isHtml = Regex.IsMatch(responseBody, reg);
+
+            if (!string.IsNullOrEmpty(responseBody))
+            {
+                Parallel.For(0, 1, e =>
+                {
+                    LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "鍝嶅簲鏁版嵁 -  鍝嶅簲鏁版嵁绫诲瀷:" + responseBody.GetType().ToString(), responseBody });
+
+                });
+            }
+        }
+    }
+
+    public class RequestLogInfo
+    {
+        /// <summary>
+        /// 璇锋眰鍦板潃
+        /// </summary>
+        public string Path { get; set; }
+
+        /// <summary>
+        /// 璇锋眰鍙傛暟
+        /// </summary>
+        public string QueryString { get; set; }
+
+        /// <summary>
+        /// Body鍙傛暟
+        /// </summary>
+        public string BodyData { get; set; }
     }
 }
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 7bce347..c351b8b 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"
@@ -228,9 +228,12 @@
         {
             foreach (PropertyInfo property in properties)
             {
-                SugarColumn sugarColumn = property.GetCustomAttribute<SugarColumn>();
-                if (sugarColumn.IsPrimaryKey)
-                    return property.Name;
+                SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                if (sugarColumn != null)
+                {
+                    if (sugarColumn.IsPrimaryKey)
+                        return property.Name;
+                }
             }
             return null;
         }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs"
index 1f75580..af87398 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/ModelValidate.cs"
@@ -162,15 +162,19 @@
                                 Type[] types = propertyInfo.PropertyType.GenericTypeArguments;
                                 if (types.Length == 1)
                                 {
-                                    string str = value.Serialize();
-                                    if (str == "[]")
+                                    if (tempValue.ChangeType(property.PropertyType).ToString() == propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1].ChangeType(property.PropertyType).ToString())
                                     {
-                                        return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊间负銆恵propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}銆戞椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间笉鍙负绌�", data);
+                                        string str = value.Serialize();
+                                        if (str == "[]")
+                                        {
+                                            return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊间负銆恵propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}銆戞椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间笉鍙负绌�", data);
+                                        }
                                     }
+                                       
                                 }
                                 else if (types.Length == 0)
                                 {
-                                    if (tempValue.ChangeType(property.PropertyType) != propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1].ChangeType(property.PropertyType) && value == null && string.IsNullOrEmpty(value.ToString()))
+                                    if (tempValue.ChangeType(property.PropertyType).ToString() == propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1].ChangeType(property.PropertyType).ToString() && value == null && string.IsNullOrEmpty(value.ToString()))
                                     {
                                         return (false, $"銆恵property.Name}銆戝睘鎬х殑鍊间负銆恵propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}銆戞椂銆恵propertyInfo.Name}銆戝睘鎬х殑鍊间笉鍙负绌�", data);
                                     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs"
new file mode 100644
index 0000000..edd66c5
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/CachePointGroupDTO.cs"
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Basic
+{
+    public class CachePointGroupDTO
+    {
+        public int IdA { get; set; }
+
+        public int IdB { get; set; }
+
+        public string PointCodeA { get; set; }
+
+        public string PointCodeB { get; set; }
+
+        public int PointTypeA { get; set; }
+
+        public int PointTypeB { get; set; }
+
+        public int PointStatusA { get; set; }
+
+        public int PointStatusB { get; set; }
+
+        public int DepthA { get; set; }
+
+        public int DepthB { get; set; }
+
+        public int EnableStatusA { get; set; }
+
+        public int EnableStatusB { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs"
index b9516fb..ae06f8b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs"
@@ -1,4 +1,5 @@
 锘�
+using Magicodes.ExporterAndImporter.Core;
 using SqlSugar;
 using System;
 using System.Collections.Generic;
@@ -9,8 +10,31 @@
 
 namespace WIDESEA_DTO.Stock
 {
-    public class StockViewDTO : Dt_LocationInfo
+    public class StockViewDTO
     {
+        public int AreaId { get; set; }
+
+        public string LocationCode { get; set; }
+
+        public string LocationName { get; set; }
+
+        public int Column { get; set; }
+
+        public int Row { get; set; }
+
+        public int Layer { get; set; }
+
+        public int Depth { get; set; }
+
+        public int LocationStatus { get; set; }
+
+        public int LocationType { get; set; }
+
+        public string RoadwayNo { get; set; }
+
+        public int EnalbeStatus { get; set; }
+
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
         public int StockId { get; set; }
 
         public string PalletCode { get; set; }
@@ -21,6 +45,14 @@
 
         public string StockRemark { get; set; }
 
+        public string Creater { get; set; }
+
+        public DateTime CreateDate { get; set; }
+
+        public string Modifier { get; set; }
+
+        public DateTime? ModifyDate { get; set; }
+
         [Navigate(NavigateType.OneToMany, nameof(Dt_StockInfoDetail.StockId), nameof(StockId))]
         public List<Dt_StockInfoDetail> Details { get; set; }
     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaRouterRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaRouterRepository.cs"
new file mode 100644
index 0000000..29d3150
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IAreaRouterRepository.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicRepository
+{
+    public interface IAreaRouterRepository : IRepository<Dt_AreaRouter>
+    {
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs"
new file mode 100644
index 0000000..dc7218e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs"
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IBasicRepository
+{
+    public interface IBasicRepository : IDependency
+    {
+        IAreaInfoRepository AreaInfoRepository { get; }
+
+        ILocationInfoRepository LocationInfoRepository { get; }
+
+        IMaterielInfoRepository MaterielInfoRepository { get; }
+
+        IRoadwayInfoRepository RoadwayInfoRepository { get; }
+
+        IWarehouseRepository WarehouseRepository { get; }
+
+        IAreaRouterRepository AreaRouterRepository { get; }
+
+        ICachePointRepository CachePointRepository { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ICachePointRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ICachePointRepository.cs"
new file mode 100644
index 0000000..a399b4e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ICachePointRepository.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO.Basic;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicRepository
+{
+    public interface ICachePointRepository : IRepository<Dt_CachePoint>
+    {
+        List<CachePointGroupDTO> GetCachePointGroups(int areaId, LocationStatusEnum locationAStatus, LocationStatusEnum locationBStatus);
+    }
+}
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 b470d1b..8e14a76 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"
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
@@ -11,6 +12,6 @@
 {
     public interface IAreaInfoService : IService<Dt_AreaInfo>
     {
-       IAreaInfoRepository Repository { get; }
+        IAreaInfoRepository Repository { get; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaRouterService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaRouterService.cs"
new file mode 100644
index 0000000..21d7efd
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IAreaRouterService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicService
+{
+    public interface IAreaRouterService : IService<Dt_AreaRouter>
+    {
+        IAreaRouterRepository Repository { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs"
new file mode 100644
index 0000000..c685b73
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IBasicService.cs"
@@ -0,0 +1,71 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IBasicService
+{
+    public interface IBasicService: IDependency
+    {
+        IAreaInfoService AreaInfoService { get; }
+
+        ILocationInfoService LocationInfoService { get; }
+
+        IMaterielInfoService MaterielInfoService { get; }
+
+        IRoadwayInfoService RoadwayInfoService { get; }
+
+        IWarehouseService WarehouseService { get; }
+
+        IAreaRouterService AreaRouterService { get; }
+
+        ICachePointService CachePointService { get; }
+
+
+        WebResponseContent AreaEnableStatus(int[] keys);
+
+        WebResponseContent AreaDisableStatus(int[] keys);
+
+        WebResponseContent AreaEnableStatus(int key);
+
+        WebResponseContent AreaDisableStatus(int key);
+
+
+        WebResponseContent CachePointEnableStatus(int[] keys);
+
+        WebResponseContent CachePointDisableStatus(int[] keys);
+
+        WebResponseContent CachePointEnableStatus(int key);
+
+        WebResponseContent CachePointDisableStatus(int key);
+
+
+        WebResponseContent LocationEnableStatus(int[] keys);
+
+        WebResponseContent LocationDisableStatus(int[] keys);
+
+        WebResponseContent LocationEnableStatus(int key);
+
+        WebResponseContent LocationDisableStatus(int key);
+
+
+        WebResponseContent RoadwayEnableStatus(int[] keys);
+
+        WebResponseContent RoadwayDisableStatus(int[] keys);
+
+        WebResponseContent RoadwayEnableStatus(int key);
+
+        WebResponseContent RoadwayDisableStatus(int key);
+
+
+        WebResponseContent WarehouseEnableStatus(int[] keys);
+
+        WebResponseContent WarehouseDisableStatus(int[] keys);
+
+        WebResponseContent WarehouseEnableStatus(int key);
+
+        WebResponseContent WarehouseDisableStatus(int key);
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ICachePointService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ICachePointService.cs"
new file mode 100644
index 0000000..72f6837
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ICachePointService.cs"
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IBasicRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IBasicService
+{
+    public interface ICachePointService : IService<Dt_CachePoint>
+    {
+        ICachePointRepository Repository { get; }
+
+        Dt_CachePoint? AssignCachePoint(int areaId);
+
+        Dt_CachePoint? GetIbStockCachePoint(int areaId);
+
+        
+    }
+}
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 d003d8c..b8e9d3b 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"
@@ -20,5 +20,6 @@
         Dt_LocationInfo AdjacentDepthLocation(string locationCode);
 
         Dt_LocationInfo? AssignLocation(string stationCode, int inboundType);
+
     }
 }
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 709bdf7..15acaf7 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"
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
@@ -20,5 +21,6 @@
         Dt_MaterielInfo GetMaterielInfo(string materielCode);
 
         List<Dt_MaterielInfo> GetMaterielInfos(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 d68bef9..5967bcf 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"
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
@@ -12,5 +13,6 @@
     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 79d4145..0a0dfd0 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"
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_IBasicRepository;
 using WIDESEA_Model.Models;
@@ -12,5 +13,6 @@
     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_IInboundRepository/IInboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs"
new file mode 100644
index 0000000..cd77bda
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IInboundRepository
+{
+    public interface IInboundRepository : IDependency
+    {
+        IInboundOrderDetailRepository InboundOrderDetailRepository { get; }
+
+        IInboundOrderRepository InboundOrderRepository { get; }
+    }
+}
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 e27698e..7679ad9 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"
@@ -18,5 +18,7 @@
         WebResponseContent AddInboundOrder(InboundOrderAddDTO orderAddDTO);
 
         WebResponseContent MaterielGroup(MaterielGroupDTO materielGroupDTO);
+
+        WebResponseContent QueryOrderInfo(int pageNo, string orderNo);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs"
new file mode 100644
index 0000000..a70183e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IInboundService
+{
+    public interface IInboundService:IDependency
+    {
+        IInboundOrderDetailService InboundOrderDetailService { get; }
+
+        IInboundOrderService InbounOrderService { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs"
new file mode 100644
index 0000000..4a7d1be
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IOutboundRepository
+{
+    public interface IOutboundRepository : IDependency
+    {
+        IOutboundOrderDetailRepository OutboundOrderDetailRepository { get; }
+
+        IOutboundOrderRepository OutboundOrderRepository { get; }
+
+        IOutStockLockInfoRepository OutboundStockLockInfoRepository { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs"
new file mode 100644
index 0000000..7e86e2f
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface IOutboundService:IDependency
+    {
+        IOutboundOrderDetailService OutboundOrderDetailService { get; }
+
+        IOutboundOrderService OutboundOrderService { get; }
+
+        IOutStockLockInfoService OutboundStockLockInfoService { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordRepository/IRecordRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordRepository/IRecordRepository.cs"
new file mode 100644
index 0000000..aa89557
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordRepository/IRecordRepository.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IRecordRepository
+{
+    public interface IRecordRepository : IDependency
+    {
+        ILocationStatusChangeRecordRepository LocationStatusChangeRecordRepository { get; }
+
+        IStockQuantityChangeRecordRepository StockQuantityChangeRecordRepository { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs"
new file mode 100644
index 0000000..6fd0066
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/IRecordService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IRecordService
+{
+    public interface IRecordService : IDependency
+    {
+        ILocationStatusChangeRecordSetvice LocationStatusChangeRecordSetvice { get; }
+
+        IStockQuantityChangeRecordService StockQuantityChangeRecordService { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs"
index 76cceed..2cdd70c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs"
@@ -26,5 +26,7 @@
         List<Dt_StockInfo> GetStockInfosExclude(string materielCode, List<string> palletCodes);
 
         bool UpdateDataWithDetail(Dt_StockInfo stockInfo);
+
+        Dt_StockInfo GetPalletStockInfo(string roadwayNo);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockRepository.cs"
new file mode 100644
index 0000000..f3826a3
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockRepository.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IStockRepository
+{
+    public interface IStockRepository : IDependency
+    {
+        IStockInfoDetailRepository StockInfoDetailRepository { get; }
+
+        IStockInfoRepository StockInfoRepository { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs"
new file mode 100644
index 0000000..1a48a24
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockService:IDependency
+    {
+        IStockInfoDetailService StockInfoDetailService { get; }
+
+        IStockInfoService StockInfoService { get; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs"
new file mode 100644
index 0000000..4dbc93f
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockViewService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Stock;
+
+namespace WIDESEA_IStockService
+{
+    public interface IStockViewService : IDependency
+    {
+        PageGridData<StockViewDTO> GetPageData(PageDataOptions options);
+
+        object GetDetailPage(PageDataOptions pageData);
+    }
+}
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 1d6a01e..6f54d1b 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"
@@ -42,5 +42,11 @@
         WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
 
         WebResponseContent GenerateOutboundTask(int[] keys);
+
+        WebResponseContent PalletOutboundTask(string roadwayNo, string endStation);
+
+        WebResponseContent CallMateriel(string endPoint);
+
+        WebResponseContent MaterielCarry(string startPoint);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs"
new file mode 100644
index 0000000..511585a
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IInboundRepository;
+
+namespace WIDESEA_InboundRepository
+{
+    public class InboundRepository : IInboundRepository
+    {
+        public IInboundOrderDetailRepository InboundOrderDetailRepository { get; }
+
+        public IInboundOrderRepository InboundOrderRepository { get; }
+
+        public InboundRepository(IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository)
+        {
+            InboundOrderDetailRepository = inboundOrderDetailRepository;
+            InboundOrderRepository = inboundOrderRepository;
+        }
+    }
+}
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 58da11f..0342543 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"
@@ -1,4 +1,5 @@
 锘縰sing AutoMapper;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -25,24 +26,23 @@
     public class InboundOrderService : ServiceBase<Dt_InboundOrder, IInboundOrderRepository>, IInboundOrderService
     {
         private readonly IMapper _mapper;
-        private readonly IMaterielInfoService _materielInfoService;
-        private readonly IStockInfoService _stockInfoService;
-        private readonly IStockInfoDetailService _stockDetailService;
-        private readonly ITaskRepository _taskRepository;
-        private readonly IInboundOrderDetailService _inboundOrderDetailService;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly ITaskRepository _taskRepository;
+
+        private IBasicService _basicService;
+        private IStockService _stockService;
+        private IInboundOrderDetailService _inboundOrderDetailService;
 
         public IInboundOrderRepository Repository => BaseDal;
 
-        public InboundOrderService(IInboundOrderRepository BaseDal, IMapper mapper, IMaterielInfoService materielInfoService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService, ITaskRepository taskRepository, IInboundOrderDetailService inboundOrderDetailService, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        public InboundOrderService(IInboundOrderRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, ITaskRepository taskRepository, IBasicService basicService, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService) : base(BaseDal)
         {
             _mapper = mapper;
-            _materielInfoService = materielInfoService;
-            _stockDetailService = stockDetailService;
-            _stockInfoService = stockInfoService;
-            _taskRepository = taskRepository;
-            _inboundOrderDetailService = inboundOrderDetailService;
             _unitOfWorkManage = unitOfWorkManage;
+            _taskRepository = taskRepository;
+            _basicService = basicService;
+            _stockService = stockService;
+            _inboundOrderDetailService = inboundOrderDetailService;
         }
 
         /// <summary>
@@ -108,7 +108,7 @@
             }
 
             List<string> materielCodes = inboundOrderAddDTO.Details.Select(x => x.MaterielCode).ToList();
-            if (!_materielInfoService.ExsitMateriels(materielCodes))
+            if (!_basicService.MaterielInfoService.ExsitMateriels(materielCodes))
             {
                 return (false, "鏈夌墿鏂欎俊鎭湭褰曞叆锛岃褰曞叆鐗╂枡淇℃伅", inboundOrderAddDTO);
             }
@@ -146,12 +146,12 @@
 
                 List<string> materielCodes = matSerialNumberDTOs.GroupBy(x => x.MaterielCode).Select(x => x.Key).ToList();
 
-                List<Dt_MaterielInfo> materielInfos = _materielInfoService.GetMaterielInfos(materielCodes);
+                List<Dt_MaterielInfo> materielInfos = _basicService.MaterielInfoService.GetMaterielInfos(materielCodes);
 
                 Dt_InboundOrder inboundOrder = GetInboundOrder(materielGroupDTO.OrderNo);
 
 
-                Dt_StockInfo? stockInfo = _stockInfoService.GetStockByPalletCode(materielGroupDTO.PalletCode);
+                Dt_StockInfo? stockInfo = _stockService.StockInfoService.GetStockByPalletCode(materielGroupDTO.PalletCode);
 
                 (bool, string, object?) result = CheckMaterielGroupParam(materielGroupDTO, matSerialNumberDTOs, materielInfos, materielCodes, inboundOrder, stockInfo);
                 if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
@@ -220,7 +220,7 @@
                 _unitOfWorkManage.BeginTran();
                 UpdateData(inboundOrder);
                 _inboundOrderDetailService.UpdateData(inboundOrderDetails);
-                _stockInfoService.AddMaterielGroup(stockInfo);
+                _stockService.StockInfoService.AddMaterielGroup(stockInfo);
                 _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
             }
@@ -256,7 +256,7 @@
                 return (false, "宸蹭笂鏋剁殑鎵樼洏涓嶈兘鍐嶆缁勭洏", materielGroupDTO);
             }
 
-            if (_stockDetailService.ExistSerialNumbers(materielGroupDTO.SerialNumbers))
+            if (_stockService.StockInfoDetailService.ExistSerialNumbers(materielGroupDTO.SerialNumbers))
             {
                 return (false, "鏈夊簭鍒楀彿鍦ㄥ簱瀛樹腑宸插瓨鍦�", materielGroupDTO);
             }
@@ -307,5 +307,31 @@
 
             return (true, "鎴愬姛", materielGroupDTO);
         }
+
+        public WebResponseContent QueryOrderInfo(int pageNo, string orderNo)
+        {
+            if (string.IsNullOrEmpty(orderNo))
+            {
+                object obj = Repository.QueryPage(x => true, pageNo, 10, new Dictionary<string, OrderByType> { { nameof(Dt_InboundOrder.CreateDate), OrderByType.Desc } }).Rows.Select(x => new
+                {
+                    x.OrderNo,
+                    x.UpperOrderNo,
+                    x.CreateDate,
+                    x.Creater
+                });
+                return WebResponseContent.Instance.OK(data: obj);
+            }
+            else
+            {
+                object obj = Repository.QueryPage(x => x.OrderNo == orderNo, pageNo, 10, new Dictionary<string, OrderByType> { { nameof(Dt_InboundOrder.CreateDate), OrderByType.Desc } }).Rows.Select(x => new
+                {
+                    x.OrderNo,
+                    x.UpperOrderNo,
+                    x.CreateDate,
+                    x.Creater
+                });
+                return WebResponseContent.Instance.OK(data: obj);
+            }
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs"
new file mode 100644
index 0000000..97a2766
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IInboundService;
+
+namespace WIDESEA_InboundService
+{
+    public class InboundService : IInboundService
+    {
+        public IInboundOrderDetailService InboundOrderDetailService { get; }
+
+        public IInboundOrderService InbounOrderService { get; }
+
+        public InboundService(IInboundOrderDetailService inboundOrderDetailService, IInboundOrderService inbounOrderService)
+        {
+            InboundOrderDetailService = inboundOrderDetailService;
+            InbounOrderService = inbounOrderService;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaRouter.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaRouter.cs"
new file mode 100644
index 0000000..0803b4a
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaRouter.cs"
@@ -0,0 +1,53 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_AreaRouter))]
+    public class Dt_AreaRouter : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 璧风偣鍖哄煙
+        /// </summary>
+        [ImporterHeader(Name = "璧风偣")]
+        [ExporterHeader(DisplayName = "璧风偣")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "璧风偣")]
+        public string StartArea { get; set; }
+
+        /// <summary>
+        /// 缁堢偣鍖哄煙
+        /// </summary>
+        [ImporterHeader(Name = "缁堢偣")]
+        [ExporterHeader(DisplayName = "缁堢偣")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "缁堢偣")]
+        public string NextArea { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "璺敱绫诲瀷")]
+        public int RouterType { get; set; }
+
+        /// <summary>
+        /// 鏄惁鏄渶缁堢偣
+        /// </summary>
+        [ImporterHeader(Name = "鏄惁鏄渶缁堢偣")]
+        [ExporterHeader(DisplayName = "鏄惁鏄渶缁堢偣")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁鏄渶缁堢偣")]
+        public bool IsEnd { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ImporterHeader(Name = "澶囨敞")]
+        [ExporterHeader(DisplayName = "澶囨敞")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CachePoint.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CachePoint.cs"
new file mode 100644
index 0000000..e294ec3
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_CachePoint.cs"
@@ -0,0 +1,44 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_CachePoint), "缂撳瓨鐐逛綅")]
+    public class Dt_CachePoint : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍖哄煙涓婚敭")]
+        public int AreaId { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "缂撳瓨鐐圭紪鍙�")]
+        public string PointCode { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "缂撳瓨鐐圭姸鎬�")]
+        public int PointStatus { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "缂撳瓨鐐瑰惎鐢ㄧ姸鎬�")]
+        public int EnableStatus { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "璐т綅琛�")]
+        public int Row { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "璐т綅鍒�")]
+        public int Column { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "璐т綅娣卞害")]
+        public int Depth { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "缂撳瓨鐐圭被鍨�")]
+        public int PointType { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs"
index f95e590..0ffb0ab 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs"
@@ -48,7 +48,7 @@
         public int LocationStatus {  get; set; }
 
         [SugarColumn(IsNullable = false, ColumnDescription = "绂佺敤鐘舵��")]
-        public int EnalbeStatus { get; set; }
+        public int EnableStatus { get; set; }
 
         [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
         public string Remark {  get; set; }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_RoadwayInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_RoadwayInfo.cs"
index 0b8ab5c..c651a54 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_RoadwayInfo.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_RoadwayInfo.cs"
@@ -18,10 +18,10 @@
         public string RoadwayNo {  get; set; }
 
         [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
-        public int WarehouseId {  get; set; }
+        public int AreaId {  get; set; }
 
         [SugarColumn(IsNullable = false, ColumnDescription = "绂佺敤鐘舵��")]
-        public int EnalbeStatus {  get; set; }
+        public int EnableStatus {  get; set; }
 
         [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "璁惧缂栧彿")]
         public string DeviceNo {  get; set; }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs"
index ff956ec..5daaa1b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/System/Sys_Menu.cs"
@@ -75,11 +75,9 @@
         /// <summary>
         /// 鑿滃崟绫诲瀷
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "鑿滃崟绫诲瀷")]
-        public int? MenuType { get; set; }
+        [SugarColumn(IsNullable = false, ColumnDescription = "鑿滃崟绫诲瀷")]
+        public int MenuType { get; set; }
 
-        [Navigate(NavigateType.OneToMany, nameof(ParentId), nameof(MenuId)), SugarColumn(IsIgnore = true, IsNullable = true)]
-        public List<Sys_Menu> Menus { 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 663de64..2350e4a 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"
@@ -7,6 +7,7 @@
 using System.Threading.Tasks;
 using WIDESEA_Core.Attributes;
 using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Enums;
 
 namespace WIDESEA_Model.Models
 {
@@ -26,7 +27,7 @@
         /// </summary>
         [ImporterHeader(Name = "浠诲姟鍙�")]
         [ExporterHeader(DisplayName = "浠诲姟鍙�")]
-        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鍙�"), SequenceAttirbute("SeqTaskNum", 6000)]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鍙�"), SequenceAttirbute(nameof(SequenceEnum.SeqTaskNum), 6000)]
         public int TaskNum { get; set; }
 
         /// <summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs"
new file mode 100644
index 0000000..526416c
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task_Hty.cs"
@@ -0,0 +1,169 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.Enums;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_Task_Hty), "浠诲姟淇℃伅鍘嗗彶")]
+    public class Dt_Task_Hty
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "涓婚敭")]
+        [ExporterHeader(DisplayName = "涓婚敭")]
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int TaskId { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟鍙�")]
+        [ExporterHeader(DisplayName = "浠诲姟鍙�")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鍙�"), SequenceAttirbute(nameof(SequenceEnum.SeqTaskNum), 6000)]
+        public int TaskNum { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏缂栧彿
+        /// </summary>
+        [ImporterHeader(Name = "鎵樼洏缂栧彿")]
+        [ExporterHeader(DisplayName = "鎵樼洏缂栧彿")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        /// 宸烽亾鍙�
+        /// </summary>
+        [ImporterHeader(Name = "宸烽亾鍙�")]
+        [ExporterHeader(DisplayName = "宸烽亾鍙�")]
+        [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "宸烽亾鍙�")]
+        public string Roadway { get; set; }
+
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟绫诲瀷")]
+        [ExporterHeader(DisplayName = "浠诲姟绫诲瀷")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟绫诲瀷")]
+        public int TaskType { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鐘舵��
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟鐘舵��")]
+        [ExporterHeader(DisplayName = "浠诲姟鐘舵��")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鐘舵��")]
+        public int TaskStatus { get; set; }
+
+        /// <summary>
+        /// 璧峰鍦板潃
+        /// </summary>
+        [ImporterHeader(Name = "璧峰鍦板潃")]
+        [ExporterHeader(DisplayName = "璧峰鍦板潃")]
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "璧峰鍦板潃")]
+        public string SourceAddress { get; set; }
+
+        /// <summary>
+        /// 鐩爣鍦板潃
+        /// </summary>
+        [ImporterHeader(Name = "鐩爣鍦板潃")]
+        [ExporterHeader(DisplayName = "鐩爣鍦板潃")]
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鐩爣鍦板潃")]
+        public string TargetAddress { get; set; }
+
+        /// <summary>
+        /// 褰撳墠浣嶇疆
+        /// </summary>
+        [ImporterHeader(Name = "褰撳墠浣嶇疆")]
+        [ExporterHeader(DisplayName = "褰撳墠浣嶇疆")]
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "褰撳墠浣嶇疆")]
+        public string CurrentAddress { get; set; }
+
+        /// <summary>
+        /// 涓嬩竴鍦板潃
+        /// </summary>
+        [ImporterHeader(Name = "涓嬩竴鍦板潃")]
+        [ExporterHeader(DisplayName = "涓嬩竴鍦板潃")]
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "涓嬩竴鍦板潃")]
+        public string NextAddress { get; set; }
+
+        /// <summary>
+        /// 寮傚父淇℃伅
+        /// </summary>
+        [ImporterHeader(Name = "鍗曟嵁缂栧彿")]
+        [ExporterHeader(DisplayName = "鍗曟嵁缂栧彿")]
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string? OrderNo { get; set; }
+
+        /// <summary>
+        /// 浼樺厛绾�
+        /// </summary>
+        [ImporterHeader(Name = "浼樺厛绾�")]
+        [ExporterHeader(DisplayName = "浼樺厛绾�")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浼樺厛绾�")]
+        public int Grade { get; set; }
+
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "婧愪富閿�")]
+        public int SourceKey { get; set; }
+
+        /// <summary>
+        /// 浠诲姟涓嬪彂鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "浠诲姟涓嬪彂鏃堕棿")]
+        [ExporterHeader(DisplayName = "浠诲姟涓嬪彂鏃堕棿")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟涓嬪彂鏃堕棿")]
+        public DateTime? Dispatchertime { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ImporterHeader(Name = "澶囨敞")]
+        [ExporterHeader(DisplayName = "澶囨敞")]
+        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "婧愪富閿�")]
+        public int SourceId { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "澶囨敞")]
+        public string OperateType {  get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        [ImporterHeader(Name = "鍒涘缓浜�")]
+        [ExporterHeader(DisplayName = "鍒涘缓浜�")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍒涘缓浜�")]
+        public string Creater { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "鍒涘缓鏃堕棿")]
+        [ExporterHeader(DisplayName = "鍒涘缓鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏃堕棿")]
+        public DateTime CreateDate { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 鏇存柊鑰�
+        /// </summary>
+        [ImporterHeader(Name = "淇敼浜�")]
+        [ExporterHeader(DisplayName = "淇敼浜�")]
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "淇敼浜�")]
+        public string Modifier { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃ユ湡
+        /// </summary>
+        [ImporterHeader(Name = "淇敼鏃ユ湡")]
+        [ExporterHeader(DisplayName = "淇敼鏃ユ湡")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "淇敼鏃ユ湡")]
+        public DateTime? ModifyDate { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs"
new file mode 100644
index 0000000..8114089
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs"
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IOutboundRepository;
+
+namespace WIDESEA_OutboundRepository
+{
+    public class OutboundRepository : IOutboundRepository
+    {
+        public IOutboundOrderDetailRepository OutboundOrderDetailRepository { get; }
+
+        public IOutboundOrderRepository OutboundOrderRepository { get; }
+
+        public IOutStockLockInfoRepository OutboundStockLockInfoRepository { get; }
+
+        public OutboundRepository(IOutboundOrderDetailRepository outboundOrderDetailRepository, IOutboundOrderRepository outboundOrderRepository, IOutStockLockInfoRepository outboundStockLockInfoRepository)
+        {
+            OutboundOrderDetailRepository = outboundOrderDetailRepository;
+            OutboundOrderRepository = outboundOrderRepository;
+            OutboundStockLockInfoRepository = outboundStockLockInfoRepository;
+        }
+    }
+}
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 1ff7cd0..8f1a8d3 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"
@@ -25,25 +25,24 @@
 {
     public class OutboundOrderDetailService : ServiceBase<Dt_OutboundOrderDetail, IOutboundOrderDetailRepository>, IOutboundOrderDetailService
     {
-        private readonly IStockInfoService _stockInfoService;
-        private readonly IStockInfoDetailService _stockInfoDetailService;
-        private readonly IOutStockLockInfoService _outStockLockInfoService;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
-        private readonly ILocationStatusChangeRecordSetvice _locationStatusChangeRecordSetvice;
-        private readonly IOutboundOrderService _outboundOrderService;
-        private readonly ILocationInfoService _locationInfoService;
+
+        private readonly IStockService _stockService;
+        private readonly IBasicService _basicService;
+        private readonly IRecordService _recordService;
+        private readonly IOutboundRepository _outboundRepository;
+        private readonly IOutStockLockInfoService _outStockLockInfoService;
 
         public IOutboundOrderDetailRepository Repository => BaseDal;
 
-        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IStockInfoService stockInfoService, IOutStockLockInfoService outStockLockInfoService, IUnitOfWorkManage unitOfWorkManage, ILocationStatusChangeRecordSetvice locationStatusChangeRecordSetvice, IOutboundOrderService outboundOrderService, ILocationInfoService locationInfoService, IStockInfoDetailService stockInfoDetailService) : base(BaseDal)
+        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockService, IBasicService basicService,  IRecordService recordService, IOutboundRepository outboundRepository, IOutStockLockInfoService outStockLockInfoService) : base(BaseDal)
         {
-            _stockInfoService = stockInfoService;
-            _outStockLockInfoService = outStockLockInfoService;
             _unitOfWorkManage = unitOfWorkManage;
-            _locationStatusChangeRecordSetvice = locationStatusChangeRecordSetvice;
-            _outboundOrderService = outboundOrderService;
-            _locationInfoService = locationInfoService;
-            _stockInfoDetailService = stockInfoDetailService;
+            _stockService = stockService;
+            _basicService = basicService;
+            _recordService = recordService;
+            _outboundRepository = outboundRepository;
+            _outStockLockInfoService = outStockLockInfoService;
         }
         //
         public WebResponseContent LockOutboundStock(int orderDetailId)
@@ -56,7 +55,7 @@
 
             List<Dt_StockInfo> outStock = new List<Dt_StockInfo>();
 
-            List<Dt_StockInfo> stockInfos = _stockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode);
+            List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode);
             decimal stockTotalQuantity = stockInfos.Select(x => x.Details.Sum(v => v.StockQuantity - v.OutboundQuantity)).Sum(x => x);
             if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
             {
@@ -152,12 +151,12 @@
             (bool, string) checkResult = CheckSelectStockDeital(outboundOrderDetail, stockSelectViews);
             if (!checkResult.Item1) throw new Exception(checkResult.Item2);
 
-            Dt_OutboundOrder outboundOrder = _outboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
+            Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
             decimal originalNeedQuantity = outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity;
 
             decimal needQuantity = originalNeedQuantity;
 
-            List<Dt_StockInfo> outStocks = _stockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
+            List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
             decimal assignQuantity = 0;
             outStocks.ForEach(x =>
             {
@@ -178,9 +177,9 @@
             needQuantity -= assignQuantity;
             if (outboundOrderDetail.OrderQuantity > outboundOrderDetail.LockQuantity)
             {
-                List<Dt_StockInfo> stockInfos = _stockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode);
+                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode);
                 stockInfos = stockInfos.Where(x => !stockSelectViews.Select(v => v.PalletCode).Contains(x.PalletCode)).ToList();
-                List<Dt_StockInfo> autoAssignStocks = _stockInfoService.GetOutboundStocks(stockInfos, outboundOrderDetail.MaterielCode, needQuantity, out decimal residueQuantity);
+                List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, outboundOrderDetail.MaterielCode, needQuantity, out decimal residueQuantity);
                 outboundOrderDetail.LockQuantity += needQuantity - residueQuantity;
                 outStocks.AddRange(autoAssignStocks);
                 outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.AssignOver.ObjToInt();
@@ -192,7 +191,7 @@
 
             List<Dt_OutStockLockInfo> outStockLockInfos = _outStockLockInfoService.GetOutStockLockInfos(outboundOrder, outboundOrderDetail, outStocks);
 
-            List<Dt_LocationInfo> locationInfos = _locationInfoService.Repository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList());
+            List<Dt_LocationInfo> locationInfos = _basicService.LocationInfoService.Repository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList());
 
             return (outStocks, outboundOrderDetail, outStockLockInfos, locationInfos);
         }
@@ -274,13 +273,13 @@
         {
             try
             {
-                _stockInfoService.Repository.UpdateData(stockInfos);
+                _stockService.StockInfoService.Repository.UpdateData(stockInfos);
                 List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
                 foreach (var item in stockInfos)
                 {
                     stockInfoDetails.AddRange(item.Details);
                 }
-                _stockInfoDetailService.Repository.UpdateData(stockInfoDetails);
+                _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetails);
                 BaseDal.UpdateData(outboundOrderDetails);
 
                 List<Dt_OutStockLockInfo> addOutStockLockInfos = outStockLockInfos.Where(x => x.Id == 0).ToList();
@@ -294,8 +293,8 @@
                     _outStockLockInfoService.Repository.UpdateData(updateOutStockLockInfos);
                 }
 
-                _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus.ObjToInt(), StockChangeType.Outbound.ObjToInt(), "", tasks?.Select(x => x.TaskNum).ToList());
-                _locationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus.ObjToInt(), StockChangeType.Outbound.ObjToInt(), "", tasks?.Select(x => x.TaskNum).ToList());
+                _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus);
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
@@ -330,7 +329,7 @@
             List<Dt_OutStockLockInfo> outStockLockInfos = _outStockLockInfoService.GetByOrderDetailId(orderDetailId, OutStockStatus.宸插垎閰�);
             if (outStockLockInfos.Count > 0)
             {
-                List<Dt_StockInfo> stocks = _stockInfoService.Repository.GetStockInfosByPalletCodes(outStockLockInfos.Select(x => x.PalletCode).ToList());
+                List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(outStockLockInfos.Select(x => x.PalletCode).ToList());
                 if (stocks.Count > 0)
                 {
                     stocks.ForEach(x =>
@@ -349,7 +348,7 @@
                         x.Status = OutStockStatus.鎾ら攢.ObjToInt();
                     });
 
-                    List<Dt_LocationInfo> locationInfos = _locationInfoService.Repository.GetLocationInfos(stocks.Select(x => x.LocationCode).ToList());
+                    List<Dt_LocationInfo> locationInfos = _basicService.LocationInfoService.Repository.GetLocationInfos(stocks.Select(x => x.LocationCode).ToList());
 
                     return LockOutboundStockDataUpdate(stocks, new List<Dt_OutboundOrderDetail> { outboundOrderDetail }, outStockLockInfos, locationInfos, LocationStatusEnum.InStock);
                 }
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 3e529c7..9e96bee 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"
@@ -25,7 +25,7 @@
     {
         private readonly IMapper _mapper;
         private readonly IMaterielInfoService _materielInfoService;
-        private readonly IStockInfoService _stockInfoService;
+        private readonly IStockInfoService  _stockService;
         private readonly IStockInfoDetailService _stockDetailService;
 
         public IOutboundOrderRepository Repository => BaseDal;
@@ -35,7 +35,7 @@
             _mapper = mapper;
             _materielInfoService = materielInfoService;
             _stockDetailService = stockDetailService;
-            _stockInfoService = stockInfoService;
+             _stockService = stockInfoService;
         }
 
         public override WebResponseContent AddData(SaveModel saveModel)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
new file mode 100644
index 0000000..4b48024
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IOutboundService;
+
+namespace WIDESEA_OutboundService
+{
+    public class OutboundService : IOutboundService
+    {
+        public IOutboundOrderDetailService OutboundOrderDetailService { get; }
+
+        public IOutboundOrderService OutboundOrderService { get; }
+
+        public IOutStockLockInfoService OutboundStockLockInfoService { get; }
+
+        public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService)
+        {
+            OutboundOrderDetailService = outboundOrderDetailService;
+            OutboundOrderService = outboundOrderService;
+            OutboundStockLockInfoService = outboundStockLockInfoService;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordRepository/RecordRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordRepository/RecordRepository.cs"
new file mode 100644
index 0000000..4fd9b12
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordRepository/RecordRepository.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IRecordRepository;
+
+namespace WIDESEA_RecordRepository
+{
+    public class RecordRepository : IRecordRepository
+    {
+        public ILocationStatusChangeRecordRepository LocationStatusChangeRecordRepository { get; }
+
+        public IStockQuantityChangeRecordRepository StockQuantityChangeRecordRepository { get; }
+
+        public RecordRepository(ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository, IStockQuantityChangeRecordRepository stockQuantityChangeRecordRepository)
+        {
+            LocationStatusChangeRecordRepository = locationStatusChangeRecordRepository;
+            StockQuantityChangeRecordRepository = stockQuantityChangeRecordRepository;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs"
new file mode 100644
index 0000000..5586293
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/RecordService.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IRecordService;
+
+namespace WIDESEA_RecordService
+{
+    public class RecordService : IRecordService
+    {
+        public ILocationStatusChangeRecordSetvice LocationStatusChangeRecordSetvice { get; }
+
+        public IStockQuantityChangeRecordService StockQuantityChangeRecordService { get; }
+
+        public RecordService(ILocationStatusChangeRecordSetvice locationStatusChangeRecordSetvice, IStockQuantityChangeRecordService stockQuantityChangeRecordService)
+        {
+            LocationStatusChangeRecordSetvice = locationStatusChangeRecordSetvice;
+            StockQuantityChangeRecordService = stockQuantityChangeRecordService;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs"
index 404a6f3..d49d154 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs"
@@ -1,11 +1,13 @@
 锘縰sing Org.BouncyCastle.Crypto;
 using SqlSugar;
+using SqlSugar.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Enums;
 using WIDESEA_DTO.Stock;
 using WIDESEA_IBasicRepository;
 using WIDESEA_IStockRepository;
@@ -15,10 +17,8 @@
 {
     public class StockInfoRepository : RepositoryBase<Dt_StockInfo>, IStockInfoRepository
     {
-        private readonly ILocationInfoRepository _locationInfoRepository;
-        public StockInfoRepository(IUnitOfWorkManage unitOfWorkManage, ILocationInfoRepository locationInfoRepository) : base(unitOfWorkManage)
+        public StockInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
         {
-            _locationInfoRepository = locationInfoRepository;
         }
 
         public List<StockViewDTO> GetAllStockViews()
@@ -31,24 +31,22 @@
                 AreaId = a.AreaId,
                 LocationCode = b.LocationCode,
                 Column = a.Column,
-                CreateDate = a.CreateDate,
-                Creater = a.Creater,
+                CreateDate = b.CreateDate,
+                Creater = b.Creater,
                 Depth = a.Depth,
-                EnalbeStatus = a.EnalbeStatus,
-                Id = a.Id,
+                EnalbeStatus = a.EnableStatus,
                 IsFull = b.IsFull,
                 Layer = a.Layer,
                 LocationName = a.LocationName,
                 LocationStatus = a.LocationStatus,
                 LocationType = a.LocationType,
-                Modifier = a.Modifier,
-                ModifyDate = a.ModifyDate,
+                Modifier = b.Modifier,
+                ModifyDate = b.ModifyDate,
                 PalletCode = b.PalletCode,
-                Remark = a.Remark,
+                StockRemark = b.Remark,
                 RoadwayNo = a.RoadwayNo,
                 Row = a.Row,
                 StockId = b.Id,
-                StockRemark = b.Remark,
                 StockStatus = b.StockStatus,
                 Details = b.Details,
             }).Includes(x => x.Details).ToList();
@@ -96,5 +94,12 @@
         {
             return Db.UpdateNav(stockInfo).Include(x => x.Details).ExecuteCommand();
         }
+
+        public Dt_StockInfo GetPalletStockInfo(string roadwayNo)
+        {
+            //ISugarQueryable<string> locationCodes = Db.Queryable<Dt_LocationInfo>().Where(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || LocationEnalbeStatusEnum.Normal.ObjToInt() == x.EnalbeStatus)).Select(x => x.LocationCode);
+
+            return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.宸插叆搴�.ObjToInt() && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (v.EnableStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || LocationEnalbeStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First();
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockRepository.cs"
new file mode 100644
index 0000000..d400d0e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockRepository.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IStockRepository;
+
+namespace WIDESEA_StockRepository
+{
+    public class StockRepository : IStockRepository
+    {
+        public IStockInfoDetailRepository StockInfoDetailRepository { get; }
+
+        public IStockInfoRepository StockInfoRepository { get; }
+
+        public StockRepository(IStockInfoDetailRepository stockInfoDetailRepository, IStockInfoRepository stockInfoRepository)
+        {
+            StockInfoDetailRepository = stockInfoDetailRepository;
+            StockInfoRepository = stockInfoRepository;
+        }
+    }
+}
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 df24206..ca20254 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"
@@ -23,24 +23,19 @@
     public class StockInfoService : ServiceBase<Dt_StockInfo, IStockInfoRepository>, IStockInfoService
     {
         private readonly IMapper _mapper;
-        private readonly IStockQuantityChangeRecordService _stockQuantityChangeRecordService;
-        private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
-        private readonly IWarehouseRepository _warehouseRepository;
-        private readonly IRoadwayInfoRepository _roadwayInfoRepository;
-        private readonly IAreaInfoRepository _areaInfoRepository;
-        private readonly ILocationInfoRepository _locationInfoRepository;
+
+        private readonly IBasicRepository _basicRepository;
+        private readonly IStockRepository _stockRepository;
+        private readonly IRecordService _recordService;
 
         public IStockInfoRepository Repository => BaseDal;
 
-        public StockInfoService(IStockInfoRepository BaseDal, IMapper mapper, IStockQuantityChangeRecordService stockQuantityChangeRecordService, IStockInfoDetailRepository stockInfoDetailRepository, IWarehouseRepository warehouseRepository, IRoadwayInfoRepository roadwayInfoRepository, IAreaInfoRepository areaInfoRepository, ILocationInfoRepository locationInfoRepository) : base(BaseDal)
+        public StockInfoService(IStockInfoRepository BaseDal, IMapper mapper, IBasicRepository basicRepository, IStockRepository stockRepository,IRecordService recordService) : base(BaseDal)
         {
             _mapper = mapper;
-            _stockQuantityChangeRecordService = stockQuantityChangeRecordService;
-            _stockInfoDetailRepository = stockInfoDetailRepository;
-            _warehouseRepository = warehouseRepository;
-            _roadwayInfoRepository = roadwayInfoRepository;
-            _areaInfoRepository = areaInfoRepository;
-            _locationInfoRepository = locationInfoRepository;
+            _basicRepository = basicRepository;
+            _stockRepository = stockRepository;
+            _recordService = recordService;
         }
 
         public Dt_StockInfo? GetStockByPalletCode(string palletCode)
@@ -48,7 +43,7 @@
             Dt_StockInfo stockInfo = BaseDal.QueryFirst(x => x.PalletCode == palletCode);
             if (stockInfo != null)
             {
-                stockInfo.Details = _stockInfoDetailRepository.QueryData(x => x.StockId == stockInfo.Id);
+                stockInfo.Details = _stockRepository.StockInfoDetailRepository.QueryData(x => x.StockId == stockInfo.Id);
             }
             return stockInfo;
         }
@@ -78,7 +73,7 @@
                 {
                     if (stockInfo.Details[i].Id == 0)
                     {
-                        details.Add(_stockInfoDetailRepository.Db.Insertable(stockInfo.Details[i]).ExecuteReturnEntity());
+                        details.Add(_stockRepository.StockInfoDetailRepository.Db.Insertable(stockInfo.Details[i]).ExecuteReturnEntity());
                     }
 
                 }
@@ -97,31 +92,31 @@
             }
             //_stockQuantityChangeRecordRepository.AddData(stockQuantityChangeRecords);
             stockInfo.Details = details;
-            _stockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, StockChangeType.MaterielGroup);
+            _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, StockChangeType.MaterielGroup);
         }
 
         public List<Dt_StockInfo> GetUseableStocks(string materielCode)
         {
-            List<string> roadways = _roadwayInfoRepository.CanOutRoadwayNos;
+            List<string> roadways = _basicRepository.RoadwayInfoRepository.CanOutRoadwayNos;
 
-            List<int> warehouseIds = _warehouseRepository.EnableWarehouseIds;
+            List<int> warehouseIds = _basicRepository.WarehouseRepository.EnableWarehouseIds;
 
-            List<int> areaIds = _areaInfoRepository.GetEnableAreaIds(warehouseIds);
+            List<int> areaIds = _basicRepository.AreaInfoRepository.GetEnableAreaIds(warehouseIds);
 
-            List<string> locationCodes = _locationInfoRepository.GetCanOutLocationCodes(roadways, areaIds);
+            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(roadways, areaIds);
 
             return BaseDal.GetStockInfos(materielCode, locationCodes);
         }
 
         public List<StockSelectViewDTO> GetStockSelectViews(string materielCode)
         {
-            List<string> roadways = _roadwayInfoRepository.CanOutRoadwayNos;
+            List<string> roadways = _basicRepository.RoadwayInfoRepository.CanOutRoadwayNos;
 
-            List<int> warehouseIds = _warehouseRepository.EnableWarehouseIds;
+            List<int> warehouseIds = _basicRepository.WarehouseRepository.EnableWarehouseIds;
 
-            List<int> areaIds = _areaInfoRepository.GetEnableAreaIds(warehouseIds);
+            List<int> areaIds = _basicRepository.AreaInfoRepository.GetEnableAreaIds(warehouseIds);
 
-            List<string> locationCodes = _locationInfoRepository.GetCanOutLocationCodes(roadways, areaIds);
+            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(roadways, areaIds);
 
             return BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
             {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs"
new file mode 100644
index 0000000..4f74111
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs"
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_IStockService;
+
+namespace WIDESEA_StockService
+{
+    public class StockSerivce:IStockService
+    {
+        public IStockInfoDetailService StockInfoDetailService { get; }
+
+        public IStockInfoService StockInfoService { get; }
+
+        public StockSerivce(IStockInfoDetailService stockInfoDetailService, IStockInfoService stockInfoService)
+        {
+            StockInfoDetailService = stockInfoDetailService;
+            StockInfoService = stockInfoService;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs"
new file mode 100644
index 0000000..01fc23f
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs"
@@ -0,0 +1,107 @@
+锘�
+using Microsoft.AspNetCore.Http;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Drawing.Printing;
+using System.Dynamic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Utilities;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockRepository;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StockService
+{
+    public class StockViewService : IStockViewService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly SqlSugarClient _dbBase;
+
+        public StockViewService(IUnitOfWorkManage unitOfWorkManage)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _dbBase = unitOfWorkManage.GetDbClient();
+        }
+
+        public virtual PageGridData<StockViewDTO> GetPageData(PageDataOptions options)
+        {
+            string where = options.ValidatePageOptions(typeof(StockViewDTO).GetProperties());
+            //鑾峰彇鎺掑簭瀛楁
+            //Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(typeof(StockViewDTO).GetProperties());
+            //List<OrderByModel> orderByModels = new List<OrderByModel>();
+            //foreach (var item in orderbyDic)
+            //{
+            //    OrderByModel orderByModel = new OrderByModel()
+            //    {
+            //        FieldName = item.Key,
+            //        OrderByType = item.Value
+            //    };
+            //    orderByModels.Add(orderByModel);
+            //}
+            int totalCount = 0;
+
+            ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>();
+            ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>();
+
+            List<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).WhereIF(!string.IsNullOrEmpty(where), where).Select((b, a) => new StockViewDTO
+            {
+                AreaId = a.AreaId,
+                LocationCode = b.LocationCode,
+                Column = a.Column,
+                CreateDate = b.CreateDate,
+                Creater = b.Creater,
+                Depth = a.Depth,
+                EnalbeStatus = a.EnableStatus,
+                IsFull = b.IsFull,
+                Layer = a.Layer,
+                LocationName = a.LocationName,
+                LocationStatus = a.LocationStatus,
+                LocationType = a.LocationType,
+                Modifier = b.Modifier,
+                ModifyDate = b.ModifyDate,
+                PalletCode = b.PalletCode,
+                StockRemark = b.Remark,
+                RoadwayNo = a.RoadwayNo,
+                Row = a.Row,
+                StockId = b.Id,
+                StockStatus = b.StockStatus,
+                Details = b.Details,
+            }).ToPageList(options.Page, options.Rows, ref totalCount);
+            return new PageGridData<StockViewDTO>(totalCount, list);
+
+        }
+
+        public virtual object GetDetailPage(PageDataOptions pageData)
+        {
+            Type t = typeof(StockViewDTO);
+
+            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
+            string keyName = t.GetKeyName();
+            ////鐢熸垚鏌ヨ鏉′欢
+            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
+            int totalCount = 0;
+            PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
+            if (propertyInfo != null)
+            {
+                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
+                Navigate? navigate = propertyInfo.GetCustomAttribute<Navigate>();
+                if (navigate != null)
+                {
+                    List<ExpandoObject> list = _dbBase.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
+                    return new PageGridData<ExpandoObject>(totalCount, list);
+                }
+            }
+            return new PageGridData<object>(total: 0, null);
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemRepository/Sys_MenuRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemRepository/Sys_MenuRepository.cs"
index 3f3b7d8..adfc65f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemRepository/Sys_MenuRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemRepository/Sys_MenuRepository.cs"
@@ -27,11 +27,10 @@
 
         public List<MenuDTO> GetAllMenu()
         {
-            List<Sys_Menu> menus = base.QueryData(x => x.Enable == 1 || x.Enable == 2).OrderByDescending(a => a.OrderNo).ThenByDescending(q => q.ParentId).ToList();
+            List<Sys_Menu> menus = base.QueryData(x => (x.Enable == 1 || x.Enable == 2) && x.MenuType == App.User.MenuType).OrderByDescending(a => a.OrderNo).ThenByDescending(q => q.ParentId).ToList();
             List<MenuDTO> _menus = _mapper.Map<List<MenuDTO>>(menus);
             _menus.ForEach(x =>
             {
-                x.MenuType ??= 0;
                 if (!string.IsNullOrEmpty(x.Auth) && x.Auth.Length > 10)
                 {
                     try
@@ -99,7 +98,7 @@
                         ParentId = a.ParentId,
                         TableName = (a.TableName ?? "").ToLower(),
                         UserAuth = a.Auth,
-                        MenuType = a.MenuType ?? 0
+                        MenuType = a.MenuType
                     }).ToList();
                 return MenuActionToArray(permissions);
             }
@@ -111,7 +110,7 @@
             {
                 //娌℃湁redis/memory缂撳瓨瑙掕壊鐨勭増鏈彿鎴栦笌褰撳墠鏈嶅姟鍣ㄧ殑瑙掕壊鐗堟湰鍙蜂笉鍚屾椂锛屽埛鏂扮紦瀛�
 
-                List<Permissions> _permissions = QueryTabs<Sys_Menu, Sys_RoleAuth, Permissions>((a, b) => new object[] { JoinType.Inner, a.MenuId == b.MenuId }, (a, b) => new Permissions { MenuId = a.MenuId, ParentId = a.ParentId, TableName = (a.TableName ?? "").ToLower(), MenuAuth = a.Auth, UserAuth = b.AuthValue ?? "", MenuType = a.MenuType ?? 0 }, (a, b) => b.RoleId == roleId, x => true);
+                List<Permissions> _permissions = QueryTabs<Sys_Menu, Sys_RoleAuth, Permissions>((a, b) => new object[] { JoinType.Inner, a.MenuId == b.MenuId }, (a, b) => new Permissions { MenuId = a.MenuId, ParentId = a.ParentId, TableName = (a.TableName ?? "").ToLower(), MenuAuth = a.Auth, UserAuth = b.AuthValue ?? "", MenuType = a.MenuType }, (a, b) => b.RoleId == roleId, x => true);
 
                 ActionToArray(_permissions);
 
@@ -194,7 +193,7 @@
                     p.Icon,
                     p.Enable,
                     // 2022.03.26澧炵Щ鍔ㄧ鍔犺彍鍗曠被鍨�
-                    MenuType = p.MenuType ?? 0,
+                    p.MenuType,
                     p.CreateDate,
                     p.Creater,
                     p.TableName,
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 327680c..8bed7e3 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"
@@ -135,7 +135,6 @@
                     Sys_Menu sysMenu = BaseDal.QueryFirst(x => x.TableName == menu.TableName);
                     if (sysMenu != null)
                     {
-                        sysMenu.MenuType ??= 0;
                         if (sysMenu.MenuType == menu.MenuType)
                         {
                             if ((menu.MenuId > 0 && sysMenu.MenuId != menu.MenuId)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs"
new file mode 100644
index 0000000..b3d50db
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs"
@@ -0,0 +1,179 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Core;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_TaskInfoService
+{
+    public partial class TaskService
+    {
+        /// <summary>
+        /// 绔嬪簱鍑哄簱AGV鎼繍
+        /// </summary>
+        /// <param name="outTask"></param>
+        /// <returns></returns>
+        public WebResponseContent ShelfOutboundCarry(Dt_Task outTask)
+        {
+            Dt_CachePoint cachePoint = GetCachePointByStartPoint(outTask.TargetAddress);
+
+            Dt_Task task = new()
+            {
+                CurrentAddress = outTask.TargetAddress,
+                Grade = 0,
+                NextAddress = cachePoint.PointCode,
+                OrderNo = outTask.OrderNo,
+                PalletCode = outTask.PalletCode + "-AGV",
+                Roadway = "",
+                SourceAddress = outTask.TargetAddress,
+                TargetAddress = cachePoint.PointCode,
+                SourceKey = outTask.TaskId,
+                TaskNum = outTask.TaskNum,
+                TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
+                TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
+            };
+            cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
+
+            _basicService.CachePointService.Repository.UpdateData(cachePoint);
+            Repository.AddData(task);
+            return WebResponseContent.Instance.OK();
+        }
+
+        /// <summary>
+        /// 鍙枡
+        /// </summary>
+        /// <param name="endPoint"></param>
+        /// <returns></returns>
+        public WebResponseContent CallMateriel(string endPoint)
+        {
+            Dt_CachePoint cachePoint = GetCachePointByEndPoint(endPoint);
+
+            Dt_Task task = new Dt_Task()
+            {
+                CurrentAddress = cachePoint.PointCode,
+                Grade = 0,
+                NextAddress = endPoint,
+                OrderNo = "",
+                PalletCode = cachePoint.Remark,
+                Roadway = "",
+                SourceAddress = cachePoint.PointCode,
+                TargetAddress = endPoint,
+                SourceKey = 0,
+                TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
+                TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
+            };
+            cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
+
+            _basicService.CachePointService.Repository.UpdateData(cachePoint);
+            Repository.AddData(task);
+            return WebResponseContent.Instance.OK();
+        }
+
+        /// <summary>
+        /// 鐗╂枡鎼繍
+        /// </summary>
+        /// <param name="startPoint"></param>
+        /// <returns></returns>
+        public WebResponseContent MaterielCarry(string startPoint)
+        {
+            Dt_CachePoint cachePoint = GetCachePointByStartPoint(startPoint);
+
+            Dt_Task task = new()
+            {
+                CurrentAddress = startPoint,
+                Grade = 0,
+                NextAddress = cachePoint.PointCode,
+                OrderNo = "",
+                PalletCode = startPoint + "-AGV",
+                Roadway = "",
+                SourceAddress = startPoint,
+                TargetAddress = cachePoint.PointCode,
+                SourceKey = 0,
+                TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
+                TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
+            };
+            cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
+
+            _basicService.CachePointService.Repository.UpdateData(cachePoint);
+            Repository.AddData(task);
+            return WebResponseContent.Instance.OK();
+        }
+
+        private Dt_CachePoint GetCachePointByStartPoint(string startPoint)
+        {
+            Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.StartArea == startPoint);
+            if (areaRouter == null)
+            {
+                throw new Exception("鏈壘鍒拌矾鐢变俊鎭�");
+            }
+            Dt_AreaInfo areaInfo = _basicService.AreaInfoService.Repository.QueryFirst(x => x.AreaCode == areaRouter.NextArea);
+            if (areaInfo == null)
+            {
+                throw new Exception("鏈壘鍒颁笅涓�鍖哄煙淇℃伅");
+            }
+
+            Dt_CachePoint? cachePoint = _basicService.CachePointService.AssignCachePoint(areaInfo.Id);
+            if (cachePoint == null)
+            {
+                throw new Exception("鏈壘鍒扮┖闂茬紦瀛樼偣");
+            }
+
+            return cachePoint;
+        }
+
+        private Dt_CachePoint GetCachePointByEndPoint(string endPoint)
+        {
+            Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.NextArea == endPoint);
+            if (areaRouter == null)
+            {
+                throw new Exception("鏈壘鍒拌矾鐢变俊鎭�");
+            }
+            Dt_AreaInfo areaInfo = _basicService.AreaInfoService.Repository.QueryFirst(x => x.AreaCode == areaRouter.StartArea);
+            if (areaInfo == null)
+            {
+                throw new Exception("鏈壘鍒拌捣鐐圭紦瀛樺尯鍩熶俊鎭�");
+            }
+
+            Dt_CachePoint? cachePoint = _basicService.CachePointService.GetIbStockCachePoint(areaInfo.Id);
+            if (cachePoint == null)
+            {
+                throw new Exception("鏈壘鍒版湁璐х紦瀛樼偣");
+            }
+            return cachePoint;
+        }
+
+        public object AGVTaskFeedBack(AGVTaskFeedBackModel model)
+        {
+            Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == Convert.ToInt32(model.Task_id));
+            if (task == null)
+            {
+                return new { code = 404, message = "鏈壘鍒拌浠诲姟" };
+            }
+
+            Dt_CachePoint startCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.SourceAddress);
+            if (startCachePoint != null)
+            {
+                startCachePoint.PointStatus = LocationStatusEnum.Free.ObjToInt();
+                _basicService.CachePointService.Repository.UpdateData(startCachePoint);
+            }
+
+            Dt_CachePoint endCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.TargetAddress);
+            if (endCachePoint != null)
+            {
+                endCachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt();
+                _basicService.CachePointService.Repository.UpdateData(endCachePoint);
+            }
+
+            BaseDal.DeleteData(task);
+
+            return new { code = 200, message = "鎴愬姛" };
+        }
+    }
+}
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"
index d2c5191..51ee5d1 100644
--- "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"
@@ -72,7 +72,7 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_StockInfo stockInfo = _stockInfoService.Repository.GetStockInfo(palletCode);
+                Dt_StockInfo stockInfo = _stockService.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);
@@ -99,7 +99,7 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation(stationCode, taskType);
+                Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(stationCode, taskType);
                 if (locationInfo != null)
                 {
                     Dt_Task task = new()
@@ -126,15 +126,15 @@
                             orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
 
                             stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
-                            _stockInfoService.Repository.UpdateData(stockInfo);
+                            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                         }
                         else
                         {
                             return content = WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
                         }
                     }
-                    _locationInfoService.Repository.UpdateData(locationInfo);
-                    _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), orderNo, task.TaskNum);
+                    _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
+                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), orderNo, task.TaskNum);
 
                     return content = WebResponseContent.Instance.OK();
                 }
@@ -186,7 +186,7 @@
             }
             else
             {
-                if (_stockInfoService.Repository.QueryFirst(x => x.PalletCode == palletCode) != null)
+                if (_stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == palletCode) != null)
                 {
                     return (false, "璇ユ墭鐩樺凡瀛樺湪搴撳唴");
                 }
@@ -195,35 +195,6 @@
             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"
index 924d427..4bb2787 100644
--- "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"
@@ -13,6 +13,12 @@
 {
     public partial class TaskService
     {
+
+        /// <summary>
+        /// 搴撳瓨鏁版嵁杞嚭搴撲换鍔�
+        /// </summary>
+        /// <param name="stockInfos"></param>
+        /// <returns></returns>
         public List<Dt_Task> GetTasks(List<Dt_StockInfo> stockInfos)
         {
             List<Dt_Task> tasks = new List<Dt_Task>();
@@ -22,8 +28,8 @@
 
                 if (stockInfo != null)
                 {
-                    Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
-                    Dt_RoadwayInfo roadwayInfo = _roadwayInfoRepository.QueryFirst(x => x.RoadwayNo == locationInfo.RoadwayNo);
+                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
+                    Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.RoadwayNo == locationInfo.RoadwayNo);
                     if (roadwayInfo != null)
                     {
                         Dt_Task task = new()
@@ -35,9 +41,9 @@
                             Roadway = locationInfo.RoadwayNo,
                             SourceAddress = stockInfo.LocationCode,
                             TargetAddress = roadwayInfo.OutStationCode,
-                            TaskStatus = InTaskStatusEnum.InNew.ObjToInt(),
+                            TaskStatus = OutTaskStatusEnum.OutNew.ObjToInt(),
                             TaskType = TaskTypeEnum.Outbound.ObjToInt(),
-                            TaskNum = BaseDal.GetTaskNum("SeqTaskNum")
+                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                         };
                         tasks.Add(task);
                     }
@@ -46,10 +52,17 @@
             return tasks;
         }
 
+        /// <summary>
+        /// 鍑哄簱浠诲姟鏁版嵁澶勭悊
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
         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);
+            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
 
             if (outboundOrderDetail == null)
             {
@@ -66,7 +79,7 @@
             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);
+                (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews);
                 if (result.Item1 != null && result.Item1.Count > 0)
                 {
                     tasks = GetTasks(result.Item1);
@@ -88,10 +101,10 @@
             }
             else
             {
-                List<Dt_OutStockLockInfo> stockLockInfos = _outStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId);
+                List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId);
                 if (stockLockInfos != null && stockLockInfos.Count > 0)
                 {
-                    List<Dt_StockInfo> stocks = _stockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
+                    List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
                     tasks = GetTasks(stocks);
                 }
             }
@@ -99,6 +112,12 @@
             return (tasks, stockInfos, orderDetail == null ? null : new List<Dt_OutboundOrderDetail> { orderDetail }, outStockLockInfos, locationInfos);
         }
 
+        /// <summary>
+        /// 鐢熸垚鍑哄簱浠诲姟
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
         public WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
         {
             try
@@ -115,6 +134,15 @@
             }
         }
 
+        /// <summary>
+        /// 鐢熸垚鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴�
+        /// </summary>
+        /// <param name="tasks"></param>
+        /// <param name="stockInfos"></param>
+        /// <param name="outboundOrderDetails"></param>
+        /// <param name="outStockLockInfos"></param>
+        /// <param name="locationInfos"></param>
+        /// <returns></returns>
         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
@@ -124,7 +152,7 @@
                 BaseDal.AddData(tasks);
                 if (stockInfos != null && outboundOrderDetails != null && outStockLockInfos != null && locationInfos != null)
                 {
-                    WebResponseContent content = _outboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
+                    WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
 
                     if (content.Status)
                     {
@@ -143,7 +171,7 @@
                         x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                     });
 
-                    _outboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
+                    _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                 }
                 _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
@@ -156,6 +184,11 @@
 
         }
 
+        /// <summary>
+        /// 鐢熸垚鍑哄簱浠诲姟
+        /// </summary>
+        /// <param name="keys"></param>
+        /// <returns></returns>
         public WebResponseContent GenerateOutboundTask(int[] keys)
         {
             try
@@ -200,5 +233,55 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        /// <summary>
+        /// 绌烘墭鐩樺嚭搴撲换鍔�
+        /// </summary>
+        /// <param name="inTask"></param>
+        /// <returns></returns>
+        public WebResponseContent PalletOutboundTask(string roadwayNo, string endStation)
+        {
+            try
+            {
+                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetPalletStockInfo(roadwayNo);
+                if (stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒扮┖鎵樼洏搴撳瓨");
+                }
+                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode && x.RoadwayNo == roadwayNo);
+                if (locationInfo == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒扮┖鎵樼洏搴撳瓨瀵瑰簲鐨勮揣浣嶄俊鎭�");
+                }
+                Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.InStationCode == endStation && x.RoadwayNo == roadwayNo);
+                if (roadwayInfo == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒扮粓鐐瑰贩閬撲俊鎭�");
+                }
+                Dt_Task task = new Dt_Task()
+                {
+                    CurrentAddress = stockInfo.LocationCode,
+                    Grade = 0,
+                    NextAddress = endStation,
+                    PalletCode = stockInfo.PalletCode,
+                    Roadway = roadwayNo,
+                    SourceAddress = stockInfo.LocationCode,
+                    TargetAddress = endStation,
+                    TaskStatus = OutTaskStatusEnum.OutNew.ObjToInt(),
+                    TaskType = TaskTypeEnum.PalletOutbound.ObjToInt(),
+                };
+
+                _unitOfWorkManage.BeginTran();
+                stockInfo.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
+                locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                BaseDal.AddData(task);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                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 4e92639..e0ba81d 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"
@@ -37,6 +37,7 @@
 using WIDESEA_DTO.Stock;
 using WIDESEA_IBasicRepository;
 using WIDESEA_IBasicService;
+using WIDESEA_IInboundService;
 using WIDESEA_IOutboundRepository;
 using WIDESEA_IOutboundService;
 using WIDESEA_IRecordService;
@@ -53,46 +54,108 @@
     {
         private readonly IMapper _mapper;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
-        private readonly ILocationInfoService _locationInfoService;
-        private readonly IStockInfoService _stockInfoService;
-        private readonly ILocationStatusChangeRecordSetvice _locationStatusChangeRecordSetvice;
-        private readonly IOutboundOrderDetailService _outboundOrderDetailService;
-        private readonly IRoadwayInfoRepository _roadwayInfoRepository;
-        private readonly IOutStockLockInfoService _outStockLockInfoService;
+
+        private readonly IBasicService _basicService;
+        private readonly IOutboundService _outboundService;
+        private readonly IInboundService _inboundService;
+        private readonly IRecordService _recordService;
+        private readonly IStockService _stockService;
 
         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)
+        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService) : base(BaseDal)
         {
             _mapper = mapper;
-            _locationInfoService = locationInfoService;
-            _stockInfoService = stockInfoService;
-            _locationStatusChangeRecordSetvice = locationStatusChangeRecordSetvice;
-            _outboundOrderDetailService = outboundOrderDetailService;
-            _roadwayInfoRepository = roadwayInfoRepository;
             _unitOfWorkManage = unitOfWorkManage;
-            _outStockLockInfoService = outStockLockInfoService;
+            _basicService = basicService;
+            _outboundService = outboundService;
+            _inboundService = inboundService;
+            _recordService = recordService;
+            _stockService = stockService;
+        }
+
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        public WebResponseContent TaskCompleted(int taskNum)
+        {
+            try
+            {
+                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                if (task == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔′俊鎭�");
+                }
+                MethodInfo? methodInfo = GetType().GetMethod(((TaskTypeEnum)task.TaskType) + "TaskCompleted");
+                if (methodInfo != null)
+                {
+                    WebResponseContent? responseContent = (WebResponseContent?)methodInfo.Invoke(this, new object[] { task });
+                    if (responseContent != null)
+                    {
+                        return responseContent;
+                    }
+                }
+                return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔$被鍨嬪搴斾笟鍔″鐞嗛�昏緫");
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+
         }
 
         public WebResponseContent InboundTaskCompleted(Dt_Task task)
         {
-            Dt_StockInfo stockInfo = _stockInfoService.Repository.GetStockInfo(task.PalletCode);
+            Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
 
-            Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+            Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
 
-            CheckInboundCompleted(stockInfo, locationInfo);
+            CheckCompleted(stockInfo, locationInfo);
 
             stockInfo.LocationCode = locationInfo.LocationCode;
             stockInfo.StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt();
-            _stockInfoService.Repository.UpdateData(stockInfo);
+            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
 
             int beforeStatus = locationInfo.LocationStatus;
-            locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
-            _locationInfoService.Repository.UpdateData(locationInfo);
+            locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+            _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
 
             BaseDal.DeleteData(task);
 
-            _locationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+
+            return WebResponseContent.Instance.OK();
+        }
+
+        /// <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 = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+
+            CheckCompleted(stockInfo, locationInfo);
+
+            _stockService.StockInfoService.Repository.AddData(stockInfo);
+
+            int beforeStatus = locationInfo.LocationStatus;
+            locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
+            _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
+
+
+            BaseDal.DeleteData(task);
+
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
 
             return WebResponseContent.Instance.OK();
         }
@@ -103,7 +166,7 @@
         /// <param name="stockInfo"></param>
         /// <param name="locationInfo"></param>
         /// <returns></returns>
-        private (bool, string) CheckInboundCompleted(Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo, bool isCheckStockDetail = true)
+        private (bool, string) CheckCompleted(Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo, bool isCheckStockDetail = true)
         {
             if (stockInfo == null)
             {
@@ -123,29 +186,48 @@
             return (true, "鎴愬姛");
         }
 
-        /// <summary>
-        /// 浠诲姟瀹屾垚
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        public WebResponseContent TaskCompleted(int taskNum)
+        public WebResponseContent OutboundTaskCompleted(Dt_Task task)
         {
-            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
-            if (task == null)
-            {
-                return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔′俊鎭�");
-            }
-            MethodInfo? methodInfo = GetType().GetMethod(((TaskTypeEnum)task.TaskType) + "TaskCompleted");
-            if (methodInfo != null)
-            {
-                WebResponseContent? responseContent = (WebResponseContent?)methodInfo.Invoke(this, new object[] { task });
-                if (responseContent != null)
-                {
-                    return responseContent;
-                }
-            }
-            return WebResponseContent.Instance.Error();
+            Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
+
+            Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+
+            CheckCompleted(stockInfo, locationInfo);
+
+            stockInfo.LocationCode = locationInfo.LocationCode;
+            stockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+
+            int beforeStatus = locationInfo.LocationStatus;
+            locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+            _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
+
+            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.鑷姩瀹屾垚 : OperateType.浜哄伐瀹屾垚);
+
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+
+            return OnOutboundTaskCompleted?.Invoke(task) ?? WebResponseContent.Instance.OK();
         }
 
+        public WebResponseContent PalletOutboundTaskCompleted(Dt_Task task)
+        {
+            Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
+
+            Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+
+            CheckCompleted(stockInfo, locationInfo);
+
+            _stockService.StockInfoService.Repository.DeleteData(stockInfo);
+
+            int beforeStatus = locationInfo.LocationStatus;
+            locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+            _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
+
+            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.鑷姩瀹屾垚 : OperateType.浜哄伐瀹屾垚);
+
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", 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/TaskServiceExtendFunc.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskServiceExtendFunc.cs"
new file mode 100644
index 0000000..b16c148
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskServiceExtendFunc.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_TaskInfoService
+{
+    public partial class TaskService
+    {
+        public Func<Dt_Task, WebResponseContent>? OnOutboundTaskCompleted => ShelfOutboundCarry;
+    }
+}
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 129d2e7..5272e9b 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"
@@ -8,9 +8,9 @@
 
   <ItemGroup>
     <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IInboundService\WIDESEA_IInboundService.csproj" />
     <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/Basic/AreaInfoController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/AreaInfoController.cs"
index bae6002..ff6f607 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/AreaInfoController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/AreaInfoController.cs"
@@ -1,9 +1,12 @@
 锘縰sing Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Swashbuckle.AspNetCore.Annotations;
 using WIDESEA_Core.BaseController;
+using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO;
+using WIDESEA_DTO.Basic;
 using WIDESEA_IBasicService;
 using WIDESEA_Model.Models;
 
@@ -13,9 +16,18 @@
     [ApiController]
     public class AreaInfoController : ApiBaseController<IAreaInfoService, Dt_AreaInfo>
     {
-        public AreaInfoController(IAreaInfoService service) : base(service)
+        private readonly IBasicService _basicService;
+        public AreaInfoController(IAreaInfoService service,IBasicService basicService) : base(service)
         {
+            _basicService = basicService;
         }
 
+        [HttpPost, Route("GetAllLocationGroups"), AllowAnonymous]
+        
+        public List<LocationGroupDTO> GetAllLocationGroups(string roadway)
+        {
+            List<LocationGroupDTO> locations = _basicService.LocationInfoService.Repository.GetAllLocationGroups(roadway);
+            return locations;
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
index 069a764..fd5789a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
@@ -23,10 +23,6 @@
             return Service.AddInboundOrder(orderAddDTO);
         }
 
-        [HttpPost, Route("MaterielGroup")]
-        public WebResponseContent MaterielGroup([FromBody] MaterielGroupDTO materielGroupDTO)
-        {
-            return Service.MaterielGroup(materielGroupDTO);
-        }
+        
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs"
new file mode 100644
index 0000000..ef4b831
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs"
@@ -0,0 +1,46 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_ITaskInfoService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    [Route("api/PDA")]
+    [ApiController]
+    public class PDAController : ApiBaseController<ITaskService, Dt_Task>
+    {
+        private readonly IInboundService _inboundService;
+        public PDAController(ITaskService service, IInboundService inboundService) : base(service)
+        {
+            _inboundService = inboundService;
+        }
+
+        [HttpPost, Route("CallMateriel")]
+        public WebResponseContent CallMateriel(string endPoint)
+        {
+            return Service.CallMateriel(endPoint);
+        }
+
+        [HttpPost, Route("MaterielCarry")]
+        public WebResponseContent MaterielCarry(string startPoint)
+        {
+            return Service.MaterielCarry(startPoint);
+        }
+
+        [HttpPost, Route("MaterielGroup")]
+        public WebResponseContent MaterielGroup([FromBody] MaterielGroupDTO materielGroupDTO)
+        {
+            return _inboundService.InbounOrderService.MaterielGroup(materielGroupDTO);
+        }
+
+        [HttpPost, Route("QueryOrderInfo")]
+        public WebResponseContent QueryOrderInfo(int pageNo, string orderNo)
+        {
+            return _inboundService.InbounOrderService.QueryOrderInfo(pageNo, orderNo);
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
index 3846217..086702d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
@@ -14,16 +14,14 @@
     [ApiController]
     public class StockInfoController : ApiBaseController<IStockInfoService, Dt_StockInfo>
     {
-        private readonly IStockInfoRepository _stockInfoRepository;
-        public StockInfoController(IStockInfoService service, IStockInfoRepository stockInfoRepository) : base(service)
+        public StockInfoController(IStockInfoService service) : base(service)
         {
-            _stockInfoRepository = stockInfoRepository;
         }
 
         [HttpPost, Route("GetAllStockViews"), AllowAnonymous]
         public List<StockViewDTO> GetAllStockViews()
         {
-            return _stockInfoRepository.GetAllStockViews();
+            return Service.Repository.GetAllStockViews();
         }
 
         [HttpPost, Route("GetStockSelectViews"), AllowAnonymous]
@@ -31,5 +29,10 @@
         {
             return Service.GetStockSelectViews(materielCode);
         }
+        [HttpPost, Route("GetPalletStockInfo"), AllowAnonymous]
+        public Dt_StockInfo GetPalletStockInfo(string roadwayNo)
+        {
+            return Service.Repository.GetPalletStockInfo(roadwayNo);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs"
new file mode 100644
index 0000000..a0b5e6e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs"
@@ -0,0 +1,20 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    [Route("api/StockView")]
+    [ApiController]
+    public class StockViewController : ApiBaseController<IStockViewService, StockViewDTO>
+    {
+        public StockViewController(IStockViewService service) : base(service)
+        {
+        }
+
+        
+    }
+}
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 ed443cd..47d63c8 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"
@@ -35,6 +35,7 @@
         {
             return Json(Service.Login(loginInfo));
         }
+
         [HttpPost, Route("getCurrentUserInfo")]
         public WebResponseContent GetCurrentUser()
         {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj"
index 41c3154..abd859e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj"
@@ -43,6 +43,10 @@
 	</ItemGroup>
 	
 	<ItemGroup>
+	  <PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.7.3" />
+	</ItemGroup>
+	
+	<ItemGroup>
 	  <ProjectReference Include="..\WIDESEA_BasicService\WIDESEA_BasicService.csproj" />
 	  <ProjectReference Include="..\WIDESEA_InboundService\WIDESEA_InboundService.csproj" />
 	  <ProjectReference Include="..\WIDESEA_OutboundService\WIDESEA_OutboundService.csproj" />

--
Gitblit v1.9.3