From cee2bc19f3e1b0cf528affb23e3819bf94672eea Mon Sep 17 00:00:00 2001
From: lss <2538410689@qq.com>
Date: 星期五, 27 六月 2025 00:35:21 +0800
Subject: [PATCH] 优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs |  557 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 318 insertions(+), 239 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 d9a1195..bd476cd 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
@@ -12,6 +12,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Reflection.Emit;
+using System.Runtime.CompilerServices;
 using System.ServiceModel;
 using System.Threading;
 using System.Threading.Tasks;
@@ -37,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 = "鍒涘缓鎴愬姛" };
@@ -169,10 +170,21 @@
                         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)
                             {
-                                CntrCode = CntrRel.S_CNTR_CODE;
+                                if (CntrRel.S_CNTR_CODE != partData.rfid)
+                                {
+                                    result.code = "1";
+                                    result.msg = $"鏍规嵁璧风偣锛歿Start}鑾峰彇鎵樼洏:{CntrRel.S_CNTR_CODE}涓庝笅鍙戞墭鐩橈細{partData.rfid}涓嶄竴鑷达紝璇锋鏌ユ墭鐩樼爜鏄惁姝g‘";
+                                    AddErrorInfo("鎵樼洏鐮佹牎妫�け璐�, result.msg, Source);
+                                    return result;
+                                }
+                                else
+                                {
+                                    CntrCode = CntrRel.S_CNTR_CODE;
+                                }
+
                             }
                             //else
                             //{
@@ -717,6 +729,7 @@
         /// <returns></returns>
         internal static Result TrayItembind(TrayItembind model)
         {
+
             Result result = new Result() { code = "200", msg = "浜у嚭淇℃伅涓嬪彂鎴愬姛" };
             if (model == null)
             {
@@ -725,29 +738,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;
-            }
+
 
 
         }
@@ -862,13 +880,9 @@
                         return result;
                     }
 
-                    //鍒ゆ柇鏈夋棤鐩稿悓鐗╂枡鎺�+
                     loc = StorageCompute(itemcode, areacode);
-                    //if (loc == null)
-                    //{
-                    //    //鏃犵浉鍚岀墿鏂欐帓鎵剧┖鎺�-                    //    loc = emptyRow(areacode);
-                    //}
+
                     if (loc != null)
                     {
                         End = loc.S_CODE;
@@ -1012,6 +1026,10 @@
                         areacode = whcode.PMK;
                         cntrType = "PM";
                     }
+                    else if (model.PartNumber.StartsWith("32"))
+                    {
+                        areacode = whcode.ZCW2;
+                    }
                     else
                     {
                         if (model.PartNumber.StartsWith("3"))
@@ -1076,56 +1094,60 @@
                 #endregion
 
                 #region 浠诲姟鍒涘缓
-                if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End))
+                if (string.IsNullOrEmpty(Start))
                 {
-                    if (loc.N_LOCK_STATE != 0)
-                    {
-                        result.code = "1";
-                        result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋Start}鏈夐攣";
-                        AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
-                        return result;
-                    }
-                    //鍒涘缓wcs浠诲姟
-                    var wcsTask = new WCSTask
-                    {
-                        S_CODE = WCSHelper.GenerateTaskNo(),
-                        S_TYPE = "鍑哄钩搴�,
-                        S_EQ_NO = model.TaskNumber,
-                        S_START_LOC = Start,
-                        S_END_LOC = End,
-                        S_START_WH = loc.S_WH_CODE,
-                        S_START_AREA = loc.S_AREA_CODE,
-                        S_END_WH = Endloc.S_WH_CODE,
-                        S_END_AREA = Endloc.S_AREA_CODE,
-                        N_CNTR_COUNT = 1,
-                        N_SCHEDULE_TYPE = 1,
-                        S_CNTR_CODE = CntrCode,
-                        N_START_LAYER = 1,
-                        N_END_LAYER = 1,
-                        Z_TYPE = n_type
+                    result.code = "1";
+                    result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣";
+                    return result;
+                }
+                if (string.IsNullOrEmpty(End))
+                {
+                    result.code = "1";
+                    result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫嵏璐х偣";
+                    return result;
+                }
+                if (loc.N_LOCK_STATE != 0)
+                {
+                    result.code = "1";
+                    result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋Start}鏈夐攣";
+                    AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
+                    return result;
+                }
+                //鍒涘缓wcs浠诲姟
+                var wcsTask = new WCSTask
+                {
+                    S_CODE = WCSHelper.GenerateTaskNo(),
+                    S_TYPE = "鍑哄钩搴�,
+                    S_EQ_NO = model.TaskNumber,
+                    S_START_LOC = Start,
+                    S_END_LOC = End,
+                    S_START_WH = loc.S_WH_CODE,
+                    S_START_AREA = loc.S_AREA_CODE,
+                    S_END_WH = Endloc.S_WH_CODE,
+                    S_END_AREA = Endloc.S_AREA_CODE,
+                    N_CNTR_COUNT = 1,
+                    N_SCHEDULE_TYPE = 1,
+                    S_CNTR_CODE = CntrCode,
+                    N_START_LAYER = 1,
+                    N_END_LAYER = 1,
+                    Z_TYPE = n_type
 
-                    };
-                    LogHelper.Info("鍒涘缓鍑哄钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
-                    if (WCSHelper.CreateTask(wcsTask))
-                    {
-                        LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
-                        //LocationHelper.LockLoc(Start, 2);
-                        //LocationHelper.LockLoc(End, 1);
-                    }
-                    else
-                    {
-                        result.code = "1";
-                        result.msg = $"浠诲姟鍒涘缓澶辫触";
-                        AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
-                        return result;
-                    }
+                };
+                LogHelper.Info("鍒涘缓鍑哄钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
+                if (WCSHelper.CreateTask(wcsTask))
+                {
+                    LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                    //LocationHelper.LockLoc(Start, 2);
+                    //LocationHelper.LockLoc(End, 1);
                 }
                 else
                 {
                     result.code = "1";
-                    result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣";
+                    result.msg = $"浠诲姟鍒涘缓澶辫触";
+                    AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
                     return result;
                 }
+
                 #endregion
 
                 return result;
@@ -1173,36 +1195,48 @@
             {
                 lock (_lockEmpty)
                 {
-                    #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�-                    //var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
-                    //if (CntrLoc != null)
-                    //{
-                    //    if (CntrLoc.S_LOC_CODE != Start)
-                    //    {
-                    //        LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}");
-                    //        result.code = "1";
-                    //        result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}";
-                    //        AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg);
-                    //        return result;
-                    //    }
-                    //}
-                    //else
-                    //{
-                    //    LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�);
-                    //    result.code = "1";
-                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�;
-                    //    AddErrorInfo("鏌ユ壘鎵樼洏璐т綅澶辫触", result.msg);
-                    //    return result;
-                    //}
-                    #endregion
+
 
                     #region 鏍规嵁璐т綅妤煎眰鍒ゆ柇锛�妤煎幓寰�彔鐩樹綅 鍏朵粬鐨勫洖搴�                     var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First();
                     if (startloc != null)
                     {
-                        if (startloc.N_LAYER == 3)
+                        if (!string.IsNullOrEmpty(startloc.S_NOTE1))
                         {
                             //鍙犵洏璐т綅璁$畻鍙犵洏璐т綅
+                            // 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();
+                            var dploc = db.Queryable<Location>().Where(a => a.S_NOTE1.Trim() == startloc.S_NOTE1 + "鍙犵洏" && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList();
+                            if (dploc.Count > 0)
+                            {
+                                // LogHelper.Info($"鑾峰彇鍙犵洏璐т綅:{JsonConvert.SerializeObject(dploc)}");
+                                loc = dploc.FindAll(a => a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM < 6).OrderByDescending(a => a.N_CURRENT_NUM).FirstOrDefault();
+                                if (loc == null)
+                                {
+                                    LogHelper.Info($"{startloc.S_NOTE1}鍙犵洏浣嶏紝閮藉凡缁忔湁閿佹垨鑰呭凡缁忓彔婊★紝璇锋鏌ヨ揣浣嶇姸鎬�);
+                                    result.code = "1";
+                                    result.msg = $"{startloc.S_NOTE1}鍙犵洏璐т綅涓嶅彲鐢紝缁堢偣搴撳尯娌℃湁鍙敤璐т綅锛岃妫�煡閿佺姸鎬佸拰鏁伴噺";
+                                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                                    return result;
+                                }
+                                else
+                                {
+                                    endlayer = loc.N_CURRENT_NUM + 1;
+                                }
+                            }
+                            else
+                            {
+                                // LogHelper.Info($"鏍规嵁璐т綅妤煎眰锛歿startloc.N_LAYER}锛屼粨搴撶紪鐮侊細{startloc.S_WH_CODE}锛岃揣浣嶅娉細鍙犵洏锛屾湭鎵惧埌鍙犵洏璐т綅");
+                                result.code = "1";
+                                result.msg = $"{startloc.S_NOTE1}鍙犵洏璐т綅涓嶅彲鐢紝鏈壘鍒板彲鍙犵洏璐т綅";
+                                LogHelper.Info($"鏍规嵁璐т綅澶囨敞锛歿startloc.S_NOTE1}鍙犵洏锛岃揣浣嶄粨搴�{startloc.S_WH_CODE}锛屾壘涓嶅埌鍙犵洏璐т綅");
+                                AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
+                                return result;
+                            }
+                        }
+                        else 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 && a.C_ENABLE == "Y").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).ToList();
                             if (dploc.Count > 0)
                             {
@@ -1234,6 +1268,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 && a.C_ENABLE == "Y").ToList();
                             var KjDploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鐗囪兌鍫嗗彔浣� && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList();
                             if (KjDploc.Count > 0)
                             {
@@ -1286,15 +1321,14 @@
                             loc = StorageCompute(itemcode, areacode);
                             if (loc == null)
                             {
-                                loc = emptyRow(areacode);
-                                if (loc == null)
-                                {
-                                    result.code = "1";
-                                    result.msg = $"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅";
-                                    LogHelper.Info($" {result.msg}");
-                                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                                    // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅");
-                                }
+
+                                result.code = "1";
+                                result.msg = $"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅";
+                                LogHelper.Info($" {result.msg}");
+                                AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                                return result;
+                                // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅");
+
                             }
                             //else
                             //{
@@ -1319,7 +1353,7 @@
                     }
                     #endregion
 
-                    #region 鍒涘缓浠诲姟
+                    #region 鍒涘缓浠诲姟   
                     if (startloc != null && loc != null)
                     {
                         if (startloc.N_LOCK_STATE != 0 && loc.N_LOCK_STATE != 0)
@@ -1329,6 +1363,7 @@
                             AddErrorInfo("璐т綅鏈夐攣", result.msg);
                             return result;
                         }
+                        LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅涓虹┖锛� + JsonConvert.SerializeObject(loc));
                         //鍒涘缓wcs浠诲姟
                         var wcsTask = new WCSTask
                         {
@@ -1356,6 +1391,12 @@
                             //  绌烘墭鍥炲簱鍒ゆ柇鎵樼洏鏈夋棤缁戝畾鐗╂枡淇℃伅 濡傛灉鏈夊垯鍒犻櫎
                             var itemcntr = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
                             if (itemcntr != null) { db.Deleteable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).ExecuteCommand(); }
+                            var container = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == model.Rfid).First();
+                            if (container == null)
+                            {
+                                container = new Container { S_CODE = model.Rfid };
+                                db.Insertable<Container>(container).ExecuteCommand();
+                            }
                             LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
                         }
                         else
@@ -1421,12 +1462,24 @@
             {
                 lock (_lockcallfixture)
                 {
+
+
                     #region 鏍规嵁浠撳簱缂栫爜鍒ゆ柇搴撳尯 骞惰绠楀嚭搴撹揣浣�                     var endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == End).First();
                     //鏍规嵁浠撳簱 璁$畻搴撳尯
-
                     if (endloc != null)
                     {
+                        #region 鏍¢獙缁堢偣鏄惁鍙�
+                        if (endloc.N_CURRENT_NUM >= 1 || endloc.N_LOCK_STATE != 0)
+                        {
+                            result.code = "1";
+                            result.msg = $"缁堢偣璐т綅锛歿End}涓嶅彲鐢�;
+                            LogHelper.Info($"Putin==> {result.msg}");
+                            AddErrorInfo("璐т綅涓嶅彲鐢�, result.msg, Source);
+                            return result;
+                        }
+                        #endregion
+
                         var whcode = Settings.wareLoc.Where(a => a.AreaCode == endloc.S_WH_CODE).FirstOrDefault();
                         if (whcode != null)
                         {
@@ -1440,7 +1493,6 @@
                             AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
                             return result;
                         }
-
 
                         //璁$畻鍑哄簱鎵樼洏
                         startloc = LocationHelper.GetLocByAreacode(areacode, model.CarrierType);
@@ -1460,7 +1512,14 @@
                                 AddErrorInfo("鏌ユ壘鎵樼洏澶辫触", result.msg, Source);
                                 return result;
                             }
-
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"鍒涘缓绌哄伐瑁呭懠鍙换鍔�=>鏍规嵁搴撳尯锛歿areacode}锛屾墭鐩樼被鍨嬶細{model.CarrierType}鎵句笉鍒板搴旂┖鎵�;
+                            LogHelper.Info($"callfixture:{result.msg}");
+                            AddErrorInfo("鏌ユ壘鎵樼洏澶辫触", result.msg, Source);
+                            return result;
                         }
 
                     }
@@ -1578,34 +1637,7 @@
             {
                 lock (_lockItemBack)
                 {
-                    #region 浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�-                    //浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�-                    //msts = WCSHelper.GetTaskBycntrcode(model.Rfid);
-                    //if (msts.Count() > 0)
-                    //{
-                    //    msts.RemoveAll(a => string.IsNullOrEmpty(a.S_CNTR_CODE));
-                    //    mst = msts.OrderByDescending(a => a.T_CREATE).FirstOrDefault();
-                    //}
-                    //if (mst != null)
-                    //{
-                    //    areacode = mst.S_START_AREA;
-                    //}
-                    //else
-                    //{
-                    //    result.code = "1";
-                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鏈壘鍒版墭鐩樺嚭搴撲换鍔�;
-                    //    AddErrorInfo("鏌ユ壘浠诲姟澶辫触", result.msg);
-                    //    return result;
-                    //}
-                    //if (string.IsNullOrEmpty(areacode))
-                    //{
-                    //    LogHelper.Info($"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鎵惧埌鍑哄簱浠诲姟{mst.S_CODE}鐨勮捣鐐瑰簱鍖轰负绌�);
-                    //    result.code = "1";
-                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鎵惧埌鍑哄簱浠诲姟{mst.S_CODE}鐨勮捣鐐瑰簱鍖轰负绌�;
-                    //    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg);
-                    //    return result;
-                    //}
-                    #endregion
+
 
                     #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�                     var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
@@ -1623,7 +1655,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}澶辫触";
@@ -1653,17 +1685,18 @@
                                 //    loc = emptyRow(areacode);
                                 //}
                             }
+                            else if (model.PartNumber.StartsWith("32"))
+                            {
+                                areacode = whcode.ZCW2;
+                            }
                             else
                             {
-
-
                                 if (model.PartNumber.StartsWith("3"))
                                 {
                                     areacode = whcode.ZCW;
                                 }
                                 else
                                 {
-
                                     result.code = "1";
                                     result.msg = $"鍒涘缓浠诲姟澶辫触锛岀墿鏂欏彿{model.PartNumber}涓嶅睘浜庤瀹氱墿鏂�;
                                     LogHelper.Info($"ItemBack锛歿result.msg}");
@@ -1682,7 +1715,6 @@
                             {
                                 //loc =  EndLocs.Find(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0);
                                 loc = FindEndcolByLocList(EndLocs);
-
 
                             }
                             else
@@ -1809,9 +1841,6 @@
                     }
                     #endregion
                 }
-
-
-
 
                 return result;
             }
@@ -2055,11 +2084,11 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        internal static Result CreatelevatorTask(Elevator model)
+        internal static Result CreatelevatorTask(ElevatorModel model)
         {
-            Result result = new Result() { code = "200", msg = "鐐瑰鐐逛换鍔″垱寤烘垚鍔� };
-            string Source = "MES";
-            if (model == null)
+            Result result = new Result() { code = "200", msg = "鐢垫鎼繍浠诲姟鍒涘缓鎴愬姛" };
+            string Source = "WMS";
+            if (model.Data == null)
             {
                 result.code = "1";
                 result.msg = "鍙傛暟涓簄ull";
@@ -2073,6 +2102,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 && a.C_ENABLE == "Y").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();
 
 
@@ -2082,11 +2112,10 @@
                     if (startloc.N_LOCK_STATE != 0)
                     {
                         result.code = "1";
-                        result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋startloc.S_CODE}鏈夐攣";
+                        result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋startloc.S_CODE}鏈夐攣锛岀數姊湁鍏朵粬浠诲姟锛岃绛夊緟鐢垫浠诲姟瀹屾垚";
                         AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
                         return result;
                     }
-
                     var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == startloc.S_CODE).First();
                     if (cntr == null)
                     {
@@ -2115,26 +2144,7 @@
                     //鏍规嵁浠诲姟鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級
                     var elevatorLoc = LocationHelper.GetElevatorLoc();
 
-                    //鍒涘缓wcs鍒嗘浠诲姟
                     var wcsTask = new WCSTask
-                    {
-
-                        S_CODE = WCSHelper.GenerateTaskNo(),
-                        S_TYPE = "鐢垫1",
-                        S_EQ_NO = model.Data.task_no,
-                        S_START_LOC = startloc.S_CODE,
-                        S_END_LOC = elevatorLoc.S_CODE,
-                        N_CNTR_COUNT = 1,
-                        S_START_WH = startloc.S_WH_CODE,
-                        S_START_AREA = startloc.S_AREA_CODE,
-                        S_END_WH = elevatorLoc.S_WH_CODE,
-                        S_END_AREA = elevatorLoc.S_AREA_CODE,
-                        N_SCHEDULE_TYPE = 1,
-                        S_CNTR_CODE = cntr.S_CNTR_CODE,
-                        N_END_LAYER = 1,
-                        Z_TYPE = 6
-                    };
-                    var wcsTask1 = new WCSTask
                     {
                         S_CODE = WCSHelper.GenerateTaskNo(),
                         S_TYPE = "鐢垫2",
@@ -2152,13 +2162,34 @@
                         Z_TYPE = 6
                     };
 
-                    LogHelper.Info("鍒涘缓浠诲姟锛� + JsonConvert.SerializeObject(wcsTask), "CreateTask");
-                    if (WCSHelper.CreateTask(wcsTask) && WCSHelper.CreateTask(wcsTask1))
+
+                    if (WCSHelper.CreateTask(wcsTask))
                     {
+                        LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                        var device = Settings.deviceInfos.Where(a => a.TN_Location == startloc.S_CODE).FirstOrDefault();
+                        var loc = LocationHelper.GetLocByLoc(endloc.S_CODE);
+                        if (device == null)
+                        {
+                            LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{startloc.S_CODE},鏈壘鍒板搴旂數姊厤缃枃浠�);
+                        }
+                        if (loc == null)
+                        {
+                            LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{endloc.S_CODE},鏈壘鍒板搴旇揣浣�);
+                        }
+                        if (device != null && loc != null)
+                        {
+                            int value = 0;
+                            if (loc.N_LAYER == 1) value = 1;
+                            else if (loc.N_LAYER == 2) value = 3;
+                            else if (loc.N_LAYER == 3) value = 5;
+
+                            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);
-                        LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+
                     }
                     else
                     {
@@ -2182,7 +2213,7 @@
             {
 
                 result.code = "1";
-                result.msg = $"鐗╂枡涓绘暟鎹垱寤哄け璐�閿欒淇℃伅锛歿ex}";
+                result.msg = $"鐢垫鎼繍浠诲姟鍒涘缓澶辫触 閿欒淇℃伅锛歿ex}";
                 LogHelper.Error("鐐瑰鐐逛换鍔�Error锛� + ex.ToString(), ex);
                 return result;
             }
@@ -2276,53 +2307,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)
                     {
+                        var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).First();
 
-                        string cntrcode = loccntr.S_CNTR_CODE;
-                        var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First();
-                        if (CntrItem != null)
+                        if (loccntr != null)
                         {
+                            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}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�);
                         }
-
                     }
                     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;
         }
@@ -2518,53 +2555,24 @@
         /// <returns></returns>
         internal static Location StorageCompute(string itemcode, string areacode)
         {
+            //Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).First();
             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();
-            //鏌ヨ鎵�湁鏈夋墭鐩樼殑鎺掓病閿佺殑鎺�-            // 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)
-            //{
-            //    for (int i = 0; i < list.Count; i++)
-            //    {
-            //        LogHelper.Info($"鏈夋墭鐩樻帓鍙穥list[i].N_ROW}锛岀墿鏂欑紪鐮亄itemcode},搴撳尯{areacode}");
-            //        //鏌ヨ璐т綅缁戝畾鎵樼洏
-            //        var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == list[i].S_CODE).First();
-            //        if (cntr != null)
-            //        {
-            //            //鏌ヨ鎵樼洏鐗╂枡淇℃伅
-            //            var iteminfo = ContainerHelper.GetCntrItemRel(cntr.S_CNTR_CODE).FirstOrDefault();
+            Location result = null;
+            // 867C567A-183C-413B-9891-15D8F6DE1620
 
-            //            if (string.IsNullOrEmpty(itemcode))//绌烘墭鍏ュ簱
-            //            {
-            //                if (iteminfo == null)
-            //                {
-            //                    //鐗╂枡鐩稿悓鍏ヨ揣浣嶅悗涓�綅璐т綅
-            //                    result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE.Trim() == areacode && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM == 0).First();
-            //                }
-            //            }
-            //            else//婊℃嫋鍏ュ簱
-            //            {
-            //                if (iteminfo != null)
-            //                {
-            //                    if (iteminfo.S_ITEM_CODE == itemcode)
-            //                    {
-            //                        //鐗╂枡鐩稿悓鍏ヨ揣浣嶅悗涓�綅璐т綅
-            //                        result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE.Trim() == areacode && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM == 0).First();
+            // var aaa = db.Deleteable<Location>(a => a.S_ID == "867C567A-183C-413B-9891-15D8F6DE1620").ExecuteCommand();
+            // var aaa = db.Deleteable<Location>(a => a.S_ID.Trim() == "867C567A-183C-413B-9891-15D8F6DE1620").ExecuteCommand();
+            LogHelper.Info($"鏂规硶锛歋torageCompute");
+            var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE == areacode && a.N_LOCK_STATE == 0 && a.N_ROW > 0 && a.N_COL > 0).ToList();
+            LogHelper.Info($"鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅闆嗗悎锛氭牴鎹簱鍖虹紪鐮侊細{areacode}" + list.Count);
+            //list.RemoveAll(a => string.IsNullOrEmpty(a.S_CODE.Trim()) || a.S_CODE == null || string.IsNullOrWhiteSpace(a.S_CODE.Trim()));
+            list = list.FindAll(a => a.N_ROW > 0 && a.N_COL > 0);
+            LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅闆嗗悎杩囨护锛� + list.Count);
+            if (list.Count > 0)
+            {
+                result = FindEndcolByLocList(list);
+            }
 
-            //                    }
-            //                }
-            //            }
-            //            if (result != null)
-            //            {
-            //                return result;
-            //            }
-            //        }
-            //        else
-            //        {
-            //            LogHelper.Info($"鏍规嵁璐х墿缂栫爜{list[i].S_CODE}鏈壘鍒版墭鐩樿揣浣嶇粦瀹氬叧绯�);
-            //        }
-            //    }
-            //}
             return result;
         }
 
@@ -2683,6 +2691,21 @@
             }
 
         }
+
+        //internal static bool CreateCntrLoc(taskData taskData)
+        //{
+        //    if ( taskData == null)
+        //    {
+        //        LogHelper.Info($"CreateCntrIteminfo==> 绔嬪簱浠诲姟涓嬪彂鍙傛暟鏈夌┖锛屽垱寤虹墿鏂欐墭鐩樼粦瀹氬叧绯诲け璐�);
+        //        return false;
+        //    }
+        //    else
+        //    {
+        //        LocationHelper.BindingLoc(taskData.pickStation,new  List<string>() { taskData.rfid });
+
+        //    }
+
+        //}
         private static object _lockLocation = new object();
         /// <summary>
         /// 鏍规嵁鎵樼洏缂栫爜锛屾満鍙扮紪鐮侊紝宸ヨ绫诲瀷璁$畻鏈哄彴绾胯竟鍖哄煙
@@ -2768,13 +2791,16 @@
                 var rows = locations.Select(a => a.N_ROW).Distinct().ToList();
                 for (int i = 0; i < rows.Count; i++)
                 {
+
                     var rowList = locations.Where(r => r.N_ROW == rows[i]).ToList();
+                    LogHelper.Info($"褰撳墠鎺�{rows[i]},鑾峰緱璐т綅{JsonConvert.SerializeObject(rowList)}");
                     if (rowList.Count(a => a.N_CURRENT_NUM == 0) > 0)
                     {
                         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();
+                        other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && !string.IsNullOrEmpty(a.S_CODE.Trim()) && !string.IsNullOrWhiteSpace(a.S_CODE.Trim())).FirstOrDefault();
                         //if (full == null)
                         //{
                         //    //娌℃湁婊′綅锛岄偅灏辨壘鏈�皬鐨勭┖浣�@@ -2790,6 +2816,59 @@
                         //    other = db.Queryable<Location>().OrderBy(a => a.N_LAYER).Where(a => (string.IsNullOrEmpty(a.C_ENABLE) || a.C_ENABLE.Trim() != "绂佺敤") && a.S_AREA_CODE == other.S_AREA_CODE && a.N_ROW == other.N_ROW && a.N_COL > other.N_COL).First();
                         //    //LogHelper.Info($"绂佺敤閫夋嫨鍚庝竴涓揣浣峽result}", "鎴愬搧");
                         //}
+
+                        if (other != null)
+                        {
+                            if (other.S_CODE != null && !string.IsNullOrEmpty(other.S_CODE))
+                            {
+                                end = other;
+                                break;
+                            }
+                        }
+                    }
+                }
+                return end;
+            }
+            catch (Exception)
+            {
+
+                throw;
+            }
+
+        }
+
+        /// <summary>
+        /// 鎵剧粓鐐圭┖璐т綅璁$畻鎺掗攣
+        /// </summary>
+        /// <param name="locations"></param>
+        /// <returns></returns>
+        internal static Location FindEndcolByLocListLock(List<Location> locations)
+        {
+            try
+            {
+                var db = new SqlHelper<object>().GetInstance();
+                Location end = null;
+                //鏍规嵁缁堢偣璐т綅鎵剧┖闂茶揣浣�+                var rows = locations.Select(a => a.N_ROW).Distinct().ToList();
+                for (int i = 0; i < rows.Count; i++)
+                {
+                    var rowList = locations.Where(r => r.N_ROW == rows[i]).ToList();
+                    if (rowList.Count(a => a.S_LOCK_STATE != "鏃�) == 0 && rowList.Count(a => a.N_CURRENT_NUM == 0) > 0)
+                    {
+                        Location other = null;
+                        //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆
+                        //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴浣嶈涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�+                        var full = rowList.OrderByDescending(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 1).FirstOrDefault();
+                        if (full == null)
+                        {
+                            //娌℃湁婊′綅锛岄偅灏辨壘鏈�皬鐨勭┖浣�+                            other = rowList.OrderBy(a => a.N_COL).FirstOrDefault();
+                        }
+                        else
+                        {
+                            other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_COL > full.N_COL).FirstOrDefault();
+                        }
+
                         if (other != null)
                         {
                             end = other;

--
Gitblit v1.9.1