From 48df8080d7befac9fff4f5345750699c592512f6 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期三, 07 五月 2025 08:21:28 +0800
Subject: [PATCH] 修改问题

---
 Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 3405 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 2,320 insertions(+), 1,085 deletions(-)

diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index 230ca96..88bb8bb 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -26,12 +26,17 @@
 using System.Runtime.Intrinsics.X86;
 using ZXing.OneD;
 using System.Threading.Tasks;
+using System.Diagnostics;
+using System.Drawing.Drawing2D;
+using Model.ModelDto.LogDto;
+using AutoMapper.Internal;
 
 namespace WMS.BLL.BllSoServer
 {
     public class ExportNoticeServer : DbHelper<BllExportNotice>, IExportNoticeServer
     {
         private static readonly SqlSugarScope Db = DataContext.Db;
+        private readonly object IssueOutLock = new object();
         public ExportNoticeServer() : base(Db)
         {
         }
@@ -812,6 +817,8 @@
 
         #endregion
 
+        #region JC34
+
         #region 鍩虹鍔熻兘
 
         public async Task<List<ExportNoticeDto>> GetExportNoticeList(GetExportNoticeVm model, RefAsync<int> count)
@@ -839,12 +846,14 @@
                 .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<SysWareHouse>((a, b, c, d, e,f) => a.WareHouseNo == f.WareHouseNo)
+                .Select((a, b, c, d, e,f) => new ExportNoticeDto()
                 {
                     Id = a.Id,
                     SONo = a.SONo,
                     Type = a.Type,
                     Status = a.Status,
+                    WareHouseName = f.WareHouseName,
                     Origin = a.Origin,
                     CustomerNo = a.CustomerNo,
                     CustomerName = a.CustomerName,
@@ -873,10 +882,14 @@
         }
 
         //鑾峰彇娣诲姞/缂栬緫鍑哄簱鍗曟椂閫夋嫨鐗╂枡鏄庣粏淇℃伅
-        public List<ExStockInfoDto> GetStockGroupList(string type, string ownerNo, string msg)
+        public List<ExStockInfoDto> GetStockGroupList(string house, string type, string ownerNo, string msg)
         {
             try
             {
+                if (string.IsNullOrEmpty(house))
+                {
+                    throw new Exception("璇烽�夋嫨鍑哄簱浠撳簱");
+                }
                 if (string.IsNullOrEmpty(type))
                 {
                     throw new Exception("璇烽�夋嫨鍑哄簱鍗曠被鍨�");
@@ -893,23 +906,52 @@
                 switch (type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧
                 {
                     case "0"://鎴愬搧鍑哄簱
+                        if (house !="W01")
+                        {
+                            throw new Exception("鎴愬搧鍑哄簱鍙兘閫夋嫨鎴愬搧搴�");
+                        }
                         skuType = "(2)";
                         inspectStatus = "1";
                         break;
                     case "1"://棰嗘枡鍑哄簱
+                        if (house != "W02")
+                        {
+                            throw new Exception("棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�");
+                        }
                         skuType = "(0,1,3)";
                         inspectStatus = "1";
                         break;
                     case "2"://鎶芥鍑哄簱
-                        skuType = "(0,1,2,3)";
+                        if (house == "W01")
+                        {
+                            skuType = "(2)";
+                        }
+                        if (house == "W02")
+                        {
+                            skuType = "(0,1,3)";
+                        }
                         inspectStatus = "0,1,2";
                         break;
                     case "3"://鐗╂枡鍙栨牱鍑哄簱
-                        skuType = "(0,1,2,3)";
+                        if (house == "W01")
+                        {
+                            skuType = "(2)";
+                        }
+                        if (house == "W02")
+                        {
+                            skuType = "(0,1,3)";
+                        }
                         inspectStatus = "0";
                         break;
                     case "4"://涓嶅悎鏍煎搧鍑哄簱
-                        skuType = "(0,1,2,3)";
+                        if (house == "W01")
+                        {
+                            skuType = "(2)";
+                        }
+                        if (house == "W02")
+                        {
+                            skuType = "(0,1,3)";
+                        }
                         inspectStatus = "2";
                         break;
                     case "5"://涓棿鍝佸嚭搴�
@@ -920,14 +962,38 @@
                         skuType = "(2)";
                         inspectStatus = "0,1";
                         break;
-                    case "8"://瀵勫瓨鍑哄簱
-                        skuType = "(0,1,2,3)";
+                    case "7"://鍏跺畠鍑哄簱
+                        if (house == "W01")
+                        {
+                            skuType = "(2)";
+                        }
+                        if (house == "W02")
+                        {
+                            skuType = "(0,1,3,4)";
+                        }
                         inspectStatus = "0,1";
+                        break;
+                    case "8"://瀵勫瓨鍑哄簱
+                        if (house == "W01")
+                        {
+                            skuType = "(2)";
+                        }
+                        if (house == "W02")
+                        {
+                            skuType = "(0,1,3)";
+                        }
+                        inspectStatus = "0,1";
+                        break;
+                    case "9"://鐢熶骇棰嗘枡鍑哄簱
+                        if (house != "W02")
+                        {
+                            throw new Exception("鐢熶骇棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�");
+                        }
+                        skuType = "(0,1,3)";
+                        inspectStatus = "1";
                         break;
                     default: //鍏跺畠鍑哄簱
-                        skuType = "(0,1,2,3,4)";
-                        inspectStatus = "0,1";
-                        break;
+                        throw new Exception("鍗曟嵁绫诲瀷閿欒");
                 }
                 var skuList = sku.Where(m => skuType.Contains(m.Type)).ToList();
                 if (skuList.Count == 0)
@@ -937,9 +1003,9 @@
 
                 if (type == "6")
                 {
-                    skuList = skuList.Where(m=> string.IsNullOrWhiteSpace(m.PackagNo)).ToList();
+                    skuList = skuList.Where(m => string.IsNullOrWhiteSpace(m.PackagNo)).ToList();
                 }
-                if (type!="8")
+                if (type != "8")
                 {
                     skuList = skuList.Where(m => m.SkuNo != "100088").ToList();
                 }
@@ -951,7 +1017,7 @@
                 var stockRst = new StockServer();
                 var stockDetailRst = new StockDetailServer();
                 Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
-                    //.And(it => it.WareHouseNo == wareHouseNo)
+                    .And(it => it.WareHouseNo == house || string.IsNullOrWhiteSpace(it.LocatNo))
                     .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus))
                     .And(m => skuStrList.Contains(m.SkuNo))
                     .AndIF(type == "6", m => m.OwnerNo == ownerNo)//浠e偍鍑哄簱闇�瑕佸叧鑱旇揣涓�
@@ -1035,6 +1101,23 @@
                 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();
+                switch (model.WareHouseNo)
+                {
+                    case "W01"://鎴愬搧搴�
+                        if (skuList.Any(m=>m.Type !="2"))
+                        {
+                            throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�");
+                        }
+                        break;
+                    case "W02"://鍘熸枡搴�
+                        if (skuList.Any(m => m.Type == "2"))
+                        {
+                            throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�");
+                        }
+                        break;
+                    default:
+                        throw new Exception("浠撳簱鍙烽敊璇�");
+                }
                 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();
                 //瀹㈡埛淇℃伅
@@ -1068,7 +1151,7 @@
                             throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}");
                         }
 
-                        //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///3锛氱墿鏂欏彇鏍峰嚭搴撱��5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱
+                        //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�7:鍏朵粬鍑哄簱銆�9鐢熶骇棰嗘枡鍑哄簱 ///3锛氱墿鏂欏彇鏍峰嚭搴撱��5:涓棿鍝佸嚭搴撱��6:浠e偍鍑哄簱銆�8:瀵勫瓨鍑哄簱
                         if (model.Type == "0" || model.Type == "2" || model.Type == "4" || model.Type == "7")
                         {
                             if (string.IsNullOrWhiteSpace(d.LotNo))
@@ -1077,20 +1160,20 @@
                             }
                         }
 
-                        if (model.Type == "1")
-                        {
-                            if (list.Count(m=>m.SkuNo == d.SkuNo)>=2)
-                            {
-                                throw new Exception("棰嗘枡鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃3涓壒娆℃贩鎵瑰嚭搴�");
-                            }
-                        }
-                        else
-                        {
-                            if (list.Count(m => m.SkuNo == d.SkuNo) >= 1)
-                            {
-                                throw new Exception("鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃2涓壒娆℃贩鎵瑰嚭搴�");
-                            }
-                        }
+                        //if (model.Type == "1")
+                        //{
+                        //    if (list.Count(m=>m.SkuNo == d.SkuNo)>=2)
+                        //    {
+                        //        throw new Exception("棰嗘枡鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃3涓壒娆℃贩鎵瑰嚭搴�");
+                        //    }
+                        //}
+                        //else
+                        //{
+                        //    if (list.Count(m => m.SkuNo == d.SkuNo) >= 1)
+                        //    {
+                        //        throw new Exception("鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃2涓壒娆℃贩鎵瑰嚭搴�");
+                        //    }
+                        //}
                         //搴撳瓨
                         List<DataStock> stocks;
 
@@ -1141,7 +1224,7 @@
                         };
                         list.Add(item);
 
-                        
+
                         stocks.First().LockQty += d.Qty;//閿佸畾鏁伴噺
                         var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty })
                             .ExecuteCommand();
@@ -1167,7 +1250,7 @@
                         IsWave = "0",
                         WaveNo = "",
                         IsDespatch = "0",
-
+                        WareHouseNo = model.WareHouseNo,
                         CreateUser = userId,
                     };
 
@@ -1218,6 +1301,7 @@
                 {
                     SoNo = notify.SONo,
                     Type = notify.Type,
+                    WareHouseNo = notify.WareHouseNo,
                     CustomerNo = notify.CustomerNo,
                     LogisticsId = notify.LogisticsId,
                     //ExportWarehouseId = notify.ExportWarehouseId,
@@ -1618,10 +1702,10 @@
                     //鏌ヨ鏀瑰悗鐨勫崟鎹俊鎭� 鍚庢湡鎺ュ彛瀵规帴瀹屽悗闇�鏀瑰姩鍥炰紶鍙傛暟
                     var detail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == notice.SONo).Select(m => new SelectStockSkuDto
                     {
-                        LotNo =m.LotNo,
+                        LotNo = m.LotNo,
                         SkuNo = m.SkuNo,
                         SkuName = m.SkuName,
-                        Qty = m.Qty, 
+                        Qty = m.Qty,
                         ExQty = decimal.Parse(m.CompleteQty.ToString()),
                         Standard = m.Standard,
                         IsBale = m.IsBale,
@@ -2154,6 +2238,2209 @@
         }
 
         #endregion
+
+        #region 鑷姩鍒嗛厤銆佸彇娑堝垎閰嶃�佽幏鍙栨墜鍔ㄥ垎閰嶇殑鏁版嵁婧愩�佹墜鍔ㄥ垎閰�
+
+        // 鍒ゆ柇鏄惁鏄法鎵瑰嚭搴�
+        public bool IsCrossLotNo(string soNo)
+        {
+            try
+            {
+                //鏂规硶杩斿洖缁撴灉锛歜l
+                var bl = true;
+                //鏌ヨ鍗曟嵁淇℃伅
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0");
+                //鍒ゆ柇鍗曟嵁绫诲瀷  鎴愬搧鍑哄簱銆侀鏂欏嚭搴擄紙鍏跺畠绫诲瀷璺冲嚭姝ゆ柟娉曪級
+                if (notice.Type != "0" && notice.Type != "1")
+                {
+                    return bl;
+                }
+                //鏌ヨ鍒板綋鍓嶅崟鎹笅鐨勫嚭搴撳崟鏄庣粏淇℃伅
+                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList();
+                //搴撳瓨鎬昏〃淇℃伅
+                var data = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList();
+                //搴撳瓨鏄庣粏涓楠屽悎鏍兼壒娆¢泦鍚�
+                var dataDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").GroupBy(g => g.LotNo).Select(s => s.LotNo).ToList();
+                //搴撳瓨鏄庣粏琛ㄤ俊鎭�
+                var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList();
+
+
+                //寰幆鍗曟嵁鏄庣粏淇℃伅
+                foreach (var item in noticeDetail)
+                {
+                    //楠岃瘉鍏堣繘鍏堝嚭鍘熷垯
+                    //鑾峰彇褰撳墠鐗╂枡鐨勬墍鏈夋壒娆′俊鎭�(鎺掗櫎鍗曟嵁鐨勬壒娆★紝闃叉鍗曟嵁鎵�鍦ㄦ壒娆¢攣瀹氭暟閲忓悗楠岃瘉灏忎簬绛変簬0)
+                    var forData = data.Where(m => m.SkuNo == item.SkuNo
+                    && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0
+                    && dataDetail.Contains(m.LotNo)).Select(m => m.LotNo).ToList();
+
+                    forData.Add(item.LotNo);  //闆嗗悎娣诲姞鍗曟嵁鐨勬壒娆�
+                    //鑾峰彇鎺掑簭鍚庣殑绗竴涓壒娆�
+                    var firstLotNo = forData.OrderBy(m => m).First();
+                    if (firstLotNo != item.LotNo)
+                    {
+                        bl = false;
+                        break;
+                    }
+
+                    //楠岃瘉鏁堟湡浼樺厛鍘熷垯
+                    var forDataBox = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && m.Qty > 0).ToList();
+                    //鑾峰彇褰撳墠鍗曟嵁鎵规鐨勬渶杩戞晥鏈�
+                    var expirationTimedt = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo
+                    && m.LotNo == item.LotNo && m.Qty > 0).ToList();
+                    if (expirationTimedt.Count > 0)
+                    {
+                        var expirationTime = expirationTimedt.OrderBy(m => m.ExpirationTime).Select(m => m.ExpirationTime).First();
+                        //鑾峰彇搴撳瓨涓叾瀹冩壒娆℃晥鏈熷ぇ浜庡綋鍓嶅崟鎹壒娆$殑鏁堟湡鏁伴噺
+                        var num = forDataBox.Count(m => m.ExpirationTime > expirationTime);
+                        //鍒ゆ柇鏄惁澶т簬0
+                        if (num > 0)
+                        {
+                            bl = false;
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        var dataDetailtime = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").
+                            Where(m => m.SkuNo == item.SkuNo
+                            && m.LotNo == item.LotNo && m.Qty > 0)
+                            .OrderBy(m => m.ExpirationTime)
+                            .Select(m => m.ExpirationTime).First();
+
+                        var num = forDataBox.Count(m => m.ExpirationTime > dataDetailtime);
+                        //鍒ゆ柇鏄惁澶т簬0
+                        if (num > 0)
+                        {
+                            bl = false;
+                            break;
+                        }
+                    }
+                }
+
+
+                return bl;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鑷姩鍒嗛厤
+        /// </summary>
+        /// <param name="soNo"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public bool AutoAllot(string soNo, int userId)
+        {
+            try
+            {
+                #region 鍒ゆ柇鏉′欢锛堝嚭搴撳崟銆佸嚭搴撳崟鏄庣粏锛� 
+                //鍑哄簱鍗�
+                var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault();
+                if (notice == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
+                }
+                if (notice.Status != "0" && notice.Status != "1")
+                {
+                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;");
+                }
+                //鍑哄簱鍗曟槑缁�
+                var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList();
+                if (!detailList.Any())
+                {
+                    throw new Exception("鏈煡璇㈠埌绗﹀悎鍒嗛厤鏉′欢鐨勫嚭搴撳崟鎹槑缁嗕俊鎭�");
+                }
+
+                #endregion
+
+                var exAllotList = new List<BllExportAllot>();
+                var assign = new AllotSku();
+                Db.BeginTran();
+                try
+                {
+                    List<SoDetailInfo> soDetailList = new List<SoDetailInfo>();
+                    foreach (var detail in detailList)
+                    {
+                        if (detail.AllotQty >= detail.Qty)
+                        {
+                            continue;
+                        }
+                        //杩橀渶瑕佸垎閰嶇殑鏁伴噺
+                        decimal needQty = detail.Qty - (detail.AllotQty == null ? 0 : decimal.Parse(detail.AllotQty.ToString()));
+                        //搴撳瓨鏄庣粏 Status 0锛氬緟鍒嗛厤 1锛氶儴鍒嗗垎閰�  2锛氬凡鍒嗛厤 
+                        var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList();
+
+
+                        //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规
+                        if (!string.IsNullOrWhiteSpace(detail.LotNo))
+                        {
+                            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 && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList();
+                        }
+
+                        if (stockDetail.Count < 1)
+                        {
+                            throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨");
+                        }
+                        //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2锛氭娊妫�鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�7:鍏朵粬鍑哄簱銆�9:鐢熶骇棰嗘枡鍑哄簱 ///3:鍙栨牱鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱
+                        if (notice.Type == "0" || notice.Type == "1" || notice.Type == "9")//鎴愬搧銆侀鏂欏嚭搴�
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList();
+                        }
+                        else if (notice.Type == "2")//鎶芥鍑哄簱
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1" || m.InspectStatus == "2").ToList();
+                        }
+                        else if (notice.Type == "4")//涓嶅悎鏍煎嚭搴�
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList();
+                        }
+                        else if (notice.Type == "7") //銆佸叾瀹�
+                        {
+                            stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList();
+                        }
+                        if (stockDetail.Sum(m => m.Qty - m.LockQty) < needQty)
+                        {
+                            throw new Exception("搴撳瓨鏄庣粏鏁伴噺涓嶈冻");
+                        }
+                        #region 鍖呰淇℃伅
+
+                        var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺
+                        var bNum = 0;//绠辩墿鍝佹暟閲�
+                        //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
+                        new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
+
+                        #endregion
+
+                        //鍙栧悎閫傚簱瀛樺晢鍝�
+                        Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟
+                        var qty = 0m;
+                        var house = "";
+                        
+                        //鍒嗛厤璐х墿
+                        qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, notice.WareHouseNo);
+                        foreach (var sc in stockQtyDic)
+                        {
+                            var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key);
+                            //娣诲姞鍒嗛厤琛ㄤ俊鎭�
+                            var allot = new BllExportAllot
+                            {
+                                SONo = notice.SONo,
+                                WaveNo = "",
+                                SODetailNo = detail.Id,
+                                StockId = sc.Key,
+                                LotNo = s.LotNo,
+                                LotText = s.LotText,
+                                SupplierLot = s.SupplierLot,
+                                SkuNo = s.SkuNo,
+                                SkuName = s.SkuName,
+                                Standard = s.Standard,
+                                PalletNo = s.PalletNo,
+                                IsBale = detail.IsBale == "0" ? "0" : s.IsBale == "1" ? "0" : "1", //鏄惁瑁瑰寘
+                                IsBelt = detail.IsBelt == "0" ? "0" : s.IsBelt == "1" ? "0" : "1", //鏄惁鎵撳甫
+
+                                Qty = sc.Value,
+                                CompleteQty = 0,
+                                //BoxexQty = s.Qty, //绠卞唴鏁伴噺
+                                Status = "0",
+                                LogisticsId = notice.LogisticsId,
+                                IsAdvance = "0",
+                                OutMode = "",//鍑哄簱鍙�
+
+                                CreateUser = userId,
+                                CreateTime = DateTime.Now
+                            };
+                            exAllotList.Add(allot);
+
+                            s.LockQty += stockQtyDic[s.Id];
+
+                            if (s.LockQty == s.Qty)
+                            {
+                                s.Status = "2";
+                            }
+                            else
+                            {
+                                s.Status = "1";
+                            }
+
+                            var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand();
+
+                        }
+                        detail.AllotQty += qty;
+                        detail.UpdateUser = userId;
+                        detail.UpdateTime = DateTime.Now;
+                        if (detail.Status == "0")
+                        {
+                            detail.Status = "1";
+                        }
+                        if (qty > detail.Qty)
+                        {
+                            //搴撳瓨鎬昏〃
+                            var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0"
+                            && d.SkuNo == detail.SkuNo
+                            && d.LotNo == detail.LotNo);
+                            stock.LockQty += qty - detail.Qty;
+                            Db.Updateable(stock).ExecuteCommand();
+
+                            //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜
+                            SoDetailInfo soDetail = new SoDetailInfo();
+                            soDetail.OrderDetailCode = detail.OrderDetailCode;
+                            soDetail.LockQty = qty - detail.Qty;
+                            soDetail.LotNo = detail.LotNo;
+
+                            soDetailList.Add(soDetail);
+                        }
+
+                    }
+
+                    var mx = Db.Updateable(detailList).ExecuteCommand();
+                    var fp = Db.Insertable(exAllotList).ExecuteCommand();
+
+                    //淇敼鍒嗛厤鍗曟嵁鐨勭姸鎬�
+                    if (notice.Status == "0" || notice.Status == "1")
+                    {
+                        var bl = 0;
+                        var bl2 = 0;
+                        foreach (var item in detailList)
+                        {
+                            if (item.AllotQty <= 0)
+                            {
+                                continue;
+                            }
+                            if (item.AllotQty < item.Qty)
+                            {
+                                bl = 1;
+                            }
+                            else
+                            {
+                                bl2 = 1;
+                            }
+                        }
+
+                        switch (bl2)
+                        {
+                            case 1 when bl == 1:
+                                notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
+                                break;
+                            case 0 when bl == 1:
+                                notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
+                                break;
+                            case 1 when bl == 0:
+                                notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
+                                break;
+                            case 0 when bl == 0:
+                                //璇佹槑鎵�鏈夊垎閰嶆暟閲忓叏閮ㄥ皬浜庣瓑浜庡嚭搴撴暟閲� 涓嶅仛淇敼
+                                break;
+                        }
+
+                    }
+                    notice.UpdateUser = userId;
+                    notice.UpdateTime = DateTime.Now;
+                    var zd = Db.Updateable(notice).ExecuteCommand();
+
+                    //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                    var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁",
+                        notice.SONo, "鍒嗛厤", $"鑷姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
+
+                    if (zd > 0 && mx > 0 && fp > 0 && k)
+                    {
+                        #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp
+                        //绯荤粺瀵规帴鍚庢斁寮�
+                        /*var jsonData = JsonConvert.SerializeObject(soDetailList);
+
+                        var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP");
+
+                        var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁
+                        if (obj.Success != 0)
+                        {
+                            throw new Exception("涓婁紶澶辫触" + obj.Message);
+                        }*/
+                        #endregion
+
+                        Db.CommitTran();
+                        return true;
+                    }
+                    Db.RollbackTran();
+                    return false;
+                }
+                catch (Exception e)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(e.Message);
+                }
+            }
+            catch (Exception e)
+            {
+                throw new Exception("鑷姩鍒嗛厤澶辫触锛�" + e.Message);
+            }
+        }
+
+        //鍙栨秷鍒嗛厤
+        public bool CancelAllot(string soNo, int userId)
+        {
+            try
+            {
+
+                var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault();
+                if (notice == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
+                }
+                if (notice.Status != "1" && notice.Status != "2")
+                {
+                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负宸插垎閰嶆垨閮ㄥ垎鍒嗛厤鎴栨潵婧愭槸鍚︽槸WMS");
+                }
+                //璇ュ崟鎹殑鍒嗛厤淇℃伅 Status 0锛氫换鍔′笅鍙� 1锛氬緟鎷h揣 2锛氶儴鍒嗘嫞璐� 3锛氬緟鍥炲簱 4锛氬凡瀹屾垚
+                var allotList = Db.Queryable<BllExportAllot>().Where(o => o.IsDel == "0" && o.SONo == soNo).ToList();
+                //鏈夊凡鎵ц鐨勫垎閰嶆暟鎹笉鑳藉彇娑�
+                if (allotList.Any(o => o.Status != "0"))
+                {
+                    throw new Exception("褰撳墠鍗曟嵁鐨勫垎閰嶄俊鎭凡鏈夋墽琛屼腑锛屼笉鑳藉彇娑堝垎閰�");
+                }
+                List<SoDetailInfo> soDetailList = new List<SoDetailInfo>();
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+                try
+                {
+                    //鏌ヨ鍒嗛厤鐨勬槑缁�
+                    var detail = Db.Queryable<BllExportNoticeDetail>().Where(d => d.SONo == soNo && d.AllotQty > 0 && d.IsDel == "0").ToList();
+                    foreach (var d in detail)
+                    {
+                        var orders = allotList.Where(o => o.SODetailNo == d.Id).ToList();
+                        foreach (var o in orders)
+                        {
+                            var pq = Db.Queryable<DataStockDetail>().Where(t => t.Id == o.StockId);
+
+                            var pq2 = !string.IsNullOrWhiteSpace(o.LotNo) ? pq.Where(t => t.LotNo == o.LotNo).ToList() : pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)).ToList();
+
+                            var pallet = pq2.FirstOrDefault();
+                            if (pallet != null)
+                            {
+                                pallet.LockQty -= o.Qty;
+                                pallet.Status = pallet.LockQty == 0 ? "0" : "1"; //濡傛灉閿佸畾鏁伴噺鏄�0鐘舵�佸彉鏇翠负寰呭垎閰� 鍚﹀垯涓洪儴鍒嗗垎閰�
+                                Db.Updateable(pallet).ExecuteCommand();
+
+                                //搴撳瓨鎬昏〃
+                                //var stock = Db.Queryable<DataStock>().First(t => t.SkuNo == pallet.SkuNo && t.IsDel == "0");
+                                //stock.LockQty -= o.Qty;
+                                //Db.Updateable(stock).ExecuteCommand();
+                            }
+
+                        }
+                        Db.Deleteable<BllExportAllot>(orders).ExecuteCommand();
+
+                        if (d.AllotQty > d.Qty)
+                        {
+                            //搴撳瓨鎬昏〃
+                            var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);
+                            stock.LockQty -= (decimal)d.AllotQty - d.Qty;
+                            Db.Updateable(stock).ExecuteCommand();
+
+                            //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜
+                            SoDetailInfo soDetail = new SoDetailInfo();
+                            soDetail.OrderDetailCode = d.OrderDetailCode;
+                            soDetail.LockQty = (decimal)(d.Qty - d.AllotQty);
+                            soDetail.LotNo = d.LotNo;
+
+                            soDetailList.Add(soDetail);
+                        }
+                        d.AllotQty = 0;
+                        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 = "";
+                        //    }
+
+                        //}
+                    }
+
+                    //鏌ヨ褰撳墠鍗曟嵁鏄惁宸叉坊鍔犲鏂欎换鍔�
+                    if (notice.Type == "1")
+                    {
+                        var task = Db.Queryable<BllExportTimingTask>().First(m => m.IsDel == "0" && m.SoNo == soNo);
+                        if (task != null)
+                        {
+                            task.IsDel = "1";
+                            task.UpdateUser = userId;
+                            task.UpdateTime = DateTime.Now;
+                            Db.Updateable(task).ExecuteCommand();
+                        }
+                    }
+                    notice.Status = "0";
+                    notice.UpdateUser = userId;
+                    notice.UpdateTime = DateTime.Now;
+                    Db.Updateable(detail).ExecuteCommand();
+                    Db.Updateable(notice).ExecuteCommand();
+
+                    //绯荤粺瀵规帴鍚庢斁寮�
+                    /*var jsonData = JsonConvert.SerializeObject(soDetailList);
+
+                    var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP");
+
+                    var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁
+                    if (obj.Success != 0)
+                    {
+                        throw new Exception("涓婁紶澶辫触" + obj.Message);
+                    }*/
+
+                    //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                    var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍙栨秷鍒嗛厤", $"鍙栨秷鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
+                    Db.CommitTran();
+                }
+                catch (Exception e)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(e.Message);
+                }
+                return true;
+            }
+            catch (Exception e)
+            {
+                throw new Exception("鍙栨秷鍒嗛厤澶辫触" + e.Message);
+            }
+        }
+
+        /// <summary>
+        /// 缁存姢鍑哄簱鍗曞娉ㄤ俊鎭�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="demo"></param>
+        /// <param name="userId"></param>
+        public void EditNoticeDemo(int id, string demo, int userId)
+        {
+            try
+            {
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.Id == id);
+                if (notice == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
+                }
+                notice.Demo = demo + "".Trim();
+                notice.UpdateUser = userId;
+                notice.UpdateTime = DateTime.Now;
+
+                int i = Db.Updateable(notice).ExecuteCommand();
+                if (i > 0)
+                {
+                    //娣诲姞鎿嶄綔鏃ュ織
+                    new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕notice.SONo}鐨勫娉ㄤ俊鎭�", userId);
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        //鑾峰彇搴撳瓨鏄庣粏淇℃伅锛堝嚭搴撳崟鎵嬪姩鍒嗛厤閫夋嫨鏁版嵁婧愶級
+        public List<StockDetailDto> GetHandOutList(int detailId, string houseNo, string roadwayNo, string locateNo, string msg, string palletNo)
+        {
+            try
+            {
+                var detail = Db.Queryable<BllExportNoticeDetail>().First(d => d.Id == detailId);
+
+                #region 鍒ゆ柇鏉′欢
+
+                if (detail == null)
+                {
+                    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")
+                {
+                    throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!");
+                }
+                #endregion
+
+                Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
+                    .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo)
+                    .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo)
+                    .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo)
+                    .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo == palletNo)
+                    .AndIF(!string.IsNullOrWhiteSpace(msg),
+                        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"))
+                    .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
+
+                var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto
+                {
+                    Id = a.Id,
+                    SkuNo = a.SkuNo,
+                    SkuName = a.SkuName,
+                    Standard = a.Standard,
+                    LotNo = a.LotNo,
+                    LotText = a.LotText,
+                    SupplierLot = a.SupplierLot,
+                    Qty = a.Qty - a.LockQty - a.FrozenQty,
+                    LocatNo = a.LocatNo,
+                    RoadwayNo = a.RoadwayNo,
+                    PalletNo = a.PalletNo,
+                    Demo = a.Demo,
+                }).ToList();
+
+                return list;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+        //鎵嬪姩鍒嗛厤鍑哄簱鍗曟槑缁�
+        public void AddHandOutAllot(AddHandOutVm model, int userId)
+        {
+            try
+            {
+                #region 鍒ゆ柇鏉′欢
+                //鏁版嵁楠岃瘉
+                var detail = Db.Queryable<BllExportNoticeDetail>().First(a => a.IsDel == "0" && a.Id == model.Id);
+                if (detail == null)
+                {
+                    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);
+                if (notice == null)
+                {
+                    throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒");
+                }
+                if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
+                {
+                    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 allotList = new List<BllExportAllot>();
+                decimal outQtys = 0;
+                foreach (var st in model.StockList)
+                {
+                    var stock = stockList.First(a => a.Id == st.StockId);
+                    if (stock == null)
+                    {
+                        throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒");
+                    }
+                    if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty))     // 杈撳叆鐨勬暟閲� -  鎵樼洏涓婂彲鐢ㄧ殑鏁伴噺锛堟墭鐩樹笂鏁伴噺-閿佸畾鐨勬暟閲�-鍐荤粨鐨勬暟閲忥級
+                    {
+                        throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒");
+                    }
+
+                    var bl = allots.FirstOrDefault(m => m.StockId == st.StockId);
+                    if (bl == null)
+                    {
+                        //娣诲姞鍒嗛厤琛ㄤ俊鎭�
+                        var allot = new BllExportAllot
+                        {
+                            SONo = notice.SONo,
+                            WaveNo = "",
+                            SODetailNo = detail.Id,
+                            StockId = st.StockId,
+                            LotNo = stock.LotNo,
+                            LotText = stock.LotText,
+                            SupplierLot = stock.SupplierLot,
+                            SkuNo = stock.SkuNo,
+                            SkuName = stock.SkuName,
+                            Standard = stock.Standard,
+                            PalletNo = stock.PalletNo,
+                            IsBale = stock.IsBale,
+                            IsBelt = stock.IsBelt,
+                            Qty = st.Qty,
+                            CompleteQty = 0,
+                            Status = "0",
+                            LogisticsId = notice.LogisticsId,
+                            IsAdvance = "0",
+                            OutMode = "",//鍑哄簱鍙�
+
+                            CreateUser = userId,
+                            CreateTime = DateTime.Now
+                        };
+                        allotList.Add(allot);
+                    }
+                    else
+                    {
+                        bl.Qty += st.Qty;
+                        Db.Updateable(bl).ExecuteCommand();
+                    }
+
+                    //搴撳瓨鏄庣粏
+                    stock.LockQty += st.Qty;
+                    stock.Status = stock.LockQty == stock.Qty ? "2" : "1";
+
+                    //搴撳瓨鎬昏〃
+                    //stockz.LockQty += st.Qty;
+                    //Db.Updateable(stockz).ExecuteCommand();
+
+
+                    Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand();
+                    outQtys += st.Qty;
+                }
+                Db.Insertable(allotList).ExecuteCommand();
+                //淇敼鍗曟嵁鏄庣粏
+                detail.AllotQty += outQtys;
+                detail.UpdateUser = userId;
+                detail.UpdateTime = DateTime.Now;
+                if (detail.Status == "0")
+                {
+                    detail.Status = "1";
+                }
+
+                Db.Updateable(detail).ExecuteCommand();
+                var detailList = Db.Queryable<BllExportNoticeDetail>()
+                    .Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList();
+                //淇敼鍑哄簱鍗曠姸鎬� 
+                if (notice.Status == "0" || notice.Status == "1")
+                {
+                    decimal totalQty = 0;
+                    decimal totalAllotQty = 0;
+                    foreach (var item in detailList)
+                    {
+                        totalQty += item.Qty;
+                        totalAllotQty += Convert.ToInt32(item.AllotQty);
+                    }
+
+                    if (totalAllotQty >= totalQty)
+                    {
+                        notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
+                    }
+                    else if (totalAllotQty < totalQty && totalAllotQty > 0)
+                    {
+                        notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺  淇敼涓洪儴鍒嗗垎閰�
+                    }
+                    Db.Updateable(notice).ExecuteCommand();
+                }
+                //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍒嗛厤", $"鎵嬪姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}銆佺墿鏂欙細{detail.SkuNo}銆佹壒娆★細{detail.LotNo}鐨勫崟鎹俊鎭�", userId);
+
+                Db.CommitTran();
+
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
+
+        #endregion
+
+        #region 涓嬪彂鍑哄簱銆佸嚭搴撳畬鎴愩�侀噸鏂颁笅鍙戜换鍔°�佸彇娑堜换鍔°�佸紓甯稿鐞�
+
+        public string GetHouseBySo(string soNo)
+        {
+            try
+            {
+                var notcie = Db.Queryable<BllExportNotice>().First(m=>m.IsDel == "0" && m.SONo == soNo);
+                if (notcie == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曚俊鎭�");
+                }
+                return notcie.WareHouseNo;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+        public List<OutCommandDto> IssueOutHouseLk(string soNo, string outMode, int userId, string url, out string str)
+        {
+            try
+            {
+                var outDto1 = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚堬紙娣卞害涓�1鐨勫偍浣嶏級
+                //璁板綍閿欒淇℃伅鐨勯泦鍚� //1:褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�2 鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�3鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�4 瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱
+                var flagList = new List<int>();
+
+                var com = new Common();
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0");
+                if (notice == null)
+                {
+                    throw new Exception($"鏈壘鍒皗soNo}鍑哄簱鍗曚俊鎭�");
+                }
+                if (notice.WareHouseNo != "W02")
+                {
+                    throw new Exception("浠撳簱鍙烽敊璇�");
+                }
+                //鎵�鏈夎鍑哄簱鐨勫嚭搴撳垎閰嶄俊鎭�(鏈笅鍙戠殑淇℃伅鍜屽緟鎷h揣鐨勪俊鎭�)
+                var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && (a.Status == "0" || a.Status == "2")).ToList();
+                if (list.Count == 0) //鍒ゆ柇鏄惁鏈夐渶瑕佷笅鍙戠殑鍑哄簱娴佹按
+                {
+                    throw new Exception("褰撳墠鍑哄簱鍗曟嵁鏃犻渶瑕佷笅鍙戠殑鎵樼洏");
+                }
+
+                #region 闆嗗悎 
+                //瑕佸嚭搴撶殑鎵樼洏闆嗗悎
+                var outLpnList = list.Select(m => m.PalletNo).ToList();
+                //瑕佸嚭搴撶殑鏄庣粏闆嗗悎
+                var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
+                //鐗╂枡缂栫爜琛�
+                var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0");
+                //鍖呰琛�
+                var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
+                Db.BeginTran();
+                try
+                {
+                    List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴�
+                    var i = 0;
+                    var outLocatelist1 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B02" && m.Flag == "0").ToList();
+                    var outLocatelist2 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B05" && m.Flag == "0").ToList();
+                    //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔�
+                    foreach (var item in list)
+                    {
+                        var outModeLocate = "";
+                        if (outMode == "1")
+                        {
+                            if (i < outLocatelist1.Count)
+                            {
+                                outModeLocate = outLocatelist1[i].LocatNo;
+                            }
+                            else
+                            {
+                                var j = i % outLocatelist1.Count;
+                                
+                                outModeLocate = outLocatelist1[j].LocatNo;
+                            }
+                        }
+                        else if(outMode == "2")
+                        {
+                            if (i < outLocatelist1.Count)
+                            {
+                                outModeLocate = outLocatelist2[i].LocatNo;
+                            }
+                            else
+                            {
+                                var j = i % outLocatelist1.Count;
+
+                                outModeLocate = outLocatelist2[j].LocatNo;
+                            }
+                        }
+                        
+                        var taskNoStr = "";
+                                           
+                        // 鍌ㄤ綅鍙�
+                        var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo;
+
+                        #region 鍒ゆ柇
+
+                        //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐�
+                        if (string.IsNullOrWhiteSpace(locateNo)) //搴撳
+                        {
+                            //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ叆搴撲腑
+                            var imBl = com.GetImTask(item.PalletNo);
+                            if (imBl != null)
+                            {
+                                flagList.Add(4);
+                                continue;
+                            }
+                            //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑锛�
+                            if (item.Status == "0")
+                            {
+                                //濡傛灉涓嶅湪浠撳簱鍐咃紝褰撳墠鍒嗛厤淇℃伅鐩存帴鏇存柊鍑哄簱瀹屾垚 
+                                item.Status = "2";//鐘舵��
+                                item.OutMode = outModeLocate;//鍑哄簱鍙� 
+                                Db.Updateable(item).ExecuteCommand();
+                                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+                                if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+                                {
+                                    noticeDetail.FactQty += item.Qty;
+                                    Db.Updateable(noticeDetail).ExecuteCommand();
+                                }
+
+                                //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+                                if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+                                {
+                                    var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+                                    if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+                                    {
+                                        notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+                                        Db.Updateable(notice).ExecuteCommand();
+                                    }
+                                }
+                            }
+                            flagList.Add(0);
+                            continue;
+                            
+                        }
+
+                        var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭�
+                        if (locate == null)
+                        {
+                            flagList.Add(2);
+                            continue;
+                        }
+                        //鍒ゆ柇鍌ㄤ綅鏍囧織鏄惁涓烘崯鍧�
+                        if (locate.Flag == "2")
+                        {
+                            flagList.Add(3);
+                            continue;
+                        }
+
+                        #endregion
+
+                        if (locate.Status == "1") //鏈夌墿鍝�
+                        {
+                            #region 娣诲姞鍑哄簱浠诲姟
+                            
+                            var taskNo = new Common().GetMaxNo("TK");
+                            var exTask = new LogTask    //鍑哄簱浠诲姟
+                            {
+                                TaskNo = taskNo,
+                                Sender = "WMS",
+                                Receiver = "WCS",
+                                IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                StartLocat = locate.LocatNo,//璧峰浣嶇疆
+                                EndLocat = outModeLocate,//鐩爣浣嶇疆
+                                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 + "鍒�" + outModeLocate + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
+                            };
+                            Db.Insertable(exTask).ExecuteCommand();
+                            logTaskList.Add(exTask);
+
+                            outDto1.Add(new OutCommandDto()
+                            {
+                                PalletNo = item.PalletNo,//鎵樼洏鍙�
+                                StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
+                                EndLocate = outModeLocate, // 鐩爣浣嶇疆 
+                                TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                                TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� 
+                                OutMode = outModeLocate,  //鍑哄簱鍙� 
+                                Order = 1,
+
+                                //UnstackingMode = "unstackingMode2",//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑�  1 浜哄伐鎷h揣鍑�
+                                //CompleteQty = outCount2,  //鎷嗙殑浠舵暟
+                                //BoxexQty = outCount,      //鎬讳欢鏁�
+                            });
+                            taskNoStr = exTask.TaskNo;
+                            
+                            #endregion
+
+                            #region 鏀瑰彉鏁版嵁
+                            if (item.Status == "0")//鍒ゆ柇鎵樼洏鏄惁涓嬪彂杩�
+                            {
+                                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+                                if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+                                {
+                                    noticeDetail.FactQty += item.Qty;
+                                    Db.Updateable(noticeDetail).ExecuteCommand();
+                                }
+
+                                //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+                                if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+                                {
+                                    var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+                                    if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+                                    {
+                                        notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+                                        Db.Updateable(notice).ExecuteCommand();
+                                    }
+                                }
+                            }
+                            locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
+                            Db.Updateable(locate).ExecuteCommand();
+                            var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//褰撳墠鍑哄簱鐨勭洰鏍囧偍浣嶄俊鎭�
+                            locate2.Status = "4";
+                            Db.Updateable(locate2).ExecuteCommand();
+
+                            item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
+                            item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
+                            //item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡
+                            item.OutMode = outModeLocate;//鍑哄簱鍙�
+                            //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//瑁呰溅鍙�
+                            Db.Updateable(item).ExecuteCommand();
+
+                            #endregion
+
+                            flagList.Add(0);
+                            i++;
+                        }
+                        else if (locate.Status == "3") //鍑哄簱涓�
+                        {
+                            #region 鏀瑰彉鏁版嵁
+                            //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛�
+                            if (item.Status == "0")
+                            {
+                                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+                                if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+                                {
+                                    noticeDetail.FactQty += item.Qty;
+                                    Db.Updateable(noticeDetail).ExecuteCommand();
+                                }
+
+                                //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+                                if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+                                {
+                                    var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+                                    if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+                                    {
+                                        notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+                                        Db.Updateable(notice).ExecuteCommand();
+                                    }
+                                }
+                            }
+                            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.FirstOrDefault(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱
+                            }
+                            if (taskNo == null)
+                            {
+                                throw new Exception($"鎵樼洏鍙凤細{item.PalletNo},鍑哄簱寮傚父");
+                            }
+                            item.TaskNo = taskNo.TaskNo;
+                            item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
+                            item.OutMode = item.OutMode;//鍑哄簱鍙�
+                            //item.UnstackingMode = unstackingMode2;//鎷嗗灈妯″紡
+                            Db.Updateable(item).ExecuteCommand();
+                            flagList.Add(0);
+                            #endregion
+                        }
+                        else if (locate.Status == "5") //绉诲嚭涓�
+                        {
+                            flagList.Add(1);
+                        }
+                    }
+                    
+                    //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                    var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId);
+                    Db.CommitTran();
+
+                    str = string.Empty;
+                    if (flagList.Count(m => m == 0) > 0)
+                    {
+                        str += "0.涓嬪彂鎴愬姛銆�";
+                    }
+                    if (flagList.Count(m => m == 1) > 0)
+                    {
+                        str += "1.褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�";
+                    }
+                    if (flagList.Count(m => m == 2) > 0)
+                    {
+                        str += "2.鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�";
+                    }
+                    if (flagList.Count(m => m == 3) > 0)
+                    {
+                        str += "4.鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�";
+                    }
+                    if (flagList.Count(m => m == 4) > 0)
+                    {
+                        str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�";
+                    }
+                    if (flagList.Count(m => m == 5) > 0)
+                    {
+                        str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鎷嗘墭璇风◢鍚庝笅鍙戙��";
+                    }
+                    if (outDto1.Count > 0)
+                    {
+                        // 姝e紡杩愯绋嬪簭鏀惧紑
+                        var list2 = outDto1.Select(m => m.TaskNo).ToList();
+                        var jsonData = JsonConvert.SerializeObject(outDto1);
+                        string response = "";
+
+                        try
+                        {
+                            var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+                            //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+                            var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+                            //////瑙f瀽杩斿洖鏁版嵁 
+                            //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
+                            //if (wcsModel.StatusCode == 0)
+                            //{
+                            //    //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+                                new TaskServer().EditTaskIssueOk(list2, time1, time2);
+                                str += "涓嬪彂鎴愬姛";
+                            //}
+                            //if (wcsModel.StatusCode == -1)
+                            //{
+                            //    new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
+                            //    throw new Exception(wcsModel.Msg);
+                            //}
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new Exception(ex.Message);
+                        }
+
+                    }
+
+                    return outDto1;
+                }
+                catch (Exception e)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(e.Message);
+                }
+
+
+                #endregion
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+        public List<OutCommandDto> IssueOutHouseMk(string soNo, string outMode, int userId, string url, out string str)
+        {
+            try
+            {
+                #region 闆嗗悎 
+
+                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湪鍏ュ簱
+
+                #endregion
+                var com = new Common();
+                var allot = new AllotLocation();
+
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0");
+                if (notice == null)
+                {
+                    throw new Exception($"鏈壘鍒皗soNo}鍑哄簱鍗曚俊鎭�");
+                }
+                //鎵�鏈夎鍑哄簱鐨勫嚭搴撳垎閰嶄俊鎭�(鏈笅鍙戠殑淇℃伅鍜屽緟鎷h揣鐨勪俊鎭�)
+                var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && (a.Status == "0" || a.Status == "2")).ToList();
+                if (list.Count == 0) //鍒ゆ柇鏄惁鏈夐渶瑕佷笅鍙戠殑鍑哄簱娴佹按
+                {
+                    throw new Exception("褰撳墠鍑哄簱鍗曟嵁鏃犻渶瑕佷笅鍙戠殑鎵樼洏");
+                }
+
+                #region 闆嗗悎 
+                //瑕佸嚭搴撶殑鎵樼洏闆嗗悎
+                var outLpnList = list.Select(m => m.PalletNo).ToList();
+                //瑕佸嚭搴撶殑鏄庣粏闆嗗悎
+                var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
+                //鎵�鏈夎鍑哄簱鐨勫偍浣嶉泦鍚�
+                var locateListStrs = outStockDetail.Where(m=> !string.IsNullOrWhiteSpace(m.LocatNo)).Select(m => m.LocatNo).Distinct().ToList();
+                //鐗╂枡缂栫爜琛�
+                var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0");
+                //鍖呰琛�
+                var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
+                Db.BeginTran();
+                try
+                {
+                    List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴�
+                    //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔�
+                    foreach (var item in list)
+                    {
+                        var taskNoStr = "";
+                        string toLocation = string.Empty;//鐩爣浣嶇疆
+                       
+                        // 鍌ㄤ綅鍙�
+                        var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo;
+
+                        #region 鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐�
+
+                        //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐�
+                        if (string.IsNullOrWhiteSpace(locateNo)) //搴撳
+                        {
+                            if (notice.Type == "0")
+                            {
+                                flagList.Add(5);
+                                continue;
+                            }
+                            //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ叆搴撲腑
+                            var imBl = com.GetImTask(item.PalletNo);
+                            if (imBl != null)
+                            {
+                                flagList.Add(4);
+                                continue;
+                            }
+                            //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛�
+                            if (item.Status == "0")
+                            {
+                                //濡傛灉涓嶅湪浠撳簱鍐咃紝褰撳墠鍒嗛厤淇℃伅鐩存帴鏇存柊鍑哄簱瀹屾垚 
+                                item.Status = "2";//鐘舵��
+                                item.OutMode = outMode;//鍑哄簱鍙� 
+                                Db.Updateable(item).ExecuteCommand();
+                                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+                                if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+                                {
+                                    noticeDetail.FactQty += item.Qty;
+                                    Db.Updateable(noticeDetail).ExecuteCommand();
+                                }
+
+                                //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+                                if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+                                {
+                                    var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+                                    if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+                                    {
+                                        notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+                                        Db.Updateable(notice).ExecuteCommand();
+                                    }
+                                }
+                            }
+                            flagList.Add(0);
+                            continue;
+                        }
+
+                        //鍒ゆ柇鍌ㄤ綅
+                        var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭�
+                        if (locate == null)
+                        {
+                            flagList.Add(2);
+                            continue;
+                        }
+                        //鍒ゆ柇鍌ㄤ綅鏍囧織鏄惁涓烘崯鍧�
+                        if (locate.Flag == "2")
+                        {
+                            flagList.Add(3);
+                            continue;
+                        }
+
+                        #endregion
+
+                        
+
+                        if (locate.Status == "1") //鏈夌墿鍝�
+                        {
+                            var row1 = int.Parse(locate.LocatNo.Substring(2,2));
+                            var row2 = int.Parse(locate.AisleOne.Substring(2, 2));
+                            //闇�瑕佺Щ搴撶殑淇℃伅 
+                            var NeedMoveInfo = IsNeedMoveLocate(locate, locateListStrs, out int isOut);
+                            if (isOut == 1)
+                            {
+                                //宸烽亾缁勪腑鏈夊叆搴撴垨绉诲叆鐨勫偍浣嶏紝鎴栬�呮槸褰撳墠鍌ㄤ綅鍓嶆湁鍌ㄤ綅鏈笅鍙戞垚鍔熺殑浠诲姟
+                                flagList.Add(2);
+                                continue;
+                            }
+                            if (NeedMoveInfo.Count > 0)//闇�瑕佺Щ搴�
+                            {
+                                //鍒ゆ柇搴撳唴绌哄偍浣嶆槸鍚﹀
+                                var okRoad = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == notice.WareHouseNo).Select(m => m.RoadwayNo).ToList();
+                                var nullSlotNum = Db.Queryable<SysStorageLocat>().Count(m => m.RoadwayNo != locate.RoadwayNo && okRoad.Contains(m.RoadwayNo) && m.Status == "0");
+                                //鍒ゆ柇绌哄偍浣嶇殑鏁伴噺鏄惁澶т簬闇�瑕佺Щ搴撶殑鏁伴噺
+                                if (nullSlotNum >= NeedMoveInfo.Count)
+                                {
+                                    var isYk = false;
+                                    foreach (var s in NeedMoveInfo)
+                                    {
+                                        //鍌ㄤ綅鍒�
+                                        var rows = int.Parse(s.Substring(2,2));
+
+                                        //鑾峰彇绉诲簱鍌ㄤ綅
+                                        var moveAddress = GetMiJiMoveAddress(s, locate.AisleOne);
+                                        var tary = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == s);
+                                        if (string.IsNullOrWhiteSpace(moveAddress)) // 鍒ゆ柇鏄惁鑾峰彇鍒扮Щ搴撶殑搴撲綅
+                                        {
+                                            isYk = true;
+                                            flagList.Add(5);//鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗘湭鏌ヨ鍒扮┖鍌ㄤ綅
+                                            break; //娌℃湁绉诲簱鐨勫簱浣嶄簡
+                                        }
+                                        else
+                                        {
+                                            //鍒ゆ柇鎵樼洏鏈夋病鏈夊洖绉荤殑浠诲姟
+                                            //var hy = GetHyTask(item.ExportStockCode);
+                                            //if (hy != null)
+                                            //{
+                                            //    var hyentity = dataContext.WmsExportTask.FirstOrDefault(m => m.TaskId == hy.TaskId);
+                                            //    if (hyentity != null)
+                                            //    {
+                                            //        isYk = true;
+                                            //        msgList.Add(6);//鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗘槸鍥炵Щ鎵樼洏
+                                            //        break; //娌℃湁绉诲簱鐨勫簱浣嶄簡
+                                            //    }
+                                            //}
+                                            var ykTaskNo = new Common().GetMaxNo("TK");
+                                            var ykTask = new LogTask    //鍑哄簱浠诲姟
+                                            {
+                                                TaskNo = ykTaskNo,
+                                                Sender = "WMS",
+                                                Receiver = "WCS",
+                                                IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                                StartLocat = s,//璧峰浣嶇疆
+                                                EndLocat = moveAddress,//outMode,//鐩爣浣嶇疆
+                                                PalletNo = tary.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 = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
+                                            };
+                                            Db.Insertable(ykTask).ExecuteCommand();
+                                            logTaskList.Add(ykTask);
+
+                                            outDto1.Add(new OutCommandDto()
+                                            {
+                                                PalletNo = item.PalletNo,//鎵樼洏鍙�
+                                                StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                                StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
+                                                EndLocate = moveAddress,//outMode, // 鐩爣浣嶇疆 
+                                                TaskNo = ykTaskNo, // 浠诲姟鍙�
+                                                TaskType = "2",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉�  
+                                                Order = Math.Abs(row2 - rows),
+                                                Type = PLCTypeEnum.ShuttleCar
+
+                                            }); 
+                                            var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s);
+                                            var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress);
+
+                                            slotChange.Status = "5"; //鏀瑰彉鐘舵�侊紙姝e湪鍑哄簱锛�
+                                            slotChange2.Status = "4"; // 鏀瑰彉鐘舵�侊紙姝e湪绉诲叆锛�
+                                            Db.Updateable(slotChange).ExecuteCommand();
+                                            Db.Updateable(slotChange2).ExecuteCommand();
+                                        }
+                                    }
+                                    if (isYk)
+                                    {
+                                        break;
+                                    }
+                                }
+                                else
+                                {
+                                    flagList.Add(5);
+                                    break;
+                                }
+                            }
+                            #region 娣诲姞鍑哄簱浠诲姟
+                            
+                            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);
+                            var endroad = allot.RoadwayToStationNum(locate.RoadwayNo, toLocation);
+                            outDto1.Add(new OutCommandDto()
+                            {
+                                PalletNo = item.PalletNo,//鎵樼洏鍙�
+                                StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                StartRoadway = locate.RoadwayNo,//璧峰宸烽亾
+                                EndLocate = outMode,//, // 鐩爣浣嶇疆 
+                                EndRoadway = endroad,
+                                TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                                TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� 
+                                OutMode = outMode,  //鍑哄簱鍙� 
+                                Order = Math.Abs(row2 - row1),
+                                Type = PLCTypeEnum.ShuttleCar
+
+                            });
+                            taskNoStr = exTask.TaskNo;
+                            
+                            #endregion
+
+                            #region 鏀瑰彉鏁版嵁
+                            if (item.Status == "0")//鍒ゆ柇鎵樼洏鏄惁涓嬪彂杩�
+                            {
+                                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+                                if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+                                {
+                                    noticeDetail.FactQty += item.Qty;
+                                    Db.Updateable(noticeDetail).ExecuteCommand();
+                                }
+
+                                //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+                                if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+                                {
+                                    var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+                                    if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+                                    {
+                                        notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+                                        Db.Updateable(notice).ExecuteCommand();
+                                    }
+                                }
+                            }
+                            locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
+                            Db.Updateable(locate).ExecuteCommand();
+
+                            item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
+                            item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
+                            //item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡
+                            item.OutMode = outMode;//鍑哄簱鍙�
+                            //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//瑁呰溅鍙�
+                            Db.Updateable(item).ExecuteCommand();
+
+                            #endregion
+
+                            flagList.Add(0);
+                        }
+                        else if (locate.Status == "3") //鍑哄簱涓�
+                        {
+                            #region 鏀瑰彉鏁版嵁
+                            //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛�
+                            if (item.Status == "0")
+                            {
+                                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+                                if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+                                {
+                                    noticeDetail.FactQty += item.Qty;
+                                    Db.Updateable(noticeDetail).ExecuteCommand();
+                                }
+
+                                //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+                                if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+                                {
+                                    var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+                                    if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+                                    {
+                                        notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+                                        Db.Updateable(notice).ExecuteCommand();
+                                    }
+                                }
+                            }
+                            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.FirstOrDefault(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱
+                            }
+                            if (taskNo == null)
+                            {
+                                throw new Exception($"鎵樼洏鍙凤細{item.PalletNo},鍑哄簱寮傚父");
+                            }
+                            item.TaskNo = taskNo.TaskNo;
+                            item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
+                            item.OutMode = item.OutMode;//鍑哄簱鍙�
+                            //item.UnstackingMode = unstackingMode2;//鎷嗗灈妯″紡
+                            Db.Updateable(item).ExecuteCommand();
+                            flagList.Add(0);
+                            #endregion
+                        }
+                        else if (locate.Status == "5") //绉诲嚭涓�
+                        {
+                            flagList.Add(1);
+                        }
+                    }
+                    outDto1.AddRange(moveDto);
+                    outDto1.AddRange(outDto2);
+                    //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                    var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId);
+                    Db.CommitTran();
+
+                    str = string.Empty;
+                    if (flagList.Count(m => m == 0) > 0)
+                    {
+                        str += "0.涓嬪彂鎴愬姛銆�";
+                    }
+                    if (flagList.Count(m => m == 1) > 0)
+                    {
+                        str += "1.褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�";
+                    }
+                    if (flagList.Count(m => m == 2) > 0)
+                    {
+                        str += "2.鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�";
+                    }
+                    if (flagList.Count(m => m == 3) > 0)
+                    {
+                        str += "4.鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�";
+                    }
+                    if (flagList.Count(m => m == 4) > 0)
+                    {
+                        str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�";
+                    }
+                    if (flagList.Count(m => m == 5) > 0)
+                    {
+                        str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鎷嗘墭璇风◢鍚庝笅鍙戙��";
+                    }
+                    if (outDto1.Count > 0)
+                    {
+                        // 姝e紡杩愯绋嬪簭鏀惧紑
+                        var list2 = outDto1.Select(m => m.TaskNo).ToList();
+                        var jsonData = JsonConvert.SerializeObject(outDto1);
+                        string response = "";
+
+                        try
+                        {
+                            //var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+                            //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+                            //var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+                            //////瑙f瀽杩斿洖鏁版嵁 
+                            //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
+                            //if (wcsModel.StatusCode == 0)
+                            //{
+                            //    //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+                            //    new TaskServer().EditTaskIssueOk(list2, time1, time2);
+                            //    str += "涓嬪彂鎴愬姛";
+                            //}
+                            //if (wcsModel.StatusCode == -1)
+                            //{
+                            //    new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
+                            //    throw new Exception(wcsModel.Msg);
+                            //}
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new Exception(ex.Message);
+                        }
+
+                    }
+
+                    return outDto1;
+                }
+                catch (Exception e)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(e.Message);
+                }
+
+
+                #endregion
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴撴搷浣�
+        /// </summary>
+        /// <param name="oldAddress">瑕佸嚭搴撶殑搴撲綅鍦板潃</param>
+        /// <param name="aisle">閫氶亾鍙�</param>
+        /// <param name="addressList">瑕佸嚭鍙g殑鍌ㄤ綅闆嗗悎</param>
+        /// <param name="isOut">鏄惁鍑哄簱 1:鏈夋湭涓嬪彂鐨勪换鍔″湪鍓嶉潰</param>
+        /// <returns>闇�瑕佺Щ搴撶殑闆嗗悎锛堝鏋滀负绌哄垯涓嶉渶绉诲簱锛�</returns>
+        private List<string> IsNeedMoveLocate(SysStorageLocat lcoate,List<string> locateStrList, out int isOut)
+        {
+            var nowAddress = new List<string>(); //闇�瑕佺Щ搴撶殑闆嗗悎
+            // 010101 娲惧垪灞�
+            //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne);
+            
+            var sArray = lcoate.LocatNo.Substring(4,2);
+            var row = int.Parse(sArray);//鍌ㄤ綅鍒�
+            var sArray2 = lcoate.AisleOne.Substring(4, 2);
+            var row2 = int.Parse(sArray2); //閫氶亾鍙e垪
+
+            isOut = 0;
+           
+            var bol = row2 - row > 0;
+                
+            //鍚岀粍鐨勫偍浣嶉泦鍚�
+            var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == lcoate.RoadwayNo).ToList();
+            List<string> list;
+            
+            
+            if (bol)
+            {
+                //鍌ㄤ綅灏忎簬閫氶亾鍙�   鍊掑簭
+                list = slotList.Where(m => m.Column < row2 && m.Column > row).Select(m => m.LocatNo).ToList();
+            }
+            else
+            {
+                //鍌ㄤ綅澶т簬閫氶亾鍙�   姝e簭
+                list = slotList.Where(m => m.Column > row2 && m.Column < row).Select(m => m.LocatNo).ToList();
+            }
+
+            if (list.Any())
+            {
+                //鎺掗櫎鎺夊悓宸烽亾缁勪腑瑕佸嚭搴撶殑鍌ㄤ綅
+                if (locateStrList.Count != 0)
+                {
+                    list = list.Where(m => !locateStrList.Contains(m)).ToList();
+                }
+                //鍒ゆ柇鏄惁鏈夊叆搴撲腑鎴栨鍦ㄧЩ鍏ョ殑
+                var s = slotList.Where(m => list.Contains(m.LocatNo) && (m.Status == "2" || m.Status == "4")).Select(m => m.LocatNo).ToList();
+                if (s.Count > 0)
+                {
+                    isOut = 1;
+                    return nowAddress;
+                }
+                //鍒ゆ柇鏄惁鏈夊湪褰撳墠鍌ㄤ綅鍓嶆湭涓嬪彂鐨勪换鍔★紙闃叉鎾炶溅锛�
+                var w = Db.Queryable<LogTask>().Where(m => list.Contains(m.StartLocat) && m.IsSuccess == 0).Select(m => m.StartLocat).ToList();
+                if (w.Count > 0)
+                {
+                    isOut = 1;
+                    return nowAddress;
+                }
+                if (bol)
+                {
+                    //鍌ㄤ綅灏忎簬閫氶亾鍙�   鍊掑簭
+                    nowAddress = slotList.Where(m => list.Contains(m.LocatNo) && m.Status == "1").OrderByDescending(m => m.LocatNo).Select(m => m.LocatNo).ToList();
+                }
+                else
+                {
+                    //鍌ㄤ綅澶т簬閫氶亾鍙�   姝e簭
+                    nowAddress = slotList.Where(m => list.Contains(m.LocatNo) && m.Status == "1").OrderBy(m => m.LocatNo).Select(m => m.LocatNo).ToList();
+
+                }
+                if (nowAddress.Count > 0)
+                {
+                    return nowAddress;
+                }
+            }
+            else
+            {
+                return nowAddress;
+            }
+            
+
+            return nowAddress;
+        }
+
+        /// <summary>
+        /// 鑾峰彇绉诲簱鐩爣搴撲綅 瀵嗛泦搴�
+        /// </summary>
+        /// <param name="oldAddress">闇�瑕佺Щ鍔ㄧ殑搴撲綅鍦板潃</param>
+        /// <param name="slotOut">闇�瑕佺Щ鍔ㄧ殑搴撲綅鐨勫嚭鍙d腑杞綅</param>
+        /// <param name="billCode">鍑哄簱鍗曟嵁鎴栨槸娉㈡鍗曟嵁</param>
+        /// <param name="flags">涓浆鍙�</param>
+        /// <param name="refLanWayId">闇�鍥炵Щ鐨勫贩閬搃d</param>
+        /// <param name="refLanOutCode">闇�鍥炵Щ鐨勫贩閬撲腑杞彛</param>
+        /// <returns>鐩爣搴撲綅鍦板潃 涓�"" 鐩存帴涓嬪彂涓ゆ鍑哄簱鎸囦护</returns>
+        public string GetMiJiMoveAddress(string oldAddress, string slotOut)
+        {
+            var newAddress = ""; //鏂板簱浣�
+            var newLaneWayAddress = ""; //鏂板贩閬撳彛搴撲綅
+
+            // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅
+
+            //
+            var sArray = oldAddress.Substring(4,2);
+            var ceng = int.Parse(sArray);
+            //
+            var sArray2 = slotOut.Substring(2, 2);
+            var row2 = sArray2;
+            //鍗佸瓧鍙�
+            var shiKou = new List<string>()
+            {
+                slotOut,
+                "070501",
+                "071301",
+                "070502",
+                "071302",
+            };
+            var shiKou3 = new List<addreClass>();
+            foreach (var item in shiKou)
+            {
+                var a = item.Substring(4, 2);
+                var b = item.Substring(2, 2);
+                if (int.Parse(a) != ceng) continue;
+                var s = Math.Abs(int.Parse(b) - int.Parse(row2));
+                if (shiKou3.Any(m => m.distNum == s)) continue;
+                shiKou3.Add(new addreClass()
+                {
+                    slotCode = item,
+                    distNum = s
+                });
+            }
+            //鏍规嵁鍗佸瓧鍙e樊鍊兼渶灏忕殑鎺掑簭
+            shiKou3 = shiKou3.OrderBy(m => m.distNum).ToList();
+
+                /**
+                //1 绉诲姩鍒版渶杩戠殑绌哄偍浣嶏紝蹇呴』鍥炵Щ銆�
+                //鏍规嵁鍥涘悜杞︾Щ鍔ㄨ建杩硅绠楀嚭鏈�杩戠┖鍌ㄤ綅銆�
+                //鍑哄簱瀹屾垚鍚庢牴鎹壒娆″彿 鐢熶骇鏃ユ湡 鍑哄彛璁$畻鍥炵Щ鍌ㄤ綅銆�
+
+                //2 绉诲姩閫傚悎瀛樻斁鐨勭粍锛岀郴缁熻嚜鍔ㄨ绠楁槸鍚﹀洖绉汇�� 
+                //鏍规嵁鎵规鍙� 鐢熶骇鏃ユ湡 鍑哄彛 鐗╂枡绛夎绠楀嚭绉诲簱鐩爣鍌ㄤ綅
+                //鍑哄簱瀹屾垚鍚庯紝鍒ゆ柇鏄惁鏈夋瘮褰撳墠搴撲綅鏇村悎閫傜殑瀛樺偍鍌ㄤ綅锛屾湁绉诲姩锛屾棤涓嶇Щ鍔ㄣ��
+                */
+
+                var oldSlot = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldAddress);
+                if (oldSlot == null)
+                {
+                    throw new Exception("鏈兘鎵惧埌鍌ㄤ綅淇℃伅");
+                }
+                #region 1涓嶉渶瑕佸洖绉荤殑
+
+                //鍚庢湡搴撳瓨鎵樼洏琛ㄦ敼浜嗗悗闇�瑕佸姞绛涢�夋潯浠舵墭鐩樼殑鐘舵�侊紙閫�璐�/棰勬嫞锛�
+                var tray1 = Db.Queryable<DataStockDetail>().Where(m => m.LocatNo == oldAddress).ToList();
+                //鏍规嵁鐗╂枡銆佹壒娆°�佹墭鐩樼姸鎬侊紙閫�璐�/棰勬嫞/鏆傚瓨绛夛級鍒嗙粍鍒ゆ柇
+                var d = tray1.GroupBy(m => new { m.SkuNo, m.LotNo, m.PalletTags });
+                var location = string.Empty;
+                if (d.Any())
+                {
+                    //鏃у偍浣嶅悓缁勭殑鍌ㄤ綅闆嗗悎
+                    var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == oldSlot.RoadwayNo).Select(m => m.LocatNo).ToList();
+                    foreach (var item in d)
+                    {
+                        foreach (var item2 in item)
+                        {
+                            var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0").Select(m => m.RoadwayNo).ToList();
+                            var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo
+                            && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList();
+                            foreach (var s in tray2)
+                            {
+                                if (string.IsNullOrWhiteSpace(s.RoadwayNo))//鍒ゆ柇鏄惁鍦ㄥ簱澶栵紝濡傛槸璺宠繃
+                                {
+                                    continue;
+                                }
+                                var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList();
+                                //鍒ゆ柇鏄惁鏈夊叆搴撲腑銆佸嚭搴撲腑銆佺Щ鍏ヤ腑銆佺Щ鍑轰腑
+                                if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0)
+                                {
+                                    continue;
+                                }
+                                if (lan.Count(m => m.Status == "0") > 0)
+                                {
+                                    
+                                    var bol = GetBecomingLocation(s.RoadwayNo, ref location);
+                                    if (bol && !string.IsNullOrWhiteSpace(location))
+                                    {
+                                        newAddress = location;
+                                        return newAddress;
+                                        
+                                    }
+
+                                }
+                            }
+                        }
+                    }
+
+                }
+
+                #endregion
+
+                #region 2闇�瑕佸洖绉荤殑
+
+                ////濡傛灉娌℃湁鎵惧埌鍚堥�傜殑鍌ㄤ綅
+                //if (string.IsNullOrWhiteSpace(newAddress))
+                //{
+                //    foreach (var s in shiKou3)
+                //    {
+                         
+                //        var r = int.Parse(s.slotCode.Substring(0, 2));
+                //        var l = int.Parse(s.slotCode.Substring(2, 2));
+                //        var c = int.Parse(s.slotCode.Substring(4, 2));
+                //        //鏌ヨ绌哄偍浣�
+                //        var sqlString = $@"select LocatNo,Row,Column,Layer,(ABS(Row-{r}) + ABS(Column-{l}) ) as distNum 
+                //                from SysStorageLocat where (AisleOneRow  = {r} or AisleTwoRow = {r}) and Status in (0) and
+                //                 RoadwayNo !='{oldSlot.RoadwayNo}' and RoadwayNo not in(select RoadwayNo from SysStorageRoadway where Status = 1) order by distNum,SlotCode";
+
+                //        var addressModels = dataContext.ExecuteQuery<addreClass>(sqlString).ToList();
+                //        foreach (var item in addressModels)
+                //        {                            銆�
+                            
+                            
+                //            newAddress = item.slotCode;
+                //            var dz = newAddress.Split(new char[] { '-' });
+                //            var l1 = dz[1];
+                //            var c1 = dz[0];
+                //            newLaneWayAddress = $"{c1}-{l1}-{a[2]}";
+                //            flags = newLaneWayAddress;
+
+                //            var slotModel = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == item.slotCode);
+
+                //            var lan = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
+                //            if (slotModel.SlotRow > int.Parse(a[2]))
+                //            {
+                //                // 鍙栨渶涓婇潰涓�鎺�
+                //                lan = lan.OrderBy(m => m.SlotCode).ToList();
+                //                for (int i = 0; i < lan.Count; i++)
+                //                {
+                //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
+                //                    if (slot.SlotStatus == 0)
+                //                    {
+                //                        if (i == lan.Count - 1)
+                //                        {
+                //                            newAddress = lan[lan.Count - 1].SlotCode;
+
+                //                            break;
+                //                        }
+                //                        else
+                //                        {
+                //                            continue;
+                //                        }
+
+                //                    }
+                //                    else
+                //                    {
+                //                        newAddress = lan[i - 1].SlotCode;
+                //                        break;
+                //                    }
+                //                }
+
+                //            }
+                //            else
+                //            {
+                //                // 鍙栨渶涓嬮潰涓�鎺�
+                //                lan = lan.OrderByDescending(m => m.SlotCode).ToList();
+                //                for (int i = 0; i < lan.Count; i++)
+                //                {
+                //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
+                //                    if (slot.SlotStatus == 0)
+                //                    {
+                //                        if (i == lan.Count - 1)
+                //                        {
+                //                            newAddress = lan[lan.Count - 1].SlotCode;
+                //                            break;
+                //                        }
+                //                        else
+                //                        {
+                //                            continue;
+                //                        }
+
+                //                    }
+                //                    else
+                //                    {
+                //                        newAddress = lan[i - 1].SlotCode;
+                //                        break;
+                //                    }
+                //                }
+                //            }
+                //            //娣诲姞鍥炵Щ浠诲姟
+                //            AddHyTask(oldAddress, newAddress, newLaneWayAddress, oldSlot.SlotLanewayId, slotOut, billCode);
+                //            refLanWayId = slotModel.SlotLanewayId;
+                //            refLanOutCode = newLaneWayAddress;
+                //            //9锛氶攣瀹氬偍浣� 
+                //            var updateSlot = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
+                //            var newAddressRow = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == newAddress);
+                //            if (newAddressRow.SlotRow > int.Parse(a[2]))
+                //            {
+                //                updateSlot = updateSlot.Where(m => m.SlotRow < newAddressRow.SlotRow && m.SlotRow > int.Parse(a[2])).OrderBy(m => m.SlotCode).ToList();
+                //            }
+                //            else
+                //            {
+                //                updateSlot = updateSlot.Where(m => m.SlotRow > newAddressRow.SlotRow && m.SlotRow < int.Parse(a[2])).OrderByDescending(m => m.SlotCode).ToList();
+
+                //            }
+                //            foreach (var source in updateSlot)
+                //            {
+                //                if (source.SlotCode == newAddress)
+                //                {
+                //                    continue;
+                //                }
+                //                if (source.SlotStatus == 0)
+                //                {
+                //                    source.SlotStatus = 8;
+                //                }
+                //            }
+
+                //            if (updateSlot.Count <= 0)
+                //            {
+                //                refLanWayId = "";
+                //                refLanOutCode = "";
+                //            }
+                //            dataContext.SubmitChanges();
+                //            return newAddress;
+                            
+
+                            
+                //        }
+
+                //    }
+
+                //}
+
+                return newAddress;
+                #endregion
+
+            
+        }
+
+        /// <summary>
+        /// 鑾峰彇绉诲簱鍚堥�傜殑鍌ㄤ綅 瀵嗛泦搴�
+        /// </summary>
+        /// <param name="laneWayId">鍚堥�傜粍鐨勫贩閬撳彿</param>
+        /// <param name="location">鍒嗛厤鍌ㄤ綅</param>
+        /// <returns>true锛氬瓨鍦ㄥ悎閫傚偍浣�   False锛氫笉瀛樺湪鍚堥�傚偍浣�</returns>
+        private bool GetBecomingLocation(string laneWayId, ref string location)
+        {
+            bool bl = false;
+            
+            // 寰幆鍒ゆ柇褰撳墠缁勬槸鍚︽湁鍓╀綑鍌ㄤ綅
+            string sqlString = string.Empty;
+            location = "";
+            
+            // 鍒ゆ柇鍌ㄤ綅缁勬槸鍚︽湁绌哄偍浣�   鍏宠仈搴撳瓨鏄庣粏琛ㄥ彲闃叉鍌ㄤ綅鐘舵�佷笉鍑嗙‘閬垮厤閫犳垚婊″叆寮傚父//not in ('1','2','4','6','7','8')
+            sqlString = $"select LocatNo,Column,AisleOne from SysStorageLocat where RoadwayNo = {laneWayId} and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = { laneWayId}) order by Row;";
+            var slotModel =Db.SqlQueryable<LocateInfo>(sqlString).ToList();
+            if (slotModel.Count == 0)
+            {
+                bl = false;
+            }
+            else  // 瀛樺湪绌哄偍浣�
+            {
+                // 鍒ゆ柇褰撳墠缁勫悎閫傜殑鍌ㄤ綅鍦板潃
+                var numstr = slotModel[0].AisleOne.Substring(4,2);
+                int aisleRow = int.Parse(numstr);
+
+                if (slotModel[0].Column > aisleRow)
+                {
+                    // 鍙栨渶涓婇潰涓�鎺�
+                    location = slotModel[0].LocatNo;
+
+                }
+                else
+                {
+                    // 鍙栨渶涓嬮潰涓�鎺�
+
+                    location = slotModel[slotModel.Count - 1].LocatNo;
+                }
+                
+                bl = true;
+            }
+
+            
+
+            return bl;
+        }
+
+        private class addreClass
+        {
+            public string slotCode { get; set; }
+            public int distNum { get; set; }
+        }
+        public class LocateInfo
+        {
+            public string LocatNo { get; set; }
+            public int Column { get; set; }
+            public string AisleOne { get; set; }
+             
+        }
+
+        /// <summary>
+        /// wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛�
+        /// </summary>
+        /// <param name="taskNo"></param>
+        /// <param name="userId"></param>
+        /// <exception cref="Exception"></exception>
+        public void ExportSuccess(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 locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault();
+                //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅
+                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo);
+                try
+                {
+                    task.Status = "2";//浠诲姟鐘舵��
+                    task.IsSend = 0;
+                    task.IsCancel = 0;
+                    task.IsFinish = 0;
+                    task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
+                    Db.Updateable(task).ExecuteCommand();
+                    if (locate != null)
+                    {
+                        locate.Status = "0"; // 鏇存敼褰撳墠浠诲姟涓殑鍌ㄤ綅鐘舵�侊紙鏀逛负0绌哄偍浣嶏級
+                        Db.Updateable(locate).ExecuteCommand();
+                    }
+                    foreach (var item in stockDetail)
+                    {
+                        if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
+                        {
+                            //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺
+                            var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099");
+
+                            if (stock != null)
+                            {
+                                if (item.LockQty != null)
+                                {
+                                    stock.Qty -= item.LockQty.Value;
+                                    stock.LockQty -= item.LockQty.Value;
+                                    Db.Updateable(stock).ExecuteCommand();
+                                }
+
+                                if (stock.Qty == 0)
+                                {
+                                    Db.Deleteable(stock).ExecuteCommand();
+                                }
+                            }
+
+                            //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤
+                            var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo);
+                            if (sCode != null)
+                            {
+                                sCode.Status = "0";
+                                Db.Updateable(sCode).ExecuteCommand();
+                            }
+                            Db.Deleteable(item).ExecuteCommand();
+
+                            continue;
+                        }
+                        item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛�
+                        item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
+                        item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
+                        item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級
+                        
+                    }
+                    //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級
+                    var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
+                    var PalletType = "0"; //0锛氱墿鏂欐墭  1锛氱┖鎵樼洏鎵�
+                    
+                    foreach (var item in allot)
+                    {
+                        if (item.SkuNo == "100099")
+                        {
+                            item.Status = "5";
+                            item.CompleteQty += stockDetail[0].Qty;
+                            PalletType = "1";
+                        }
+                        else
+                        {
+                            item.Status = "2";
+                        }
+
+                    }
+
+                    var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m=>m.LocatNo).ToList();
+                    //鍒ゆ柇鏄惁鏄師杈呮枡鍑哄簱浠诲姟  璐ф灦鍌ㄤ綅=銆嬪钩搴撳偍浣�
+                    if ( endLocateList.Contains(task.EndLocat) && PalletType == "0")
+                    {
+                        //淇敼鐩爣鍦板潃鐘舵��
+                        var endLocat = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == task.EndLocat);
+                        endLocat.Status = "1";
+                        Db.Updateable(endLocat).ExecuteCommand();
+                        foreach (var item in stockDetail)
+                        {
+                            item.LocatNo = endLocat.LocatNo;//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛�
+                            item.WareHouseNo = endLocat.WareHouseNo;//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
+                            item.RoadwayNo = endLocat.RoadwayNo;//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
+                            item.AreaNo = endLocat.AreaNo;//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級
+                        }
+                    }
+                    Db.Updateable(stockDetail).ExecuteCommand();
+                    Db.Updateable(allot).ExecuteCommand();
+
+                    if (userId != 0)
+                    {
+                        //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                        var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId);
+                    }
+
+                    Db.CommitTran();
+                }
+                catch (Exception ex)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(ex.Message);
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message);
+            }
+        }
+
+        /// <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}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�");
+                }
+                //骞冲簱涓偍浣嶉泦鍚�
+                var pingKuLocate = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0").ToList();
+                var pingKuList = pingKuLocate.Select(m => m.LocatNo).ToList();
+                try
+                {
+
+                    task.Status = "5";//浠诲姟鐘舵��
+                    //鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱  
+                    if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat))
+                    {
+                        task.Status = "2";
+                    }
+                    
+                    task.IsSend = 0;
+                    task.IsCancel = 0;
+                    task.IsFinish = 0;
+                    task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
+                    Db.Updateable(task).ExecuteCommand();
+
+                    #region 淇敼鍌ㄤ綅鐘舵��
+
+                    if (!pingKuList.Contains(task.StartLocat))
+                    {
+                        //鍘熷偍浣嶆敼涓虹┖鍌ㄤ綅 0
+                        locate.Status = "0";
+                        Db.Updateable(locate).ExecuteCommand();
+                    }
+                    
+
+                    //鐩爣鍌ㄤ綅鏀逛负鏈夎揣鐗� 1
+                    locate2.Status = "1";
+                    Db.Updateable(locate2).ExecuteCommand();
+                    //鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱  
+                    if ( pingKuList.Contains(task.EndLocat))
+                    {
+                        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);
+            }
+        }
+
+        /// <summary>
+        /// AGV浠诲姟鍙栬揣瀹屾垚鍙嶉
+        /// </summary>
+        /// <param name="taskNo"></param> 
+        public void AGVQuHuoSuccess(string taskNo)
+        {
+            try
+            {
+                Db.BeginTran();
+                var task = Db.Queryable<LogTask>().First(m=>m.IsDel =="0" && m.TaskNo == taskNo);
+                if (task == null)
+                {
+                    throw new Exception("娌℃湁鏌ヨ鍒颁换鍔′俊鎭�");
+                }
+                if (task.Status!="1")
+                {
+                    throw new Exception("浠诲姟鐘舵�佷笉鏄鍦ㄦ墽琛岋紝璇锋牳瀹�");
+                }
+                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat && m.IsDel == "0");
+                if (locate == null)
+                {
+                    throw new Exception("娌℃湁鏌ヨ鍒拌捣濮嬪偍浣嶄俊鎭�");
+                }
+                if (locate.WareHouseNo!="W04")
+                {
+                    throw new Exception("璧峰鍌ㄤ綅涓嶆槸骞冲簱鍌ㄤ綅锛岃鏍稿疄");
+                }
+                locate.Status = "0"; //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣�
+                Db.Updateable(locate).ExecuteCommand();
+                //鏌ヨ鍑烘墭鐩樹俊鎭�  鏇存敼搴撳瓨鍌ㄤ綅淇℃伅
+                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == task.PalletNo).ToList();
+                foreach (var item in stockDetail)
+                {
+                    item.WareHouseNo = "";
+                    item.AreaNo = "";
+                    item.RoadwayNo = "";
+                    item.LocatNo = "";
+                }
+                Db.Updateable(stockDetail).ExecuteCommand();
+                Db.CommitTran();
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
+
+        
+        #endregion
+
+        #endregion
+
+
 
         //------------------------------------------------------------------
 
@@ -3635,338 +5922,6 @@
             }
         }
         
-        //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛�
-        public void ExportSuccess(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 locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault();
-                //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅
-                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo);
-                try
-                {
-                    task.Status = "2";//浠诲姟鐘舵��
-                    task.IsSend = 0;
-                    task.IsCancel = 0;
-                    task.IsFinish = 0;
-                    task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
-                    Db.Updateable(task).ExecuteCommand();
-                    if (locate != null)
-                    {
-                        locate.Status = "0"; // 鏇存敼褰撳墠浠诲姟涓殑鍌ㄤ綅鐘舵�侊紙鏀逛负0绌哄偍浣嶏級
-                        Db.Updateable(locate).ExecuteCommand();
-                    }
-                    foreach (var item in stockDetail)
-                    {
-                        if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
-                        {
-                            //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺
-                            var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099");
-
-                            if (stock != null)
-                            {
-                                if (item.LockQty != null)
-                                {
-                                    stock.Qty -= item.LockQty.Value;
-                                    stock.LockQty -= item.LockQty.Value;
-                                    Db.Updateable(stock).ExecuteCommand();
-                                }
-
-                                if (stock.Qty == 0)
-                                {
-                                    Db.Deleteable(stock).ExecuteCommand();
-                                }
-                            }
-
-                            //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤
-                            var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo);
-                            if (sCode != null)
-                            {
-                                sCode.Status = "0";
-                                Db.Updateable(sCode).ExecuteCommand();
-                            }
-                            Db.Deleteable(item).ExecuteCommand();
-
-                            #region 鎷h揣淇℃伅
-
-                            //var pickQty = 0;//鎷h揣鐨勬暟閲�
-                            //var comList = new List<BllCompleteDetail>();
-                            //    //娣诲姞鎷h揣鏄庣粏
-                            //    var completeDetail = new BllCompleteDetail()
-                            //    {
-                            //        SONo = "",
-                            //        SODetailNo = 0,
-                            //        ExportAllotId = 0,
-                            //        StockId = exportAllot.StockId,
-                            //        BoxNo = item.BoxNo,
-                            //        BoxNo2 = item.BoxNo2,
-                            //        BoxNo3 = item.BoxNo3,
-
-                            //        LotNo = exportAllot.LotNo,
-                            //        LotText = exportAllot.LotText,
-                            //        SupplierLot = exportAllot.SupplierLot,
-                            //        SkuNo = exportAllot.SkuNo,
-                            //        SkuName = exportAllot.SkuName,
-                            //        Standard = exportAllot.Standard,
-                            //        PalletNo = palletNo,
-                            //        CompleteQty = item.Qty,
-
-                            //        CreateUser = userId
-                            //    };
-                            //    comList.Add(completeDetail);
-
-                            //    //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
-                            //    Db.Deleteable(item).ExecuteCommand();
-                            //    pickQty += item.Qty;
-
-                            //    exportAllot.Status = "5"; //寰呭洖搴� : 宸插畬鎴�
-                            //    exportAllot.CompleteQty += item.Qty; //鎷h揣鏁伴噺
-                            //    exportAllot.UpdateUser = userId; //淇敼浜�
-                            //    exportAllot.UpdateTime = serverTime; //淇敼鏃堕棿
-
-                            //    Db.Updateable(exportAllot).ExecuteCommand();
-
-                            //    //楠岃瘉鎷h揣淇℃伅鏄惁涓哄凡瀹屾垚
-                            //    if (exportAllot.Status == "5")
-                            //    {
-                            //        break;
-                            //    }
-
-
-                            //Db.Insertable(comList).ExecuteCommand();
-
-
-                            #endregion
-
-                            continue;
-                        }
-                        item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛�
-                        item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
-                        item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
-                        item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級
-                        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 PalletType = "0"; //0锛氱墿鏂欐墭  1锛氱┖鎵樼洏鎵�
-                    var soNo = "";
-                    var sku = "";
-                    foreach (var item in allot)
-                    {
-                        if (item.SkuNo == "100099")
-                        {
-                            item.Status = "5";
-                            item.CompleteQty += stockDetail[0].Qty;
-                            PalletType = "1";
-                        }
-                        else
-                        {
-                            item.Status = "2";
-                            soNo = item.SONo;
-                            sku = item.SkuNo;
-                        }
-
-                    }
-                    //涓嬪彂鍥涙ゼ璋冨害AGV鐨勪换鍔�
-                    if ((task.EndLocat == "outMode" || task.EndLocat == "outMode") && PalletType == "0")
-                    {
-                        foreach (var item in allot)
-                        {
-                            var detail = Db.Queryable<DataStockDetail>().First(m => m.Id == item.StockId);
-                            detail.SONo = item.SONo;
-                            Db.Updateable(detail).ExecuteCommand();
-                        }
-
-                        var locatePing = new AllotLocation().GetPingLocate(soNo, sku);
-                        if (locatePing == null)
-                        {
-                            throw new Exception("骞冲簱鏈煡璇㈠埌绌轰綅缃�");
-                        }
-                        var exTask = new LogTask    //鍑哄簱浠诲姟
-                        {
-                            TaskNo = new Common().GetMaxNo("TK"),
-                            Sender = "WMS",
-                            Receiver = "AGV",
-                            IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
-
-                            StartLocat = task.EndLocat,//璧峰浣嶇疆
-                            EndLocat = locatePing.LocatNo,//outMode,//鐩爣浣嶇疆
-                            PalletNo = task.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 = "浠�" + task.EndLocat + "鍒�" + locatePing.LocatNo + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
-                        };
-                        Db.Insertable(exTask).ExecuteCommand();
-
-                        var outDto = new List<OutCommandDto>
-                        {
-                            new OutCommandDto()
-                            {
-                                PalletNo = task.PalletNo,//鎵樼洏鍙�
-                                StartLocate = task.EndLocat, // 璧峰浣嶇疆
-                                StartRoadway = "",//鍏跺疄宸烽亾
-                                EndLocate = locatePing.LocatNo,//outMode, // 鐩爣浣嶇疆 
-                                TaskNo = exTask.TaskNo, // 浠诲姟鍙�
-                                TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� 
-                                OutMode = "",  //鍑哄簱鍙� 
-                                Order = 1,
-
-                                //UnstackingMode = unstackingMode2,//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑�  1 浜哄伐鎷h揣鍑�
-                                //CompleteQty = outCount2,  //鎷嗙殑浠舵暟
-                                //BoxexQty = outCount,      //鎬讳欢鏁�
-                            }
-                        };
-                        // 姝e紡杩愯绋嬪簭鏀惧紑
-                        var list2 = outDto.Select(m => m.TaskNo).ToList();
-                        var jsonData = JsonConvert.SerializeObject(outDto);
-                        string response = "";
-
-                        try
-                        {
-                            var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
-                            //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
-                            var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
-
-                            //////瑙f瀽杩斿洖鏁版嵁 
-                            //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
-                            //if (wcsModel.StatusCode == 0)
-                            //{
-                            //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
-                            new TaskServer().EditTaskIssueOk(list2, time1, time2); 
-                            //}
-                            //if (wcsModel.StatusCode == -1)
-                            //{
-                            //    new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
-                            //    throw new Exception(wcsModel.Msg);
-                            //}
-                        }
-                        catch (Exception ex)
-                        {
-                            throw new Exception(ex.Message);
-                        }
-                    }
-
-                    Db.Updateable(allot).ExecuteCommand();
-
-                    if (userId != 0)
-                    {
-                        //娣诲姞鎿嶄綔鏃ュ織璁板綍
-                        var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId);
-                    }
-
-                   
-
-                    Db.CommitTran();
-                }
-                catch (Exception ex)
-                {
-                    Db.RollbackTran();
-                    throw new Exception(ex.Message);
-                }
-            }
-            catch (Exception ex)
-            {
-                throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message);
-            }
-        }
-
-        /// <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)
         {
@@ -4289,727 +6244,7 @@
         }
         #endregion
 
-        #region 鑷姩鍒嗛厤銆佸彇娑堝垎閰嶃�佽幏鍙栨墜鍔ㄥ垎閰嶇殑鏁版嵁婧愩�佹墜鍔ㄥ垎閰�
-
-        // 鍒ゆ柇鏄惁鏄法鎵瑰嚭搴�
-        public bool IsCrossLotNo(string soNo)
-        {
-            try
-            {
-                //鏂规硶杩斿洖缁撴灉锛歜l
-                var bl = true;
-                //鏌ヨ鍗曟嵁淇℃伅
-                var notice = Db.Queryable<BllExportNotice>().First(m=>m.SONo == soNo && m.IsDel == "0");
-                //鍒ゆ柇鍗曟嵁绫诲瀷  鎴愬搧鍑哄簱銆侀鏂欏嚭搴擄紙鍏跺畠绫诲瀷璺冲嚭姝ゆ柟娉曪級
-                if (notice.Type!="0" && notice.Type!="1")
-                {
-                    return bl;
-                }
-                //鏌ヨ鍒板綋鍓嶅崟鎹笅鐨勫嚭搴撳崟鏄庣粏淇℃伅
-                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList();
-                //搴撳瓨鎬昏〃淇℃伅
-                var data = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList();
-                //搴撳瓨鏄庣粏涓楠屽悎鏍兼壒娆¢泦鍚�
-                var dataDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").GroupBy(g => g.LotNo).Select(s => s.LotNo).ToList();
-                //搴撳瓨鏄庣粏琛ㄤ俊鎭�
-                var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList();
-
-
-                //寰幆鍗曟嵁鏄庣粏淇℃伅
-                foreach (var item in noticeDetail)
-                {
-                    //楠岃瘉鍏堣繘鍏堝嚭鍘熷垯
-                    //鑾峰彇褰撳墠鐗╂枡鐨勬墍鏈夋壒娆′俊鎭�(鎺掗櫎鍗曟嵁鐨勬壒娆★紝闃叉鍗曟嵁鎵�鍦ㄦ壒娆¢攣瀹氭暟閲忓悗楠岃瘉灏忎簬绛変簬0)
-                    var forData = data.Where(m => m.SkuNo == item.SkuNo 
-                    && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0 
-                    && dataDetail.Contains(m.LotNo)).Select(m=>m.LotNo).ToList(); 
-
-                    forData.Add(item.LotNo);  //闆嗗悎娣诲姞鍗曟嵁鐨勬壒娆�
-                    //鑾峰彇鎺掑簭鍚庣殑绗竴涓壒娆�
-                    var firstLotNo = forData.OrderBy(m => m).First();
-                    if (firstLotNo != item.LotNo)
-                    {
-                        bl = false;
-                        break;
-                    }
-
-                    //楠岃瘉鏁堟湡浼樺厛鍘熷垯
-                    var forDataBox = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && m.Qty > 0).ToList();
-                    //鑾峰彇褰撳墠鍗曟嵁鎵规鐨勬渶杩戞晥鏈�
-                    var expirationTimedt = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo
-                    && m.LotNo == item.LotNo && m.Qty > 0).ToList();
-                    if (expirationTimedt.Count > 0)
-                    {
-                        var expirationTime = expirationTimedt.OrderBy(m => m.ExpirationTime).Select(m => m.ExpirationTime).First();
-                        //鑾峰彇搴撳瓨涓叾瀹冩壒娆℃晥鏈熷ぇ浜庡綋鍓嶅崟鎹壒娆$殑鏁堟湡鏁伴噺
-                        var num = forDataBox.Count(m => m.ExpirationTime > expirationTime);
-                        //鍒ゆ柇鏄惁澶т簬0
-                        if (num > 0)
-                        {
-                            bl = false;
-                            break;
-                        }
-                    }
-                    else 
-                    {
-                        var dataDetailtime = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").
-                            Where(m => m.SkuNo == item.SkuNo
-                            && m.LotNo == item.LotNo && m.Qty > 0)
-                            .OrderBy(m => m.ExpirationTime)
-                            .Select(m => m.ExpirationTime).First();
-
-                        var num = forDataBox.Count(m => m.ExpirationTime > dataDetailtime);
-                        //鍒ゆ柇鏄惁澶т簬0
-                        if (num > 0)
-                        {
-                            bl = false;
-                            break;
-                        }
-                    }
-                }
-
-
-                return bl;
-            }
-            catch (Exception e)
-            {
-                throw new Exception(e.Message);
-            }
-        }
-
-        //鑷姩鍒嗛厤
-        public bool AutoAllot(string soNo, int userId)
-        {
-            try
-            {
-                #region 鍒ゆ柇鏉′欢锛堝嚭搴撳崟銆佸嚭搴撳崟鏄庣粏锛� 
-                //鍑哄簱鍗�
-                var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault();
-                if (notice == null)
-                {
-                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
-                }
-                if (notice.Status != "0" && notice.Status != "1")
-                {
-                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;");
-                }
-                //鍑哄簱鍗曟槑缁�
-                var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList();
-                if (!detailList.Any())
-                {
-                    throw new Exception("鏈煡璇㈠埌绗﹀悎鍒嗛厤鏉′欢鐨勫嚭搴撳崟鎹槑缁嗕俊鎭�");
-                }
-
-                #endregion
-
-                var exAllotList = new List<BllExportAllot>();
-                var assign = new AllotSku();
-                Db.BeginTran();
-                try
-                {
-                    List<SoDetailInfo> soDetailList = new List<SoDetailInfo>();
-                    foreach (var detail in detailList)
-                    {
-                        if (detail.AllotQty >= detail.Qty)
-                        {
-                            continue;
-                        }
-                        //杩橀渶瑕佸垎閰嶇殑鏁伴噺
-                        decimal needQty = detail.Qty - (detail.AllotQty == null? 0: decimal.Parse(detail.AllotQty.ToString()));
-                        //搴撳瓨鏄庣粏 Status 0锛氬緟鍒嗛厤 1锛氶儴鍒嗗垎閰�  2锛氬凡鍒嗛厤 
-                        var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList();
-
-
-                        //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规
-                        if (!string.IsNullOrWhiteSpace(detail.LotNo))
-                        {
-                            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 && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList();
-                        }
-
-                        if (stockDetail.Count < 1)
-                        {
-                            throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨");
-                        }
-                        //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2锛氭娊妫�鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///3:鍙栨牱鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱
-                        if (notice.Type == "0" || notice.Type == "1" )//鎴愬搧銆侀鏂欏嚭搴�
-                        {
-                            stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList();
-                        }
-                        else if (notice.Type == "2" )//鎶芥鍑哄簱
-                        {
-                            stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1" || m.InspectStatus == "2").ToList();
-                        }
-                        else if (notice.Type == "6" || notice.Type == "7" ) //浠e偍銆佸叾瀹�
-                        {
-                            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 (stockDetail.Sum(m=>m.Qty-m.LockQty) < needQty)
-                        {
-                            throw new Exception("搴撳瓨鏄庣粏鏁伴噺涓嶈冻");
-                        }
-                        #region 鍖呰淇℃伅
-
-                        var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺
-                        var bNum = 0;//绠辩墿鍝佹暟閲�
-                        //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
-                        new Common().GetPackQtyInfo(detail.PackagNo,ref pNum,ref bNum);
-
-                        #endregion
-
-                        //鍙栧悎閫傚簱瀛樺晢鍝�
-                        Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟
-                        var qty = 0m;
-                        //鍒嗛厤璐х墿
-                        qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, detail.LotNo, detail.IsMixBox);
-                        foreach (var sc in stockQtyDic)
-                        {
-                            var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key);
-                            //娣诲姞鍒嗛厤琛ㄤ俊鎭�
-                            var allot = new BllExportAllot
-                            {
-                                SONo = notice.SONo,
-                                WaveNo = "",
-                                SODetailNo = detail.Id,
-                                StockId = sc.Key,
-                                LotNo = s.LotNo,
-                                LotText = s.LotText,
-                                SupplierLot = s.SupplierLot,
-                                SkuNo = s.SkuNo,
-                                SkuName = s.SkuName,
-                                Standard = s.Standard,
-                                PalletNo = s.PalletNo,
-                                IsBale = detail.IsBale == "0" ? "0" : s.IsBale == "1" ? "0" : "1", //鏄惁瑁瑰寘
-                                IsBelt = detail.IsBelt == "0" ? "0" : s.IsBelt == "1" ? "0" : "1", //鏄惁鎵撳甫
-
-                                Qty = sc.Value,
-                                CompleteQty = 0,
-                                //BoxexQty = s.Qty, //绠卞唴鏁伴噺
-                                Status = "0",
-                                LogisticsId = notice.LogisticsId,
-                                IsAdvance = "0",
-                                OutMode = "",//鍑哄簱鍙�
-
-                                CreateUser = userId,
-                                CreateTime = DateTime.Now
-                            };
-                            exAllotList.Add(allot);
-
-                            s.LockQty += stockQtyDic[s.Id];
-
-                            if (s.LockQty == s.Qty)
-                            {
-                                s.Status = "2";
-                            }
-                            else
-                            {
-                                s.Status = "1";
-                            }
-
-                            var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand();
-                            
-                        }
-                        detail.AllotQty += qty;
-                        detail.UpdateUser = userId;
-                        detail.UpdateTime = DateTime.Now;
-                        if (detail.Status == "0")
-                        {
-                            detail.Status = "1";
-                        }
-                        if (qty > detail.Qty)
-                        {
-                            //搴撳瓨鎬昏〃
-                            var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" 
-                            && d.SkuNo == detail.SkuNo 
-                            && d.LotNo == detail.LotNo);
-                            stock.LockQty += qty-detail.Qty;
-                            Db.Updateable(stock).ExecuteCommand();
-
-                            //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜
-                            SoDetailInfo soDetail = new SoDetailInfo();
-                            soDetail.OrderDetailCode = detail.OrderDetailCode;
-                            soDetail.LockQty = qty - detail.Qty;
-                            soDetail.LotNo = detail.LotNo;
-
-                            soDetailList.Add(soDetail);
-                        }
-                       
-                    }
-
-                    var mx = Db.Updateable(detailList).ExecuteCommand();
-                    var fp = Db.Insertable(exAllotList).ExecuteCommand();
-
-                    //淇敼鍒嗛厤鍗曟嵁鐨勭姸鎬�
-                    if (notice.Status == "0" || notice.Status == "1")
-                    {
-                        var bl = 0;
-                        var bl2 = 0;
-                        foreach (var item in detailList)
-                        {
-                            if (item.AllotQty <= 0)
-                            {
-                                continue;
-                            }
-                            if (item.AllotQty < item.Qty)
-                            {
-                                bl = 1;
-                            }
-                            else
-                            {
-                                bl2 = 1;
-                            }
-                        }
-
-                        switch (bl2)
-                        {
-                            case 1 when bl == 1:
-                                notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
-                                break;
-                            case 0 when bl == 1:
-                                notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
-                                break;
-                            case 1 when bl == 0:
-                                notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
-                                break;
-                            case 0 when bl == 0:
-                                //璇佹槑鎵�鏈夊垎閰嶆暟閲忓叏閮ㄥ皬浜庣瓑浜庡嚭搴撴暟閲� 涓嶅仛淇敼
-                                break;
-                        }
-
-                    }
-                    notice.UpdateUser = userId;
-                    notice.UpdateTime = DateTime.Now;
-                    var zd = Db.Updateable(notice).ExecuteCommand();
-
-                    //娣诲姞鎿嶄綔鏃ュ織璁板綍
-                    var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", 
-                        notice.SONo, "鍒嗛厤", $"鑷姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
-
-                    if (zd > 0 && mx > 0 && fp > 0 && k)
-                    {
-                        #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp
-                        //绯荤粺瀵规帴鍚庢斁寮�
-                        /*var jsonData = JsonConvert.SerializeObject(soDetailList);
-
-                        var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP");
-
-                        var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁
-                        if (obj.Success != 0)
-                        {
-                            throw new Exception("涓婁紶澶辫触" + obj.Message);
-                        }*/
-                        #endregion
-
-                        Db.CommitTran();
-                        return true;
-                    }
-                    Db.RollbackTran();
-                    return false;
-                }
-                catch (Exception e)
-                {
-                    Db.RollbackTran();
-                    throw new Exception(e.Message);
-                }
-            }
-            catch (Exception e)
-            {
-                throw new Exception("鑷姩鍒嗛厤澶辫触锛�" + e.Message);
-            }
-        }
-
-        //鍙栨秷鍒嗛厤
-        public bool CancelAllot(string soNo, int userId)
-        {
-            try
-            {
-
-                var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault();
-                if (notice == null)
-                {
-                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
-                }
-                if (notice.Status != "1" && notice.Status != "2")
-                {
-                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负宸插垎閰嶆垨閮ㄥ垎鍒嗛厤鎴栨潵婧愭槸鍚︽槸WMS");
-                }
-                //璇ュ崟鎹殑鍒嗛厤淇℃伅 Status 0锛氫换鍔′笅鍙� 1锛氬緟鎷h揣 2锛氶儴鍒嗘嫞璐� 3锛氬緟鍥炲簱 4锛氬凡瀹屾垚
-                var allotList = Db.Queryable<BllExportAllot>().Where(o => o.IsDel == "0" && o.SONo == soNo).ToList();
-                //鏈夊凡鎵ц鐨勫垎閰嶆暟鎹笉鑳藉彇娑�
-                if (allotList.Any(o => o.Status != "0"))
-                {
-                    throw new Exception("褰撳墠鍗曟嵁鐨勫垎閰嶄俊鎭凡鏈夋墽琛屼腑锛屼笉鑳藉彇娑堝垎閰�");
-                }
-                List<SoDetailInfo> soDetailList = new List<SoDetailInfo>();
-                //寮�鍚簨鍔�
-                Db.BeginTran();
-                try
-                {
-                    //鏌ヨ鍒嗛厤鐨勬槑缁�
-                    var detail = Db.Queryable<BllExportNoticeDetail>().Where(d => d.SONo == soNo && d.AllotQty > 0 && d.IsDel == "0").ToList();
-                    foreach (var d in detail)
-                    {
-                        var orders = allotList.Where(o => o.SODetailNo == d.Id).ToList();
-                        foreach (var o in orders)
-                        {
-                            var pq = Db.Queryable<DataStockDetail>().Where(t => t.Id == o.StockId);
-
-                            var pq2 = !string.IsNullOrWhiteSpace(o.LotNo) ? pq.Where(t => t.LotNo == o.LotNo).ToList() : pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)).ToList();
-
-                            var pallet = pq2.FirstOrDefault();
-                            if (pallet != null)
-                            {
-                                pallet.LockQty -= o.Qty;
-                                pallet.Status = pallet.LockQty == 0 ? "0" : "1"; //濡傛灉閿佸畾鏁伴噺鏄�0鐘舵�佸彉鏇翠负寰呭垎閰� 鍚﹀垯涓洪儴鍒嗗垎閰�
-                                Db.Updateable(pallet).ExecuteCommand();
-
-                                //搴撳瓨鎬昏〃
-                                //var stock = Db.Queryable<DataStock>().First(t => t.SkuNo == pallet.SkuNo && t.IsDel == "0");
-                                //stock.LockQty -= o.Qty;
-                                //Db.Updateable(stock).ExecuteCommand();
-                            }
-
-                        }
-                        Db.Deleteable<BllExportAllot>(orders).ExecuteCommand();
-                        
-                        if (d.AllotQty > d.Qty)
-                        {
-                            //搴撳瓨鎬昏〃
-                            var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);
-                            stock.LockQty -= (decimal)d.AllotQty - d.Qty;
-                            Db.Updateable(stock).ExecuteCommand();
-
-                            //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜
-                            SoDetailInfo soDetail = new SoDetailInfo();
-                            soDetail.OrderDetailCode = d.OrderDetailCode;
-                            soDetail.LockQty = (decimal)(d.Qty-d.AllotQty);
-                            soDetail.LotNo = d.LotNo;
-
-                            soDetailList.Add(soDetail);
-                        }
-                        d.AllotQty = 0;
-                        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 = "";
-                        //    }
-
-                        //}
-                    }
-
-                    //鏌ヨ褰撳墠鍗曟嵁鏄惁宸叉坊鍔犲鏂欎换鍔�
-                    if (notice.Type == "1")
-                    {
-                        var task = Db.Queryable<BllExportTimingTask>().First(m => m.IsDel == "0" && m.SoNo == soNo);
-                        if (task!=null)
-                        {
-                            task.IsDel = "1";
-                            task.UpdateUser = userId;
-                            task.UpdateTime = DateTime.Now;
-                            Db.Updateable(task).ExecuteCommand();
-                        }
-                    }
-                    notice.Status = "0";
-                    notice.UpdateUser = userId;
-                    notice.UpdateTime = DateTime.Now;
-                    Db.Updateable(detail).ExecuteCommand();
-                    Db.Updateable(notice).ExecuteCommand();
-
-                    //绯荤粺瀵规帴鍚庢斁寮�
-                    /*var jsonData = JsonConvert.SerializeObject(soDetailList);
-
-                    var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP");
-
-                    var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁
-                    if (obj.Success != 0)
-                    {
-                        throw new Exception("涓婁紶澶辫触" + obj.Message);
-                    }*/
-
-                    //娣诲姞鎿嶄綔鏃ュ織璁板綍
-                    var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍙栨秷鍒嗛厤", $"鍙栨秷鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
-                    Db.CommitTran();
-                }
-                catch (Exception e)
-                {
-                    Db.RollbackTran();
-                    throw new Exception(e.Message);
-                }
-                return true;
-            }
-            catch (Exception e)
-            {
-                throw new Exception("鍙栨秷鍒嗛厤澶辫触" + e.Message);
-            }
-        }
-
-        /// <summary>
-        /// 缁存姢鍑哄簱鍗曞娉ㄤ俊鎭�
-        /// </summary>
-        /// <param name="id"></param>
-        /// <param name="demo"></param>
-        /// <param name="userId"></param>
-        public void EditNoticeDemo(int id, string demo, int userId)
-        {
-            try
-            {
-                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.Id == id);
-                if (notice == null)
-                {
-                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
-                }
-                notice.Demo = demo + "".Trim();
-                notice.UpdateUser = userId;
-                notice.UpdateTime = DateTime.Now;
-
-                int i = Db.Updateable(notice).ExecuteCommand();
-                if (i > 0)
-                {
-                    //娣诲姞鎿嶄綔鏃ュ織
-                    new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕notice.SONo}鐨勫娉ㄤ俊鎭�", userId);
-                }
-            }
-            catch (Exception ex)
-            {
-                throw new Exception(ex.Message);
-            }
-        }
-
-        //鑾峰彇搴撳瓨鏄庣粏淇℃伅锛堝嚭搴撳崟鎵嬪姩鍒嗛厤閫夋嫨鏁版嵁婧愶級
-        public List<StockDetailDto> GetHandOutList(int detailId, string houseNo, string roadwayNo, string locateNo, string msg, string palletNo)
-        {
-            try
-            {
-                var detail = Db.Queryable<BllExportNoticeDetail>().First(d => d.Id == detailId);
-
-                #region 鍒ゆ柇鏉′欢
-
-                if (detail == null)
-                {
-                    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")
-                {
-                    throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!");
-                }
-                #endregion
-
-                Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
-                    .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo)
-                    .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo)
-                    .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo)
-                    .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo == palletNo)
-                    .AndIF(!string.IsNullOrWhiteSpace(msg),
-                        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"))
-                    .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
-
-                var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto
-                {
-                    Id = a.Id,
-                    SkuNo = a.SkuNo,
-                    SkuName = a.SkuName,
-                    Standard = a.Standard,
-                    LotNo = a.LotNo,
-                    LotText = a.LotText,
-                    SupplierLot = a.SupplierLot,
-                    Qty = a.Qty - a.LockQty - a.FrozenQty,
-                    LocatNo = a.LocatNo,
-                    RoadwayNo = a.RoadwayNo,
-                    PalletNo = a.PalletNo,
-                    Demo = a.Demo,
-                }).ToList();
-
-                return list;
-            }
-            catch (Exception e)
-            {
-                throw new Exception(e.Message);
-            }
-        }
-
-        //鎵嬪姩鍒嗛厤鍑哄簱鍗曟槑缁�
-        public void AddHandOutAllot(AddHandOutVm model, int userId)
-        {
-            try
-            {
-                #region 鍒ゆ柇鏉′欢
-                //鏁版嵁楠岃瘉
-                var detail = Db.Queryable<BllExportNoticeDetail>().First(a => a.IsDel == "0" && a.Id == model.Id);
-                if (detail == null)
-                {
-                    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);
-                if (notice == null)
-                {
-                    throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒");
-                }
-                if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
-                {
-                    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 allotList = new List<BllExportAllot>();
-                decimal outQtys = 0;
-                foreach (var st in model.StockList)
-                {
-                    var stock = stockList.First(a => a.Id == st.StockId);
-                    if (stock == null)
-                    {
-                        throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒");
-                    }
-                    if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty))     // 杈撳叆鐨勬暟閲� -  鎵樼洏涓婂彲鐢ㄧ殑鏁伴噺锛堟墭鐩樹笂鏁伴噺-閿佸畾鐨勬暟閲�-鍐荤粨鐨勬暟閲忥級
-                    {
-                        throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒");
-                    }
-
-                    var bl = allots.FirstOrDefault(m => m.StockId == st.StockId);
-                    if (bl == null)
-                    {
-                        //娣诲姞鍒嗛厤琛ㄤ俊鎭�
-                        var allot = new BllExportAllot
-                        {
-                            SONo = notice.SONo,
-                            WaveNo = "",
-                            SODetailNo = detail.Id,
-                            StockId = st.StockId,
-                            LotNo = stock.LotNo,
-                            LotText = stock.LotText,
-                            SupplierLot = stock.SupplierLot,
-                            SkuNo = stock.SkuNo,
-                            SkuName = stock.SkuName,
-                            Standard = stock.Standard,
-                            PalletNo = stock.PalletNo,
-                            IsBale = stock.IsBale,
-                            IsBelt = stock.IsBelt,
-                            Qty = st.Qty,
-                            CompleteQty = 0,
-                            Status = "0",
-                            LogisticsId = notice.LogisticsId,
-                            IsAdvance = "0",
-                            OutMode = "",//鍑哄簱鍙�
-
-                            CreateUser = userId,
-                            CreateTime = DateTime.Now
-                        };
-                        allotList.Add(allot);
-                    }
-                    else
-                    {
-                        bl.Qty += st.Qty;
-                        Db.Updateable(bl).ExecuteCommand();
-                    }
-                    
-                    //搴撳瓨鏄庣粏
-                    stock.LockQty += st.Qty;
-                    stock.Status = stock.LockQty == stock.Qty ? "2" : "1";
-
-                    //搴撳瓨鎬昏〃
-                    //stockz.LockQty += st.Qty;
-                    //Db.Updateable(stockz).ExecuteCommand();
-
-
-                    Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand();
-                    outQtys += st.Qty;
-                }
-                Db.Insertable(allotList).ExecuteCommand();
-                //淇敼鍗曟嵁鏄庣粏
-                detail.AllotQty += outQtys;
-                detail.UpdateUser = userId;
-                detail.UpdateTime = DateTime.Now;
-                if (detail.Status == "0")
-                {
-                    detail.Status = "1";
-                }
-
-                Db.Updateable(detail).ExecuteCommand();
-                var detailList = Db.Queryable<BllExportNoticeDetail>()
-                    .Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList();
-                //淇敼鍑哄簱鍗曠姸鎬� 
-                if (notice.Status == "0" || notice.Status == "1")
-                {
-                    decimal totalQty = 0;
-                    decimal totalAllotQty = 0;
-                    foreach (var item in detailList)
-                    {
-                        totalQty += item.Qty;
-                        totalAllotQty += Convert.ToInt32(item.AllotQty);
-                    }
-
-                    if (totalAllotQty >= totalQty)
-                    {
-                        notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
-                    }
-                    else if (totalAllotQty < totalQty && totalAllotQty > 0)
-                    {
-                        notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺  淇敼涓洪儴鍒嗗垎閰�
-                    }
-                    Db.Updateable(notice).ExecuteCommand();
-                }
-                //娣诲姞鎿嶄綔鏃ュ織璁板綍
-                var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍒嗛厤", $"鎵嬪姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}銆佺墿鏂欙細{detail.SkuNo}銆佹壒娆★細{detail.LotNo}鐨勫崟鎹俊鎭�", userId);
-
-                Db.CommitTran();
-
-            }
-            catch (Exception e)
-            {
-                Db.RollbackTran();
-                throw new Exception(e.Message);
-            }
-        }
-
-        #endregion
+        
 
         /// <summary>
         /// 鍒ゆ柇鍑哄簱鏄惁闇�瑕佹媶绠�

--
Gitblit v1.8.0