From 83109bffe17f4cf877bb9546065723835a3c6b7d Mon Sep 17 00:00:00 2001
From: lss <Lss@HanInfo>
Date: 星期三, 18 六月 2025 17:30:38 +0800
Subject: [PATCH] 货位禁用添加,国自安全交互流程变更

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs |  209 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 127 insertions(+), 82 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
index 95b74ba..ac7cbf3 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
@@ -38,12 +38,12 @@
 
 
         public static object _lockCreateTask = new object();
+        public static object _lockCreateItem = new object();
         /// <summary>
         /// 绔嬪簱浠诲姟涓嬪彂=銆嬪垱寤轰换鍔�         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-
         internal static Result Createtask(CreateTask model)
         {
             Result result = new Result() { code = "0", msg = "鍒涘缓鎴愬姛" };
@@ -170,10 +170,10 @@
                         if (startloc != null)
                         {
                             Start = startloc.S_CODE;
-                            var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).FirstOrDefault();
+                            var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).OrderBy(a => a.T_CREATE).FirstOrDefault();
                             if (CntrRel != null)
                             {
-                                if (CntrRel.S_CNTR_CODE!= partData.rfid)
+                                if (CntrRel.S_CNTR_CODE != partData.rfid)
                                 {
                                     result.code = "1";
                                     result.msg = $"鏍规嵁璧风偣锛歿Start}鑾峰彇鎵樼洏:{CntrRel.S_CNTR_CODE}涓庝笅鍙戞墭鐩橈細{partData.rfid}涓嶄竴鑷达紝璇锋鏌ユ墭鐩樼爜鏄惁姝g‘";
@@ -184,7 +184,7 @@
                                 {
                                     CntrCode = CntrRel.S_CNTR_CODE;
                                 }
-                                   
+
                             }
                             //else
                             //{
@@ -693,23 +693,63 @@
             try
             {
                 string[] state = new string[] { "鍙栨秷", "澶辫触", "閿欒", "瀹屾垚" };
-                //鎵惧埌浠诲姟
-                var task = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO.Trim() == model.task_no && !state.Contains(a.S_B_STATE)).First();
-                if (task != null)
+                if (model.type == "1")
                 {
-                    if (model.type == "1" || model.type == "2")
+                    //鎵惧埌浠诲姟
+                    var task = db.Queryable<WCSTask>().Where(a => a.S_START_LOC.Trim() == model.loc && !state.Contains(a.S_B_STATE)).ToList();
+                    if (task.Count > 0)
                     {
-                        NDCApi.ChangeOrderParam(task.S_CODE.Trim(), 6, "1");
+                        foreach (var item in task)
+                        {
+                            var taskAction = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == item.S_CODE).OrderByDescending(a => a.T_CREATE).First();
+                            if (taskAction.N_ACTION_CODE == 1101)
+                            {
+                                NDCApi.ChangeOrderParam(item.S_CODE.Trim(), 6, "1");
+                                return result;
+                            }
+                            result.code = "1";
+                            result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴旂敵璇峰彇璐х姸鎬佷换鍔�;
+                            AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no);
+                            return result;
+                        }
                     }
-
+                    else
+                    {
+                        result.code = "1";
+                        result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴斾换鍔�;
+                        AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no);
+                        return result;
+                    }
                 }
-                else
+                else if (model.type == "2")
                 {
-                    result.code = "1";
-                    result.msg = $"鏍规嵁涓嬪彂浠诲姟鍙穥model.task_no}鏈壘鍒板搴斾换鍔�;
-                    AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no);
-                    return result;
+                    //鎵惧埌浠诲姟
+                    var task = db.Queryable<WCSTask>().Where(a => a.S_END_LOC.Trim() == model.loc && !state.Contains(a.S_B_STATE)).ToList();
+                    if (task.Count > 0)
+                    {
+                        foreach (var item in task)
+                        {
+                            var taskAction = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == item.S_CODE).OrderByDescending(a => a.T_CREATE).First();
+                            if (taskAction.N_ACTION_CODE == 1103)
+                            {
+                                NDCApi.ChangeOrderParam(item.S_CODE.Trim(), 6, "1");
+                                return result;
+                            }
+                        }
+                        result.code = "1";
+                        result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴旂敵璇峰嵏璐х姸鎬佷换鍔�;
+                        AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no);
+                        return result;
+                    }
+                    else
+                    {
+                        result.code = "1";
+                        result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴斾换鍔�;
+                        AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no);
+                        return result;
+                    }
                 }
+
                 return result;
             }
             catch (Exception ex)
@@ -729,6 +769,7 @@
         /// <returns></returns>
         internal static Result TrayItembind(TrayItembind model)
         {
+
             Result result = new Result() { code = "200", msg = "浜у嚭淇℃伅涓嬪彂鎴愬姛" };
             if (model == null)
             {
@@ -737,29 +778,34 @@
                 AddErrorInfo("鍙傛暟涓虹┖", result.msg);
                 return result;
             }
-            try
+            lock (_lockCreateItem)
             {
-                //鍒涘缓鎵樼洏鏁版嵁缁戝畾鍏崇郴
-                if (ContainerHelper.CreateCntrItem(model.Rfid, model.PartNumber, model.PartDesc, model.LotNumber, model.Weight, model.Qty, model.ProductionTime, model.MaturityTime))
+                try
                 {
-                    //鍒涘缓鎴愬姛娴佺▼
-                }
-                else
-                {
-                    result.code = "1";
-                    result.msg = "浜у嚭淇℃伅涓嬪彂澶辫触锛屾墭鐩樼墿鏂欑粦瀹氬叧绯诲垱寤哄け璐�;
-                    AddErrorInfo("鍒涘缓缁戝畾鍏崇郴澶辫触", result.msg, "Mes");
+
+                    //鍒涘缓鎵樼洏鏁版嵁缁戝畾鍏崇郴
+                    if (ContainerHelper.CreateCntrItem(model.Rfid, model.PartNumber, model.PartDesc, model.LotNumber, model.Weight, model.Qty, model.ProductionTime, model.MaturityTime))
+                    {
+                        //鍒涘缓鎴愬姛娴佺▼
+                    }
+                    else
+                    {
+                        result.code = "1";
+                        result.msg = "浜у嚭淇℃伅涓嬪彂澶辫触锛屾墭鐩樼墿鏂欑粦瀹氬叧绯诲垱寤哄け璐�;
+                        AddErrorInfo("鍒涘缓缁戝畾鍏崇郴澶辫触", result.msg, "Mes");
+                        return result;
+                    }
                     return result;
                 }
-                return result;
+                catch (Exception ex)
+                {
+                    result.code = "1";
+                    result.msg = ex.ToString();
+                    LogHelper.Error("TrayItembind Error锛� + ex.ToString(), ex);
+                    return result;
+                }
             }
-            catch (Exception ex)
-            {
-                result.code = "1";
-                result.msg = ex.ToString();
-                LogHelper.Error("TrayItembind Error锛� + ex.ToString(), ex);
-                return result;
-            }
+
 
 
         }
@@ -874,13 +920,8 @@
                         return result;
                     }
 
-                    //鍒ゆ柇鏈夋棤鐩稿悓鐗╂枡鎺�                     loc = StorageCompute(itemcode, areacode);
-                    //if (loc == null)
-                    //{
-                    //    //鏃犵浉鍚岀墿鏂欐帓鎵剧┖鎺�-                    //    loc = emptyRow(areacode);
-                    //}
+
                     if (loc != null)
                     {
                         End = loc.S_CODE;
@@ -1219,7 +1260,7 @@
                         if (startloc.N_LAYER == 3)
                         {
                             //鍙犵洏璐т綅璁$畻鍙犵洏璐т綅
-                            var dploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鍙犵洏" && a.N_LAYER == startloc.N_LAYER && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList();
+                            var dploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鍙犵洏" && a.N_LAYER == startloc.N_LAYER && a.S_WH_CODE.Trim() == startloc.S_WH_CODE && a.C_ENABLE == "Y").ToList();
                             if (dploc.Count > 0)
                             {
                                 // LogHelper.Info($"鑾峰彇鍙犵洏璐т綅:{JsonConvert.SerializeObject(dploc)}");
@@ -1250,7 +1291,7 @@
                         else if (startloc.S_NOTE == "PB")
                         {
                             //鎵惧潡鑳跺爢鍙犲尯
-                            var KjDploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鐗囪兌鍫嗗彔浣� && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList();
+                            var KjDploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鐗囪兌鍫嗗彔浣� && a.S_WH_CODE.Trim() == startloc.S_WH_CODE && a.C_ENABLE == "Y").ToList();
                             if (KjDploc.Count > 0)
                             {
                                 loc = KjDploc.FindAll(a => a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM < 6).OrderByDescending(a => a.N_CURRENT_NUM).FirstOrDefault();
@@ -1644,7 +1685,7 @@
                     }
                     else
                     {
-                        if (db.Updateable(new LocCntrRel() { S_CNTR_CODE = model.Rfid, S_LOC_CODE = Start }).UpdateColumns().ExecuteCommand() <= 0)
+                        if (db.Insertable(new LocCntrRel() { S_CNTR_CODE = model.Rfid, S_LOC_CODE = Start }).ExecuteCommand() <= 0)
                         {
                             result.code = "1";
                             result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾璐т綅{Start}澶辫触";
@@ -1703,7 +1744,6 @@
                             {
                                 //loc =  EndLocs.Find(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0);
                                 loc = FindEndcolByLocList(EndLocs);
-
 
                             }
                             else
@@ -2094,7 +2134,7 @@
 
                 var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.Data.start_loc_code).First();
 
-                var endloc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == model.Data.end_loc_code && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0).First();
+                var endloc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == model.Data.end_loc_code && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
 
 
                 //鍒ゆ柇妤煎眰鏄惁鐩哥瓑锛屽鏋滀笉鐩稿悓闇�鐢熸垚鍒嗘浠诲姟杩涜鐢垫璋冪敤
@@ -2153,8 +2193,8 @@
                         Z_TYPE = 6
                     };
 
-                
-                    if (WCSHelper.CreateTask(wcsTask) )
+
+                    if (WCSHelper.CreateTask(wcsTask))
                     {
                         LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
                         var device = Settings.deviceInfos.Where(a => a.TN_Location == startloc.S_CODE).FirstOrDefault();
@@ -2167,7 +2207,7 @@
                         {
                             LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{endloc.S_CODE},鏈壘鍒板搴旇揣浣�);
                         }
-                        if (device!=null&&loc!=null)
+                        if (device != null && loc != null)
                         {
                             int value = 0;
                             if (loc.N_LAYER == 1) value = 1;
@@ -2177,10 +2217,10 @@
                             ModbusHelper.WriteSingleRegister(40089, value, device.address, 1024);
                             ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
                         }
-                       
+
                         //LocationHelper.LockLoc(startloc.S_CODE, 2);
                         //LocationHelper.LockLoc(endloc.S_CODE, 1);
-                     
+
                     }
                     else
                     {
@@ -2298,54 +2338,59 @@
             }
             string loc = model.LocationNum;
             var db = new SqlHelper<object>().GetInstance();
-            try
+            lock (_lockCreateItem)
             {
-                var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First();
-                if (location != null)
+                try
                 {
-                    var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).First();
-
-                    if (loccntr != null)
+                    var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First();
+                    if (location != null)
                     {
-                        string cntrcode = loccntr.S_CNTR_CODE;
-                        var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First();
-                        if (CntrItem != null)
+                        var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).First();
+
+                        if (loccntr != null)
                         {
-                            //娓呴櫎鎵樼洏鐗╂枡缁戝畾鍏崇郴
-                            db.Deleteable<CntrItemDetail>().Where(it => it.S_CNTR_CODE.Trim() == CntrItem.S_CNTR_CODE).ExecuteCommand();
+                            string cntrcode = loccntr.S_CNTR_CODE;
+                            var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First();
+                            if (CntrItem != null)
+                            {
+                                //娓呴櫎鎵樼洏鐗╂枡缁戝畾鍏崇郴
+                                db.Deleteable<CntrItemDetail>().Where(it => it.S_CNTR_CODE.Trim() == CntrItem.S_CNTR_CODE).ExecuteCommand();
+                            }
+                            else
+                            {
+                                LogHelper.Info($"ClearLocCntr 鎵樼洏{cntrcode}鏃犵墿鏂欑粦瀹氬叧绯�);
+                            }
+                            if (LocationHelper.UnBindingLoc(loc, new List<string>() { cntrcode }))
+                            {
+                                LogHelper.Info($"娓呴櫎鎵樼洏璐т綅鍏崇郴鎴愬姛");
+                            }
+
                         }
                         else
                         {
-                            LogHelper.Info($"ClearLocCntr 鎵樼洏{cntrcode}鏃犵墿鏂欑粦瀹氬叧绯�);
+                            LogHelper.Info($"ClearLocCntr 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�);
                         }
-                        if (LocationHelper.UnBindingLoc(loc, new List<string>() { cntrcode }))
-                        {
-                            LogHelper.Info($"娓呴櫎鎵樼洏璐т綅鍏崇郴鎴愬姛");
-                        }
-
                     }
                     else
                     {
-                        LogHelper.Info($"ClearLocCntr 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�);
+                        result.code = "1";
+                        result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�;
+                        AddErrorInfo("璐т綅涓虹┖", result.msg, Source);
+                        return result;
                     }
                 }
-                else
+                catch (Exception ex)
                 {
+                    LogHelper.Info($"ClearLocCntr Error锛歿ex}");
+                    db.Ado.CommitTran();
                     result.code = "1";
-                    result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�;
-                    AddErrorInfo("璐т綅涓虹┖", result.msg, Source);
+                    result.msg = $"Error锛歿ex}";
                     return result;
+
                 }
             }
-            catch (Exception ex)
-            {
-                LogHelper.Info($"ClearLocCntr Error锛歿ex}");
-                db.Ado.CommitTran();
-                result.code = "1";
-                result.msg = $"Error锛歿ex}";
-                return result;
-
-            }
+          
+        
 
             return result;
         }
@@ -2542,7 +2587,7 @@
         internal static Location StorageCompute(string itemcode, string areacode)
         {
             var db = new SqlHelper<object>().GetInstance();
-            Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).First();
+            Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
             //鏌ヨ鎵�湁鏈夋墭鐩樼殑鎺掓病閿佺殑鎺�             // var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
             // if (list.Count > 0)
@@ -2739,7 +2784,7 @@
 
             lock (_lockLocation)
             {
-                var loc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.S_NOTE == cntrType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First();
+                var loc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.S_NOTE == cntrType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y").First();
                 if (loc != null)
                 {
                     End = loc;
@@ -2812,7 +2857,7 @@
                         Location other = null;
                         //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆
                         //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴灞傝涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�-                        other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0).FirstOrDefault();
+                        other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").FirstOrDefault();
                         //if (full == null)
                         //{
                         //    //娌℃湁婊′綅锛岄偅灏辨壘鏈�皬鐨勭┖浣�
--
Gitblit v1.9.1