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