From c5f01e9a882b16f534166d033312c5c8ba8d94dd Mon Sep 17 00:00:00 2001
From: xiaojiao <xiaojiao@kaokeziliao.com>
Date: 星期六, 24 一月 2026 14:35:21 +0800
Subject: [PATCH] 离开北京前最后的版本,包含打印机程序

---
 项目代码/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs |  328 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 236 insertions(+), 92 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 a34e190..97d65eb 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"
@@ -50,6 +50,52 @@
             ["70104"] = "80104",
             ["70106"] = "80106"
         };
+        // 鍑哄簱鍖哄煙鏍″噯缂撳瓨鏋舵牎鍑� 
+        public static void OutboundAreaJZ(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
+        {
+            // 鍑哄簱鍖虹殑鍑哄簱浠诲姟 鍒扮紦瀛樻灦瀛愪簡 灏辫鎶婁换鍔″彿鍜屾墭鐩樺彿鍐欏叆鍒板搴斿眰鐨勭紦瀛樻灦
+            List<Dt_TaskWCSinfo> executingTasks = taskWCSinfoRepository.Find(r => (
+            r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString() ||
+            r.wcstask_state == TaskState.TaskState_Empty_Out_RGV_Finished.ToString())
+            && endStationNo.Contains(r.wcstask_endPoint)).ToList();
+            foreach (var item in executingTasks)
+            {
+                bool LoadSleep = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), item.wcstask_startPoint.ToString()).ToString());
+                int ReadNumber = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), item.wcstask_startPoint.ToString()).ToString());
+                int ReadBarcode = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), item.wcstask_startPoint.ToString()).ToString());
+                if (LoadSleep && (ReadNumber == 0 || ReadBarcode == 0))
+                {
+                    //鍐欏叆鎵樼洏鏉$爜
+                    bool writeTaskNumber = client.WriteValue(CLineInfoDBName.W_Line_TaskNumber.ToString(), item.wcstask_startPoint, item.wcstask_taskNumber);
+                    bool writeBarcode = client.WriteValue(CLineInfoDBName.W_Line_Barcode.ToString(), item.wcstask_startPoint, item.wcstask_barcode);
+                }
+            }
+
+            foreach (var item in OutboundStationLayerNo)
+            {
+                bool LoadSleep = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), item.ToString()).ToString());
+                int ReadNumber = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), item.ToString()).ToString());
+                int ReadBarcode = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), item.ToString()).ToString());
+
+                Dt_TaskWCSinfo dt_TaskWCSinfo = taskWCSinfoRepository.Find(r =>
+                r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString()
+                && r.wcstask_state == TaskState.TaskState_Assigned.ToString()
+                && r.wcstask_startPoint == 90101.ToString()
+                && r.wcstask_endPoint == item
+                && r.wcstask_barcode == ReadBarcode.ToString()
+                && r.wcstask_taskNumber == ReadNumber
+                ).FirstOrDefault();
+
+                if (LoadSleep && dt_TaskWCSinfo != null)
+                {
+                    // 璇佹槑璐х墿宸茬粡鍒颁簡缂撳瓨鏋� 浣嗕换鍔$姸鎬佹病鏈夋敼鍙� 杩樻槸鏂板缓鐘舵�� 灏辫鏀逛负 TaskState.TaskState_Empty_In_PLC_Finished.ToString()
+                    dt_TaskWCSinfo.wcstask_state = TaskState.TaskState_Empty_In_PLC_Finished.ToString();
+                    taskWCSinfoRepository.Update(dt_TaskWCSinfo, true);
+                    string str = $"鍑哄簱鍖哄煙 绌烘墭鐩樺洖搴� 鎵樼洏閮藉埌缂撳瓨鏋跺瓙 浣嗕换鍔$姸鎬佹病鍙� {DateTime.Now}銆恵dt_TaskWCSinfo.wcstask_state}銆戯紝鎵樼洏鍙�:{dt_TaskWCSinfo.wcstask_barcode},浠诲姟鍙凤細{dt_TaskWCSinfo.wcstask_taskNumber}";
+                    LogRecord.WriteLog(LogEnum.Errer, str.ToString());
+                }
+            }
+        }
         public static void OutboundAreaDispathAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
         {
             try
@@ -78,7 +124,6 @@
                                 || outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
                                 rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString();
 
-
                             rgvInfo = GetRGVTask(taskRGVinfoRepository, outboundTask, rgvTaskType);
                             taskRGVinfoRepository.Add(rgvInfo, true);
 
@@ -90,7 +135,7 @@
 
                 //缂撳瓨鍙�(缂撳瓨鏋�)鑷宠緭閫佺嚎
                 OutboundCZ_PLC(taskWCSinfoRepository, taskRGVinfoRepository, client);
-                
+
                 //绌烘墭鍏ュ簱鐢宠(鐢熸垚浜嗙┖鎵樺叆搴撲换鍔�)
                 InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
 
@@ -104,7 +149,7 @@
             }
             catch (Exception ex)
             {
-                WriteLog.Info("OutboundArea").Write($"{ DateTime.Now }鍑哄簱鍖哄煙璋冨害澶辫触:{ex.Message}", "OutboundArea");
+                WriteLog.Info("OutboundArea").Write($"{DateTime.Now}鍑哄簱鍖哄煙璋冨害澶辫触:{ex.Message}", "OutboundArea");
             }
         }
         public static bool WriteRGVState(PLCClient client, bool value)
@@ -140,7 +185,7 @@
 
             List<Dt_TaskWCSinfo> listTask = taskWCSinfoRepository.Find(r => r.wcstask_state == TaskState.TaskState_Assigned.ToString() &&
           (r.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString() || r.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
-          && OutboundStationLayerNo.Contains(r.wcstask_startPoint)).OrderBy(r => r.wcstask_createTime).ToList();//
+          && endStationNo.Contains(r.wcstask_endPoint)).OrderBy(r => r.wcstask_createTime).ToList();//
 
             foreach (var item in listTask.GroupBy(r => r.wcstask_endPoint))
             {
@@ -154,13 +199,14 @@
                         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)
+                    Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => 
+                    (r.wcstask_startPoint == wcsTask.wcstask_startPoint || r.wcstask_endPoint == wcsTask.wcstask_endPoint)
                     && (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
                     if (null != executingTask)
                         continue;
@@ -168,37 +214,37 @@
                     List<Dt_TaskWCSinfo> listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == wcsTask.wcstask_endPoint &&
                     r.wcstask_state != TaskState.TaskState_Assigned.ToString());
 
-                    if(listTarget != null && listTarget.Count >= 2)
-                    {
-                        continue;
-                    }
-                    else
-                    {
-                        wcsInfo = wcsTask;
-                    }
-
-                    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 > 1)
                     //{
-                    //    if (null != listTarget && listTarget.Count > 2)
-                    //        continue;
-                    //    else
-                    //    {
-                    //        wcsInfo = wcsTask;
-                    //        break;
-                    //    }
+                    //    continue;
                     //}
                     //else
                     //{
-                    //    if (null != listTarget && listTarget.Count > 1)
-                    //        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 > 1)
+                            continue;
+                        else
+                        {
+                            wcsInfo = wcsTask;
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        if (null != listTarget && listTarget.Count > 0)
+                            continue;
+                        else
+                        {
+                            wcsInfo = wcsTask;
+                            break;
+                        }
+                    }
                 }
             }
             return wcsInfo;
@@ -222,102 +268,200 @@
             return rgvInfo;
         }
 
+        // 鍙敤涓�涓瓧鍏革細Key=鎵樼洏鍙凤紝Value=Tuple<閿佸璞�, 鏈�鍚庝娇鐢ㄦ椂闂�>
+        // Tuple<object, DateTime>锛欼tem1=閿佸璞★紝Item2=鏈�鍚庝娇鐢ㄦ椂闂�
+        private static readonly Dictionary<string, Tuple<object, DateTime>> BarcodeLockDict = new Dictionary<string, Tuple<object, DateTime>>();
+        private static readonly object GlobalLock = new object(); // 淇濇姢瀛楀吀鐨勫叏灞�閿�
+        private const int ExpireMinutes = 1; // 杩囨湡鏃堕棿锛�1鍒嗛挓
+
+        /// <summary>
+        /// 鑾峰彇鎵樼洏鍙蜂笓灞為攣锛堝崟瀛楀吀+1鍒嗛挓杩囨湡+鎳掓竻鐞嗭級
+        /// </summary>
+        private static object GetBarcodeLock(string barcode)
+        {
+
+            lock (GlobalLock) // 鍏ㄥ眬閿佷繚鎶ゅ瓧鍏告搷浣�
+            {
+                // ========== 绗竴姝ワ細鎳掓竻鐞嗭紙姣忔鑾峰彇閿佹椂锛屾竻鐞嗚秴杩�1鍒嗛挓鐨勯棽缃墭鐩樺彿锛� ==========
+                var expiredBarcodes = BarcodeLockDict
+                    .Where(kv => (DateTime.Now - kv.Value.Item2).TotalMinutes > ExpireMinutes)
+                    .Select(kv => kv.Key)
+                    .ToList();
+
+                foreach (var expiredBarcode in expiredBarcodes)
+                {
+                    BarcodeLockDict.Remove(expiredBarcode);
+                }
+
+                // ========== 绗簩姝ワ細澶勭悊褰撳墠鎵樼洏鍙风殑閿佸拰鏃堕棿 ==========
+                if (!BarcodeLockDict.ContainsKey(barcode))
+                {
+                    // 鏃犺鎵樼洏鍙凤細鏂板閿佸璞�+褰撳墠鏃堕棿
+                    BarcodeLockDict[barcode] = Tuple.Create(new object(), DateTime.Now);
+                }
+                // 杩斿洖褰撳墠鎵樼洏鍙风殑閿佸璞�
+                return BarcodeLockDict[barcode].Item1;
+            }
+        }
+
         public static void InboundRequestAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
         {
             try
             {
-                //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 (R_Line_PLCDispatch == 1 && load) 
+                if (R_Line_PLCDispatch == 1 && load)
                 {
                     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)
-                    {
-                        //鍦ㄦ瀹屾垚璇ョ┖鎵樺嚭搴撲换鍔�
-                        WebResponseContent content = taskWCSinfoRepository.DbContextBeginTransaction(() =>
-                        {
-                            //涓婃姤WMS浠诲姟瀹屾垚
-                            content = WMSApi.TellWmsTaskFinished(IsTask.wcstask_barcode);
-                            if (content.Status)
-                            {
-                                //绉诲姩浠诲姟鍒板巻鍙茶〃
-                                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
-                                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)
+                        if (int.Parse(barcode) < 800000 || int.Parse(barcode) > 890000)
                         {
-                            //鑾峰彇杞﹁酱鍑哄簱
-                            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));
+                            return;
+                        }
+                        object barcodeLock = GetBarcodeLock(barcode);
+                        lock (barcodeLock)
+                        {
+                            Dt_TaskWCSinfo IsTask = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == barcode
+                            && (x.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString() || x.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString())
+                            && (x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString() || x.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString())
+                            && (endStationNo.Contains(x.wcstask_endPoint)));
+                            if (IsTask != null)
+                            {
+                                //鍦ㄦ瀹屾垚璇ョ┖鎵樺嚭搴撲换鍔�
+                                WebResponseContent content = taskWCSinfoRepository.DbContextBeginTransaction(() =>
+                                {
+                                    //涓婃姤WMS浠诲姟瀹屾垚
+                                    content = WMSApi.TellWmsTaskFinished(IsTask.wcstask_barcode);
+                                    if (content.Status)
+                                    {
+                                        //绉诲姩浠诲姟鍒板巻鍙茶〃
+                                        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
+                                        throw new Exception($"{DateTime.Now}涓婃姤WMS浠诲姟瀹屾垚鍑洪敊锛屽師鍥狅細銆恵content.Message}銆�");
 
-                            //鑾峰彇鏈夊灏戞潯鍑哄簱鐨勪换鍔�
-                            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);
+                                    return content;
+                                });
+                                string str = string.Empty;
                                 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);
-                                }
+                                    str = $" {DateTime.Now}涓婃姤WMS鍑哄簱瀹屾垚鎴愬姛,銆愭墜鍔ㄥ共鎵板嚭搴撴病鏈夊埌杈炬寚瀹氬帇瑁呭彴鐐逛綅锛屾墜鍔ㄦ嬁鍥�90101銆戙�怲askState_ConveyorLineExecuting銆戯紝鎵樼洏鍙�:{IsTask.wcstask_barcode},浠诲姟鍙凤細{IsTask.wcstask_taskNumber}";
                                 else
-                                {
-                                    throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
-                                }
+                                    str = $" {DateTime.Now}涓婃姤WMS鍑哄簱瀹屾垚澶辫触銆愭墜鍔ㄥ共鎵板嚭搴撴病鏈夊埌杈炬寚瀹氬帇瑁呭彴鐐逛綅锛屾墜鍔ㄦ嬁鍥�90101銆戙�怲askState_ConveyorLineExecuting銆戯紝鎵樼洏鍙�:{IsTask.wcstask_barcode},浠诲姟鍙凤細{IsTask.wcstask_taskNumber}";
+
+                                WriteLog.Info(IsTask.wcstask_endPoint).Write(str, IsTask.wcstask_endPoint);
+                                LogRecord.WriteLog(LogEnum.Errer, str.ToString());
                             }
-                            else
+
+                            Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode);
+                            if (null == wcsInfo)
                             {
-                                //鍒ゆ柇鏈夊灏戞潯鍦ㄧ紦瀛樻灦鐨�
-                                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)
+                                //鑾峰彇杞﹁酱鍑哄簱
+                                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)
                                     {
-                                        WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
-                                        wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
-                                        taskWCSinfoRepository.Add(wcsInfo, true);
+                                        //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);
+                                        try
+                                        {
+                                            WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
+                                            wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
+                                            taskWCSinfoRepository.Add(wcsInfo, true);
+                                        }
+                                        catch (Exception)
+                                        {
+                                            string str = $"杩欓噷鍙兘鏄嚭鐜颁簡骞跺彂鐨勬儏鍐垫墭鐩樼爜 鍦ㄦ坊鍔犵殑鏃跺�欐嫤鎴殑銆恵wcsInfo.wcstask_barcode}銆�" +
+                                                         $"浠诲姟鍙枫�恵wcsInfo.wcstask_taskNumber}銆�,浠诲姟鐘舵�侊細銆恵wcsInfo.wcstask_state}銆�";
+                                            LogRecord.WriteLog(LogEnum.Errer, str.ToString());
+                                            //throw;
+                                        }
                                     }
                                     else
                                     {
+                                        if (content.Message.Contains("褰撳墠鎵樼洏鍙峰凡瀛樺湪搴撻噷"))
+                                        {
+                                            client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 4);
+                                        }
                                         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)
+                                        {
+                                            try
+                                            {
+                                                WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
+                                                wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
+                                                taskWCSinfoRepository.Add(wcsInfo, true);
+                                            }
+                                            catch (Exception)
+                                            {
+                                                string str = $"杩欓噷鍙兘鏄嚭鐜颁簡骞跺彂鐨勬儏鍐垫墭鐩樼爜锛屽湪娣诲姞鐨勬椂鍊欐嫤鎴殑銆恵wcsInfo.wcstask_barcode}銆�" +
+                                                             $"浠诲姟鍙枫�恵wcsInfo.wcstask_taskNumber}銆�,浠诲姟鐘舵�侊細銆恵wcsInfo.wcstask_state}銆�";
+                                                LogRecord.WriteLog(LogEnum.Errer, str.ToString());
+                                                //throw;
+                                            }
+                                        }
+                                        else
+                                        {
+                                            if (content.Message.Contains("褰撳墠鎵樼洏鍙峰凡瀛樺湪搴撻噷"))
+                                            {
+                                                client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 4);
+                                            }
+                                            else if (content.Message.Contains("鏆傛棤璐т綅鍙垎閰�"))
+                                            {
+
+                                            }
+                                            else 
+                                            {
+                                                throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+                                            }
+                                            
+                                        }
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                string str = $"杩欓噷鍙兘鏄嚭鐜颁簡骞跺彂鐨勬儏鍐垫墭鐩樼爜 鍦ㄦ煡璇㈢殑鏃跺�欐嫤鎴殑銆恵wcsInfo.wcstask_barcode}銆�" +
+                                        $"浠诲姟鍙枫�恵wcsInfo.wcstask_taskNumber}銆�,浠诲姟鐘舵�侊細銆恵wcsInfo.wcstask_state}銆�";
+                                LogRecord.WriteLog(LogEnum.Errer, str.ToString());
                             }
                         }
                     }
                     else
                     {
-                        throw new Exception("鍏ュ簱鐢宠澶辫触:璇诲彇鍒扮殑绌烘墭鐩樻潯鐮佷负绌猴紝璇诲彇鍐呭锛�"+ barcode);
+                        throw new Exception("鍏ュ簱鐢宠澶辫触:璇诲彇鍒扮殑绌烘墭鐩樻潯鐮佷负绌猴紝璇诲彇鍐呭锛�" + barcode);
                     }
                 }
             }

--
Gitblit v1.9.3