From 382c009ba2bb04374468e9584f262d6682841d9b Mon Sep 17 00:00:00 2001 From: pengmn <pmn@HanInfo> Date: 星期三, 28 五月 2025 18:09:41 +0800 Subject: [PATCH] 杭氧测试流程 --- HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs | 313 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 294 insertions(+), 19 deletions(-) diff --git a/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs b/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs index 099bb7f..5270858 100644 --- a/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs @@ -1,5 +1,6 @@ 锘縰sing HH.WCS.HangYang.api; using HH.WCS.HangYang.LISTA.models; +using HH.WCS.HangYang.LISTA.models.wms; using HH.WCS.HangYang.models.other; using HH.WCS.HangYang.util; using Newtonsoft.Json; @@ -10,10 +11,12 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.IdentityModel.Protocols.WSTrust; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Runtime.Remoting.Messaging; +using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; @@ -608,6 +611,7 @@ } return result; } + #region 鏉哀WMS甯姪鏂规硶 /// <summary> /// 鏂板鍏ュ簱鍗�@@ -632,7 +636,15 @@ } catch (Exception ex) { - LogHelper.Error("鍒涘缓鍏ュ簱鍗曞け璐�, ex, "鏉哀"); + var sugarEx = ex as SqlSugar.SqlSugarException; + if (sugarEx != null) + { + LogHelper.Error($"鍒涘缓鍏ュ簱鍗昐QL閿欒: {sugarEx.Sql}", sugarEx, "鏉哀"); + } + else + { + LogHelper.Error($"鍒涘缓鍏ュ簱鍗曞け璐�{ex.Message}", ex, "鏉哀"); + } return false; } @@ -661,7 +673,7 @@ } catch (Exception ex) { - LogHelper.Error("鍒涘缓鍑哄簱鍗曞け璐�, ex, "鏉哀"); + LogHelper.Error($"鍒涘缓鍑哄簱鍗曞け璐�{ex.Message}", ex, "鏉哀"); return false; } @@ -727,6 +739,28 @@ } /// <summary> + /// 鏍规嵁鎵樼洏鏌ヨ璐т綅鏄庣粏 + /// </summary> + /// <param name="trayCode">鎵樼洏鍙�/param> + /// <returns></returns> + internal static LocCntrRel GetCntrLoc(string trayCode) + { + var db = new SqlHelper<object>().GetInstance(); + + var locCntr = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == trayCode).First(); + var locList = db.Queryable<Location>().Where(p => p.S_CODE == locCntr.S_LOC_CODE + && p.N_CURRENT_NUM == p.N_CAPACITY + && p.S_LOCK_STATE.Trim() == "鏃� + && p.S_AREA_CODE == "JXHCQ").First(); + if (locList == null) + { + return null; + } + return locCntr; + + } + + /// <summary> /// 浠诲姟鐘舵�杞崲 /// </summary> /// <param name="state">鐘舵�鍙�/param> @@ -752,28 +786,48 @@ /// </summary> /// <param name="state">閰嶇洏鍗曠姸鎬�/param> /// <returns></returns> - internal static List<DistributionCntr> GetPickingListByState(string state) + internal static List<DistributionCntr> GetPickingListByState(int state) { var db = new SqlHelper<object>().GetInstance(); - var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.S_B_STATE.Trim() == state).ToList(); + var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.N_B_STATE == state).ToList(); return distributionCntr; + } + + + /// <summary> + /// 閰嶇洏鍗曠姸鎬佽浆鎹�+ /// </summary> + /// <param name="state">鐘舵�鍙�/param> + /// <returns></returns> + internal static string GetDistributionStateStr(int state) + { + var status = ""; + switch (state) + { + case 1: status = "宸查厤璐�; break; + case 2: status = "鍑哄簱涓�; break; + case 3: status = "宸插嚭搴�; break; + case 4: status = "鍒嗘嫞瀹屾垚 "; break; + + } + return status; } /// <summary> /// 淇敼閰嶇洏鍗曠姸鎬� /// </summary> + /// <param name="taskState">浣滀笟鐘舵�</param> /// <param name="state">鐘舵�</param> /// <param name="trayCode">鎵樼洏鍙�/param> /// <returns></returns> - internal static bool UpdateDistributionCntrState(string state,string trayCode) + internal static bool UpdateDistributionCntrState(int taskState,int state,string trayCode) { var db = new SqlHelper<object>().GetInstance(); - var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.S_B_STATE.Trim() == "閰嶈揣瀹屾垚" && a.S_CNTR_CODE == trayCode ).First(); + var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.N_B_STATE == taskState && a.S_CNTR_CODE == trayCode ).First(); if (distributionCntr != null) { - - distributionCntr.S_B_STATE = state; - distributionCntr.N_B_STATE = 2; + distributionCntr.N_B_STATE = state; + distributionCntr.S_B_STATE = GetDistributionStateStr(state); return db.Updateable<DistributionCntr>(distributionCntr).UpdateColumns(it => new { it.S_B_STATE, it.N_B_STATE }).ExecuteCommand() > 0; } return false; @@ -885,7 +939,7 @@ { var db = new SqlHelper<object>().GetInstance(); var locations = db.Queryable<Location>().Where(a => a.S_AREA_CODE == inbound.areaCode).ToList(); - if(!string.IsNullOrEmpty(inbound.roadWay.ToString())) + if(inbound.roadWay != 0) { locations.RemoveAll(s => s.N_ROADWAY != inbound.roadWay); } @@ -1126,14 +1180,16 @@ else continue; } - else - { - //璐т綅涓虹┖鐩存帴鐢熸垚鍑哄簱浠诲姟 - tasks.Add(CreateOutboundTask(targetLoc,outboundItem)); - } + //else + //{ + // //璐т綅涓虹┖鐩存帴鐢熸垚鍑哄簱浠诲姟 + // tasks.Add(CreateOutboundTask(targetLoc, outboundItem)); + //} } - else continue; - + else + { + continue; + } // 2.2 鐢熸垚鍑哄簱浠诲姟锛堟繁浣嶏級 tasks.Add(CreateOutboundTask(targetLoc, outboundItem)); } @@ -1142,6 +1198,7 @@ // 3. 闈炲弻娣变綅鐩存帴鍑哄簱 tasks.Add(CreateOutboundTask(targetLoc, outboundItem)); } + break; } // 4. 浠诲姟鎺掑簭锛氱Щ搴撲换鍔′紭鍏�+ 楂樹紭鍏堢骇浼樺厛 return tasks; @@ -1161,7 +1218,7 @@ loc.N_ROADWAY == deepLoc.N_ROADWAY && loc.N_COL == deepLoc.N_COL && loc.N_LAYER == deepLoc.N_LAYER && - loc.N_LOCK_STATE == 0 + loc.N_LOCK_STATE == 0 || loc.N_LOCK_STATE == 5 ); private Location FindBestRelocationTarget(Location outerLoc) @@ -1229,7 +1286,8 @@ _allLocations .Where(x => x.S_CODE == outerLoc.S_CODE) .ToList() - .ForEach(x => x.N_LOCK_STATE = 3); + .ForEach(x => x.N_LOCK_STATE = 5); + //鏍囪娣变綅鐨勫渚ц揣浣嶄负5 } } } @@ -1237,5 +1295,222 @@ } } #endregion + + #region 鏉哀鍗囬檷閲忚〃甯姪鏂规硶 + /// <summary> + /// MD5鍔犲瘑 + /// </summary> + /// <param name="sInput"></param> + /// <returns></returns> + public static string GetMd5FromString(string sInput) + { + var lstData = Encoding.GetEncoding("utf-8").GetBytes(sInput); + var lstHash = new MD5CryptoServiceProvider().ComputeHash(lstData); + var result = new StringBuilder(32); + for (int i = 0; i < lstHash.Length; i++) + { + result.Append(lstHash[i].ToString("x2").ToUpper()); + } + return result.ToString(); + } + + /// <summary> + /// 鏍规嵁浠诲姟鍗囬噺 + /// </summary> + /// <param name="task"></param> + internal static bool AddChange(WCSTask task) + { + var db = new SqlHelper<object>().GetInstance(); + var result = true; + try + { + var itemlist = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE).ToList(); + if (itemlist.Count > 0) + { + var url = Settings.MoboxSeverUrl + "inventory/AddChange"; + //浠撳簱閲忚〃鍗囬噺 + var req = new AddChangeModel { op_type = 5 }; + //搴撳尯閲忚〃鍗囬噺 + var req2 = new AddChangeModel { op_type = 6 }; + itemlist.ForEach(a => + { + LogHelper.Info($"濉厖鏁版嵁"); + LogHelper.Info($"娣诲姞浠撳簱閲忚〃鏁版嵁 浠撳簱{task.S_END_WH} 鐗╂枡缂栫爜{a.S_ITEM_CODE} 鐗╂枡鍚嶇О{a.S_ITEM_NAME} 鏁伴噺{a.F_QTY}"); + req.item_info.Add(new AddChangeModel.itemModel + { + wh_code = task.S_END_WH, + item_code = a.S_ITEM_CODE, + item_name = a.S_ITEM_NAME, + qty = a.F_QTY + }); + LogHelper.Info($"娣诲姞搴撳尯閲忚〃鏁版嵁 搴撳尯{task.S_END_AREA} 鐗╂枡缂栫爜{a.S_ITEM_CODE} 鐗╂枡鍚嶇О{a.S_ITEM_NAME} 鏁伴噺{a.F_QTY}"); + req2.item_info.Add(new AddChangeModel.itemModel + { + wh_code = task.S_END_WH, + area_code = task.S_END_AREA, + item_code = a.S_ITEM_CODE, + item_name = a.S_ITEM_NAME, + qty = a.F_QTY + }); + }); + var reqData = JsonConvert.SerializeObject(req); + var AppKey = Settings.AppKey; + var AppSecret = Settings.AppSecret; + var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); + //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); + LogHelper.Info($"鍔犲瘑鍓�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime}"); + var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime); + LogHelper.Info($"鍔犲瘑鍚�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={reqData}"); + var res = new HttpHelper().WebPost(url, reqData, "application/json", AppKey, ReqTime, ReqVerify); + if (!string.IsNullOrEmpty(res)) + { + LogHelper.Info($"mobox 浠撳簱鍗囬噺鎺ュ彛杩斿洖 {res}"); + var moboxres = JsonConvert.DeserializeObject<moboxres>(res); + if (moboxres.err_code != 0) + { + result = false; + } + } + else + { + LogHelper.Info($"mobox 浠撳簱鍗囬噺鎺ュ彛杩斿洖涓虹┖"); + result = false; + } + var reqData2 = JsonConvert.SerializeObject(req2); + var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); + //var ReqTime2 = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); + LogHelper.Info($"鍔犲瘑鍓�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2}"); + var ReqVerify2 = GetMd5FromString(AppKey + AppSecret + ReqTime2); + LogHelper.Info($"鍔犲瘑鍚�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2} ReqVerify={ReqVerify2} url={url} req={reqData2}"); + var res2 = new HttpHelper().WebPost(url, reqData2, "application/json", AppKey, ReqTime2, ReqVerify2); + if (!string.IsNullOrEmpty(res2)) + { + LogHelper.Info($"mobox 搴撳尯鍗囬噺鎺ュ彛杩斿洖 {res2}"); + var moboxres = JsonConvert.DeserializeObject<moboxres>(res); + if (moboxres.err_code != 0) + { + result = false; + } + } + else + { + LogHelper.Info($"mobox 搴撳尯鍗囬噺鎺ュ彛杩斿洖涓虹┖"); + result = false; + } + + } + else LogHelper.Info($"鎵樼洏{task.S_CNTR_CODE} 鍦ㄥ鍣ㄨ揣鍝佹槑缁嗕腑鎵句笉鍒版暟鎹�); + } + catch (Exception ex) + { + LogHelper.Error($"浠撳簱鍗囬噺寮傚父 寮傚父淇℃伅={ex.Message}", ex); + result = false; + } + return result; + } + + /// <summary> + /// 鏍规嵁浠诲姟闄嶉噺 + /// </summary> + /// <param name="task"></param> + internal static bool DeleteChange(WCSTask wmstask) + { + var db = new SqlHelper<object>().GetInstance(); + var result = true; + try + { + //var wmstask = db.Queryable<WCSTask>().Where(a => a == task.S_OP_CODE).First(); + if (wmstask != null) + { + var itemlist = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == wmstask.S_CNTR_CODE).ToList(); + if (itemlist.Count > 0) + { + var url = Settings.MoboxSeverUrl + "inventory/AddChange"; + //浠撳簱閲忚〃闄嶉噺 + var req = new AddChangeModel { op_type = 8 }; + //搴撳尯閲忚〃闄嶉噺 + var req2 = new AddChangeModel { op_type = 9 }; + itemlist.ForEach(a => + { + LogHelper.Info($"濉厖鏁版嵁"); + LogHelper.Info($"鍑忎粨搴撻噺琛ㄦ暟鎹�浠撳簱{wmstask.S_START_WH} 鐗╂枡缂栫爜{a.S_ITEM_CODE} 鐗╂枡鍚嶇О{a.S_ITEM_NAME} 鏁伴噺{a.F_QTY}"); + req.item_info.Add(new AddChangeModel.itemModel + { + wh_code = wmstask.S_START_WH, + item_code = a.S_ITEM_CODE, + item_name = a.S_ITEM_NAME, + qty = a.F_QTY + }); + LogHelper.Info($"鍑忓簱鍖洪噺琛ㄦ暟鎹�搴撳尯{wmstask.S_START_AREA} 鐗╂枡缂栫爜{a.S_ITEM_CODE} 鐗╂枡鍚嶇О{a.S_ITEM_NAME} 鏁伴噺{a.F_QTY}"); + req2.item_info.Add(new AddChangeModel.itemModel + { + wh_code = wmstask.S_START_WH, + area_code = wmstask.S_START_AREA, + item_code = a.S_ITEM_CODE, + item_name = a.S_ITEM_NAME, + qty = a.F_QTY + }); + }); + var reqData = JsonConvert.SerializeObject(req); + var AppKey = Settings.AppKey; + var AppSecret = Settings.AppSecret; + var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); + //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); + LogHelper.Info($"鍔犲瘑鍓�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime}"); + var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime); + LogHelper.Info($"鍔犲瘑鍚�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={reqData}"); + var res = new HttpHelper().WebPost(url, reqData, "application/json", AppKey, ReqTime, ReqVerify); + if (!string.IsNullOrEmpty(res)) + { + LogHelper.Info($"mobox 浠撳簱闄嶉噺鎺ュ彛杩斿洖 {res}"); + var moboxres = JsonConvert.DeserializeObject<moboxres>(res); + if (moboxres.err_code != 0) + { + result = false; + } + } + else + { + LogHelper.Info($"mobox 浠撳簱闄嶉噺鎺ュ彛杩斿洖涓虹┖"); + result = false; + } + var reqData2 = JsonConvert.SerializeObject(req2); + var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); + //var ReqTime2 = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); + LogHelper.Info($"鍔犲瘑鍓�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2}"); + var ReqVerify2 = GetMd5FromString(AppKey + AppSecret + ReqTime2); + LogHelper.Info($"鍔犲瘑鍚�AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2} ReqVerify={ReqVerify2} url={url} req={reqData2}"); + var res2 = new HttpHelper().WebPost(url, reqData2, "application/json", AppKey, ReqTime2, ReqVerify2); + if (!string.IsNullOrEmpty(res2)) + { + LogHelper.Info($"mobox 搴撳尯闄嶉噺鎺ュ彛杩斿洖 {res2}"); + var moboxres = JsonConvert.DeserializeObject<moboxres>(res); + if (moboxres.err_code != 0) + { + result = false; + } + } + else + { + LogHelper.Info($"mobox 搴撳尯闄嶉噺鎺ュ彛杩斿洖涓虹┖"); + result = false; + } + + } + else LogHelper.Info($"鎵樼洏{wmstask.S_CNTR_CODE} 鍦ㄥ鍣ㄨ揣鍝佹槑缁嗕腑鎵句笉鍒版暟鎹�); + } + else LogHelper.Info($"鏈壘鍒颁换鍔wmstask.S_CODE} 瀵瑰簲鐨勪换鍔�); + + } + catch (Exception ex) + { + LogHelper.Error($"浠撳簱闄嶉噺寮傚父 寮傚父淇℃伅={ex.Message}", ex); + result = false; + } + return result; + } + + + #endregion } } -- Gitblit v1.9.1