From 02dd21ca9a064b98aacfdc8c6ffec5a2b575967d Mon Sep 17 00:00:00 2001
From: xiaojiao <xiaojiao@kaokeziliao.com>
Date: 星期四, 26 三月 2026 09:54:56 +0800
Subject: [PATCH] PDA优化选配确认页面

---
 项目代码/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/RGV/RgvDispatchJob.cs |   88 ++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 80 insertions(+), 8 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/RGV/RgvDispatchJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/RGV/RgvDispatchJob.cs"
index 2bb6297..d05e8e3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/RGV/RgvDispatchJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/RGV/RgvDispatchJob.cs"
@@ -30,13 +30,11 @@
     [DisallowConcurrentExecution]
     public partial class RgvDispatchJob : JobBase, IJob
     {
-
         /// <summary>
         /// RGV(鏈夎建灏忚溅)璋冨害
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-
         public Task Execute(IJobExecutionContext context)
         {
             return Task.Run(() =>
@@ -44,6 +42,9 @@
                 var executeLog = ExecuteJob(context, () => Run(context));
             });
         }
+        public static bool TempHK = false; // 鏄惁绌烘墭鐩樺洖搴撲紭鍏�
+        public static int HKNumber = 0;  // 绌烘墭鐩樺洖搴撶殑鏁伴噺 濡傛灉宸茬粡鍥炰簡鍥涗釜浜� 閭e氨涓嶈兘闄愬埗鍑哄簱鐨勪簡
+        string[] endStationNo = new string[] { "70101", "70103", "70104", "70106" };
         public string Run(IJobExecutionContext context)
         {
             using (VOLContext dbCcontext = new VOLContext())
@@ -70,11 +71,24 @@
                 List<int> currentLayer = new List<int>();
                 foreach (var item in rgvData.data)
                 {
+                    if (item.rgvId == "1")
+                    {
+                        client.WriteValue(CLineInfoDBName.RGV01.ToString(), item.status);
+                    }
+                    if (item.rgvId == "2")
+                    {
+                        client.WriteValue(CLineInfoDBName.RGV02.ToString(), item.status);
+                    }
+                    if (item.rgvId == "3")
+                    {
+                        client.WriteValue(CLineInfoDBName.RGV03.ToString(), item.status);
+                    }
                     //0绂荤嚎 1姝e父 2鏁呴殰
                     if (item.status != 1)
                         carCount++;
                     else
                         currentLayer.Add(item.layer);
+
                 }
                 if (carCount == 3)
                 {
@@ -144,10 +158,30 @@
                         {
                             //鎵嬪姩浠诲姟
                             if (rgvTask.rgvtask_wcsTaskNumber == 0 && rgvTask.rgvtask_taskId == "0")
+                            {
                                 SendRGVTaskAction(rgvTask, wcsInfo, taskRGVinfoRepository, taskWCSinfoRepository);
-                            else
-                                continue;
+                            }
+                            continue;
                         }
+
+                        // 杩欓噷鍔犱竴涓垽鏂紝姣斿鎴戞湁涓や釜浠诲姟鍘�70101 鎴戜换鍔鍏堜笅鍙� 鐞嗗簲鍏堝埌70101 浣嗗彲鑳戒换鍔鍙梤gv鎹㈠眰鐨勫奖鍝� 浠诲姟B 鍏堝埌鍑哄簱鍖虹殑缂撳瓨鏋� 瀵艰嚧B鍏堣繃鍘诲埌浜�70101閭h竟
+                        // 杩欓噷瑕佸垽鏂� 濡傛灉鎴戜换鍔鐨凴GV浠诲姟瑕佷笅鍙戠殑鏃跺�欙紝鍒ゆ柇鍓嶉潰鏄惁鏈変换鍔★紝濡傛灉鏈夛紝鍒ゆ柇杩欎釜浠诲姟鏄惁宸插埌杈剧紦瀛樻灦鎴栬�呮槸浠诲姟鍑哄簱杈撻�佺嚎鎵ц涓墠鑳戒笅鍙�
+                        if (endStationNo.Contains(wcsInfo.wcstask_endPoint)) // 璇佹槑鏄幓鍘嬭鍙扮殑
+                        {
+                            Dt_TaskWCSinfo WcsTask = taskWCSinfoRepository.FindFirst(x =>
+                            x.wcstask_endPoint == wcsInfo.wcstask_endPoint
+                            && x.wcstask_taskNumber != wcsInfo.wcstask_taskNumber
+                            && x.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString()
+                            && x.wcstask_state != TaskState.TaskState_Assigned.ToString()
+                            && x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
+                            && x.wcstask_state != TaskState.TaskState_HoisterExecuting.ToString()
+                            );
+                            if (WcsTask != null)
+                            {
+                                continue;
+                            }
+                        }
+
 
                         //鍐嶅仛涓�涓繚鎶わ紝鏌ョ湅瀵瑰簲鐨勬斁璐х珯鍙颁笂鏄湁鏈夎揣锛屽嵆璇诲彇绔欏彴鏄惁澶勪簬璐熻浇寰呮満鐨勭姸鎬侊紝濡傛灉鏄紝璇存槑鏈変笢瑗�
                         if (wcsInfo.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() ||
@@ -162,9 +196,44 @@
                             //绌挎杞︽斁璐х珯鍙�
                             string targetStation = wcsInfo.wcstask_endLocation;
                             //鍒ゆ柇鏈夊埌褰撳墠鏀捐揣浣嶇疆鐨勫氨涓嶆墽琛�
-                            Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_endPoint == targetStation && r.wcstask_id != wcsInfo.wcstask_id);
-                            if (null != executingTask)
+                            Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r =>
+                            r.wcstask_endPoint == targetStation
+                            && r.wcstask_id != wcsInfo.wcstask_id
+                            && r.wcstask_state != TaskState.TaskState_Assigned.ToString());
+
+                            if (null != executingTask) // 杩欎釜鍒ゆ柇涓昏鏄垽鏂┖鎵樼洏鍥炲簱鐨� 濡傛灉绌烘墭鐩樺洖搴撳埌60101 閭e嚭搴撳埌60101鐨勫氨涓嶈兘涓嬪彂
+                            {
                                 continue;
+                            }
+
+
+                            // 杩欓噷鑾峰彇涓�涓┖鎵樼洏鍥炲簱鐨勶紝濡傛灉鎴戠殑绌烘墭宸茬粡鍦ㄥ闈㈡帓闃熷緢闀夸簡 閭f垜灏变笉鑳戒笅鍙戝簱鐨勪换鍔′簡
+                            // 杩欓噷瑕佽鍙栦竴涓俊鍙� 
+                            int Return_Quantity = int.Parse(client.ReadValue(CLineInfoDBName.Return_Quantity.ToString()).ToString());
+                            if (Return_Quantity >= 8) // 鍙绌烘墭鐩樺湪璺笂鐨勬暟閲� >= 8 閭d箞鍥炵┖鎵樼洏鐨勪紭鍏堢骇灏辫鎻愰珮浜�
+                            {
+                                TempHK = true;
+                            }
+
+                            if (HKNumber == 4)
+                            {
+                                TempHK = false;
+                                HKNumber = 0;
+                            }
+
+                            if (TempHK)
+                            {
+                                if ((wcsInfo.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString() || wcsInfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
+                                    && wcsInfo.wcstask_state == TaskState.TaskState_Assigned.ToString()
+                                    && endStationNo.Contains(wcsInfo.wcstask_endPoint))
+                                {
+                                    continue;
+                                }
+                            }
+
+
+
+                            // 濡傛灉鍥涗釜绔欏彴鍚屾椂鏈夎礋杞斤紝閭f垜灏辫鎶婃垜鐨凾empHK 缁欒缃负True 褰撹缃负True浜� 鎴戝氨浼氳繘鍏ヤ竴涓潯浠�
 
                             //if (rgvTask.rgvtask_areaCode.Equals("OutboundArea"))
                             //{
@@ -185,7 +254,8 @@
                                     continue;
                                 else
                                 {
-                                    Dt_TaskRGVinfo currentTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_endNode == rgvTask.rgvtask_endNode && r.rgvtask_taskStatus != RGVTaskState.RgvTaskState_Wait_Send.ToString());
+                                    Dt_TaskRGVinfo currentTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_endNode == rgvTask.rgvtask_endNode
+                                    && r.rgvtask_taskStatus != RGVTaskState.RgvTaskState_Wait_Send.ToString());
                                     if (null != currentTask)
                                         continue;
                                 }
@@ -195,7 +265,7 @@
 
 
 
-                            //姝ゅ鏌ョ湅褰撳墠姝e湪杩涜鐨勬祴閲忎换鍔℃潯鏁帮紝闇�瑕佹帶鍒舵暟閲忥紝绾夸綋缂撳瓨鏁伴噺鏈夐檺锛屾祴閲忛渶瑕佹椂闂达紝鏆傚畾3涓�
+                            //姝ゅ鏌ョ湅褰撳墠姝e湪杩涜鐨勬祴閲忎换鍔℃潯鏁帮紝闇�瑕佹帶鍒舵暟閲忥紝绾夸綋缂撳瓨鏁伴噺鏈夐檺锛屾祴閲忛渶瑕佹椂闂达紝鏆傚畾2涓�
                             if (wcsInfo.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
                             {
                                 List<Dt_TaskWCSinfo> measureList = taskWCSinfoRepository.Find(x =>
@@ -207,6 +277,8 @@
                                     continue;
                                 }
                             }
+
+
                         }
                         SendRGVTaskAction(rgvTask, wcsInfo, taskRGVinfoRepository, taskWCSinfoRepository);
                     }

--
Gitblit v1.9.3