Demo
2024-03-17 9cbdf67973c15ddbebb8c3e754f616c7024c692f
修改bug问题
3个文件已修改
415 ■■■■ 已修改文件
Wms/Model/ModelDto/DataDto/StockDetailDto.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 342 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/Logic/AllotSku.cs 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/DataDto/StockDetailDto.cs
@@ -49,17 +49,17 @@
        /// <summary>
        /// 锁定数量
        /// </summary>           
        public int? LockQty { get; set; }
        public decimal? LockQty { get; set; }
        /// <summary>
        /// 冻结数量
        /// </summary>           
        public int? FrozenQty { get; set; }
        public decimal? FrozenQty { get; set; }
        /// <summary>
        /// 可抽检数量
        /// </summary>           
        public int? InspectQty { get; set; }
        public decimal? InspectQty { get; set; }
        /// <summary>
        /// 入库单号
@@ -69,7 +69,7 @@
        /// <summary>
        /// 入库明细号
        /// </summary>           
        public int ASNDetailNo { get; set; }
        public int? ASNDetailNo { get; set; }
        /// <summary>
        /// 所属仓库
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -108,17 +108,82 @@
                        }
                        //库存
                        List<DataStock> stocks;
                        decimal q1 = 0;
                        Dictionary<int, decimal> dic = new Dictionary<int, decimal>();
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        {
                            stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
                        }
                        else
                        {
                            stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                        }
                        if (stocks.Count < 1)
                        {
                            throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}");
                            }
                            //判断数量
                            var qty = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty;
                            if (d.Qty > qty)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                            }
                            if (qty > d.Qty - q1)
                            {
                                q1 += d.Qty - q1;
                                dic.Add(stocks.First().Id, d.Qty - q1);
                            }
                            else
                            {
                                q1 += qty;
                                dic.Add(stocks.First().Id, qty);
                            }
                        }
                        else
                        {
                            stocks = stockList.Where(m=> m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList();
                            foreach (var demo in stocks)
                            {
                                if (q1 >= d.Qty)
                                {
                                    continue;
                                }
                                var q2 = demo.Qty - demo.LockQty - demo.FrozenQty;
                                if (q2 > d.Qty - q1)
                                {
                                    q1 += d.Qty - q1;
                                    dic.Add(demo.Id, d.Qty - q1);
                                }
                                else
                                {
                                    q1 += q2;
                                    dic.Add(demo.Id,q2);
                                }
                            }
                            if (d.Qty >= q1)
                            {
                                stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                                if (stocks.Count == 0)
                                {
                                    throw new Exception($"总库存中出库物料信息:{d.SkuNo}库存数量不足");
                                }
                                var q2 = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty;
                                if (q2 > d.Qty - q1)
                                {
                                    q1 += d.Qty - q1;
                                    dic.Add(stocks.First().Id, d.Qty - q1);
                                }
                                else
                                {
                                    q1 += q2;
                                    dic.Add(stocks.First().Id, q2);
                                }
                            }
                            if (d.Qty > q1)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足");
                            }
                        }
                        var item = new BllExportNoticeDetail()
@@ -146,10 +211,13 @@
                            CreateUser = 0,
                        };
                        list.Add(item);
                        stocks.First().LockQty += d.Qty;//锁定数量
                        var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty })
                        foreach (var s in dic)
                        {
                            var st = stockList.First(m => m.Id == s.Key);
                            st.LockQty += s.Value;//锁定数量
                            var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty })
                            .ExecuteCommand();
                        }
                    }
                    var notice = new BllExportNotice()
@@ -522,27 +590,80 @@
                        }
                        //库存
                        List<DataStock> stocks;
                        //List<DataStockDetail> pallets;
                        decimal q1 = 0;
                        Dictionary<int, decimal> dic = new Dictionary<int, decimal>();
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        {
                            stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
                            //pallets = palletList.Where(p => p.SkuNo == d.SkuNo && p.LotNo == d.LotNo).ToList();
                            //if (stocks.Count < 1)
                            //{
                            //    throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}");
                            //}
                            ////判断数量
                            //var qty = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty;
                            //if (d.Qty > qty)
                            //{
                            //    throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                            //}
                            //if (qty > d.Qty - q1)
                            //{
                            //    q1 += d.Qty - q1;
                            //    dic.Add(stocks.First().Id, d.Qty - q1);
                            //}
                            //else
                            //{
                            //    q1 += qty;
                            //    dic.Add(stocks.First().Id, qty);
                            //}
                        }
                        else
                        {
                            stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                            //pallets = palletList.Where(p => p.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(p.LotNo)).ToList();
                        }
                        if (stocks.Count < 1)
                        {
                            throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}");
                        }
                            //stocks = stockList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList();
                        //判断数量
                        var qty = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty;
                        if (d.Qty > qty)
                        {
                            throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                            //foreach (var demo in stocks)
                            //{
                            //    if (q1 >= d.Qty)
                            //    {
                            //        continue;
                            //    }
                            //    var q2 = demo.Qty - demo.LockQty - demo.FrozenQty;
                            //    if (q2 > d.Qty - q1)
                            //    {
                            //        q1 += d.Qty - q1;
                            //        dic.Add(demo.Id, d.Qty - q1);
                            //    }
                            //    else
                            //    {
                            //        q1 += q2;
                            //        dic.Add(demo.Id, q2);
                            //    }
                            //}
                            //if (d.Qty >= q1)
                            //{
                                stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                            //    if (stocks.Count == 0)
                            //    {
                            //        throw new Exception($"总库存中出库物料信息:{d.SkuNo}库存数量不足");
                            //    }
                            //    var q2 = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty;
                            //    if (q2 > d.Qty - q1)
                            //    {
                            //        q1 += d.Qty - q1;
                            //        dic.Add(stocks.First().Id, d.Qty - q1);
                            //    }
                            //    else
                            //    {
                            //        q1 += q2;
                            //        dic.Add(stocks.First().Id, q2);
                            //    }
                            //}
                            //if (d.Qty > q1)
                            //{
                            //    throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足");
                            //}
                        }
                        var item = new BllExportNoticeDetail()
@@ -570,10 +691,19 @@
                            CreateUser = userId,
                        };
                        list.Add(item);
                        stocks.First().LockQty += d.Qty;//锁定数量
                        stocks.First().LockQty += d.Qty;//锁定数量
                        var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty })
                            .ExecuteCommand();
                        //foreach (var s in dic)
                        //{
                        //    var st = stockList.First(m => m.Id == s.Key);
                        //    st.LockQty += s.Value;//锁定数量
                        //    var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty })
                        //        .ExecuteCommand();
                        //}
                    }
                    var notice = new BllExportNotice()
@@ -715,6 +845,8 @@
                Db.BeginTran();//开启事务
                try
                {
                    if (notice.Origin == "WMS")
                {
                    //删除旧
                    foreach (var d in noticeDetail)
@@ -871,6 +1003,128 @@
                    {
                        Db.RollbackTran();
                        return false;
                        }
                    }
                    else  //erp/mes
                    {
                        //更新出库单
                        foreach (var d in model.Detail)
                        {
                            if (d.Qty < 1)
                            {
                                throw new Exception("出库数据必须大于0");
                            }
                            var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo);
                            if (sku == null)
                            {
                                throw new Exception("出库物品为空");
                            }
                            //库存
                            List<DataStock> stocks;
                            if (!string.IsNullOrWhiteSpace(d.LotNo))
                            {
                                stocks = stockList.Where(s => s.SkuNo == d.SkuNo && d.LotNo.Contains(s.LotNo)).ToList();
                            }
                            else
                            {
                                stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                            }
                            if (stocks.Count < 1)
                            {
                                throw new Exception("出库物品库存不足");
                            }
                            var stock = stocks.First();//总库存
                            //
                            BllExportNoticeDetail old;
                            if (string.IsNullOrWhiteSpace(d.LotNo))
                            {
                                old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(o.LotNo));
                            }
                            else
                            {
                                old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo);
                            }
                            //新加项
                            if (old == null)
                            {
                                //判断数量
                                var qty = stock.Qty - stock.LockQty - stock.FrozenQty;
                                if (d.Qty > qty)
                                {
                                    throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                                }
                                var item = new BllExportNoticeDetail()
                                {
                                    SONo = notice.SONo,
                                    SkuNo = sku.SkuNo,
                                    SkuName = sku.SkuName,
                                    Standard = sku.Standard,
                                    LotNo = d.LotNo,
                                    LotText = "",
                                    Status = "0",
                                    Qty = d.Qty,
                                    AllotQty = 0,
                                    FactQty = 0,
                                    CompleteQty = 0,
                                    PackagNo = sku.PackagNo,
                                    Price = sku.Price,
                                    Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * qty,
                                    IsBale = d.IsBale,
                                    IsBelt = d.IsBelt,
                                    SupplierLot = stocks.First().SupplierLot,
                                    IsWave = "0",
                                    WaveNo = "",
                                    CreateUser = userId,
                                };
                                stock.LockQty += d.Qty;//锁定数量
                                var m = Db.Insertable<BllExportNoticeDetail>(item).ExecuteCommand();
                                var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                            }
                            else if (old.Qty != d.Qty || old.IsBale != d.IsBale || old.IsBelt != d.IsBelt)
                            {
                                if (d.Qty > (stock.Qty - stock.FrozenQty - stock.LockQty) + old.Qty)
                                {
                                    throw new Exception("物品库存数量不足");
                                }
                                //增加
                                if (d.Qty > old.Qty)
                                {
                                    stock.LockQty += d.Qty - old.Qty;
                                }
                                else
                                {
                                    stock.LockQty -= old.Qty - d.Qty;
                                }
                                old.IsBale = d.IsBale;
                                old.IsBelt = d.IsBelt;
                                old.Qty = d.Qty;
                                old.UpdateUser = userId;
                                old.UpdateTime = DateTime.Now;
                                var m = Db.Updateable(old).UpdateColumns(it => new { it.IsBale, it.IsBelt, it.Qty, it.UpdateUser, it.UpdateTime }).ExecuteCommand();
                                var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                            }
                        }
                        //客户信息
                        var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList().FirstOrDefault();
                        notice.Type = model.Type;
                        notice.CustomerNo = model.CustomerNo;
                        notice.CustomerName = customer == null ? "" : customer.CustomerName;
                        notice.LogisticsId = model.LogisticsId;
                        notice.UpdateUser = userId;
                        notice.UpdateTime = DateTime.Now;
                        var n = Db.Updateable(notice).ExecuteCommand();
                        if (n <= 0)
                        {
                            Db.RollbackTran();
                            return false;
                        }
                    }
                    //添加操作日志记录
                    var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "编辑", $"编辑了单据号为{notice.SONo}的单据信息", userId);
@@ -2697,21 +2951,21 @@
                            }
                            var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand();
                            if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1:领料出库、
                            {
                                if (string.IsNullOrWhiteSpace(detail.LotNo))
                                {
                                    detail.LotNo = s.LotNo;
                            //if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1:领料出库、
                            //{
                            //    if (string.IsNullOrWhiteSpace(detail.LotNo))
                            //    {
                            //        detail.LotNo = s.LotNo;
                                }
                                else
                                {
                                    if (!detail.LotNo.Contains(s.LotNo))
                                    {
                                        detail.LotNo += ";" + s.LotNo;
                                    }
                                }
                            }
                            //    }
                            //    else
                            //    {
                            //        if (!detail.LotNo.Contains(s.LotNo))
                            //        {
                            //            detail.LotNo += ";" + s.LotNo;
                            //        }
                            //    }
                            //}
                        }
                        detail.AllotQty += qty;
@@ -2852,14 +3106,14 @@
                        d.UpdateUser = userId;
                        d.UpdateTime = DateTime.Now;
                        if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1:领料出库、
                        {
                            if (d.IsIssueLotNo != "1")
                            {
                                d.LotNo = "";
                            }
                        //if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1:领料出库、
                        //{
                        //    if (d.IsIssueLotNo != "1")
                        //    {
                        //        d.LotNo = "";
                        //    }
                            
                        }
                        //}
                    }
                    notice.Status = "0";
                    notice.UpdateUser = userId;
Wms/WMS.BLL/Logic/AllotSku.cs
@@ -275,31 +275,68 @@
                var Db = DataContext.Db;
                var data = new List<StockDetailDto>();
                //库外托盘
                var detail1 = palletList.Where(m => string.IsNullOrWhiteSpace(m.LocatNo)).ToList();
                //平库内托盘
                var detail2 = palletList.Where(m => m.WareHouseNo == "W02").ToList();
                //立库内托盘
                var detail3 = palletList.Where(m => m.WareHouseNo == "W01").ToList();
                var list = palletList.Select(m => new StockDetailDto()
                {
                    Id = m.Id,
                    LotNo = m.LotNo,
                    LotText = m.LotText,
                    SupplierLot = m.SupplierLot,
                    OwnerNo = m.OwnerNo,
                    OwnerName = m.OwnerName,
                    SupplierNo = m.SupplierNo,
                    SupplierName = m.SupplierName,
                    SkuNo = m.SkuNo,
                    SkuName = m.SkuName,
                    Standard = m.Standard,
                    Qty = m.Qty,
                    LockQty = m.LockQty,
                    FrozenQty = m.FrozenQty,
                    InspectQty = m.InspectQty,
                    ASNNo = m.ASNNo,
                    ASNDetailNo = m.ASNDetailNo,
                    WareHouseNo = m.WareHouseNo,
                    RoadwayNo = m.RoadwayNo,
                    AreaNo = m.AreaNo,
                    LocatNo = m.LocatNo,
                    PalletNo = m.PalletNo,
                    PalletNo2 = m.PalletNo2,
                    PalletNo3 = m.PalletNo3,
                    CompleteTime = m.CompleteTime,
                    ProductionTime = m.ProductionTime,
                    ExpirationTime = m.ExpirationTime,
                    Status = m.Status,
                    InspectMark = m.InspectMark,
                    BitPalletMark = m.BitPalletMark,
                    InspectStatus = m.InspectStatus,
                    InspectTime = m.InspectTime,
                    PackagNo = m.PackagNo,
                    IsBale = m.IsBale,
                    IsBelt = m.IsBelt,
                    Demo = m.Demo,
                var data1 = detail1.Select(m => new StockDetailDto()).ToList();
                var data2 = detail2.Select(m => new StockDetailDto()).ToList();
                var data3 = detail3.Select(m => new StockDetailDto()).ToList();
                foreach (var item in data2)
                }).ToList();
                //库外托盘
                var detail1 = list.Where(m => string.IsNullOrWhiteSpace(m.LocatNo)).ToList();
                //平库内托盘
                var detail2 = list.Where(m => m.WareHouseNo == "W02").ToList();
                //立库内托盘
                var detail3 = list.Where(m => m.WareHouseNo == "W01").ToList();
                foreach (var item in detail2)
                {
                    var dept = item.LocatNo.Substring(5,2);
                    item.Dept = int.Parse(dept);
                }
                foreach (var item in data3)
                foreach (var item in detail3)
                {
                    var dept = item.LocatNo.Substring(6, 2);
                    item.Dept = int.Parse(dept);
                }
                data.AddRange(data1);
                data.AddRange(data2.OrderBy(m => m.Dept).ToList());
                data.AddRange(data3.OrderBy(m => m.Dept).ToList());
                data.AddRange(detail1);
                data.AddRange(detail2.OrderBy(m => m.Dept).ToList());
                data.AddRange(detail3.OrderBy(m => m.Dept).ToList());
                return data;
            }