From cfea43fe783cdb99faa14f59845e41cfcda7d974 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 16 五月 2024 17:22:48 +0800
Subject: [PATCH] AGV任务删除功能,取空托任务逻辑优化,检测上料任务下发逻辑优化(AGV备料两个)

---
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs                  |    7 
 代码管理/PCS/WCS_Server/WIDESEA_WCS/Jobs/Task/AutoTaskJob.cs                       |    2 
 代码管理/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs                      |    1 
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs               |   90 ++++++
 代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs                             |  172 +++++++-----
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs        |  204 ++++++++++++++
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs              |   95 ++++++
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs                 |   97 ++++--
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Services/Taskinfo/Partial/dt_agvtaskService.cs |   61 ++++
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs               |   52 ++-
 代码管理/WMS/WMS_Server/WIDESEA_Comm/StateEnum/TrayEnum.cs                         |   38 ++
 11 files changed, 685 insertions(+), 134 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs"
index 22961fb..bff502d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs"
@@ -16,6 +16,7 @@
 using WIDESEA_Comm.TaskNo;
 using WIDESEA_WCS.JobsPart.Common;
 using System.Xml.Linq;
+using WIDESEA_Common;
 
 namespace WIDESEA_WCS
 {
@@ -84,9 +85,9 @@
                         {
 
                             #region 鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷�
-                            var area = Gantry_client.ReadByOrder<Int16>("place_prog", number);//鏀炬枡瀹屾垚鐨勫尯鍩熷彿
+                            //var area = Gantry_client.ReadByOrder<Int16>("place_prog", number);//鏀炬枡瀹屾垚鐨勫尯鍩熷彿
 
-                            WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷�", $"PCS鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦鍖哄煙鍙凤細{area}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒");
+                            //WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇鍖哄煙鍙锋槸鍚︿竴鑷�", $"PCS鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦鍖哄煙鍙凤細{area}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒");
                             //if (AreaNr != area)
                             //{
                             //    client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ
@@ -97,9 +98,9 @@
                             #endregion
 
                             #region 鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷�
-                            var quantity = Gantry_client.ReadByOrder<Int16>("pos_prog", number);//妗佹灦璁板綍鐨勮溅杞暟閲�
+                            //var quantity = Gantry_client.ReadByOrder<Int16>("pos_prog", number);//妗佹灦璁板綍鐨勮溅杞暟閲�
 
-                            WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷�", $"鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦杞﹁疆鏁帮細{quantity}\nPCS杞﹁疆鏁帮細{station.quantity}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒");
+                            //WriteLog.Write_Log(number + "鍙栨枡瀹屾垚鍑洪敊", bindSNS[bindSNS.Length - 1], "鍒ゆ柇杞﹁疆鏁伴噺鏄惁涓�鑷�", $"鍖哄煙鍙凤細{AreaNr}锛沑n妗佹灦杞﹁疆鏁帮細{quantity}\nPCS杞﹁疆鏁帮細{station.quantity}\n閿欒淇℃伅锛歅CS鍖哄煙鍙蜂笌妗佹灦鍖哄煙鍙蜂笉涓�鑷达紒");
                             //if (quantity != station.quantity)
                             //{
                             //    client.WriteByOrder("W_AlarmSignal", (Int16)2, number);//鎶ヨ
@@ -196,18 +197,18 @@
                         }
 
                         #region 鏇存柊涓�涓娴嬩笂鏂欎换鍔�
-                        Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context);
-                        if (!agvtaskService.Find(x => x.agv_toaddress == Station.stationCode).Any())
-                        {
-                            var task = agvtaskService.Find(x => x.agv_taskstate == "Queue" && (x.agv_tasktype == "TaskType_OutsourceOutbound" || x.agv_tasktype == "TaskType_Outbound") && x.agv_toaddress == "").OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault();
-                            if (task != null)
-                            {
-                                task.agv_taskstate = "Create";
-                                task.agv_toaddress = Station.stationCode;
-                                agvtaskService.Update(task, true);
-                                WriteDBLog.Success("鏇存柊涓�涓娴嬩笂鏂欎换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}", "PCS");
-                            }
-                        }
+                        //Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context);
+                        //if (!agvtaskService.Find(x => x.agv_toaddress == Station.stationCode).Any())
+                        //{
+                        //    var task = agvtaskService.Find(x => x.agv_taskstate == "Queue" && (x.agv_tasktype == "TaskType_OutsourceOutbound" || x.agv_tasktype == "TaskType_Outbound") && x.agv_toaddress == "").OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault();
+                        //    if (task != null)
+                        //    {
+                        //        task.agv_taskstate = "Create";
+                        //        task.agv_toaddress = Station.stationCode;
+                        //        agvtaskService.Update(task, true);
+                        //        WriteDBLog.Success("鏇存柊涓�涓娴嬩笂鏂欎换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}", "PCS");
+                        //    }
+                        //}
                         #endregion
                     }
                 }
@@ -411,78 +412,105 @@
                                 agvtaskService.Update(task, true);
                                 station.location_state = LocationStateEnum.Busy.ToString();
                                 stationinfoRepository.Update(station, true);
-                                WriteDBLog.Success("鏇存柊绌烘墭闃熷垪浠诲姟", $"浠诲姟缂栧彿锛歿task.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "PCS");
+                                WriteDBLog.Success("鏇存柊琛ョ┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "PCS");
                                 continue;
                             }
-                            remark = "鏌ヨ绌烘墭鍙犵洏浣�";
-                            #region 绌烘墭鍙犵洏
-                            if (stationCode.Contains("S"))
-                            {
-                                var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList();
-                                EmptyStation = EmptyStations.Where(x => x.tray_type == station.tray_type && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault();
-                                if (EmptyStation == null)
-                                    EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0 && x.enable).FirstOrDefault();
-                                if (EmptyStation == null)
-                                {
-                                    EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.enable).OrderByDescending(x => x.quantity).FirstOrDefault();
-                                    if (EmptyStation != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyStation);
-                                }
-                            }
+                            #region 妫�娴嬩笂鏂欑殑绌烘墭鍙犵洏
+                            //remark = "鏌ヨ绌烘墭鍙犵洏浣�";
+                            //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.enable).ToList();
+                            //if (stationCode.Contains("S"))
+                            //{
+                            //    //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList();
+                            //    EmptyStation = EmptyStations.Where(x => x.tray_type == station.tray_type && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault();
+                            //    if (EmptyStation == null)
+                            //        EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault();
+                            //    if (EmptyStation == null)
+                            //    {
+                            //        EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault();
+                            //        if (EmptyStation != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyStation);
+                            //    }
+                            //}
+                            //EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 5).FirstOrDefault();
+                            //if (EmptyStation != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyStation);
                             #endregion
-                            else
+
+                            #region 鍒涘缓鍙栫┖鎵橀槦鍒椾换鍔�
+                            dt_agvtask agvtask = new dt_agvtask()
                             {
-                                remark = "鏌ユ壘搴撳唴绌烘墭浣�";
-                                EmptyStation = GetStation.EmptyPalletStation(area);
-                                if (EmptyStation != null)
-                                    if (agvtaskService.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any()) return;
-                            }
+                                agv_fromaddress = station.stationCode,
+                                agv_id = Guid.NewGuid(),
+                                agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                                agv_grade = station.stationCode.Contains("S0100100") ? 3 : 1,
+                                agv_createtime = DateTime.Now,
+                                agv_taskstate = AGVTaskStateEnum.Queue.ToString(),
+                                //agv_materielid = station.stationType,
+                                agv_qty = 1,
+                                StarQuantity = 0,
+                                EndQuantity = 0,//EmptyStation.quantity,
+                                agv_tasktype = AGVTaskTypeEnum.TaskType_EmptyPallet.ToString(),
+                                agv_toaddress = "",//EmptyStation.stationCode,
+                                agv_userid = "绯荤粺",
+                                agv_TrayStatus = "EmptyTray",//station.tray_status,
+                                agv_Traytype = station.tray_type,
+                            };
+                            agvtaskService.Add(agvtask, true);
+                            station.location_state = LocationStateEnum.Busy.ToString();
+                            stationinfoRepository.Update(station, true);
+                            //EmptyStation.location_state = LocationStateEnum.Busy.ToString();
+                            //stationinfoRepository.Update(EmptyStation, true);
+                            WriteDBLog.Success("鍒涘缓鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "PCS");
+                            #endregion
+
+                            #region 鍒涘缓鍙栫┖鎵樻柊寤轰换鍔�
+                            //else
+                            //{
+                            //    remark = "鏌ユ壘搴撳唴绌烘墭浣�";
+                            //    EmptyStation = GetStation.EmptyPalletStation(area);
+                            //    if (EmptyStation != null)
+                            //        if (agvtaskService.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any()) return;
+                            //}
 
 
-                            if (EmptyStation != null)
-                            {
-                                #region 鍚屼竴涓┖鎵樹綅鍙兘鍚屾椂鐢熸垚涓�涓┖鎵樹换鍔�
-                                //remark = "鏌ヨ绌烘墭浣嶆槸鍚﹀瓨鍦ㄤ换鍔�";
-                                //if (agvtaskService.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any())
-                                //    return;
-                                #endregion
-                                dt_agvtask agvtask = new dt_agvtask()
-                                {
-                                    agv_fromaddress = station.stationCode,
-                                    agv_id = Guid.NewGuid(),
-                                    agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
-                                    agv_grade = station.stationCode.Contains("S0100100") ? 3 : 1,
-                                    agv_createtime = DateTime.Now,
-                                    agv_taskstate = "Create",
-                                    //agv_materielid = station.stationType,
-                                    agv_qty = 1,
-                                    StarQuantity = 0,
-                                    EndQuantity = EmptyStation.quantity,
-                                    agv_tasktype = "TaskType_EmptyPallet",
-                                    agv_toaddress = EmptyStation.stationCode,
-                                    agv_userid = "绯荤粺",
-                                    agv_TrayStatus = "EmptyTray",//station.tray_status,
-                                    agv_Traytype = station.tray_type,
-                                };
-                                agvtaskService.Add(agvtask, true);
-                                station.location_state = LocationStateEnum.Busy.ToString();
-                                stationinfoRepository.Update(station, true);
-                                EmptyStation.location_state = LocationStateEnum.Busy.ToString();
-                                stationinfoRepository.Update(EmptyStation, true);
-                                WriteDBLog.Success("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "PCS");
-                            }
+                            //if (EmptyStation != null)
+                            //{
+                            //    dt_agvtask agvtask = new dt_agvtask()
+                            //    {
+                            //        agv_fromaddress = station.stationCode,
+                            //        agv_id = Guid.NewGuid(),
+                            //        agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                            //        agv_grade = station.stationCode.Contains("S0100100") ? 3 : 1,
+                            //        agv_createtime = DateTime.Now,
+                            //        agv_taskstate = AGVTaskStateEnum.Create.ToString(),
+                            //        //agv_materielid = station.stationType,
+                            //        agv_qty = 1,
+                            //        StarQuantity = 0,
+                            //        EndQuantity = EmptyStation.quantity,
+                            //        agv_tasktype = "TaskType_EmptyPallet",
+                            //        agv_toaddress = EmptyStation.stationCode,
+                            //        agv_userid = "绯荤粺",
+                            //        agv_TrayStatus = "EmptyTray",//station.tray_status,
+                            //        agv_Traytype = station.tray_type,
+                            //    };
+                            //    agvtaskService.Add(agvtask, true);
+                            //    station.location_state = LocationStateEnum.Busy.ToString();
+                            //    stationinfoRepository.Update(station, true);
+                            //    EmptyStation.location_state = LocationStateEnum.Busy.ToString();
+                            //    stationinfoRepository.Update(EmptyStation, true);
+                            //    WriteDBLog.Success("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "PCS");
+                            //}
+                            #endregion
                         }
                     }
                     catch (Exception ex)
                     {
-                        //WriteDBLog.Error("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"{stationCode}锛歿remark}閿欒淇℃伅锛歿ex.Message}", "PCS");
-                        WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", "閿欒淇℃伅锛�", $"{stationCode}锛歿remark}閿欒淇℃伅锛歿ex.Message}");
+                        WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鍒涘缓鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", "閿欒淇℃伅锛�", $"{stationCode}锛歿remark}閿欒淇℃伅锛歿ex.Message}");
                     }
                 }
             }
             catch (Exception ex)
             {
                 //WriteDBLog.Error("鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", $"閿欒淇℃伅锛歿ex.Message}", "PCS");
-                WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鍒涘缓鑷姩鍙栫┖鎵樹换鍔�", "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}");
+                WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鍒涘缓鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", "閿欒淇℃伅锛�", $"閿欒淇℃伅锛歿ex.Message}");
             }
         }
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/Task/AutoTaskJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/Task/AutoTaskJob.cs"
index 2a95776..d3978c3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/Task/AutoTaskJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Jobs/Task/AutoTaskJob.cs"
@@ -30,7 +30,7 @@
 
         private void DoAction(IJobExecutionContext context)
         {
-            EmptyTray.EmptyTrayIn();//绌烘墭鍙犵洏鍏ュ簱
+            //EmptyTray.EmptyTrayIn();//绌烘墭鍙犵洏鍏ュ簱
             StationTask.CreateTask();//鍏ュ簱
             OutboundTask.CreateOutboundTask();//鍑哄簱
             ReplaceTray.ReplaceTrayTask();//鏇存崲鎵樼洏
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs"
index 196578d..c67fabd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs"
@@ -6,6 +6,7 @@
 using WIDESEA_Comm;
 using WIDESEA_Comm.LogInfo;
 using WIDESEA_Comm.TaskNo;
+using WIDESEA_Common;
 using WIDESEA_Core.EFDbContext;
 using WIDESEA_Entity.DomainModels;
 using WIDESEA_WCS.IRepositories;
@@ -43,25 +44,40 @@
                     var MaterialSignal = Pipeline_client.ReadByOrder<Int16>("R_MaterialSignal", station.stationCode);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃�
                     if (PalletSignal == 2 && MaterialSignal == 2)
                     {
-                        dt_agvtask taskPart = new dt_agvtask()
+                        var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault();
+                        if (agv_task != null)
                         {
-                            agv_fromaddress = "",
-                            agv_id = Guid.NewGuid(),
-                            agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
-                            agv_grade = station.stationCode.Contains("W0100100") ? 3 : 2,
-                            agv_createtime = DateTime.Now,
-                            agv_taskstate = "Queue",
-                            agv_qty = 1,
-                            agv_tasktype = "TaskType_EmptyPallet",
-                            agv_toaddress = station.stationCode,
-                            agv_userid = "绯荤粺",
-                            agv_TrayStatus = "EmptyTray",// station.tray_status,
-                            agv_Traytype = station.tray_type
-                        };
-                        station.location_state = LocationStateEnum.Busy.ToString();
-                        stationinfoRepository.Update(station, true);
-                        agvtaskRepository.Add(taskPart, true);
-                        WriteDBLog.Success("鍒涘缓琛ョ┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿taskPart.agv_tasknum}", "PCS");
+                            agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString();
+                            //agv_task.EndQuantity = EmptyStation.quantity;
+                            agv_task.agv_toaddress = station.stationCode;
+                            agvtaskRepository.Update(agv_task, true);
+                            station.location_state = LocationStateEnum.Busy.ToString();
+                            stationinfoRepository.Update(station, true);
+                            WriteDBLog.Success("鏇存柊琛ョ┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "PCS");
+                        }
+                        else
+                        {
+                            dt_agvtask taskPart = new dt_agvtask()
+                            {
+                                agv_fromaddress = "",
+                                agv_id = Guid.NewGuid(),
+                                agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                                agv_grade = station.stationCode.Contains("W0100100") ? 3 : 2,
+                                agv_createtime = DateTime.Now,
+                                agv_taskstate = "Queue",
+                                agv_qty = 1,
+                                agv_tasktype = "TaskType_EmptyPallet",
+                                agv_toaddress = station.stationCode,
+                                agv_userid = "绯荤粺",
+                                agv_TrayStatus = "EmptyTray",// station.tray_status,
+                                agv_Traytype = station.tray_type
+                            };
+                            station.location_state = LocationStateEnum.Busy.ToString();
+                            stationinfoRepository.Update(station, true);
+                            agvtaskRepository.Add(taskPart, true);
+                            WriteDBLog.Success("鍒涘缓琛ョ┖鎵樹换鍔�", $"浠诲姟缂栧彿锛歿taskPart.agv_tasknum}", "PCS");
+                        }
+                        
                     }
                 }
             }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs"
index da98f63..393c991 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs"
@@ -7,6 +7,7 @@
 using WIDESEA_Comm;
 using WIDESEA_Comm.LogInfo;
 using WIDESEA_Comm.TaskNo;
+using WIDESEA_Common;
 using WIDESEA_Core.EFDbContext;
 using WIDESEA_Entity.DomainModels;
 using WIDESEA_WCS.IRepositories;
@@ -61,47 +62,65 @@
                 foreach (var station in stations)
                 {
                     if (agvtaskRepository.Find(x => x.agv_fromaddress == station.stationCode || x.agv_toaddress == station.stationCode).Any()) continue;
+                    #region MyRegion
                     var types = station.tray_type.Split('/');
-                    var area = types[0] == "SmallTray" ? "11" : "10";
-                    //鎵�1搴撳尯鐨勭┖鎵樹綅
-                    var EmptyStation = GetStation.EmptyPalletStation(area);
-                    //var EmptyStation = stationinfoRepository.Find(x => x.area == area && x.quantity < 5 && x.stationCode.Contains("A") /*&& x.location_state == "Empty"*/ && x.enable)
-                    //    .OrderBy(x => x.column).OrderBy(x => x.line).FirstOrDefault();
-                    //if (EmptyStation == null)
-                    //    EmptyStation = stationinfoRepository.Find(x => x.area == area && x.quantity < 5 && x.stationCode.Contains(area == "10" ? "D" : "C") /*&& x.location_state == "Empty"*/ && x.enable)
-                    //    .OrderBy(x => x.line).OrderBy(x => x.column).FirstOrDefault();
-                    if (EmptyStation != null)
+                    dt_agvtask agvtask = new dt_agvtask()
                     {
-                        dt_agvtask agvtask = new dt_agvtask()
-                        {
-                            agv_fromaddress = station.stationCode,
-                            agv_id = Guid.NewGuid(),
-                            agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
-                            agv_grade = 2,
-                            agv_createtime = DateTime.Now,
-                            agv_taskstate = "Create",
-                            //agv_materielid = station.stationType,
-                            agv_qty = 1,
-                            StarQuantity = 0,
-                            EndQuantity = EmptyStation.quantity,
-                            agv_tasktype = "TaskType_EmptyPallet",
-                            agv_toaddress = EmptyStation.stationCode,
-                            agv_userid = "绯荤粺",
-                            agv_TrayStatus = station.tray_status,
-                            //bindSN = station.bindSN,
-                            //agv_worktype = Convert.ToInt32(mesinfo.processCode),
-                            //agv_materbarcode = mesinfo.materialCode,
-                            agv_Traytype = types[0]
-                        };
-                        agvtaskRepository.Add(agvtask, true);
-                        station.location_state = LocationStateEnum.Busy.ToString();
-                        stationinfoRepository.Update(EmptyStation, true);
-                        EmptyStation.location_state = LocationStateEnum.Busy.ToString();
-                        stationinfoRepository.Update(EmptyStation, true);
-                        WriteDBLog.Success("鍒涘缓鏇存崲绌虹洏浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS");
-                        CreatePartQueue(agvtaskRepository, agvtask, agvtask.agv_Traytype == "SmallTray" ? "LargeTray" : "SmallTray");
-                        //CreatePartQueue(agvtaskRepository, agvtask, types[1]);
-                    }
+                        agv_fromaddress = station.stationCode,
+                        agv_id = Guid.NewGuid(),
+                        agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                        agv_grade = 1,
+                        agv_createtime = DateTime.Now,
+                        agv_taskstate = AGVTaskStateEnum.Queue.ToString(),
+                        agv_qty = 1,
+                        StarQuantity = 0,
+                        EndQuantity = 0,//EmptyStation.quantity,
+                        agv_tasktype = AGVTaskTypeEnum.TaskType_EmptyPallet.ToString(),
+                        agv_toaddress = "",//EmptyStation.stationCode,
+                        agv_userid = "绯荤粺",
+                        agv_TrayStatus = station.tray_status,
+                        agv_Traytype = types[0]
+                    };
+                    agvtaskRepository.Add(agvtask, true);
+                    station.location_state = LocationStateEnum.Busy.ToString();
+                    stationinfoRepository.Update(station, true);
+                    WriteDBLog.Success("鍒涘缓鏇存崲绌虹洏浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS");
+                    CreatePartQueue(agvtaskRepository, agvtask, agvtask.agv_Traytype == "SmallTray" ? "LargeTray" : "SmallTray");
+                    #endregion
+
+                    #region MyRegion
+                    //var types = station.tray_type.Split('/');
+                    //var area = types[0] == "SmallTray" ? "11" : "10";
+                    ////鎵�1搴撳尯鐨勭┖鎵樹綅
+                    //var EmptyStation = GetStation.EmptyPalletStation(area);
+                    //if (EmptyStation != null)
+                    //{
+                    //    dt_agvtask agvtask = new dt_agvtask()
+                    //    {
+                    //        agv_fromaddress = station.stationCode,
+                    //        agv_id = Guid.NewGuid(),
+                    //        agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                    //        agv_grade = 2,
+                    //        agv_createtime = DateTime.Now,
+                    //        agv_taskstate = "Create",
+                    //        agv_qty = 1,
+                    //        StarQuantity = 0,
+                    //        EndQuantity = EmptyStation.quantity,
+                    //        agv_tasktype = "TaskType_EmptyPallet",
+                    //        agv_toaddress = EmptyStation.stationCode,
+                    //        agv_userid = "绯荤粺",
+                    //        agv_TrayStatus = station.tray_status,
+                    //        agv_Traytype = types[0]
+                    //    };
+                    //    agvtaskRepository.Add(agvtask, true);
+                    //    station.location_state = LocationStateEnum.Busy.ToString();
+                    //    stationinfoRepository.Update(station, true);
+                    //    EmptyStation.location_state = LocationStateEnum.Busy.ToString();
+                    //    stationinfoRepository.Update(EmptyStation, true);
+                    //    WriteDBLog.Success("鍒涘缓鏇存崲绌虹洏浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS");
+                    //    CreatePartQueue(agvtaskRepository, agvtask, agvtask.agv_Traytype == "SmallTray" ? "LargeTray" : "SmallTray");
+                    //} 
+                    #endregion
                 }
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs"
index 5d521e3..12e45aa 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs"
@@ -205,14 +205,15 @@
                     {
                         if (agvtask.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString())
                             if (GetStation.QueueStation(agvtask.agv_fromaddress)) return;//闄愬埗涓�琛屼竴娆″彧鑳藉嚭涓�涓换鍔�
-                        var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("S01001") && (x.tray_status == TrayStateEnum.EmptyTray.ToString() || x.location_state == LocationStateEnum.Empty.ToString()) && x.enable).ToList();
+                        //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("S01001") && (x.tray_status == TrayStateEnum.EmptyTray.ToString() || x.location_state == LocationStateEnum.Empty.ToString()) && x.enable).ToList();
+                        var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("S01001") && x.enable).ToList();
                         foreach (var EmptyStation in EmptyStations)
                         {
                             if (agvtaskService.Find(x => x.agv_toaddress == EmptyStation.stationCode).Any()) continue;
                             agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString();
                             agvtask.agv_toaddress = EmptyStation.stationCode;
-                            EmptyStation.location_state = LocationStateEnum.Busy.ToString();
-                            stationinfoRepository.Update(EmptyStation, true);
+                            //EmptyStation.location_state = LocationStateEnum.Busy.ToString();
+                            //stationinfoRepository.Update(EmptyStation, true);
                             agvtaskService.Update(agvtask, true);
                             WriteDBLog.Success("鏇存柊鍑哄簱闃熷垪浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS");
                             return;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Comm/StateEnum/TrayEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Comm/StateEnum/TrayEnum.cs"
new file mode 100644
index 0000000..bc79452
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Comm/StateEnum/TrayEnum.cs"
@@ -0,0 +1,38 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Comm
+{
+    /// <summary>
+    /// 鎵樼洏鐘舵��
+    /// </summary>
+    public enum TrayStateEnum
+    {
+        /// <summary>
+        /// 绌烘墭鐩�
+        /// </summary>
+        EmptyTray,
+        /// <summary>
+        /// 婊℃墭鐩�
+        /// </summary>
+        StrogeTray
+
+    }
+    /// <summary>
+    /// 鎵樼洏绫诲瀷
+    /// </summary>
+    public enum TrayTypeEnum
+    {
+        /// <summary>
+        /// 灏忔墭鐩�
+        /// </summary>
+        SmallTray,
+        /// <summary>
+        /// 澶ф墭鐩�
+        /// </summary>
+        LargeTray,
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs"
new file mode 100644
index 0000000..1f184fa
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs"
@@ -0,0 +1,95 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Comm;
+using WIDESEA_Comm.LogInfo;
+using WIDESEA_Common;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Entity.DomainModels;
+using WIDESEA_WCS.JobsPart.Common;
+using WIDESEA_WMS.IRepositories;
+using WIDESEA_WMS.Repositories;
+using static System.Collections.Specialized.BitVector32;
+
+namespace WIDESEA_WMS.Common
+{
+    public partial class AGVServer
+    {
+        /// <summary>
+        /// 鏇存柊鍙栫┖鎵橀槦鍒椾换鍔�
+        /// </summary>
+        public static void UpdateEmptyPalletTask()
+        {
+            string tasknum = "";
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+
+                #region 鍙犵洏鍖烘弧5涓叆搴�
+                var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.enable).ToList();
+                var EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 5).FirstOrDefault();
+                if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD);
+                #endregion
+                var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault();
+                if (agv_task != null)
+                {
+                    tasknum = agv_task.agv_tasknum;
+                    #region MyRegion
+                    //var task = agvtaskRepository.Find(x => (x.agv_toaddress.Contains("W") || x.agv_toaddress.Contains("X")) && x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && x.agv_Traytype == agv_task.agv_Traytype).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault();
+                    //if (task != null)
+                    //{
+                    //    task.agv_fromaddress = station.stationCode;
+                    //    task.StarQuantity = 0;
+                    //    task.agv_taskstate = "Create";
+                    //    if (station.stationCode.Contains("S0100100"))
+                    //        task.agv_grade = 3;
+                    //    agvtaskService.Update(task, true);
+                    //    station.location_state = LocationStateEnum.Busy.ToString();
+                    //    stationinfoRepository.Update(station, true);
+                    //    WriteDBLog.Success("鏇存柊琛ョ┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿task.agv_tasknum}锛屾墭鐩樹俊鍙�:{PalletSignal},璐х墿淇″彿:{MaterialSignal}", "WMS");
+                    //    return;
+                    //}
+                    #endregion
+                    dt_stationinfo EmptyStation = null;
+                    #region 妫�娴嬩笂鏂欑殑绌烘墭鍙犵洏
+                    if (agv_task.agv_fromaddress.Contains("S"))
+                    {
+                        //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList();
+                        EmptyStation = EmptyStations.Where(x => x.tray_type == agv_task.agv_Traytype && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault();
+                        if (EmptyStation == null)
+                            EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault();
+                        if (EmptyStation == null)
+                        {
+                            EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault();
+                            if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD);
+                        }
+                    }
+                    #endregion
+                    else
+                    {
+                        EmptyStation = GetStation.EmptyPalletStation(agv_task.agv_Traytype == "SmallTray" ? "11" : "10");
+                    }
+
+                    if (EmptyStation != null)
+                    {
+                        agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString();
+                        agv_task.EndQuantity = EmptyStation.quantity;
+                        agv_task.agv_toaddress = EmptyStation.stationCode;
+                        agvtaskRepository.Update(agv_task, true);
+                        EmptyStation.location_state = LocationStateEnum.Busy.ToString();
+                        stationinfoRepository.Update(EmptyStation, true);
+                        WriteDBLog.Success("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "WMS");
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", "閿欒淇℃伅锛�", $"{tasknum}锛涢敊璇俊鎭細{ex.Message}");
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs"
new file mode 100644
index 0000000..4d45e09
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs"
@@ -0,0 +1,204 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Comm;
+using WIDESEA_Comm.LogInfo;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Entity.DomainModels;
+using WIDESEA_WMS.IRepositories;
+using WIDESEA_WMS.Repositories;
+using static System.Collections.Specialized.BitVector32;
+
+namespace WIDESEA_WCS.JobsPart.Common
+{
+    public class GetStation
+    {
+        /// <summary>
+        /// 褰撳墠搴撲綅鍚屼竴琛屾槸鍚﹀瓨鍦ㄥ叆搴撳崰鐢�
+        /// true锛氭槸 false锛氬惁
+        /// </summary>
+        /// <param name="StationCode"></param>
+        /// <returns></returns>
+        public static bool InBusyStation(string StationCode)
+        {
+            bool OK = false;
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+                var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault();
+                OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.location_state == LocationStateEnum.InBusy.ToString()).Any();
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return OK;
+        }
+        /// <summary>
+        /// 褰撳墠搴撲綅鍚屼竴琛屾槸鍚﹀瓨鍦ㄥ嚭搴撳崰鐢�
+        /// true锛氭槸 false锛氬惁
+        /// </summary>
+        /// <param name="StationCode"></param>
+        /// <returns></returns>
+        public static bool OutBusyStation(string StationCode)
+        {
+            bool OK = false;
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+                var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault();
+                OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.location_state == LocationStateEnum.OutBusy.ToString()).Any();
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return OK;
+        }
+        /// <summary>
+        /// 褰撳墠搴撲綅澶栬竟鐨勮揣浣嶆槸鍚﹂兘涓虹┖
+        /// true锛氬惁 false锛氭槸
+        /// </summary>
+        /// <param name="StationCode"></param>
+        /// <returns></returns>
+        public static bool QueueStation(string StationCode)
+        {
+            bool OK = false;
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+                var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault();
+                OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any();
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return OK;
+        }
+        /// <summary>
+        /// 鎵惧彲鍏ュ簱绌烘墭浣�
+        /// </summary>
+        public static void EmptyStation()
+        {
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+                Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context);
+                var Stations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity == 5 && x.enable).ToList();
+                foreach (var Station in Stations)
+                {
+                    var area = Station.tray_type == "SmallTray" ? "11" : "10";
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+        }
+
+        public static dt_stationinfo Station(dt_stationinfo EmptyStation, Idt_stationinfoRepository stationinfoRepository)
+        {
+            dt_stationinfo stationinfo = null;
+            try
+            {
+                if (stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state.Contains("Busy")).Any()) return stationinfo;
+
+
+                stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.quantity > 0 && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
+                if (stationinfo != null)
+                {
+                    if (stationinfo.quantity < 5) return stationinfo;
+                    else
+                        stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault();
+                }
+                else
+                {
+                    stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault();
+                }
+                //if (stationinfo == null)
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return stationinfo;
+        }
+        /// <summary>
+        /// 绌烘墭鍙叆搴撹揣浣�
+        /// </summary>
+        /// <param name="area"></param>
+        /// <returns></returns>
+        public static dt_stationinfo EmptyPalletStation(string area)
+        {
+            dt_stationinfo stationinfo = null;
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context);
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+
+                #region 鏌ユ壘绌烘墭鐩樺簱鍖�
+                //if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any() && area != "10")
+                if (stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any())
+                {
+                    var EmptyStation = stationinfoRepository.Find(x => x.stationCode == "C01005002" && x.location_state == LocationStateEnum.Empty.ToString()).FirstOrDefault();
+                    if (EmptyStation != null)
+                    {
+                        if (!stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state != LocationStateEnum.Empty.ToString()).Any())
+                            return EmptyStation;
+                    }
+                    EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002" && x.location_state == "Stroge" && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault();
+
+
+                    if (EmptyStation != null) stationinfo = Station(EmptyStation, stationinfoRepository);
+                    if (stationinfo != null) return stationinfo;
+
+                    EmptyStation = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
+
+                    if (EmptyStation.quantity == 5)
+                    {
+                        EmptyStation = stationinfoRepository.Find(x => x.stationCode == "C01004002" && x.location_state == LocationStateEnum.Empty.ToString()).FirstOrDefault();
+                        if (EmptyStation != null)
+                        {
+                            if (!stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state != LocationStateEnum.Empty.ToString()).Any())
+                                return EmptyStation;
+                        }
+
+                        EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" && x.location_state == "Stroge" && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault();
+                        if (EmptyStation != null) stationinfo = Station(EmptyStation, stationinfoRepository);
+                    }
+
+                }
+                else
+                {
+                    if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any()) return stationinfo;
+                    stationinfo = stationinfoRepository.Find(x => x.area == area && x.quantity > 0 && x.enable).OrderBy(x => x.column).FirstOrDefault();
+                    if (stationinfo != null)
+                        if (stationinfo.quantity < 5) return stationinfo;
+                    stationinfo = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
+
+                }
+                #endregion
+
+                #region 鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪浠诲姟
+                if (stationinfo != null)
+                    if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; 
+                #endregion
+
+            }
+            catch (Exception ex)
+            {
+                throw;
+            }
+            return stationinfo;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs"
new file mode 100644
index 0000000..f8a976b
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs"
@@ -0,0 +1,90 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Comm.LogInfo;
+using WIDESEA_Comm.TaskNo;
+using WIDESEA_Comm;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Entity.DomainModels;
+using WIDESEA_WMS.IRepositories;
+using WIDESEA_WMS.Repositories;
+
+namespace WIDESEA_WCS.JobsPart.Common
+{
+    public class EmptyTray
+    {
+        /// <summary>
+        /// 绌烘墭鍙犵洏鍏ュ簱
+        /// </summary>
+        public static void EmptyTrayIn()
+        {
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+                var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 5 && x.enable).ToList();
+                foreach (var EmptyStation in EmptyStations)
+                {
+                    CreateEmptyTrayIn(stationinfoRepository, EmptyStation);
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteDBLog.Success("鍒涘缓鍙犵洏浣嶇┖鎵樺叆搴撲换鍔�", $"閿欒淇℃伅锛歿ex.Message}", "PCS");
+            }
+        }
+        /// <summary>
+        /// 鍒涘缓绌烘墭鍙犵洏鍏ュ簱浠诲姟
+        /// </summary>
+        /// <param name="stationinfoRepository"></param>
+        /// <param name="EmptyStation"></param>
+        public static void CreateEmptyTrayIn(Idt_stationinfoRepository stationinfoRepository, dt_stationinfo EmptyStation)
+        {
+            VOLContext Context = new VOLContext();
+            Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
+            try
+            {
+                if (agvtaskRepository.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any()) return;
+                var area = EmptyStation.tray_type == "SmallTray" ? "11" : "10";
+                var toEmptyStation = GetStation.EmptyPalletStation(area);
+                if (toEmptyStation != null)
+                {
+                    #region 鍚屼竴涓┖鎵樹綅鍙兘鍚屾椂鐢熸垚涓�涓┖鎵樹换鍔�
+                    if (agvtaskRepository.Find(x => x.agv_fromaddress == toEmptyStation.stationCode || x.agv_toaddress == toEmptyStation.stationCode).Any()) return;
+                    #endregion
+
+                    dt_agvtask agvtask = new dt_agvtask()
+                    {
+                        agv_fromaddress = EmptyStation.stationCode,
+                        agv_id = Guid.NewGuid(),
+                        agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                        agv_grade = 3,
+                        agv_createtime = DateTime.Now,
+                        agv_taskstate = "Create",
+                        //agv_materielid = station.stationType,
+                        agv_qty = EmptyStation.quantity - toEmptyStation.quantity,
+                        StarQuantity = toEmptyStation.quantity,
+                        EndQuantity = toEmptyStation.quantity,
+                        agv_tasktype = "TaskType_EmptyPallet",
+                        agv_toaddress = toEmptyStation.stationCode,
+                        agv_userid = "绯荤粺",
+                        agv_TrayStatus = "EmptyTray",//station.tray_status,
+                        agv_Traytype = EmptyStation.tray_type,
+                    };
+                    agvtaskRepository.Add(agvtask, true);
+                    EmptyStation.location_state = LocationStateEnum.Busy.ToString();
+                    stationinfoRepository.Update(EmptyStation, true);
+                    toEmptyStation.location_state = LocationStateEnum.Busy.ToString();
+                    stationinfoRepository.Update(toEmptyStation, true);
+                    WriteDBLog.Success("鍒涘缓鍙犵洏浣嶇┖鎵樺叆搴撲换鍔�", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS");
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteDBLog.Error("鍒涘缓鍙犵洏浣嶇┖鎵樺叆搴撲换鍔�", $"閿欒淇℃伅锛歿ex.Message}", "PCS");
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/Taskinfo/Partial/dt_agvtaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/Taskinfo/Partial/dt_agvtaskService.cs"
index fc7bb72..799c98a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/Taskinfo/Partial/dt_agvtaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/Taskinfo/Partial/dt_agvtaskService.cs"
@@ -27,6 +27,9 @@
 using StackExchange.Redis;
 using WIDESEA_Comm;
 using WIDESEA_Entity.DomainModels.Mes;
+using WIDESEA_WMS.Common;
+using System.Reflection.Emit;
+using System.Threading.Tasks;
 
 namespace WIDESEA_WMS.Services
 {
@@ -47,7 +50,62 @@
             //澶氱鎴蜂細鐢ㄥ埌杩檌nit浠g爜锛屽叾浠栨儏鍐靛彲浠ヤ笉鐢�
             //base.Init(dbRepository);
         }
-
+        public override WebResponseContent Del(object[] keys, bool delList = true)
+        {
+            #region 鎵归噺淇敼璐т綅鐘舵��
+            //VOLContext context = new VOLContext();
+            //Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
+            //var fromaddress = repository.Find(x => keys.Contains(x.agv_id)).Select(x => x.agv_fromaddress).ToList();
+            //var stations = stationinfoRepository.Find(x => fromaddress.Contains(x.stationCode)).ToList();
+            //foreach (var station in stations)
+            //{
+            //    station.location_state = LocationStateEnum.Stroge.ToString();
+            //    //station.tray_type= TrayTypeEnum.SmallTray.ToString();
+            //    //station.tray_status= TrayStateEnum.StrogeTray.ToString();
+            //}
+            //stationinfoRepository.UpdateRange(stations, x => new { x.location_state }, true); 
+            #endregion
+            VOLContext volContext = new VOLContext();
+            Idt_agvtask_htyRepository agvtask_HtyRepository=new dt_agvtask_htyRepository(volContext);
+            var agvtasks = repository.Find(x => keys.Contains(x.agv_id)).ToList();
+            List<dt_agvtask_hty> dt_Agvtask_Hties = new List<dt_agvtask_hty>();
+            foreach (var task in agvtasks)
+            {
+                dt_agvtask_hty agvtask_Hty = new dt_agvtask_hty()
+                {
+                    hty_pkid = Guid.NewGuid(),
+                    agv_id = task.agv_id,
+                    agv_tasknum = task.agv_tasknum,
+                    agv_materielid = task.agv_materielid,
+                    agv_qty = task.agv_qty,
+                    agv_createtime = task.agv_createtime,
+                    agv_realesstime = task.agv_realesstime,
+                    agv_executingBeginTime = task.agv_executingBeginTime,
+                    agv_executingEndTime = task.agv_executingEndTime,
+                    agv_completeBeginTime = task.agv_completeBeginTime,
+                    agv_finishedtime = task.agv_finishedtime,
+                    agv_taskstate = task.agv_taskstate,
+                    agv_tasktype = task.agv_tasktype,
+                    agv_fromaddress = task.agv_fromaddress,
+                    agv_toaddress = task.agv_toaddress,
+                    agv_operatetype = "Del",
+                    agv_compeletor = UserContext.Current.UserName,
+                    agv_completedate = DateTime.Now,
+                    agv_grade = task.agv_grade,
+                    agv_userid = task.agv_userid,
+                    agv_Traytype = task.agv_Traytype,
+                    agv_TrayStatus = task.agv_TrayStatus,
+                    agv_worktype = task.agv_worktype,
+                    agv_remark = task.agv_remark,
+                    bindSN = task.bindSN,
+                    jobID = task.jobID,
+                    agv_materbarcode = task.agv_materbarcode,
+                };
+                dt_Agvtask_Hties.Add(agvtask_Hty);
+            }
+            agvtask_HtyRepository.AddRange(dt_Agvtask_Hties,true);
+            return base.Del(keys, delList);
+        }
         public WebResponseContent addNgTask(MesRequestTemp requestTemp)
         {
             WebResponseContent content = new WebResponseContent();
@@ -102,6 +160,7 @@
             var agv_id = saveModel.MainData["agv_id"].ToString();
             var task = _repository.Find(x => x.agv_id.ToString() == agv_id).FirstOrDefault();
             if (task.agv_taskstate != AGVTaskStateEnum.Queue.ToString()) return content.Error("褰撳墠浠诲姟涓嶅彲鏇存敼锛�");
+            WriteDBLog.Success($"鎵嬪姩淇敼浠诲姟", new { 鏁版嵁 = saveModel }, "WMS", UserContext.Current.UserName);
             return base.Update(saveModel);
         }
         #region 娣诲姞NG浠诲姟
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs"
index 371f541..9d6b117 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs"
@@ -12,6 +12,7 @@
         [Invoke(Begin = "2024-01-01 00:00", Interval = 1000 * 5, /*IsEnabled = true,*/ SkipWhileExecuting = true)]
         public void TaskTime()
         {
+            AGVServer.UpdateEmptyPalletTask();
             AGVServer.SendAgvTask();
         }
     }

--
Gitblit v1.9.3