From ca08d1f380987254814242e2fe3ea9de28228132 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 04 一月 2025 09:36:21 +0800
Subject: [PATCH] 代码更新

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/GroundStationJob_CSJ.cs                                     |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                                     |   15 ++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs                                       |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVExtend.cs                                                 |   96 +++++++++++--
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs                                         |  127 ++++++++++-------
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                            |   16 +
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f68413a2-ad64-418c-b6b3-1cbbe0a09b03.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj                              |    1 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/543d3d70-8433-4b19-aabd-dfd52610493b.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/Service/LocationStatusChangeRecordService.cs                |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs                                    |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs                                 |    4 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/WarehouseHostedService.cs                         |   46 +++--
 /dev/null                                                                                                    |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs                                      |   12 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs                      |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs                              |   11 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs                                    |   33 ++--
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                                         |   34 ++++
 19 files changed, 286 insertions(+), 122 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/543d3d70-8433-4b19-aabd-dfd52610493b.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/543d3d70-8433-4b19-aabd-dfd52610493b.vsidx"
new file mode 100644
index 0000000..05aa72e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/543d3d70-8433-4b19-aabd-dfd52610493b.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/7c7b1759-5019-4f27-bae4-4d1504711d68.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7c7b1759-5019-4f27-bae4-4d1504711d68.vsidx"
deleted file mode 100644
index 33aee32..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7c7b1759-5019-4f27-bae4-4d1504711d68.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_Common/TaskEnum/TaskStatusEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
index 80b262c..13280ec 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
@@ -49,18 +49,18 @@
         AGV_Executing = 310,
 
         /// <summary>
-        /// AGV瀹屾垚
-        /// </summary>
-        [Description("AGV瀹屾垚")]
-        AGV_Finish = 330,
-
-        /// <summary>
         /// AGV寰呯户缁墽琛�
         /// </summary>
         [Description("AGV寰呯户缁墽琛�")]
         AGV_WaitToExecute = 320,
 
         /// <summary>
+        /// AGV瀹屾垚
+        /// </summary>
+        [Description("AGV瀹屾垚")]
+        AGV_Finish = 330,
+
+        /// <summary>
         /// 浠诲姟瀹屾垚
         /// </summary>
         [Description("浠诲姟瀹屾垚")]
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index 102fe3a..fee17b8 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -157,5 +157,7 @@
         /// <param name="agvUpdateModel"></param>
         /// <returns></returns>
         AgvResponseContent AgvUpdateTask(AgvUpdateDTO agvUpdateModel);
+
+        WebResponseContent SendSecureReplyToAgv(int taskNum);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs"
index 000b58c..41866de 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs"
@@ -29,6 +29,9 @@
             _taskService = taskService;
             _taskRepository = taskRepository;
         }
+
+        
+
         /// <summary>
         /// 瀹夊叏淇″彿鐢宠 AGV-WCS
         /// </summary>
@@ -41,23 +44,23 @@
             agvResponseContent.ReqCode = secureApplyModel.ReqCode;
             try
             {
-                var task = _taskRepository.QueryFirst(x => secureApplyModel.TaskCode== x.AgvTaskNum);
+                var task = _taskRepository.QueryFirst(x => secureApplyModel.TaskCode == x.AgvTaskNum);
                 if (task == null) throw new Exception("鏈壘鍒颁换鍔�");
                 if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                 {
                     var content = TakeRequest(task.CurrentAddress);
-                    if (!content.Status)
-                    {
-                        throw new Exception(content.Message);
-                    }
+                    //if (!content.Status)
+                    //{
+                    //    throw new Exception(content.Message);
+                    //}
                 }
                 else
                 {
                     var content = PutRequest(task.NextAddress, task.PalletType);
-                    if (!content.Status)
-                    {
-                        throw new Exception(content.Message);
-                    }
+                    //if (!content.Status)
+                    //{
+                    //    throw new Exception(content.Message);
+                    //}
                 }
                 task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                 var up = _taskRepository.UpdateData(task);
@@ -109,12 +112,12 @@
                             if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                             {
                                 var content = TakeRequest(task.CurrentAddress);
-                                if (!content.Status) throw new Exception(content.Message);
+                                //if (!content.Status) throw new Exception(content.Message);
                             }
                             else
                             {
                                 var content = PutRequest(task.NextAddress, task.PalletType);
-                                if (!content.Status) throw new Exception(content.Message);
+                                //if (!content.Status) throw new Exception(content.Message);
                             }
                             task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                             var up = _taskRepository.UpdateData(task);
@@ -127,14 +130,14 @@
                         {
                             var content = PutFinish(task.NextAddress);
                             if (!content.Status) throw new Exception(content.Message);
-                            Dt_StationManger dt_Station=_stationMangerRepository.QueryFirst(x=>x.AGVStationCode== task.NextAddress);
-                            if (dt_Station==null)
+                            Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == task.NextAddress);
+                            if (dt_Station == null)
                             {
                                 throw new Exception($"{task.NextAddress}AGV绔欏彴鏈畾涔�");
                             }
                             task.CurrentAddress = dt_Station.StationCode;
                             task.NextAddress = "";
-                            task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
+                            task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
                             task.DeviceCode = "SC01_CSJ";
                             var up = _taskRepository.UpdateData(task);
                             agvResponseContent.Code = up ? "0" : "1";
@@ -188,6 +191,7 @@
                 bool canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, stationManger.StationCode);
                 if (canPut)
                 {
+                    otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode);
                     return WebResponseContent.Instance.OK();
                 }
                 else
@@ -271,6 +275,7 @@
                 bool canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, stationManger.StationCode);
                 if (canPut)
                 {
+                    otherDevice.SetValue(GroundStationDBName.W_TakeRequest, true, stationManger.StationCode);
                     return WebResponseContent.Instance.OK();
                 }
                 else
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
index aab8236..9ed8a34 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
@@ -54,5 +54,16 @@
         {
             return Service.RollbackTaskStatusToLast(taskNum);
         }
+
+        /// <summary>
+        /// 鍥炲AGV瀹夊叏淇″彿
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("SendSecureReplyToAgv")]
+        public WebResponseContent SendSecureReplyToAgv(int taskNum)
+        {
+            return Service.SendSecureReplyToAgv(taskNum);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/WarehouseHostedService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/WarehouseHostedService.cs"
index 64b2c52..08ad5c7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/WarehouseHostedService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/HostedService/WarehouseHostedService.cs"
@@ -21,34 +21,40 @@
 
         public Task StartAsync(CancellationToken cancellationToken)
         {
-            string connStr = AppSettings.GetValue("WMSConnectionStrings");
-            if (string.IsNullOrEmpty(connStr))
+            try
             {
-                throw new Exception("WMS杩炴帴瀛楃涓查敊璇�");
+                string connStr = AppSettings.GetValue("WMSConnectionStrings");
+                if (string.IsNullOrEmpty(connStr))
+                {
+                    throw new Exception("WMS杩炴帴瀛楃涓查敊璇�");
+                }
+                SqlSugarClient sugarClient = new(new ConnectionConfig()
+                {
+                    ConnectionString = connStr,
+                    IsAutoCloseConnection = true,
+                    DbType = DbType.SqlServer
+                });
+
+                //List<Dt_Warehouse> warehouses = sugarClient.Queryable<Dt_Warehouse>().ToList();
+
+                //_dbContext.Db.Deleteable<Dt_Warehouse>().ExecuteCommand();
+
+                //_dbContext.Db.Insertable(warehouses).ExecuteCommand();
+
+                List<Dt_ApiInfo> apiInfos = _dbContext.Db.Queryable<Dt_ApiInfo>().ToList();
+
+                _cacheService.AddOrUpdate(nameof(apiInfos), apiInfos);
             }
-            SqlSugarClient sugarClient = new(new ConnectionConfig()
+            catch (Exception ex)
             {
-                ConnectionString = connStr,
-                IsAutoCloseConnection = true,
-                DbType = DbType.SqlServer
-            });
-
-            List<Dt_Warehouse> warehouses = sugarClient.Queryable<Dt_Warehouse>().ToList();
-
-            _dbContext.Db.Deleteable<Dt_Warehouse>().ExecuteCommand();
-
-            _dbContext.Db.Insertable(warehouses).ExecuteCommand();
-
-            List<Dt_ApiInfo> apiInfos = _dbContext.Db.Queryable<Dt_ApiInfo>().ToList();
-
-            _cacheService.AddOrUpdate(nameof(apiInfos), apiInfos);
-
+                Console.WriteLine(ex.ToString());
+            }
             return Task.CompletedTask;
         }
 
         public Task StopAsync(CancellationToken cancellationToken)
         {
-            throw new NotImplementedException();
+            return Task.CompletedTask;
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 0fda9b9..9b5bdcc 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -27,6 +27,7 @@
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_DTO.Agv;
 using WIDESEAWCS_Common.APIEnum;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
@@ -44,6 +45,7 @@
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Repository;
 using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_TaskInfoRepository;
 using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
 
 namespace WIDESEAWCS_TaskInfoService
@@ -231,7 +233,7 @@
 
                 _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
 
-                content = WebResponseContent.Instance.OK("鎴愬姛");
+                content = tasks.Count > 0 ? WebResponseContent.Instance.OK("鎴愬姛") : WebResponseContent.Instance.Error("澶辫触");
             }
             catch (Exception ex)
             {
@@ -469,5 +471,35 @@
             }
             return content;
         }
+
+        public WebResponseContent SendSecureReplyToAgv(int taskNum)
+        {
+            try
+            {
+                Dt_Task WaitToTask = BaseDal.QueryFirst(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && x.TaskNum == taskNum);
+                AgvSecureReplyDTO replyDTO = new AgvSecureReplyDTO()
+                {
+                    ReqCode = Guid.NewGuid().ToString().Replace("-", ""), //WaitToTask.TaskNum.ToString(),
+                    taskCode = WaitToTask.AgvTaskNum,
+                };
+                WebResponseContent content = AgvSecureReply(replyDTO);
+                if (content.Status)
+                {
+                    WaitToTask.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
+                }
+                else
+                {
+                    WaitToTask.TaskState = TaskStatusEnum.Exception.ObjToInt();
+                    WaitToTask.ExceptionMessage = content.Message;
+                }
+                UpdateData(WaitToTask);
+
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVExtend.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
index 42a710a..0afac43 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
@@ -1,6 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection.Metadata;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_DTO.Agv;
@@ -8,6 +9,8 @@
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Model.Models;
+using static Dm.net.buffer.ByteArrayBuffer;
+using WIDESEAWCS_QuartzJob;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -23,11 +26,13 @@
                 var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                 foreach (var agvTask in newTasks)
                 {
-                    AgvTaskDTO taskDTO = new AgvTaskDTO()
+                    try
                     {
-                        ReqCode = Guid.NewGuid().ToString().Replace("-", ""),
-                        TaskTyp = AgvTaskType(agvTask.TaskType, agvTask.DeviceCode),
-                        PositionCodePath = new List<CodePath>()
+                        AgvTaskDTO taskDTO = new AgvTaskDTO()
+                        {
+                            ReqCode = Guid.NewGuid().ToString().Replace("-", ""),
+                            TaskTyp = AgvTaskType(agvTask.TaskType, agvTask.DeviceCode),
+                            PositionCodePath = new List<CodePath>()
                         {
                             new CodePath()
                             {
@@ -40,27 +45,35 @@
                                 positionCode=agvTask.NextAddress
                             }
                         },
-                        TaskCode = agvTask.AgvTaskNum,
-                        PodTyp = agvTask.PalletType < 3 ? "XX" : "DD",
-                    };
-                    WebResponseContent content = _taskService.AgvSendTask(taskDTO);
-                    if (content.Status)
-                    {
-                        agvTask.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
-                        //agvTask.Remark = content.Data.ObjToString();
+                            TaskCode = agvTask.AgvTaskNum,
+                            PodTyp = agvTask.PalletType < 3 ? "XX" : "DD",
+                        };
+                        WebResponseContent content = _taskService.AgvSendTask(taskDTO);
+                        if (content.Status)
+                        {
+                            agvTask.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
+                            //agvTask.Remark = content.Data.ObjToString();
+                        }
+                        else
+                        {
+                            agvTask.TaskState = TaskStatusEnum.Exception.ObjToInt();
+                            //agvTask.Remark = content.Data.ObjToString();
+                            agvTask.ExceptionMessage = content.Message;
+                        }
                     }
-                    else
+                    catch (Exception ex)
                     {
                         agvTask.TaskState = TaskStatusEnum.Exception.ObjToInt();
                         //agvTask.Remark = content.Data.ObjToString();
-                        agvTask.ExceptionMessage = content.Message;
+                        agvTask.ExceptionMessage = ex.Message;
+                        WriteError(nameof(AGVJob), ex.Message, ex);
                     }
                 }
                 _taskService.UpdateData(newTasks);
             }
             catch (Exception ex)
             {
-                Console.Out.WriteLine(nameof(AGVJob) + ":" + ex.Message);
+                WriteError(nameof(AGVJob), ex.Message, ex);
             }
         }
         /// <summary>
@@ -73,6 +86,57 @@
                 var WaitToTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt()).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                 foreach (var WaitToTask in WaitToTasks)
                 {
+                    if(WaitToTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
+                    {
+                        Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == WaitToTask.NextAddress);
+                        if (stationManger == null)
+                        {
+                            continue;
+                        }
+                        IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
+                        if (device == null)
+                        {
+                            continue;
+                        }
+                        OtherDevice otherDevice = (OtherDevice)device;
+                        bool canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, stationManger.StationCode);
+                        bool requestPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutRequest, stationManger.StationCode);
+                        if(!requestPut)
+                        {
+                            otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode);
+                            continue;
+                        }
+                        else if (!canPut)
+                        {
+                            continue;
+                        }
+                    }
+                    else
+                    {
+                        Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == WaitToTask.CurrentAddress);
+                        if (stationManger == null)
+                        {
+                            continue;
+                        }
+                        IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
+                        if (device == null)
+                        {
+                            continue;
+                        }
+                        OtherDevice otherDevice = (OtherDevice)device;
+                        bool canTake = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, stationManger.StationCode);
+                        bool requestTake = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeRequest, stationManger.StationCode);
+                        if (!requestTake)
+                        {
+                            otherDevice.SetValue(GroundStationDBName.W_TakeRequest, true, stationManger.StationCode);
+                            continue;
+                        }
+                        else if (!canTake)
+                        {
+                            continue;
+                        }
+                    }
+
                     AgvSecureReplyDTO replyDTO = new AgvSecureReplyDTO()
                     {
                         ReqCode = Guid.NewGuid().ToString().Replace("-", ""), //WaitToTask.TaskNum.ToString(),
@@ -114,7 +178,7 @@
                         else return "22";
                     }
                 default:
-                    throw new NotImplementedException();
+                    throw new Exception($"璁惧缂栧彿閿欒");
             }
         }
     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
index fe4ab19..e635bdd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
@@ -74,7 +74,7 @@
                         }
                         if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
                         {
-                            Dt_Task task = _taskRepository.QueryFirst(x => (x.TargetAddress == item.StackerCraneCode || string.IsNullOrEmpty(x.TargetAddress) || x.NextAddress == item.StackerCraneCode || string.IsNullOrEmpty(x.NextAddress)) && (x.TaskState == TaskStatusEnum.New.ObjToInt() || x.TaskState == TaskStatusEnum.SC_Execute.ObjToInt()) && x.SourceAddress == item.StationCode || x.CurrentAddress==item.AGVStationCode);
+                            Dt_Task task = _taskRepository.QueryFirst(x => (x.TargetAddress == item.StackerCraneCode || string.IsNullOrEmpty(x.TargetAddress) || x.NextAddress == item.StackerCraneCode || string.IsNullOrEmpty(x.NextAddress)) && (x.TaskState == TaskStatusEnum.New.ObjToInt() || x.TaskState == TaskStatusEnum.AGV_Finish.ObjToInt()) && (x.SourceAddress == item.StationCode || x.CurrentAddress == item.AGVStationCode || x.CurrentAddress == item.StationCode));
                             if (task != null)
                             {
                                 string oldAddress = task.NextAddress;
@@ -91,6 +91,7 @@
                                     WriteInfo(item.StationName, $"璇锋眰鍒嗛厤璐т綅杩斿洖淇℃伅閿欒,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}");
                                     break;
                                 }
+                                task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                                 task.CurrentAddress = stationManger.StackerCraneStationCode;
                                 task.TargetAddress = locationCode;
                                 task.NextAddress = locationCode;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/06b6ba59-2c2a-4213-bfcb-89a257c39dfa.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/06b6ba59-2c2a-4213-bfcb-89a257c39dfa.vsidx"
deleted file mode 100644
index a9a2335..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/06b6ba59-2c2a-4213-bfcb-89a257c39dfa.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/3bdb0da1-c42c-4531-99e8-2d9f1d8c02e8.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3bdb0da1-c42c-4531-99e8-2d9f1d8c02e8.vsidx"
deleted file mode 100644
index f50dced..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3bdb0da1-c42c-4531-99e8-2d9f1d8c02e8.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/8c2e982d-ad7f-4e3a-9e0e-ad39ee70751d.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8c2e982d-ad7f-4e3a-9e0e-ad39ee70751d.vsidx"
deleted file mode 100644
index 678ee82..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8c2e982d-ad7f-4e3a-9e0e-ad39ee70751d.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/aa4fa866-107a-485b-b7b2-6e3b1ee2a3e0.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/aa4fa866-107a-485b-b7b2-6e3b1ee2a3e0.vsidx"
deleted file mode 100644
index bbbf9d1..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/aa4fa866-107a-485b-b7b2-6e3b1ee2a3e0.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/b53658fa-fd6e-4ffe-a47a-525d35036fa2.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b53658fa-fd6e-4ffe-a47a-525d35036fa2.vsidx"
deleted file mode 100644
index 9945a2a..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b53658fa-fd6e-4ffe-a47a-525d35036fa2.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/be46b995-1948-4e27-9de5-d740316e7adb.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/be46b995-1948-4e27-9de5-d740316e7adb.vsidx"
deleted file mode 100644
index a9ba207..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/be46b995-1948-4e27-9de5-d740316e7adb.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/d09639a2-a943-4bea-b5bf-74c7d0c7ecaf.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d09639a2-a943-4bea-b5bf-74c7d0c7ecaf.vsidx"
deleted file mode 100644
index 4186753..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d09639a2-a943-4bea-b5bf-74c7d0c7ecaf.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/d8be537b-48e7-4c4e-b402-59d20119ef7a.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d8be537b-48e7-4c4e-b402-59d20119ef7a.vsidx"
deleted file mode 100644
index 63b3d61..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d8be537b-48e7-4c4e-b402-59d20119ef7a.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/e4d2b89c-c9d8-4512-858a-0ac416e979cb.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e4d2b89c-c9d8-4512-858a-0ac416e979cb.vsidx"
deleted file mode 100644
index 8d8bf74..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e4d2b89c-c9d8-4512-858a-0ac416e979cb.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/f68413a2-ad64-418c-b6b3-1cbbe0a09b03.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f68413a2-ad64-418c-b6b3-1cbbe0a09b03.vsidx"
new file mode 100644
index 0000000..b8d828b
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f68413a2-ad64-418c-b6b3-1cbbe0a09b03.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs"
index 651618f..4fa9539 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordService.cs"
@@ -15,7 +15,7 @@
     {
         ILocationStatusChangeRecordRepository Repository { get; }
 
-        void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, LocationStatusEnum lastStatus, LocationChangeType changeType, string? orderNo = null, int? taskNum = null);
+        void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, LocationStatusEnum lastStatus, LocationStatusEnum newStatus, LocationChangeType changeType, string? orderNo = null, int? taskNum = null);
 
         void AddLocationStatusChangeRecord(List<Dt_LocationInfo> locationInfos, LocationStatusEnum newStatus, LocationChangeType changeType, string? orderNo = null, List<int>? taskNums = null);
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index 95dce0e..2979f71 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -25,6 +25,7 @@
 using WIDESEA_DTO.Basic;
 using WIDESEA_DTO.ERP;
 using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.MES;
 using WIDESEA_External.ERPService;
 using WIDESEA_External.Model;
 using WIDESEA_IBasicRepository;
@@ -35,6 +36,7 @@
 using WIDESEA_IStockRepository;
 using WIDESEA_IStockService;
 using WIDESEA_ITaskInfoRepository;
+using WIDESEA_ITaskInfoService;
 using WIDESEA_Model.Models;
 using WIDESEA_StockRepository;
 
@@ -414,6 +416,14 @@
                 _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
                 _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup);
                 _unitOfWorkManage.CommitTran();
+                //if (warehouse.WarehouseCode==WarehouseEnum.HA153.ToString())
+                //{
+                //    //鍚屾娴嬭瘯鏋朵俊鎭�
+                //    foreach (var model in models)
+                //    {
+                //        _taskService.TestSynStock(new TestToolSynInfo() { ToolCode = model.LotNo, Life = Initiallife });
+                //    }
+                //}
                 content.OK();
             }
             catch (Exception ex)
@@ -526,6 +536,11 @@
                 }
                 _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup);
                 _unitOfWorkManage.CommitTran();
+                //鍚屾娴嬭瘯鏋朵俊鎭�
+                //foreach (var model in models)
+                //{
+                //    _taskService.TestSynStock(new TestToolSynInfo() { ToolCode = model.LotNo, Life = Initiallife });
+                //}
                 content.OK();
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj"
index 407bace..9b1e176 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj"
@@ -14,6 +14,7 @@
     <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
     <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
     <ProjectReference Include="..\WIDESEA_ITaskInfoRepository\WIDESEA_ITaskInfoRepository.csproj" />
+    <ProjectReference Include="..\WIDESEA_ITaskInfoService\WIDESEA_ITaskInfoService.csproj" />
   </ItemGroup>
 
 </Project>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/Service/LocationStatusChangeRecordService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/Service/LocationStatusChangeRecordService.cs"
index 9660b90..e55c598 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/Service/LocationStatusChangeRecordService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_RecordService/Service/LocationStatusChangeRecordService.cs"
@@ -19,13 +19,13 @@
 {
     public partial class LocationStatusChangeRecordService : ServiceBase<Dt_LocationStatusChangeRecord, ILocationStatusChangeRecordRepository>, ILocationStatusChangeRecordService
     {
-        public void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, LocationStatusEnum lastStatus, LocationChangeType changeType, string? orderNo = null, int? taskNum = null)
+        public void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, LocationStatusEnum lastStatus, LocationStatusEnum newStatus, LocationChangeType changeType, string? orderNo = null, int? taskNum = null)
         {
             try
             {
                 Dt_LocationStatusChangeRecord locationStatusChangeRecord = new Dt_LocationStatusChangeRecord()
                 {
-                    AfterStatus = locationInfo.LocationStatus,
+                    AfterStatus = newStatus.ObjToInt(),
                     BeforeStatus = lastStatus.ObjToInt(),
                     ChangeType = changeType.ObjToInt(),
                     LocationCode = locationInfo.LocationCode,
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
index 55e6f47..c944a34 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
@@ -28,6 +28,8 @@
 {
     public partial class TaskService
     {
+        static object lock_out = new object();
+
         /// <summary>
         /// 娴嬭瘯鏋跺嚭浠�
         /// </summary>
@@ -35,67 +37,82 @@
         /// <returns></returns>
         public MesResponseContent TestToolOut(TestToolOutModel model)
         {
-            MesResponseContent responseContent = new MesResponseContent();
-            try
+            lock (lock_out)
             {
-                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
-                //鑾峰彇搴撳瓨璁板綍
-                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
-                  x.WarehouseId == warehouse.WarehouseId &&
-                  x.StockStatus == (int)StockStatusEmun.鍏ュ簱瀹屾垚).Includes(x => x.Details).ToList();
-                Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.ToolCode));
-                if (stockInfo == null)
+                MesResponseContent responseContent = new MesResponseContent();
+                try
                 {
-                    return responseContent.Error($"娴嬭瘯鏋�:{model.ToolCode}鏃犲彲鐢ㄥ簱瀛�");
+                    Dt_Task exsit = Repository.QueryFirst(x => x.TargetAddress == model.TargetAddressCode);
+                    if(exsit != null)
+                    {
+                        return responseContent.Error($"鐩爣鍦板潃閲嶅");
+                    }
+
+                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
+                    //鑾峰彇搴撳瓨璁板綍
+                    List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
+                      x.WarehouseId == warehouse.WarehouseId &&
+                      x.StockStatus == (int)StockStatusEmun.鍏ュ簱瀹屾垚).Includes(x => x.Details).ToList();
+                    Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.ToolCode));
+                    if (stockInfo == null)
+                    {
+                        return responseContent.Error($"娴嬭瘯鏋�:{model.ToolCode}鏃犲彲鐢ㄥ簱瀛�");
+                    }
+                    Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
+                    if (exsit2 != null)
+                    {
+                        return responseContent.Error($"娴嬭瘯鏋舵壒娆″彿閲嶅");
+                    }
+
+                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
+                      x.WarehouseId == stockInfo.WarehouseId &&
+                      x.LocationStatus == (int)LocationStatusEnum.InStock &&
+                      (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
+                    if (locationInfo == null)
+                    {
+                        return responseContent.Error($"娴嬭瘯鏋惰揣浣�:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�");
+                    }
+                    //鐢熸垚娴嬭瘯鏋跺嚭搴撲换鍔� 閿佸畾搴撳瓨 鏇存敼璐т綅鐘舵��
+                    Dt_Task taskOut = new()
+                    {
+                        CurrentAddress = stockInfo.LocationCode,
+                        Grade = 0,
+                        PalletCode = stockInfo.PalletCode,
+                        NextAddress = "",
+                        Roadway = locationInfo.RoadwayNo,
+                        SourceAddress = stockInfo.LocationCode,
+                        TargetAddress = model.TargetAddressCode,
+                        TaskStatus = (int)TaskStatusEnum.New,
+                        TaskType = (int)TaskTypeEnum.Outbound,
+                        TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                        PalletType = stockInfo.PalletType,
+                        WarehouseId = stockInfo.WarehouseId,
+                    };
+                    stockInfo.StockStatus = (int)StockStatusEmun.鍑哄簱閿佸畾;
+                    LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
+                    locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
+                    //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅
+                    _unitOfWorkManage.BeginTran();
+                    //鏇存柊搴撳瓨鐘舵��
+                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+                    //鏇存柊璐т綅鐘舵��
+                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
+                    //鏂板缓浠诲姟
+                    BaseDal.AddData(taskOut);
+                    //鍔犲叆璐т綅鍙樺姩璁板綍
+                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
+                    _unitOfWorkManage.CommitTran();
+                    //灏嗕换鍔℃帹閫佸埌WCS
+                    PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV");
+                    responseContent.OK();
                 }
-                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
-                  x.WarehouseId == stockInfo.WarehouseId &&
-                  x.LocationStatus == (int)LocationStatusEnum.InStock &&
-                  (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
-                if (locationInfo == null)
+                catch (Exception ex)
                 {
-                    return responseContent.Error($"娴嬭瘯鏋惰揣浣�:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�");
+                    _unitOfWorkManage.RollbackTran();
+                    responseContent.Error(ex.Message);
                 }
-                //鐢熸垚娴嬭瘯鏋跺嚭搴撲换鍔� 閿佸畾搴撳瓨 鏇存敼璐т綅鐘舵��
-                Dt_Task taskOut = new()
-                {
-                    CurrentAddress = stockInfo.LocationCode,
-                    Grade = 0,
-                    PalletCode = stockInfo.PalletCode,
-                    NextAddress = "",
-                    Roadway = locationInfo.RoadwayNo,
-                    SourceAddress = stockInfo.LocationCode,
-                    TargetAddress = model.TargetAddressCode,
-                    TaskStatus = (int)TaskStatusEnum.New,
-                    TaskType = (int)TaskTypeEnum.Outbound,
-                    TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
-                    PalletType = stockInfo.PalletType,
-                    WarehouseId = stockInfo.WarehouseId,
-                };
-                stockInfo.StockStatus = (int)StockStatusEmun.鍑哄簱閿佸畾;
-                LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
-                locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
-                //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅
-                _unitOfWorkManage.BeginTran();
-                //鏇存柊搴撳瓨鐘舵��
-                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
-                //鏇存柊璐т綅鐘舵��
-                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
-                //鏂板缓浠诲姟
-                BaseDal.AddData(taskOut);
-                //鍔犲叆璐т綅鍙樺姩璁板綍
-                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
-                _unitOfWorkManage.CommitTran();
-                //灏嗕换鍔℃帹閫佸埌WCS
-                PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV");
-                responseContent.OK();
+                return responseContent;
             }
-            catch (Exception ex)
-            {
-                _unitOfWorkManage.RollbackTran();
-                responseContent.Error(ex.Message);
-            }
-            return responseContent;
         }
         /// <summary>
         /// 娴嬭瘯鏋堕��搴�
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 8528c0e..fd0f49f 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"
@@ -32,6 +32,7 @@
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.MES;
 using WIDESEA_DTO.Stock;
 using WIDESEA_DTO.Task;
 using WIDESEA_External.ERPService;
@@ -218,6 +219,15 @@
                         return WebResponseContent.Instance.Error($"鍏ュ簱鍚屾Erp澶辫触");
                     }
                 }
+
+                if ((stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt() || stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt()) && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
+                {
+                    foreach (var model in stockInfo.Details)
+                    {
+                        TestSynStock(new TestToolSynInfo() { ToolCode = model.BatchNo, Life = int.TryParse(model.Remark, out int val) ? val : 1000 });
+                    }
+                }
+
                 //娴嬭瘯鏋跺叆搴撳簱瀛樼姸鎬�
                 if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt())
                 {
@@ -237,7 +247,7 @@
                 _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
                 _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                 _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
-                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.InboundCompleted);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted);
                 _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, stockInfo.Details.Sum(x => x.StockQuantity), stockInfo.Details.Sum(x => x.StockQuantity), StockChangeTypeEnum.Inbound, taskNum);
                 if (inboundOrder != null)
                 {
@@ -305,7 +315,7 @@
                     }
                 }
 
-                
+
                 _unitOfWorkManage.BeginTran();
                 if (outboundOrderDetails.Count > 0)
                 {
@@ -319,7 +329,7 @@
                 _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                 BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
 
-                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
                 _unitOfWorkManage.CommitTran();
 
                 if (warehouse.WarehouseCode != WarehouseEnum.HA64.ToString())
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index 4bb32e3..25f273f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -202,7 +202,7 @@
                 LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
 
                 _unitOfWorkManage.BeginTran();
-                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.InboundAssignLocation);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
                 _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, task.WarehouseId);
                 BaseDal.UpdateData(task);
                 _unitOfWorkManage.CommitTran();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
index cdccf92..a390a33 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
@@ -86,12 +86,12 @@
                         {
                             LocationStatusEnum lastStatus = (LocationStatusEnum)newLocation.LocationStatus;
                             _basicService.LocationInfoService.UpdateLocationStatus(newLocation, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
-                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(newLocation, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
+                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(newLocation, lastStatus, LocationStatusEnum.Lock, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                         }
                         {
                             LocationStatusEnum lastStatus = (LocationStatusEnum)needRelocationItem.LocationStatus;
                             _basicService.LocationInfoService.UpdateLocationStatus(needRelocationItem, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
-                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(needRelocationItem, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
+                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(needRelocationItem, lastStatus, LocationStatusEnum.Lock, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                         }
                         stockInfo.StockStatus = StockStatusEmun.绉诲簱閿佸畾.ObjToInt();
                         _stockRepository.StockInfoRepository.UpdateData(stockInfo);

--
Gitblit v1.9.3