From 157abc191c34e57c1b958ae74fc3de6518ca8a30 Mon Sep 17 00:00:00 2001
From: zhaowc <526854230@qq.com>
Date: 星期五, 28 二月 2025 11:06:36 +0800
Subject: [PATCH] 修改客户需求

---
 Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 2260 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 1,746 insertions(+), 514 deletions(-)

diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index 3624c4d..68367c9 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -24,6 +24,12 @@
 using WMS.IBLL.IBllSoServer;
 using Model.ModelVm;
 using System.Runtime.Intrinsics.X86;
+using WMS.Entity.BllAsnEntity;
+using Model.ModelDto;
+using WMS.BLL.BllPdaServer;
+using WMS.IBLL.IPdaServer;
+using System.DirectoryServices.Protocols;
+using Model.ModelDto.SysDto;
 
 namespace WMS.BLL.BllSoServer
 {
@@ -41,7 +47,7 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        public bool ErpAddExportNotice(SoInfo model)
+        public void HttpAddExportNotice(SoInfo model)
         {
             try
             {
@@ -49,11 +55,11 @@
                 {
                     throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!");
                 }
-                if (string.IsNullOrEmpty(model.Customer))
-                {
-                    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
-                }
-                if (string.IsNullOrEmpty(model.OrderCode))
+                //if (string.IsNullOrEmpty(model.Customer))
+                //{
+                //    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
+                //}
+                if (string.IsNullOrEmpty(model.OrderNo))
                 {
                     throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!");
                 }
@@ -68,10 +74,10 @@
 
                 //瀹㈡埛淇℃伅
                 var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer);
-                if (customer == null)
-                {
-                    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
-                }
+                //if (customer == null)
+                //{
+                //    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
+                //}
                 var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo);
                 int? logisticsId = null;
                 if (logistics != null)
@@ -108,47 +114,120 @@
                         }
                         //搴撳瓨
                         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)
+                            {
+                                dic.Add(stocks.First().Id, d.Qty - q1);
+
+                                q1 += 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();
-                        }
-                        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();
+
+                            foreach (var demo in stocks)
+                            {
+                                if (q1 >= d.Qty)
+                                {
+                                    continue;
+                                }
+                                var q2 = demo.Qty - demo.LockQty - demo.FrozenQty;
+
+                                if (q2 >= d.Qty - q1)
+                                {
+                                    dic.Add(demo.Id, d.Qty - q1);
+
+                                    q1 += 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)
+                                {
+                                    dic.Add(stocks.First().Id, d.Qty - q1);
+
+                                    q1 += 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()
+                        foreach (var s in dic)
                         {
-                            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 = "",
+                            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);
-                        stocks.First().LockQty += d.Qty;//閿佸畾鏁伴噺
+                                CreateUser = 0,
+                            };
+                            list.Add(item);
 
-                        var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty })
-                            .ExecuteCommand();
+                            st.LockQty += s.Value;//閿佸畾鏁伴噺
+                            var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty })
+                                .ExecuteCommand();
+                        }
 
                     }
                     var notice = new BllExportNotice()
@@ -156,9 +235,10 @@
                         SONo = billNo,
                         Type = model.SoType,
                         Status = "0",
-                        Origin = "WMS",
-                        CustomerNo = model.Customer,
-                        CustomerName = customer.CustomerName,
+                        Origin = model.Origin,
+                        OrderCode = model.OrderNo,
+                        //CustomerNo = model.Customer,
+                        //CustomerName = customer.CustomerName,
                         LogisticsId = logisticsId,
                         IsWave = "0",
                         WaveNo = "",
@@ -172,12 +252,10 @@
 
                     if (n <= 0 || m <= 0)
                     {
-                        Db.RollbackTran();
-                        return false;
+                        throw new Exception("鍏ュ簱鍗曟垨鏄庣粏娣诲姞淇濆瓨澶辫触");
                     }
                     Db.CommitTran();
-                    return true;
-
+                    
                 }
                 catch (Exception ex)
                 {
@@ -189,17 +267,28 @@
             }
             catch (Exception ex)
             {
-                Db.RollbackTran();
                 throw new Exception(ex.Message);
             }
         }
 
         //鍥炰紶鍑哄簱鍗�
-        public bool FinishSo(int id, string url, int userId)
+        public bool FinishSo(int id, string url, string userNo, string pwd, int userId)
         {
             try
             {
-                var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id&& m.IsDel == "0");
+                var loginPwd = Md5Tools.CalcMd5(pwd);
+                var date = Db.Queryable<SysUserInfor>().First(m => m.IsDel == "0" && m.UserName == userNo && m.PassWord == loginPwd);
+
+                if (date == null) //璐﹀彿瀵嗙爜鏄惁姝g‘
+                {
+                    throw new Exception("璐﹀彿瀵嗙爜涓嶆纭垨娌℃湁姝よ处鍙�");
+                }
+                if (date.Status != "0") //褰撳墠璐﹀彿鏄惁姝e父鍚敤
+                {
+                    throw new Exception("褰撳墠璐﹀彿闈炲惎鐢ㄧ姸鎬�");
+                }
+
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id && m.IsDel == "0");
                 if (notice == null)
                 {
                     throw new Exception("鏈煡璇㈠埌鍗曟嵁淇℃伅");
@@ -213,7 +302,7 @@
                 {
                     throw new Exception("鏈煡璇㈠埌鍗曟嵁鏄庣粏淇℃伅");
                 }
-                if (userId == notice.UpdateUser)
+                if (date.Id == notice.UpdateUser)
                 {
                     throw new Exception("澶嶆牳澶辫触锛屽鏍镐汉鍛樺拰鍏抽棴璁㈠崟浜哄憳涓嶈兘鐩稿悓锛�");
                 }
@@ -224,13 +313,13 @@
                     {
                         SkuNo = d.SkuNo,
                         LotNo = d.LotNo,
-                        Qty = int.Parse(d.CompleteQty.ToString())
+                        Qty = (decimal)d.CompleteQty
                     };
                     list.Add(item);
                 }
                 var soInfo = new SoInfo()
                 {
-                    OrderCode = notice.OrderCode,
+                    OrderNo = notice.OrderCode,
                     SoDetails = list
                 };
                 #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp
@@ -247,11 +336,11 @@
                 #endregion
 
                 notice.Status = "6";
-                notice.UpdateTime = DateTime.Now;
-                notice.UpdateUser = userId;
+                notice.CheckTime = DateTime.Now;
+                notice.CheckUser = date.Id;
                 Db.Updateable(notice).ExecuteCommand();
 
-                new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "澶嶆牳", $"澶嶆牳浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
+                new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "澶嶆牳", $"{date.RealName}澶嶆牳浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
                 return true;
             }
             catch (Exception e)
@@ -290,34 +379,34 @@
                     .LeftJoin<SysLogisticsInfo>((a, b) => a.LogisticsId == b.Id)
                     .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id)
                     .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id)
-                    .LeftJoin<SysUserInfor>((a, b, c, d,e) => a.CheckUser == e.Id)
-                    .Select((a, b, c, d,e) => new ExportNoticeDto()
+                    .LeftJoin<SysUserInfor>((a, b, c, d, e) => a.CheckUser == e.Id)
+                    .Select((a, b, c, d, e) => new ExportNoticeDto()
                     {
-                        Id = a.Id,
-                        SONo = a.SONo,
-                        Type = a.Type,
-                        Status = a.Status,
-                        Origin = a.Origin,
-                        CustomerNo = a.CustomerNo,
-                        CustomerName = a.CustomerName,
-                        LotNo = a.LotNo,
-                        LotText = a.LotText,
-                        SupplierLot = a.SupplierLot,
-                        LogisticsId = a.LogisticsId,
+                        //Id = a.Id,
+                        //SONo = a.SONo,
+                        //Type = a.Type,
+                        //Status = a.Status,
+                        //Origin = a.Origin,
+                        //CustomerNo = a.CustomerNo,
+                        //CustomerName = a.CustomerName,
+                        //LotNo = a.LotNo,
+                        //LotText = a.LotText,
+                        //SupplierLot = a.SupplierLot,
+                        //LogisticsId = a.LogisticsId,
                         LogisticsName = b.CarrierName,
-                        IsWave = a.IsWave,
-                        WaveNo = a.WaveNo,
-                        IsDespatch = a.IsDespatch,
-                        Demo=a.Demo,
+                        //IsWave = a.IsWave,
+                        //WaveNo = a.WaveNo,
+                        //IsDespatch = a.IsDespatch,
+                        //Demo = a.Demo,
 
                         CreateUserName = c.RealName,
                         UpdateUserName = c.RealName,
-                        CreateTime = a.CreateTime,
-                        UpdateTime = a.UpdateTime,
+                        //CreateTime = a.CreateTime,
+                        //UpdateTime = a.UpdateTime,
 
-                        CheckUserName=e.RealName,
-                        CheckTime=a.CheckTime
-                    })
+                        CheckUserName = e.RealName,
+                        //CheckTime = a.CheckTime
+                    },true)
                     .OrderByDescending(a => a.CreateTime)
                     .ToOffsetPage(page, limit, ref total);
                 count = total;
@@ -330,39 +419,60 @@
             }
         }
 
-        public List<ExStockInfoDto> GetStockGroupList(string type, string msg)
+        public List<ExStockInfoDto> GetStockGroupList(string type, string ownerNo, string msg)
         {
             try
             {
+                if (string.IsNullOrEmpty(type))
+                {
+                    throw new Exception("璇烽�夋嫨鍑哄簱鍗曠被鍨�");
+                }
+                if (type == "6" && string.IsNullOrEmpty(ownerNo))
+                {
+                    throw new Exception("浠e偍鍗曟嵁璇烽�夋嫨璐т富");
+                }
                 var plnList = new List<string>() { "100099" };
                 var skuList = new List<string>();
                 var sku = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0" && !plnList.Contains(m.SkuNo)); //鎺掗櫎绌烘墭鐩樼殑鐗╂枡闆嗗悎
                 string skuType = string.Empty;
+                string inspectStatus = string.Empty;
                 switch (type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧
                 {
-                    case "0"://鎴愬搧鍏ュ簱
+                    case "0"://鎴愬搧鍑哄簱
                         skuType = "(2)";
+                        inspectStatus = "1";
                         break;
                     case "1"://棰嗘枡鍑哄簱
                         skuType = "(0,1,3)";
+                        inspectStatus = "1";
                         break;
                     case "2"://鎶芥鍑哄簱
-                        skuType = "(2)";
+                        skuType = "(0,1,2,3)";
+                        inspectStatus = "0,1,2";
                         break;
                     case "3"://鐗╂枡鍙栨牱鍑哄簱
-                        skuType = "(0)";
+                        skuType = "(0,1,2,3)";
+                        inspectStatus = "0";
                         break;
                     case "4"://涓嶅悎鏍煎搧鍑哄簱
-                        skuType = "(2)";
+                        skuType = "(0,1,2,3,4)";
+                        inspectStatus = "2";
                         break;
                     case "5"://涓棿鍝佸嚭搴�
                         skuType = "(4)";
+                        inspectStatus = "0,1";
                         break;
                     case "6"://浠e偍鍑哄簱
-                        skuType = "(2)";
+                        skuType = "(0,1,2,3,4)";
+                        inspectStatus = "0,1,2";
+                        break;
+                    case "8"://瀵勫瓨鍑哄簱
+                        skuType = "(0,1,2,3)";
+                        inspectStatus = "0,1";
                         break;
                     default: //鍏跺畠鍑哄簱
                         skuType = "(0,1,2,3,4)";
+                        inspectStatus = "0,1";
                         break;
                 }
                 skuList = sku.Where(m => skuType.Contains(m.Type)).Select(m => m.SkuNo).ToList();
@@ -370,13 +480,24 @@
                 {
                     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();
                 Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
                     //.And(it => it.WareHouseNo == wareHouseNo)
-                    .And(it => it.InspectStatus == "1")
+                    .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus))
                     .And(m => skuList.Contains(m.SkuNo))
+                    .AndIF(type == "6", m => m.OwnerNo == ownerNo)//浠e偍鍑哄簱闇�瑕佸叧鑱旇揣涓�
+                    .AndIF(type != "6", m=> string.IsNullOrWhiteSpace(m.OwnerNo))
                     .AndIF(!string.IsNullOrWhiteSpace(msg), it => (it.SkuNo.Contains(msg) || it.SkuName.Contains(msg) || it.LotNo.Contains(msg)))
                     .And(it => (it.Qty - it.LockQty - it.FrozenQty) > 0)
                     .And(it => (it.Status == "0" || it.Status == "1"))
@@ -405,7 +526,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();
 
@@ -456,7 +578,7 @@
                 var skuNos = model.Detail.Select(a => a.SkuNo).Distinct().ToList();
                 //鏍规嵁鐗╂枡鍙疯幏鍙栫墿鏂欎俊鎭�佸簱瀛樻槑缁嗕腑鑾峰彇鎵规鎻忚堪渚涜揣鎵规绛�
                 var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList();
-                var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty-s.FrozenQty-s.LockQty) > 0).ToList();
+                var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
                 //var palletList = contextDb.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
                 //瀹㈡埛淇℃伅
                 var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList();
@@ -479,7 +601,7 @@
                     //娣诲姞鍑哄簱鍗�
                     foreach (var d in model.Detail)
                     {
-                        if (d.Qty < 1)
+                        if (d.Qty <=0)
                         {
                             throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0");
                         }
@@ -490,27 +612,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()
@@ -528,20 +703,29 @@
                             CompleteQty = 0,
                             PackagNo = sku.PackagNo,
                             Price = sku.Price,
-                            Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price*d.Qty,
+                            Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                             IsBale = d.IsBale,
                             IsBelt = d.IsBelt,
                             SupplierLot = stocks.First().SupplierLot,
                             IsWave = "0",
-                            WaveNo= "",
+                            WaveNo = "",
 
                             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()
@@ -555,7 +739,7 @@
                         LogisticsId = model.LogisticsId,
                         IsWave = "0",
                         WaveNo = "",
-                        IsDespatch="0",
+                        IsDespatch = "0",
 
                         CreateUser = userId,
                     };
@@ -627,7 +811,7 @@
                     var stockCount = 0.00m; //st.StockQuantity.Value
                     if (s != null)
                     {
-                        stockCount = s.Qty-s.FrozenQty-s.LockQty+d.Qty;
+                        stockCount = s.Qty - s.FrozenQty - s.LockQty + d.Qty;
                     }
 
                     var dm = new SelectStockSkuDto()
@@ -684,161 +868,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);
@@ -945,9 +1253,9 @@
                 {
                     throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
                 }
-                if (notice.Status != "4")
+                if (notice.Status != "4" && notice.Status != "3")
                 {
-                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负鎵ц瀹屾垚鎴栬鍗曞叧闂�");
+                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负姝e湪鎵ц鎴栨墽琛屽畬鎴�");
                 }
                 //鎬诲簱瀛樹俊鎭�
                 var stockList = Db.Queryable<DataStock>().ToList();
@@ -968,64 +1276,67 @@
 
                     foreach (var d in noticeDetail)
                     {
-                        //鏇存敼搴撳瓨鏄庣粏閿佸畾鏁伴噺
-                        //var orders = dataContext.WmsExportOrder.Where(o => o.ExportDetailId == d.Id
-                        //                && o.ExportExecuteFlag != "4" && o.ExportExecuteFlag == "3" && o.pickingType == 0).ToList();
-                        //foreach (var o in orders)
-                        //{
-                        //    if (o.ExportQuantity > o.PickedNum) //鍒ゆ柇鎷h揣鏄惁宸叉嫞瀹�
-                        //    {
-                        //        var pq = dataContext.WmsStockTray.Where(t => t.StockGoodId == o.ExportGoodsCode && t.StockStockCode == o.ExportStockCode);
-
-                        //        if (string.IsNullOrWhiteSpace(o.ExportLotNo))
-                        //        {
-                        //            pq = pq.Where(t => t.StockLotNo == null || t.StockLotNo == "");
-                        //        }
-                        //        else
-                        //        {
-                        //            pq = pq.Where(t => t.StockLotNo == o.ExportLotNo);
-                        //        }
-                        //        var pallet = pq.FirstOrDefault();
-                        //        //搴撳瓨鎵樼洏淇℃伅閿佸畾鏁伴噺杩樺師涓烘湭閿佸畾
-                        //        if (pq != null)
-                        //        {
-                        //            pallet.LockQuantity -= o.ExportQuantity.Value - o.PickedNum;
-                        //            pallet.StockQuantity += o.ExportQuantity.Value - o.PickedNum;
-                        //        }
-                        //    }
-                        //}
-
-                        if (d.Qty != d.CompleteQty)
+                        if (notice.Type == "0")//鎴愬搧鍑哄簱
                         {
-                            throw new Exception("褰撳墠鍗曟嵁鏄庣粏涓鍒掓暟閲忎笌鎷h揣鏁伴噺涓嶇锛岃鏍稿疄");
-                        }
-                        #region 搴撳瓨琛ㄥ噺鍘婚攣瀹氭暟閲忎笌鎬绘暟閲�(PDA鎷h揣鐨勬椂鍊欏凡缁忓噺鍘绘暟閲忎簡)
-                        /*var sq = stocks.Where(s => s.SkuNo == d.SkuNo);
-                        if (!string.IsNullOrWhiteSpace(d.LotNo))
-                        {
-                            sq = sq.Where(s => s.LotNo == d.LotNo);
-                        }
-                        else
-                        {
-                            sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo));
-                        }
-                        var st = sq.FirstOrDefault();
-                        if (st != null)
-                        {
-                            if (d.CompleteQty <= d.Qty)
+                            if (d.Qty != d.CompleteQty)
                             {
-                                st.Qty += d.Qty - d.CompleteQty.Value;
+                                throw new Exception("褰撳墠鍗曟嵁鏄庣粏涓鍒掓暟閲忎笌鎷h揣鏁伴噺涓嶇锛岃鏍稿疄");
+                            }
+                        }
+                        if (d.Qty < d.CompleteQty)
+                        {
+                            //鏇存敼搴撳瓨鏄庣粏閿佸畾鏁伴噺
+                            var allotList = Db.Queryable<BllExportAllot>().Where(o => o.SODetailNo == d.Id && o.Status == "3" && o.IsDel == "0").ToList();
+                            foreach (var o in allotList)
+                            {
+                                if (o.Qty > o.CompleteQty) //鍒ゆ柇鎷h揣鏄惁宸叉嫞瀹�
+                                {
+                                    var pq = Db.Queryable<DataStockDetail>().Where(t => t.IsDel == "0" && t.Id == o.StockId && t.SkuNo == o.SkuNo);
+
+                                    if (string.IsNullOrWhiteSpace(o.LotNo))
+                                    {
+                                        pq = pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo));
+                                    }
+                                    else
+                                    {
+                                        pq = pq.Where(t => t.LotNo == o.LotNo);
+                                    }
+                                    var pallet = pq.First();
+                                    //搴撳瓨鎵樼洏淇℃伅閿佸畾鏁伴噺杩樺師涓烘湭閿佸畾
+                                    if (pq != null)
+                                    {
+                                        //pallet.Qty -= o.CompleteQty.Value - o.Qty;
+                                        pallet.LockQty -= o.Qty - o.CompleteQty.Value;
+                                        Db.Updateable(pallet).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+                                    }
+                                }
+                            }
+
+
+                            #region 搴撳瓨琛ㄥ噺鍘婚攣瀹氭暟閲忎笌鎬绘暟閲�(PDA鎷h揣鐨勬椂鍊欏凡缁忓噺鍘绘暟閲忎簡)
+                            var sq = stocks.Where(s => s.SkuNo == d.SkuNo);
+                            if (!string.IsNullOrWhiteSpace(d.LotNo))
+                            {
+                                sq = sq.Where(s => s.LotNo == d.LotNo);
                             }
                             else
                             {
-                                st.Qty -= d.CompleteQty.Value - d.Qty;
+                                sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo));
                             }
-                            st.LockQty -= d.Qty;
-                            st.Qty -= d.Qty;
-                            //淇敼鎬诲簱瀛樿〃
-                            Db.Updateable(st).UpdateColumns(it => new { it.Qty, it.LockQty }).ExecuteCommand();
-                        }*/
-                        #endregion
+                            if (notice.Type == "6")//浠e偍
+                            {
+                                sq = sq.Where(s => s.OwnerNo == notice.CustomerNo);
+                            }
+                            var st = sq.FirstOrDefault();
+                            if (st != null)
+                            {
+                                st.LockQty -= d.Qty - d.CompleteQty.Value;
+                                //淇敼鎬诲簱瀛樿〃
+                                Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+                            }
+                            #endregion
+                        }
+
                     }
                     //娣诲姞鎿嶄綔鏃ュ織璁板綍
                     var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍏冲崟", $"鍏抽棴浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
@@ -1118,8 +1429,8 @@
                     .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim()))
                     .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim()))
                     .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim()))
-                    .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark==inspectMark)
-                    .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark== bitPalletMark)
+                    .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark == inspectMark)
+                    .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark == bitPalletMark)
                     .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo))
                     .And(a => a.Status == "0")
                     .And(a => a.WareHouseNo == "W01")
@@ -1151,7 +1462,7 @@
                 var outDtoList = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚� 
                 str = "";
                 var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0").ToList();
-                
+
                 if (stockDetailList.Count == 0)
                 {
                     throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅");
@@ -1166,7 +1477,7 @@
                 }
                 //鍒ゆ柇鎵樼洏搴撳瓨淇℃伅鍒嗙粍鍚庢槸鍚﹀ぇ浜�1鏉�
                 var detailGroup = stockDetailList.GroupBy(m => new { m.SkuNo, m.PalletNo, m.WareHouseNo, m.LocatNo }).ToList();
-                if (detailGroup.Count>1)
+                if (detailGroup.Count > 1)
                 {
                     throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅");
                 }
@@ -1249,7 +1560,7 @@
                         throw new Exception($"褰撳墠鎵樼洏鎵�鍦ㄧ殑鍌ㄤ綅宸叉崯鍧忥紝涓嶈兘鍑哄簱锛岃鏍稿疄");
                     }
 
-                    if (locate.Status !="1")
+                    if (locate.Status != "1")
                     {
                         throw new Exception($"褰撳墠鎵樼洏鎵�鍦ㄧ殑鍌ㄤ綅鐘舵�佷笉鏄湁鐗╁搧锛屼笉鑳藉嚭搴擄紝璇锋牳瀹�");
                     }
@@ -1305,10 +1616,10 @@
                         Db.Updateable(de).ExecuteCommand();
                         Db.Updateable(stocka).ExecuteCommand();
                     }
-                    
+
                     locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
                     Db.Updateable(locate).ExecuteCommand();
-                   
+
 
                     #endregion
 
@@ -1382,7 +1693,9 @@
             {
                 #region 闆嗗悎 
 
-                var outDtoList = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚� 
+                var outDto1 = new List<OutCommandDto>(); //鍏堝嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负1鐨勫偍浣嶏級
+                var outDto2 = new List<OutCommandDto>(); //鍚庡嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负2鐨勫偍浣嶏級
+                var moveDto = new List<OutCommandDto>(); //瑕佺Щ搴撴暟鎹殑闆嗗悎
                 //璁板綍閿欒淇℃伅鐨勯泦鍚� 
                 var flagList = new List<int>();//1:褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�2 鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�3鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�4 瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱
 
@@ -1417,35 +1730,56 @@
                     //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔�
                     foreach (var item in list)
                     {
+                        var taskNoStr = "";
                         string toLocation = string.Empty;//鐩爣浣嶇疆
                         string unstackingMode2 = unstackingMode;//鎷嗗灈鏂瑰紡锛�0:鏈哄櫒浜烘媶鍨� 1:PDA鎷嗗灈
                         #region 鍒ゆ柇鏄惁闇�瑕佹媶绠�
-                        var skuInfo = skuList.First(w => w.SkuNo == item.SkuNo);
-                        if (skuInfo == null)
+                        if (notice.Type == "0")//鎴愬搧鍑哄簱
                         {
-                            throw new Exception("鐗╂枡淇℃伅涓嶅瓨鍦紒");
-                        }
-                        var packagInfo = packagList.First(w => w.PackagNo == skuInfo.PackagNo);
-                        if (packagInfo == null)
-                        {
-                            throw new Exception("鍖呰淇℃伅涓嶅瓨鍦紒");
-                        }
-                        if (packagInfo.L2Name == "绠�")
-                        {
-                            if (item.Qty % (decimal)packagInfo.L2Num != 0)//鑳芥暣闄よ鏄庝笉鐢ㄦ媶绠憋紝涓嶈兘鏁撮櫎璇存槑闇�瑕佹媶绠�
+                            string isChai = "0";//鏄惁闇�瑕佹媶绠憋紝0:鍚� 1:鏄�
+                            var skuInfo = skuList.First(w => w.SkuNo == item.SkuNo);
+                            if (skuInfo == null)
                             {
-                                unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈
+                                throw new Exception("鐗╂枡淇℃伅涓嶅瓨鍦紒");
+                            }
+                            var packagInfo = packagList.First(w => w.PackagNo == skuInfo.PackagNo);
+                            if (packagInfo == null)
+                            {
+                                throw new Exception("鍖呰淇℃伅涓嶅瓨鍦紒");
+                            }
+                            if (packagInfo.L2Name == "绠�")
+                            {
+                                if (item.Qty % (decimal)packagInfo.L2Num != 0)//鑳芥暣闄よ鏄庝笉鐢ㄦ媶绠憋紝涓嶈兘鏁撮櫎璇存槑闇�瑕佹媶绠�
+                                {
+                                    isChai = "1";
+                                    unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈
+                                }
+                            }
+                            if (isChai == "0")
+                            {
+                                var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList();
+                                if (boxInfo.Count>0)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠�
+                                {
+                                    isChai = "1";
+                                    unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈
+                                }
+                            }
+
+                            if (unstackingMode2 == "0")//鏈哄櫒浜烘媶鍨�
+                            {
+                                toLocation = "009";//鏈哄櫒浜烘媶鍨涚粺涓�鍙戦�佸埌009宸ヤ綅锛岀敱PLC鑷姩鍒嗛厤鎷嗗灈浣�
+                            }
+                            else //PDA鎷嗗灈
+                            {
+                                toLocation = outMode;//鍑哄簱鍙�
                             }
                         }
-                        #endregion
-                        if (unstackingMode2 == "0")//鏈哄櫒浜烘媶鍨�
+                        else
                         {
-                            toLocation = loadingAddre;//瑁呰溅鍙�
-                        }
-                        else //PDA鎷嗗灈
-                        {
+                            unstackingMode2 = "1";//闈炴垚鍝佸嚭搴撹蛋PDA鎷嗗灈
                             toLocation = outMode;//鍑哄簱鍙�
                         }
+                        #endregion
 
                         // 鍌ㄤ綅鍙�
                         var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo;
@@ -1536,40 +1870,212 @@
                         if (locate.Status == "1") //鏈夌墿鍝�
                         {
                             #region 娣诲姞鍑哄簱浠诲姟
-
-                            var taskNo = new Common().GetMaxNo("TK");
-                            var exTask = new LogTask    //鍑哄簱浠诲姟
+                            if (locate.Depth == "01") //娣卞害涓�1
                             {
-                                TaskNo = taskNo,
-                                Sender = "WMS",
-                                Receiver = "WCS",
-                                IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                                var taskNo = new Common().GetMaxNo("TK");
+                                var exTask = new LogTask    //鍑哄簱浠诲姟
+                                {
+                                    TaskNo = taskNo,
+                                    Sender = "WMS",
+                                    Receiver = "WCS",
+                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
 
-                                StartLocat = locate.LocatNo,//璧峰浣嶇疆
-                                EndLocat = toLocation,//outMode,//鐩爣浣嶇疆
-                                PalletNo = item.PalletNo,//鎵樼洏鐮�
-                                IsSend = 1,//鏄惁鍙啀娆′笅鍙�
-                                IsCancel = 1,//鏄惁鍙彇娑�
-                                IsFinish = 1,//鏄惁鍙畬鎴�
-                                Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
-                                Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
-                                OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
-                                Msg = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
-                            };
-                            Db.Insertable(exTask).ExecuteCommand();
-                            logTaskList.Add(exTask);
+                                    StartLocat = locate.LocatNo,//璧峰浣嶇疆
+                                    EndLocat = toLocation,//outMode,//鐩爣浣嶇疆
+                                    PalletNo = item.PalletNo,//鎵樼洏鐮�
+                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                    Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                                    Msg = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
+                                };
+                                Db.Insertable(exTask).ExecuteCommand();
+                                logTaskList.Add(exTask);
 
-                            outDtoList.Add(new OutCommandDto()
+                                outDto1.Add(new OutCommandDto()
+                                {
+                                    PalletNo = item.PalletNo,//鎵樼洏鍙�
+                                    StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                    StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
+                                    EndLocate = toLocation,//outMode, // 鐩爣浣嶇疆 
+                                    TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                                    TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                    OutMode = "",  //鐩爣鍦板潃
+                                    Order = 1
+                                });
+                                taskNoStr = exTask.TaskNo;
+                            }
+                            else if (locate.Depth == "02") //娣卞害涓�2
                             {
-                                PalletNo = item.PalletNo,//鎵樼洏鍙�
-                                StartLocate = locate.LocatNo, // 璧峰浣嶇疆
-                                StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
-                                EndLocate = toLocation,//outMode, // 鐩爣浣嶇疆 
-                                TaskNo = exTask.TaskNo, // 浠诲姟鍙�
-                                TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
-                                OutMode = "",  //鐩爣鍦板潃
-                                Order = 1
-                            });
+                                //鑾峰彇鍑哄簱娣卞害涓�2鍌ㄤ綅鍓嶉潰鐨勫偍浣嶄俊鎭�
+                                var slotBefore = com.GetLocateNoDepth1(locate.WareHouseNo, locate.LocatNo);
+                                if (slotBefore.Status == "1") //鍓嶉潰鐨勫偍浣嶆湁璐х墿銆佽繘琛岀Щ搴撴搷浣�
+                                {
+                                    //瑕佸嚭搴撴繁搴︿负2鐨勫偍浣嶅墠闈㈢殑鍌ㄤ綅涓揣鐗╂槸鍚﹁鍑哄簱
+                                    var isout = outStockDetail.Count(m => m.LocatNo == slotBefore.LocatNo);
+
+                                    if (isout <= 0) //杩涜绉诲簱
+                                    {
+                                        //鍘诲簱瀛樿〃涓壘鍒板偍浣嶅搴旂殑鎵樼洏鐮佹搷浣�
+                                        var stockNew = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo);
+                                        if (stockNew == null)
+                                        {
+                                            var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == slotBefore.LocatNo);
+                                            slotChange.Status = "0";
+                                            Db.Updateable(slotChange).ExecuteCommand();
+                                        }
+                                        else
+                                        {
+                                            //鑾峰彇绉诲簱鐨勫簱浣�
+                                            var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, item.SkuNo);
+                                            //褰撳墠绉诲簱搴撲綅鐨勫偍浣嶄俊鎭�
+                                            var locatey = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0");
+                                            if (!string.IsNullOrEmpty(newSlot))
+                                            {
+                                                #region 娣诲姞鍑哄簱鏃跺彂鐢熺殑绉诲簱浠诲姟
+
+                                                var exYkTaskNo = new Common().GetMaxNo("TK");
+                                                var exYkTask = new LogTask    //鍑哄簱鏃朵骇鐢熺Щ搴撲换鍔�
+                                                {
+                                                    TaskNo = exYkTaskNo,
+                                                    Sender = "WMS",
+                                                    Receiver = "WCS",
+                                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                                    StartLocat = stockNew.LocatNo,//璧峰浣嶇疆
+                                                    EndLocat = newSlot,//鐩爣浣嶇疆
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鐮�
+                                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                                    Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+
+                                                    Msg = stockNew.LocatNo + " ==>> " + newSlot + "鐨勭Щ搴撲换鍔�",
+                                                };
+                                                Db.Insertable(exYkTask).ExecuteCommand();
+
+                                                moveDto.Add(new OutCommandDto()
+                                                {
+                                                    StartRoadway = slotBefore.RoadwayNo, //璧峰宸烽亾
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鍙�
+                                                    StartLocate = stockNew.LocatNo, // 璧峰浣嶇疆
+                                                    EndLocate = newSlot, // 鐩爣浣嶇疆 
+                                                    EndRoadway = locatey.RoadwayNo, // 鐩爣宸烽亾 
+                                                    TaskNo = exYkTask.TaskNo, // 浠诲姟鍙�
+                                                    TaskType = "2",// 浠诲姟绫诲瀷 (绉诲簱)
+                                                    OutMode = "",  //鐩爣鍦板潃
+                                                    Order = 1,
+                                                });
+                                                #endregion
+
+                                                #region 鏀瑰彉鍌ㄤ綅瑁呭~
+                                                var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id);
+                                                var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot);
+                                                slotChange.Status = "5"; //鏀瑰彉鐘舵�侊紙姝e湪绉诲嚭锛�
+                                                slotChange2.Status = "4"; // 鏀瑰彉鐘舵�侊紙姝e湪绉诲叆锛�
+                                                Db.Updateable(slotChange).ExecuteCommand();
+                                                Db.Updateable(slotChange2).ExecuteCommand();
+                                                #endregion
+                                            }
+                                            else
+                                            {
+                                                #region 娣诲姞鍑哄簱浠诲姟
+
+                                                var exYkTaskNo1 = new Common().GetMaxNo("TK");
+                                                var exYkTask1 = new LogTask    //鍑哄簱绉诲簱娌℃湁搴撲綅浜嗚繘琛屽嚭搴撲换鍔�
+                                                {
+                                                    TaskNo = exYkTaskNo1,
+                                                    Sender = "WMS",
+                                                    Receiver = "WCS",
+                                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                                    StartLocat = stockNew.LocatNo,//璧峰浣嶇疆
+                                                    EndLocat = toLocation,//鐩爣浣嶇疆
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鐮�
+                                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                                    Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                                                    Msg = locate.LocatNo + "鐨勫嚭搴撲换鍔�"
+                                                };
+                                                Db.Insertable(exYkTask1).ExecuteCommand();
+
+                                                outDto1.Add(new OutCommandDto()
+                                                {
+                                                    StartRoadway = slotBefore.RoadwayNo, //璧峰宸烽亾
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鍙�
+                                                    StartLocate = stockNew.LocatNo, // 璧峰浣嶇疆
+                                                    EndLocate = toLocation, // 鐩爣浣嶇疆 
+                                                    EndRoadway = "", // 鐩爣宸烽亾 
+                                                    TaskNo = exYkTask1.TaskNo, // 浠诲姟鍙�
+                                                    TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                                    OutMode = "",  //鐩爣鍦板潃
+                                                    Order = 1,
+                                                });
+                                                #endregion
+
+                                                #region MyRegion
+
+                                                var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id);
+                                                slotChange.Status = "3"; //鏀瑰彉鐘舵�侊紙姝e湪鍑哄簱锛�
+                                                Db.Updateable(slotChange).ExecuteCommand();
+
+                                                #endregion
+                                            }
+                                        }
+                                    }
+                                }
+                                else if (slotBefore.Status == "2" || slotBefore.Status == "4") //鍓嶉潰鍌ㄤ綅鐘舵�佹槸鍏ュ簱涓垨鑰呯Щ鍏ヤ腑
+                                {
+                                    flagList.Add(5);
+                                    continue;
+                                }
+
+                                #region 娣诲姞鍑哄簱浠诲姟
+
+                                var taskNo1 = new Common().GetMaxNo("TK");
+                                var exTask1 = new LogTask    //鍑哄簱浠诲姟
+                                {
+                                    TaskNo = taskNo1,
+                                    Sender = "WMS",
+                                    Receiver = "WCS",
+                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                    StartLocat = locate.LocatNo,//璧峰浣嶇疆
+                                    EndLocat = toLocation,//鐩爣浣嶇疆
+                                    PalletNo = item.PalletNo,//鎵樼洏鐮�
+                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                    Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                                    Msg = locate.LocatNo + "鐨勫嚭搴撲换鍔�"
+                                };
+                                Db.Insertable(exTask1).ExecuteCommand();
+                                logTaskList.Add(exTask1);
+                                outDto2.Add(new OutCommandDto()
+                                {
+                                    StartRoadway = locate.RoadwayNo, //璧峰宸烽亾
+                                    PalletNo = item.PalletNo,//鎵樼洏鍙�
+                                    StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                    EndLocate = toLocation, // 鐩爣浣嶇疆 
+                                    EndRoadway = locate.RoadwayNo, //鐩爣宸烽亾
+                                    TaskNo = exTask1.TaskNo, // 浠诲姟鍙�
+                                    TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                    OutMode = "",  //鐩爣鍦板潃
+                                    Order = 1,
+                                });
+                                taskNoStr = exTask1.TaskNo;
+                                #endregion
+
+                            }
                             #endregion
 
                             #region 鏀瑰彉鏁版嵁
@@ -1596,7 +2102,7 @@
                             locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
                             Db.Updateable(locate).ExecuteCommand();
 
-                            item.TaskNo = exTask.TaskNo; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
+                            item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
                             item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
                             item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡
                             item.OutMode = unstackingMode2 == "1" ? outMode : "";//鍑哄簱鍙�
@@ -1631,10 +2137,10 @@
                                     }
                                 }
                             }
-                            var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType =="1"&& m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo==item.PalletNo);
+                            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)
                             {
@@ -1653,7 +2159,8 @@
                             flagList.Add(1);
                         }
                     }
-
+                    outDto1.AddRange(moveDto);
+                    outDto1.AddRange(outDto2);
                     //娣诲姞鎿嶄綔鏃ュ織璁板綍
                     var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId);
                     Db.CommitTran();
@@ -1679,11 +2186,15 @@
                     {
                         str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�";
                     }
-                    if (outDtoList.Count > 0)
+                    if (string.IsNullOrWhiteSpace(str))
+                    {
+                        str += "鎵樼洏鍙墽琛岋紝鏃犻渶涓嬪彂鍑哄簱浠诲姟";
+                    }
+                    if (outDto1.Count > 0)
                     {
                         // 姝e紡杩愯绋嬪簭鏀惧紑
-                        var list2 = outDtoList.Select(m => m.TaskNo).ToList();
-                        var jsonData = JsonConvert.SerializeObject(outDtoList);
+                        var list2 = outDto1.Select(m => m.TaskNo).ToList();
+                        var jsonData = JsonConvert.SerializeObject(outDto1);
                         string response = "";
 
                         try
@@ -1692,7 +2203,7 @@
                             response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
                             var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
 
-                            ////瑙f瀽杩斿洖鏁版嵁 
+                            //////瑙f瀽杩斿洖鏁版嵁 
                             var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
                             if (wcsModel.StatusCode == 0)
                             {
@@ -1713,7 +2224,7 @@
 
                     }
 
-                    return outDtoList;
+                    return outDto1;
                 }
                 catch (Exception e)
                 {
@@ -1730,16 +2241,24 @@
             }
         }
 
-        //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛�
-        public void ExportSuccess(string taskNo, int userId)
+        //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛� 
+        public void ExportSuccess(string taskNo, int userId,string url)
         {
             try
             {
+                //鍑哄簱浠诲姟鍙锋洿鏀癸紝濡傛灉鐢盤LC鍑哄簱锛屽垯PLC鍥炰紶浠诲姟鍙蜂负锛氫换鍔″彿+瀹為檯鍑哄簱鍙�
+                var TtaskNo = taskNo;
+                var outLine = "";
+                if (taskNo.Length == 18)
+                {
+                    TtaskNo = taskNo.Substring(0, taskNo.Length - 3);
+                    outLine = taskNo.Substring(taskNo.Length - 3, 3);
+                }
                 //褰撳墠浠诲姟淇℃伅
-                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
+                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == TtaskNo && m.IsDel == "0");
                 if (task == null)
                 {
-                    throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅");
+                    throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹TtaskNo}鈥欑殑浠诲姟淇℃伅");
                 }
                 if (task.Status == "2")
                 {
@@ -1766,7 +2285,7 @@
                     }
                     foreach (var item in stockDetail)
                     {
-                        if (item.SkuNo== "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
+                        if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
                         {
                             //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺
                             var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099");
@@ -1855,7 +2374,7 @@
                         Db.Updateable(item).ExecuteCommand();
                     }
                     //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級
-                    var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
+                    var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == TtaskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
 
                     foreach (var item in allot)
                     {
@@ -1874,7 +2393,151 @@
                     if (userId != 0)
                     {
                         //娣诲姞鎿嶄綔鏃ュ織璁板綍
-                        var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId);
+                        var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", TtaskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{TtaskNo}鐨勪换鍔�", userId);
+                    }
+                    if (outLine != "" && outLine != "009" && outLine != "013" && outLine != "018" && outLine != "022")
+                    {
+                        #region 鍒嗛厤鍑哄簱鐩殑浣�
+                        string positionStart = outLine, positionEnd = "", type = "D00";
+                        var type1 = Db.Queryable<BllExportNotice>().Where(m => m.SONo == allot.First().SONo && m.IsDel == "0" && m.Status == "3").First();
+                        if (type1 == null)
+                        {
+                            var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B13").ToList();
+                            type = "D02"; //绌烘墭鐩樺灈鍑哄簱
+                            if (outLine == "443")//瑗夸晶鍑哄簱
+                            {
+                                positionEnd = locateno.First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                            else if (outLine == "440")  //涓滀晶鍑哄簱
+                            {
+                                positionEnd = locateno.First(m => m.Row == 2 && m.Status == "0" && m.Flag == "0").LocatNo; //涓滀晶鎴块棿搴撲綅
+                            }
+                            else  //1妤肩┖鎵樼洏鍑哄簱涓嶈皟鐢ˋGV
+                            {
+                                Db.CommitTran();
+                                return;
+                            }
+
+                        }
+                        else 
+                        { 
+                            if (type1.Type == "1" || (type1.Type == "5" && (positionStart == "440" || positionStart == "443")))  //3妤奸鏂欏嚭搴� /3L涓棿鍝佸嚭搴�
+                            {
+                                var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B11").ToList();
+                                if (outLine == "443")//瑗夸晶鍑哄簱
+                                {
+
+                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; //瑗夸晶鎴块棿搴撲綅鍜屽闈㈡埧闂�
+                                }
+                                else if (outLine == "440")  //涓滀晶鍑哄簱
+                                {
+                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 2  && m.Status == "0" && m.Flag == "0").LocatNo; //涓滀晶鎴块棿搴撲綅
+                                }
+                            }
+                            else if (type1.Type == "2" || type1.Type == "3") //鎶芥鍑哄簱 /鍙栨牱鍑哄簱
+                            {
+                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m=>m.LocatNo).First(m => m.AreaNo == "B04" && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                            else if (type1.Type == "4")//涓嶅悎鏍煎搧鍑哄簱
+                            {
+
+                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B03" && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                            else //鍏朵粬鍗曟嵁绫诲瀷閮藉瓨鏀惧彂璐х紦瀛樺尯
+                            {
+                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B02" && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                        }
+                        #endregion
+
+                        #region AGV璋冪敤
+                        var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == positionEnd && w.Flag == "0" && w.Status == "0");
+                        if (storageLocatEnd == null)
+                        {
+                            throw new Exception("鐢熸垚鐨凙GV浠诲姟鐩殑鍦板潃涓嶆纭�");
+                        }
+                        List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>();
+
+                        object[] position = new object[2];
+                        position[0] = new
+                        {
+                            positionCode = positionStart,
+                            type = "00"
+                        };
+                        position[1] = new
+                        {
+                            positionCode = positionEnd,
+                            type = "00"
+                        };
+
+                        AgvSchedulingTask agvTask = new AgvSchedulingTask();
+                        Random r = new Random();
+                        long ran = DateTime.Now.Ticks;
+                        agvTask.ReqCode = ran.ToString();
+                        //agvTask.ReqCode = TtaskNo;         //agv璇锋眰缂栧彿锛岄渶瑕侀殢鏈虹敓鎴�  锛堟渶澶�32浣嶏級
+                        agvTask.TaskCode = TtaskNo;         //浠诲姟鍙�
+                        agvTask.TaskTyp = type;           //鎼繍绫诲瀷
+                        agvTask.PositionCodePath = position;      //璧峰鍜岀洰鐨勪綅闆嗗悎
+                        agvTask.CtnrTyp = "1";            //瀹瑰櫒绫诲瀷锛屽�间负1
+                        if (type == "D02")
+                        {
+                            var palnoNum = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo);
+                            agvTask.CtnrNum = palnoNum.Qty.ToString();     //鍙犳墭浠诲姟闇�瑕佷笅鍙戠┖鎵樼洏鏁伴噺
+                        }
+
+                        agvTaskList.Add(agvTask);
+
+                        string str = "";
+                        var list2 = agvTaskList.Select(m => m.TaskCode).ToList();
+                        var jsonData = JsonConvert.SerializeObject(agvTaskList);
+                        jsonData = jsonData.Substring(1, jsonData.Length - 1);
+                        jsonData = jsonData.Substring(0, jsonData.Length - 1);
+                        var response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橝GV杞繍鍛戒护", "AGV");
+                        var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
+                        if (agvModel.Code != "0")
+                        {
+                            //璁板綍log
+                            var logStr = $@".\log\AGV\浠诲姟鍙嶉" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
+                            jsonData = JsonConvert.SerializeObject(agvModel);
+                            LogFile.SaveLogToFile($"AGV浠诲姟鍙嶉鎵ц閫氱煡锛�( {jsonData} ),", logStr);
+                        }
+
+                        #endregion
+
+                        #region 娣诲姞鍑哄簱浠诲姟淇℃伅
+
+                        var taskNonew = new Common().GetMaxNo("TK");
+                        var exTask = new LogTask    //灏忚溅绉诲簱浠诲姟
+                        {
+                            TaskNo = TtaskNo,
+                            Sender = "WMS",
+                            Receiver = "AGV",
+                            IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                            StartLocat = positionStart,//璧峰浣嶇疆
+                            EndLocat = positionEnd,//鐩爣浣嶇疆
+                            PalletNo = task.PalletNo,//鎵樼洏鐮�
+                            IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                            IsCancel = 1,//鏄惁鍙彇娑�
+                            IsFinish = 1,//鏄惁鍙畬鎴�
+                            Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                            Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                            OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                            CreateTime = DateTime.Now, //鍒涘缓鏃堕棿
+                            CreateUser = userId, //鍒涘缓浜�
+                            Msg = "灏忚溅浠�" + positionStart  + "鍒�" + positionEnd + "鐨勭Щ搴撲换鍔�", //鍏抽敭淇℃伅
+                                                                                                             //FinishDate = serverTime, //瀹屾垚鏃堕棿
+                        };
+                        Db.Insertable(exTask).ExecuteCommand();
+
+                        #endregion
+
+                        #region 鍌ㄤ綅鐘舵�佸彉鏇�
+                        //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓�
+                        var locat = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == positionEnd);
+                        locat.Status = "4"; //4 绉诲叆涓�
+                        Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅
+                        #endregion
                     }
                     Db.CommitTran();
                 }
@@ -1890,8 +2553,88 @@
             }
         }
 
+        /// <summary>
+        /// wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙绉诲簱鎴愬姛锛�
+        /// </summary>
+        /// <param name="taskNo">浠诲姟鍙�</param>
+        /// <param name="userId">鎿嶄綔浜�</param>
+        /// <exception cref="Exception"></exception>          
+        public void RelocationSuccess(string taskNo, int userId)
+        {
+            try
+            {
+                //褰撳墠浠诲姟淇℃伅
+                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
+                if (task == null)
+                {
+                    throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅");
+                }
+                if (task.Status == "2")
+                {
+                    throw new Exception("褰撳墠浠诲姟宸插畬鎴�");
+                }
+                Db.BeginTran();
+                //搴撳瓨涓綋鍓嶆墭鐩樼殑淇℃伅
+                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
+                //褰撳墠浠诲姟涓殑鐩爣鍌ㄤ綅淇℃伅
+                //褰撳墠浠诲姟涓殑鍘熷偍浣�
+                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat);
+                if (locate == null)
+                {
+                    throw new Exception($"WMS绯荤粺涓病鏈夎{task.StartLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�");
+                }
+                var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
+                if (locate2 == null)
+                {
+                    throw new Exception($"WMS绯荤粺涓病鏈夎{task.EndLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�");
+                }
+
+                try
+                {
+                    task.Status = "2";//浠诲姟鐘舵��
+                    task.IsSend = 0;
+                    task.IsCancel = 0;
+                    task.IsFinish = 0;
+                    task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
+                    Db.Updateable(task).ExecuteCommand();
+
+                    #region 淇敼鍌ㄤ綅鐘舵��
+
+                    //鍘熷偍浣嶆敼涓虹┖鍌ㄤ綅 0
+                    locate.Status = "0";
+                    Db.Updateable(locate).ExecuteCommand();
+
+                    //鐩爣鍌ㄤ綅鏀逛负鏈夎揣鐗� 1
+                    locate2.Status = "1";
+                    Db.Updateable(locate2).ExecuteCommand();
+                    foreach (var item in stockDetail)
+                    {
+                        item.WareHouseNo = locate2.WareHouseNo;
+                        item.AreaNo = locate2.AreaNo;
+                        item.RoadwayNo = locate2.RoadwayNo;
+                        item.LocatNo = locate2.LocatNo;
+                    }
+                    Db.Updateable(stockDetail).ExecuteCommand();
+
+                    #endregion
+
+                    Db.CommitTran();
+                }
+                catch (Exception ex)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(ex.Message);
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message);
+            }
+        }
+
+
         //閲嶆柊涓嬪彂鍑哄簱浠诲姟
-        public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url)
+        public OutCommandDto AgainSendSoTask(string taskNo, string Receiver, int userId, string url)
         {
             try
             {
@@ -1942,22 +2685,42 @@
                 {
                     //绋嬪簭姝e紡鍙戝竷鍚庢斁寮�
                     var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
-                    var response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+                    var response = HttpHelper.DoPost(url, jsonData, Receiver == "WCS" ? "涓嬪彂缁橶CS鍑哄簱鍛戒护" : "涓嬪彂缁橝GV鍑哄簱鍛戒护", "WCS");
                     var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
 
-                    ////瑙f瀽杩斿洖鏁版嵁 
-                    var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
-                    if (wcsModel.StatusCode == 0)
+                    if (Receiver == "WCS")
                     {
-                        //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
-                        new TaskServer().EditTaskIssueOk(list, time1, time2);
+                        ////瑙f瀽杩斿洖鏁版嵁 
+                        var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
+                        if (wcsModel.StatusCode == 0)
+                        {
+                            //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+                            new TaskServer().EditTaskIssueOk(list, time1, time2);
 
+                        }
+                        if (wcsModel.StatusCode == -1)
+                        {
+                            new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg);
+                            throw new Exception($"wcs杩斿洖鐘舵�佸紓甯革細{wcsModel.Msg}");
+                        }
                     }
-                    if (wcsModel.StatusCode == -1)
+                    else if (Receiver == "AGV")
                     {
-                        new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg);
-                        throw new Exception($"wcs杩斿洖鐘舵�佸紓甯革細{wcsModel.Msg}");
+                        ////瑙f瀽杩斿洖鏁版嵁 
+                        var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
+                        if (agvModel.Code == "0")
+                        {
+                            //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+                            new TaskServer().EditTaskIssueOk(list, time1, time2);
+
+                        }
+                        if (agvModel.Code == "1")
+                        {
+                            new TaskServer().EditTaskIssueNo(list, time1, time2, agvModel.Message);
+                            throw new Exception($"agv杩斿洖鐘舵�佸紓甯革細{agvModel.Message}");
+                        }
                     }
+                    
                 }
                 catch (Exception ex)
                 {
@@ -1985,6 +2748,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);
+                    //鑾峰彇绉诲簱浠籨鍔″搴旂洰鏍囧偍浣嶄俊鎭�
+                    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;
@@ -2009,21 +2804,10 @@
                         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);
-
-                        if (locat == null)
-                        {
-                            Db.RollbackTran();
-                            throw new Exception("鏈煡璇㈠埌鍌ㄤ綅淇℃伅锛岃鏍稿疄锛�");
-                        }
-                        locat.Status = "1"; //鏈夌墿鍝�
-                        Db.Updateable(locat).ExecuteCommand();
-
                         if (noticeDetail.FactQty == 0)
                         {
                             var noticeDetail2 = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo && m.Id != noticeDetail.Id).ToList();
-                            var num = noticeDetail2.Count(m => m.FactQty>0);
+                            var num = noticeDetail2.Count(m => m.FactQty > 0);
                             //鍒ゆ柇鍑哄簱鍗曠殑鎵�鏈夋槑缁嗘槸鍚﹂兘涓�0锛涘鏋滀负0鍙樻洿鍑哄簱鍗曠姸鎬佷负宸插垎閰�
                             if (num == 0)
                             {
@@ -2049,7 +2833,7 @@
                             //淇敼搴撳瓨鏄庣粏
                             stockDetail.LockQty -= stockDetail.Qty; //閿佸畾鏁伴噺
                             stockDetail.Status = "0"; //搴撳瓨鐘舵�� 0锛氬緟鍒嗛厤
-                            
+
                             //淇敼搴撳瓨鎬昏〃
                             datastock.LockQty -= (int)stockDetail.Qty; //閿佸畾鏁伴噺
 
@@ -2067,13 +2851,13 @@
                             Db.Updateable(locate).ExecuteCommand();
 
                         }
-                        
+
                     }
                     else
                     {
                         Db.Updateable(allot).ExecuteCommand();
                     }
-                    
+
                     //娣诲姞鎿嶄綔鏃ュ織璁板綍
                     var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "鍙栨秷", $"鐐瑰嚮鍙栨秷鎸夐挳銆佸彇娑堜簡浠诲姟鍙蜂负锛歿taskNo}鐨勪换鍔�", (int)userId);
                     Db.CommitTran();
@@ -2100,7 +2884,7 @@
             try
             {
                 // 鍒ゆ柇褰撳墠浠诲姟鐘舵��  Status 1:姝e湪鎵ц 3:寮傚父缁撴潫
-                var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" &&  m.Status == "1");
+                var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1");
                 if (taskModel == null)
                 {
                     throw new Exception("姝や换鍔′笉瀛樺湪鎴栦换鍔$姸鎬佸凡鍙樻洿!");
@@ -2140,7 +2924,15 @@
 
                     // 鍑哄簱鎬昏〃  鐘舵�佹敼涓洪儴鍒嗗垎閰�
                     var noticeModel = Db.Queryable<BllExportNotice>().First(m => m.SONo == noticeDetailModel.SONo && m.IsDel == "0");
-                    noticeModel.Status = "1";
+                    if (noticeDetailModel.AllotQty<=0)
+                    {
+                        noticeModel.Status = "0";
+                    }
+                    else
+                    {
+                        noticeModel.Status = "1";
+                    }
+                   
                     Db.Updateable(noticeModel).ExecuteCommand();
 
                     // 搴撳瓨鏄庣粏琛� 鐘舵�佷慨鏀逛负寮傚父閿佸畾 閿佸畾鏁伴噺淇敼涓烘墭鐩樹笂鏁伴噺
@@ -2154,7 +2946,7 @@
 
                     // 搴撳瓨鎬昏〃 閿佸畾鏁伴噺=褰撳墠閿佸畾鏁伴噺 +  (搴撳瓨鏄庣粏鎵樼洏涓婃暟閲�-搴撳瓨鏄庣粏鎵樼洏涓婂凡閿佸畾鐨勬暟閲�)
                     var stockModel = Db.Queryable<DataStock>().First(m => m.LotNo == stockDetailModel.LotNo && m.SkuNo == stockDetailModel.SkuNo && m.IsDel == "0");
-                    stockModel.LockQty = stockModel.LockQty + (int)(stockDetailModel.Qty - lockQty);
+                    stockModel.LockQty = stockModel.LockQty + (decimal)(stockDetailModel.Qty - lockQty);
                     Db.Updateable(stockModel).ExecuteCommand();
 
                     // 鎷h揣鏄庣粏琛� 鍒犻櫎
@@ -2207,7 +2999,7 @@
                 }
                 if (notice.Status != "0" && notice.Status != "1")
                 {
-                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰嶆垨鏉ユ簮鏄惁鏄疻MS");
+                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;");
                 }
                 //鍑哄簱鍗曟槑缁�
                 var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList();
@@ -2242,70 +3034,90 @@
                         //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规
                         if (!string.IsNullOrWhiteSpace(detail.LotNo))
                         {
-                            stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList();
+                            if (detail.LotNo.Contains(";"))
+                            {
+                                var lotNoList = detail.LotNo.Split(";");
+                                var lotNoList2 = new List<string>();
+
+                                foreach (var lotNoItem in lotNoList)
+                                {
+                                    lotNoList2.Add(lotNoItem);
+                                }
+                                stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && lotNoList2.Contains(m.LotNo) && m.IsDel == "0").ToList();
+                            }
+                            else
+                            {
+                                stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList();
+                            }
+
                         }
                         else
                         {
-                            stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && string.IsNullOrWhiteSpace(m.LotNo) && m.IsDel == "0").ToList();
+                            stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList(); //
                         }
 
                         if (stockDetail.Count < 1)
                         {
                             throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨");
                         }
+                        //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�3锛氱墿鏂欏彇鏍峰嚭搴撱��4:涓嶅悎鏍煎搧鍑哄簱銆�5:涓棿鍝佸嚭搴撱��6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆�8:瀵勫瓨鍑哄簱
+                        if (notice.Type == "0" || notice.Type == "1")//鎴愬搧銆佸師杈呮枡鍑哄簱
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList();
+                        }
+                        else if (notice.Type == "3")//鍙栨牱鍑哄簱
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "0").ToList();
+                        }
+                        else if (notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList();
+                        }
+                        else if (notice.Type == "4")//涓嶅悎鏍煎嚭搴�
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList();
+                        }
 
-                        //if (notice.Type == "0" || notice.Type == "1")//鎴愬搧銆佸師杈呮枡鍑哄簱
-                        //{
-                        stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList();
-                        //}
-                        //else if (notice.Type == "2" || notice.Type == "3")//鎴愬搧銆佸師杈呮枡鍑哄簱(涓嶅悎鏍�)
-                        //{
-                        //    stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList();
-                        //}
-                        //else if (notice.Type == "4")//鍙栨牱鍑哄簱
-                        //{
-                        //    stockDetail = stockDetail.Where(m => m.InspectStatus == "0").ToList();
-                        //}
-                        //灏嗗簱瀛樻槑缁嗘寜娣卞害杩涜鎺掑簭 娣卞害1鍦ㄥ墠 娣卞害2鍦ㄥ悗
-                        //stockDetail = stockDetail.OrderBy(d => int.Parse(d.LocatNo.Substring(6, 2))).ToList();
                         #region 鍖呰淇℃伅
 
                         var pack = packList.FirstOrDefault(p => p.PackagNo == detail.PackagNo);
-                        if (pack == null)
-                        {
-                            throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰");
-                        }
                         var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺
                         var bNum = 0;//绠辩墿鍝佹暟閲�
-                        if (pack.L5Num.HasValue)
+                        if (pack != null)
                         {
-                            pNum = Convert.ToInt32(pack.L5Num);
-                            bNum = Convert.ToInt32(pack.L4Num);
+                            //throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰");
+                            if (pack.L5Num.HasValue)
+                            {
+                                pNum = Convert.ToInt32(pack.L5Num);
+                                bNum = Convert.ToInt32(pack.L4Num);
+                            }
+                            else if (pack.L4Num.HasValue)
+                            {
+                                pNum = Convert.ToInt32(pack.L4Num);
+                                bNum = Convert.ToInt32(pack.L3Num);
+                            }
+                            else if (pack.L3Num.HasValue)
+                            {
+                                pNum = Convert.ToInt32(pack.L3Num);
+                                bNum = Convert.ToInt32(pack.L2Num);
+                            }
+                            else if (pack.L2Num.HasValue)
+                            {
+                                pNum = Convert.ToInt32(pack.L2Num);
+                                bNum = Convert.ToInt32(pack.L1Num);
+                            }
+                            else if (pack.L1Num.HasValue)
+                            {
+                                pNum = Convert.ToInt32(pack.L1Num);
+                                bNum = Convert.ToInt32(pack.L1Num);
+                            }
                         }
-                        else if (pack.L4Num.HasValue)
-                        {
-                            pNum = Convert.ToInt32(pack.L4Num);
-                            bNum = Convert.ToInt32(pack.L3Num);
-                        }
-                        else if (pack.L3Num.HasValue)
-                        {
-                            pNum = Convert.ToInt32(pack.L3Num);
-                            bNum = Convert.ToInt32(pack.L2Num);
-                        }
-                        else if (pack.L2Num.HasValue)
-                        {
-                            pNum = Convert.ToInt32(pack.L2Num);
-                            bNum = Convert.ToInt32(pack.L1Num);
-                        }
-                        else if (pack.L1Num.HasValue)
-                        {
-                            pNum = Convert.ToInt32(pack.L1Num);
-                            bNum = Convert.ToInt32(pack.L1Num);
-                        }
-                        if (pNum == 0)
-                        {
-                            throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰鎵樼鍏崇郴淇℃伅");
-                        }
+
+
+                        //if (pNum == 0)
+                        //{
+                        //    throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰鎵樼鍏崇郴淇℃伅");
+                        //}
                         #endregion
                         //鍙栧悎閫傚簱瀛樺晢鍝�
                         Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟
@@ -2359,6 +3171,22 @@
                             }
 
                             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;
+
+                            //    }
+                            //    else
+                            //    {
+                            //        if (!detail.LotNo.Contains(s.LotNo))
+                            //        {
+                            //            detail.LotNo += ";" + s.LotNo;
+                            //        }
+                            //    }
+                            //}
+
                         }
                         detail.AllotQty += qty;
                         detail.UpdateUser = userId;
@@ -2497,6 +3325,15 @@
                         d.Status = "0";
                         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 = "";
+                        //    }
+
+                        //}
                     }
                     notice.Status = "0";
                     notice.UpdateUser = userId;
@@ -2565,26 +3402,63 @@
                 {
                     throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒");
                 }
-                if (detail.Status != "0" && detail.Status != "1" && detail.AllotQty >= detail.Qty)
-                {
-                    throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鏄瓑寰呮墽琛屾垨鍒嗛厤涓紒");
-                }
-                if (detail.AllotQty >= detail.Qty)
-                {
-                    throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴�!");
-                }
+
                 var notice = Db.Queryable<BllExportNotice>().First(a => a.SONo == detail.SONo);
                 if (notice == null)
                 {
                     throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗�!");
                 }
-                if (notice.Status == "3"  && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
+                if (notice.Type != "1" && notice.Type != "2" && notice.Type != "3")
                 {
-                    throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!");
+                    if (detail.Status != "0" && detail.Status != "1" && detail.AllotQty >= detail.Qty)
+                    {
+                        throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鏄瓑寰呮墽琛屾垨鍒嗛厤涓紒");
+                    }
+                    if (detail.AllotQty >= detail.Qty)
+                    {
+                        throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴�!");
+                    }
+
+                    if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
+                    {
+                        throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!");
+                    }
+                }
+                string inspectStatus = string.Empty;
+                switch (notice.Type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧
+                {
+                    case "0"://鎴愬搧鍑哄簱
+                        inspectStatus = "1";
+                        break;
+                    case "1"://棰嗘枡鍑哄簱
+                        inspectStatus = "1";
+                        break;
+                    case "2"://鎶芥鍑哄簱
+                        inspectStatus = "0,1,2";
+                        break;
+                    case "3"://鐗╂枡鍙栨牱鍑哄簱
+                        inspectStatus = "0";
+                        break;
+                    case "4"://涓嶅悎鏍煎搧鍑哄簱
+                        inspectStatus = "2";
+                        break;
+                    case "5"://涓棿鍝佸嚭搴�
+                        inspectStatus = "1";
+                        break;
+                    case "6"://浠e偍鍑哄簱
+                        inspectStatus = "0,1,2";
+                        break;
+                    case "8"://瀵勫瓨鍑哄簱
+                        inspectStatus = "0,1";
+                        break;
+                    default: //鍏跺畠鍑哄簱
+                        inspectStatus = "0,1";
+                        break;
                 }
                 #endregion
 
                 Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
+                    .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), m => inspectStatus.Contains(m.InspectStatus))
                     .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo)
                     .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo)
                     .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo)
@@ -2593,7 +3467,7 @@
                         m => m.SkuNo.Contains(msg.Trim())
                              || m.SkuName.Contains(msg.Trim())
                              || m.LocatNo.Contains(msg.Trim()))
-                    .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo &&(m.Status == "0" || m.Status == "1"))
+                    .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1"))
                     .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
 
                 var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto
@@ -2609,6 +3483,7 @@
                     LocatNo = a.LocatNo,
                     RoadwayNo = a.RoadwayNo,
                     PalletNo = a.PalletNo,
+                    Demo = a.Demo,
                 }).ToList();
 
                 return list;
@@ -2631,39 +3506,48 @@
                 {
                     throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曡鎯咃紒");
                 }
-                if (detail.AllotQty >= detail.Qty || (detail.Status != "0" && detail.Status != "1"))
-                {
-                    throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒");
-                }
-                var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel =="0" && a.SONo == detail.SONo);
+                var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == detail.SONo);
                 if (notice == null)
                 {
                     throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒");
                 }
-                if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
+                if (notice.Type != "1" && notice.Type != "2" && notice.Type !="3")
                 {
-                    throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒");
+                    if (detail.AllotQty >= detail.Qty || (detail.Status != "0" && detail.Status != "1"))
+                    {
+                        throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒");
+                    }
+
+                    if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
+                    {
+                        throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒");
+                    }
+
+                    //鍗曟嵁鏄庣粏闇�瑕佺殑鍑哄簱鏁伴噺
+                    var needQty = detail.Qty - detail.AllotQty;
+                    //鍒嗛厤鐨勫嚭搴撴暟閲�
+                    var outQty = model.StockList.Select(s => s.Qty).ToList().Sum();
+                    if (outQty < needQty)
+                    {
+                        throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笉鑳藉ぇ浜庤鍒掓暟閲忥紒");
+                    }
                 }
+                
                 #endregion
 
-                //鍗曟嵁鏄庣粏闇�瑕佺殑鍑哄簱鏁伴噺
-                var needQty = detail.Qty - detail.AllotQty;
-                //鍒嗛厤鐨勫嚭搴撴暟閲�
-                var outQty = model.StockList.Select(s => s.Qty).ToList().Sum();
-                if (outQty != needQty)
-                {
-                    throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笌璁″垝鏁伴噺涓嶄竴鑷达紒");
-                }
+                
                 var stockIds = model.StockList.Select(a => a.StockId).ToList();
                 //搴撳瓨鏄庣粏
                 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);
+                var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo);
 
                 var allotList = new List<BllExportAllot>();
-                var outQtys = 0;
+                decimal outQtys = 0;
                 foreach (var st in model.StockList)
                 {
                     var stock = stockList.First(a => a.Id == st.StockId);
@@ -2671,45 +3555,57 @@
                     {
                         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 = notice.Status == "4"? "2":"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";
-
-                    //搴撳瓨鎬昏〃
-                    //stockz.LockQty += st.Qty;
-                    //Db.Updateable(stockz).ExecuteCommand();
-
+                    if (detail.AllotQty+ st.Qty > detail.Qty)
+                    {
+                        //搴撳瓨鎬昏〃
+                        stockz.LockQty += (decimal)detail.AllotQty + st.Qty - detail.Qty;
+                        Db.Updateable(stockz).ExecuteCommand();
+                    }
 
                     Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand();
                     outQtys += st.Qty;
@@ -2735,14 +3631,14 @@
                     foreach (var item in detailList)
                     {
                         totalQty += item.Qty;
-                        totalAllotQty += Convert.ToInt32(item.AllotQty);
+                        totalAllotQty += Convert.ToDecimal(item.AllotQty);
                     }
 
                     if (totalAllotQty >= totalQty)
                     {
                         notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
                     }
-                    else if (totalAllotQty< totalQty  && totalAllotQty>0)
+                    else if (totalAllotQty < totalQty && totalAllotQty > 0)
                     {
                         notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺  淇敼涓洪儴鍒嗗垎閰�
                     }
@@ -2785,7 +3681,7 @@
                 //鐗╂枡缂栫爜琛�
                 var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0");
                 //鍖呰琛�
-                var packagList= Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
+                var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
                 //鍑哄簱鍒嗛厤淇℃伅
                 var allotList = Db.Queryable<BllExportAllot>().Where(w => w.IsDel == "0" && w.SONo == soNo).ToList();
                 foreach (var item in allotList)
@@ -2808,6 +3704,12 @@
                             break;
                         }
                     }
+                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList();
+                    if (boxInfo.Count>0)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠�
+                    {
+                        result = "1";//闇�瑕佹媶绠�
+                        break;
+                    }
                 }
                 return result;
             }
@@ -2816,5 +3718,335 @@
                 throw new Exception(ex.Message);
             }
         }
+
+        /// <summary>
+        /// 鑾峰彇绉诲簱鐩爣搴撲綅
+        /// </summary>
+        /// <param name="oldAddress">闇�瑕佺Щ鍔ㄧ殑搴撲綅鍦板潃</param>
+        /// <param name="roadWay">宸烽亾</param>
+        /// <param name="skuNo">鐗╂枡缂栫爜</param>
+        /// <returns>鐩爣搴撲綅鍦板潃 涓�"" 鐩存帴涓嬪彂涓ゆ鍑哄簱鎸囦护</returns>
+        public string MoveAddress(string oldAddress, string roadWay, string skuNo)//01020201  鎺�-鍒�-灞�-娣卞害
+        {
+            string nowAddress = "";
+
+            //鏍规嵁鐗╂枡缂栫爜鑾峰彇瀵瑰簲鍖哄煙
+            var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First();
+            var category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo);
+
+            // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅
+            var row = int.Parse(oldAddress.Substring(0, 2));
+            var lie = int.Parse(oldAddress.Substring(2, 2));
+            var ceng = int.Parse(oldAddress.Substring(4, 2));
+
+            var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{category.AreaNo}') order by distNum;";
+
+            var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
+            if (addressModels.Count > 0)   // 鍒ゆ柇鍚屽贩閬撳唴鎺掔┖搴撲綅
+            {
+                var listLocaete = new List<string>();
+                foreach (var item in addressModels)
+                {
+                    // 鐩爣鍐呭簱浣嶅搴旂殑澶栧簱浣�
+                    string addressee = item.LocatNo.Substring(0, 6) + "01";
+
+                    // 鍒ゆ柇鐩爣搴撲綅鐨勫搴撲綅鏄惁瀛樺湪璐х墿   (姝e父鎯呭喌涓嬫鍦ㄧЩ鍏ユ儏鍐典笉瀛樺湪锛屽洜涓虹Щ搴撳厛绉诲叆閲岄潰锛屽悗绉诲叆澶栭潰)
+                    //SlotStatus 0: 绌哄偍浣� 1锛氭湁璐�  2锛氭鍦ㄥ叆搴�  3锛氭鍦ㄥ嚭搴�   4锛氭鍦ㄧЩ鍏�  5锛氭鍦ㄧЩ鍑�
+                    sqlString = $"select count(*) from SysStorageLocat where LocatNo = '{addressee}' and Status = '0' and Flag in ('0','1') ; ";
+                    var rowNum = Db.Ado.SqlQuery<int>(sqlString).First();
+                    if (rowNum == 0)
+                    {
+                        continue;
+                    }
+                    else
+                    {
+                        nowAddress = item.LocatNo;
+                        break;
+                    }
+                }
+            }
+            if (nowAddress == "")
+            {
+                // 鍒ゆ柇鍚屽贩閬撳鎺掔┖搴撲綅
+                sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum 
+                                from SysStorageLocat 
+                                where Flag = '0' and Status = '0' and Depth = '01' and RoadwayNo = '{roadWay}' and AreaNo  in '{category}' 
+                                order by distNum;";
+                var adderModeling = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
+                if (adderModeling.Count > 0)
+                {
+                    nowAddress = adderModeling[0].LocatNo;
+                }
+                else
+                {
+                    // 搴撳唴涓嶅瓨鍦ㄧ┖鍌ㄤ綅  
+                    nowAddress = "";
+                }
+            }
+
+
+            return nowAddress;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎷嗗灈鎵樼洏鎷嗗灈淇℃伅
+        /// </summary>
+        /// <param name="model">鎷嗗灈鎵樼洏鍙峰拰WCS浠诲姟鍙�</param>
+        /// <returns>鎷嗗灈鎵樼洏淇℃伅</returns>
+        public RequestBoxInfoCheck BoxInfoCheckWcs (BoxInfoCheck model)
+        {
+            try
+            {
+                // 鍒ゆ柇褰撳墠浠诲姟鐘舵��  Status 1:姝e湪鎵ц 3:寮傚父缁撴潫
+                var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" );
+                if (taskModel == null)
+                {
+                    throw new Exception("姝や换鍔′笉瀛樺湪鎴栦换鍔$姸鎬佸凡鍙樻洿!");
+                }
+                // 楠岃瘉鎵樼洏鍒嗛厤淇℃伅
+                var palletBindModel = Db.Queryable<BllExportAllot>().First(m => m.PalletNo == model.PalletNo && m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "2");
+                if (palletBindModel == null)
+                {
+                    throw new Exception("鏈壘鍒板綋鍓嶆墭鐩樺垎閰嶄换鍔′俊鎭�!");
+                }
+                //璁$畻褰撳墠褰撳墠鎵樼洏涓婄鏁板拰鎷嗗灈绠辨暟
+                var storcklist = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletBindModel.PalletNo && m.SkuNo == palletBindModel.SkuNo && m.LotNo == palletBindModel.LotNo);
+
+                string level = "1";
+                int qty = 0, qtycount = 0;
+                var packlist = Db.Queryable<SysPackag>().First(m => m.PackagNo == palletBindModel.SkuNo && m.IsDel == "0");
+                if (packlist.L2Name == "绠�")
+                {
+                    level = "2";
+                }
+                switch (level)
+                {
+                    case "1":
+                        qty = (int)(palletBindModel.Qty / packlist.L1Num);
+                        qtycount = (int)(storcklist.Qty / packlist.L1Num);
+                        break;
+                    case "2":
+                        qty = (int)(palletBindModel.Qty / packlist.L2Num);
+                        qtycount = (int)(storcklist.Qty / packlist.L2Num);
+                        break;
+
+                }
+                
+                var list = new RequestBoxInfoCheck
+                {
+                    PalletNo = model.PalletNo,
+                    TaskNo = model.TaskNo,
+                    SkuNo = palletBindModel.SkuNo,
+                    SkuName  = palletBindModel.SkuName,
+                    LotNo = palletBindModel.LotNo,
+                    OrderNo = palletBindModel.SONo,
+                    Standard = palletBindModel.Standard,
+                    Qty = qty,//鎷嗗灈绠辨暟
+                    QtyCount = qtycount   //鎵樼洏涓婄鏁�
+                };
+                return list;
+            }
+            catch (Exception e)
+            {
+
+                throw new Exception(e.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鎷嗗灈鍒嗘嫞涓绘壂绠辩爜鍑哄簱
+        /// </summary>
+        /// <param name="model">绠卞彿</param>
+        /// <returns>鍑哄簱鍒嗘嫞鍙�</returns>
+        public string BoxInfoExportWcs(string boxno)
+        {
+            try
+            {
+                if (string.IsNullOrWhiteSpace(boxno))
+                {
+                    throw new Exception("涓绘壂鍒嗘嫞绠辩爜涓虹┖");
+                }
+                //绠辩爜鎵�鍦ㄦ媶鍨涙嫞璐т俊鎭�
+                var boxModel = Db.Queryable<DataBoxInfo>().First(m=>m.BoxNo == boxno);
+                if (boxModel == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅");
+                }
+                //鍑哄簱鍒嗛厤淇℃伅
+                var allot = Db.Queryable<BllExportAllot>().First(m =>
+                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == boxModel.PalletNo);
+                if (allot == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅");
+                }
+                //鍑哄簱鍗�
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == allot.SONo);
+                if (notice == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�");
+                }
+                //鍑哄簱鍗曟槑缁�
+                var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
+                    .First(m => m.IsDel == "0" && m.Id == allot.SODetailNo);
+                if (noticeDetail == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�");
+                }
+                
+                //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級
+                var needQty = allot.Qty - allot.CompleteQty;
+
+                //搴撳瓨鏄庣粏
+                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
+                if (stockDetail == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�");
+                }
+                //搴撳瓨鎬昏〃
+                var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
+                if (stock == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�");
+                }
+
+                List<DataBoxInfo> boxInfos;
+                var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxno && m.StockDetailId == stockDetail.Id);
+                if (boxInfo.Count() == 0)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅");
+                }
+                boxInfos = boxInfo.ToList();
+
+                var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == boxModel.PalletNo).ToList();
+                if (boxInfo.Count() == 0)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅");
+                }
+                if (boxInfo.Any(m => m.PalletNo != boxModel.PalletNo))
+                {
+                    throw new Exception("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴");
+                }
+                var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList();
+                if (boxQty[0] > needQty)
+                {
+                    throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺");
+                }
+                decimal pickQty = 0;//鎷h揣鐨勬暟閲�
+                Db.BeginTran();
+                var comList = new List<BllCompleteDetail>();
+                foreach (var item in boxInfos)
+                {
+                    //娣诲姞鎷h揣鏄庣粏
+                    var completeDetail = new BllCompleteDetail()
+                    {
+                        SONo = allot.SONo,
+                        SODetailNo = allot.SODetailNo,
+                        ExportAllotId = allot.Id,
+                        StockId = allot.StockId,
+                        BoxNo = item.BoxNo,
+                        BoxNo2 = item.BoxNo2,
+                        BoxNo3 = item.BoxNo3,
+
+                        LotNo = allot.LotNo,
+                        LotText = allot.LotText,
+                        SupplierLot = allot.SupplierLot,
+                        SkuNo = allot.SkuNo,
+                        SkuName = allot.SkuName,
+                        Standard = allot.Standard,
+                        PalletNo = boxModel.PalletNo,
+                        CompleteQty = item.Qty,
+
+                    };
+                    comList.Add(completeDetail);
+
+                    
+                    pickQty += item.Qty;
+                    //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
+                    Db.Deleteable(item).ExecuteCommand();
+                }
+
+                Db.Insertable(comList).ExecuteCommand();
+                //淇敼鍑哄簱鍒嗛厤淇℃伅
+                allot.CompleteQty += pickQty;
+                allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
+                allot.UpdateTime = DateTime.Now;
+                if (allot.Status == "5")
+                {
+                    //鍒ゆ柇璇ユ墭鐩樻槸鍚﹁繕瀛樺湪鐗╂枡 瀛樺湪鏀逛负寰呭洖搴� 寰呭洖搴撳畬鎴愬悗鏀逛负宸插畬鎴�
+                }
+                Db.Updateable(allot).ExecuteCommand();
+
+                //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁�
+                stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇�
+                stockDetail.Qty -= pickQty;
+                stockDetail.LockQty -= pickQty;
+                if (stockDetail.Qty == stockDetail.LockQty)
+                {
+                    stockDetail.Status = "2";
+                }
+                else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0)
+                {
+                    stockDetail.Status = "1";
+                }
+                else
+                {
+                    stockDetail.Status = "0";
+                }
+
+                if (stockDetail.Qty <= 0)
+                {
+                    Db.Deleteable(stockDetail).ExecuteCommand();
+                }
+                else
+                {
+                    Db.Updateable(stockDetail).ExecuteCommand();
+                }
+                stock.Qty -= pickQty;
+                stock.LockQty -= pickQty;
+                if (stock.Qty <= 0)
+                {
+                    Db.Deleteable(stock).ExecuteCommand();
+                }
+                else
+                {
+                    Db.Updateable(stock).ExecuteCommand();
+                }
+                var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == boxModel.PalletNo);
+                if (num2 <= 0)
+                {
+                    //鏀瑰彉鎵樼洏鐘舵��
+                    var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == boxModel.PalletNo && m.IsDel == "0");
+                    if (pallet == null)
+                    {
+                        throw new Exception("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�");
+                    }
+                    pallet.Status = "0";
+                    Db.Updateable(pallet).ExecuteCommand();
+                }
+                //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲�
+                noticeDetail.CompleteQty += pickQty;
+                noticeDetail.Status = "2";
+                Db.Updateable(noticeDetail).ExecuteCommand();
+
+                var num = Db.Queryable<BllExportNoticeDetail>()
+                    .Count(m => m.IsDel == "0" && m.SONo == allot.SONo && m.CompleteQty < m.Qty);
+                if (num <= 0)
+                {
+                    notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴�
+
+                    noticeDetail.Status = "3";
+                    Db.Updateable(noticeDetail).ExecuteCommand();
+                }
+                //淇敼鍑哄簱鍗曚俊鎭�
+                Db.Updateable(notice).ExecuteCommand();
+                Db.CommitTran();
+                return allot.LoadingAddre;
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
     }
 }

--
Gitblit v1.8.0