From c05003c73bbe527478bccc55efe25c19068b6f50 Mon Sep 17 00:00:00 2001
From: Huangxiaoqiang-03 <1247017146@qq.com>
Date: 星期三, 23 十月 2024 17:30:42 +0800
Subject: [PATCH] 1

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs                  |    9 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/LocationEnum.cs                                                |    8 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs                                    |   48 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs                                      |    3 
 代码管理/WMS/WIDESEA_WMSClient/src/views/basic/cachePoint.vue                                                    |  206 ++++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs                                  |   20 
 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue                                               |  396 +++++++--------
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/CachePointController.cs                       |   17 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ddd95cc1-aa8d-43ca-a1cd-af308e641ed7.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs                            |   81 +++
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/882415c3-1a90-4a52-810f-4d72d250cc16.vsidx |    0 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8cf517ec-1cf8-421f-a81d-060a1c174e1a.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs                             |    5 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1abe9649-fb25-4398-9e24-b4ac1e6dab06.vsidx |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs                                                      |    2 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/basic/CachePoint.js                                                 |   69 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService.cs                               |  141 +++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs                                          |    2 
 代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js                                                            |   16 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0411b122-4aac-4e05-87bf-b24318b57075.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue                                                   |    7 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/StockEnum.cs                                                   |   21 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs                                      |   19 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs                         |   44 +
 代码管理/WMS/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue                                    |   69 --
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                                                |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                            |   39 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs                             |   40 +
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/18868982-b034-467b-8435-c66e181e1f8b.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj                                  |    1 
 /dev/null                                                                                                    |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskEnum.cs                                                    |   12 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/44ea72ad-ffb7-4b5b-85e0-241240f07f30.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs                       |   44 +
 代码管理/WMS/WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue                                   |   22 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs                               |   40 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs                                    |    2 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/86da0ee4-06d1-42f2-a5bf-e1a405be4a6d.vsidx |    0 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/29b80993-5f2f-4105-84fe-f842cfdb3cd5.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSClient/src/views/basic/areaInfo.vue                                                      |   11 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs                                     |    6 
 代码管理/WCS/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue                                                |    7 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaInfo.cs                                         |    2 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/96826077-2dcc-4819-9493-76e6f8cc4f44.vsidx |    0 
 44 files changed, 1,086 insertions(+), 325 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue"
index 6b86cae..2c1fa51 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue"
@@ -94,6 +94,7 @@
       deviceCode: "",
       deviceType: "",
       deviceStatus: "",
+      createDate:"",
     });
     const searchFormOptions = ref([
       [
@@ -111,7 +112,11 @@
           type: "select",
           dataKey: "deviceStatus",
           data: [],
-        },
+        },{
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+      },
       ],
     ]);
     const columns = ref([
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/18868982-b034-467b-8435-c66e181e1f8b.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/18868982-b034-467b-8435-c66e181e1f8b.vsidx"
new file mode 100644
index 0000000..5360b09
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/18868982-b034-467b-8435-c66e181e1f8b.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1abe9649-fb25-4398-9e24-b4ac1e6dab06.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1abe9649-fb25-4398-9e24-b4ac1e6dab06.vsidx"
new file mode 100644
index 0000000..8724a06
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1abe9649-fb25-4398-9e24-b4ac1e6dab06.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9c6ca323-4d49-485c-9289-6f419648e181.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/29b80993-5f2f-4105-84fe-f842cfdb3cd5.vsidx"
similarity index 100%
rename from "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9c6ca323-4d49-485c-9289-6f419648e181.vsidx"
rename to "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/29b80993-5f2f-4105-84fe-f842cfdb3cd5.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/882415c3-1a90-4a52-810f-4d72d250cc16.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/882415c3-1a90-4a52-810f-4d72d250cc16.vsidx"
new file mode 100644
index 0000000..06854c4
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/882415c3-1a90-4a52-810f-4d72d250cc16.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/88a80046-55e1-415d-90b6-d311138ea206.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/88a80046-55e1-415d-90b6-d311138ea206.vsidx"
deleted file mode 100644
index c293a55..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/88a80046-55e1-415d-90b6-d311138ea206.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8cf517ec-1cf8-421f-a81d-060a1c174e1a.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8cf517ec-1cf8-421f-a81d-060a1c174e1a.vsidx"
new file mode 100644
index 0000000..34549a4
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8cf517ec-1cf8-421f-a81d-060a1c174e1a.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9619e111-5f4d-4a9e-be92-1f83ff1f4c3e.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9619e111-5f4d-4a9e-be92-1f83ff1f4c3e.vsidx"
deleted file mode 100644
index 5cf9a83..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9619e111-5f4d-4a9e-be92-1f83ff1f4c3e.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b10cf6b0-c2bb-4c3d-ba2c-41b340cd834d.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b10cf6b0-c2bb-4c3d-ba2c-41b340cd834d.vsidx"
deleted file mode 100644
index 70aef67..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b10cf6b0-c2bb-4c3d-ba2c-41b340cd834d.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/df097475-a21c-477f-bae8-fdcb85add7c1.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/df097475-a21c-477f-bae8-fdcb85add7c1.vsidx"
deleted file mode 100644
index 70aef67..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/df097475-a21c-477f-bae8-fdcb85add7c1.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs"
index 7325119..29e3b58 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs"
@@ -12,6 +12,8 @@
     public interface ISys_MenuService : IService<Sys_Menu>
     {
         object GetCurrentMenuActionList();
+        object GetMenuActionList(int roleId);
+
 
         List<Sys_Menu> GetUserMenuList(int roleId);
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
index b3cd533..146f10e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
@@ -20,6 +20,7 @@
 using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
 using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_QuartzJob.DeviceEnum;
 
 namespace WIDESEAWCS_WCSServer.Controllers.System
 {
@@ -106,8 +107,8 @@
                         {
                             Type type = typeof(IDevice);
                             var basePath = AppContext.BaseDirectory;
-                            string path = Path.Combine(basePath, Assembly.GetExecutingAssembly().GetName().Name);
-                            Assembly assembly = Assembly.LoadFrom(path);
+                            //string path = Path.Combine("", Assembly.GetAssembly(type).GetName());
+                            Assembly assembly = Assembly.GetAssembly(type);
                             List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
                             List<object> data = new List<object>();
                             foreach (var deviceType in types)
@@ -146,12 +147,12 @@
                     case "deviceStatus":
                         {
                             List<object> data = new List<object>();
-                            Type type = Type.GetType("WIDESEAWCS_QuartzJob.DeviceEnum.DeviceStatusEnum");
+                            Type type = typeof(DeviceStatusEnum);
                             List<int> enums = Enum.GetValues(type).Cast<int>().ToList();
                             int index = 0;
                             foreach (var item in enums)
                             {
-                                FieldInfo? fieldInfo = type.GetField((item).ToString());
+                                FieldInfo? fieldInfo = type.GetField(((DeviceStatusEnum)item).ToString());
                                 DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                 if (description != null)
                                 {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs"
index 4f4e913..639eeda 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs"
@@ -43,7 +43,7 @@
 builder.Services.AddAllOptionRegister();//读取配置文件
 builder.Services.AddMemoryCacheSetup();//缓存
 builder.Services.AddSqlsugarSetup();//SqlSugar 启动服务
-builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
+//builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
 builder.Services.AddDbSetup();//Db 启动服务
 
 builder.Services.AddScoped<QuartzJobCreateDataTabel>();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs"
index 85d5afa..2c740c4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs"
@@ -10,15 +10,20 @@
 using WIDESEAWCS_ISystemRepository;
 using WIDESEAWCS_Core.BaseRepository;
 using System.Net;
+using WIDESEAWCS_Core.Caches;
 
 namespace WIDESEAWCS_SystemServices
 {
     public class Sys_UserService : ServiceBase<Sys_User, ISys_UserRepository>, ISys_UserService
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
-        public Sys_UserService(ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage) : base(repository)
+        private readonly ICacheService _cacheService;
+        private readonly ISys_MenuService _menuService;
+        public Sys_UserService(ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_MenuService menuService) : base(repository)
         {
             _unitOfWorkManage = unitOfWorkManage;
+            _cacheService = cacheService;
+            _menuService = menuService;
         }
 
         public WebResponseContent Login(LoginInfo loginInfo)
@@ -44,6 +49,16 @@
                 UserInfo user = BaseDal.GetUserInfo(loginInfo.UserName, loginInfo.Password);
                 if (user != null)
                 {
+                    object obj = _menuService.GetMenuActionList(user.RoleId);
+                    if (obj is not IEnumerable<object> list)
+                    {
+                        return WebResponseContent.Instance.Error("鏃犵櫥褰曟潈闄�");
+                    }
+                    if (!list.Any())
+                    {
+                        return WebResponseContent.Instance.Error("鏃犵櫥褰曟潈闄�");
+                    }
+
                     string token = JwtHelper.IssueJwt(new TokenModelJwt()
                     {
                         UserId = user.UserId,
@@ -52,6 +67,8 @@
                         TenantId = user.TenantId,
                     });
 
+                    _cacheService.AddOrUpdate(user.UserId.ToString(), token);
+
                     content = WebResponseContent.Instance.OK(data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl });
                 }
                 else
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/CachePoint.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/CachePoint.js"
new file mode 100644
index 0000000..151c927
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/CachePoint.js"
@@ -0,0 +1,69 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+      let enableBtn = this.buttons.find(x => x.value == 'Enable');
+      if (enableBtn) {
+        enableBtn.onClick = function () {
+          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+        }
+      }
+      let disableBtn = this.buttons.find(x => x.value == 'Disable');
+      if (disableBtn) {
+        disableBtn.onClick = function () {
+          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+        }
+      }
+    },
+    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;
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 41b8179..d5007fe 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"
@@ -45,7 +45,13 @@
     path: '/materielInfo',
     name: 'materielInfo',
     component: () => import('@/views/basic/materielInfo.vue')
-  }, {
+  }, 
+  {
+    path: '/cachePoint',
+    name: 'cachePoint',
+    component: () => import('@/views/basic/cachePoint.vue')
+  },
+  {
     path: '/roadwayInfo',
     name: 'roadwayInfo',
     component: () => import('@/views/basic/roadwayInfo.vue')
@@ -90,6 +96,14 @@
     path: '/stockView',
     name: 'stockView',
     component: () => import('@/views/stock/stockView.vue')
+  },{
+    path: '/StockQuantityChangeRecord',
+    name: 'StockQuantityChangeRecord',
+    component: () => import('@/views/record/stockQuantityChangeRecord.vue')
+  },{
+    path: '/locationStatusChangeRecord',
+    name: 'locationStatusChangeRecord',
+    component: () => import('@/views/record/locationStatusChangeRecord.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/areaInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/areaInfo.vue"
index 554d7b5..6772d31 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/areaInfo.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/areaInfo.vue"
@@ -29,8 +29,7 @@
     const editFormFields = ref({
       areaCode: "",
       areaName: "",
-      areaType: "",
-      areaStatus: "",
+
       warehouseId: "",
       areaDes: "",
     });
@@ -60,6 +59,14 @@
           title: "鍖哄煙鎻忚堪",
           field: "areaDes",
           type: "textarea",
+        },{ title: "鍖哄煙鐘舵��", field: "areaStatus" ,type: "select",dataKey: "enableEnum",data: [],},
+      ],
+      [
+      {
+          title: "鍖哄煙绫诲瀷",
+          required: true,
+          field: "areaType",
+          type: "int",
         },
       ],
     ]);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/cachePoint.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/cachePoint.vue"
new file mode 100644
index 0000000..0cf901e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/cachePoint.vue"
@@ -0,0 +1,206 @@
+
+<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/basic/CachePoint.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "缂撳瓨鐐�",
+      name: "CachePoint",
+      url: "/CachePoint/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      areaId: "",
+      pointCode: "",
+      pointStatus: "",
+      enableStatus: "",
+      pointType: "",
+      row: "",
+      column: "",
+      depth: "",
+    });
+    const editFormOptions = ref([
+      [
+        {title: "鍖哄煙涓婚敭",required: true,field: "areaId",type: "string",},
+        {title: "缂撳瓨鐐圭紪鍙�",required: true,field: "pointCode",type: "string",},
+        {title: "缂撳瓨鐐圭姸鎬�",field: "pointStatus",type: "select",dataKey: "locationStatusEnum",data: [],},
+        {title: "鏄惁绂佺敤",field: "enableStatus",type: "select",dataKey: "enableEnum",data: [],},
+      ],[
+        { title: "琛�", field: "row", type: "string" },
+        { title: "鍒�", field: "column", type: "string" },
+        { title: "娣卞害", field: "depth", type: "string" },
+        { title: "缂撳瓨鐐圭被鍨�", field: "pointType", type: "string"},
+      ],
+    ]);
+    const searchFormFields = ref({
+      areaId: "",
+      pointCode: "",
+      pointStatus: "",
+      enableStatus: "",
+      pointType: "",
+      row: "",
+      column: "",
+      depth: "",
+    });
+    const searchFormOptions = ref([
+    [
+        {title: "鍖哄煙涓婚敭",field: "areaId",type: "string",},
+        {title: "缂撳瓨鐐圭紪鍙�",field: "pointCode",type: "string",},
+        {title: "缂撳瓨鐐圭姸鎬�",field: "pointStatus",type: "select",dataKey: "locationStatusEnum",data: [],},
+        {title: "鏄惁绂佺敤",field: "enableStatus",type: "select",dataKey: "enableEnum",data: [],},
+      ],[
+        { title: "琛�", field: "row", type: "string" },
+        { title: "鍒�", field: "column", type: "string" },
+        { title: "娣卞害", field: "depth", type: "string" },
+        { title: "缂撳瓨鐐圭被鍨�", field: "pointType", type: "string"},
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "areaId",
+        title: "鍖哄煙涓婚敭",
+        type: "int",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "pointCode",
+        title: "缂撳瓨鐐圭紪鍙�",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "pointStatus",
+        title: "缂撳瓨鐐圭姸鎬�",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: { key: "locationStatusEnum", data: [] },
+      },
+      {
+        field: "enableStatus",
+        title: "鏄惁绂佺敤",
+        type: "decimal",
+        width: 90,
+        align: "left",
+        bind: { key: "enableEnum", data: [] },
+      },
+      {
+        field: "row",
+        title: "琛�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "column",
+        title: "鍒�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "depth",
+        title: "娣卞害",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "pointType",
+        title: "缂撳瓨鐐圭被鍨�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "Remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 90,
+        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",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    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/record/locationStatusChangeRecord.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue"
index b2d59d8..4879560 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/record/locationStatusChangeRecord.vue"
@@ -85,15 +85,15 @@
         ],
       ]);
       const searchFormFields = ref({
-        deviceCode: "",
-        deviceType: "",
-        deviceStatus: "",
+        locationCode: "",
+        orderNo: "",
+        taskNum: "",
       });
       const searchFormOptions = ref([
         [
-          { title: "璁惧缂栧彿", field: "deviceCode" },
-          { title: "璁惧绫诲瀷", field: "deviceType" },
-          { title: "璁惧鐘舵��", field: "deviceStatus" },
+          { title: "璐т綅鍙�", field: "locationCode" },
+          { title: "鍗曟嵁缂栧彿", field: "orderNo" },
+          { title: "浠诲姟鍙�", field: "taskNum" },
         ],
       ]);
       const columns = ref([
@@ -127,6 +127,7 @@
           type: "string",
           width: 150,
           align: "left",
+          bind: { key: "locationStatusEnum", data: [] },
         },
         {
           field: "afterStatus",
@@ -134,6 +135,15 @@
           type: "decimal",
           width: 90,
           align: "left",
+          bind: { key: "locationStatusEnum", data: [] },
+        },
+        {
+          field: "changeType",
+          title: "鍙樺姩绫诲瀷",
+          type: "string",
+          width: 90,
+          align: "left",
+          bind: { key: "stockChangeType", data: [] },
         },
         {
           field: "orderId",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
index 4d7b4f8..87bf86c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
@@ -27,73 +27,21 @@
         sortName: "id",
       });
       const editFormFields = ref({
-        deviceCode: "",
-        deviceName: "",
-        deviceType: "",
-        deviceStatus: "",
-        deviceIp: "",
-        devicePort: "",
-        devicePlcType: "",
-        deviceRemark: "",
+        
       });
       const editFormOptions = ref([
-        [
-          {
-            title: "璁惧缂栧彿",
-            required: true,
-            field: "deviceCode",
-            type: "string",
-          },
-          {
-            title: "璁惧鍚嶇О",
-            required: true,
-            field: "deviceName",
-            type: "string",
-          },
-          {
-            title: "璁惧绫诲瀷",
-            required: true,
-            field: "deviceType",
-            type: "string",
-          },
-          {
-            title: "璁惧鐘舵��",
-            required: true,
-            field: "deviceStatus",
-            type: "string",
-          },
-        ],
-        [
-          { title: "璁惧IP", required: true, field: "deviceIp", type: "string" },
-          {
-            title: "璁惧绔彛",
-            required: true,
-            field: "devicePort",
-            type: "string",
-          },
-          {
-            title: "PLC绫诲瀷",
-            required: true,
-            field: "devicePlcType",
-            type: "string",
-          },
-          {
-            title: "澶囨敞",
-            field: "deviceRemark",
-            type: "string",
-          },
-        ],
+        
       ]);
       const searchFormFields = ref({
-        deviceCode: "",
-        deviceType: "",
-        deviceStatus: "",
+        palleCode: "",
+        materielCode: "",
+        orderNo: "",
       });
       const searchFormOptions = ref([
         [
-          { title: "璁惧缂栧彿", field: "deviceCode" },
-          { title: "璁惧绫诲瀷", field: "deviceType" },
-          { title: "璁惧鐘舵��", field: "deviceStatus" },
+          { title: "鎵樼洏鍙�", field: "palleCode" },
+          { title: "鐗╂枡缂栧彿", field: "materielCode" },
+          { title: "鍗曟嵁缂栧彿", field: "orderNo" },
         ],
       ]);
       const columns = ref([
@@ -183,6 +131,7 @@
           type: "int",
           width: 120,
           align: "left",
+          bind: { key: "stockChangeType", data: [] },
         },
         {
           field: "changeQuantity",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
index e9a039c..fdb2428 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
@@ -1,228 +1,200 @@
-
 <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/stockInfoDetail.js";
-  import { ref, defineComponent } from "vue";
-  export default defineComponent({
-    setup() {
-      const table = ref({
-        key: "id",
-        footer: "Foots",
-        cnName: "搴撳瓨淇℃伅鏄庣粏",
-        name: "stockInfoDetail",
-        url: "/StockInfoDetail/",
-        sortName: "id",
-      });
-      const editFormFields = ref({
-        deviceCode: "",
-        deviceName: "",
-        deviceType: "",
-        deviceStatus: "",
-        deviceIp: "",
-        devicePort: "",
-        devicePlcType: "",
-        deviceRemark: "",
-      });
-      const editFormOptions = ref([
-        [
-          {
-            title: "璁惧缂栧彿",
-            required: true,
-            field: "deviceCode",
-            type: "string",
-          },
-          {
-            title: "璁惧鍚嶇О",
-            required: true,
-            field: "deviceName",
-            type: "string",
-          },
-          {
-            title: "璁惧绫诲瀷",
-            required: true,
-            field: "deviceType",
-            type: "string",
-          },
-          {
-            title: "璁惧鐘舵��",
-            required: true,
-            field: "deviceStatus",
-            type: "string",
-          },
-        ],
-        [
-          { title: "璁惧IP", required: true, field: "deviceIp", type: "string" },
-          {
-            title: "璁惧绔彛",
-            required: true,
-            field: "devicePort",
-            type: "string",
-          },
-          {
-            title: "PLC绫诲瀷",
-            required: true,
-            field: "devicePlcType",
-            type: "string",
-          },
-          {
-            title: "澶囨敞",
-            field: "deviceRemark",
-            type: "string",
-          },
-        ],
-      ]);
-      const searchFormFields = ref({
-        deviceCode: "",
-        deviceType: "",
-        deviceStatus: "",
-      });
-      const searchFormOptions = ref([
-        [
-          { title: "璁惧缂栧彿", field: "deviceCode" },
-          { title: "璁惧绫诲瀷", field: "deviceType" },
-          { title: "璁惧鐘舵��", field: "deviceStatus" },
-        ],
-      ]);
-      const columns = ref([
+  <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/stockInfoDetail.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "搴撳瓨淇℃伅鏄庣粏",
+      name: "stockInfoDetail",
+      url: "/StockInfoDetail/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      deviceCode: "",
+      deviceName: "",
+      deviceType: "",
+      deviceStatus: "",
+      deviceIp: "",
+      devicePort: "",
+      devicePlcType: "",
+      deviceRemark: "",
+    });
+    const editFormOptions = ref([
+      [
         {
-          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: "鐗╂枡缂栧彿",
+          required: true,
+          field: "materielCode",
           type: "string",
-          width: 150,
-          align: "left",
         },
         {
-          field: "materielName",
-          title: "鐗╂枡鍚嶇О",
-          type: "string",
-          width: 150,
-          align: "left",
-        },
-        {
-          field: "orderNo",
           title: "鍗曟嵁缂栧彿",
-          type: "decimal",
-          width: 90,
-          align: "left",
+          required: true,
+          field: "materielName",
+          type: "string",
         },
         {
-          field: "batchNo",
           title: "鎵规鍙�",
+          required: true,
+          field: "orderNo",
           type: "string",
-          width: 90,
-          align: "left",
         },
         {
-          field: "serialNumber",
           title: "搴忓垪鍙�",
-          type: "int",
-          width: 120,
-          align: "left",
-        },
-        {
-          field: "stockQuantity",
-          title: "搴撳瓨鏁伴噺",
+          required: true,
+          field: "serialNumber",
           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",
-        },
-      ]);
-      const detail = ref({
-        cnName: "#detailCnName",
-        table: "",
-        columns: [],
-        sortName: "",
-      });
-      return {
-        table,
-        extend,
-        editFormFields,
-        editFormOptions,
-        searchFormFields,
-        searchFormOptions,
-        columns,
-        detail,
-      };
-    },
-  });
-  </script>
-    
\ No newline at end of file
+      ],
+      
+    ]);
+    const searchFormFields = ref({
+      materielCode: "",
+      materielName: "",
+      orderNo: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鐗╂枡缂栧彿", field: "materielCode" },
+        { title: "鐗╂枡鍚嶇О", field: "materielName" },
+        { title: "鍗曟嵁缂栧彿", field: "orderNo" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        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",
+        bind: { key: "outStockStatus", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    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/taskinfo/task_hty.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
index b4380be..dc39d6a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
@@ -207,6 +207,13 @@
         align: "left",
       },
       {
+        field: "operateType",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
         field: "remark",
         title: "澶囨敞",
         type: "string",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0411b122-4aac-4e05-87bf-b24318b57075.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0411b122-4aac-4e05-87bf-b24318b57075.vsidx"
new file mode 100644
index 0000000..587f941
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0411b122-4aac-4e05-87bf-b24318b57075.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/31942420-eefc-4133-80d7-b56436c46904.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/31942420-eefc-4133-80d7-b56436c46904.vsidx"
deleted file mode 100644
index b3861d9..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/31942420-eefc-4133-80d7-b56436c46904.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/3d90a9b2-baa2-48c6-95e6-a364aa3c89e1.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3d90a9b2-baa2-48c6-95e6-a364aa3c89e1.vsidx"
deleted file mode 100644
index db3b46e..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3d90a9b2-baa2-48c6-95e6-a364aa3c89e1.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/44ea72ad-ffb7-4b5b-85e0-241240f07f30.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/44ea72ad-ffb7-4b5b-85e0-241240f07f30.vsidx"
new file mode 100644
index 0000000..d929bfa
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/44ea72ad-ffb7-4b5b-85e0-241240f07f30.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/738d6968-0808-4920-a274-cb39619f82a4.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/738d6968-0808-4920-a274-cb39619f82a4.vsidx"
deleted file mode 100644
index 3e6caa8..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/738d6968-0808-4920-a274-cb39619f82a4.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/86da0ee4-06d1-42f2-a5bf-e1a405be4a6d.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/86da0ee4-06d1-42f2-a5bf-e1a405be4a6d.vsidx"
new file mode 100644
index 0000000..6ff6fda
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/86da0ee4-06d1-42f2-a5bf-e1a405be4a6d.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/96826077-2dcc-4819-9493-76e6f8cc4f44.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/96826077-2dcc-4819-9493-76e6f8cc4f44.vsidx"
new file mode 100644
index 0000000..fbd2170
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/96826077-2dcc-4819-9493-76e6f8cc4f44.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/9eee2df4-daff-4226-a579-ad61ef88678a.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9eee2df4-daff-4226-a579-ad61ef88678a.vsidx"
deleted file mode 100644
index afb7ceb..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9eee2df4-daff-4226-a579-ad61ef88678a.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/a8b12b1d-7deb-4fb2-9be1-8c358e147412.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/a8b12b1d-7deb-4fb2-9be1-8c358e147412.vsidx"
deleted file mode 100644
index b464062..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/a8b12b1d-7deb-4fb2-9be1-8c358e147412.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/ddd95cc1-aa8d-43ca-a1cd-af308e641ed7.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ddd95cc1-aa8d-43ca-a1cd-af308e641ed7.vsidx"
new file mode 100644
index 0000000..a15f996
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ddd95cc1-aa8d-43ca-a1cd-af308e641ed7.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService.cs"
index cfdfdeb..40dbb76 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService.cs"
@@ -1,16 +1,19 @@
-锘縰sing SqlSugar;
+锘縰sing AutoMapper;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 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.Basic;
 using WIDESEA_IBasicRepository;
+using WIDESEA_IRecordService;
 using WIDESEA_IBasicService;
 using WIDESEA_Model.Models;
 
@@ -18,7 +21,12 @@
 {
     public partial class LocationInfoService : ServiceBase<Dt_LocationInfo, ILocationInfoRepository>, ILocationInfoService
     {
-
+        private readonly IRecordService _recordService;
+        public LocationInfoService(ILocationInfoRepository BaseDal, IBasicRepository basicRepository, IRecordService recordService) : base(BaseDal)
+        {
+            _basicRepository = basicRepository;
+            _recordService = recordService;
+        }
         private Dictionary<string, OrderByType> _emptyAssignOrderBy = new Dictionary<string, OrderByType>()
         {
             { nameof(Dt_LocationInfo.Depth), OrderByType.Desc },
@@ -59,6 +67,10 @@
             }
 
             return null;
+        }
+        public virtual Dt_LocationInfo? AssignLocation(string RoadwayNo)
+        {
+            return StoredAssignLocation(RoadwayNo);
         }
 
         private Dt_LocationInfo EmptyAssignLocation(string roadway)
@@ -111,5 +123,130 @@
         {
             return BaseDal.QueryFirst(x => x.RoadwayNo == locationInfo.RoadwayNo && x.Column == locationInfo.Column && x.Layer == locationInfo.Layer && x.Depth != locationInfo.Depth && x.Row != locationInfo.Row && (SqlFunc.Abs(x.Row - locationInfo.Row) == 1));
         }
+        public void UpdateLocationLock(Dt_LocationInfo locationInfo, int? TaskNum)
+        {
+            try
+            {
+                if (locationInfo.Depth == 2)
+                {
+                    Dt_LocationInfo dt_LocationInfo = null;
+                    int beforeStatus = 0;
+                    if (locationInfo.Row == 1 || locationInfo.Row == 5)
+                    {
+                        dt_LocationInfo = BaseDal.QueryFirst(x => x.Row == locationInfo.Row + 1 && x.Layer == locationInfo.Layer && x.Column == locationInfo.Column && x.RoadwayNo == locationInfo.RoadwayNo);
+                        beforeStatus = dt_LocationInfo.LocationStatus;
+                        if (dt_LocationInfo != null && dt_LocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt())
+                        {
+                            dt_LocationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                            BaseDal.UpdateData(dt_LocationInfo);
+                        }
+                    }
+                    else if (locationInfo.Row == 4 || locationInfo.Row == 8)
+                    {
+                        dt_LocationInfo = BaseDal.QueryFirst(x => x.Row == locationInfo.Row + 1 && x.Layer == locationInfo.Layer && x.Column == locationInfo.Column && x.RoadwayNo == locationInfo.RoadwayNo);
+                        beforeStatus = dt_LocationInfo.LocationStatus;
+                        if (dt_LocationInfo != null && dt_LocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt())
+                        {
+                            dt_LocationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                            BaseDal.UpdateData(dt_LocationInfo);
+                        }
+                    }
+                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Lock.ObjToInt(), "", TaskNum);
+                }
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+
+        }
+        public void UpdateLocationFree(Dt_LocationInfo locationInfo, int? TaskNum)
+        {
+            try
+            {
+                if (locationInfo.Depth == 2)
+                {
+                    Dt_LocationInfo dt_LocationInfo = null;
+                    int beforeStatus = 0;
+                    if (locationInfo.Row == 1 || locationInfo.Row == 5)
+                    {
+                        dt_LocationInfo = BaseDal.QueryFirst(x => x.Row == locationInfo.Row + 1 && x.Layer == locationInfo.Layer && x.Column == locationInfo.Column && x.RoadwayNo == locationInfo.RoadwayNo);
+                        beforeStatus = dt_LocationInfo.LocationStatus;
+                        if (dt_LocationInfo != null && dt_LocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt())
+                        {
+                            dt_LocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                            BaseDal.UpdateData(dt_LocationInfo);
+                        }
+                    }
+                    else if (locationInfo.Row == 4 || locationInfo.Row == 8)
+                    {
+                        dt_LocationInfo = BaseDal.QueryFirst(x => x.Row == locationInfo.Row + 1 && x.Layer == locationInfo.Layer && x.Column == locationInfo.Column && x.RoadwayNo == locationInfo.RoadwayNo);
+                        beforeStatus = dt_LocationInfo.LocationStatus;
+                        if (dt_LocationInfo != null && dt_LocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt())
+                        {
+                            dt_LocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                            BaseDal.UpdateData(dt_LocationInfo);
+                        }
+                    }
+                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(dt_LocationInfo, beforeStatus, StockChangeType.Lock.ObjToInt(), "", TaskNum);
+                }
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+
+        }
+        public Dt_LocationInfo isDepth(Dt_LocationInfo locationInfo)
+        {
+            if (locationInfo.Depth == 2)
+            {
+                if (locationInfo.Row == 1 || locationInfo.Row == 5)
+                {
+                    Dt_LocationInfo dt_LocationInfo = BaseDal.QueryFirst(x => x.Row == locationInfo.Row + 1 && x.Layer == locationInfo.Layer && x.Column == locationInfo.Column && x.RoadwayNo == locationInfo.RoadwayNo);
+                    if (dt_LocationInfo != null&& dt_LocationInfo.LocationStatus==LocationStatusEnum.InStock.ObjToInt())
+                    {
+                        return dt_LocationInfo;
+                    }
+                }
+                else if (locationInfo.Row == 4 || locationInfo.Row == 8)
+                {
+                    Dt_LocationInfo dt_LocationInfo = BaseDal.QueryFirst(x => x.Row == locationInfo.Row + 1 && x.Layer == locationInfo.Layer && x.Column == locationInfo.Column && x.RoadwayNo == locationInfo.RoadwayNo);
+                    if (dt_LocationInfo != null && dt_LocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+                    {
+                        return dt_LocationInfo;
+                    }
+                }
+            }
+            return null;
+        }
+        public void RelocationLock(Dt_LocationInfo locationInfo, Dt_LocationInfo locationInfos,int TaskNum)
+        {
+            int beforeStatus = locationInfo.LocationStatus;
+            int beforeStatu = locationInfos.LocationStatus;
+
+            locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+            locationInfos.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+
+            BaseDal.UpdateData(locationInfo);
+
+            BaseDal.UpdateData(locationInfos);
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Relocation.ObjToInt(), "", TaskNum);
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, beforeStatu, StockChangeType.Relocation.ObjToInt(), "", TaskNum);
+        }
+        public void RelocationFree(Dt_LocationInfo locationInfo, Dt_LocationInfo locationInfos, int TaskNum)
+        {
+            int beforeStatus = locationInfo.LocationStatus;
+            int beforeStatu = locationInfos.LocationStatus;
+
+            locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+            locationInfos.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+
+            BaseDal.UpdateData(locationInfo);
+            BaseDal.UpdateData(locationInfos);
+
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Relocation.ObjToInt(), "", TaskNum);
+            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, beforeStatu, StockChangeType.Relocation.ObjToInt(), "", TaskNum);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj"
index 96a5038..e0052fb 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/WIDESEA_BasicService.csproj"
@@ -8,6 +8,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
+    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
   </ItemGroup>
 
 </Project>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/LocationEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/LocationEnum.cs"
index f18fc02..95629ac 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/LocationEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/LocationEnum.cs"
@@ -30,9 +30,15 @@
         [Description("鏈夎揣")]
         InStock = 2,
 
-
+        /// <summary>
+        /// 绌烘墭閿佸畾
+        /// </summary>
+        [Description("绌烘墭閿佸畾")]
         PalletLock = 98,
 
+        /// <summary>
+        /// 绌烘墭鐩�
+        /// </summary>
         [Description("绌烘墭鐩�")]
         Pallet = 99
     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/StockEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/StockEnum.cs"
index 46fd183..d538e4f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/StockEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/StockEnum.cs"
@@ -12,20 +12,32 @@
         /// <summary>
         /// 缁勭洏
         /// </summary>
-        [Description("")]
+        [Description("缁勭洏")]
         MaterielGroup,
 
         /// <summary>
         /// 鍏ュ簱
         /// </summary>
-        [Description("")]
+        [Description("鍏ュ簱")]
         Inbound,
 
         /// <summary>
         /// 鍑哄簱
         /// </summary>
-        [Description("")]
+        [Description("鍑哄簱")]
         Outbound,
+        /// <summary>
+        /// 绉诲簱
+        /// </summary>
+        [Description("绉诲簱")]
+        Relocation,
+
+        /// <summary>
+        /// 鍏ュ簱閿佸畾
+        /// </summary>
+        [Description("閿佸畾")]
+        Lock,
+
     }
 
     /// <summary>
@@ -56,6 +68,9 @@
 
         [Description("鍑哄簱瀹屾垚")]
         鍑哄簱瀹屾垚 = 8,
+
+        [Description("绉诲簱閿佸畾")]
+        绉诲簱閿佸畾 = 9,
     }
 
     public enum OutStockStatus
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 8ed661c..7614758 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"
@@ -155,10 +155,16 @@
         InException = 299,
 
         /// <summary>
-        /// 鏂板缓绉诲簱搴撲换鍔�
+        /// 鏂板缓绉诲簱浠诲姟
         /// </summary>
-        [Description("鏂板缓绉诲簱搴撲换鍔�")]
-        RelocationNew = 300
+        [Description("鏂板缓绉诲簱浠诲姟")]
+        RelocationNew = 300,
+
+        /// <summary>
+        /// 绉诲簱浠诲姟瀹屾垚
+        /// </summary>
+        [Description("绉诲簱浠诲姟瀹屾垚")]
+        RelocationFinish = 310,
     }
 
     #endregion 鍏ュ簱浠诲姟鐘舵��
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 1d05cb1..5ea0f55 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,6 +20,12 @@
         Dt_LocationInfo AdjacentDepthLocation(string locationCode);
 
         Dt_LocationInfo? AssignLocation(string stationCode, int inboundType);
+        Dt_LocationInfo? AssignLocation(string RoadwayNo);
+        void UpdateLocationLock(Dt_LocationInfo locationInfo,int? taskNum);
+        void UpdateLocationFree(Dt_LocationInfo locationInfo, int? taskNum);
+        Dt_LocationInfo isDepth(Dt_LocationInfo locationInfo);
+        void RelocationLock(Dt_LocationInfo locationInfo, Dt_LocationInfo locationInfos,int TaskNum);
+        void RelocationFree(Dt_LocationInfo locationInfo, Dt_LocationInfo locationInfos, int TaskNum);
 
         WebResponseContent LocationEnableStatus(int[] keys);
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaInfo.cs"
index 74dfe05..8360260 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaInfo.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_AreaInfo.cs"
@@ -30,7 +30,7 @@
         [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍖哄煙鐘舵��")]
         public int AreaStatus { get; set; }
 
-        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鍖哄煙鎻忚堪")]
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鍖哄煙鎻忚堪")]
         public string AreaDes { get; set; }
 
         [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs"
new file mode 100644
index 0000000..f0199b3
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.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_InboundOrderDetail_Hty), "鍏ュ簱鍗曟槑缁�")]
+    public class Dt_InboundOrderDetail_Hty : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id {  get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍏ュ簱鍗曚富閿�")]
+        public int OrderId { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode {  get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo {  get; set; }
+
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍗曟嵁鏁伴噺")]
+        public decimal OrderQuantity {  get; set; }
+
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "缁勭洏鏁伴噺", DefaultValue = "0")]
+        public decimal ReceiptQuantity {  get; set; }
+
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "涓婃灦鏁伴噺", DefaultValue = "0")]
+        public decimal OverInQuantity {  get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟鏄庣粏鐘舵��")]
+        public int OrderDetailStatus {  get; set; }
+
+        [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/Inbound/Dt_InboundOrder_Hty.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs"
new file mode 100644
index 0000000..b3ba5c3
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs"
@@ -0,0 +1,40 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_InboundOrder_Hty), "鍏ュ簱鍗�")]
+    public class Dt_InboundOrder_Hty : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        [CodeRule(WIDESEA_Core.Enums.RuleCode.InboundOrderRule)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿")]
+        public string OrderNo { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "涓婃父鍗曟嵁缂栧彿")]
+        public string UpperOrderNo { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷")]
+        public int OrderType { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鐘舵��")]
+        public int OrderStatus { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡")]
+        public int CreateType { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        [Navigate(NavigateType.OneToMany, nameof(Dt_InboundOrderDetail_Hty.OrderId), nameof(Id))]
+        public List<Dt_InboundOrderDetail_Hty> Details { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs"
new file mode 100644
index 0000000..2bf062e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.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_OutboundOrderDetail_Hty), "鍑哄簱鍗曟槑缁�")]
+    public class Dt_OutboundOrderDetail_Hty : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍑哄簱鍗曚富閿�")]
+        public int OrderId { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo { get; set; }
+
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍗曟嵁鏁伴噺")]
+        public decimal OrderQuantity { get; set; }
+
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "閿佸畾鏁伴噺", DefaultValue = "0")]
+        public decimal LockQuantity { get; set; }
+
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "宸插嚭鏁伴噺", DefaultValue = "0")]
+        public decimal OverOutQuantity { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟鏄庣粏鐘舵��")]
+        public int OrderDetailStatus { get; set; }
+
+        [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/Outbound/Dt_OutboundOrder_Hty.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs"
new file mode 100644
index 0000000..72c234a
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs"
@@ -0,0 +1,40 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_OutboundOrder_Hty), "鍑哄簱鍗�")]
+    public class Dt_OutboundOrder_Hty : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        [CodeRule(WIDESEA_Core.Enums.RuleCode.OutboundOrderRule)]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
+        public string OrderNo { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "涓婃父鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
+        public string UpperOrderNo { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)]
+        public int OrderType { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鐘舵��")]
+        public int OrderStatus { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡", IsOnlyIgnoreUpdate = true)]
+        public int CreateType { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        [Navigate(NavigateType.OneToMany, nameof(Dt_OutboundOrderDetail_Hty.OrderId), nameof(Id))]
+        public List<Dt_OutboundOrderDetail_Hty> Details { 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 2350e4a..bf850f8 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"
@@ -95,7 +95,7 @@
         public string NextAddress { get; set; }
 
         /// <summary>
-        /// 寮傚父淇℃伅
+        /// 鍗曟嵁缂栧彿
         /// </summary>
         [ImporterHeader(Name = "鍗曟嵁缂栧彿")]
         [ExporterHeader(DisplayName = "鍗曟嵁缂栧彿")]
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs"
index 33c4bce..7b9f254 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs"
@@ -44,14 +44,6 @@
             if (stockInfo.Id == 0)
             {
                 BaseDal.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
-                //stockQuantityChangeRecords = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(stockInfo.Details);
-                //stockQuantityChangeRecords.ForEach(x =>
-                //{
-                //    x.PalleCode = stockInfo.PalletCode;
-                //    x.BeforeQuantity = 0;
-                //    x.ChangeQuantity = x.AfterQuantity - x.BeforeQuantity;
-                //    x.ChangeType = StockChangeType.MaterielGroup.ObjToInt();
-                //});
                 details = stockInfo.Details;
             }
             else
@@ -67,19 +59,7 @@
 
                 }
 
-                //stockQuantityChangeRecords = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(stockInfo.Details);
-                //int index = 0;
-                //stockQuantityChangeRecords.ForEach(x =>
-                //{
-                //    x.PalleCode = stockInfo.PalletCode;
-                //    x.BeforeQuantity = 0;
-                //    x.ChangeQuantity = x.AfterQuantity - x.BeforeQuantity;
-                //    x.ChangeType = StockChangeType.MaterielGroup.ObjToInt();
-                //    x.StockDetailId = 
-                //    index++;
-                //});
             }
-            //_stockQuantityChangeRecordRepository.AddData(stockQuantityChangeRecords);
             stockInfo.Details = details;
             _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, StockChangeType.MaterielGroup);
         }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
index eabf102..9743d4b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs"
@@ -532,6 +532,54 @@
                             result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                         }
                         break;
+                    case "stockChangeType":
+                        {
+                            List<object> data = new List<object>();
+                            Type type = typeof(StockChangeType);
+                            List<int> enums = Enum.GetValues(typeof(StockChangeType)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(StockChangeType).GetField(((StockChangeType)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
+                    case "outStockStatus":
+                        {
+                            List<object> data = new List<object>();
+                            Type type = typeof(OutStockStatus);
+                            List<int> enums = Enum.GetValues(typeof(OutStockStatus)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(OutStockStatus).GetField(((OutStockStatus)item).ToString());
+                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = item.ToString(), value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = item.ToString(), value = item.ToString() });
+                                }
+                                index++;
+                            }
+
+                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+                        }
+                        break;
                 }
                 return result;
             }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs"
index 87598ea..1ee69e3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoRepository/TaskRepository.cs"
@@ -36,7 +36,8 @@
 
         public int GetTaskNum(string sequenceName)
         {
-            return Db.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceName}").ObjToInt();
+            //return Db.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceName}").ObjToInt();
+            return Db.Ado.GetScalar($"SELECT NEXT VALUE FOR GetTaskNum").ObjToInt();
         }
 
         public override int AddData(Dt_Task entity)
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 51ee5d1..7f4f0ee 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"
@@ -8,6 +8,7 @@
 using WIDESEA_Core;
 using WIDESEA_Model.Models;
 using WIDESEA_Core.Helper;
+using Microsoft.Extensions.Logging;
 
 namespace WIDESEA_TaskInfoService
 {
@@ -100,6 +101,7 @@
             try
             {
                 Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(stationCode, taskType);
+                //Dt_LocationInfo dt_LocationInfo = null;
                 if (locationInfo != null)
                 {
                     Dt_Task task = new()
@@ -121,6 +123,8 @@
                     if (isUpdateStock)
                     {
                         locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                        _basicService.LocationInfoService.UpdateLocationLock(locationInfo,task.TaskNum);
+
                         if (stockInfo != null && stockInfo.Details != null && stockInfo.Details.Count > 0)
                         {
                             orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
@@ -134,6 +138,7 @@
                         }
                     }
                     _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
+                    //_basicService.LocationInfoService.Repository.UpdateData(dt_LocationInfo);
                     _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), orderNo, task.TaskNum);
 
                     return content = 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 4bb2787..c2e9e87 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"
@@ -148,7 +148,11 @@
             try
             {
                 _unitOfWorkManage.BeginTran();
-
+                //鍒ゆ柇绉诲簱
+                /*List<Dt_Task> RelocationTasks = */
+                RelocationTask(tasks);
+                //BaseDal.AddData(RelocationTasks);
+                
                 BaseDal.AddData(tasks);
                 if (stockInfos != null && outboundOrderDetails != null && outStockLockInfos != null && locationInfos != null)
                 {
@@ -182,6 +186,73 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
 
+        }
+        /// <summary>
+        /// 绉诲簱浠诲姟
+        /// </summary>
+        /// <param name="task"></param>
+        /// <returns></returns>
+        public WebResponseContent RelocationTask(List<Dt_Task> task)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                for (int i = 0; i < task.Count; i++)
+                {
+                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task[i].SourceAddress && x.RoadwayNo == task[i].Roadway);
+                    if (locationInfo != null)
+                    {
+                        Dt_LocationInfo location = _basicService.LocationInfoService.isDepth(locationInfo);
+                        if (location != null)
+                        {
+                            Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == location.LocationCode);
+                            if (stockInfo != null && location.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+                            {
+                                Dt_LocationInfo? locationInfos = _basicService.LocationInfoService.AssignLocation(location.RoadwayNo);
+                                if(locationInfos != null)
+                                {
+                                    Dt_Task tasks = new()
+                                    {
+                                        CurrentAddress = location.LocationCode,
+                                        Grade = 0,
+                                        PalletCode = stockInfo.PalletCode,
+                                        NextAddress = locationInfos.LocationCode,
+                                        Roadway = location.RoadwayNo,
+                                        SourceAddress = location.LocationCode,
+                                        TargetAddress = locationInfos.LocationCode,
+                                        TaskStatus = InTaskStatusEnum.RelocationNew.ObjToInt(),
+                                        TaskType = TaskTypeEnum.Relocation.ObjToInt(),
+                                        TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
+                                    };
+                                    BaseDal.AddData(tasks);
+                                    stockInfo.StockStatus = StockStatusEmun.绉诲簱閿佸畾.ObjToInt();
+                                    _stockService.StockInfoService.UpdateData(stockInfo);
+                                    _basicService.LocationInfoService.RelocationLock(location, locationInfos,tasks.TaskNum);
+                                }
+                                else
+                                {
+                                    return content = WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤璐т綅");
+                                }
+                            }
+                            else
+                            {
+                                return content = WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
+                            }
+                        }
+                    }
+                    else
+                    {
+                        return content = WebResponseContent.Instance.Error("浠诲姟淇℃伅寮傚父");
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+                return content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            
+            return content;
         }
 
         /// <summary>
@@ -270,11 +341,17 @@
                     TaskStatus = OutTaskStatusEnum.OutNew.ObjToInt(),
                     TaskType = TaskTypeEnum.PalletOutbound.ObjToInt(),
                 };
-
+                int beforeStatus = locationInfo.LocationStatus;
                 _unitOfWorkManage.BeginTran();
                 stockInfo.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
                 locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
                 BaseDal.AddData(task);
+                _stockService.StockInfoService.UpdateData(stockInfo);
+
+                _basicService.LocationInfoService.UpdateLocationLock(locationInfo, task.TaskNum);
+
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Relocation.ObjToInt(), "", task.TaskNum);
+
                 _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
             }
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 0e5b84b..d4104dd 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"
@@ -61,10 +61,11 @@
         private readonly IRecordService _recordService;
         private readonly IStockService _stockService;
         private readonly ITask_HtyService _taskHtyService;
+        private readonly ILocationInfoService _locationInfoService;
 
         public ITaskRepository Repository => BaseDal;
 
-        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -74,6 +75,7 @@
             _recordService = recordService;
             _stockService = stockService;
             _taskHtyService = taskHtyService;
+            _locationInfoService = locationInfoService;
         }
 
         /// <summary>
@@ -110,6 +112,8 @@
 
         public WebResponseContent InboundTaskCompleted(Dt_Task task)
         {
+            decimal beforeQuantity = 0;
+
             Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
 
             Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
@@ -119,15 +123,18 @@
             stockInfo.LocationCode = locationInfo.LocationCode;
             stockInfo.StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt();
             _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+            beforeQuantity = stockInfo.Details.Where(x => x.Id != 0).Sum(x => x.StockQuantity);
 
             int beforeStatus = locationInfo.LocationStatus;
             locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+            _basicService.LocationInfoService.UpdateLocationFree(locationInfo, task.TaskNum);
             _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
             task.TaskStatus = InTaskStatusEnum.InFinish.ObjToInt();
-            //BaseDal.DeleteData(task);
+
             BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.鑷姩瀹屾垚 : OperateType.浜哄伐瀹屾垚);
 
             _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+            _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, StockChangeType.Inbound);
 
             return WebResponseContent.Instance.OK();
         }
@@ -153,6 +160,7 @@
 
             int beforeStatus = locationInfo.LocationStatus;
             locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
+            _basicService.LocationInfoService.UpdateLocationFree(locationInfo, task.TaskNum);
             _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
 
             task.TaskStatus = InTaskStatusEnum.InFinish.ObjToInt();
@@ -203,6 +211,7 @@
 
             int beforeStatus = locationInfo.LocationStatus;
             locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+            _basicService.LocationInfoService.UpdateLocationFree(locationInfo, task.TaskNum);
             _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
 
             task.TaskStatus = OutTaskStatusEnum.OutFinish.ObjToInt();
@@ -225,6 +234,7 @@
 
             int beforeStatus = locationInfo.LocationStatus;
             locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+            _basicService.LocationInfoService.UpdateLocationFree(locationInfo, task.TaskNum);
             _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
 
             task.TaskStatus = OutTaskStatusEnum.OutFinish.ObjToInt();
@@ -234,5 +244,30 @@
 
             return WebResponseContent.Instance.OK();
         }
+
+        public WebResponseContent RelocationTaskCompleted(Dt_Task task)
+        {
+            Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
+
+            Dt_LocationInfo locationStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+            Dt_LocationInfo locationEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+
+            CheckCompleted(stockInfo, locationStart);
+
+            stockInfo.LocationCode = locationEnd.LocationCode;
+            stockInfo.StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt();
+            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+
+            
+            //locationStart.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+            _basicService.LocationInfoService.RelocationFree(locationStart, locationEnd, task.TaskNum);
+            //_basicService.LocationInfoService.Repository.UpdateData(locationStart);
+
+            task.TaskStatus = InTaskStatusEnum.RelocationFinish.ObjToInt();
+            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.鑷姩瀹屾垚 : OperateType.浜哄伐瀹屾垚);
+
+            
+            return WebResponseContent.Instance.OK();
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/CachePointController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/CachePointController.cs"
new file mode 100644
index 0000000..4f28899
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/CachePointController.cs"
@@ -0,0 +1,17 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Basic
+{
+    [Route("api/CachePoint")]
+    [ApiController]
+    public class CachePointController : ApiBaseController<ICachePointService, Dt_CachePoint>
+    {
+        public CachePointController(ICachePointService service) : base(service)
+        {
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
index a8516f3..c4e4bad 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json"
@@ -6,7 +6,7 @@
       "Microsoft.AspNetCore": "Warning"
     }
   },
-  "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun",
+  "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeType,outStockStatus",
   "AllowedHosts": "*",
   "ConnectionStringsEncryption": false,
   "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue

--
Gitblit v1.9.3