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