From c3b60d865c3457c35054446e81b352e93e00a696 Mon Sep 17 00:00:00 2001
From: xiaojiao <xiaojiao@kaokeziliao.com>
Date: 星期一, 12 一月 2026 18:31:11 +0800
Subject: [PATCH] 更改了大部分功能和逻辑

---
 项目代码/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs |  223 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 116 insertions(+), 107 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
index a422c67..a34e190 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
@@ -3,10 +3,12 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection.Metadata;
 using System.Text;
 using System.Threading;
 using WIDESEA_Common;
 using WIDESEA_Common.CutomerModel;
+using WIDESEA_Common.LogEnum;
 using WIDESEA_Common.TaskEnum;
 using WIDESEA_Common.Tools;
 using WIDESEA_Core.Utilities;
@@ -25,7 +27,9 @@
         /// 鍑哄簱鐨勫眰
         /// </summary>
         private static List<string> OutboundStationLayerNo = new List<string>() { "60101", "60102", "60103", "60104", "60105", "60106", "60107" };
-        //鍏ュ簱鎵樼洏鐢宠绔欏彴
+        /// <summary>
+        /// 鍏ュ簱鎵樼洏鐢宠绔欏彴
+        /// </summary>
         private static string ReInboundRequestStationNo = "90101";
         //鍑哄簱绔欏彴浜や簰
         //private static string OutboundStationNo = "90201";
@@ -38,6 +42,14 @@
         /// <param name="client"></param>
         public static string currentModel = "Inbound";
         static int flag = 0;
+        // 鍘嬭鍙扮紦瀛樹綅瀛楀吀
+        public static Dictionary<string, string> PlatformDict = new Dictionary<string, string>
+        {
+            ["70101"] = "80101",
+            ["70103"] = "80103",
+            ["70104"] = "80104",
+            ["70106"] = "80106"
+        };
         public static void OutboundAreaDispathAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
         {
             try
@@ -48,7 +60,8 @@
                 //鐢熸垚鍙笅鍙戠殑RGV浠诲姟锛岃嚦缂撳瓨鍙�
                 List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => r.wcstask_state != TaskState.TaskState_Assigned.ToString()
                  && endStationNo.Contains(r.wcstask_endPoint));
-                if (executingTask.Count < 4)    //灏忎簬4锛屽垯鍙敓鎴愬幓杩欒竟鐨勪换鍔�
+                // 杩欓噷瑕佸啓涓�涓�昏緫锛屽氨鏄垜鑾峰彇鐨勪换鍔★紝鍙湁瀵瑰簲鐨勭珯鍙颁负绌猴紝鎴戞墠鑳戒笅鍙戯紝杩欐牱鏀圭殑璇濓紝绌烘墭鐩樺叆搴撲篃瑕佹敼
+                if (executingTask.Count < 8)    //灏忎簬8锛屽垯鍙敓鎴愬幓杩欒竟鐨勪换鍔�
                 {
                     //鐩存帴灏嗕换鍔℃坊鍔犲埌AGV浠诲姟
                     Dt_TaskWCSinfo outboundTask = GetOutboundTask(taskWCSinfoRepository, client);
@@ -75,14 +88,13 @@
                     }
                 }
 
-                //缂撳瓨鍙h嚦杈撻�佺嚎
+                //缂撳瓨鍙�(缂撳瓨鏋�)鑷宠緭閫佺嚎
                 OutboundCZ_PLC(taskWCSinfoRepository, taskRGVinfoRepository, client);
                 
-
                 //绌烘墭鍏ュ簱鐢宠(鐢熸垚浜嗙┖鎵樺叆搴撲换鍔�)
                 InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
 
-                //绌烘墭鍒扮紦瀛樺彛
+                //绌烘墭鍒扮紦瀛樺彛(缂撳瓨鏋�)
                 ReInboundKTP(taskWCSinfoRepository, client);
 
                 //绌烘墭鍏ュ簱鍙o紝鐢熸垚RGV浠诲姟,杩涜鍏ュ簱
@@ -135,18 +147,17 @@
                 Dt_TaskWCSinfo wcsTask = item.OrderBy(r => r.wcstask_createTime).FirstOrDefault();
                 if (null != wcsTask)
                 {
-                    //鍒ゆ柇鍘嬭鍙版槸鍚︽湁璐�
-                    bool yzflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString());
-                    bool yznoflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString());
+                    //鍒ゆ柇鍘嬭鍙版槸鍚︽湁璐�  涔熷氨鏄垽鏂�80101閭h竟
+                    bool yzflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), PlatformDict[wcsTask.wcstask_endPoint]).ToString());
+                    bool yznoflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), PlatformDict[wcsTask.wcstask_endPoint]).ToString());
                     if (yzflag || !yznoflag)
                         continue;
 
-                    //鍒ゆ柇缂撳瓨鏋舵槸鍚︽湁璐�
-                    bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString());
+                    //鍒ゆ柇缂撳瓨鏋舵槸鍚︽湁璐� 
+                    bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(),wcsTask.wcstask_startPoint).ToString());
                     bool noflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString());
                     if (flag || !noflag)
                         continue;
-
 
                     //鍚屼竴灞傛湁鎵ц涓殑浠诲姟涓嶆坊鍔�
                     Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_startPoint == wcsTask.wcstask_startPoint || r.wcstask_endPoint == wcsTask.wcstask_endPoint)
@@ -154,75 +165,42 @@
                     if (null != executingTask)
                         continue;
 
-
                     List<Dt_TaskWCSinfo> listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == wcsTask.wcstask_endPoint &&
                     r.wcstask_state != TaskState.TaskState_Assigned.ToString());
 
-                    string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), wcsTask.wcstask_endPoint).ToString();
-                    if (string.IsNullOrEmpty(barcode) || "0".Equals(barcode))
+                    if(listTarget != null && listTarget.Count >= 2)
                     {
-                        if (null != listTarget && listTarget.Count > 1)
-                            continue;
-                        else
-                        {
-                            wcsInfo = wcsTask;
-                            break;
-                        }
+                        continue;
                     }
                     else
                     {
-                        if (null != listTarget && listTarget.Count > 0)
-                            continue;
-                        else
-                        {
-                            wcsInfo = wcsTask;
-                            break;
-                        }
+                        wcsInfo = wcsTask;
                     }
+
+                    string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), wcsTask.wcstask_endPoint).ToString();
+
+                    //if (string.IsNullOrEmpty(barcode) || "0".Equals(barcode))
+                    //{
+                    //    if (null != listTarget && listTarget.Count > 2)
+                    //        continue;
+                    //    else
+                    //    {
+                    //        wcsInfo = wcsTask;
+                    //        break;
+                    //    }
+                    //}
+                    //else
+                    //{
+                    //    if (null != listTarget && listTarget.Count > 1)
+                    //        continue;
+                    //    else
+                    //    {
+                    //        wcsInfo = wcsTask;
+                    //        break;
+                    //    }
+                    //}
                 }
             }
-
-
-
-            //foreach (var item in listTask)
-            //{
-            //    //鍚屼竴灞傛湁鎵ц涓殑浠诲姟涓嶆坊鍔�
-            //    Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_startPoint == item.wcstask_startPoint || r.wcstask_endPoint == item.wcstask_endPoint)
-            //    && (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
-            //    if (null != executingTask)
-            //        continue;
-
-            //    //鍚屼竴鐩爣浣嶇疆鐨勪笉鑳藉悓鏃跺嚭
-            //    //  Dt_TaskWCSinfo endTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_endPoint == item.wcstask_endPoint &&
-            //    //(r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
-            //    //  if (null != endTask)
-            //    //      continue;
-
-            //    List<Dt_TaskWCSinfo> listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == item.wcstask_endPoint &&
-            //    r.wcstask_state != TaskState.TaskState_Assigned.ToString());
-
-            //    string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), item.wcstask_endPoint).ToString();
-            //    if (string.IsNullOrEmpty(barcode) || "0".Equals(barcode))
-            //    {
-            //        if (null != listTarget && listTarget.Count > 1)
-            //            continue;
-            //        else
-            //        {
-            //            wcsInfo = item;
-            //            break;
-            //        }
-            //    }
-            //    else
-            //    {
-            //        if (null != listTarget && listTarget.Count > 0)
-            //            continue;
-            //        else
-            //        {
-            //            wcsInfo = item;
-            //            break;
-            //        }
-            //    }
-            //}
             return wcsInfo;
         }
 
@@ -248,48 +226,56 @@
         {
             try
             {
-                string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), ReInboundRequestStationNo).ToString();
+                //string barcode = "901010";
+                int R_Line_PLCDispatch = int.Parse(client.ReadValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo).ToString());
                 bool load = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), ReInboundRequestStationNo).ToString());
-                if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode) && load)
+                if (R_Line_PLCDispatch == 1 && load) 
                 {
-                    Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode && r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString());
-                    if (null == wcsInfo)
+                    string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), ReInboundRequestStationNo).ToString();
+                    // 杩欓噷瑕佸姞涓�涓垽鏂紝濡傛灉鎷垮洖鏉ョ殑绌烘墭鐩樻槸800001锛屼絾鏄垜鏈変竴鏉¤繖涓墭鐩樼殑浠诲姟鏄�800001杩樻病鏈夊埌鎸囧畾鐨勫帇瑁呭彴锛屾墍浠ユ垜瑕佸畬鎴愯繖涓换鍔�
+                    Dt_TaskWCSinfo IsTask = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == barcode && x.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString());
+                    if (IsTask != null)
                     {
-                        //鑾峰彇杞﹁酱鍑哄簱
-                        List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) ||
-                            r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) && endStationNo.Contains(r.wcstask_endPoint));
-
-                        //鑾峰彇鏈夊灏戞潯鍑哄簱鐨勪换鍔�
-                        int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString());
-                        if (LineExecucount >= 4)
+                        //鍦ㄦ瀹屾垚璇ョ┖鎵樺嚭搴撲换鍔�
+                        WebResponseContent content = taskWCSinfoRepository.DbContextBeginTransaction(() =>
                         {
-                            //鍒ゆ柇鏄惁鏈夊搴斿眰鐨勫嚭搴撲换鍔★紝
-                            //鐢宠鍏ュ簱浠诲姟
-                            WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
+                            //涓婃姤WMS浠诲姟瀹屾垚
+                            content = WMSApi.TellWmsTaskFinished(IsTask.wcstask_barcode);
                             if (content.Status)
                             {
-                                WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
-                                wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
-                                taskWCSinfoRepository.Add(wcsInfo, true);
-                                client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 1);
-                                
-
+                                //绉诲姩浠诲姟鍒板巻鍙茶〃
+                                Dt_TaskWCSinfo_HtyRepository taskWCSinfo_HtyRepository = new Dt_TaskWCSinfo_HtyRepository(taskWCSinfoRepository.DbContext);
+                                IsTask.wcstask_state = TaskState.TaskState_Finished.ToString();
+                                CommonFunction.AddWcsTaskToHistory(IsTask, taskWCSinfoRepository, taskWCSinfo_HtyRepository);
                             }
                             else
-                            {
-                                client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
-                                throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
-                                
-                            }
-                                
-                        }
+                                throw new Exception($"{DateTime.Now}涓婃姤WMS浠诲姟瀹屾垚鍑洪敊锛屽師鍥狅細銆恵content.Message}銆�");
+
+                            return content;
+                        });
+                        string str = string.Empty;
+                        if (content.Status)
+                            str = $" {DateTime.Now}涓婃姤WMS鍑哄簱瀹屾垚鎴愬姛,銆愭墜鍔ㄥ共鎵板嚭搴撴病鏈夊埌杈炬寚瀹氬帇瑁呭彴鐐逛綅锛屾墜鍔ㄦ嬁鍥�90101銆戙�怲askState_ConveyorLineExecuting銆戯紝鎵樼洏鍙�:{IsTask.wcstask_barcode},浠诲姟鍙凤細{IsTask.wcstask_taskNumber}";
                         else
+                            str = $" {DateTime.Now}涓婃姤WMS鍑哄簱瀹屾垚澶辫触銆愭墜鍔ㄥ共鎵板嚭搴撴病鏈夊埌杈炬寚瀹氬帇瑁呭彴鐐逛綅锛屾墜鍔ㄦ嬁鍥�90101銆戙�怲askState_ConveyorLineExecuting銆戯紝鎵樼洏鍙�:{IsTask.wcstask_barcode},浠诲姟鍙凤細{IsTask.wcstask_taskNumber}";
+
+                        WriteLog.Info(IsTask.wcstask_endPoint).Write(str, IsTask.wcstask_endPoint);
+                    }
+
+                    if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode))
+                    {
+                        Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode && r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString());
+                        if (null == wcsInfo)
                         {
-                            //鍒ゆ柇鏈夊灏戞潯鍦ㄧ紦瀛樻灦鐨�
-                            int RGV_Finishedcount = executingTask.Count(x => x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
-                            && x.wcstask_state != TaskState.TaskState_Assigned.ToString());
-                            if (RGV_Finishedcount == 0)
+                            //鑾峰彇杞﹁酱鍑哄簱
+                            List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) ||
+                                r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) && endStationNo.Contains(r.wcstask_endPoint));
+
+                            //鑾峰彇鏈夊灏戞潯鍑哄簱鐨勪换鍔�
+                            int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString() || x.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString());
+                            if (LineExecucount >= 8)
                             {
+                                //鍒ゆ柇鏄惁鏈夊搴斿眰鐨勫嚭搴撲换鍔★紝
                                 //鐢宠鍏ュ簱浠诲姟
                                 WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
                                 if (content.Status)
@@ -297,24 +283,47 @@
                                     WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
                                     wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
                                     taskWCSinfoRepository.Add(wcsInfo, true);
-                                    client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 1);
-
+                                    //client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
                                 }
                                 else
                                 {
-                                    client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
                                     throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
-                                    
                                 }
-                                    
+                            }
+                            else
+                            {
+                                //鍒ゆ柇鏈夊灏戞潯鍦ㄧ紦瀛樻灦鐨�
+                                int RGV_Finishedcount = executingTask.Count(x => x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
+                                && x.wcstask_state != TaskState.TaskState_Empty_Out_Line_Executing.ToString()
+                                && x.wcstask_state != TaskState.TaskState_Assigned.ToString());
+                                if (RGV_Finishedcount == 0)
+                                {
+                                    //鐢宠鍏ュ簱浠诲姟
+                                    WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
+                                    if (content.Status)
+                                    {
+                                        WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
+                                        wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
+                                        taskWCSinfoRepository.Add(wcsInfo, true);
+                                        //client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
+                                    }
+                                    else
+                                    {
+                                        throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+                                    }
+                                }
                             }
                         }
-
+                    }
+                    else
+                    {
+                        throw new Exception("鍏ュ簱鐢宠澶辫触:璇诲彇鍒扮殑绌烘墭鐩樻潯鐮佷负绌猴紝璇诲彇鍐呭锛�"+ barcode);
                     }
                 }
             }
             catch (Exception ex)
             {
+                client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 3);
                 Console.Out.WriteLine(DateTime.Now + ex.Message);
             }
         }

--
Gitblit v1.9.3