From 429bb4abbaea6fd6be33dcf62735d4ada5070b63 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期日, 19 五月 2024 17:51:03 +0800
Subject: [PATCH] 优化逻辑提高AGV任务效率

---
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs                |   60 ++++
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs                  |    4 
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/新文件夹/GetLocation.cs              |    6 
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs                      |   71 ++--
 代码管理/WMS/WMS_Server/WIDESEA_WebApi/Controllers/JobTask.cs                        |    2 
 代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs                                 |   41 ++
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyTrayIn.cs                 |   28 +
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/EmptyPalletTask.cs                |  100 ++++---
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ReplaceTray.cs                   |    2 
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs |   47 ++
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs                        |   46 +++
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/RestockHCJ.cs                    |    1 
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs                     |    4 
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs    |   24 +
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/GetStation/EmptyPalletStation.cs          |  104 ++++++
 代码管理/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json                              |    3 
 代码管理/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json                              |    4 
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs                  |  108 +++++++
 代码管理/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs                  |    6 
 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/EmptyTrayTask.cs                 |   15 
 代码管理/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs                          |  116 ++++++++
 代码管理/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs                         |   17 
 22 files changed, 665 insertions(+), 144 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs"
index 2e3dab7..e2c7715 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs"
@@ -31,6 +31,10 @@
         /// <summary>
         /// 寮傚父
         /// </summary>
-        Abnormal
+        Abnormal,
+        /// <summary>
+        /// 妗佹灦涓嬫枡
+        /// </summary>
+        Load
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs"
index ed61b2b..c1ad6b1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs"
@@ -12,6 +12,7 @@
 using WIDESEA_Comm.LogInfo;
 using WIDESEA_Comm.TaskNo;
 using WIDESEA_Core.EFDbContext;
+using WIDESEA_Core.Extensions;
 using WIDESEA_Core.FreeDB;
 using WIDESEA_Entity.DomainModels;
 using WIDESEA_WCS.IRepositories;
@@ -544,7 +545,7 @@
                                     station.heatNumber = Mes_Work.heatID;
                                     station.tray_status = "StrogeTray";
                                 }
-
+                                station.remark = "";
                                 var count = stationinfoRepository.Update(station, true);
                                 if (count < 1)
                                     throw new Exception($"涓嬫枡浣嶄俊鎭洿鏂板け璐ワ紒涓嬫枡浣嶇紪鍙凤細{station.stationCode}");
@@ -580,8 +581,6 @@
                         var Request = (bool)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Request_Load").First(), client);
                         if (!Request) continue;
 
-                        //var Area = client.ReadByOrder<Int16>("W_AreaNr", name);//璇诲彇璐т綅鍙蜂俊鎭�
-                        //if (Area != 0) continue;
 
                         #region 璇诲彇妗佹灦淇℃伅
                         var Wheel_Type = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Wheel_Type").First(), client);//杞﹁疆绫诲瀷
@@ -599,6 +598,7 @@
                             client.WriteByOrder("W_Enabl_Load", false, name);//淇″彿涓篺alse妗佹灦鍋滄杩涘叆
                             //WriteDBLog.Error(name, $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN锛歿Wheel_id}\n\n鏈煡璇㈠埌宸ュ崟淇℃伅", "PCS");
                             WriteLog.Write_Log(name + "鐢宠鏀炬枡寮傚父", Wheel_id, "鏌ヨ鏈哄姞宸ュ伐鍗�", $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN鍙凤細{Wheel_id}鏈煡璇㈠埌宸ュ崟淇℃伅\n鍐欏叆妗佹灦淇℃伅锛歕n鏄惁鍏佽涓嬫枡锛歿false}");
+                            continue;
                         }
 
 
@@ -615,6 +615,8 @@
                         #endregion
 
 
+
+
                         var wheel = Pipeline.QueryMateriel(Work.drawingNo);
                         var wheel1 = Pipeline.QueryMateriel1(Work.drawingNo);
                         if (wheel == null && wheel1 == null)
@@ -626,6 +628,17 @@
                             #endregion
                             continue;
                         }
+
+                        #region 鎹㈠浘鍙�,涓嬫枡鍙e叾浠栧浘鍙锋墭鐩樺叏閮ㄥ叆搴�
+                        var stations = Stations.Where(x => x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).ToList();
+                        foreach (var station in stations)
+                        {
+                            if (station.stationCode == NGStation || name == "3鍗曞厓涓嬫枡鍖�")
+                                agvtask(stationinfoRepository, station, Work, "TaskType_OutsourceInbound");
+                            else
+                                agvtask(stationinfoRepository, station, Work, "TaskType_Inbound");
+                        }
+                        #endregion
 
                         var PartStatus = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PartStatus").First(), client);//1:ok;2:nok
 
@@ -669,12 +682,9 @@
                             if (Stationinfo == null)
                             {
                                 #region 瑙﹀彂NG浠诲姟
-                                var NG = Stations.Where(x => x.enable && x.stationCode == NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).FirstOrDefault();
+                                var NG = Stations.Where(x => x.enable && x.stationCode == NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.Number != Work.workOrder && x.quantity > 0).FirstOrDefault();
                                 if (NG != null)
-                                {
-                                    if (NG.stationType != Work.drawingNo || NG.Number != Work.workOrder)
-                                        agvtask(stationinfoRepository, NG, Work, "TaskType_OutsourceInbound");
-                                }
+                                    agvtask(stationinfoRepository, NG, Work, "TaskType_OutsourceInbound");
                                 #endregion
 
                                 Stationinfo = Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 0).FirstOrDefault();
@@ -685,9 +695,9 @@
                             {
 
                                 #region 鎹㈢被鍨嬬洿鎺ュ叆搴�
-                                var stationinfo1 = Stations.Where(x => x.enable && x.stationCode != NGStation && x.stationCode != Stationinfo.stationCode && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).FirstOrDefault();
-                                if (stationinfo1 != null)
-                                    agvtask(stationinfoRepository, stationinfo1, Work, name == "3鍗曞厓涓嬫枡鍖�" ? "TaskType_OutsourceInbound" : "TaskType_Inbound");
+                                //var stationinfo1 = Stations.Where(x => x.enable && x.stationCode != NGStation && x.stationCode != Stationinfo.stationCode && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).FirstOrDefault();
+                                //if (stationinfo1 != null)
+                                //    agvtask(stationinfoRepository, stationinfo1, Work, name == "3鍗曞厓涓嬫枡鍖�" ? "TaskType_OutsourceInbound" : "TaskType_Inbound");
                                 #endregion
 
                                 #region 鎵樼洏杞﹁疆鍫嗗灈绗洓涓椂涓嬪彂鍙﹀涓�涓倝鍙风殑鍏ュ簱浠诲姟
@@ -769,6 +779,8 @@
                                     client.WriteByOrder("W_IndexNr", (Int16)(Stationinfo.quantity + 1), name);//鎵樼洏涓婄殑绗嚑涓溅杞�
                                     client.WriteByOrder("W_Storage_Type", (Int16)1, name);//鎵樼洏绫诲瀷1-妯斁;2-绔栨斁(鏆傛椂鍙湁妯斁鎵樼洏)
                                     client.WriteByOrder("W_Enabl_Load", true, name);//鏄惁鍏佽
+                                    Stationinfo.remark = "妗佹灦涓嬫枡";
+                                    stationinfoRepository.Update(Stationinfo, true);
                                     #region 鏃ュ織璁板綍
                                     //WriteDBLog.Success(name + "鍏佽鏀炬枡", $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN锛歿Wheel_id}\n杞瀷ID锛歿Wheel_Type}\n杞﹁疆鐘舵�侊細OK" +$"\n璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}" +
                                     //    $"\n\n鍐欏叆妗佹灦淇℃伅锛歕n涓嬫枡浣嶅彿锛歿area}\n绗嚑涓溅杞細{(Stationinfo.quantity + 1)}\n鎵樼洏绫诲瀷锛�1\nW_Enabl_Load锛歵rue", "PCS");
@@ -785,7 +797,7 @@
                                 #region 娌℃墭鐩樺彲鐢�,瑙﹀彂鍏ュ簱浠诲姟
                                 if (!Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state != LocationStateEnum.Stroge.ToString()).Any())
                                 {
-                                    var station = Stations.Where(x => x.enable && x.stationCode != NGStation).OrderBy(x => x.lastUpdateTime).FirstOrDefault();
+                                    var station = Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state == LocationStateEnum.Stroge.ToString()).OrderBy(x => x.lastUpdateTime).FirstOrDefault();
                                     agvtask(stationinfoRepository, station, Work, name == "3鍗曞厓涓嬫枡鍖�" ? "TaskType_OutsourceInbound" : "TaskType_Inbound");
                                 }
                                 #endregion
@@ -827,6 +839,7 @@
                                     Stationinfo.tray_type = Stationinfo.tray_type == "SmallTray" ? "SmallTray/LargeTray" : "LargeTray/SmallTray";
                                     Stationinfo.remark = "鎵樼洏绫诲瀷涓嶄竴鑷撮渶鏇存崲鎵樼洏";
                                     stationinfoRepository.Update(Stationinfo, true);
+                                    continue;
                                 }
                                 #endregion
                                 var Pipelinedetails = plcRepository.Find(x => x.plcdetail_iotype == Pipelineplc.plcinfo_iotyep && x.plcdetail_number == Stationinfo.stationCode).ToList();
@@ -880,6 +893,8 @@
                                     client.WriteByOrder("W_IndexNr", (Int16)(Stationinfo.quantity + 1), name);//鎵樼洏涓婄殑绗嚑涓溅杞�
                                     client.WriteByOrder("W_Storage_Type", (Int16)1, name);//鎵樼洏绫诲瀷1-妯斁;2-绔栨斁(鏆傛椂鍙湁妯斁鎵樼洏)
                                     client.WriteByOrder("W_Enabl_Load", true, name);//鏄惁鍏佽
+                                    Stationinfo.remark = "妗佹灦涓嬫枡";
+                                    stationinfoRepository.Update(Stationinfo, true);
                                     #region 鏃ュ織璁板綍
                                     //WriteDBLog.Success(name + "鍏佽鏀炬枡", $"璇诲彇妗佹灦淇℃伅锛歕n杞﹁疆SN锛歿Wheel_id}\n杞瀷ID锛歿Wheel_Type}\n杞﹁疆鐘舵�侊細NG" +$"\n璇诲彇鎵樼洏鍏夌數淇″彿锛歿PalletSignal}" +
                                     //    $"\n\n鍐欏叆妗佹灦淇℃伅锛歕n涓嬫枡浣嶅彿锛歿area}\n绗嚑涓溅杞細{(Stationinfo.quantity + 1)}\n鎵樼洏绫诲瀷锛�1\nW_Enabl_Load锛歵rue", "PCS");
@@ -914,6 +929,8 @@
         {
             VOLContext Context = new VOLContext();
             Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
+            IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(Context);
+            Work = workinfoRepository.Find(x => x.workOrder == stationinfo.Number && x.processCode == "17").FirstOrDefault();
             var task = agvtaskRepository.Find(x => x.agv_fromaddress == stationinfo.stationCode).FirstOrDefault();
             if (task != null) return;
             if (!string.IsNullOrEmpty(Work.area))
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 c67fabd..4870fd0 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"
@@ -35,16 +35,19 @@
                 Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context);
                 List<string> strings = new List<string>() { };
                 var stations = stationinfoRepository.Find(x => x.stationCode.Contains("X") || x.stationCode.Contains("W01001004") || x.stationCode.Contains("W01001005")).ToList();
-                stations = stations.Where(x => x.location_state == "Empty" && x.enable).ToList();
+                stations = stations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable).ToList();
                 foreach (var station in stations)
                 {
                     if (agvtaskRepository.Find(x => x.agv_toaddress == station.stationCode).Any())
                         continue;
                     var PalletSignal = Pipeline_client.ReadByOrder<Int16>("R_PalletSignal", station.stationCode);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃�
                     var MaterialSignal = Pipeline_client.ReadByOrder<Int16>("R_MaterialSignal", station.stationCode);//璇诲彇璐х墿淇″彿:1:鏈�,2鏃�
+
                     if (PalletSignal == 2 && MaterialSignal == 2)
                     {
-                        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 (station.remark == TrayTypeEnum.SmallTray.ToString() || station.remark == TrayTypeEnum.LargeTray.ToString()) station.tray_type = station.remark;
+
+                        var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress) && x.agv_Traytype == station.tray_type).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault();
                         if (agv_task != null)
                         {
                             agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString();
@@ -64,12 +67,12 @@
                                 agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
                                 agv_grade = station.stationCode.Contains("W0100100") ? 3 : 2,
                                 agv_createtime = DateTime.Now,
-                                agv_taskstate = "Queue",
+                                agv_taskstate = AGVTaskStateEnum.Queue.ToString(),
                                 agv_qty = 1,
-                                agv_tasktype = "TaskType_EmptyPallet",
+                                agv_tasktype = AGVTaskTypeEnum.TaskType_EmptyPallet.ToString(),
                                 agv_toaddress = station.stationCode,
                                 agv_userid = "绯荤粺",
-                                agv_TrayStatus = "EmptyTray",// station.tray_status,
+                                agv_TrayStatus = TrayStateEnum.EmptyTray.ToString(),// station.tray_status,
                                 agv_Traytype = station.tray_type
                             };
                             station.location_state = LocationStateEnum.Busy.ToString();
@@ -77,7 +80,7 @@
                             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/GetStation/EmptyPalletStation.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs"
index e1bb7ba..182dbce 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/GetStation/EmptyPalletStation.cs"
@@ -76,7 +76,15 @@
                 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();
+                if (station.area == "10" || station.area == "11")
+                {
+                    OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any();
+                }
+                else
+                {
+                    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)
             {
@@ -124,25 +132,40 @@
                 var area = task.agv_Traytype == "SmallTray" ? "11" : "10";
 
                 #region 浼樺厛鍑�3搴撳尯鍐呯┖鎵樼洏
+                //if (area == "11")
+                //{
+                //    EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault();
+                //    if (EmptyStation == null)
+                //        EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002"/* && x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault();
+                //    if (EmptyStation != null)
+                //        EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == EmptyStation.area && x.line == EmptyStation.line /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
+                //    if (EmptyStation != null)//绌烘墭璐т綅涓嶄负绌哄垽鏂槸鍚﹀瓨鍦ㄥ叾浠栦换鍔�
+                //        if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null;
+                //    //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null;
+                //}
+                #endregion
+
+                #region 鏌ユ壘AB搴撳尯鍙嚭搴撶┖鎵樿揣浣�
                 if (area == "11")
                 {
-                    EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault();
-                    if (EmptyStation == null)
-                        EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002"/* && x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault();
-                    if (EmptyStation != null)
-                        EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == EmptyStation.area && x.line == EmptyStation.line /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderByDescending(x => x.column).FirstOrDefault();
-                    if (EmptyStation != null)//绌烘墭璐т綅涓嶄负绌哄垽鏂槸鍚﹀瓨鍦ㄥ叾浠栦换鍔�
-                        if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null;
-                    //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null;
+                    //EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault();
+                    EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderBy(x => x.area).ThenBy(x => x.line).ThenByDescending(x => x.column).FirstOrDefault();
+                    if (EmptyStation != null)//蹇呴』鍑哄畬AB搴撶┖鎵樻墠鑳藉嚭绌烘墭鍖�
+                        if (QueueStation(EmptyStation.stationCode) || stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) return;// EmptyStation = null;
                 }
                 #endregion
 
                 #region 鏌ユ壘绌烘墭搴撳尯
                 if (EmptyStation == null)
-                    EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == area /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderBy(x => x.column).FirstOrDefault();
+                    EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == area && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault();
+                #endregion
+
+                #region 绌烘墭璐т綅涓嶄负绌哄垽鏂槸鍚﹀瓨鍦ㄥ叾浠栦换鍔�
                 if (EmptyStation != null)
-                    if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null;
-                //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null;
+                    if (QueueStation(EmptyStation.stationCode) || stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null;
+                #endregion
+
+                #region 鏇存柊琛ョ┖鎵橀槦鍒椾换鍔�
                 if (EmptyStation != null)
                 {
                     var PalletSignal = Pipeline_client.ReadByOrder<Int16>("R_PalletSignal", task.agv_toaddress);//璇诲彇鎵樼洏淇″彿:1:鏈�,2鏃�
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs"
index 02427d5..ca16830 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs"
@@ -34,7 +34,7 @@
                 Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context);
                 IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
 
-                var Mes_Works = workinfoRepository.Find(x => x.processCode == "28").OrderBy(x => x.CreateTime).ToList();
+                var Mes_Works = workinfoRepository.Find(x => x.processCode == "28").OrderByDescending(x => x.CreateTime).ToList();
                 foreach (var Mes_Work in Mes_Works)
                 {
                     var inventory = inventoryRepository.Find(x => x.SN == Mes_Work.SN).FirstOrDefault();
@@ -53,6 +53,8 @@
                             stationinfo = stationinfoRepository.Find(x => x.line == Station.line && x.area == Station.area && x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.column).FirstOrDefault();
                             if (stationinfo != null)
                             {
+                                if (agvtaskRepository.Find(x => x.agv_fromaddress == stationinfo.stationCode).Any()) continue;
+
                                 if (stationinfoRepository.Find(x => x.line == stationinfo.line && x.area == stationinfo.area && x.column > stationinfo.column && !x.enable).Any())
                                     continue;
                                 if (string.IsNullOrEmpty(stationinfo.bindSN))
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 393c991..444ca4f 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"
@@ -49,7 +49,7 @@
         #endregion
 
         /// <summary>
-        /// 鍒涘缓鏇存崲鎵樼洏浠诲姟
+        /// 鍒涘缓鏇存崲鎵樼洏浠诲姟,闇�淇敼
         /// </summary>
         public static void ReplaceTrayTask()
         {
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 12e45aa..385af08 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"
@@ -172,7 +172,6 @@
                         else
                             GetStation.EmptyPalletStation(agvtask);
                     }
-                    WriteDBLog.Success("鏇存柊绌烘墭闃熷垪浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS");
                 }
                 else if (agvtask.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString() || agvtask.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString())//澶栧崗搴撳叆搴�/AB搴撳叆搴�
                 {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs"
index 7c0a658..9722c24 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/\346\226\260\346\226\207\344\273\266\345\244\271/GetLocation.cs"
@@ -39,7 +39,7 @@
                     dt_stationinfo TargetLocation = null;
 
                     #region 瀵绘壘宸插垎閰嶅悓鍥惧彿鍏ュ簱浠诲姟搴撲綅
-                    TargetLocation = area1 == "4" ? stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.area == area1).FirstOrDefault() : stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "2" || x.area == "3")).FirstOrDefault();
+                    TargetLocation = area1 == "4" ? stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.enable && x.area == area1).FirstOrDefault() : stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "2" || x.area == "3") && x.enable).FirstOrDefault();
                     if (TargetLocation != null)
                     {
                         TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();
@@ -132,11 +132,11 @@
 
                     #region 鏈壘鍒板簱瀛樻垨褰撳墠搴撳瓨琛屽凡婊�,瀵绘壘鏂扮殑涓�琛�
                     var area = GetArea(mesinfo.quantity, agvtask.agv_Traytype);
-                    TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
+                    TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
                     if (TargetLocation == null && area != "4")
                     {
                         area = area == "2" ? "3" : "2";
-                        TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
+                        TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
                     }
 
                     #region 鏌ョ湅褰撳墠绌鸿揣浣嶅悗鏄惁瀛樺湪鏈夋枡
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json"
index 1ecb410..1d06fa1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json"
@@ -16,8 +16,8 @@
   "Connection": {
     "DBType": "MsSql", //MySql/MsSql/PgSql  //鏁版嵁搴撶被鍨嬶紝濡傛灉浣跨敤鐨勬槸sqlserver姝ゅ搴旇缃负MsSql
     //sqlserver杩炴帴瀛楃涓睵@ssw0rd
-    "DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;",
-    //"DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;",
+    //"DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;",
+    "DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;",
 
     //mysql杩炴帴瀛楃涓�(鍗囩骇EFCore3.1鍒版椂宸插皢mysql杩炴帴瀛楃涓蹭慨鏀�,2019-12-20)
     // "DbConnectionString": " Data Source=127.0.0.1;Database=netcoredev;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs"
index a236cdb..9782528 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_Entity/ToAGV/RequestTask.cs"
@@ -65,6 +65,122 @@
         #endregion
     }
     /// <summary>
+    /// 璧风偣浠诲姟涓嬪彂淇℃伅
+    /// </summary>
+    public class RequestFromTask
+    {
+        /// <summary>
+        /// 浣滀笟浠诲姟鍙�
+        /// </summary>
+        public string TASK_NO { get; set; }
+        /// <summary>
+        /// 璧风偣
+        /// </summary>
+        public string FROM_POSITION { get; set; }
+        /// <summary>
+        /// 缁堢偣
+        /// </summary>
+        //public string TO_POSITION { get; set; }
+        /// <summary>
+        /// 浠诲姟绛夌骇
+        /// </summary>
+        public int? Grade { get; set; } = 0;
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        ///<summary>
+        /// 杞繍鎵樼洏鏃讹紝璧风偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1
+        ///</summary>
+        public int StarQuantity { get; set; }
+
+        ///<summary>
+        /// 杞繍鎵樼洏鏃讹紝缁堢偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1
+        ///</summary>
+        public int EndQuantity { get; set; }
+        /// <summary>
+        /// 鎵樼洏绫诲瀷 1灏忔墭鐩橈紝2澶ф墭鐩�
+        /// </summary>
+        public int TrayType { get; set; }
+        /// <summary>
+        /// 浠诲姟绫诲瀷 1杞繍杞﹁疆浠诲姟锛�2杞繍绌烘墭鐩樹换鍔�
+        /// </summary>
+        public int TaskType { get; set; }
+        /// <summary>
+        /// 鐗╂枡淇℃伅
+        /// </summary>
+        public string Material { get; set; }
+        #region 杞﹁疆鏁版嵁
+        public float A { get; set; }
+        public float B { get; set; }
+        public float C { get; set; }
+        public float D { get; set; }
+        public float E { get; set; }
+        public float F { get; set; }
+        public float G { get; set; }
+        public float H { get; set; }
+        #endregion
+    }
+    /// <summary>
+    /// 缁堢偣浠诲姟涓嬪彂淇℃伅
+    /// </summary>
+    public class RequestToaddTask
+    {
+        /// <summary>
+        /// 浣滀笟浠诲姟鍙�
+        /// </summary>
+        public string TASK_NO { get; set; }
+        /// <summary>
+        /// 璧风偣
+        /// </summary>
+        //public string FROM_POSITION { get; set; }
+        /// <summary>
+        /// 缁堢偣
+        /// </summary>
+        public string TO_POSITION { get; set; }
+        /// <summary>
+        /// 浠诲姟绛夌骇
+        /// </summary>
+        public int? Grade { get; set; } = 0;
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        ///<summary>
+        /// 杞繍鎵樼洏鏃讹紝璧风偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1
+        ///</summary>
+        public int StarQuantity { get; set; }
+
+        ///<summary>
+        /// 杞繍鎵樼洏鏃讹紝缁堢偣搴曢儴鍑犱釜鎵樼洏锛屽叆鍫嗗彔瀹屽叏閮ㄨ浆杩愬垯涓�0锛屽鏋滆浆杩愪簲灞備笂鐨勪竴涓垯涓�4锛屼笂闈㈡暟閲忓垯涓�1
+        ///</summary>
+        public int EndQuantity { get; set; }
+        /// <summary>
+        /// 鎵樼洏绫诲瀷 1灏忔墭鐩橈紝2澶ф墭鐩�
+        /// </summary>
+        public int TrayType { get; set; }
+        /// <summary>
+        /// 浠诲姟绫诲瀷 1杞繍杞﹁疆浠诲姟锛�2杞繍绌烘墭鐩樹换鍔�
+        /// </summary>
+        public int TaskType { get; set; }
+        /// <summary>
+        /// 鐗╂枡淇℃伅
+        /// </summary>
+        public string Material { get; set; }
+        #region 杞﹁疆鏁版嵁
+        public float A { get; set; }
+        public float B { get; set; }
+        public float C { get; set; }
+        public float D { get; set; }
+        public float E { get; set; }
+        public float F { get; set; }
+        public float G { get; set; }
+        public float H { get; set; }
+        #endregion
+    }
+    /// <summary>
     /// AGV鍙嶉淇℃伅
     /// </summary>
     public class Respone
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs"
index a5a9f3f..e55620e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/AGVServer.cs"
@@ -25,23 +25,24 @@
         /// </summary>
         public static void SendAgvTask()
         {
-            WriteLog.Write_Log("鑷姩涓嬪彂浠诲姟", "SendAgvTask","");
+            WriteLog.Write_Log("鑷姩涓嬪彂浠诲姟", "SendAgvTask", "");
             Respone respone = new Respone();
             RequestTask requestTask = new RequestTask();
             string postJson = string.Empty;
             string report = string.Empty;
-            try
+
+            VOLContext Context = new VOLContext();
+            Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
+            var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade)
+                    .ThenBy(x => x.agv_createtime).ToList();
+            if (agv_tasks.Count < 1)
+                agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && !string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade)
+                    .ThenBy(x => x.agv_createtime).ToList();
+            if (agv_tasks.Count > 0)
             {
-                VOLContext Context = new VOLContext();
-                Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
-                var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade)
-                        .ThenBy(x => x.agv_createtime).ToList();
-                if (agv_tasks.Count < 1)
-                    agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && !string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade)
-                        .ThenBy(x => x.agv_createtime).ToList();
-                if (agv_tasks.Count > 0)
+                foreach (var agv_task in agv_tasks)
                 {
-                    foreach (var agv_task in agv_tasks)
+                    try
                     {
                         var Materiel = QueryData.QueryMateriel(agv_task.agv_materielid);//鏌ユ壘杞﹁疆鏁版嵁
                         var Materiel1 = QueryData.QueryMateriel1(agv_task.agv_materielid);//鏌ユ壘杞﹁疆鏁版嵁
@@ -75,32 +76,34 @@
                             requestTask.H = Materiel == null ? Materiel1.h : Materiel.h;
                         }
                         postJson = JsonConvert.SerializeObject(requestTask);
-                        report = Request.RequestData(postJson, "http://192.168.12.204:5000/api/TaskCreat/CreatTask");
-                        respone = JsonConvert.DeserializeObject<Respone>(report);
-                        if (respone.Success)
-                        {
-                            agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString();
-                            agv_task.agv_realesstime = DateTime.Now;
-                            agvtaskRepository.Update(agv_task, true);
-                            WriteWMSLog.LogAdd(requestTask.TASK_NO, "鎴愬姛 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
-                        }
-                        else
-                        {
-                            agv_task.agv_remark = respone.Msg;
-                            var task = agvtaskRepository.Find(x => x.agv_tasknum == agv_task.agv_tasknum && x.agv_remark == agv_task.agv_remark).FirstOrDefault();//.Exists
-                            if (task == null)
-                                agvtaskRepository.Update(agv_task, true);
-                            WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
-                        }
+                        //report = Request.RequestData(postJson, AGVAPIAddress.IPAddress_AGVTask);//"http://192.168.12.204:5000/api/TaskCreat/CreatTask"
+                        RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVTask);
+                        //respone = JsonConvert.DeserializeObject<Respone>(report);
+                        //if (respone.Success)
+                        //{
+                        //    agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString();
+                        //    agv_task.agv_realesstime = DateTime.Now;
+                        //    agvtaskRepository.Update(agv_task, true);
+                        //    WriteWMSLog.LogAdd(requestTask.TASK_NO, "鎴愬姛 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
+                        //}
+                        //else
+                        //{
+                        //    agv_task.agv_remark = respone.Msg;
+                        //    var task = agvtaskRepository.Find(x => x.agv_tasknum == agv_task.agv_tasknum && x.agv_remark == agv_task.agv_remark).FirstOrDefault();//.Exists
+                        //    if (task == null)
+                        //        agvtaskRepository.Update(agv_task, true);
+                        //    WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
+                        //}
+                    }
+                    catch (Exception ex)
+                    {
+                        respone.Success = false;
+                        respone.Msg = ex.Message;
+                        WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
                     }
                 }
             }
-            catch (Exception ex)
-            {
-                respone.Success = false;
-                respone.Msg = ex.Message;
-                WriteWMSLog.LogAdd(requestTask.TASK_NO, "澶辫触", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
-            }
+
         }
     }
 }
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"
index 1f184fa..ea0743b 100644
--- "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"
@@ -29,61 +29,75 @@
                 Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
                 Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
 
-                #region 鍙犵洏鍖烘弧5涓叆搴�
+                #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);
+                //EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0&&x.lastUpdateTime.).FirstOrDefault();//鏃堕棿瓒呰繃6灏忔椂鍏ュ簱
                 #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)
+
+                var agv_tasks = 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).ToList();
+                foreach (var agv_task in agv_tasks)
                 {
-                    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"))
+                    try
                     {
-                        //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)
+                        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
+                        #region MyRegion
+                        //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.EmptyPalletStation1(agv_task.agv_Traytype == "SmallTray" ? "11" : "10");
+                        //}
+
+                        #endregion
+
+                        var EmptyStation = EmptyTray.GetEmptyTrayStation(stationinfoRepository, agv_task);
+                        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);
+                            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");
                         }
                     }
-                    #endregion
-                    else
+                    catch (Exception ex)
                     {
-                        EmptyStation = GetStation.EmptyPalletStation(agv_task.agv_Traytype == "SmallTray" ? "11" : "10");
+                        WriteLog.Write_Log("鎶ラ敊鏃ュ織", "鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", "閿欒淇℃伅锛�", $"{tasknum}锛涢敊璇俊鎭細{ex.Message}");
                     }
 
-                    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)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs"
index 671fc19..9d475f9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask.cs"
@@ -164,11 +164,10 @@
         {
             VOLContext context = new VOLContext();
             Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
-            var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress);
-            var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress);
 
             if (task.agv_taskstate == AGVTaskStateEnum.Complete1.ToString())
             {
+            var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress);
                 ////绌烘墭浠诲姟闇�淇敼閫昏緫
                 if (station2.stationCode.Contains("X"))
                     station2.quantity = 0;// task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 0 : task.agv_qty; //task.agv_qty;
@@ -188,6 +187,7 @@
             }
             else if (task.agv_taskstate == AGVTaskStateEnum.Complete.ToString())
             {
+            var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress);
                 #region MyRegion
                 //if (station1.stationCode.Contains("S"))
                 //    station1.quantity = 0;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs"
new file mode 100644
index 0000000..e09a3e4
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/Request.cs"
@@ -0,0 +1,46 @@
+锘縰sing Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Comm.LogInfo;
+using WIDESEA_Common;
+using WIDESEA_Entity.DomainModels;
+using WIDESEA_Entity.ToAGV;
+using WIDESEA_WMS.IRepositories;
+
+namespace WIDESEA_WMS.Common
+{
+    public partial class AGVServer
+    {
+        /// <summary>
+        /// 鍚慉GV璇锋眰
+        /// </summary>
+        public static Respone RequestAGV(Idt_agvtaskRepository agvtaskRepository, dt_agvtask agv_task, string postJson, string IP)
+        {
+            var report = Request.RequestData(postJson, IP);
+            var respone = JsonConvert.DeserializeObject<Respone>(report);
+            if (respone.Success)
+            {
+                if (agv_task.agv_taskstate != AGVTaskStateEnum.Complete.ToString())
+                    agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString();
+                if (agv_task.agv_taskstate == AGVTaskStateEnum.Complete.ToString())
+                    agv_task.agv_completeBeginTime = DateTime.Now;
+                else
+                    agv_task.agv_realesstime = DateTime.Now;
+                agvtaskRepository.Update(agv_task, true);
+                WriteWMSLog.LogAdd(agv_task.agv_tasknum, "鎴愬姛 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
+            }
+            else
+            {
+                if (agv_task.agv_remark != respone.Msg)
+                    agv_task.agv_remark = respone.Msg;
+                agvtaskRepository.Update(agv_task, true);
+                WriteWMSLog.LogAdd(agv_task.agv_tasknum, "澶辫触 ", "AGV", "WMS", postJson, report, "涓嬪彂AGV浠诲姟", "SendAGVTask", respone.Msg);
+            }
+            return respone;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs"
new file mode 100644
index 0000000..f767587
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendFromaddress.cs"
@@ -0,0 +1,60 @@
+锘縰sing Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Comm.LogInfo;
+using WIDESEA_Common;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Entity.ToAGV;
+using WIDESEA_WMS.IRepositories;
+using WIDESEA_WMS.Repositories;
+
+namespace WIDESEA_WMS.Common
+{
+    public partial class AGVServer
+    {
+        /// <summary>
+        /// 涓嬪彂璧风偣浠诲姟
+        /// </summary>
+        public static void SendFromaddress()
+        {
+            try
+            {
+                VOLContext Context = new VOLContext();
+                Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
+                RequestFromTask requestFromTask = new RequestFromTask();
+                var agv_tasks = 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).ToList();
+                foreach (var agv_task in agv_tasks)
+                {
+                    try
+                    {
+                        requestFromTask.TASK_NO = agv_task.agv_tasknum;
+                        requestFromTask.FROM_POSITION = agv_task.agv_fromaddress;
+                        requestFromTask.Material = agv_task.agv_materielid;
+                        requestFromTask.Grade = agv_task.agv_grade;
+                        requestFromTask.Quantity = agv_task.agv_qty;
+                        requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2;
+                        requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1;
+                        #region 缁�/鎷嗙┖鐩樹换鍔¢渶澶勭悊
+                        requestFromTask.StarQuantity = agv_task.StarQuantity;
+                        requestFromTask.EndQuantity = agv_task.EndQuantity;
+                        #endregion
+                        var postJson = JsonConvert.SerializeObject(requestFromTask);
+                        RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVFromaddTask);
+                    }
+                    catch (Exception ex)
+                    {
+
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs"
new file mode 100644
index 0000000..68ad08c
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/SendToaddress.cs"
@@ -0,0 +1,108 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Comm.LogInfo;
+using WIDESEA_Comm;
+using WIDESEA_Common;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Entity.ToAGV;
+using WIDESEA_WCS.JobsPart.Common;
+using WIDESEA_WMS.IRepositories;
+using WIDESEA_WMS.Repositories;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+
+namespace WIDESEA_WMS.Common
+{
+    public partial class AGVServer
+    {
+        /// <summary>
+        /// 涓嬪彂缁堢偣浠诲姟
+        /// </summary>
+        public static void SendToaddress()
+        {
+            VOLContext Context = new VOLContext();
+            Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
+            Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+            RequestToaddTask requestFromTask = new RequestToaddTask();
+            var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Complete.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).ToList();
+            foreach (var agv_task in agv_tasks)
+            {
+                try
+                {
+                    #region 鏌ユ壘婊¤冻鏉′欢鐨勮ˉ绌烘墭浠诲姟
+                    var task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && x.agv_Traytype == agv_task.agv_Traytype && string.IsNullOrEmpty(x.agv_fromaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault();
+                    if (task != null)
+                    {
+                        requestFromTask.TASK_NO = agv_task.agv_tasknum;
+                        requestFromTask.TO_POSITION = task.agv_toaddress;
+                        requestFromTask.Material = agv_task.agv_materielid;
+                        requestFromTask.Grade = agv_task.agv_grade;
+                        requestFromTask.Quantity = agv_task.agv_qty;
+                        requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2;
+                        requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1;
+                        #region 缁�/鎷嗙┖鐩樹换鍔¢渶澶勭悊
+                        requestFromTask.StarQuantity = agv_task.StarQuantity;
+                        requestFromTask.EndQuantity = task.EndQuantity;
+                        #endregion
+                        var postJson = JsonConvert.SerializeObject(requestFromTask);
+                        var respone = RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVToaddTask);
+                        if (respone.Success)
+                        {
+                            agv_task.EndQuantity = task.EndQuantity;
+                            agv_task.agv_toaddress = task.agv_toaddress;
+                            agvtaskRepository.Update(agv_task, true);
+                            agvtaskRepository.Delete(task, true);
+                        }
+                        else
+                            throw new Exception(respone.Msg);
+                        WriteDBLog.Success("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "WMS");
+                    }
+                    #endregion
+                    else
+                    {
+                        #region 鏌ユ壘婊¤冻浠诲姟鏉′欢鐨勫湴鍧�
+                        var EmptyStation = EmptyTray.GetEmptyTrayStation(stationinfoRepository, agv_task);
+                        if (EmptyStation != null)
+                        {
+                            //agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString();
+                            //agvtaskRepository.Update(agv_task, true);//鏌ョ湅AGV浠诲姟鏁版嵁鏄惁鍦ㄥ彟涓�涓柟娉曞唴杩涜浜嗘暟鎹洿鏂�
+
+                            requestFromTask.TASK_NO = agv_task.agv_tasknum;
+                            requestFromTask.TO_POSITION = EmptyStation.stationCode;
+                            requestFromTask.Material = agv_task.agv_materielid;
+                            requestFromTask.Grade = agv_task.agv_grade;
+                            requestFromTask.Quantity = agv_task.agv_qty;
+                            requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2;
+                            requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1;
+                            #region 缁�/鎷嗙┖鐩樹换鍔¢渶澶勭悊
+                            requestFromTask.StarQuantity = agv_task.StarQuantity;
+                            requestFromTask.EndQuantity = EmptyStation.quantity;
+                            #endregion
+                            var postJson = JsonConvert.SerializeObject(requestFromTask);
+                            var respone = RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVToaddTask);
+                            if (respone.Success)
+                            {
+                                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);
+                            }
+                            else
+                                throw new Exception(respone.Msg);
+                            WriteDBLog.Success("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}", "WMS");
+                        }
+                        #endregion
+                    }
+                }
+                catch (Exception ex)
+                {
+                    WriteDBLog.Error("鏇存柊鑷姩鍙栫┖鎵橀槦鍒椾换鍔�", $"浠诲姟缂栧彿锛歿agv_task.agv_tasknum}锛涢敊璇俊鎭細{ex.Message}", "WMS");
+                }
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs"
new file mode 100644
index 0000000..1a9b536
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/AGVAPIAddress.cs"
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_WMS.Common
+{
+    public class AGVAPIAddress
+    {
+        /// <summary>
+        /// 瀹屾暣AGV浠诲姟涓嬪彂鍦板潃
+        /// </summary>
+        public const string IPAddress_AGVTask = "http://192.168.12.204:5000/api/TaskCreat/CreatTask";
+        /// <summary>
+        /// AGV璧风偣浠诲姟涓嬪彂鍦板潃
+        /// </summary>
+        public const string IPAddress_AGVFromaddTask = "http://192.168.12.204:5000/api/TaskCreat/CreatGetPalletTask";
+        /// <summary>
+        /// AGV缁堢偣浠诲姟涓嬪彂鍦板潃
+        /// </summary>
+        public const string IPAddress_AGVToaddTask = "http://192.168.12.204:5000/api/TaskCreat/CreatPutPalletTask";
+    }
+}
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"
index 4d45e09..93cdff5 100644
--- "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"
@@ -73,7 +73,14 @@
                 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();
+                if (station.area == "10" || station.area == "11")
+                {
+                    OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any();
+                }
+                else
+                {
+                    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)
             {
@@ -102,7 +109,12 @@
 
             }
         }
-
+        /// <summary>
+        /// 鏌ユ壘褰撳墠琛屽彲鍏ュ簱绌鸿揣浣�
+        /// </summary>
+        /// <param name="EmptyStation"></param>
+        /// <param name="stationinfoRepository"></param>
+        /// <returns></returns>
         public static dt_stationinfo Station(dt_stationinfo EmptyStation, Idt_stationinfoRepository stationinfoRepository)
         {
             dt_stationinfo stationinfo = null;
@@ -113,21 +125,88 @@
 
                 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)
+
+                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();
 
             }
             catch (Exception ex)
             {
 
+            }
+            return stationinfo;
+        }
+
+        /// <summary>
+        /// 绌烘墭鍙叆搴撹揣浣�
+        /// </summary>
+        /// <param name="area"></param>
+        /// <returns></returns>
+        public static dt_stationinfo EmptyPalletStation1(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 鏌ユ壘AB搴撳彲鍏ョ┖鎵樼┖璐т綅
+                if (area == "11" && stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any())
+                {
+                    #region MyRegion
+                    var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault();
+                    #endregion
+
+                    #region 鏌ユ壘搴撳尯2鍜屽簱鍖�3鐨勭┖鎵樿揣浣�
+                    //var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3")
+                    //   && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault();
+
+                    if (EmptyStation != null)
+                    {
+                        stationinfo = Station(EmptyStation, stationinfoRepository);
+                        if (stationinfo != null)
+                            if (!QueueStation(stationinfo.stationCode)) 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) return null;
+                    }
+                    #endregion
+
+                    #region 鏈壘鍒扮┖鎵樿揣浣嶆垨褰撳墠琛屽凡婊�,瀵绘壘鏂扮殑涓�琛�
+                    stationinfo = stationinfoRepository.Find(x => x.column == 2 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault();
+                    if (stationinfo == null)
+                        stationinfo = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault();
+                    #endregion
+                }
+                #endregion
+
+                #region 鏌ユ壘绌烘墭搴撳尯
+                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 (!QueueStation(stationinfo.stationCode) && 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 (GetStation.QueueStation(stationinfo.stationCode)) stationinfo = null;
+                #endregion
+
+                #region 鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪浠诲姟
+                if (stationinfo != null)
+                    if (agvtaskService.Find(x => x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null;
+                #endregion
+
+            }
+            catch (Exception ex)
+            {
+                throw;
             }
             return stationinfo;
         }
@@ -146,7 +225,6 @@
                 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();
@@ -190,7 +268,7 @@
 
                 #region 鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪浠诲姟
                 if (stationinfo != null)
-                    if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; 
+                    if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null;
                 #endregion
 
             }
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"
index f8a976b..8c7b8b2 100644
--- "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"
@@ -36,6 +36,32 @@
             }
         }
         /// <summary>
+        /// 鑾峰彇鍙叆绌烘墭璐т綅
+        /// </summary>
+        public static dt_stationinfo GetEmptyTrayStation(Idt_stationinfoRepository stationinfoRepository,dt_agvtask agv_task)
+        {
+            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)
+                {
+                    var EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault();
+                    if (EmptyD != null) CreateEmptyTrayIn(stationinfoRepository, EmptyD);
+                }
+            }
+            #endregion
+            else
+            {
+                EmptyStation = GetStation.EmptyPalletStation1(agv_task.agv_Traytype == "SmallTray" ? "11" : "10");
+            }
+            return EmptyStation;
+        }
+        /// <summary>
         /// 鍒涘缓绌烘墭鍙犵洏鍏ュ簱浠诲姟
         /// </summary>
         /// <param name="stationinfoRepository"></param>
@@ -48,7 +74,7 @@
             {
                 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);
+                var toEmptyStation = GetStation.EmptyPalletStation1(area);
                 if (toEmptyStation != null)
                 {
                     #region 鍚屼竴涓┖鎵樹綅鍙兘鍚屾椂鐢熸垚涓�涓┖鎵樹换鍔�
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs"
index dfc9c30..b40fa60 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/ToMes/shiftingparking.cs"
@@ -42,6 +42,8 @@
                 if (station2 == null) return content.Error("璇疯緭鍏ユ纭殑璧风偣鍦板潃锛�");
                 if (!station1.tray_type.Contains("Small") && station2.area != "4")
                     throw new Exception($"澶ф墭鐩樺彧鑳藉瓨鏀惧湪搴撳尯4锛�");
+                if (station1.tray_type.Contains("Small") && station2.area != "3" && station2.area != "2")
+                    throw new Exception($"灏忔墭鐩樺彧鑳藉瓨鏀惧湪搴撳尯2/搴撳尯3锛�");
                 if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(from_address) || x.agv_toaddress.Contains(from_address)).Any())
                     throw new Exception($"璧风偣{from_address}宸插瓨鍦ㄤ换鍔★紒");
                 if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(to_address) || x.agv_toaddress.Contains(to_address)).Any())
@@ -52,17 +54,9 @@
                     throw new Exception($"缁堢偣{to_address}涓嶆槸绌鸿揣浣嶏紒");
                 if (string.IsNullOrEmpty(station1.stationType))
                     throw new Exception($"璧风偣{from_address}鏈粦瀹氱墿鏂欑被鍨嬶紒");
-                
-                if (station2.area == "1")
-                {
-                    if (stationinfoRepository.Find(x => x.area == station2.area && x.column == station2.column && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any())
-                        throw new Exception($"缁堢偣{to_address}鍚屽垪瀛樺湪涓庤捣鐐圭墿鏂欑被鍨嬩笉鍖归厤锛�");
-                }
-                else
-                {
-                    if (stationinfoRepository.Find(x => x.area == station2.area && x.line == station2.line && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any())
-                        throw new Exception($"缁堢偣{to_address}鍚岃瀛樺湪涓庤捣鐐圭墿鏂欑被鍨嬩笉鍖归厤锛�");
-                }
+
+                if (stationinfoRepository.Find(x => x.area == station2.area && x.line == station2.line && x.enable && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any())
+                    throw new Exception($"缁堢偣{to_address}鍚岃瀛樺湪涓庤捣鐐圭墿鏂欑被鍨嬩笉鍖归厤锛�");
                 var inventory = inventoryRepository.Find(x => x.stationCode == station1.stationCode).FirstOrDefault();
                 if (inventory == null) throw new Exception($"璧风偣{from_address}鏈壘鍒板簱瀛樹俊鎭紒");
 
@@ -92,6 +86,7 @@
                 station2.location_state = LocationStateEnum.InBusy.ToString();
                 station2.heatNumber = station1.heatNumber;
                 station2.Number = station1.Number;
+                station2.billetID = station1.billetID;
                 station2.stationType = station1.stationType;
                 stationinfoRepository.Update(station2, true);
                 content.OK();
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 9d6b117..80480a7 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"
@@ -14,6 +14,8 @@
         {
             AGVServer.UpdateEmptyPalletTask();
             AGVServer.SendAgvTask();
+            AGVServer.SendFromaddress();
+            AGVServer.SendToaddress();
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json"
index 9bfab82..ee645d9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json"
@@ -16,7 +16,8 @@
   "Connection": {
     "DBType": "MsSql", //MySql/MsSql/PgSql  //鏁版嵁搴撶被鍨嬶紝濡傛灉浣跨敤鐨勬槸sqlserver姝ゅ搴旇缃负MsSql
     //sqlserver杩炴帴瀛楃涓�
-    "DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;",
+    "DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;",
+    //"DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;",
 
     //mysql杩炴帴瀛楃涓�(鍗囩骇EFCore3.1鍒版椂宸插皢mysql杩炴帴瀛楃涓蹭慨鏀�,2019-12-20)
     // "DbConnectionString": " Data Source=127.0.0.1;Database=netcoredev;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;",

--
Gitblit v1.9.3