From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期五, 13 六月 2025 17:21:03 +0800
Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs |  229 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 115 insertions(+), 114 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
index 911da84..959c9e7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
@@ -134,7 +134,13 @@
                             EndLocGroup endLocGroup = null;
                             if (barcodeList.Count > 0) 
                             {
-                               endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count);
+                               string itemCode = null;
+                               var cntrItemRels = ContainerHelper.GetCntrItemRel(barcodeList[0].rfid);
+                               if (cntrItemRels.Count > 0) 
+                               {
+                                    itemCode = cntrItemRels[0].S_ITEM_CODE;
+                               }
+                               endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count, itemCode);
                             }
 
                             foreach (var ext in extData)
@@ -365,126 +371,120 @@
         {
             ResponseResult response = new ResponseResult();
 
-            //鍙傛暟鏍¢獙
-            if (model.locCodes.Count == 0) 
+            int locNum = model.locCodes.Count;
+            if (locNum > 0) 
             {
-                string msg = $"纭寲鏈猴細{model.mcn}鍛煎彨鑳氳儙鍑哄簱锛屽弬鏁版牎楠屽け璐ワ紝缂哄皯璐т綅淇℃伅";
-                LogHelper.Info(msg, "WMS");
-                response.code = 1;
-                response.msg = msg;
-                return response;
-            }
-
-            // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�-            WCSTask existTask = WCSHelper.GetTaskByEqNo(model.mcn);
-            if (existTask == null)
-            {
-                // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝
-                var currentTime = DateTime.Now;
-                var shift = getShift(currentTime.TimeOfDay);
-                var dateShift = DateTime.Now.ToString("dd/MM/yyyy");
-                TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00
-                if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start)
+                Location prevLoc = null;
+                Dictionary<string,Location> outLocDic = new Dictionary<string,Location>();
+                foreach (var mcn in model.locCodes)
                 {
-                    dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy");
+                    // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�+                    var existTask = WCSHelper.GetTaskByEnd(mcn);
+                    if (existTask.Count == 0) 
+                    {
+                        // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝
+                        var currentTime = DateTime.Now;
+                        var shift = getShift(currentTime.TimeOfDay);  // 鐝
+                        var dateShift = currentTime.ToString("dd/MM/yyyy");
+                        TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00
+                        if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start)
+                        {
+                            dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy");
+                        }
+
+                        // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ 纭寲鏈哄伐鍗�涓殑鐗╂枡缂栫爜銆侀璁$敓浜ф暟閲�+                        var productionShedule = WMSHelper.getProductionShedule(dateShift, mcn, shift);
+
+                        if (productionShedule != null && productionShedule.QTY != 0)
+                        {
+                            // 4鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺
+                            int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, mcn, shift);
+                            if (productionShedule.QTY > finishNum)
+                            {
+                                // 5.鍑哄簱绛栫暐 1.浼樺厛鏌ヨ鍓嶄竴鎷栬揣浣嶇殑宸﹀彸涓よ竟鏄惁婊¤冻鏉′欢  2.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
+                                var startLoc = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE, prevLoc);
+                                if (startLoc != null) 
+                                {
+                                    outLocDic.Add(mcn, startLoc);
+                                    prevLoc = startLoc;
+                                }
+                            }
+                        }
+                    }
                 }
 
-                // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ鍛煎彨鐨勭墿鏂欑紪鐮併�棰勮鐢熶骇鏁伴噺
-                var productionShedule = WMSHelper.getProductionShedule(dateShift, model.mcn, shift);
-                if (productionShedule != null && productionShedule.QTY != 0)
+                // 6.鍒ゆ柇鍑哄簱璐т綅鏄惁鏄悓涓�贩閬擄紝鍚屼竴宸烽亾鐢熸垚浠诲姟缁勫彿
+                string groupNo = null;
+                if (outLocDic.Count > 1) 
                 {
-                    // 4.鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺
-                    int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, model.mcn, shift);
-
-                    if (productionShedule.QTY > finishNum)
+                    var groupNum = outLocDic.Select(a => a.Value).ToList().GroupBy(a => a.N_ROADWAY).Count();
+                    if (groupNum == 1) 
                     {
-                        // 5.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
-                        int locNum = model.locCodes.Count;
-                        var startLocData = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE,locNum);
-                        if (startLocData.startLocList != null && startLocData.startLocList.Count == locNum)
+                        groupNo = GenerateTaskGroupNo();
+                    }
+                }
+
+                // 7.鐢熸垚鍑哄簱浠诲姟
+                if (outLocDic.Count > 0) 
+                {
+                    foreach (var item in outLocDic)
+                    {
+                        Location endLoc = LocationHelper.GetLoc(item.Key);
+                        Location startLoc = item.Value;
+                        if (endLoc != null)
                         {
-                            var startLocList = startLocData.startLocList;
-                            for (int i = 0; i < locNum; i++)
+                            var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                            if (locCntrRels != null && locCntrRels.Count > 0)
                             {
-                                Location startLoc = startLocList[i];
-                                Location endLoc =  LocationHelper.GetLoc(model.locCodes[i]);
-                                if (endLoc != null) 
+                                var wmsTask = new WMSTask()
                                 {
-                                    var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
-                                    if (locCntrRels != null && locCntrRels.Count > 0) 
+                                    S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                                    S_CODE = WMSHelper.GenerateTaskNo(),
+                                    S_START_LOC = startLoc.S_CODE,
+                                    S_START_AREA = startLoc.S_AREA_CODE,
+                                    S_END_LOC = endLoc.S_CODE,
+                                    S_END_AREA = endLoc.S_AREA_CODE,
+                                    S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟",
+                                    S_OP_DEF_CODE = model.reqId,
+                                    S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�,
+                                    N_PRIORITY = 1,
+                                    T_START_TIME = DateTime.Now,
+                                    S_GROUP_NO = groupNo,
+                                };
+                                if (WMSHelper.CreateWmsTask(wmsTask))
+                                {
+                                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                                    WCSTask wcsTask = new WCSTask()
                                     {
-                                        var wmsTask = new WMSTask()
-                                        {
-                                            S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
-                                            S_CODE = WMSHelper.GenerateTaskNo(),
-                                            S_START_LOC = startLoc.S_CODE,
-                                            S_START_AREA = startLoc.S_AREA_CODE,
-                                            S_END_LOC = endLoc.S_CODE,
-                                            S_END_AREA = endLoc.S_AREA_CODE,
-                                            S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟",
-                                            S_OP_DEF_CODE = model.reqId,
-                                            S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�,
-                                            N_PRIORITY = 1,
-                                            T_START_TIME = DateTime.Now,
-                                            S_GROUP_NO = startLocData.groupNo,
-                                        };
-                                        if (WMSHelper.CreateWmsTask(wmsTask))
-                                        {
-                                            // 鍒涘缓涓�鍏ュ簱浠诲姟
-                                            WCSTask wcsTask = new WCSTask()
-                                            {
-                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                                S_OP_CODE = wmsTask.S_CODE,
-                                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                                                S_TYPE = wmsTask.S_TYPE,
-                                                S_START_LOC = startLoc.S_CODE,
-                                                S_START_AREA = startLoc.S_AREA_CODE,
-                                                S_END_LOC = endLoc.S_CODE,
-                                                S_END_AREA = endLoc.S_AREA_CODE,
-                                                S_SCHEDULE_TYPE = "WCS",
-                                                N_PRIORITY = 1,
-                                                T_START_TIME = DateTime.Now,
-                                            };
+                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                        S_OP_CODE = wmsTask.S_CODE,
+                                        S_CODE = WCSHelper.GenerateTaskNo(),
+                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                        S_TYPE = wmsTask.S_TYPE,
+                                        S_START_LOC = startLoc.S_CODE,
+                                        S_START_AREA = startLoc.S_AREA_CODE,
+                                        S_END_LOC = endLoc.S_CODE,
+                                        S_END_AREA = endLoc.S_AREA_CODE,
+                                        S_SCHEDULE_TYPE = "WCS",
+                                        N_PRIORITY = 1,
+                                        T_START_TIME = DateTime.Now,
+                                    };
 
-                                            if (WCSHelper.CreateTask(wcsTask))
-                                            {
-                                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�-                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
-                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                                    if (WCSHelper.CreateTask(wcsTask))
+                                    {
+                                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
 
-                                                // 鏇存柊浣滀笟浠诲姟鐘舵�
-                                                wmsTask.N_B_STATE = 1;
-                                                WMSHelper.UpdateTaskState(wmsTask);
-                                            }
-                                        }
+                                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                        wmsTask.N_B_STATE = 1;
+                                        WMSHelper.UpdateTaskState(wmsTask);
                                     }
                                 }
                             }
                         }
-                        else 
-                        {
-                            string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�;
-                            LogHelper.Info(msg, "WMS");
-                            response.code = 1;
-                            response.msg = msg;
-                        }
-                    }
-                    else
-                    {
-                        string msg = $"纭寲鏈�{model.mcn}鐨勫綋鍓嶇彮娆′换鍔″凡瀹屾垚锛屽仠姝㈠彨鏂�;
-                        LogHelper.Info(msg, "WMS");
-                        response.code = 1;
-                        response.msg = msg;
                     }
                 }
-            }
-            else 
-            {
-                string msg = $"纭寲鏈猴細{model.mcn}鐨勫瓨鍦ㄦ鍦ㄦ墽琛屼腑鐨勪换鍔★紝璇峰嬁閲嶅鍙枡";
-                LogHelper.Info(msg, "WMS");
-                response.code = 1;
-                response.msg = msg;
             }
             return response;
         }
@@ -498,7 +498,7 @@
         {
             ResponseResult response = new ResponseResult();
             Location startLoc = LocationHelper.GetLoc(model.startLoc);
-            var endLocGroup = WMSHelper.getInStockEndLoc(1);
+            var endLocGroup = WMSHelper.getInStockEndLoc(1,null);
             if (endLocGroup.endLocList.Count == 1)
             {
                 Location endLoc = endLocGroup.endLocList[0];
@@ -562,11 +562,10 @@
         public static ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model) 
         {
             ResponseResult responseResult = new ResponseResult();
-            Location endLoc = LocationHelper.GetLoc(model.endLoc);
-            var startLocData = WMSHelper.getOutStockStartLoc(null, 1);
-            if (startLocData.startLocList != null && startLocData.startLocList.Count == 1)
+            Location startLoc = WMSHelper.getOutStockStartLoc(null);
+            if (startLoc != null) 
             {
-                Location startLoc = startLocData.startLocList[0];
+                Location endLoc = LocationHelper.GetLoc(model.endLoc);
                 if (endLoc != null)
                 {
                     var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
@@ -584,8 +583,7 @@
                             S_OP_DEF_CODE = model.reqId,
                             S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱",
                             N_PRIORITY = 1,
-                            T_START_TIME = DateTime.Now,
-                            S_GROUP_NO = startLocData.groupNo,
+                            T_START_TIME = DateTime.Now
                         };
                         if (WMSHelper.CreateWmsTask(wmsTask))
                         {
@@ -619,13 +617,16 @@
                         }
                     }
                 }
+                else 
+                {
+                    responseResult.code = 1;
+                    responseResult.msg = $"缁堢偣璐т綅:{model.endLoc}鍦╓MS绯荤粺涓笉瀛樺湪";
+                }
             }
-            else
+            else 
             {
-                string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�;
-                LogHelper.Info(msg, "WMS");
                 responseResult.code = 1;
-                responseResult.msg = msg;
+                responseResult.msg = "搴撳唴绌烘墭涓嶈冻";
             }
             return responseResult;
         }

--
Gitblit v1.9.1