1
pengmn
2025-07-04 d8c0f4088dd1619279f6f894766a28bb0ecfe0a4
HH.WCS.Mobox3.HangYang/wms/WMSHelper.cs
@@ -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($"创建入库单SQL错误: {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($"取消入库单SQL错误: {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($"取消出库单SQL错误: {sugarEx.Sql}", sugarEx, "杭氧");
                }
                else
                {
                    LogHelper.Error($"取消出库单失败:{ex.Message}", ex, "杭氧");
                }
                return false;
            }
        }
        #endregion
        #region 杭氧特殊帮助方法
@@ -1092,7 +1333,7 @@
                                {
                                    // 方案1:合并任务(直接出库外侧货位)
                                    tasks.Add(CreateOutboundTask(outerLoc,
                                        outbound.First(o => o.locCode == outerLoc.S_CODE),"1"));
                                        outbound.First(o => o.locCode == outerLoc.S_CODE), "1"));
                                }
                                else
                                {
@@ -1179,7 +1420,7 @@
                      .FirstOrDefault();
            }
            private WCSTask CreateOutboundTask(Location loc, Outbound outbound,string priority = "") =>
            private WCSTask CreateOutboundTask(Location loc, Outbound outbound, string priority = "") =>
                new WCSTask
                {
                    S_CODE = GenerateTaskNo(),