From f493448ee02fd2f92cf4ed17a48957c4c84532e9 Mon Sep 17 00:00:00 2001
From: yuyou_x <2336760928@qq.com>
Date: 星期三, 06 三月 2024 14:21:26 +0800
Subject: [PATCH] 增加指定储位传参,增加对应dto模型和视图模型,修改指定储位获取数据源代码,修改pda托盘绑定判断,修改指定储位后台逻辑代码

---
 Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs |  388 +++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 317 insertions(+), 71 deletions(-)

diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index c15510f..59a7019 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -199,7 +199,7 @@
         {
             try
             {
-                var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id&& m.IsDel == "0");
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id && m.IsDel == "0");
                 if (notice == null)
                 {
                     throw new Exception("鏈煡璇㈠埌鍗曟嵁淇℃伅");
@@ -290,8 +290,8 @@
                     .LeftJoin<SysLogisticsInfo>((a, b) => a.LogisticsId == b.Id)
                     .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id)
                     .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id)
-                    .LeftJoin<SysUserInfor>((a, b, c, d,e) => a.CheckUser == e.Id)
-                    .Select((a, b, c, d,e) => new ExportNoticeDto()
+                    .LeftJoin<SysUserInfor>((a, b, c, d, e) => a.CheckUser == e.Id)
+                    .Select((a, b, c, d, e) => new ExportNoticeDto()
                     {
                         Id = a.Id,
                         SONo = a.SONo,
@@ -308,15 +308,15 @@
                         IsWave = a.IsWave,
                         WaveNo = a.WaveNo,
                         IsDespatch = a.IsDespatch,
-                        Demo=a.Demo,
+                        Demo = a.Demo,
 
                         CreateUserName = c.RealName,
                         UpdateUserName = c.RealName,
                         CreateTime = a.CreateTime,
                         UpdateTime = a.UpdateTime,
 
-                        CheckUserName=e.RealName,
-                        CheckTime=a.CheckTime
+                        CheckUserName = e.RealName,
+                        CheckTime = a.CheckTime
                     })
                     .OrderByDescending(a => a.CreateTime)
                     .ToOffsetPage(page, limit, ref total);
@@ -408,7 +408,7 @@
                     SkuName = it.SkuName,
                     LotNo = it.LotNo,
                     Standard = it.Standard,
-                    Qty =  type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty
+                    Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty
 
                 }).ToList();
 
@@ -459,7 +459,7 @@
                 var skuNos = model.Detail.Select(a => a.SkuNo).Distinct().ToList();
                 //鏍规嵁鐗╂枡鍙疯幏鍙栫墿鏂欎俊鎭�佸簱瀛樻槑缁嗕腑鑾峰彇鎵规鎻忚堪渚涜揣鎵规绛�
                 var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList();
-                var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty-s.FrozenQty-s.LockQty) > 0).ToList();
+                var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
                 //var palletList = contextDb.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
                 //瀹㈡埛淇℃伅
                 var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList();
@@ -531,12 +531,12 @@
                             CompleteQty = 0,
                             PackagNo = sku.PackagNo,
                             Price = sku.Price,
-                            Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price*d.Qty,
+                            Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                             IsBale = d.IsBale,
                             IsBelt = d.IsBelt,
                             SupplierLot = stocks.First().SupplierLot,
                             IsWave = "0",
-                            WaveNo= "",
+                            WaveNo = "",
 
                             CreateUser = userId,
                         };
@@ -558,7 +558,7 @@
                         LogisticsId = model.LogisticsId,
                         IsWave = "0",
                         WaveNo = "",
-                        IsDespatch="0",
+                        IsDespatch = "0",
 
                         CreateUser = userId,
                     };
@@ -630,7 +630,7 @@
                     var stockCount = 0.00m; //st.StockQuantity.Value
                     if (s != null)
                     {
-                        stockCount = s.Qty-s.FrozenQty-s.LockQty+d.Qty;
+                        stockCount = s.Qty - s.FrozenQty - s.LockQty + d.Qty;
                     }
 
                     var dm = new SelectStockSkuDto()
@@ -805,7 +805,7 @@
                         }
                         else if (old.Qty != d.Qty || old.IsBale != d.IsBale || old.IsBelt != d.IsBelt)
                         {
-                            if (d.Qty > (stock.Qty-stock.FrozenQty-stock.LockQty) + old.Qty)
+                            if (d.Qty > (stock.Qty - stock.FrozenQty - stock.LockQty) + old.Qty)
                             {
                                 throw new Exception("鐗╁搧搴撳瓨鏁伴噺涓嶈冻");
                             }
@@ -1121,8 +1121,8 @@
                     .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim()))
                     .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim()))
                     .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim()))
-                    .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark==inspectMark)
-                    .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark== bitPalletMark)
+                    .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark == inspectMark)
+                    .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark == bitPalletMark)
                     .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo))
                     .And(a => a.Status == "0")
                     .And(a => a.WareHouseNo == "W01")
@@ -1154,7 +1154,7 @@
                 var outDtoList = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚� 
                 str = "";
                 var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0").ToList();
-                
+
                 if (stockDetailList.Count == 0)
                 {
                     throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅");
@@ -1169,7 +1169,7 @@
                 }
                 //鍒ゆ柇鎵樼洏搴撳瓨淇℃伅鍒嗙粍鍚庢槸鍚﹀ぇ浜�1鏉�
                 var detailGroup = stockDetailList.GroupBy(m => new { m.SkuNo, m.PalletNo, m.WareHouseNo, m.LocatNo }).ToList();
-                if (detailGroup.Count>1)
+                if (detailGroup.Count > 1)
                 {
                     throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅");
                 }
@@ -1252,7 +1252,7 @@
                         throw new Exception($"褰撳墠鎵樼洏鎵�鍦ㄧ殑鍌ㄤ綅宸叉崯鍧忥紝涓嶈兘鍑哄簱锛岃鏍稿疄");
                     }
 
-                    if (locate.Status !="1")
+                    if (locate.Status != "1")
                     {
                         throw new Exception($"褰撳墠鎵樼洏鎵�鍦ㄧ殑鍌ㄤ綅鐘舵�佷笉鏄湁鐗╁搧锛屼笉鑳藉嚭搴擄紝璇锋牳瀹�");
                     }
@@ -1308,10 +1308,10 @@
                         Db.Updateable(de).ExecuteCommand();
                         Db.Updateable(stocka).ExecuteCommand();
                     }
-                    
+
                     locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
                     Db.Updateable(locate).ExecuteCommand();
-                   
+
 
                     #endregion
 
@@ -1385,7 +1385,9 @@
             {
                 #region 闆嗗悎 
 
-                var outDtoList = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚� 
+                var outDto1 = new List<OutCommandDto>(); //鍏堝嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负1鐨勫偍浣嶏級
+                var outDto2 = new List<OutCommandDto>(); //鍚庡嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负2鐨勫偍浣嶏級
+                var moveDto = new List<OutCommandDto>(); //瑕佺Щ搴撴暟鎹殑闆嗗悎
                 //璁板綍閿欒淇℃伅鐨勯泦鍚� 
                 var flagList = new List<int>();//1:褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�2 鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�3鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�4 瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱
 
@@ -1420,6 +1422,7 @@
                     //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔�
                     foreach (var item in list)
                     {
+                        var taskNoStr = "";
                         string toLocation = string.Empty;//鐩爣浣嶇疆
                         string unstackingMode2 = unstackingMode;//鎷嗗灈鏂瑰紡锛�0:鏈哄櫒浜烘媶鍨� 1:PDA鎷嗗灈
                         #region 鍒ゆ柇鏄惁闇�瑕佹媶绠�
@@ -1450,7 +1453,7 @@
                                 isChai = "1";
                                 unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈
                             }
-                        }                        
+                        }
                         #endregion
                         if (unstackingMode2 == "0")//鏈哄櫒浜烘媶鍨�
                         {
@@ -1550,40 +1553,211 @@
                         if (locate.Status == "1") //鏈夌墿鍝�
                         {
                             #region 娣诲姞鍑哄簱浠诲姟
-
-                            var taskNo = new Common().GetMaxNo("TK");
-                            var exTask = new LogTask    //鍑哄簱浠诲姟
+                            if (locate.Depth == "01") //娣卞害涓�1
                             {
-                                TaskNo = taskNo,
-                                Sender = "WMS",
-                                Receiver = "WCS",
-                                IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                                var taskNo = new Common().GetMaxNo("TK");
+                                var exTask = new LogTask    //鍑哄簱浠诲姟
+                                {
+                                    TaskNo = taskNo,
+                                    Sender = "WMS",
+                                    Receiver = "WCS",
+                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
 
-                                StartLocat = locate.LocatNo,//璧峰浣嶇疆
-                                EndLocat = toLocation,//outMode,//鐩爣浣嶇疆
-                                PalletNo = item.PalletNo,//鎵樼洏鐮�
-                                IsSend = 1,//鏄惁鍙啀娆′笅鍙�
-                                IsCancel = 1,//鏄惁鍙彇娑�
-                                IsFinish = 1,//鏄惁鍙畬鎴�
-                                Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
-                                Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
-                                OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
-                                Msg = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
-                            };
-                            Db.Insertable(exTask).ExecuteCommand();
-                            logTaskList.Add(exTask);
+                                    StartLocat = locate.LocatNo,//璧峰浣嶇疆
+                                    EndLocat = toLocation,//outMode,//鐩爣浣嶇疆
+                                    PalletNo = item.PalletNo,//鎵樼洏鐮�
+                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                    Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                                    Msg = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
+                                };
+                                Db.Insertable(exTask).ExecuteCommand();
+                                logTaskList.Add(exTask);
 
-                            outDtoList.Add(new OutCommandDto()
+                                outDto1.Add(new OutCommandDto()
+                                {
+                                    PalletNo = item.PalletNo,//鎵樼洏鍙�
+                                    StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                    StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
+                                    EndLocate = toLocation,//outMode, // 鐩爣浣嶇疆 
+                                    TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                                    TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                    OutMode = "",  //鐩爣鍦板潃
+                                    Order = 1
+                                });
+                            }
+                            else if (locate.Depth == "02") //娣卞害涓�2
                             {
-                                PalletNo = item.PalletNo,//鎵樼洏鍙�
-                                StartLocate = locate.LocatNo, // 璧峰浣嶇疆
-                                StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
-                                EndLocate = toLocation,//outMode, // 鐩爣浣嶇疆 
-                                TaskNo = exTask.TaskNo, // 浠诲姟鍙�
-                                TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
-                                OutMode = "",  //鐩爣鍦板潃
-                                Order = 1
-                            });
+                                //鑾峰彇鍑哄簱娣卞害涓�2鍌ㄤ綅鍓嶉潰鐨勫偍浣嶄俊鎭�
+                                var slotBefore = com.GetLocateNoDepth1(locate.WareHouseNo, locate.LocatNo);
+                                if (slotBefore.Status == "1") //鍓嶉潰鐨勫偍浣嶆湁璐х墿銆佽繘琛岀Щ搴撴搷浣�
+                                {
+                                    //瑕佸嚭搴撴繁搴︿负2鐨勫偍浣嶅墠闈㈢殑鍌ㄤ綅涓揣鐗╂槸鍚﹁鍑哄簱
+                                    var isout = outStockDetail.Count(m => m.LocatNo == slotBefore.LocatNo);
+
+                                    if (isout <= 0) //杩涜绉诲簱
+                                    {
+                                        //鍘诲簱瀛樿〃涓壘鍒板偍浣嶅搴旂殑鎵樼洏鐮佹搷浣�
+                                        var stockNew = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo);
+                                        if (stockNew == null)
+                                        {
+                                            var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == slotBefore.LocatNo);
+                                            slotChange.Status = "0";
+                                            Db.Updateable(slotChange).ExecuteCommand();
+                                        }
+                                        else
+                                        {
+                                            //鑾峰彇绉诲簱鐨勫簱浣�
+                                            var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, item.SkuNo);
+                                            //褰撳墠绉诲簱搴撲綅鐨勫偍浣嶄俊鎭�
+                                            var locatey = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0");
+                                            if (!string.IsNullOrEmpty(newSlot))
+                                            {
+                                                #region 娣诲姞鍑哄簱鏃跺彂鐢熺殑绉诲簱浠诲姟
+
+                                                var exYkTaskNo = new Common().GetMaxNo("TK");
+                                                var exYkTask = new LogTask    //鍑哄簱鏃朵骇鐢熺Щ搴撲换鍔�
+                                                {
+                                                    TaskNo = exYkTaskNo,
+                                                    Sender = "WMS",
+                                                    Receiver = "WCS",
+                                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                                    StartLocat = stockNew.LocatNo,//璧峰浣嶇疆
+                                                    EndLocat = newSlot,//鐩爣浣嶇疆
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鐮�
+                                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                                    Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+
+                                                    Msg = stockNew.LocatNo + " ==>> " + newSlot + "鐨勭Щ搴撲换鍔�",
+                                                };
+                                                Db.Insertable(exYkTask).ExecuteCommand();
+
+                                                moveDto.Add(new OutCommandDto()
+                                                {
+                                                    StartRoadway = slotBefore.RoadwayNo, //璧峰宸烽亾
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鍙�
+                                                    StartLocate = stockNew.LocatNo, // 璧峰浣嶇疆
+                                                    EndLocate = newSlot, // 鐩爣浣嶇疆 
+                                                    EndRoadway = locatey.RoadwayNo, // 鐩爣宸烽亾 
+                                                    TaskNo = exYkTask.TaskNo, // 浠诲姟鍙�
+                                                    TaskType = "2",// 浠诲姟绫诲瀷 (绉诲簱)
+                                                    OutMode = "",  //鐩爣鍦板潃
+                                                    Order = 1,
+                                                });
+                                                #endregion
+
+                                                #region 鏀瑰彉鍌ㄤ綅瑁呭~
+                                                var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id);
+                                                var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot);
+                                                slotChange.Status = "5"; //鏀瑰彉鐘舵�侊紙姝e湪绉诲嚭锛�
+                                                slotChange2.Status = "4"; // 鏀瑰彉鐘舵�侊紙姝e湪绉诲叆锛�
+                                                Db.Updateable(slotChange).ExecuteCommand();
+                                                Db.Updateable(slotChange2).ExecuteCommand();
+                                                #endregion
+                                            }
+                                            else
+                                            {
+                                                #region 娣诲姞鍑哄簱浠诲姟
+
+                                                var exYkTaskNo1 = new Common().GetMaxNo("TK");
+                                                var exYkTask1 = new LogTask    //鍑哄簱绉诲簱娌℃湁搴撲綅浜嗚繘琛屽嚭搴撲换鍔�
+                                                {
+                                                    TaskNo = exYkTaskNo1,
+                                                    Sender = "WMS",
+                                                    Receiver = "WCS",
+                                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                                    StartLocat = stockNew.LocatNo,//璧峰浣嶇疆
+                                                    EndLocat = "",//鐩爣浣嶇疆
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鐮�
+                                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                                    Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                                                    Msg = locate.LocatNo + "鐨勫嚭搴撲换鍔�"
+                                                };
+                                                Db.Insertable(exYkTask1).ExecuteCommand();
+
+                                                outDto1.Add(new OutCommandDto()
+                                                {
+                                                    StartRoadway = slotBefore.RoadwayNo, //璧峰宸烽亾
+                                                    PalletNo = stockNew.PalletNo,//鎵樼洏鍙�
+                                                    StartLocate = stockNew.LocatNo, // 璧峰浣嶇疆
+                                                    EndLocate = "", // 鐩爣浣嶇疆 
+                                                    EndRoadway = "", // 鐩爣宸烽亾 
+                                                    TaskNo = exYkTask1.TaskNo, // 浠诲姟鍙�
+                                                    TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                                    OutMode = "",  //鐩爣鍦板潃
+                                                    Order = 1,
+                                                });
+                                                #endregion
+
+                                                #region MyRegion
+
+                                                var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id);
+                                                slotChange.Status = "3"; //鏀瑰彉鐘舵�侊紙姝e湪鍑哄簱锛�
+                                                Db.Updateable(slotChange).ExecuteCommand();
+
+                                                #endregion
+                                            }
+                                        }
+                                    }
+                                }
+                                else if (slotBefore.Status == "2" || slotBefore.Status == "4") //鍓嶉潰鍌ㄤ綅鐘舵�佹槸鍏ュ簱涓垨鑰呯Щ鍏ヤ腑
+                                {
+                                    flagList.Add(5);
+                                    continue;
+                                }
+
+                                #region 娣诲姞鍑哄簱浠诲姟
+
+                                var taskNo1 = new Common().GetMaxNo("TK");
+                                var exTask1 = new LogTask    //鍑哄簱浠诲姟
+                                {
+                                    TaskNo = taskNo1,
+                                    Sender = "WMS",
+                                    Receiver = "WCS",
+                                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                    StartLocat = locate.LocatNo,//璧峰浣嶇疆
+                                    EndLocat = "",//鐩爣浣嶇疆
+                                    PalletNo = item.PalletNo,//鎵樼洏鐮�
+                                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                    IsCancel = 1,//鏄惁鍙彇娑�
+                                    IsFinish = 1,//鏄惁鍙畬鎴�
+                                    Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                    OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                                    Msg = locate.LocatNo + "鐨勫嚭搴撲换鍔�"
+                                };
+                                Db.Insertable(exTask1).ExecuteCommand();
+
+                                outDto2.Add(new OutCommandDto()
+                                {
+                                    StartRoadway = locate.RoadwayNo, //璧峰宸烽亾
+                                    PalletNo = item.PalletNo,//鎵樼洏鍙�
+                                    StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                    EndLocate = "", // 鐩爣浣嶇疆 
+                                    EndRoadway = locate.RoadwayNo, //鐩爣宸烽亾
+                                    TaskNo = exTask1.TaskNo, // 浠诲姟鍙�
+                                    TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)
+                                    OutMode = "",  //鐩爣鍦板潃
+                                    Order = 1,
+                                });
+                                taskNoStr = exTask1.TaskNo;
+                                #endregion
+
+                            }
                             #endregion
 
                             #region 鏀瑰彉鏁版嵁
@@ -1610,7 +1784,7 @@
                             locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
                             Db.Updateable(locate).ExecuteCommand();
 
-                            item.TaskNo = exTask.TaskNo; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
+                            item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
                             item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
                             item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡
                             item.OutMode = unstackingMode2 == "1" ? outMode : "";//鍑哄簱鍙�
@@ -1645,7 +1819,7 @@
                                     }
                                 }
                             }
-                            var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType =="1"&& m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo==item.PalletNo);
+                            var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
                             if (taskNo == null)
                             {
                                 taskNo = logTaskList.First(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱
@@ -1693,11 +1867,11 @@
                     {
                         str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�";
                     }
-                    if (outDtoList.Count > 0)
+                    if (outDto1.Count > 0)
                     {
                         // 姝e紡杩愯绋嬪簭鏀惧紑
-                        var list2 = outDtoList.Select(m => m.TaskNo).ToList();
-                        var jsonData = JsonConvert.SerializeObject(outDtoList);
+                        var list2 = outDto1.Select(m => m.TaskNo).ToList();
+                        var jsonData = JsonConvert.SerializeObject(outDto1);
                         string response = "";
 
                         try
@@ -1727,7 +1901,7 @@
 
                     }
 
-                    return outDtoList;
+                    return outDto1;
                 }
                 catch (Exception e)
                 {
@@ -1780,7 +1954,7 @@
                     }
                     foreach (var item in stockDetail)
                     {
-                        if (item.SkuNo== "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
+                        if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
                         {
                             //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺
                             var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099");
@@ -2037,7 +2211,7 @@
                         if (noticeDetail.FactQty == 0)
                         {
                             var noticeDetail2 = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo && m.Id != noticeDetail.Id).ToList();
-                            var num = noticeDetail2.Count(m => m.FactQty>0);
+                            var num = noticeDetail2.Count(m => m.FactQty > 0);
                             //鍒ゆ柇鍑哄簱鍗曠殑鎵�鏈夋槑缁嗘槸鍚﹂兘涓�0锛涘鏋滀负0鍙樻洿鍑哄簱鍗曠姸鎬佷负宸插垎閰�
                             if (num == 0)
                             {
@@ -2063,7 +2237,7 @@
                             //淇敼搴撳瓨鏄庣粏
                             stockDetail.LockQty -= stockDetail.Qty; //閿佸畾鏁伴噺
                             stockDetail.Status = "0"; //搴撳瓨鐘舵�� 0锛氬緟鍒嗛厤
-                            
+
                             //淇敼搴撳瓨鎬昏〃
                             datastock.LockQty -= (int)stockDetail.Qty; //閿佸畾鏁伴噺
 
@@ -2081,13 +2255,13 @@
                             Db.Updateable(locate).ExecuteCommand();
 
                         }
-                        
+
                     }
                     else
                     {
                         Db.Updateable(allot).ExecuteCommand();
                     }
-                    
+
                     //娣诲姞鎿嶄綔鏃ュ織璁板綍
                     var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "鍙栨秷", $"鐐瑰嚮鍙栨秷鎸夐挳銆佸彇娑堜簡浠诲姟鍙蜂负锛歿taskNo}鐨勪换鍔�", (int)userId);
                     Db.CommitTran();
@@ -2114,7 +2288,7 @@
             try
             {
                 // 鍒ゆ柇褰撳墠浠诲姟鐘舵��  Status 1:姝e湪鎵ц 3:寮傚父缁撴潫
-                var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" &&  m.Status == "1");
+                var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1");
                 if (taskModel == null)
                 {
                     throw new Exception("姝や换鍔′笉瀛樺湪鎴栦换鍔$姸鎬佸凡鍙樻洿!");
@@ -2592,7 +2766,7 @@
                 {
                     throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗�!");
                 }
-                if (notice.Status == "3"  && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
+                if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5")
                 {
                     throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!");
                 }
@@ -2607,7 +2781,7 @@
                         m => m.SkuNo.Contains(msg.Trim())
                              || m.SkuName.Contains(msg.Trim())
                              || m.LocatNo.Contains(msg.Trim()))
-                    .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo &&(m.Status == "0" || m.Status == "1"))
+                    .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1"))
                     .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
 
                 var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto
@@ -2650,7 +2824,7 @@
                 {
                     throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒");
                 }
-                var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel =="0" && a.SONo == detail.SONo);
+                var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == detail.SONo);
                 if (notice == null)
                 {
                     throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒");
@@ -2686,7 +2860,7 @@
                     {
                         throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒");
                     }
-                    if (st.Qty > (stock.Qty-stock.LockQty-stock.FrozenQty -stock.InspectQty))
+                    if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty - stock.InspectQty))
                     {
                         throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒");
                     }
@@ -2757,7 +2931,7 @@
                     {
                         notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺  淇敼涓哄凡鍒嗛厤
                     }
-                    else if (totalAllotQty< totalQty  && totalAllotQty>0)
+                    else if (totalAllotQty < totalQty && totalAllotQty > 0)
                     {
                         notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺  淇敼涓洪儴鍒嗗垎閰�
                     }
@@ -2800,7 +2974,7 @@
                 //鐗╂枡缂栫爜琛�
                 var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0");
                 //鍖呰琛�
-                var packagList= Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
+                var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
                 //鍑哄簱鍒嗛厤淇℃伅
                 var allotList = Db.Queryable<BllExportAllot>().Where(w => w.IsDel == "0" && w.SONo == soNo).ToList();
                 foreach (var item in allotList)
@@ -2829,7 +3003,7 @@
                         result = "1";//闇�瑕佹媶绠�
                         break;
                     }
-                }               
+                }
                 return result;
             }
             catch (Exception ex)
@@ -2837,5 +3011,77 @@
                 throw new Exception(ex.Message);
             }
         }
+
+        /// <summary>
+        /// 鑾峰彇绉诲簱鐩爣搴撲綅
+        /// </summary>
+        /// <param name="oldAddress">闇�瑕佺Щ鍔ㄧ殑搴撲綅鍦板潃</param>
+        /// <param name="roadWay">宸烽亾</param>
+        /// <param name="skuNo">鐗╂枡缂栫爜</param>
+        /// <returns>鐩爣搴撲綅鍦板潃 涓�"" 鐩存帴涓嬪彂涓ゆ鍑哄簱鎸囦护</returns>
+        public string MoveAddress(string oldAddress, string roadWay, string skuNo)//01020201  鎺�-鍒�-灞�-娣卞害
+        {
+            string nowAddress = "";
+
+            //鏍规嵁鐗╂枡缂栫爜鑾峰彇瀵瑰簲鍖哄煙
+            var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First();
+            var category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo);
+
+            // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅
+            var row = int.Parse(oldAddress.Substring(0, 2));
+            var lie = int.Parse(oldAddress.Substring(2, 2));
+            var ceng = int.Parse(oldAddress.Substring(4, 2));
+
+            var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum 
+                                from SysStorageLocat 
+                                where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in '{category}' 
+                                order by distNum;";
+
+            var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
+            if (addressModels.Count > 0)   // 鍒ゆ柇鍚屽贩閬撳唴鎺掔┖搴撲綅
+            {
+                var listLocaete = new List<string>();
+                foreach (var item in addressModels)
+                {
+                    // 鐩爣鍐呭簱浣嶅搴旂殑澶栧簱浣�
+                    string addressee = item.LocatNo.Substring(0, 6) + "01";
+
+                    // 鍒ゆ柇鐩爣搴撲綅鐨勫搴撲綅鏄惁瀛樺湪璐х墿   (姝e父鎯呭喌涓嬫鍦ㄧЩ鍏ユ儏鍐典笉瀛樺湪锛屽洜涓虹Щ搴撳厛绉诲叆閲岄潰锛屽悗绉诲叆澶栭潰)
+                    //SlotStatus 0: 绌哄偍浣� 1锛氭湁璐�  2锛氭鍦ㄥ叆搴�  3锛氭鍦ㄥ嚭搴�   4锛氭鍦ㄧЩ鍏�  5锛氭鍦ㄧЩ鍑�
+                    sqlString = $"select count(*) from SysStorageLocat where LocatNo = '{addressee}' and Status = '0' and Flag in ('0','1') ; ";
+                    var rowNum = Db.Ado.SqlQuery<int>(sqlString).First();
+                    if (rowNum == 0)
+                    {
+                        continue;
+                    }
+                    else
+                    {
+                        nowAddress = item.LocatNo;
+                        break;
+                    }
+                }
+            }
+            if (nowAddress == "")
+            {
+                // 鍒ゆ柇鍚屽贩閬撳鎺掔┖搴撲綅
+                sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum 
+                                from SysStorageLocat 
+                                where Flag = '0' and Status = '0' and Depth = '01' and RoadwayNo = '{roadWay}' and AreaNo  in '{category}' 
+                                order by distNum;";
+                var adderModeling = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
+                if (adderModeling.Count > 0)
+                {
+                    nowAddress = adderModeling[0].LocatNo;
+                }
+                else
+                {
+                    // 搴撳唴涓嶅瓨鍦ㄧ┖鍌ㄤ綅  
+                    nowAddress = "";
+                }
+            }
+
+
+            return nowAddress;
+        }
     }
 }

--
Gitblit v1.8.0