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 | 1585 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 1,367 insertions(+), 218 deletions(-)

diff --git a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
index 9867faa..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)
         {
@@ -49,7 +411,7 @@
                   .AndIF(!string.IsNullOrWhiteSpace(model.LocatNo), it => it.LocatNo.Contains(model.LocatNo.Trim()))
                   .AndIF(!string.IsNullOrEmpty(model.RoadwayNo), a => a.RoadwayNo == model.RoadwayNo)
                   .AndIF(!string.IsNullOrEmpty(model.WareHouseNo), a => a.WareHouseNo == model.WareHouseNo)
-                  .AndIF(strList.Count>0, it => strList.Contains((int)it.ASNDetailNo))
+                  .AndIF(strList.Count > 0, it => strList.Contains((int)it.ASNDetailNo))
                   .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim()))
                   .AndIF(!string.IsNullOrWhiteSpace(model.LotText), it => it.LotText.Contains(model.LotText.Trim()))
                   .AndIF(!string.IsNullOrWhiteSpace(model.StartTime), it => it.CreateTime >= Convert.ToDateTime(model.StartTime))
@@ -99,7 +461,7 @@
                     })
                     .OrderBy(a => a.Status).OrderByDescending(a => a.CreateTime)
                     .ToOffsetPage(model.Page, model.Limit, ref total);
-                
+
                 count = data.Count;
                 return data;
 
@@ -114,8 +476,19 @@
         {
             try
             {
+                Expression<Func<BllBoxInfo, bool>> item1 = Expressionable.Create<BllBoxInfo>()
+                  .AndIF(!string.IsNullOrWhiteSpace(model.ASNNo), it => it.ASNNo.Contains(model.ASNNo.Trim()))
+                  .AndIF(!string.IsNullOrWhiteSpace(model.PalletNo), it => it.PalletNo.Contains(model.PalletNo.Trim()))
+                  .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)
+                  .And(m => m.IsDel == "0")
+                  .ToExpression();
+
                 var total = 0;
-                var data = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel =="0" && m.BindNo == model.BindNo)
+                DbHelper<BllBoxInfo> helper = new DbHelper<BllBoxInfo>(Db);
+                var data = helper.GetAllWhereAsync(item1).Where(m => m.IsDel == "0")
                     .LeftJoin<BllPalletBind>((a, b) => a.BindNo == b.Id)
                     .GroupBy((a, b) => new
                     {
@@ -218,7 +591,7 @@
         {
             try
             {
-
+                //鑾峰彇鎵樼洏缁戝畾淇℃伅
                 var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Id == id);
                 if (bind == null)
                 {
@@ -228,6 +601,8 @@
                 {
                     throw new Exception("璇ユ墭鐩樼粦瀹氫俊鎭殑鐘舵�佷笉鏄瓑寰呭叆搴擄紝涓嶈兘鍒犻櫎");
                 }
+                //鑾峰彇闄ゅ垹闄ょ粦瀹氫俊鎭鏄惁瀛樺湪璇ユ墭鐩樹笖鍚屽崟鎹叾瀹冪粦瀹氫俊鎭�
+                var bindid = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == bind.PalletNo && m.Id != id && m.ASNNo == bind.ASNNo).ToList();
                 //鑾峰彇鎵樼洏淇℃伅
                 var pallet = Db.Queryable<SysPallets>().First(a => a.IsDel == "0" && a.PalletNo == bind.PalletNo && a.Status == "1");
                 if (pallet == null)
@@ -256,7 +631,7 @@
                     b.UpdateTime = time;
                     b.UpdateUser = userId;
                     var i = Db.Updateable(b).ExecuteCommand();
-                    if (i!=1)
+                    if (i != 1)
                     {
                         throw new Exception($"{b.BoxNo}绠辩爜銆亄b.BoxNo3}鏀爜鍒犻櫎澶辫触");
                     }
@@ -292,8 +667,8 @@
                     {
                         noticeDetail.Status = "0";
                         //鑾峰彇鐘舵�佷笉鏄瓑寰呮墽琛岀殑鏄庣粏淇℃伅
-                        var count = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.Id != noticeDetail.Id && m.ASNNo == bind.ASNNo && m.Status !="0");
-                        if (count==0)
+                        var count = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.Id != noticeDetail.Id && m.ASNNo == bind.ASNNo && m.Status != "0");
+                        if (count == 0)
                         {
                             //淇敼鍏ュ簱鍗曚俊鎭�
                             var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == bind.ASNNo);
@@ -307,10 +682,13 @@
                     Db.Updateable(noticeDetail).ExecuteCommand();
                 }
 
-                pallet.Status = "0";
-                pallet.UpdateUser = userId;
-                pallet.UpdateTime = DateTime.Now;
-                Db.Updateable(pallet).ExecuteCommand();
+                if (bindid.Count == 0)
+                {
+                    pallet.Status = "0";
+                    pallet.UpdateUser = userId;
+                    pallet.UpdateTime = DateTime.Now;
+                    Db.Updateable(pallet).ExecuteCommand();
+                }
 
                 new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鎵樼洏缁戝畾", bind.PalletNo, "鍒犻櫎", $"鍒犻櫎浜嗗叆搴撳崟锛歿bind.ASNNo}銆佹墭鐩樼爜锛歿bind.PalletNo}鐨勪俊鎭�", userId);
                 Db.CommitTran();
@@ -355,7 +733,7 @@
                 }
                 Db.BeginTran();
                 var time = DateTime.Now;
-                var qty = 0;
+                decimal qty = 0;
                 foreach (var item in boxInfos)
                 {
                     //鍒犻櫎瑙g粦绠辨敮淇℃伅
@@ -363,7 +741,7 @@
                     {
                         item.ASNNo = "";
                         item.ASNDetailNo = null;
-                    }                    
+                    }
                     item.BindNo = null;
                     item.PalletNo = "";
                     item.Status = "0";
@@ -375,9 +753,10 @@
                 Db.Updateable(boxInfos).ExecuteCommand();
 
                 //淇敼鎵樼洏缁戝畾淇℃伅
-                bind.Qty -= qty;
+                bind.Qty -= qty;                    // 鏁伴噺鍙樻洿
+                bind.BitPalletMark = "1";           // 闆舵墭鏍囪鍙樻洿
 
-                if (bind.Qty ==0)
+                if (bind.Qty == 0)
                 {
                     //鍒ゆ柇鏄惁鏈夋寚瀹氬偍浣�
                     if (!string.IsNullOrWhiteSpace(bind.LocatNo))
@@ -509,11 +888,17 @@
                 }
 
                 var info = boxInfo.First(m => m.BindNo == bind.Id);
+                //鍏ュ簱鍗曟槑缁�
+                var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == bind.ASNDetailNo);
+                if (noticeDetail == null && info.SkuNo != "100099")
+                {
+                    throw new Exception("鏈煡璇㈠埌鎵樼洏缁戝畾鐨勫叆搴撳崟鏄庣粏淇℃伅");
+                }
                 var log = new BllAuditLog()
                 {
                     OrderNo = notice.ASNNo,
                     PalletNo = bind.PalletNo,
-                    Msg = $"鐗╂枡锛歿info.SkuNo}銆佹壒娆★細{info.LotNo};",
+                    Msg = info == null ? $"鐗╂枡锛歿noticeDetail.SkuNo}銆佹壒娆★細{noticeDetail.LotNo};" : $"鐗╂枡锛歿info.SkuNo}銆佹壒娆★細{info.LotNo};",
                     Reason = reason,
                     Status = "0",
                     Opinion = "",
@@ -540,20 +925,35 @@
 
         #region 鎸囧畾鍌ㄤ綅
         //鎸囧畾鍌ㄤ綅鏁版嵁婧愶紙姝e父鐨勭┖鍌ㄤ綅锛�
-        public List<LocatDto> GetLocateList(string houseNo, string roadwayNo, string row, string column, string layer, string locateNo, 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 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 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)
                    .AndIF(!string.IsNullOrWhiteSpace(row), m => m.Row == int.Parse(row))
                    .AndIF(!string.IsNullOrWhiteSpace(column), m => m.Column == int.Parse(column))
                    .AndIF(!string.IsNullOrWhiteSpace(layer), m => m.Layer == int.Parse(layer))
                    .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo.Contains(locateNo))
-                   .And(m => m.IsDel == "0" && m.Status=="0" && m.Flag == "0" && m.WareHouseNo == houseNo)
+                   .And(m => m.IsDel == "0" && m.Status == "0" && m.Flag == "0" && m.WareHouseNo == houseNo)
+                   .And(m => m.AreaNo.Contains(categoryAreaNo))
                    .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
                 var total = 0;
-                var list = Db.Queryable<SysStorageLocat>().Where(item)
+                var list = Db.Queryable<SysStorageLocat>().Where(item).OrderByDescending(a => a.Depth).OrderBy(a => a.Column)
                     .Select(a => new LocatDto()
                     {
                         Id = a.Id,
@@ -562,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;
@@ -600,6 +1001,59 @@
                 {
                     throw new Exception("璇ュ偍浣嶇姸鎬佷笉鏄┖鍌ㄤ綅鎴栨爣蹇椾笉鏄甯哥殑");
                 }
+
+
+
+                //鍒ゆ柇褰撳墠鎵樼洏鏄惁瀛樺湪缁戝畾淇℃伅
+                if (!string.IsNullOrWhiteSpace(bind.LocatNo))
+                {
+                    //鍒嗗壊宸茬粦鍌ㄤ綅涓庢柊鍌ㄤ綅
+                    //宸茬粦鍌ㄤ綅
+                    var bindRow = bind.LocatNo.Substring(0, 2);
+                    var bindColumn = bind.LocatNo.Substring(2, 2);
+                    var bindLayer = bind.LocatNo.Substring(4, 2);
+                    var bindDepth = bind.LocatNo.Substring(6, 2);
+                    //鏂板偍浣�
+                    var Row = locate.LocatNo.Substring(0, 2);
+                    var Column = locate.LocatNo.Substring(2, 2);
+                    var Layer = locate.LocatNo.Substring(4, 2);
+                    var Depth = locate.LocatNo.Substring(6, 2);
+
+                    if (bindDepth == "02")
+                    {
+                        //鍒ゆ柇鎺掑垪灞傛槸鍚︾浉鍚�
+                        if (bindRow == Row && bindColumn == Column && bindLayer == Layer)
+                        {
+                            throw new Exception("鍚屽偍浣嶆繁搴�2涓嶅彲鍚戞繁搴�1鍒囨崲锛�");
+                        }
+                    }
+                }
+                else
+                {
+                    //鑻ユ槸娣卞害1鐨� 鍒欏垽鏂繁搴�2鏄惁涓虹┖鍌ㄤ綅
+                    if (locate.Depth == "01")
+                    {
+                        var locateDepth = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.Row == locate.Row && a.Column == locate.Column && a.Layer == locate.Layer && a.Depth == "02");
+                        if (locateDepth != null)
+                        {
+                            if (locateDepth.Status != "1")
+                            {
+                                throw new Exception("璇ュ偍浣嶆繁搴�2涓嶆槸鏈夌墿鍝侊紝涓嶅彲缁戝畾");
+                            }
+                        }
+                    }
+                    //鍒ゆ柇鏄惁涓烘繁搴�2鐨� 鑻ヤ负娣卞害2 鍒欒幏鍙栨繁搴�1鍌ㄤ綅 鍒ゆ柇鏄惁涓虹┖鍌ㄤ綅
+                    if (locate.Depth == "02")
+                    {
+                        var locateDepth = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.Row == locate.Row && a.Column == locate.Column && a.Layer == locate.Layer && a.Depth == "01");
+                        if (locateDepth.Status != "0" || locateDepth.Flag == "2")
+                        {
+                            throw new Exception("璇ュ偍浣嶆繁搴�1涓嶆槸绌哄偍浣嶆垨鏍囧織涓嶆槸姝e父鐨�");
+                        }
+                    }
+                }
+
+
                 var bindIdList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == bind.PalletNo && m.Status != "2").Select(m => m.Id).ToList();
                 //鍒ゆ柇鏄惁鏈夐浂绠�
                 foreach (var item in bindIdList)
@@ -624,7 +1078,7 @@
                     //鑾峰彇鍚屾墭鐩樼殑鎵樼洏缁戝畾淇℃伅
                     var bindList = Db.Queryable<BllPalletBind>()
                         .Where(m => m.IsDel == "0" && m.PalletNo == bind.PalletNo && m.Status == "0").ToList();
-                    if (bindList.Count>0)
+                    if (bindList.Count > 0)
                     {
                         foreach (var b in bindList)
                         {
@@ -669,6 +1123,7 @@
         {
             try
             {
+                #region 楠岃瘉鎵樼洏鍚堟硶鎬�
                 //楠岃瘉鎵樼洏鏉$爜鏄惁涓虹┖
                 if (string.IsNullOrEmpty(palletNo))
                 {
@@ -685,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 
 
                 //鏌ヨ鎵樼洏缁戝畾淇℃伅(鐘舵�佷负绛夊緟鍏ュ簱鐨�)
@@ -730,6 +1185,11 @@
                             OutMode = "",  //鐩爣鍦板潃
                             Order = 1
                         };
+                        if (beingTask.IsSuccess == 0)
+                        {
+                            beingTask.IsSuccess = 1;
+                            Db.Updateable(beingTask).ExecuteCommand();
+                        }
                         return comDto;
                     }
                     if (haveLocate != null)
@@ -737,6 +1197,8 @@
                         isHaveLocateNo = true; //宸叉湁鎸囧畾鍌ㄤ綅
                     }
 
+
+                    //  楠岃瘉鏄惁鍏宠仈鍗曟嵁锛岃幏鍙栨墭鐩樹笂瀛樻斁鐨勭墿鏂�
                     if (palletBindList.First().Type == "0") //鐗╂枡鎵樺叆搴�
                     {
                         //鍒ゆ柇鏄惁缁戝畾鍗曟嵁鍙婂崟鎹姸鎬佹槸鍚︽甯�
@@ -747,7 +1209,7 @@
                             {
                                 throw new Exception("鎵樼洏瀛樺湪鐗╂枡鏈粦瀹氬叆搴撳崟锛屼笉鍙叆搴擄紒");
                             }
-                            if (notice.Status == "3")
+                            if (notice.Status == "3" || notice.Status == "4")
                             {
                                 throw new Exception($"鍏ュ簱鍗晎item.ASNNo}宸插叧闂紝涓嶅彲鍏ュ簱锛�");
                             }
@@ -777,38 +1239,61 @@
                         throw new Exception($"{palletNo}鎵樼洏鏉$爜涓嶅叿鏈夌鐮佷俊鎭紝涓嶅彲鍏ュ簱锛�");
                     }
                     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
                 }
 
                 var allotLocate = new AllotLocation();
 
                 SysStorageLocat locate;
-                
+
+                #region 鏍规嵁sku纭鍖哄煙鍒掑垎
                 var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo);
                 if (sku == null)
                 {
@@ -850,23 +1335,56 @@
                             break;
                     }
                 }
-                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo))
-                    .GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
 
-                SysRoadwayUseLog useLog = Db.Ado.SqlQuerySingle<SysRoadwayUseLog>("select Top(1) * from SysRoadwayUseLog where IsDel=0 order by CreateTime desc"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰�
+                var road = Db.Queryable<SysStorageRoadway>().Where(m => m.IsDel == "0" && m.Status == "0").Select(m => m.RoadwayNo).ToList();
 
-                var bindNum = Db.Queryable<BllPalletBind>()
-                    .Where(m => m.IsDel == "0" && m.Status == "0" && !string.IsNullOrWhiteSpace(m.RoadwayNo))
-                    .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+                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>();
+                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)//璺冲贩閬撳钩鍧囧垎閰�
                 {
-                    //濡傛灉鍚岀骇宸烽亾鏈夊鏉″垯鏌ヤ笂娆′綅缃棩蹇�
-                    if (roadList.Count > 1)
-                    {
-                        useLog = Db.Queryable<SysRoadwayUseLog>().OrderByDescending(l => l.Id).First();
-                    }
                     //鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅
                     foreach (var l in roadList)
                     {
@@ -877,33 +1395,57 @@
                         }
 
                         var locateCount = Db.Queryable<SysStorageLocat>()
-                            .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo)).Count();
-                        if (locateCount- bindNum>0)
+                            .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l).Count();
+
+                        var bindNum = Db.Queryable<BllPalletBind>()
+                            .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == l)
+                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+                        if (locateCount - bindNum > 0)
                         {
                             roadNo = l;
                         }
                         //褰撳墠宸锋湁浣嶇疆鍒欓��鍑�
-                        if (roadNo != null)
+                        if (!string.IsNullOrWhiteSpace(roadNo))
                         {
                             break;
                         }
                     }
                     //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ
-               
-                    if (roadNo == null)
+
+                    if (string.IsNullOrWhiteSpace(roadNo))
                     {
                         if (useLog != null)
                         {
-                            roadNo = useLog.RoadwayNo;
+                            var locateCount = Db.Queryable<SysStorageLocat>()
+                                .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == useLog.RoadwayNo).Count();
+
+                            var bindNum = Db.Queryable<BllPalletBind>()
+                                .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == useLog.RoadwayNo)
+                                .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+                            if (locateCount - bindNum > 0)
+                            {
+                                roadNo = useLog.RoadwayNo;
+                            }
                         }
-                    } 
+                    }
                 }
                 else//鎸夌収宸烽亾浼樺厛绾у垎閰�
                 {
                     foreach (var item in roadList)
                     {
-                        roadNo = item;
-                        if (roadNo != null)
+                        var locateCount = Db.Queryable<SysStorageLocat>()
+                            .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == item).Count();
+
+                        var bindNum = Db.Queryable<BllPalletBind>()
+                            .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == item)
+                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+
+                        if (locateCount - bindNum > 0)
+                        {
+                            roadNo = item;
+                        }
+                        //褰撳墠宸锋湁浣嶇疆鍒欓��鍑�
+                        if (!string.IsNullOrWhiteSpace(roadNo))
                         {
                             break;
                         }
@@ -914,35 +1456,76 @@
                 {
                     throw new Exception("鏈煡璇㈠埌绌哄偍浣嶅贩閬�");
                 }
-                
+
                 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,//鎵樼洏鍙�
@@ -950,12 +1533,11 @@
                         StartLocate = "", // 璧峰浣嶇疆
                         EndLocate = "", // 鐩爣浣嶇疆 
                         EndRoadway = roadNo,   // 鐩爣宸烽亾
-                        TaskNo = "", // 浠诲姟鍙�
-                        TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
+                        TaskNo = taskNo, // 浠诲姟鍙�
+                        TaskType = "0",// 浠诲姟绫诲瀷:鍏ュ簱浠诲姟
                         OutMode = "",  //鐩爣鍦板潃
                         Order = 1
                     };
-
                 }
                 catch (Exception ex)
                 {
@@ -964,7 +1546,287 @@
                 }
                 #endregion
 
-                return null;
+                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)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(ex.Message);
+                }
+                #endregion
+
+                return comDto;
             }
             catch (Exception e)
             {
@@ -987,6 +1849,11 @@
                 {
                     throw new Exception("璇烽�夋嫨鎵�灞炰粨搴�");
                 }
+                //楠岃瘉宸烽亾鏄惁涓虹┖
+                if (string.IsNullOrWhiteSpace(roadwayNo))
+                {
+                    throw new Exception("宸烽亾涓嶈兘涓虹┖");
+                }
                 //楠岃瘉鏄惁涓哄钩搴撳叆搴�
                 if (houseNo == "W02")
                 {
@@ -1007,26 +1874,17 @@
                 //鏌ヨ鎵樼洏缁戝畾淇℃伅(鐘舵�佷负绛夊緟鍏ュ簱鐨�)
                 var palletBindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "2").ToList();
                 var haveLocate = palletBindList.FirstOrDefault(m => !string.IsNullOrWhiteSpace(m.LocatNo));
-                
+
                 var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();
                 //鐗╂枡绫诲埆淇℃伅
                 var skuCategoryList = Db.Queryable<SysMaterialCategory>().Where(m => m.IsDel == "0").ToList();
-                
-                var skuNo = ""; //鍏ュ簱鐗╂枡
 
+                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)
                     {
@@ -1035,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)
                     {
@@ -1079,36 +1956,78 @@
                         }
 
                         skuNo = noticeDetail.SkuNo;
-                        
+
                     }
-                    else if(palletBindList.First().Type == "1")//绌烘墭鐩�
+                    else if (palletBindList.First().Type == "1")//绌烘墭鐩�
                     {
-                        skuNo = "100099"; 
+                        skuNo = "100099";
                     }
                 }
                 else //鍥炴祦鍏ュ簱
                 {
-                    var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo).ToList();
-                    if (stockDetail.Count==0)
+                    
+                    if (stockDetail.Count == 0)
                     {
                         throw new Exception($"{palletNo}鎵樼洏鏉$爜涓嶅叿鏈夌鐮佷俊鎭紝涓嶅彲鍏ュ簱锛�");
                     }
                     skuNo = stockDetail.First().SkuNo;
-                    //else
-                    //{
-                    //    //鍒ゆ柇鏄惁鏈夐浂绠�
-                    //    var detailIdList = stockDetail.Select(m => m.Id).ToList();
-                    //    var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => detailIdList.Contains(m.StockDetailId)).ToList();
-                    //    if (dataBoxInfo.Count(m => m.BitBoxMark == "1")>0)
-                    //    {
-                    //        throw new Exception($"{palletNo}鎵樼洏涓婃湁闆剁锛屼笉鍙叆搴擄紒");
-                    //    }
+                    if (!string.IsNullOrWhiteSpace(stockDetail.First().WareHouseNo))
+                    {
+                        if (stockDetail.First().WareHouseNo == "W01")//绔嬪簱
+                        {
+                            throw new Exception($"{palletNo}鎵樼洏涓婂湪绔嬪簱涓湁搴撳瓨鍌ㄤ綅淇℃伅锛岃鏍稿疄锛�");
+                        }
 
-                    //}
+                        if (stockDetail.First().WareHouseNo == "W02")//骞冲簱
+                        {
+                            var locatePingKu = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == stockDetail.First().LocatNo);
+                            if (locatePingKu != null)
+                            {
+                                locatePingKu.Status = "0";
+                                Db.Updateable(locatePingKu).ExecuteCommand();
+                            }
+                        }
+                    }
 
+                    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");
+                    var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetName == "鎵樼洏鍥炲簱楠岃瘉" && a.IsEnable == "NO");
                     #region 鎵樼洏鍥炲簱瑙勫垯
 
                     if (function != null)
@@ -1129,7 +2048,7 @@
                             }
                         }
                     }
-                    
+
 
                     #endregion
                 }
@@ -1168,50 +2087,78 @@
                     }
 
                     locate = allotLocate.GetSuiTableLocate(houseNo, areaList, roadwayNo);
-                }               
+                }
                 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)
@@ -1222,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();
                     }
@@ -1234,7 +2181,7 @@
                         StartLocate = "", // 璧峰浣嶇疆
                         EndLocate = locate.LocatNo, // 鐩爣浣嶇疆 
                         EndRoadway = locate.RoadwayNo,   // 鐩爣宸烽亾
-                        TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                        TaskNo = oldTaskNo, // 浠诲姟鍙�
                         TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱)
                         OutMode = "",  //鐩爣鍦板潃
                         Order = 1
@@ -1247,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;
@@ -1276,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");
 
@@ -1295,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())
@@ -1319,7 +2445,7 @@
                     return;
                 }
                 //姝e父鍏ュ簱
-                var bindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel =="0" && m.TaskNo == taskNo && m.Status =="1").ToList();
+                var bindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo && m.Status == "1").ToList();
                 if (bindList.Count == 0)
                 {
                     throw new Exception($"{taskNo}璇ヤ换鍔℃病鏈夊搴旂殑娴佹按淇℃伅");
@@ -1396,6 +2522,7 @@
                                 SkuName = boxInfo.SkuName,
                                 Standard = sku.Standard,
                                 ProductionTime = boxInfo.ProductionTime,
+                                ExpirationTime = boxInfo.ExpirationTime,
                                 SupplierLot = boxInfo.SupplierLot,
                                 InspectStatus = boxInfo.InspectStatus,
                                 InspectMark = boxInfo.InspectMark,
@@ -1438,7 +2565,7 @@
                             #endregion
 
                             break;
-                        case "0":                            
+                        case "0":
                             var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.ASNDetailNo);
                             if (noticeDetail == null)
                             {
@@ -1461,13 +2588,23 @@
                             }
 
                             //鑾峰彇璇ユ壒娆℃渶缁堣川妫�缁撴灉
-                            //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()
                             {
                                 LotNo = item.LotNo,
                                 LotText = noticeDetail.LotText,
-                                SupplierLot = noticeDetail.SupplierLot,                                
+                                SupplierLot = noticeDetail.SupplierLot,
                                 SkuNo = noticeDetail.SkuNo,
                                 SkuName = noticeDetail.SkuName,
                                 Standard = noticeDetail.Standard,
@@ -1495,32 +2632,41 @@
                                 PackagNo = noticeDetail.PackagNo,
                                 IsBale = item.IsBale,
                                 IsBelt = item.IsBelt,
-
-                                OwnerNo = ownerNo,
-                                OwnerName = ownerName,
+                                Demo = item.Demo,
 
                                 IsDel = "0",
                                 CreateUser = 0,
                                 CreateTime = comTime
                             };
+                            //缁存姢搴撳瓨鏄庣粏璐т富/渚涘簲鍟嗕俊鎭�
+                            if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")//0:鎴愬搧鍏ュ簱锛�2:涓棿鍝佸叆搴�,4:杞﹂棿浣欐枡鍏ュ簱,6:浠e偍鍏ュ簱,7:瀵勫瓨鍏ュ簱
+                            {
+                                sd.OwnerNo = notice.CustomerNo;//璐т富缂栫爜
+                                sd.OwnerName = notice.CustomerName;//璐т富鍚嶇О
+                            }
+                            else if (notice.Type == "1" || notice.Type == "5")//1:閲囪喘鍏ュ簱,2:鍏跺畠鍏ュ簱
+                            {
+                                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(); //鏂板搴撳瓨鏄庣粏淇℃伅
 
@@ -1550,6 +2696,7 @@
                                     SkuName = demo.SkuName,
                                     Standard = noticeDetail.Standard,
                                     ProductionTime = demo.ProductionTime,
+                                    ExpirationTime = demo.ExpirationTime,
                                     SupplierLot = demo.SupplierLot,
                                     InspectStatus = demo.InspectStatus,
                                     InspectMark = demo.InspectMark,
@@ -1587,13 +2734,16 @@
                                     LockQty = 0,
                                     FrozenQty = 0,
 
-                                    OwnerNo = ownerNo,
-                                    OwnerName = ownerName,
-
                                     IsDel = "0",
                                     CreateUser = userId,
                                     CreateTime = comTime
                                 };
+                                //缁存姢搴撳瓨璐т富淇℃伅
+                                if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")//0:鎴愬搧鍏ュ簱锛�2:涓棿鍝佸叆搴�,4:杞﹂棿浣欐枡鍏ュ簱,6:浠e偍鍏ュ簱,7:瀵勫瓨鍏ュ簱
+                                {
+                                    stock.OwnerNo = notice.CustomerNo;//璐т富缂栫爜
+                                    stock.OwnerName = notice.CustomerName;//璐т富鍚嶇О
+                                }
                                 Db.Insertable(stock).ExecuteCommand();
                             }
                             #endregion
@@ -1611,7 +2761,7 @@
                             var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>()
                                 .Count(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo && m.Status != "2");
                             if (asnDetailNum == 0)
-                            {                                
+                            {
                                 notice.Status = "2";
                                 notice.CompleteTime = comTime;
                                 Db.Updateable(notice).ExecuteCommand();
@@ -1868,7 +3018,7 @@
                         skuNo = stockDetail.First().SkuNo;
                     }
 
-                    var sku = Db.Queryable<SysMaterials>().First(m =>m.IsDel =="0" && m.SkuNo == skuNo);
+                    var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo);
                     if (sku == null)
                     {
                         throw new Exception("鐗╂枡淇℃伅涓湭鏌ヨ鍒板叆搴撳崟鏄庣粏鍖呭惈鐨勭墿鏂欎俊鎭紝涓嶅彲鍏ュ簱");
@@ -1879,7 +3029,7 @@
                         throw new Exception($"鐗╂枡锛歿sku.SkuNo}鏈煡璇㈠埌绫诲埆淇℃伅");
                     }
 
-                    var skuCategory = Db.Queryable<SysMaterialCategory>().First(m =>m.IsDel=="0" && m.CategoryNo == sku.CategoryNo);
+                    var skuCategory = Db.Queryable<SysMaterialCategory>().First(m => m.IsDel == "0" && m.CategoryNo == sku.CategoryNo);
                     if (skuCategory == null)
                     {
                         throw new Exception($"鏈湪绫诲埆淇℃伅涓煡璇㈠埌鐗╂枡锛歿sku.SkuNo}鍖呭惈鐨勭被鍒�");
@@ -1902,21 +3052,21 @@
                     //}
                     //catch (Exception ex)
                     //{
-                        // 鏁翠釜浠撳簱閮芥病鏈夋壘鍒版墭鐩�
-                        if (asnNo != "鍥炴祦鎵樼洏")
-                        {
-                            palletBindModel.Status = "0";               // 绛夊緟鎵ц
-                            palletBindModel.LocatNo = "";               // 鍌ㄤ綅鍦板潃
-                            Db.Updateable(palletBindModel).ExecuteCommand();
-                            Db.CommitTran();
-                        }
+                    // 鏁翠釜浠撳簱閮芥病鏈夋壘鍒版墭鐩�
+                    if (asnNo != "鍥炴祦鎵樼洏")
+                    {
+                        palletBindModel.Status = "0";               // 绛夊緟鎵ц
+                        palletBindModel.LocatNo = "";               // 鍌ㄤ綅鍦板潃
+                        Db.Updateable(palletBindModel).ExecuteCommand();
+                        Db.CommitTran();
+                    }
 
-                        return null;
-                        //throw ex;
-                        //}
+                    return null;
+                    //throw ex;
+                    //}
                 }
 
-                
+
 
                 // 鐢熸垚鍏ュ簱浠诲姟
                 var taskNo = new Common().GetMaxNo("TK");               // 鑾峰彇浠诲姟缂栧彿
@@ -1939,7 +3089,7 @@
                     Type = "0",                                     //浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
                     Status = "1",                                   //浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
                     OrderType = "0",                                //0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
-                    Msg = taskModel.EndLocat+">>>>" + locate.LocatNo + "鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
+                    Msg = taskModel.EndLocat + ">>>>" + locate.LocatNo + "鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
                 };
                 Db.Insertable(exTask).ExecuteCommand();
                 locate.Status = "2";
@@ -1999,7 +3149,7 @@
 
                 //鎵樼洏缁戝畾淇℃伅
                 var bind = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo).ToList();
-                if (bind.Count >0)
+                if (bind.Count > 0)
                 {
                     foreach (var item in bind)
                     {
@@ -2014,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);
@@ -2028,6 +3176,7 @@
             }
             catch (Exception e)
             {
+                Db.RollbackTran();
                 throw new Exception(e.Message);
             }
         }

--
Gitblit v1.8.0