From 5408616fd72786b63cfe69a7426c3fb499b6962b Mon Sep 17 00:00:00 2001
From: bklLiudl <673013083@qq.com>
Date: 星期四, 17 十月 2024 18:49:04 +0800
Subject: [PATCH] Merge branch 'Liudl'

---
 Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs | 1287 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 1,141 insertions(+), 146 deletions(-)

diff --git a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
index 4f904b5..c8f8338 100644
--- a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
+++ b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -31,6 +31,368 @@
         {
         }
 
+        #region 鎺ュ彛鏂规硶
+
+        //缁戝畾鐗╂枡鎵樼洏
+        public void BindPalletStock(BoxPalletBindVm model, int userId)
+        {
+            try
+            {
+                #region 鍒ゆ柇
+
+                //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱澶�
+                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
+                if (stockDetail != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo))
+                    {
+                        throw new Exception("璇ユ墭鐩樺凡鏈夊簱瀛樹俊鎭紝璇锋牳瀹烇紒");
+                    }
+                    return;
+                }
+                if (model.Type != "0" && model.Type != "1")
+                {
+                    throw new Exception("鎵樼洏绫诲瀷閿欒");
+                }
+                if (string.IsNullOrEmpty(model.PalletNo))
+                {
+                    throw new Exception("鎵樼洏鍙蜂笉鍙负绌�!");
+                }
+                //鎵樼洏鏄惁瀛樺湪
+                var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
+                if (pallet == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鎵樼洏淇℃伅锛岃鏍稿疄锛�");
+                }
+                if (model.Detail.Count == 0)
+                {
+                    throw new Exception("鎵樼洏缁戝畾鏄庣粏淇℃伅涓虹┖锛岃鏍稿疄");
+                }
+                BllArrivalNotice notice = null;
+                BllArrivalNoticeDetail detail = null;
+                if (model.Type == "0")
+                {
+                    //0锛氭垚鍝佸叆搴� 1锛氶噰璐叆搴� 3锛氶��璐у叆搴� 4锛氳溅闂翠綑鏂欏叆搴� 5锛氬叾瀹冨叆搴� 6锛氫唬鍌ㄥ叆搴�
+                    if (string.IsNullOrEmpty(model.AsnNo))
+                    {
+                        throw new Exception("鍗曟嵁鍙蜂笉鍙负绌�!");
+                    }
+                    //if (model.AsnDetailNo == 0)
+                    //{
+                    //    throw new Exception("鍗曟嵁鏄庣粏涓嶅彲涓虹┖!");
+                    //}
+                    //鏍规嵁鍗曟嵁鍙疯幏鍙栧叆搴撳崟鎬诲崟
+                    notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo);
+                    //notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo && a.OrderCode == model.OrderCode);
+                    if (notice.Status != "0" && notice.Status != "1" && notice.Status != "2")
+                    {
+                        throw new Exception("璇ュ崟鎹凡鍏冲崟!");
+                    }
+                    if (notice.Type != "0")
+                    {
+                        throw new Exception("褰撳墠鍗曟嵁涓嶈兘鐢熶骇鎴愬搧鍏ュ簱锛岃鏍稿疄");
+                    }
+                    if (string.IsNullOrEmpty(model.LotNo))
+                    {
+                        throw new Exception("鎵规涓嶈兘涓虹┖!");
+                    }
+                    // 楠岃瘉鍏ュ簱鍗曟槑缁嗘槸鍚﹀瓨鍦�
+                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == notice.ASNNo && m.LotNo == model.LotNo && m.SkuNo == model.SkuNo);
+                    //detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailNo && m.ASNNo == model.AsnNo && m.LotNo == model.LotNo && m.SkuNo == model.SkuNo);
+                    if (detail == null)
+                    {
+                        throw new Exception("褰撳墠鐗╂枡鍙婃壒娆′笌鍗曟嵁鏃犲叧鑱旓紝璇锋牳瀹�!");
+                    }
+                }
+
+                #endregion
+
+                Db.BeginTran();
+
+                var comTime = DateTime.Now;
+
+                #region 鍖呰
+                var package = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0");
+                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == model.SkuNo);
+                SysPackag pack = null;
+                if (model.Type == "0")
+                {
+                    pack = package.First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);     
+                }
+                else
+                {
+                    pack = package.First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);     
+                }
+
+                var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
+                var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
+
+                if (pack == null)
+                {
+                    throw new Exception("鑾峰彇鐗╂枡鍖呰澶辫触锛岃鏍稿疄!");
+                }
+                if (pack.L5Num.HasValue)
+                {
+                    pNum = (int)pack.L5Num;
+                    bNum = (int)pack.L4Num;
+                }
+                else if (pack.L4Num.HasValue)
+                {
+                    pNum = (int)pack.L4Num;
+                    bNum = (int)pack.L3Num;
+                }
+                else if (pack.L3Num.HasValue)
+                {
+                    pNum = (int)pack.L3Num;
+                    bNum = (int)pack.L2Num;
+                }
+                else if (pack.L2Num.HasValue)
+                {
+                    pNum = (int)pack.L2Num;
+                    bNum = (int)pack.L1Num;
+                }
+                else if (pack.L1Num.HasValue)
+                {
+                    pNum = (int)pack.L1Num;
+                    bNum = (int)pack.L1Num;
+                }
+                if (pNum == 0 || bNum == 0)
+                {
+                    throw new Exception($"缁戝畾澶辫触锛寋detail.SkuNo}鐗╁搧鍖呰鏈壘鍒帮紒");
+                }
+
+                #endregion
+
+                #region 楠岃瘉鏄惁鍏佽绔嬪簱鍚屾墭鐩樹笉鍚岀墿鏂欏叆搴撴垨鍚屾墭鐩樺悓鐗╂枡涓嶅悓鎵规鍏ュ簱
+                var list = model.Detail.GroupBy(m => new { m.SkuNo, m.LotNo }).ToList();
+
+                if (list.Count >= 2)
+                {
+                    var funSetting = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetNo == "Fun045");
+                    if (funSetting == null || funSetting.IsEnable == "OFF")
+                    {
+                        throw new Exception($"涓嶅厑璁哥珛搴撳悓鎵樼洏涓嶅悓鐗╂枡鍏ュ簱鎴栧悓鎵樼洏涓嶅悓鎵规鍏ュ簱锛�");
+                    }
+                }
+
+                #endregion
+
+                //鍒ゆ柇鎵樼洏缁戝畾淇℃伅涓槸鍚︽湁
+                var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNDetailNo == detail.Id && m.PalletNo == model.PalletNo && m.Status != "2");
+                var bindId = 0;
+                if (bind == null)
+                {
+                    bind = new BllPalletBind
+                    {
+                        ASNNo = notice.ASNNo,
+                        ASNDetailNo = detail.Id,
+                        PalletNo = model.PalletNo,
+                        PalletNo2 = "",
+                        PalletNo3 = "",
+                        Qty = model.Qty,
+                        FullQty = pNum,
+                        Status = "0",//绛夊緟鎵ц
+                        Type = model.Type, //鎵樼洏绫诲瀷  0鐗╂枡鎵�  1绌烘墭鐩樻墭
+                        LotNo = model.LotNo,
+                        LotText = model.LotText,
+                        SupplierLot = model.SupplierLot,
+                        InspectMark = "0",      //鏄惁鍙栨牱鎵樼洏 
+                        //SamplingQty = 0,     //鍙栨牱鏁伴噺  鍚庢湡涓氬姟寮�鍙戞椂 鎺ュ彛浼犲�奸渶娣诲姞瀵瑰簲瀛楁鍒ゆ柇
+                        BitPalletMark = model.Qty == pNum ? "0" : "1",
+                        IsBale = "0",
+                        IsBelt = "0",
+                        CreateUser = userId,
+
+                    };
+                    if (bind.FullQty < bind.Qty)
+                    {
+                        throw new Exception("鎵樼洏缁戝畾鏁伴噺宸茶秴鍑鸿鐗╂枡鍖呰鏁伴噺");
+                    }
+                    // 鎻掑叆鎵樼洏缁戝畾琛�
+                    bindId = Db.Insertable(bind).ExecuteReturnIdentity();
+                }
+                else
+                {
+                    throw new Exception("缁勭洏淇℃伅閲嶅");
+                }
+
+
+                #region 绠辩爜淇℃伅 
+                decimal factQty = 0.00m;//鎵樼洏鎬绘暟閲�
+
+                var boxInfoList = new List<BllBoxInfo>();
+                if (model.Type == "1")//鎵樼洏鎵�
+                {
+                    if (model.Detail.Count > 1)
+                    {
+                        throw new Exception("绌烘墭鐩樼粦瀹氫俊鎭腑鏄庣粏閿欒锛岃秴杩囦簡涓ゆ潯鏄庣粏");
+                    }
+                    //娣诲姞绠辩爜淇℃伅/绌烘墭鐩樻槑缁嗕俊鎭�
+                    foreach (var box in model.Detail)
+                    {
+                        var boxInfo = new BllBoxInfo()
+                        {
+                            ASNNo = notice.ASNNo,
+                            ASNDetailNo = detail.Id,
+                            OrderCode = box.OrderCode,
+                            BindNo = bindId,
+                            BoxNo = box.BoxNo,
+                            BoxNo2 = box.BoxNo2,
+                            BoxNo3 = box.BoxNo3,
+                            PalletNo = model.PalletNo,
+                            Qty = box.Qty,
+                            FullQty = box.FullQty,
+                            Status = "1",
+                            SkuNo = box.SkuNo,
+                            SkuName = box.SkuName,
+                            LotNo = box.LotNo,
+                            LotText = box.LotText,
+                            SupplierLot = model.SupplierLot,
+                            ProductionTime = box.ProductionTime,
+                            ExpirationTime = box.ExpirationTime,
+                            CompleteTime = comTime,
+                            InspectMark = box.InspectMark,
+                            BitBoxMark = box.BitBoxMark,
+                            InspectStatus = box.InspectStatus,
+                            Origin = "WCS",
+                            Standard = box.Standard,
+                            PackageStandard = box.PackageStandard,
+                            StoreTime = box.StoreTime,
+                            CreateUser = userId,
+                            CreateTime = comTime,
+                        };
+
+                        boxInfoList.Add(boxInfo);
+                        factQty += box.Qty;
+                    }
+                    if (factQty > pNum)
+                    {
+                        throw new Exception($"缁戝畾澶辫触锛屾墭鐩樼粦瀹氭暟閲忓ぇ浜庤鐗╁搧鍖呰鏁伴噺锛�");
+                    }
+                }
+                else if (model.Type == "0")//鐗╂枡鎵�
+                {
+                    //if (model.Detail.Count(m => m.OrderCode != detail.OrderDetailCode) > 0)
+                    //{
+                    //    throw new Exception($"鎵樼洏缁戝畾鏄庣粏涓紝鍚湁绠辩爜鐢熶骇宸ュ崟涓嶄竴鑷�");
+                    //}
+                    if (model.Detail.Count(m => m.SkuNo != model.SkuNo || m.LotNo != model.LotNo) > 0)
+                    {
+                        throw new Exception($"鎵樼洏缁戝畾鏄庣粏涓紝鍚湁绠辩爜鐗╂枡鎴栨壒娆′笉涓�鑷�");
+                    }
+                    var boxGroup = model.Detail.GroupBy(m => m.BoxNo).ToList();
+                    foreach (var g in boxGroup)
+                    {
+                        decimal boxFullQty = 0;//绠卞唴鎬绘暟閲�
+                        foreach (var box in g)
+                        {
+                            factQty += box.Qty;
+                            boxFullQty += box.Qty;
+                            var boxInfo = new BllBoxInfo()
+                            {
+                                ASNNo = detail.ASNNo,
+                                ASNDetailNo = detail.Id,
+                                OrderCode = box.OrderCode,
+                                BindNo = bindId,
+                                BoxNo = box.BoxNo,
+                                BoxNo2 = box.BoxNo2,
+                                BoxNo3 = box.BoxNo3,
+                                PalletNo = model.PalletNo,
+                                Qty = box.Qty,
+                                FullQty = box.FullQty,
+                                Status = "1",//宸茬粍鎵�
+                                SkuNo = box.SkuNo,
+                                SkuName = box.SkuName,
+                                LotNo = box.LotNo,
+                                LotText = box.LotText,
+                                SupplierLot = model.SupplierLot,
+                                ProductionTime = box.ProductionTime,
+                                ExpirationTime = box.ExpirationTime,
+                                CompleteTime = comTime,
+                                InspectMark = box.InspectMark,
+                                BitBoxMark = box.BitBoxMark,
+                                InspectStatus = box.InspectStatus,
+                                Origin = "WCS",
+                                Standard = box.Standard,
+                                PackageStandard = box.PackageStandard,
+                                StoreTime = box.StoreTime,
+                                QtyCount = (int)box.QtyCount,
+                                QtyOrd = (int)box.QtyOrd,
+                                CreateUser = userId,
+                                CreateTime = comTime,
+                            };
+                            boxInfoList.Add(boxInfo);
+
+                        }
+                        if (boxFullQty > bNum)
+                        {
+                            throw new Exception($"缁戝畾澶辫触锛寋g.Key}绠辩爜缁戝畾鏁伴噺澶т簬璇ョ墿鍝佸寘瑁呮暟閲忥紒");
+                        }
+                    }
+                }
+
+                Db.Insertable(boxInfoList).ExecuteCommand();
+                #endregion
+
+
+                if (factQty != bind.Qty)
+                {
+                    throw new Exception("绠辩爜鏄庣粏鎬绘暟閲忎笉鍚屼簬鎵樼洏鎬绘暟閲忥紝璇锋牳瀹�");
+                }
+
+                #region 鍏ュ簱鍗曞強鏄庣粏
+                if (model.Type == "0")
+                {
+                    detail.FactQty += factQty;//宸茬粍鏁伴噺
+                    //detail.CompleteQty += factQty;//瀹屾垚鏁伴噺
+
+                    detail.Status = "1";//0锛氱瓑寰呮墽琛� 1锛氭鍦ㄦ墽琛� 2锛氭墽琛屽畬鎴�
+                    if (detail.CompleteQty >= detail.Qty)
+                    {
+                        detail.Status = "2";
+                        detail.CompleteTime = comTime;
+                    }
+                    detail.UpdateUser = userId;
+                    detail.UpdateTime = comTime;
+                    //鏇存柊鍏ュ簱鍗曟槑缁�
+                    Db.Updateable(detail).ExecuteCommand();
+
+                    notice.UpdateUser = userId;
+                    notice.UpdateTime = comTime;
+                    if (notice.Status == "0")
+                    {
+                        notice.Status = "1";
+                    }
+                    var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.ASNNo == detail.ASNNo && m.Status != "2");
+                    if (asnDetailNum == 0)
+                    {
+                        notice.Status = "2";
+                        notice.CompleteTime = comTime;//瀹屾垚鏃堕棿
+                    }
+                    //鏇存柊鍏ュ簱鍗�
+                    Db.Updateable(notice).ExecuteCommand();
+                }
+
+                #endregion
+
+                // 鏇存敼鎵樼洏浣跨敤鐘舵��
+                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
+                //娣诲姞鎵樼洏璁板綍琛ㄦ暟鎹�
+                sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{notice.ASNNo}','缁勭洏','0',getDate(),{userId},NULL,NULL);";
+                Db.Ado.ExecuteCommand(sqlStr);
+                new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "鎵樼洏缁戝畾", notice.ASNNo, "娣诲姞", $"娣诲姞浜嗘墭鐩樼爜涓猴細{model.PalletNo}鐨勭粍鐩樹俊鎭�", userId);
+
+                Db.CommitTran();
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
+
+        #endregion
+
         #region 鎵樼洏缁戝畾
         public List<PalletBindDto> GetPalletBindList(PalletBindVm model, out int count)
         {
@@ -120,7 +482,7 @@
                   .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim()))
                   .AndIF(!string.IsNullOrWhiteSpace(model.SkuNo), it => it.SkuNo.Contains(model.SkuNo.Trim()))
                   .AndIF(!string.IsNullOrWhiteSpace(model.SkuName), it => it.SkuName.Contains(model.SkuName.Trim()))
-                  .AndIF((model.BindNo != 0 && !string.IsNullOrWhiteSpace(model.BindNo.ToString())),it=>it.BindNo == model.BindNo)
+                  .AndIF((model.BindNo != 0 && !string.IsNullOrWhiteSpace(model.BindNo.ToString())), it => it.BindNo == model.BindNo)
                   .And(m => m.IsDel == "0")
                   .ToExpression();
 
@@ -371,7 +733,7 @@
                 }
                 Db.BeginTran();
                 var time = DateTime.Now;
-                var qty = 0;
+                decimal qty = 0;
                 foreach (var item in boxInfos)
                 {
                     //鍒犻櫎瑙g粦绠辨敮淇℃伅
@@ -563,18 +925,23 @@
 
         #region 鎸囧畾鍌ㄤ綅
         //鎸囧畾鍌ㄤ綅鏁版嵁婧愶紙姝e父鐨勭┖鍌ㄤ綅锛�
-        public List<LocatDto> GetLocateList(string houseNo, string roadwayNo, string row, string column, string layer, string locateNo, string BindId, int page, int limit, out int count)
+        public List<LocatDto> GetLocateList(string houseNo, string roadwayNo, string row, string column, string layer,
+            string locateNo, string BindId, int page, int limit, out int count)
         {
             try
             {
                 //鑾峰彇鎵樼洏缁戝畾
-                var bindASNDetailNo = Db.Queryable<BllPalletBind>().Where(a => a.IsDel == "0" && a.Status == "0" && a.Id == int.Parse(BindId)).Select(a => a.ASNDetailNo).First();
+                var bindASNDetailNo = Db.Queryable<BllPalletBind>().Where(a => a.IsDel == "0" && a.Status == "0"
+                && a.Id == int.Parse(BindId)).Select(a => a.ASNDetailNo).First();
                 //鑾峰彇鍗曟嵁鏄庣粏
-                var noticeDetailSkuNo = Db.Queryable<BllArrivalNoticeDetail>().Where(a => a.Id == bindASNDetailNo && a.IsDel == "0").Select(a => a.SkuNo).First();
+                var noticeDetailSkuNo = Db.Queryable<BllArrivalNoticeDetail>().Where(a => a.Id == bindASNDetailNo
+                && a.IsDel == "0").Select(a => a.SkuNo).First();
                 //鑾峰彇鐗╂枡
-                var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == noticeDetailSkuNo).Select(a => a.CategoryNo).First();
+                var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == noticeDetailSkuNo)
+                    .Select(a => a.CategoryNo).First();
                 //鑾峰彇鐗╂枡瀵瑰簲鍖哄煙
-                var categoryAreaNo = Db.Queryable<SysMaterialCategory>().Where(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo).Select(a => a.AreaNo).First();
+                var categoryAreaNo = Db.Queryable<SysMaterialCategory>().Where(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo)
+                    .Select(a => a.AreaNo).First();
 
                 Expression<Func<SysStorageLocat, bool>> item = Expressionable.Create<SysStorageLocat>()
                    .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo)
@@ -586,7 +953,7 @@
                    .And(m => m.AreaNo.Contains(categoryAreaNo))
                    .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
                 var total = 0;
-                var list = Db.Queryable<SysStorageLocat>().Where(item).OrderByDescending(a=>a.Depth).OrderBy(a=>a.Column)
+                var list = Db.Queryable<SysStorageLocat>().Where(item).OrderByDescending(a => a.Depth).OrderBy(a => a.Column)
                     .Select(a => new LocatDto()
                     {
                         Id = a.Id,
@@ -595,6 +962,7 @@
                         Row = a.Row,
                         Column = a.Column,
                         Layer = a.Layer,
+                        Depth = a.Depth,
                         Status = a.Status
                     }).ToOffsetPage(page, limit, ref total);
                 count = total;
@@ -634,7 +1002,7 @@
                     throw new Exception("璇ュ偍浣嶇姸鎬佷笉鏄┖鍌ㄤ綅鎴栨爣蹇椾笉鏄甯哥殑");
                 }
 
-                
+
 
                 //鍒ゆ柇褰撳墠鎵樼洏鏄惁瀛樺湪缁戝畾淇℃伅
                 if (!string.IsNullOrWhiteSpace(bind.LocatNo))
@@ -755,6 +1123,7 @@
         {
             try
             {
+                #region 楠岃瘉鎵樼洏鍚堟硶鎬�
                 //楠岃瘉鎵樼洏鏉$爜鏄惁涓虹┖
                 if (string.IsNullOrEmpty(palletNo))
                 {
@@ -771,17 +1140,17 @@
                     throw new Exception("骞冲簱璇蜂娇鐢≒DA鎵嬫寔杩涜骞冲簱鍏ュ簱");
                 }
 
-                OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠�
-                var isHaveLocateNo = false; //鎵樼洏缁戝畾淇℃伅涓槸鍚﹀凡鏈夋寚瀹氬偍浣�
-
                 var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//鎵樼洏淇℃伅
-
                 //鍒ゆ柇鎵樼洏鏉$爜鏄惁鏈夋晥
                 if (stock == null)
                 {
                     throw new Exception("鎵樼洏鏉$爜涓嶅彈WMS绠$悊锛屼笉鍙叆搴擄紒");
                 }
+                #endregion
 
+
+                OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠�
+                var isHaveLocateNo = false; //  鏄惁宸叉湁鎸囧畾鍌ㄤ綅
                 #region 
 
                 //鏌ヨ鎵樼洏缁戝畾淇℃伅(鐘舵�佷负绛夊緟鍏ュ簱鐨�)
@@ -816,6 +1185,11 @@
                             OutMode = "",  //鐩爣鍦板潃
                             Order = 1
                         };
+                        if (beingTask.IsSuccess == 0)
+                        {
+                            beingTask.IsSuccess = 1;
+                            Db.Updateable(beingTask).ExecuteCommand();
+                        }
                         return comDto;
                     }
                     if (haveLocate != null)
@@ -823,6 +1197,8 @@
                         isHaveLocateNo = true; //宸叉湁鎸囧畾鍌ㄤ綅
                     }
 
+
+                    //  楠岃瘉鏄惁鍏宠仈鍗曟嵁锛岃幏鍙栨墭鐩樹笂瀛樻斁鐨勭墿鏂�
                     if (palletBindList.First().Type == "0") //鐗╂枡鎵樺叆搴�
                     {
                         //鍒ゆ柇鏄惁缁戝畾鍗曟嵁鍙婂崟鎹姸鎬佹槸鍚︽甯�
@@ -833,7 +1209,7 @@
                             {
                                 throw new Exception("鎵樼洏瀛樺湪鐗╂枡鏈粦瀹氬叆搴撳崟锛屼笉鍙叆搴擄紒");
                             }
-                            if (notice.Status == "3")
+                            if (notice.Status == "3" || notice.Status == "4")
                             {
                                 throw new Exception($"鍏ュ簱鍗晎item.ASNNo}宸插叧闂紝涓嶅彲鍏ュ簱锛�");
                             }
@@ -864,30 +1240,52 @@
                     }
                     skuNo = stockDetail.First().SkuNo;
 
-                    //鑾峰彇瀵瑰簲鍥炲簱瑙勫垯
-                    var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetName == "鎵樼洏鍥炲簱楠岃瘉" && a.IsEnable == "NO");
-                    #region 鎵樼洏鍥炲簱瑙勫垯
+                    #region 鍒ゆ柇浠诲姟鏄惁宸茬粡瀛樺湪锛岃嫢瀛樺湪鐩存帴杩斿洖浠诲姟锛�
+                    var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
+                    && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
+                    if (beingTask != null)
+                    {
+                        comDto = new OutCommandDto()
+                        {
+                            PalletNo = palletNo,//鎵樼洏鍙�
+                            StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾
+                            StartLocate = "", // 璧峰浣嶇疆
+                            EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆
+                            EndRoadway = beingTask.EndRoadway,  //  鐩爣宸烽亾
+                            TaskNo = beingTask.TaskNo, // 浠诲姟鍙�
+                            TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
+                            OutMode = "",  //鐩爣鍦板潃
+                            Order = 1
+                        };
+                        if (beingTask.IsSuccess == 0)
+                        {
+                            beingTask.IsSuccess = 1;
+                            beingTask.Status = "1";
+                            Db.Updateable(beingTask).ExecuteCommand();
+                        }
 
+                        return comDto;
+                    }
+                    #endregion
+
+                    //鑾峰彇瀵瑰簲鍥炲簱瑙勫垯
+                    var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetNo == "Fun041" && a.IsEnable == "NO");
+                    #region 鎵樼洏鍥炲簱瑙勫垯
                     if (function != null)
                     {
                         //鎷h揣瀹屾垚鍚庡厑璁告墭鐩樺洖搴�
-                        if (function.SetValue == "CompletePick")
-                        {
-                            var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.LotNo == stockDetail[0].LotNo && a.PalletNo == palletNo && a.SkuNo == stockDetail[0].SkuNo);
+                        var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.LotNo == stockDetail[0].LotNo && a.PalletNo == palletNo && a.SkuNo == stockDetail[0].SkuNo);
 
-                            //楠岃瘉鎷h揣鏄庣粏鏄惁瀛樺湪
-                            if (allot != null)
+                        //楠岃瘉鎷h揣鏄庣粏鏄惁瀛樺湪
+                        if (allot != null)
+                        {
+                            //楠岃瘉褰撳墠鎵樼洏鎷h揣淇℃伅鏄惁宸插畬鎴�
+                            if (allot.Status != "5")
                             {
-                                //楠岃瘉褰撳墠鎵樼洏鎷h揣淇℃伅鏄惁宸插畬鎴�
-                                if (allot.Status != "5")
-                                {
-                                    throw new Exception("褰撳墠鎵樼洏鎷h揣淇℃伅鏈畬鎴愶紝璇峰畬鎴愬悗鍥炲簱锛�");
-                                }
+                                throw new Exception("褰撳墠鎵樼洏鎷h揣淇℃伅鏈畬鎴愶紝璇峰畬鎴愬悗鍥炲簱锛�");
                             }
                         }
                     }
-
-
                     #endregion
                 }
 
@@ -895,6 +1293,7 @@
 
                 SysStorageLocat locate;
 
+                #region 鏍规嵁sku纭鍖哄煙鍒掑垎
                 var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo);
                 if (sku == null)
                 {
@@ -936,13 +1335,16 @@
                             break;
                     }
                 }
-                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo))
-                    .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
+
+                var road = Db.Queryable<SysStorageRoadway>().Where(m => m.IsDel == "0" && m.Status == "0").Select(m => m.RoadwayNo).ToList();
+
+                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) && road.Contains(m.RoadwayNo)).GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
 
                 SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m => m.IsDel == "0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰�
+                #endregion
+
 
                 #region 纭畾宸烽亾鎺掑簭
-
                 List<string> roadList2 = new List<string>();
                 List<string> roadSmall = new List<string>();
                 List<string> roadLarge = new List<string>();
@@ -955,7 +1357,7 @@
                         {
                             continue;
                         }
-                        //濡傛灉缁撴灉涓�0锛屽垯璇存槑涓や釜瀛楃涓茬浉绛夛紱
+                        //濡傛灉缁撴灉涓�0锛屽垯璇存槑涓や釜瀛楃涓茬浉绛夛紱  ABC  BCE
                         //濡傛灉缁撴灉灏忎簬0锛屽垯璇存槑绗竴涓瓧绗︿覆灏忎簬绗簩涓瓧绗︿覆锛�
                         //濡傛灉缁撴灉澶т簬0锛屽垯璇存槑绗竴涓瓧绗︿覆澶т簬绗簩涓瓧绗︿覆銆�
                         var bol = String.CompareOrdinal(r, useLog.RoadwayNo);
@@ -970,9 +1372,13 @@
                     }
                     roadList2.AddRange(roadLarge);
                     roadList2.AddRange(roadSmall);
+                    roadList = roadList2;
                 }
-
-                roadList = roadList2;
+                
+                if (roadList.Count == 0)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍙兘浣跨敤鐨勫贩閬�");
+                }
                 #endregion
 
 
@@ -999,14 +1405,14 @@
                             roadNo = l;
                         }
                         //褰撳墠宸锋湁浣嶇疆鍒欓��鍑�
-                        if (roadNo != null)
+                        if (!string.IsNullOrWhiteSpace(roadNo))
                         {
                             break;
                         }
                     }
                     //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ
 
-                    if (roadNo == null)
+                    if (string.IsNullOrWhiteSpace(roadNo))
                     {
                         if (useLog != null)
                         {
@@ -1039,7 +1445,7 @@
                             roadNo = item;
                         }
                         //褰撳墠宸锋湁浣嶇疆鍒欓��鍑�
-                        if (roadNo != null)
+                        if (!string.IsNullOrWhiteSpace(roadNo))
                         {
                             break;
                         }
@@ -1054,31 +1460,72 @@
                 Db.BeginTran();
                 try
                 {
-                    if (roadNo != null)
+                    //娣诲姞宸烽亾浣跨敤璁板綍
+                    var log = new SysRoadwayUseLog
                     {
-                        //娣诲姞宸烽亾浣跨敤璁板綍
-                        var log = new SysRoadwayUseLog
-                        {
-                            RoadwayNo = roadNo,
-                            WareHouseNo = houseNo,
-                            Row = 0,
-                            Column = 0,
-                            Layer = 0,
-                        };
-                        Db.Insertable(log).ExecuteCommand();
-                    }
+                        RoadwayNo = roadNo,
+                        WareHouseNo = houseNo,
+                        Row = 0,
+                        Column = 0,
+                        Layer = 0,
+                    };
+                    Db.Insertable(log).ExecuteCommand();
 
+                    // 娣诲姞鍏ュ簱鏃ュ織璁板綍
+                    var taskNo = new Common().GetMaxNo("TK");
+                    var exTask = new LogTask    //鍏ュ簱浠诲姟
+                    {
+                        TaskNo = taskNo,
+                        Sender = "WMS",
+                        Receiver = "WCS",
+                        IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                        SendDate = DateTime.Now,  //鍙戦�佹椂闂�
+                        BackDate = DateTime.Now,  //杩斿洖鏃堕棿
+                        StartRoadway = "",            // 璧峰宸烽亾
+                        StartLocat = "",//璧峰浣嶇疆
+                        EndLocat = "",//鐩爣浣嶇疆
+                        EndRoadway = roadNo,  // 鐩爣宸烽亾
+                        PalletNo = palletNo,//鎵樼洏鐮�
+                        IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                        IsCancel = 1,//鏄惁鍙彇娑�
+                        IsFinish = 1,//鏄惁鍙畬鎴�
+                        Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                        Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                        OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                        Msg = "鍏ュ簱鍙e埌=>>" + roadNo + "宸烽亾鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
+
+                    };
+                    Db.Insertable(exTask).ExecuteCommand();
+
+                    //// 娣诲姞鎵樼洏缁戝畾琛ㄦ墭鐩樺叆搴撲换鍔″彿  liudl
+                    //if (palletBindList.Count < 1)
+                    //{
+                    //    foreach (DataStockDetail stockModel in stockDetail)
+                    //    {
+                    //        var bindModel = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Status == "2"
+                    //        && m.PalletNo == stockModel.PalletNo && m.ASNNo == stockModel.ASNNo && m.ASNDetailNo == stockModel.ASNDetailNo);
+                    //        if (bindModel != null && string.IsNullOrWhiteSpace(bindModel.TaskNo))
+                    //        {
+                    //            bindModel.TaskNo = taskNo;
+                    //            bindModel.WareHouseNo = houseNo;
+                    //            bindModel.RoadwayNo = roadNo;
+                    //            Db.Updateable(bindModel).ExecuteCommand();
+                    //        }
+                    //    }
+                    //}
                     if (palletBindList.Count >= 1)
                     {
                         foreach (var item in palletBindList)
                         {
                             item.WareHouseNo = houseNo;
                             item.RoadwayNo = roadNo;
-                            item.TaskNo = "";
+                            item.TaskNo = taskNo;
+                            item.Status = "1";
                         }
                         Db.Updateable(palletBindList).ExecuteCommand();
                     }
                     Db.CommitTran();
+
                     comDto = new OutCommandDto()
                     {
                         PalletNo = palletNo,//鎵樼洏鍙�
@@ -1086,12 +1533,291 @@
                         StartLocate = "", // 璧峰浣嶇疆
                         EndLocate = "", // 鐩爣浣嶇疆 
                         EndRoadway = roadNo,   // 鐩爣宸烽亾
-                        TaskNo = "", // 浠诲姟鍙�
+                        TaskNo = taskNo, // 浠诲姟鍙�
+                        TaskType = "0",// 浠诲姟绫诲瀷:鍏ュ簱浠诲姟
+                        OutMode = "",  //鐩爣鍦板潃
+                        Order = 1
+                    };
+                }
+                catch (Exception ex)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(ex.Message);
+                }
+                #endregion
+
+                return comDto;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+        // 鐢宠宸烽亾 鍙傝妯″紡
+        public OutCommandDto RequestRoadWayModel(string palletNo, string houseNo)
+        {
+            try
+            {
+                #region 楠岃瘉鎵樼洏鍚堟硶鎬�
+                //楠岃瘉鎵樼洏鏉$爜鏄惁涓虹┖
+                if (string.IsNullOrEmpty(palletNo))
+                {
+                    throw new Exception("璇疯緭鍏ヨ鐢宠鐨勬墭鐩樻潯鐮�");
+                }
+                //楠岃瘉鎵�灞炰粨搴撴槸鍚︿负绌�
+                if (string.IsNullOrEmpty(houseNo))
+                {
+                    throw new Exception("璇烽�夋嫨鎵�灞炰粨搴�");
+                }
+                //楠岃瘉鏄惁涓哄钩搴撳叆搴�
+                if (houseNo == "W02")
+                {
+                    throw new Exception("骞冲簱璇蜂娇鐢≒DA鎵嬫寔杩涜骞冲簱鍏ュ簱");
+                }
+
+                //var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//鎵樼洏淇℃伅
+                ////鍒ゆ柇鎵樼洏鏉$爜鏄惁鏈夋晥
+                //if (stock == null)
+                //{
+                //    throw new Exception("鎵樼洏鏉$爜涓嶅彈WMS绠$悊锛屼笉鍙叆搴擄紒");
+                //}
+                #endregion
+
+
+                OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠�
+                #region 
+
+                #region 鍒ゆ柇浠诲姟鏄惁宸茬粡瀛樺湪锛岃嫢瀛樺湪鐩存帴杩斿洖浠诲姟锛�
+                var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
+                && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
+                if (beingTask != null)
+                {
+                    comDto = new OutCommandDto()
+                    {
+                        PalletNo = palletNo,//鎵樼洏鍙�
+                        StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾
+                        StartLocate = "", // 璧峰浣嶇疆
+                        EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆
+                        EndRoadway = beingTask.EndRoadway,  //  鐩爣宸烽亾
+                        TaskNo = beingTask.TaskNo, // 浠诲姟鍙�
                         TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
                         OutMode = "",  //鐩爣鍦板潃
                         Order = 1
                     };
+                    if (beingTask.IsSuccess == 0)
+                    {
+                        beingTask.IsSuccess = 1;
+                        beingTask.Status = "1";
+                        Db.Updateable(beingTask).ExecuteCommand();
+                    }
 
+                    return comDto;
+                }
+                #endregion
+
+
+
+                var areaNoStr = "A03";
+                var allotLocate = new AllotLocation();
+                
+                #region 鏍规嵁sku纭鍖哄煙鍒掑垎
+                
+                var laneAllot = 0; //鍌ㄤ綅璺冲贩鍒嗛厤 0:璺崇潃鍒嗛厤(涓�涓竴涓垎閰�)1:宸烽亾鎸夌収浼樺厛绾у垎閰嶏紝鍚屼紭鍏堢骇椤哄簭鍒嗛厤(涓�涓贩閬撴弧浜嗗啀鍒嗛厤涓嬩竴涓殑宸烽亾鍌ㄤ綅)
+                var funSet3 = Db.Queryable<SysFunSetting>().First(m => m.IsDel == "0" && m.FunSetName == "鍌ㄤ綅璺冲贩鍒嗛厤" && m.IsEnable == "NO");
+                if (funSet3 != null)
+                {
+                    switch (funSet3.SetValue)
+                    {
+                        case "JumpLaneAllot":
+                            laneAllot = 0;//绔嬪簱鍌ㄤ綅鍒嗛厤 宸烽亾鍚屼紭鍏堢骇宸烽亾璺崇潃鍒嗛厤(涓�涓竴涓垎閰�)
+                            break;
+                        case "RankLaneAllot":
+                            laneAllot = 1;//绔嬪簱鍌ㄤ綅鍒嗛厤 宸烽亾鎸夌収浼樺厛绾у垎閰嶏紝鍚屼紭鍏堢骇椤哄簭鍒嗛厤(涓�涓贩閬撴弧浜嗗啀鍒嗛厤涓嬩竴涓殑宸烽亾鍌ㄤ綅)
+                            break;
+                        default:
+                            laneAllot = 1;// 榛樿 璺崇潃鍒嗛厤
+                            break;
+                    }
+                }
+                //鍚敤鐨勫贩閬撻泦鍚�
+                var road = Db.Queryable<SysStorageRoadway>().Where(m => m.IsDel == "0" && m.Status == "0").Select(m => m.RoadwayNo).ToList();
+                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && m.AreaNo == areaNoStr && road.Contains(m.RoadwayNo))
+                    .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
+
+                SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m => m.IsDel == "0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰�
+                #endregion
+
+
+                #region 纭畾宸烽亾鎺掑簭
+                List<string> roadList2 = new List<string>();
+                List<string> roadSmall = new List<string>();
+                List<string> roadLarge = new List<string>();
+                if (useLog != null)
+                {
+                    roadList2.Add(useLog.RoadwayNo);
+                    foreach (var r in roadList)
+                    {
+                        if (r == useLog.RoadwayNo)
+                        {
+                            continue;
+                        }
+                        //濡傛灉缁撴灉涓�0锛屽垯璇存槑涓や釜瀛楃涓茬浉绛夛紱  ABC  BCE
+                        //濡傛灉缁撴灉灏忎簬0锛屽垯璇存槑绗竴涓瓧绗︿覆灏忎簬绗簩涓瓧绗︿覆锛�
+                        //濡傛灉缁撴灉澶т簬0锛屽垯璇存槑绗竴涓瓧绗︿覆澶т簬绗簩涓瓧绗︿覆銆�
+                        var bol = String.CompareOrdinal(r, useLog.RoadwayNo);
+                        if (bol < 0)
+                        {
+                            roadSmall.Add(r);
+                        }
+                        if (bol > 0)
+                        {
+                            roadLarge.Add(r);
+                        }
+                    }
+                    roadList2.AddRange(roadLarge);
+                    roadList2.AddRange(roadSmall);
+                    roadList = roadList2;
+                }
+
+                if (roadList.Count == 0)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍙兘浣跨敤鐨勫贩閬�");
+                }
+                #endregion
+
+
+                var roadNo = "";
+                if (laneAllot == 0)//璺冲贩閬撳钩鍧囧垎閰�
+                {
+                    //鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅
+                    foreach (var l in roadList)
+                    {
+                        //濡傛灉涓婃鏄綋鍓嶅贩閬撳垯璺冲嚭
+                        if (useLog != null && l == useLog.RoadwayNo)
+                        {
+                            continue;
+                        }
+
+                        var locateCount = Db.Queryable<SysStorageLocat>()
+                            .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == l).Count();
+
+                        var taskNum = Db.Queryable<LogTask>()
+                            .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l)
+                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+                        if (locateCount - taskNum > 0)
+                        {
+                            roadNo = l;
+                        }
+                        //褰撳墠宸锋湁浣嶇疆鍒欓��鍑�
+                        if (!string.IsNullOrWhiteSpace(roadNo))
+                        {
+                            break;
+                        }
+                    }
+                    //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ
+
+                    if (string.IsNullOrWhiteSpace(roadNo))
+                    {
+                        if (useLog != null)
+                        {
+                            var locateCount = Db.Queryable<SysStorageLocat>()
+                                .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == useLog.RoadwayNo).Count();
+
+                            var taskNum = Db.Queryable<LogTask>()
+                                .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == useLog.RoadwayNo)
+                                .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+                            if (locateCount - taskNum > 0)
+                            {
+                                roadNo = useLog.RoadwayNo;
+                            }
+                        }
+                    }
+                }
+                else//鎸夌収宸烽亾浼樺厛绾у垎閰�
+                {
+                    roadList = Db.Queryable<SysStorageRoadway>().Where(m=> roadList.Contains(m.RoadwayNo)).OrderBy(m => new {m.Priority ,m.RoadwayNo}).Select(m=>m.RoadwayNo).ToList();
+                    foreach (var item in roadList)
+                    {
+                        var locateCount = Db.Queryable<SysStorageLocat>()
+                            .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == item).Count();
+
+                        var taskNum = Db.Queryable<LogTask>()
+                            .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" ||  m.Status == "1") && m.EndRoadway == item)
+                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+
+                        if (locateCount - taskNum > 0)
+                        {
+                            roadNo = item;
+                        }
+                        //褰撳墠宸锋湁浣嶇疆鍒欓��鍑�
+                        if (!string.IsNullOrWhiteSpace(roadNo))
+                        {
+                            break;
+                        }
+                    }
+                }
+
+                if (string.IsNullOrWhiteSpace(roadNo))
+                {
+                    throw new Exception("鏈煡璇㈠埌绌哄偍浣嶅贩閬�");
+                }
+
+                Db.BeginTran();
+                try
+                {
+                    //娣诲姞宸烽亾浣跨敤璁板綍
+                    var log = new SysRoadwayUseLog
+                    {
+                        RoadwayNo = roadNo,
+                        WareHouseNo = houseNo,
+                        Row = 0,
+                        Column = 0,
+                        Layer = 0,
+                    };
+                    Db.Insertable(log).ExecuteCommand();
+
+                    // 娣诲姞鍏ュ簱鏃ュ織璁板綍
+                    var taskNo = new Common().GetMaxNo("TK");
+                    var exTask = new LogTask    //鍏ュ簱浠诲姟
+                    {
+                        TaskNo = taskNo,
+                        Sender = "WMS",
+                        Receiver = "WCS",
+                        IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                        SendDate = DateTime.Now,  //鍙戦�佹椂闂�
+                        BackDate = DateTime.Now,  //杩斿洖鏃堕棿
+                        StartRoadway = "",            // 璧峰宸烽亾
+                        StartLocat = "",//璧峰浣嶇疆
+                        EndLocat = "",//鐩爣浣嶇疆
+                        EndRoadway = roadNo,  // 鐩爣宸烽亾
+                        PalletNo = palletNo,//鎵樼洏鐮�
+                        IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                        IsCancel = 1,//鏄惁鍙彇娑�
+                        IsFinish = 1,//鏄惁鍙畬鎴�
+                        Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                        Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                        OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                        Msg = "鍏ュ簱鍙e埌=>>" + roadNo + "宸烽亾鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
+                        TaskModel = "1"  //浠诲姟妯″紡  1锛氭紨绀烘ā寮�
+
+                    };
+                    Db.Insertable(exTask).ExecuteCommand();
+
+                    Db.CommitTran();
+
+                    comDto = new OutCommandDto()
+                    {
+                        PalletNo = palletNo,//鎵樼洏鍙�
+                        StartRoadway = "",
+                        StartLocate = "", // 璧峰浣嶇疆
+                        EndLocate = "", // 鐩爣浣嶇疆 
+                        EndRoadway = roadNo,   // 鐩爣宸烽亾
+                        TaskNo = taskNo, // 浠诲姟鍙�
+                        TaskType = "0",// 浠诲姟绫诲瀷:鍏ュ簱浠诲姟
+                        OutMode = "",  //鐩爣鍦板潃
+                        Order = 1
+                    };
                 }
                 catch (Exception ex)
                 {
@@ -1123,6 +1849,11 @@
                 {
                     throw new Exception("璇烽�夋嫨鎵�灞炰粨搴�");
                 }
+                //楠岃瘉宸烽亾鏄惁涓虹┖
+                if (string.IsNullOrWhiteSpace(roadwayNo))
+                {
+                    throw new Exception("宸烽亾涓嶈兘涓虹┖");
+                }
                 //楠岃瘉鏄惁涓哄钩搴撳叆搴�
                 if (houseNo == "W02")
                 {
@@ -1149,20 +1880,11 @@
                 var skuCategoryList = Db.Queryable<SysMaterialCategory>().Where(m => m.IsDel == "0").ToList();
 
                 var skuNo = ""; //鍏ュ簱鐗╂枡
-
+                var isAddTask = true; //鏄惁娣诲姞鏂颁换鍔�
+                var oldTaskNo = "";  //鏃т换鍔″彿
+                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo).ToList();
                 if (palletBindList.Count >= 1) //姝e父鍏ュ簱
                 {
-                    //var bindIdList = palletBindList.Select(m => m.Id).ToList();
-                    //鍒ゆ柇鏄惁鏈夐浂绠�
-                    //foreach (var item in bindIdList)
-                    //{
-                    //    var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == item);
-                    //    if (boxInfo.Count(m => m.BitBoxMark == "1") > 0)
-                    //    {
-                    //        throw new Exception($"{palletNo}鎵樼洏涓婃湁闆剁锛岃鍏ラ浂绠卞簱锛�");
-                    //    }
-                    //}
-
                     var palletBind = palletBindList.FirstOrDefault(m => m.Status == "1");
                     if (palletBind != null)
                     {
@@ -1171,19 +1893,38 @@
                         {
                             throw new Exception("璇ユ墭鐩樻鍦ㄥ叆搴擄紝浣嗘湭鏌ヨ鍒颁换鍔′俊鎭�");
                         }
-                        comDto = new OutCommandDto()
+                        if (!string.IsNullOrWhiteSpace(beingTask.EndLocat))
                         {
-                            PalletNo = palletNo,//鎵樼洏鍙�
-                            StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾
-                            StartLocate = "", // 璧峰浣嶇疆
-                            EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆
-                            EndRoadway = beingTask.EndRoadway,                           //  鐩爣宸烽亾
-                            TaskNo = beingTask.TaskNo, // 浠诲姟鍙�
-                            TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
-                            OutMode = "",  //鐩爣鍦板潃
-                            Order = 1
-                        };
-                        return comDto;
+                            comDto = new OutCommandDto()
+                            {
+                                PalletNo = palletNo,//鎵樼洏鍙�
+                                StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾
+                                StartLocate = "", // 璧峰浣嶇疆
+                                EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆
+                                EndRoadway = beingTask.EndRoadway,                           //  鐩爣宸烽亾
+                                TaskNo = beingTask.TaskNo, // 浠诲姟鍙�
+                                TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                OutMode = "",  //鐩爣鍦板潃
+                                Order = 1
+                            };
+                            if (beingTask.IsSuccess == 0)
+                            {
+                                beingTask.IsSuccess = 1;//濡傛灉浠诲姟涓嬪彂鐘舵�佹槸鏈笅鍙戞洿鏀逛负宸蹭笅鍙�
+                                Db.Updateable(beingTask).ExecuteCommand();
+                            }
+                            return comDto;
+
+                        }
+                        else
+                        {
+                            if (string.IsNullOrWhiteSpace(roadwayNo))
+                            {
+                                roadwayNo = beingTask.EndRoadway;
+                            }
+                            isAddTask = false;
+                            oldTaskNo = beingTask.TaskNo;
+                        }
+                            
                     }
                     if (haveLocate != null)
                     {
@@ -1224,7 +1965,7 @@
                 }
                 else //鍥炴祦鍏ュ簱
                 {
-                    var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo).ToList();
+                    
                     if (stockDetail.Count == 0)
                     {
                         throw new Exception($"{palletNo}鎵樼洏鏉$爜涓嶅叿鏈夌鐮佷俊鎭紝涓嶅彲鍏ュ簱锛�");
@@ -1248,6 +1989,42 @@
                         }
                     }
 
+                    var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
+                    && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
+                    if (beingTask != null)
+                    {
+                        if (!string.IsNullOrWhiteSpace(beingTask.EndLocat))
+                        {
+                            comDto = new OutCommandDto()
+                            {
+                                PalletNo = palletNo,//鎵樼洏鍙�
+                                StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾
+                                StartLocate = "", // 璧峰浣嶇疆
+                                EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆
+                                EndRoadway = beingTask.EndRoadway,   //  鐩爣宸烽亾
+                                TaskNo = beingTask.TaskNo, // 浠诲姟鍙�
+                                TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                OutMode = "",  //鐩爣鍦板潃
+                                Order = 1
+                            };
+                            if (beingTask.IsSuccess == 0)
+                            {
+                                beingTask.IsSuccess = 1;
+                                beingTask.Status = "1";
+                                Db.Updateable(beingTask).ExecuteCommand();
+                            }
+                            return comDto;
+                        }
+                        else
+                        {
+                            if (string.IsNullOrWhiteSpace(roadwayNo))
+                            {
+                                roadwayNo = beingTask.EndRoadway;
+                            }
+                            isAddTask = false;
+                            oldTaskNo = beingTask.TaskNo;
+                        }
+                    }
 
                     //鑾峰彇瀵瑰簲鍥炲簱瑙勫垯
                     var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetName == "鎵樼洏鍥炲簱楠岃瘉" && a.IsEnable == "NO");
@@ -1314,46 +2091,74 @@
                 Db.BeginTran();
                 try
                 {
-                    //if (locate != null)
-                    //{
-                    //    //娣诲姞宸烽亾浣跨敤璁板綍
-                    //    var log = new SysRoadwayUseLog
-                    //    {
-                    //        RoadwayNo = locate.RoadwayNo,
-                    //        LocateNo = locate.LocatNo,
-                    //        WareHouseNo = locate.WareHouseNo,
-                    //        Row = locate.Row,
-                    //        Column = locate.Column,
-                    //        Layer = locate.Layer,
-                    //        Depth = locate.Depth
-                    //    };
-                    //    Db.Insertable(log).ExecuteCommand();
-                    //}
-
-                    var taskNo = new Common().GetMaxNo("TK");
-                    var exTask = new LogTask    //鍏ュ簱浠诲姟
+                    if (isAddTask)
                     {
-                        TaskNo = taskNo,
-                        Sender = "WMS",
-                        Receiver = "WCS",
-                        IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
-                        SendDate = DateTime.Now,  //鍙戦�佹椂闂�
-                        BackDate = DateTime.Now,  //杩斿洖鏃堕棿
-                        StartRoadway = "",            // 璧峰宸烽亾
-                        StartLocat = "",//璧峰浣嶇疆
-                        EndLocat = locate.LocatNo,//鐩爣浣嶇疆
-                        EndRoadway = locate.RoadwayNo,  // 鐩爣宸烽亾
-                        PalletNo = palletNo,//鎵樼洏鐮�
-                        IsSend = 1,//鏄惁鍙啀娆′笅鍙�
-                        IsCancel = 1,//鏄惁鍙彇娑�
-                        IsFinish = 1,//鏄惁鍙畬鎴�
-                        Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
-                        Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
-                        OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
-                        Msg = "鍏ュ簱鍙e埌=>>" + locate.LocatNo + "鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
+                        var taskNo = new Common().GetMaxNo("TK");
+                        var exTask = new LogTask    //鍏ュ簱浠诲姟
+                        {
+                            TaskNo = taskNo,
+                            Sender = "WMS",
+                            Receiver = "WCS",
+                            IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                            SendDate = DateTime.Now,  //鍙戦�佹椂闂�
+                            BackDate = DateTime.Now,  //杩斿洖鏃堕棿
+                            StartRoadway = "",            // 璧峰宸烽亾
+                            StartLocat = "",//璧峰浣嶇疆
+                            EndLocat = locate.LocatNo,//鐩爣浣嶇疆
+                            EndRoadway = locate.RoadwayNo,  // 鐩爣宸烽亾
+                            PalletNo = palletNo,//鎵樼洏鐮�
+                            IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                            IsCancel = 1,//鏄惁鍙彇娑�
+                            IsFinish = 1,//鏄惁鍙畬鎴�
+                            Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                            Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                            OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                            Msg = "鍏ュ簱鍙e埌=>>" + locate.LocatNo + "鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
 
-                    };
-                    Db.Insertable(exTask).ExecuteCommand();
+                        };
+                        Db.Insertable(exTask).ExecuteCommand();
+                        // 娣诲姞鎵樼洏缁戝畾琛ㄦ墭鐩樺叆搴撲换鍔″彿 liudl
+                        foreach (DataStockDetail stockModel in stockDetail)
+                        {
+                            var bindModel = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Status == "2"
+                            && m.PalletNo == stockModel.PalletNo && m.ASNNo == stockModel.ASNNo && m.ASNDetailNo == stockModel.ASNDetailNo);
+                            if (bindModel != null && string.IsNullOrWhiteSpace(bindModel.TaskNo))
+                            {
+                                bindModel.TaskNo = taskNo;
+                                bindModel.WareHouseNo = locate.WareHouseNo;
+                                bindModel.RoadwayNo = locate.RoadwayNo;
+                                bindModel.LocatNo = locate.LocatNo;
+                                Db.Updateable(bindModel).ExecuteCommand();
+                            }
+                        }
+                        oldTaskNo = taskNo;
+                    }
+                    else
+                    {
+                        var oldTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == oldTaskNo);
+                        oldTask.EndLocat = locate.LocatNo;
+                        oldTask.EndRoadway = locate.RoadwayNo;
+                        oldTask.Msg += $"{roadwayNo}宸烽亾鍙�=>>{locate.LocatNo}鍌ㄤ綅鍦板潃";
+                        if (oldTask.IsSuccess == 0)
+                        {
+                            oldTask.IsSuccess = 1;
+                            oldTask.Status = "1"; 
+                        }
+                        Db.Updateable(oldTask).ExecuteCommand();
+
+                        var bindModel = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Status == "2"
+                           && m.PalletNo == oldTask.PalletNo && m.TaskNo == oldTaskNo);
+                        if (bindModel != null && string.IsNullOrWhiteSpace(bindModel.LocatNo))
+                        {
+                            bindModel.TaskNo = oldTask.TaskNo;
+                            bindModel.WareHouseNo = locate.WareHouseNo;
+                            bindModel.RoadwayNo = locate.RoadwayNo;
+                            bindModel.LocatNo = locate.LocatNo;
+                            Db.Updateable(bindModel).ExecuteCommand();
+                        }
+                    }
+
+                   
                     locate.Status = "2";
                     Db.Updateable(locate).ExecuteCommand();
                     if (palletBindList.Count >= 1)
@@ -1364,7 +2169,7 @@
                             item.WareHouseNo = locate.WareHouseNo;
                             item.RoadwayNo = locate.RoadwayNo;
                             item.LocatNo = locate.LocatNo;
-                            item.TaskNo = taskNo;
+                            item.TaskNo = oldTaskNo;
                         }
                         Db.Updateable(palletBindList).ExecuteCommand();
                     }
@@ -1376,7 +2181,7 @@
                         StartLocate = "", // 璧峰浣嶇疆
                         EndLocate = locate.LocatNo, // 鐩爣浣嶇疆 
                         EndRoadway = locate.RoadwayNo,   // 鐩爣宸烽亾
-                        TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                        TaskNo = oldTaskNo, // 浠诲姟鍙�
                         TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
                         OutMode = "",  //鐩爣鍦板潃
                         Order = 1
@@ -1389,6 +2194,176 @@
                     throw new Exception(ex.Message);
                 }
                 #endregion
+
+
+                return comDto;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+
+        //鐢宠鍌ㄤ綅(鍙傝妯″紡)
+        public OutCommandDto RequestLocationModel(string palletNo, string houseNo, string roadwayNo)
+        {
+            try
+            {
+
+                //楠岃瘉鎵樼洏鏉$爜鏄惁涓虹┖
+                if (string.IsNullOrEmpty(palletNo))
+                {
+                    throw new Exception("璇疯緭鍏ヨ鐢宠鐨勬墭鐩樻潯鐮�");
+                }
+                //楠岃瘉鎵�灞炰粨搴撴槸鍚︿负绌�
+                if (string.IsNullOrEmpty(houseNo))
+                {
+                    throw new Exception("璇烽�夋嫨鎵�灞炰粨搴�");
+                }
+                //楠岃瘉宸烽亾鏄惁涓虹┖
+                if (string.IsNullOrWhiteSpace(roadwayNo))
+                {
+                    throw new Exception("宸烽亾涓嶈兘涓虹┖");
+                }
+                //楠岃瘉鏄惁涓哄钩搴撳叆搴�
+                if (houseNo == "W02")
+                {
+                    throw new Exception("骞冲簱璇蜂娇鐢≒DA鎵嬫寔杩涜骞冲簱鍏ュ簱");
+                }
+                //var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//鎵樼洏淇℃伅
+
+                ////鍒ゆ柇鎵樼洏鏉$爜鏄惁鏈夋晥
+                //if (stock == null)
+                //    throw new Exception("鎵樼洏鏉$爜涓嶅彈WMS绠$悊锛屼笉鍙叆搴擄紒");
+
+                OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠�
+
+                var isAddTask = false;
+                var oldTaskNo = "";
+                #region 
+
+                 var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
+                && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
+                if (beingTask != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(beingTask.EndLocat))
+                    {
+                        comDto = new OutCommandDto()
+                        {
+                            PalletNo = palletNo,//鎵樼洏鍙�
+                            StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾
+                            StartLocate = "", // 璧峰浣嶇疆
+                            EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆
+                            EndRoadway = beingTask.EndRoadway,   //  鐩爣宸烽亾
+                            TaskNo = beingTask.TaskNo, // 浠诲姟鍙�
+                            TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
+                            OutMode = "",  //鐩爣鍦板潃
+                            Order = 1
+                        };
+                        if (beingTask.IsSuccess == 0)
+                        {
+                            beingTask.IsSuccess = 1;
+                            beingTask.Status = "1";
+                            Db.Updateable(beingTask).ExecuteCommand();
+                        }
+                        return comDto;
+                    }
+                    else
+                    {
+                        if (string.IsNullOrWhiteSpace(roadwayNo))
+                        {
+                            roadwayNo = beingTask.EndRoadway;
+                        }
+                    }
+                    oldTaskNo = beingTask.TaskNo;
+                }
+                else
+                {
+                    isAddTask = true;
+                }
+
+
+                #endregion
+                
+
+                var allotLocate = new AllotLocation();
+
+                SysStorageLocat locate;
+                var areaList = new List<string>();
+                areaList.Add("A03");
+                locate = allotLocate.GetSuiTableLocate(houseNo, areaList, roadwayNo);
+                 
+                Db.BeginTran();
+                try
+                {
+                    if (isAddTask)
+                    {
+                        var taskNo = new Common().GetMaxNo("TK");
+                        var exTask = new LogTask    //鍏ュ簱浠诲姟
+                        {
+                            TaskNo = taskNo,
+                            Sender = "WMS",
+                            Receiver = "WCS",
+                            IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                            SendDate = DateTime.Now,  //鍙戦�佹椂闂�
+                            BackDate = DateTime.Now,  //杩斿洖鏃堕棿
+                            StartRoadway = "",            // 璧峰宸烽亾
+                            StartLocat = "",//璧峰浣嶇疆
+                            EndLocat = locate.LocatNo,//鐩爣浣嶇疆
+                            EndRoadway = locate.RoadwayNo,  // 鐩爣宸烽亾
+                            PalletNo = palletNo,//鎵樼洏鐮�
+                            IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                            IsCancel = 1,//鏄惁鍙彇娑�
+                            IsFinish = 1,//鏄惁鍙畬鎴�
+                            Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                            Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                            OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                            Msg = "鍏ュ簱鍙e埌=>>" + locate.LocatNo + "鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
+                            TaskModel = "1"
+
+                        };
+                        Db.Insertable(exTask).ExecuteCommand();
+                        
+                        oldTaskNo = taskNo;
+                    }
+                    else
+                    {
+                        var oldTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == oldTaskNo);
+                        oldTask.EndLocat = locate.LocatNo;
+                        oldTask.EndRoadway = locate.RoadwayNo;
+                        if (oldTask.IsSuccess == 0)
+                        {
+                            oldTask.IsSuccess = 1;
+                            oldTask.Status = "1";
+                        }
+                        Db.Updateable(oldTask).ExecuteCommand();
+                    }
+
+
+                    locate.Status = "2";
+                    Db.Updateable(locate).ExecuteCommand();
+                   
+                    Db.CommitTran();
+                    comDto = new OutCommandDto()
+                    {
+                        PalletNo = palletNo,//鎵樼洏鍙�
+                        StartRoadway = "",
+                        StartLocate = "", // 璧峰浣嶇疆
+                        EndLocate = locate.LocatNo, // 鐩爣浣嶇疆 
+                        EndRoadway = locate.RoadwayNo,   // 鐩爣宸烽亾
+                        TaskNo = oldTaskNo, // 浠诲姟鍙�
+                        TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
+                        OutMode = "",  //鐩爣鍦板潃
+                        Order = 1
+                    };
+
+                }
+                catch (Exception ex)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(ex.Message);
+                }
 
 
                 return comDto;
@@ -1418,10 +2393,7 @@
                 var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
                 //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅
                 var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
-                if (locate == null)
-                {
-                    throw new Exception($"鏈煡璇㈠埌浠诲姟涓殑鍌ㄤ綅淇℃伅");
-                }
+                
                 //鑾峰彇绠辩爜淇℃伅
                 var box1 = Db.Queryable<BllBoxInfo>().First(a => a.PalletNo == task.PalletNo && a.IsDel == "0" && a.Status != "2");
 
@@ -1437,6 +2409,18 @@
                 {
                     //娣诲姞鎿嶄綔鏃ュ織璁板綍
                     var k = new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鍏ュ簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId);
+                }
+                if (task.TaskModel == "1") //婕旂ず妯″紡
+                {
+                    locate.Status = "1";
+                    Db.Updateable(locate).ExecuteCommand();
+                    Db.CommitTran();
+                    return;
+                }
+                // 鍒ゆ柇鍌ㄤ綅鏄惁涓虹┖
+                if (locate == null)
+                {
+                    throw new Exception($"鏈煡璇㈠埌浠诲姟涓殑鍌ㄤ綅淇℃伅");
                 }
                 //鍒ゆ柇鏄惁鏄洖娴佸叆搴撳畬鎴�
                 if (stockDetail.Any())
@@ -1538,6 +2522,7 @@
                                 SkuName = boxInfo.SkuName,
                                 Standard = sku.Standard,
                                 ProductionTime = boxInfo.ProductionTime,
+                                ExpirationTime = boxInfo.ExpirationTime,
                                 SupplierLot = boxInfo.SupplierLot,
                                 InspectStatus = boxInfo.InspectStatus,
                                 InspectMark = boxInfo.InspectMark,
@@ -1603,7 +2588,17 @@
                             }
 
                             //鑾峰彇璇ユ壒娆℃渶缁堣川妫�缁撴灉
-                            //var quality = Db.Queryable<BllQualityInspect>().Where(a => a.LotNo == noticeDetail.LotNo && a.IsDel == "0").OrderByDescending(a => a.CreateTime).ToList(); 
+                            BllQualityInspect quality = new BllQualityInspect();
+                            //鍒ゆ柇鏄惁涓洪��璐у叆搴撳崟
+                            if (notice.Type == "3")
+                            {
+                                quality = Db.Queryable<BllQualityInspect>().Where(a => a.IsDel == "0" && a.ASNNo == noticeDetail.ASNNo && a.SkuNo == noticeDetail.SkuNo && a.LotNo == noticeDetail.LotNo).OrderByDescending(a => a.CreateTime).First();
+                            }
+                            else
+                            {
+                                quality = Db.Queryable<BllQualityInspect>().Where(a => a.IsDel == "0" && a.SkuNo == noticeDetail.SkuNo && a.LotNo == noticeDetail.LotNo).OrderByDescending(a => a.CreateTime).First();
+                            }
+
                             #region 搴撳瓨鏄庣粏
                             var sd = new DataStockDetail()
                             {
@@ -1650,28 +2645,28 @@
                                 sd.OwnerName = notice.CustomerName;//璐т富鍚嶇О
                             }
                             else if (notice.Type == "1" || notice.Type == "5")//1:閲囪喘鍏ュ簱,2:鍏跺畠鍏ュ簱
-                            { 
-                                sd.SupplierNo= notice.CustomerNo;//渚涘簲鍟嗙紪鐮�
+                            {
+                                sd.SupplierNo = notice.CustomerNo;//渚涘簲鍟嗙紪鐮�
                                 sd.SupplierName = notice.CustomerName;//渚涘簲鍟嗗悕绉�
                             }
 
-                            //if (quality.Count() > 0)
-                            //{
-                            //    //淇敼鍚堟牸涓嶅悎鏍兼暟閲�
-                            //    if (quality[0].IsQualified == "1") //鍚堟牸
-                            //    {
-                            //        //澧炲姞鍚堟牸鏁伴噺
-                            //        quality[0].PassQty += item.Qty;
-                            //        sd.InspectStatus = "1";
-                            //    }
-                            //    else if (quality[0].IsQualified == "0") //涓嶅悎鏍�
-                            //    {
-                            //        //澧炲姞涓嶅悎鏍兼暟閲�
-                            //        quality[0].FailQty += item.Qty;
-                            //        sd.InspectStatus = "2";
-                            //    }
-                            //    Db.Updateable(quality[0]).ExecuteCommand(); //淇敼璐ㄦ淇℃伅
-                            //}
+                            if (quality != null)
+                            {
+                                //淇敼鍚堟牸涓嶅悎鏍兼暟閲�
+                                if (quality.IsQualified == "1") //鍚堟牸
+                                {
+                                    //澧炲姞鍚堟牸鏁伴噺
+                                    quality.PassQty += item.Qty;
+                                    sd.InspectStatus = "1";
+                                }
+                                else if (quality.IsQualified == "0") //涓嶅悎鏍�
+                                {
+                                    //澧炲姞涓嶅悎鏍兼暟閲�
+                                    quality.FailQty += item.Qty;
+                                    sd.InspectStatus = "2";
+                                }
+                                Db.Updateable(quality).ExecuteCommand(); //淇敼璐ㄦ淇℃伅
+                            }
 
                             var sdId = Db.Insertable(sd).ExecuteReturnIdentity(); //鏂板搴撳瓨鏄庣粏淇℃伅
 
@@ -1701,6 +2696,7 @@
                                     SkuName = demo.SkuName,
                                     Standard = noticeDetail.Standard,
                                     ProductionTime = demo.ProductionTime,
+                                    ExpirationTime = demo.ExpirationTime,
                                     SupplierLot = demo.SupplierLot,
                                     InspectStatus = demo.InspectStatus,
                                     InspectMark = demo.InspectMark,
@@ -2168,13 +3164,11 @@
                     Db.Updateable(bind).ExecuteCommand();
                 }
                 var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
-                if (locate == null)
+                if (locate != null)
                 {
-                    throw new Exception("鏈煡璇㈤亾鍌ㄤ綅淇℃伅");
+                    locate.Status = "0"; //淇敼鍌ㄤ綅鐘舵��
+                    Db.Updateable(locate).ExecuteCommand();
                 }
-
-                locate.Status = "0"; //淇敼鍌ㄤ綅鐘舵��
-                Db.Updateable(locate).ExecuteCommand();
 
                 //娣诲姞鎿嶄綔鏃ュ織璁板綍
                 var k = new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鍏ュ簱鏃ュ織", taskNo, "鍙栨秷", $"鐐瑰嚮鍙栨秷鎸夐挳鍙栨秷浜嗕换鍔″彿涓猴細{taskNo}鐨勪换鍔�", (int)userId);
@@ -2182,6 +3176,7 @@
             }
             catch (Exception e)
             {
+                Db.RollbackTran();
                 throw new Exception(e.Message);
             }
         }

--
Gitblit v1.8.0