From 1cd9280bbecf557f8978ad3839f14827ff9f4d34 Mon Sep 17 00:00:00 2001
From: Admin <Admin@ADMIN>
Date: 星期三, 17 十二月 2025 22:23:26 +0800
Subject: [PATCH] 最新

---
 项目代码/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs |  222 +++++++++++++++++--------------------------------------
 1 files changed, 70 insertions(+), 152 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 38ffd31..a422c67 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"
@@ -24,7 +24,7 @@
         /// <summary>
         /// 鍑哄簱鐨勫眰
         /// </summary>
-        private static List<string> OutboundStationLayerNo = new List<string>() { "60100", "60200", "60300", "60400", "60500", "60600", "60700"};
+        private static List<string> OutboundStationLayerNo = new List<string>() { "60101", "60102", "60103", "60104", "60105", "60106", "60107" };
         //鍏ュ簱鎵樼洏鐢宠绔欏彴
         private static string ReInboundRequestStationNo = "90101";
         //鍑哄簱绔欏彴浜や簰
@@ -45,64 +45,13 @@
                 //鍑哄簱瀹屾垚
                 OutboundCompleteAction(taskWCSinfoRepository, client);  //鍘嬭鍑哄簱鍙d换鍔″畬鎴�
 
-                
-
-                //绌烘墭鍏ュ簱鐢宠
-                InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
-
-
-                //娴嬭瘯闃舵娉ㄩ噴鐨勫唴瀹癸紙鍚庣画闇�瑕佷娇鐢ㄧ殑锛�
-                //澧炲姞琛ヤ竵.澧炲姞杞﹀瓨鍌ㄤ腑鏈夐棶棰�.鍐嶅啓
-                /*int logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), "OutboundArea").ToString());
-                if (logicValue == 4)
-                {
-                    string rfidResult = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), "OutboundArea").ToString();
-                    if (!string.IsNullOrEmpty(rfidResult) && !"0".Equals(rfidResult))
-                    {
-                        Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult
-                        && (r.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString()
-                        || r.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString()));
-
-                        if (null != wcsInfo)
-                        {
-                            //鎻愬崌鏈哄眰
-                            string hoisterLayer = client.ReadValue(CLineInfoDBName.R_Line_Layer.ToString(), hoisterResultNo).ToString();
-                            string[] locationArray = wcsInfo.wcstask_startLocation.Split('-');
-                            if (int.Parse(locationArray[0]).ToString() == hoisterLayer)
-                            {
-                                Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_barCode == wcsInfo.wcstask_barcode);
-                                if (null == rgvTask)
-                                {
-                                    flag++;//閬垮厤鍒氬畬鎴愰噸澶嶅啓
-                                    if (flag == 10)
-                                    {
-                                        WriteRGVState(client, false);
-                                        WriteRGVState(client, true);
-                                        flag = 0;
-                                        return;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                else
-                {
-                    flag = 0;
-                }*/
-
-
-                //娴嬭瘯闃舵娉ㄩ噴鐨勫唴瀹�*/
-
-
-
-                //鏌ヨ鍑哄簱鑷冲帇瑁呭彴鐨勪换鍔℃湁澶氬皯杩涜涓�
-                List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_state != TaskState.TaskState_Assigned.ToString()
-                 && (OutboundStationLayerNo.Contains(r.wcstask_startPoint) || OutboundStationLayerNo.Contains(r.wcstask_endPoint))));
-                if (executingTask.Count < 4)
+                //鐢熸垚鍙笅鍙戠殑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锛屽垯鍙敓鎴愬幓杩欒竟鐨勪换鍔�
                 {
                     //鐩存帴灏嗕换鍔℃坊鍔犲埌AGV浠诲姟
-                    Dt_TaskWCSinfo outboundTask = GetOutboundTask(taskWCSinfoRepository, client);   
+                    Dt_TaskWCSinfo outboundTask = GetOutboundTask(taskWCSinfoRepository, client);
                     if (null != outboundTask)
                     {
                         //鏌ユ壘鏄惁鏈夎鎵樼洏鏉$爜浠诲姟锛屽鏋滄病鏈夊垯杩涜娣诲姞RGV浠诲姟
@@ -112,11 +61,7 @@
                         if (null == rgvInfo)
                         {
                             string rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
-                            //绌烘墭鐩樺洖搴�
-                            if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString()))
-                                rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
-                            //杞存壙鍑哄簱
-                            else if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString())
+                            if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString())
                                 || outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
                                 rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString();
 
@@ -130,54 +75,20 @@
                     }
                 }
 
-                //鎻愬崌鏈鸿繍琛岀殑浠诲姟 
-                Dt_TaskWCSinfo hisTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()
-                && (OutboundStationLayerNo.Contains(r.wcstask_startPoint) || OutboundStationLayerNo.Contains(r.wcstask_endPoint)));
-                if (null != hisTask)
-                {
-                    string[] locationArray = null;
-                    //绌烘墭鐩樺洖搴�
-                    if (hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString()))
-                    {
-                        locationArray = hisTask.wcstask_endLocation.Split('-');
-                        //RGV涓婃姤鍙栬揣瀹屾垚鐩存帴鎵ц涓嬩竴涓�
-                        Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_wcsTaskNumber == hisTask.wcstask_taskNumber);
-                        if (null != rgvTask && "2" == rgvTask.rgvtask_backup_2)
-                        {
-                            if (rgvTask.rgvtask_taskType.Contains(RGVTaskType.RgvTaskType_Inbound.ToString()))
-                            {
-                                Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type ==
-                                TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_RGV_Received.ToString());
-                                if (null != inboundTask)
-                                    ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask);
-                                else
-                                    OutboundRequestAction(taskWCSinfoRepository, client);
-                                return;
-                            }
-                        }
-                        string hoisterTaskNumber = client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), hoisterResultNo).ToString();
-                        string hoisterBarcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), hoisterResultNo).ToString();
-                        //閬垮厤鎻愬崌鏈鸿繕娌″彇灏卞仠姝簡
-                        if (string.IsNullOrEmpty(hoisterTaskNumber) || string.IsNullOrEmpty(hoisterBarcode))
-                            return;
-                    }
-                    //杞存壙鍑哄簱
-                    else if (hisTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) || hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
-                    {
-                        locationArray = hisTask.wcstask_startLocation.Split('-');
-                    }
-                        
-                    
-                }
-                else
-                {
-                    Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type ==
-                    TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_RGV_Received.ToString());
-                    if (null != inboundTask)
-                        ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask);
-                    else
-                        OutboundRequestAction(taskWCSinfoRepository, client);   //鎻愬崌鏈哄嚭搴撶殑娴佺▼
-                }
+                //缂撳瓨鍙h嚦杈撻�佺嚎
+                OutboundCZ_PLC(taskWCSinfoRepository, taskRGVinfoRepository, client);
+                
+
+                //绌烘墭鍏ュ簱鐢宠(鐢熸垚浜嗙┖鎵樺叆搴撲换鍔�)
+                InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
+
+                //绌烘墭鍒扮紦瀛樺彛
+                ReInboundKTP(taskWCSinfoRepository, client);
+
+                //绌烘墭鍏ュ簱鍙o紝鐢熸垚RGV浠诲姟,杩涜鍏ュ簱
+                RGV_InboundKTP(taskWCSinfoRepository, taskRGVinfoRepository, client);
+
+
             }
             catch (Exception ex)
             {
@@ -227,13 +138,13 @@
                     //鍒ゆ柇鍘嬭鍙版槸鍚︽湁璐�
                     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());
-                    if (!yzflag || yznoflag)
+                    if (yzflag || !yznoflag)
                         continue;
 
                     //鍒ゆ柇缂撳瓨鏋舵槸鍚︽湁璐�
                     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)
+                    if (flag || !noflag)
                         continue;
 
 
@@ -344,54 +255,61 @@
                     Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode && r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString());
                     if (null == wcsInfo)
                     {
-                        //鏈夊嚭搴撲换鍔�,涓嶈兘涓嬪彂
-                        Dt_TaskRGVinfo executingRgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_areaCode == "OutboundArea"
-                        && OutboundStationLayerNo.Contains(r.rgvtask_endNode));
-                        if (null != executingRgvTask)
-                            return;
+                        //鑾峰彇杞﹁酱鍑哄簱
+                        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));
 
-                        //褰撳墠瀛樺湪鏈畬鎴愮殑浠诲姟   鍏ュ簱
-                        wcsInfo = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint));
-                        if (null != wcsInfo)
+                        //鑾峰彇鏈夊灏戞潯鍑哄簱鐨勪换鍔�
+                        int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString());
+                        if (LineExecucount >= 4)
                         {
-                            Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_wcsTaskNumber == wcsInfo.wcstask_taskNumber);
-                            if (null != rgvTask)
+                            //鍒ゆ柇鏄惁鏈夊搴斿眰鐨勫嚭搴撲换鍔★紝
+                            //鐢宠鍏ュ簱浠诲姟
+                            WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
+                            if (content.Status)
                             {
-                                //鍙栬揣瀹屾垚
-                                if ("2" != rgvTask.rgvtask_backup_2)
-                                    return;
+                                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);
+                                
+
                             }
                             else
-                                return;
-                        }
-
-                        //鐢宠鍏ュ簱浠诲姟
-                        WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
-                        if (content.Status)
-                        {
-                            WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
-                            wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
-
-                            string rgvTaskType = string.Empty;
-                            if (wcsInfo.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString()))
-                                rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
-                            //杞存壙鍑哄簱
-                            else if (wcsInfo.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString())
-                                || wcsInfo.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
-                                rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString();
-
-                            taskWCSinfoRepository.DbContextBeginTransaction(() =>
                             {
-                                Dt_TaskRGVinfo rgvInfo = GetRGVTask(taskRGVinfoRepository, wcsInfo, rgvTaskType);
-                                taskRGVinfoRepository.Add(rgvInfo, true);
-
-                                wcsInfo.wcstask_state = TaskState.TaskState_RGV_Received.ToString();
-                                taskWCSinfoRepository.Add(wcsInfo, true);
-                                return content.OK();
-                            });
+                                client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
+                                throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+                                
+                            }
+                                
                         }
                         else
-                            throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+                        {
+                            //鍒ゆ柇鏈夊灏戞潯鍦ㄧ紦瀛樻灦鐨�
+                            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)
+                            {
+                                //鐢宠鍏ュ簱浠诲姟
+                                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, 1);
+
+                                }
+                                else
+                                {
+                                    client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
+                                    throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+                                    
+                                }
+                                    
+                            }
+                        }
+
                     }
                 }
             }

--
Gitblit v1.9.3