yuyou_x
2024-03-26 5b4f00ff3ea04a3246a8f6f86bdefe749fcfd0c4
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -108,49 +108,118 @@
                        }
                        //库存
                        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();
                            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();
                            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} 库存数量不足");
                            }
                        }
                        if (stocks.Count < 1)
                        foreach (var s in dic)
                        {
                            throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}");
                            var st = stockList.First(a => a.Id == s.Key);
                            var item = new BllExportNoticeDetail()
                            {
                                SONo = billNo,
                                SkuNo = sku.SkuNo,
                                SkuName = sku.SkuName,
                                Standard = sku.Standard,
                                LotNo = st.LotNo,
                                LotText = st.LotText,
                                Qty = s.Value,
                                AllotQty = 0,
                                FactQty = 0,
                                CompleteQty = 0,
                                PackagNo = sku.PackagNo,
                                Price = sku.Price,
                                Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                                IsBale = "",
                                IsBelt = "",
                                SupplierLot = stocks.First().SupplierLot,
                                IsWave = "0",
                                WaveNo = "",
                                IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
                                CreateUser = 0,
                            };
                            list.Add(item);
                            st.LockQty += s.Value;//锁定数量
                            var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty })
                                .ExecuteCommand();
                        }
                        var item = new BllExportNoticeDetail()
                        {
                            SONo = billNo,
                            SkuNo = sku.SkuNo,
                            SkuName = sku.SkuName,
                            Standard = sku.Standard,
                            LotNo = d.LotNo,
                            LotText = "",
                            Qty = d.Qty,
                            AllotQty = 0,
                            FactQty = 0,
                            CompleteQty = 0,
                            PackagNo = sku.PackagNo,
                            Price = sku.Price,
                            Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                            IsBale = "",
                            IsBelt = "",
                            SupplierLot = stocks.First().SupplierLot,
                            IsWave = "0",
                            WaveNo = "",
                            IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo)? "0":"1",
                            CreateUser = 0,
                        };
                        list.Add(item);
                        stocks.First().LockQty += d.Qty;//锁定数量
                        var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty })
                            .ExecuteCommand();
                    }
                    var notice = new BllExportNotice()
                    {
@@ -392,6 +461,15 @@
                {
                    throw new Exception("未查到对应出库类型的物料");
                }
                if (type!="8")
                {
                    skuList = skuList.Where(m => m != "100088").ToList();
                }
                else
                {
                    skuList = skuList.Where(m => m == "100088").ToList();
                }
                //skuList = sku.Select(m => m.SkuNo).ToList();
                var stockRst = new StockServer();
                var stockDetailRst = new StockDetailServer();
@@ -428,7 +506,8 @@
                    SkuName = it.SkuName,
                    LotNo = it.LotNo,
                    Standard = it.Standard,
                    Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty
                    //Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty,
                    Qty = it.Qty - it.LockQty - it.FrozenQty,
                }).ToList();
@@ -513,29 +592,82 @@
                        }
                        //库存
                        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()
                        {
                            SONo = billNo,
@@ -561,10 +693,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()
@@ -707,161 +848,285 @@
                try
                {
                    //删除旧
                    foreach (var d in noticeDetail)
                    if (notice.Origin == "WMS")
                    {
                        var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo).ToList();
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        //删除旧
                        foreach (var d in noticeDetail)
                        {
                            mq = mq.Where(o => o.LotNo == d.LotNo).ToList();
                        }
                        if (mq.Any()) //如果有这个物料及批次则跳过
                        {
                            continue;
                        }
                        //
                        var fl = stockList.Where(s => s.SkuNo == d.SkuNo).ToList();
                        DataStock fls;
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        {
                            fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo);
                        }
                        else
                        {
                            fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo));
                        }
                        if (fls == null)
                        {
                            throw new Exception($"未找到物料{d.SkuNo}、批次{d.LotNo} 的库存信息");
                        }
                        fls.LockQty -= d.Qty;
                        d.IsDel = "1";
                        d.UpdateUser = userId;
                        d.UpdateTime = DateTime.Now;
                        Db.Updateable(d).ExecuteCommand();
                        Db.Updateable(fls).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                    }
                    //更新出库单
                    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;
                        List<DataStockDetail> pallet;
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        {
                            stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
                            pallet = palletList.Where(p => p.SkuNo == d.SkuNo && p.LotNo == d.LotNo).ToList();
                        }
                        else
                        {
                            stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                            pallet = palletList.Where(p => p.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(p.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)
                            var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo).ToList();
                            if (!string.IsNullOrWhiteSpace(d.LotNo))
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                                mq = mq.Where(o => o.LotNo == d.LotNo).ToList();
                            }
                            var item = new BllExportNoticeDetail()
                            if (mq.Any()) //如果有这个物料及批次则跳过
                            {
                                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("物品库存数量不足");
                                continue;
                            }
                            //增加
                            if (d.Qty > old.Qty)
                            //
                            var fl = stockList.Where(s => s.SkuNo == d.SkuNo).ToList();
                            DataStock fls;
                            if (!string.IsNullOrWhiteSpace(d.LotNo))
                            {
                                stock.LockQty += d.Qty - old.Qty;
                                fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo);
                            }
                            else
                            {
                                stock.LockQty -= old.Qty - d.Qty;
                                fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo));
                            }
                            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();
                            if (fls == null)
                            {
                                throw new Exception($"未找到物料{d.SkuNo}、批次{d.LotNo} 的库存信息");
                            }
                            fls.LockQty -= d.Qty;
                            d.IsDel = "1";
                            d.UpdateUser = userId;
                            d.UpdateTime = DateTime.Now;
                            Db.Updateable(d).ExecuteCommand();
                            Db.Updateable(fls).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                        }
                        //更新出库单
                        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;
                            List<DataStockDetail> pallet;
                            if (!string.IsNullOrWhiteSpace(d.LotNo))
                            {
                                stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
                                pallet = palletList.Where(p => p.SkuNo == d.SkuNo && p.LotNo == d.LotNo).ToList();
                            }
                            else
                            {
                                stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                                pallet = palletList.Where(p => p.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(p.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 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)
                    else  //erp/mes
                    {
                        Db.RollbackTran();
                        return false;
                        //更新出库单
                        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);
@@ -1617,6 +1882,7 @@
                                    OutMode = "",  //目标地址
                                    Order = 1
                                });
                                taskNoStr = exTask.TaskNo;
                            }
                            else if (locate.Depth == "02") //深度为2
                            {
@@ -1705,7 +1971,7 @@
                                                    IsSuccess = 0, //是否下发成功 0失败 1成功
                                                    StartLocat = stockNew.LocatNo,//起始位置
                                                    EndLocat = "",//目标位置
                                                    EndLocat = toLocation,//目标位置
                                                    PalletNo = stockNew.PalletNo,//托盘码
                                                    IsSend = 1,//是否可再次下发
                                                    IsCancel = 1,//是否可取消
@@ -1722,7 +1988,7 @@
                                                    StartRoadway = slotBefore.RoadwayNo, //起始巷道
                                                    PalletNo = stockNew.PalletNo,//托盘号
                                                    StartLocate = stockNew.LocatNo, // 起始位置
                                                    EndLocate = "", // 目标位置
                                                    EndLocate = toLocation, // 目标位置
                                                    EndRoadway = "", // 目标巷道 
                                                    TaskNo = exYkTask1.TaskNo, // 任务号
                                                    TaskType = "1",// 任务类型 (出库)
@@ -1759,7 +2025,7 @@
                                    IsSuccess = 0, //是否下发成功 0失败 1成功
                                    StartLocat = locate.LocatNo,//起始位置
                                    EndLocat = "",//目标位置
                                    EndLocat = toLocation,//目标位置
                                    PalletNo = item.PalletNo,//托盘码
                                    IsSend = 1,//是否可再次下发
                                    IsCancel = 1,//是否可取消
@@ -1770,13 +2036,13 @@
                                    Msg = locate.LocatNo + "的出库任务"
                                };
                                Db.Insertable(exTask1).ExecuteCommand();
                                logTaskList.Add(exTask1);
                                outDto2.Add(new OutCommandDto()
                                {
                                    StartRoadway = locate.RoadwayNo, //起始巷道
                                    PalletNo = item.PalletNo,//托盘号
                                    StartLocate = locate.LocatNo, // 起始位置
                                    EndLocate = "", // 目标位置
                                    EndLocate = toLocation, // 目标位置
                                    EndRoadway = locate.RoadwayNo, //目标巷道
                                    TaskNo = exTask1.TaskNo, // 任务号
                                    TaskType = "1",// 任务类型 (出库)
@@ -1851,7 +2117,7 @@
                            var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
                            if (taskNo == null)
                            {
                                taskNo = logTaskList.First(m => m.PalletNo == item.PalletNo);//当前有同托盘不同物料出库
                                taskNo = logTaskList.FirstOrDefault(m => m.PalletNo == item.PalletNo);//当前有同托盘不同物料出库
                            }
                            if (taskNo == null)
                            {
@@ -1870,7 +2136,8 @@
                            flagList.Add(1);
                        }
                    }
                    outDto1.AddRange(moveDto);
                    outDto1.AddRange(outDto2);
                    //添加操作日志记录
                    var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", soNo, "出库", $"点击出库按钮出库单号为:{soNo}的出库单", userId);
                    Db.CommitTran();
@@ -2282,6 +2549,38 @@
                    {
                        throw new Exception("未查询到任务信息");
                    }
                    //获取对应库位信息
                    var startlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                    if (startlocat == null)
                    {
                        throw new Exception("未查询到储位信息");
                    }
                    startlocat.Status = "0";//修改分配信息状态
                    //获取储位信息
                    var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                    //获取移库任d务对应目标储位信息
                    SysStorageLocat endlocat = new SysStorageLocat();
                    if (task.Type == "2")
                    {
                        endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.EndLocat);
                        if (endlocat == null)
                        {
                            throw new Exception("未查询到目标储位信息");
                        }
                    }
                    if (locat == null)
                    {
                        Db.RollbackTran();
                        throw new Exception("未查询到储位信息,请核实!");
                    }
                    locat.Status = "1"; //有物品
                    Db.Updateable(locat).ExecuteCommand();
                    if (endlocat != null)
                    {
                        endlocat.Status = "0"; //空储位 0
                        Db.Updateable(endlocat).ExecuteCommand();
                    }
                    //修改任务 
                    task.IsSuccess = 1;
                    task.IsSend = 0;
@@ -2305,31 +2604,6 @@
                        noticeDetail.FactQty -= item.Qty; //修改出库单明细的下架数量
                        Db.Updateable(noticeDetail).ExecuteCommand();
                        //获取储位信息
                        var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                        //获取移库任务对应目标储位信息
                        SysStorageLocat endlocat = new SysStorageLocat();
                        if (task.Type == "2")
                        {
                            endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W03" && a.LocatNo == task.EndLocat);
                            if (endlocat == null)
                            {
                                throw new Exception("未查询到目标储位信息");
                            }
                        }
                        if (locat == null)
                        {
                            Db.RollbackTran();
                            throw new Exception("未查询到储位信息,请核实!");
                        }
                        locat.Status = "1"; //有物品
                        Db.Updateable(locat).ExecuteCommand();
                        if (endlocat != null)
                        {
                            endlocat.Status = "0"; //空储位 0
                            Db.Updateable(endlocat).ExecuteCommand();
                        }
                        if (noticeDetail.FactQty == 0)
                        {
@@ -2572,7 +2846,7 @@
                        }
                        else
                        {
                            stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0").ToList(); //&& string.IsNullOrWhiteSpace(m.LotNo)
                            stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList(); //
                        }
                        if (stockDetail.Count < 1)
@@ -2688,21 +2962,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;
@@ -2843,14 +3117,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;
@@ -3013,6 +3287,8 @@
                //库存明细
                var stockList = Db.Queryable<DataStockDetail>().Where(a => stockIds.Contains(a.Id)).ToList();
                //分配信息
                var allots = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == detail.Id && m.Status == "0").ToList();
                //库存总表
                //var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo);
@@ -3026,37 +3302,48 @@
                    {
                        throw new Exception("操作失败,部分储位库存异常!");
                    }
                    if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty - stock.InspectQty))
                    if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty))     // 输入的数量 -  托盘上可用的数量(托盘上数量-锁定的数量-冻结的数量)
                    {
                        throw new Exception("操作失败,出库数量超出库存数量!");
                    }
                    //添加分配表信息
                    var allot = new BllExportAllot
                    {
                        SONo = notice.SONo,
                        WaveNo = "",
                        SODetailNo = detail.Id,
                        StockId = st.StockId,
                        LotNo = stock.LotNo,
                        LotText = stock.LotText,
                        SupplierLot = stock.SupplierLot,
                        SkuNo = stock.SkuNo,
                        SkuName = stock.SkuName,
                        Standard = stock.Standard,
                        PalletNo = stock.PalletNo,
                        IsBale = stock.IsBale,
                        IsBelt = stock.IsBelt,
                        Qty = st.Qty,
                        CompleteQty = 0,
                        Status = "0",
                        LogisticsId = notice.LogisticsId,
                        IsAdvance = "0",
                        OutMode = "",//出库口
                        CreateUser = userId,
                        CreateTime = DateTime.Now
                    };
                    allotList.Add(allot);
                    var bl = allots.FirstOrDefault(m => m.StockId == st.StockId);
                    if (bl == null)
                    {
                        //添加分配表信息
                        var allot = new BllExportAllot
                        {
                            SONo = notice.SONo,
                            WaveNo = "",
                            SODetailNo = detail.Id,
                            StockId = st.StockId,
                            LotNo = stock.LotNo,
                            LotText = stock.LotText,
                            SupplierLot = stock.SupplierLot,
                            SkuNo = stock.SkuNo,
                            SkuName = stock.SkuName,
                            Standard = stock.Standard,
                            PalletNo = stock.PalletNo,
                            IsBale = stock.IsBale,
                            IsBelt = stock.IsBelt,
                            Qty = st.Qty,
                            CompleteQty = 0,
                            Status = "0",
                            LogisticsId = notice.LogisticsId,
                            IsAdvance = "0",
                            OutMode = "",//出库口
                            CreateUser = userId,
                            CreateTime = DateTime.Now
                        };
                        allotList.Add(allot);
                    }
                    else
                    {
                        bl.Qty += st.Qty;
                        Db.Updateable(bl).ExecuteCommand();
                    }
                    //库存明细
                    stock.LockQty += st.Qty;
                    stock.Status = stock.LockQty == stock.Qty ? "2" : "1";