From d8c0f4088dd1619279f6f894766a28bb0ecfe0a4 Mon Sep 17 00:00:00 2001 From: pengmn <pmn@HanInfo> Date: 星期五, 04 七月 2025 17:21:12 +0800 Subject: [PATCH] 1 --- HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs | 329 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 292 insertions(+), 37 deletions(-) diff --git a/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs b/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs index 724875c..ee5453d 100644 --- a/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs @@ -235,7 +235,7 @@ return db.Updateable<WMSTask>(a).UpdateColumns(it => new { it.S_END_LOC, it.T_MODIFY }).ExecuteCommand() > 0; } - + internal static void CreateSortingOrderDetail(string so_no) @@ -544,6 +544,50 @@ #region 鏉哀WMS甯姪鏂规硶 /// <summary> + /// 鏂板鐗╂枡涓绘暟鎹�+ /// </summary> + /// <param name="materials"></param> + /// <returns></returns> + internal static bool CreateMaterialData(List<TN_Material> materials) + { + try + { + bool res = false; + var db = new SqlHelper<object>().GetInstance(); + db.BeginTran(); + foreach (var material in materials) + { + var _Material = db.Queryable<TN_Material>().Where(c => c.S_ITEM_CODE == material.S_ITEM_CODE).First(); + if (_Material != null) + { + db.Updateable<TN_Material>(material).UpdateColumns(a => new { a.S_ITEM_NAME, a.S_AREA_CODE, a.S_ITEM_SPEC, a.S_MATERIAL, a.S_UOM, a.C_CLEAN, a.T_MODIFY }).ExecuteCommand(); + } + else + { + db.Insertable(material).ExecuteCommand(); + } + } + db.CommitTran(); + res = true; + return res; + } + catch (Exception ex) + { + var sugarEx = ex as SqlSugar.SqlSugarException; + if (sugarEx != null) + { + LogHelper.Error($"鍒涘缓鍏ュ簱鍗昐QL閿欒: {sugarEx.Sql}", sugarEx, "鏉哀"); + } + else + { + LogHelper.Error($"鍒涘缓鍏ュ簱鍗曞け璐�{ex.Message}", ex, "鏉哀"); + } + return false; + } + + } + + /// <summary> /// 鏂板鍏ュ簱鍗� /// </summary> /// <param name="order"></param> @@ -557,8 +601,51 @@ db.BeginTran(); foreach (var orderItem in order) { - db.Insertable(orderItem).ExecuteCommand(); - db.Insertable(orderItem.InOrderDetail).ExecuteCommand(); + var _inOrder = db.Queryable<InOrder>().Where(c => c.S_NO == orderItem.S_NO).First(); + if (_inOrder != null) + { + foreach (var item in orderItem.InOrderDetail) + { + var _orderDetail = db.Queryable<InOrderDetail>().Where(c => c.S_BS_NO == orderItem.S_BS_NO && c.S_ITEM_CODE == item.S_ITEM_CODE).First(); + if (_orderDetail != null) + { + var _order = db.Queryable<InOrder>().Where(c => c.S_NO == _orderDetail.S_IO_NO).First(); + if (_order.N_B_STATE == 0) + { + _orderDetail.S_ITEM_NAME = item.S_ITEM_NAME; + _orderDetail.F_QTY = item.F_QTY; + _orderDetail.T_MODIFY = DateTime.Now; + db.Updateable<InOrderDetail>(_orderDetail).UpdateColumns(a => new { a.S_ITEM_NAME, a.F_QTY ,a.T_MODIFY}).ExecuteCommand(); + } + } + } + } + else + { + db.Insertable(orderItem).ExecuteCommand(); + db.Insertable(orderItem.InOrderDetail).ExecuteCommand(); + } + + + + + + + + //if (_order != null) + //{ + // if (_order.N_B_STATE == 0) + // { + // foreach (var item in orderItem.InOrderDetail) + // { + // } + // } + //} + //else + //{ + + //} + } db.CommitTran(); res = true; @@ -594,8 +681,51 @@ db.BeginTran(); foreach (var orderItem in order) { - db.Insertable(orderItem).ExecuteCommand(); - db.Insertable(orderItem.OutOrderDetail).ExecuteCommand(); + + var _outOrder = db.Queryable<OutOrder>().Where(c => c.S_NO == orderItem.S_NO).First(); + if (_outOrder != null) + { + foreach (var item in orderItem.OutOrderDetail) + { + var _orderDetail = db.Queryable<OutOrderDetail>().Where(c => c.S_BS_NO == orderItem.S_BS_NO && c.S_ITEM_CODE == item.S_ITEM_CODE).First(); + if (_orderDetail != null) + { + var _order = db.Queryable<OutOrder>().Where(c => c.S_NO == _orderDetail.S_OO_NO).First(); + if (_order.N_B_STATE == 0) + { + _orderDetail.S_ITEM_NAME = item.S_ITEM_NAME; + _orderDetail.F_QTY = item.F_QTY; + _orderDetail.T_MODIFY = DateTime.Now; + db.Updateable<OutOrderDetail>(_orderDetail).UpdateColumns(a => new { a.S_ITEM_NAME, a.F_QTY,a.T_MODIFY }).ExecuteCommand(); + } + } + } + } + else + { + db.Insertable(orderItem).ExecuteCommand(); + db.Insertable(orderItem.OutOrderDetail).ExecuteCommand(); + } + + //var _order = db.Queryable<OutOrder>().Where(c => c.S_NO == orderItem.S_NO).First(); + //if (_order != null) + //{ + // if (_order.N_B_STATE == 0) + // { + // db.Updateable<OutOrder>(orderItem).UpdateColumns(a => new { a.S_OP_TYPE, a.S_BS_TYPE, a.S_NOTE, a.T_MODIFY }).ExecuteCommand(); + // foreach (var item in orderItem.OutOrderDetail) + // { + // db.Updateable<InOrderDetail>(item).UpdateColumns(a => new { a.S_ITEM_CODE, a.S_ITEM_NAME, a.F_QTY }).ExecuteCommand(); + // } + // } + //} + //else + //{ + // db.Insertable(orderItem).ExecuteCommand(); + // db.Insertable(orderItem.OutOrderDetail).ExecuteCommand(); + //} + + } db.CommitTran(); res = true; @@ -608,6 +738,117 @@ } } + + /// <summary> + /// 鍏ュ簱鍗曞彇娑�+ /// </summary> + /// <param name="order"></param> + /// <returns></returns> + internal static bool CancelOrderIn(InOrderCancel order) + { + try + { + bool res = false; + var db = new SqlHelper<object>().GetInstance(); + db.BeginTran(); + + foreach (var item in order.OrderDetail) + { + var _orderDetail = db.Queryable<InOrderDetail>().Where(c => c.S_BS_NO == order.S_BS_NO).ToList(); + if (_orderDetail.Any()) + { + var orderItem = _orderDetail.FirstOrDefault(a => a.S_ITEM_CODE.Trim() == item.S_ITEM_CODE); + if (orderItem != null) + { + var _order = db.Queryable<InOrder>().Where(c => c.S_NO == orderItem.S_IO_NO).First(); + if (_order.N_B_STATE == 0) + { + db.Deleteable<InOrderDetail>().Where(it => it.S_ITEM_CODE.Trim() == item.S_ITEM_CODE && it.S_IO_NO == orderItem.S_IO_NO).ExecuteCommand(); + _orderDetail.RemoveAll(s => s.S_ITEM_CODE == item.S_ITEM_CODE); + if (!_orderDetail.Any()) + { + db.Deleteable<InOrder>().Where(it => it.S_NO == orderItem.S_IO_NO).ExecuteCommand(); + } + + } + } + } + } + + db.CommitTran(); + res = true; + return res; + } + catch (Exception ex) + { + var sugarEx = ex as SqlSugar.SqlSugarException; + if (sugarEx != null) + { + LogHelper.Error($"鍙栨秷鍏ュ簱鍗昐QL閿欒: {sugarEx.Sql}", sugarEx, "鏉哀"); + } + else + { + LogHelper.Error($"鍙栨秷鍏ュ簱鍗曞け璐�{ex.Message}", ex, "鏉哀"); + } + return false; + } + + } + + /// <summary> + /// 鍑哄簱鍗曞彇娑�+ /// </summary> + /// <param name="order"></param> + /// <returns></returns> + internal static bool CancelOrderOut(OutOrderCancel order) + { + try + { + bool res = false; + var db = new SqlHelper<object>().GetInstance(); + db.BeginTran(); + foreach (var item in order.OrderDetail) + { + var _orderDetail = db.Queryable<OutOrderDetail>().Where(c => c.S_BS_NO == order.S_BS_NO).ToList(); + if (_orderDetail.Any()) + { + var orderItem = _orderDetail.FirstOrDefault(a => a.S_ITEM_CODE.Trim() == item.S_ITEM_CODE); + if (orderItem != null) + { + var _order = db.Queryable<OutOrder>().Where(c => c.S_NO == orderItem.S_OO_NO).First(); + if (_order.N_B_STATE == 0) + { + db.Deleteable<OutOrderDetail>().Where(it => it.S_ITEM_CODE.Trim() == item.S_ITEM_CODE && it.S_OO_NO == orderItem.S_OO_NO).ExecuteCommand(); + _orderDetail.RemoveAll(s => s.S_ITEM_CODE == item.S_ITEM_CODE); + if (!_orderDetail.Any()) + { + db.Deleteable<OutOrder>().Where(it => it.S_NO == orderItem.S_OO_NO).ExecuteCommand(); + } + } + } + } + } + + db.CommitTran(); + res = true; + return res; + } + catch (Exception ex) + { + var sugarEx = ex as SqlSugar.SqlSugarException; + if (sugarEx != null) + { + LogHelper.Error($"鍙栨秷鍑哄簱鍗昐QL閿欒: {sugarEx.Sql}", sugarEx, "鏉哀"); + } + else + { + LogHelper.Error($"鍙栨秷鍑哄簱鍗曞け璐�{ex.Message}", ex, "鏉哀"); + } + return false; + } + + } + #endregion #region 鏉哀鐗规畩甯姪鏂规硶 @@ -1064,16 +1305,17 @@ // 闃舵1: 鏍囪鏈潵闇�淇濈暀鐨勮揣浣� MarkReservedLocations(outbound); var tasks = new List<WCSTask>(); + var outboundLocCodes = outbound.Select(o => o.locCode).ToHashSet(); foreach (var outboundItem in outbound) { // 1. 鏌ユ壘鐩爣璐т綅 var targetLoc = FindTargetLocation(outboundItem.locCode); if (targetLoc == null) continue; var wmsTask = WMSHelper.GetWmsTaskList("鎵ц", outboundItem.trayCode); - if (wmsTask == null) + if (wmsTask != null) { //LogHelper.Info($"鏈煡璇㈠埌鍦ㄦ墽琛屼腑鐨勪綔涓�{outboundItem.trayCode}锛�, "鏉哀"); - outboundItem.opCode = ""; + outboundItem.opCode = wmsTask.S_CODE; } // 2. 澶勭悊鍙屾繁浣嶉�杈戯紙绗�鎺掓垨绗�鎺掞級 @@ -1087,36 +1329,46 @@ //濡傛灉璐т綅宸叉弧锛屽垯鐢熸垚绉诲簱浠诲姟 if (outerLoc.N_CURRENT_NUM == outerLoc.N_CAPACITY) { - // 浼樺厛绉诲埌娣变綅锛屽叾娆″渚�- var bestTarget = FindBestRelocationTarget(outerLoc); - if (bestTarget != null) + if (outboundLocCodes.Contains(outerLoc.S_CODE)) { - //璁$畻鍒颁簡澶栦晶鎶婂渚х殑璐т綅閿佸畾 - _allLocations - .Where(x => x.S_CODE == outerLoc.S_CODE) - .ToList() - .ForEach(x => x.N_LOCK_STATE = 3); - var trayCode = ContainerHelper.GetLocCntr(outerLoc.S_CODE); - tasks.Add(new WCSTask - { - S_CODE = GenerateTaskNo(), - S_START_AREA = outerLoc.S_AREA_CODE, - S_END_AREA = bestTarget.S_AREA_CODE, - S_START_LOC = outerLoc.S_CODE, - S_END_LOC = bestTarget.S_CODE, - S_TYPE = "娣变綅绉诲簱", - S_OP_CODE = wmsTask.S_CODE, - N_PRIORITY = 1, - N_SCHEDULE_TYPE = 1, - N_B_STATE = 0, - S_B_STATE = WCSTask.GetStateStr(0), - S_CNTR_CODE = trayCode.S_CNTR_CODE, - N_START_LAYER = 1, - N_END_LAYER = 1, - N_CNTR_COUNT = 1 - }); + // 鏂规1锛氬悎骞朵换鍔★紙鐩存帴鍑哄簱澶栦晶璐т綅锛�+ tasks.Add(CreateOutboundTask(outerLoc, + outbound.First(o => o.locCode == outerLoc.S_CODE), "1")); } - else continue; + else + { + // 浼樺厛绉诲埌娣变綅锛屽叾娆″渚�+ var bestTarget = FindBestRelocationTarget(outerLoc); + if (bestTarget != null) + { + //璁$畻鍒颁簡澶栦晶鎶婂渚х殑璐т綅閿佸畾 + _allLocations + .Where(x => x.S_CODE == outerLoc.S_CODE) + .ToList() + .ForEach(x => x.N_LOCK_STATE = 3); + var trayCode = ContainerHelper.GetLocCntr(outerLoc.S_CODE); + tasks.Add(new WCSTask + { + S_CODE = GenerateTaskNo(), + S_START_AREA = outerLoc.S_AREA_CODE, + S_END_AREA = bestTarget.S_AREA_CODE, + S_START_LOC = outerLoc.S_CODE, + S_END_LOC = bestTarget.S_CODE, + S_TYPE = "娣变綅绉诲簱", + S_OP_CODE = outboundItem.opCode, + N_PRIORITY = 1, + N_SCHEDULE_TYPE = 1, + N_B_STATE = 0, + S_B_STATE = WCSTask.GetStateStr(0), + S_CNTR_CODE = trayCode.S_CNTR_CODE, + N_START_LAYER = 1, + N_END_LAYER = 1, + N_CNTR_COUNT = 1 + }); + } + else continue; + } + } } else @@ -1168,7 +1420,7 @@ .FirstOrDefault(); } - private WCSTask CreateOutboundTask(Location loc, Outbound outbound) => + private WCSTask CreateOutboundTask(Location loc, Outbound outbound, string priority = "") => new WCSTask { S_CODE = GenerateTaskNo(), @@ -1178,7 +1430,7 @@ S_END_LOC = outbound.endBit, S_TYPE = outbound.taskType, S_OP_CODE = outbound.opCode, - N_PRIORITY = 0, + N_PRIORITY = string.IsNullOrEmpty(priority) ? 0 : int.Parse(priority), N_SCHEDULE_TYPE = 1, N_B_STATE = 0, S_B_STATE = WCSTask.GetStateStr(0), @@ -1228,6 +1480,9 @@ } } + /// <summary> + /// 绌烘墭鍑哄簱灏佽绠楁硶 + /// </summary> public class EmptyPalletOutboundScheduler { private readonly List<Location> _allLocations; -- Gitblit v1.9.1