From 9cbdf67973c15ddbebb8c3e754f616c7024c692f Mon Sep 17 00:00:00 2001
From: Demo <Demo@DESKTOP-CPA90BF>
Date: 星期日, 17 三月 2024 17:00:29 +0800
Subject: [PATCH] 修改bug问题

---
 Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs |  632 ++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 443 insertions(+), 189 deletions(-)

diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index 6cf26c6..93c1488 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -108,19 +108,84 @@
                         }
                         //搴撳瓨
                         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)
-                        {
-                            throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}");
-                        }
-
+                        
                         var item = new BllExportNoticeDetail()
                         {
                             SONo = billNo,
@@ -146,11 +211,14 @@
                             CreateUser = 0,
                         };
                         list.Add(item);
-                        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()
                     {
@@ -522,29 +590,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,
@@ -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()
@@ -716,161 +846,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);
@@ -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;

--
Gitblit v1.8.0