From 98e221d6dc26183efab868ee5f11a65d5791304e Mon Sep 17 00:00:00 2001
From: test <15284381150@163.com>
Date: 星期五, 19 九月 2025 08:02:20 +0800
Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/JC34WMS

---
 Pda/View/SoSetting/productOut.html                    |   37 
 Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs          |   48 +
 HTML/views/SOSetting/ExportAllot.html                 |    2 
 Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs       |    8 
 Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs      |   12 
 Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs               |   12 
 Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs              |   37 
 Wms/WMS.BLL/BllSoServer/CompleteDetailServer.cs       |    4 
 Wms/WMS.BLL/DataServer/StockServer.cs                 |    6 
 HTML/views/SOSetting/ExportNoticeAddFrom.html         |    4 
 Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs         |  827 +++++++++++++++++++---------
 HTML/views/SOSetting/ComBoxInfo.html                  |    5 
 Wms/Wms/Controllers/PdaSoController.cs                |    3 
 Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs               |  516 ++++++++++++++++++
 HTML/views/SOSetting/PalletNoOut.html                 |   19 
 HTML/views/StatisticalReport/InventoryStatistics.html |   69 ++
 Wms/Wms/Controllers/StatisticalController.cs          |    5 
 Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs               |    4 
 Wms/Wms/Controllers/BllSoController.cs                |   25 
 Wms/WMS.IBLL/IBllSoServer/ICompleteDetailServer.cs    |    2 
 HTML/views/SOSetting/ExportNotice.html                |    2 
 Wms/WMS.IBLL/IDataServer/IStockServer.cs              |    4 
 22 files changed, 1,295 insertions(+), 356 deletions(-)

diff --git a/HTML/views/SOSetting/ComBoxInfo.html b/HTML/views/SOSetting/ComBoxInfo.html
index 5e5f425..3092ebe 100644
--- a/HTML/views/SOSetting/ComBoxInfo.html
+++ b/HTML/views/SOSetting/ComBoxInfo.html
@@ -58,6 +58,7 @@
 					layer = layui.layer;
 				var h1 = GetTableHeight();
 				var boxNo = getQueryString('BoxNo');
+				var SONo = getQueryString('SONo');
 				if (!boxNo)
 				{
 					boxNo = "";
@@ -70,6 +71,7 @@
                     refreshTable();
                     function refreshTable() {
 						var param={
+							SONo: getQueryString('SONo'),
 							BoxNo:getQueryString('BoxNo'),
 							BoxNo3:$("#BoxNo3").val()
 						}
@@ -113,6 +115,9 @@
                         {
                             field: 'PalletNo', title: '鎵樼洏鏉$爜', align: 'center', width: 110,
                         }, 
+						{
+                            field: 'BoxNo2', title: '鐩掔爜', align: 'center', width: 220,
+                        },
                         {
                             field: 'BoxNo3', title: '鏀爜', align: 'center', width: 220,
                         },  
diff --git a/HTML/views/SOSetting/ExportAllot.html b/HTML/views/SOSetting/ExportAllot.html
index fa289d7..a9006ed 100644
--- a/HTML/views/SOSetting/ExportAllot.html
+++ b/HTML/views/SOSetting/ExportAllot.html
@@ -876,7 +876,7 @@
 					layer.open({
 						type: 2,
 						title: '绠辨敮璇︽儏淇℃伅',
-						content: 'ComBoxInfo.html?BoxNo=' + BoxNo,
+						content: 'ComBoxInfo.html?BoxNo=' + BoxNo+'&SONo='+data.SONo,
 						maxmin: true,
 						area: ['80%', '85%'],
 						btn: ['鍏抽棴'],
diff --git a/HTML/views/SOSetting/ExportNotice.html b/HTML/views/SOSetting/ExportNotice.html
index 375d93b..6c0ee12 100644
--- a/HTML/views/SOSetting/ExportNotice.html
+++ b/HTML/views/SOSetting/ExportNotice.html
@@ -368,7 +368,7 @@
 												</a>`;
 									}
 									
-									if( d.Status == '2' || d.Status == '3'){
+									if( (d.Status == '2' || d.Status == '3') && d.Type=='0'){
 										html += `<a class="layui-btn layui-btn-normal layui-btn-xs outClass" lay-event="outKu">
 													<i class="layui-icon layui-icon-ok"></i>鍑哄簱
 												</a>`;
diff --git a/HTML/views/SOSetting/ExportNoticeAddFrom.html b/HTML/views/SOSetting/ExportNoticeAddFrom.html
index 08c9298..f8961d2 100644
--- a/HTML/views/SOSetting/ExportNoticeAddFrom.html
+++ b/HTML/views/SOSetting/ExportNoticeAddFrom.html
@@ -403,10 +403,10 @@
 					var item = {
 						SkuNo: infoOptions.data[i].SkuNo,
 						LotNo: infoOptions.data[i].LotNo,
-						Qty: parseFloat(infoOptions.data[i].Qty), // 淇濈暀4浣嶅皬鏁扮簿搴�
+						Qty: parseFloat(formattedExQty),//parseFloat(infoOptions.data[i].Qty), // 淇濈暀4浣嶅皬鏁扮簿搴�
 						IsBale: infoOptions.data[i].IsBale,
 						IsBelt: infoOptions.data[i].IsBelt,
-						ExQty: parseFloat(formattedExQty),
+						//ExQty: parseFloat(formattedExQty),
 
 					};
 					DataList.push(item);
diff --git a/HTML/views/SOSetting/PalletNoOut.html b/HTML/views/SOSetting/PalletNoOut.html
index 7d74145..39ce3db 100644
--- a/HTML/views/SOSetting/PalletNoOut.html
+++ b/HTML/views/SOSetting/PalletNoOut.html
@@ -88,13 +88,7 @@
 							<div class="layui-input-inline">
 								<select name="PickingArea" id="PickingArea" lay-search>
 									<option value=""></option>
-									<option value="B020101">涓�妤�-1</option>
-									<option value="B020102">涓�妤�-2</option>
-									<option value="B020103">涓�妤�-3</option>
-									<option value="B020104">涓�妤�-4</option>
-									<option value="B050101">浜屾ゼ-1</option>
-									<option value="B050102">浜屾ゼ-2</option>
-									<option value="B050103">浜屾ゼ-3</option>
+									
 								</select>
 							</div>
 						</div>
@@ -405,8 +399,17 @@
 				 //鐩戝惉鏁版嵁鎿嶄綔
 				table.on('tool(LAY-app-content-list)', function(obj) {
 					var data = obj.data; 
-					 
+		
 					if(obj.event === 'outKu'){
+						$("#PickingArea").empty();
+						$("#PickingArea").append('<option value =""></option>');
+						if(data.WareHouseNo=='W02'){
+							$("#PickingArea").append('<option value ="B020101">涓�妤�-1</option><option value ="B020102">涓�妤�-2</option><option value ="B020103">涓�妤�-3</option><option value="B020104">涓�妤�-4</option><option value="B050101">浜屾ゼ-1</option><option value="B050102">浜屾ゼ-2</option><option value="B050103">浜屾ゼ-3</option>');
+						}else if(data.WareHouseNo=='W01'){
+							$("#PickingArea").append('<option value="17">17宸ヤ綅</option><option value="18">18宸ヤ綅</option>');
+						}
+						form.render('select');
+
 						layer.open({
 							type: 1,
 							title: '纭鍑哄簱鍙�',
diff --git a/HTML/views/StatisticalReport/InventoryStatistics.html b/HTML/views/StatisticalReport/InventoryStatistics.html
index 366acfa..304179f 100644
--- a/HTML/views/StatisticalReport/InventoryStatistics.html
+++ b/HTML/views/StatisticalReport/InventoryStatistics.html
@@ -149,6 +149,22 @@
 								placeholder="缁撴潫鏃堕棿">
 						</div>
 					</div> -->
+					<div class="layui-inline">
+						<label class="layui-form-label" style="width: 60px;">鎵�灞炰粨搴�</label>
+						<div class="layui-input-inline">
+							<select name="WareHouseNo" id="WareHouseNo" lay-filter="getWareHouseNo" lay-search>
+								<option value=""></option>
+							</select>
+						</div>
+					</div>
+					<div class="layui-inline">
+						<label class="layui-form-label" style="width: 60px;">鎵�灞炲尯鍩�</label>
+						<div class="layui-input-inline">
+							<select name="AreaNo" id="AreaNo" lay-filter="getAreaNo" lay-search>
+								<option value=""></option>
+							</select>
+						</div>
+					</div>
 					<div class="layui-inline sousuo">
 						<button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
 							lay-filter="LAY-app-contlist-search">
@@ -306,7 +322,7 @@
 			var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//灏嗚〃澶存暟鎹繘琛寀rl缂栫爜
 			//#endregion
 			//鑾峰彇鎬婚噺淇℃伅
-			function refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus) {
+			function refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus, WareHouseNo, AreaNo) {
 				//#region 鑷畾涔夎〃澶�
 				var colsJson
 				var param1 = {
@@ -347,6 +363,8 @@
 						LotNo: LotNo, //鎵规鍙�
 						Status: Status, //搴撳瓨鐘舵�� = $("#Status").val();
 						InspectStatus: InspectStatus, //璐ㄦ鐘舵�� = $("#InspectStatus").val();
+						WareHouseNo:WareHouseNo, //鎵�灞炰粨搴�
+						AreaNo:AreaNo//鎵�灞炲尯鍩�
 					};
 					sendData(IP + "/Statistical/GetInventoryList", param, 'get', function (res) {
 						console.log(res)
@@ -381,7 +399,9 @@
 				var OwnerName = $("#OwnerName").val();
 				var Status = $("#Status").val();
 				var InspectStatus = $("#InspectStatus").val();
-				refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus);
+				var WareHouseNo = $("#WareHouseNo").val();
+				var AreaNo = $("#AreaNo").val();
+				refreshTable(SelectType, SkuNo, SkuName, OwnerNo, OwnerName, LotNo, Status, InspectStatus, WareHouseNo, AreaNo);
 
 			});
 
@@ -414,6 +434,51 @@
 
 
 			});
+			//鑾峰彇浠撳簱涓嬫媺妗嗕俊鎭�
+			sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function (res) {
+				if (res.code == 0) { //鎴愬姛
+					for (var i = 0; i < res.data.length; i++) {
+						$("#WareHouseNo").append('<option value =' + res.data[i].WareHouseNo + '>' + res.data[i].WareHouseNo + '-' +
+							res.data[i].WareHouseName + '</option>');
+					}
+					form.render('select');
+				} else { //涓嶆垚鍔�
+					layer.msg(res.msg, {
+						icon: 2,
+						time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+					}, function () { });
+				}
+			});
+
+			getAR("");
+			form.on('select(getWareHouseNo)', function (data) {
+				console.log(data);
+				getAR(data.value);
+			});
+			function getAR(val) {
+				//鑾峰彇 鍖哄煙涓嬫媺妗�
+				sendData(IP + "/Sys/GetStorageAreaByHouseNo?wareHouseNo=" + val, {}, 'get', function (res) {
+					$("#AreaNo").empty();
+					$("#AreaNo").append('<option value =""></option>');
+					if (res.code == 0) { //鎴愬姛 
+						for (var i = 0; i < res.data.length; i++) {
+							$("#AreaNo").append('<option value =' + res.data[i].AreaNo + '>' + res.data[i].AreaNo + '-' +
+								res.data[i].AreaName + '</option>');
+						}
+						form.render('select');
+					} else { //涓嶆垚鍔�
+						layer.msg('鑾峰彇鍖哄煙淇℃伅澶辫触', {
+							icon: 2,
+							time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+						}, function () {
+							//鍥炶皟
+							form.render('select');
+						});
+					}
+				});
+
+			};
+
 			//#region 鑷畾涔夎〃澶�
 			//鑷畾涔夎〃澶�			
 			active = {
diff --git a/Pda/View/SoSetting/productOut.html b/Pda/View/SoSetting/productOut.html
index 0ffac4f..2b109a4 100644
--- a/Pda/View/SoSetting/productOut.html
+++ b/Pda/View/SoSetting/productOut.html
@@ -288,7 +288,7 @@
 										</div>
 									</td>
 								</tr> -->
-								<tr>
+								<!-- <tr>
 									<td>
 										<div class="layui-form-item layout-input" style="margin-top: 6px;">
 											<label class="layui-form-label lableWidth">杩芥函鏉$爜锛�</label>
@@ -298,15 +298,14 @@
 											</div>
 										</div>
 									</td>
-								</tr>
+								</tr> -->
 								<tr class="divPickQty1">
 									<td>
 										<div class="layui-form-item layout-input" style="margin-top: 6px;">
 											<label class="layui-form-label lableWidth">鎷h揣鏁伴噺锛�</label>
 											<div class="layui-input-block">
 												<input id="pickQty1" type="number" placeholder="璇疯緭鍏ユ嫞璐ф暟閲�"
-													autocomplete="off" class="layui-input"
-													oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
+													autocomplete="off" class="layui-input">
 											</div>
 										</div>
 									</td>
@@ -971,20 +970,20 @@
 						});
 						return;
 					}
-					if (($('#boxNo3').val() != "" && ($('#pickQty1').val() != "" || $('#pickQty1').val() != 0))) {
-						layer.msg("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏ワ紒", {
-							icon: 2,
-							time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
-						});
-						return;
-					}
-					if ($('#pickQty1').val() != "" && $('#pickQty1').val() > parseInt($('#pickQty').val())) {
-						layer.msg("鎷h揣鏁伴噺涓嶈兘澶т簬寰呮嫞鏁伴噺锛�", {
-							icon: 2,
-							time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
-						});
-						return;
-					}
+					// if (($('#boxNo3').val() != "" && ($('#pickQty1').val() != "" || $('#pickQty1').val() != 0))) {
+					// 	layer.msg("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏ワ紒", {
+					// 		icon: 2,
+					// 		time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+					// 	});
+					// 	return;
+					// }
+					// if ($('#pickQty1').val() != "" && $('#pickQty1').val() > parseInt($('#pickQty').val())) {
+					// 	layer.msg("鎷h揣鏁伴噺涓嶈兘澶т簬寰呮嫞鏁伴噺锛�", {
+					// 		icon: 2,
+					// 		time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+					// 	});
+					// 	return;
+					// }
 				}
 				// let boxQty = parseInt($('#boxQty').val())
 				// let qty = parseInt($('#qty').val()) 
@@ -1017,7 +1016,7 @@
 					"SoDetailId": $("#skuLotNo").val(),
 					"PalletNo": $('#palletNo').val(),
 					"BoxNo": $('#boxNo').val(),
-					"BoxNo3": $('#boxNo3').val(),
+					//"BoxNo3": $('#boxNo3').val(),
 					"PickQty": $('#pickQty1').val()
 				}
 				sendData(IP + "/PdaSo/SoSetPick", param, 'post', function (res) {
diff --git a/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs b/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
index 585aeea..8ff0456 100644
--- a/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
+++ b/Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
@@ -777,10 +777,10 @@
                     return "-1:鍏ュ簱鍗曠姸鎬佸凡鍙樻洿锛屼笉鍙垹闄�!";
 
                 }
-                if (asnModel.Origin != "褰曞叆" && asnModel.Origin != "閲囪喘鍗�")
-                {
-                    return "-1:涓婃父绯荤粺涓嬪彂鐨勫崟鎹紝涓嶅彲鍒犻櫎;";
-                }
+                //if (asnModel.Origin != "褰曞叆" && asnModel.Origin != "閲囪喘鍗�")
+                //{
+                //    return "-1:涓婃父绯荤粺涓嬪彂鐨勫崟鎹紝涓嶅彲鍒犻櫎;";
+                //}
 
                 // 鍒犻櫎鎬诲崟
                 var editDateTime = DateTime.Now;
diff --git a/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs b/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
index a8f25c3..6296674 100644
--- a/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
+++ b/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
@@ -534,8 +534,17 @@
                 {
                     throw new Exception("鏈煡璇㈠埌鍗曟嵁鏄庣粏淇℃伅锛岃鏍稿疄");
                 }
+                var skuInfo = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == asnDetail.SkuNo);
+                if (skuInfo == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鐗╂枡淇℃伅锛岃鏍稿疄");
+                }
+                if (string.IsNullOrEmpty(skuInfo.PackagNo))
+                {
+                    throw new Exception("鏈煡璇㈠埌鐗╂枡鐨勫寘瑁呬俊鎭紝璇锋牳瀹�");
+                }
 
-                var packInfo = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == asnDetail.PackagNo);
+                var packInfo = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo);
                 if (packInfo == null)
                 {
                     throw new Exception("鏈煡璇㈠埌鍗曟嵁鏄庣粏涓殑鐗╂枡鍖呰淇℃伅");
@@ -781,7 +790,6 @@
                             maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length-6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0');
                         }
 
-                        DateTime? storeTime2 = null;
                         // 灏嗘潯鐮佷繚瀛樺埌鍘熸枡鏉$爜琛�
                         var labelModel = new BllBoxInfo()
                         {
@@ -801,14 +809,26 @@
                             BitBoxMark = bNum > boxQty ? "1" : "0",
                             InspectStatus = "0",
 
-                            ProductionTime = DateTime.Parse(productionTime),
-                            StoreTime = string.IsNullOrWhiteSpace(storeTime) ? storeTime2 : DateTime.Parse(storeTime ),
-                            ExpirationTime = DateTime.Parse(expirationTime),
+                            ProductionTime = null,
+                            StoreTime = null,
+                            ExpirationTime = null,
 
                             Origin = "WMS鐢熸垚",
                             CreateUser = userId,
                             CreateTime = DateTime.Now,
                         };
+                        if (!string.IsNullOrEmpty(productionTime))
+                        {
+                            labelModel.ProductionTime = DateTime.Parse(productionTime);
+                        }
+                        if (!string.IsNullOrEmpty(storeTime))
+                        {
+                            labelModel.StoreTime = DateTime.Parse(storeTime);
+                        }
+                        if (!string.IsNullOrEmpty(expirationTime))
+                        {
+                            labelModel.ExpirationTime = DateTime.Parse(expirationTime);
+                        }
 
                         Db.Insertable(labelModel).ExecuteCommand();
                         modelList.Add(labelModel);
@@ -953,14 +973,26 @@
                                 BitBoxMark = bNum > boxQty ? "1" : "0",
                                 InspectStatus = "0",
 
-                                ProductionTime = DateTime.Parse(productionTime),
-                                StoreTime = DateTime.Parse(storeTime),
-                                ExpirationTime = DateTime.Parse(expirationTime),
+                                ProductionTime = null,
+                                StoreTime = null,
+                                ExpirationTime = null,
 
                                 Origin = "WMS鐢熸垚",
                                 CreateUser = userId,
                                 CreateTime = DateTime.Now,
                             };
+                            if (!string.IsNullOrEmpty(productionTime))
+                            {
+                                labelModel.ProductionTime = DateTime.Parse(productionTime);
+                            }
+                            if (!string.IsNullOrEmpty(storeTime))
+                            {
+                                labelModel.StoreTime = DateTime.Parse(storeTime);
+                            }
+                            if (!string.IsNullOrEmpty(expirationTime))
+                            {
+                                labelModel.ExpirationTime = DateTime.Parse(expirationTime);
+                            }
 
                             Db.Insertable(labelModel).ExecuteCommand();
                             modelList.Add(labelModel);
diff --git a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
index 657aebb..f854f15 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -126,11 +126,11 @@
                     throw new Exception("褰撳墠鐗╂枡鍙婃壒娆′笌鍗曟嵁鏃犲叧鑱旓紝璇锋牳瀹�!");
                 }
                 //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱澶�
-                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
-                if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo))
-                {
-                    throw new Exception("璇ユ墭鐩樺凡鏈夊偍浣嶄俊鎭紝涓嶅彲缁勬墭锛岃鏍稿疄锛�");
-                }
+                //var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
+                //if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo))
+                //{
+                //    throw new Exception("璇ユ墭鐩樺凡鏈夊偍浣嶄俊鎭紝涓嶅彲缁勬墭锛岃鏍稿疄锛�");
+                //}
 
                 #endregion
 
@@ -272,13 +272,13 @@
                     }
 
                     // 鍒ゆ柇搴撳瓨鏄庣粏鏄惁宸叉湁姝ゆ墭鐩樹俊鎭�  
-                    var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo);
+                    var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && m.LotNo == detail.LotNo && m.SkuNo == detail.SkuNo);// && m.ASNDetailNo == bind.ASNDetailNo
                     var sdId1 = 0;
                     if (sd1 != null)
                     {
                         sdId1 = sd1.Id;
                         // 搴撳瓨宸插瓨鍦� 鏇存柊鏁版嵁
-                        sd1.Qty = bind.Qty;
+                        sd1.Qty += bind.Qty;
                         sd1.CompleteTime = comTime;
                         sd1.UpdateUser = userId;
                         sd1.UpdateTime = comTime;
@@ -286,7 +286,7 @@
                         Db.Updateable(sd1).ExecuteCommand();
                     }
                     else
-                    {
+                    {                        
                         // 搴撳瓨涓嶅瓨鍦� 鎻掑叆鏁版嵁
                         sd1 = new DataStockDetail()
                         {
@@ -325,6 +325,14 @@
                             CreateUser = 0,
                             CreateTime = comTime
                         };
+                        var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == sd1.PalletNo && !string.IsNullOrEmpty(w.LocatNo));
+                        if (palletData != null)
+                        {
+                            sd1.WareHouseNo = palletData.WareHouseNo;
+                            sd1.RoadwayNo = palletData.RoadwayNo;
+                            sd1.AreaNo = palletData.AreaNo;
+                            sd1.LocatNo = palletData.LocatNo;
+                        }
 
                         //缁存姢搴撳瓨鏄庣粏璐т富/渚涘簲鍟嗕俊鎭� //0:鎴愬搧鍏ュ簱锛�2:涓棿鍝佸叆搴�,4:杞﹂棿浣欐枡鍏ュ簱,6:浠e偍鍏ュ簱,7:瀵勫瓨鍏ュ簱
                         if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")
@@ -484,6 +492,10 @@
                     }
                     detail.UpdateUser = userId;
                     detail.UpdateTime = comTime;
+                    if (notice.Type == "4" || notice.Type == "8")
+                    {
+                        detail.InspectStatus = "1";//杞﹂棿閫�鏂欓粯璁ゆ楠屽悎鏍�
+                    }
                     //鏇存柊鍏ュ簱鍗曟槑缁�
                     Db.Updateable(detail).ExecuteCommand();
 
@@ -504,7 +516,10 @@
                     #endregion
 
                     #region 搴撳瓨鏄庣粏
-                    sd1.Qty = bind.Qty;
+                    if (sd1.Qty <= 0)
+                    {
+                        sd1.Qty = bind.Qty;
+                    }
                     //鏇存敼搴撳瓨鏄庣粏鏁伴噺
                     Db.Updateable(sd1).Where(m => m.Id == sdId1).ExecuteCommand();
                     #endregion
@@ -1822,7 +1837,7 @@
 
                     }
                 }
-                else if (notice.Type == "1" || notice.Type == "4") //閲囪喘鍏ュ簱
+                else if (notice.Type == "1" || notice.Type == "4" || notice.Type == "8") //閲囪喘鍏ュ簱
                 {
                     string sqlString = $@"SELECT 
                                             ASNNo,
@@ -2726,7 +2741,7 @@
                         ExpirationTime = boxInfoOne.ExpirationTime,
                         Status = "0",
                         InspectMark = boxInfoOne.InspectMark,
-                        InspectStatus = sku.IsInspect,
+                        InspectStatus = "1",//sku.IsInspect,//浠庤溅闂村叆搴撶殑璐ㄦ鐘舵�侀粯璁ゅ悎鏍�
                         BitPalletMark = "1",
                         PackagNo = sku.PackagNo,
 
diff --git a/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
index 314ce04..2f0e325 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -1585,9 +1585,9 @@
                 }
                 //寮�鍚簨鍔�
                 Db.BeginTran();
-                
+
                 //搴撳瓨绠辨敮鏄庣粏淇℃伅
-                var boxList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList();
+                var boxList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo && w.Status == "2").ToList();
                 if (boxList.Count != 1)
                 {
                     throw new Exception("璇ョ鐮佷俊鎭敊璇紝瀛樺湪澶氫釜姝ょ鐮佷俊鎭�");
diff --git a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
index 9cfa5f7..d0ca543 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -92,7 +92,7 @@
                 }
                 //鍑哄簱鍒嗛厤淇℃伅
                 var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m =>
-                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo &&
+                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo &&
                     m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo);
                 if (allot == null)
                 {
@@ -322,7 +322,7 @@
                 else
                 {
                     List<DataBoxInfo> boxInfos;
-                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo);
+                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo && m.Status == "2");
                     if (await boxInfo.CountAsync() == 0)
                     {
                         throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅");
@@ -1852,7 +1852,7 @@
                 return allotList;
             }
             //鑾峰彇鐘舵�佷负寰呮嫞璐ф垨鑰呴儴鍒嗘嫞璐х殑鍑哄簱鍗�
-            var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync();
+            var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync();
 
             //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
             //鑾峰彇鍑哄簱鍗曟嵁涓嶄负寰呮嫞璐� 鎵ц瀹屾瘯 璁㈠崟鍏抽棴 绛夊緟鎵ц鐨勫崟鎹�
@@ -1927,7 +1927,7 @@
                 throw Oops.Bah("鎵樼洏鐮佷负绌猴紝璇疯緭鍏ユ墭鐩樼爜");
             }
             //鑾峰彇鐘舵�佷负寰呮嫞璐ф垨鑰呴儴鍒嗘嫞璐х殑鍑哄簱鍗�
-            var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo);
+            var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo);
             //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SONo == soNo && m.Status != "4" && m.Status != "5");
             if (!string.IsNullOrWhiteSpace(soNo))
             {
@@ -1949,7 +1949,7 @@
         //鑾峰彇鍑哄簱鍙c�佽鏍笺�佸緟鎷e強宸叉嫞鏁伴噺锛堟牴鎹嚭搴撳崟鏄庣粏ID銆佹墭鐩樺彿锛�
         public async Task<OutPdaInfo> GetOutlets(string soDetailId, string palletNo)
         {
-            var allotInfo = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync();
+            var allotInfo = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3" || m.Status == "5")).ToListAsync();
             if (allotInfo.Count == 0)
             {
                 throw Oops.Bah($"{palletNo}鎵樼洏涓婃湭鏌ヨ鍒板垎閰嶄俊鎭紝璇锋牳瀹�");
@@ -2033,7 +2033,7 @@
             }
             if (!string.IsNullOrWhiteSpace(soDetailId))
             {
-                var allotInfos = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync();
+                var allotInfos = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3" || m.Status == "5")).ToListAsync();
                 if (allotInfos.Count == 0)
                 {
                     throw Oops.Bah($"{palletNo}鎵樼洏涓婃湭鏌ヨ鍒板垎閰嶄俊鎭紝璇锋牳瀹�");
@@ -2603,6 +2603,510 @@
             }
         }
 
+        /// <summary>
+        /// 鍑哄簱pda鎷h揣-JC34
+        /// </summary>
+        /// <param name="soNo"></param>
+        /// <param name="soDetailId"></param>
+        /// <param name="palletNo"></param>
+        /// <param name="boxNo">绠辩爜/鐩掔爜/鏀爜</param>
+        /// <param name="pickQty1"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public async Task SoSetPick34(string soNo, string soDetailId, string palletNo, string boxNo, string pickQty1, int userId)
+        {
+            Db.BeginTran();
+            try
+            {
+                #region 鍒ゆ柇
+
+                if (string.IsNullOrWhiteSpace(soNo))
+                {
+                    throw Oops.Bah("鍑哄簱鍗曟嵁涓嶈兘涓虹┖");
+                }
+                if (string.IsNullOrWhiteSpace(soDetailId))
+                {
+                    throw Oops.Bah("鍑哄簱鐗╂枡-鎵规涓嶈兘涓虹┖");
+                }
+                if (string.IsNullOrWhiteSpace(palletNo))
+                {
+                    throw Oops.Bah("鎵樼洏鐮佷笉鑳戒负绌�");
+                }
+                //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)
+                //{
+                //    throw Oops.Bah("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�");
+                //}
+
+                //鍑哄簱鍗�
+                var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo);
+                if (notice == null)
+                {
+                    throw Oops.Bah("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�");
+                }
+                if (notice.Status != "3" && notice.Status != "4")
+                {
+                    throw Oops.Bah("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛岋紝涓嶈兘鎷h揣");
+                }
+                //鍑哄簱鍗曟槑缁�
+                var noticeDetail = await Db.Queryable<BllExportNoticeDetail>()
+                    .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
+                if (noticeDetail == null)
+                {
+                    throw Oops.Bah("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�");
+                }
+                //鍑哄簱鍒嗛厤淇℃伅
+                var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m =>
+                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo &&
+                    m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo);
+                if (allot == null)
+                {
+                    throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅");
+                }
+                //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級
+                var needQty = allot.Qty - allot.CompleteQty;
+
+                //搴撳瓨鏄庣粏
+                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId);
+                if (stockDetail == null)
+                {
+                    throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�");
+                }
+                //搴撳瓨鎬昏〃
+                var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
+                if (stock == null)
+                {
+                    throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�");
+                }
+                #endregion
+
+                if (string.IsNullOrWhiteSpace(boxNo))//鏁存墭鎷h揣
+                {
+                    List<DataBoxInfo> boxInfos;
+                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo);//鎵惧埌鎵樼洏涓婃墍鏈夌鐮�
+                    boxInfos = await boxInfo.ToListAsync();
+                    if (boxInfo.Count() <= 0)
+                    {
+                        throw Oops.Bah("璇ユ墭鐩樹笂娌℃湁鍙嫞璐х殑绠卞瓙");
+                    }
+                    var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync();
+                    if (boxQty[0] > needQty)
+                    {
+                        throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺");
+                    }
+                    decimal pickQty = 0;//鎷h揣鐨勬暟閲�
+                    var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync();
+                    var comList = new List<BllCompleteDetail>();
+                    foreach (var item in boxInfos)
+                    {
+                        if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3) && item.BoxNo3 != null)
+                        {
+                            throw Oops.Bah($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣");
+                        }
+                        if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo)
+                        {
+                            throw Oops.Bah("褰撳墠鎵樼洏涓婃湁鍏朵粬涓嶅悓鐗╂枡鎵规锛屾嫞璐уけ璐�");
+                        }
+                        //娣诲姞鎷h揣鏄庣粏
+                        var completeDetail = new BllCompleteDetail()
+                        {
+                            SONo = soNo,
+                            SODetailNo = int.Parse(soDetailId),
+                            ExportAllotId = allot.Id,
+                            StockId = allot.StockId,
+                            BoxNo = item.BoxNo,
+                            BoxNo2 = item.BoxNo2,
+                            BoxNo3 = item.BoxNo3,
+
+                            LotNo = allot.LotNo,
+                            LotText = allot.LotText,
+                            SupplierLot = allot.SupplierLot,
+                            SkuNo = allot.SkuNo,
+                            SkuName = allot.SkuName,
+                            Standard = allot.Standard,
+                            PalletNo = palletNo,
+                            CompleteQty = item.Qty,
+
+                            CreateUser = userId
+                        };
+                        comList.Add(completeDetail);
+
+                        //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
+                        await Db.Deleteable(item).ExecuteCommandAsync();
+                        pickQty += item.Qty;
+                    }
+                    //娣诲姞鎷h揣鏄庣粏
+                    await Db.Insertable(comList).ExecuteCommandAsync();
+                    //淇敼鍑哄簱鍒嗛厤淇℃伅
+                    allot.CompleteQty += pickQty;
+                    allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3";
+                    allot.UpdateTime = DateTime.Now;
+                    await Db.Updateable(allot).ExecuteCommandAsync();
+                    //鍒犻櫎搴撳瓨鏄庣粏
+                    await Db.Deleteable(stockDetail).ExecuteCommandAsync();
+                    //鍒犻櫎鎴栦慨鏀瑰簱瀛�
+                    stock.Qty -= pickQty;
+                    stock.LockQty -= pickQty;
+                    if (stock.LockQty < 0)
+                    {
+                        stock.LockQty = 0;
+                    }
+                    if (stock.Qty <= 0)
+                    {
+                        await Db.Deleteable(stock).ExecuteCommandAsync();
+                    }
+                    else
+                    {
+                        await Db.Updateable(stock).ExecuteCommandAsync();
+                    }
+                    //鍒ゆ柇鎵樼洏涓婅繕鏈夋病鏈夊叾浠栫墿鏂�
+                    var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && w.Id != stockDetail.Id);
+                    if (palletData == null)
+                    {
+                        //鏀瑰彉鎵樼洏鐘舵�佷负锛氭湭浣跨敤
+                        var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
+                        if (pallet == null)
+                        {
+                            throw Oops.Bah("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�");
+                        }
+                        pallet.Status = "0";
+                        await Db.Updateable(pallet).ExecuteCommandAsync();
+                    }
+
+                    //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲�
+                    noticeDetail.CompleteQty += pickQty;
+                    await Db.Updateable(noticeDetail).ExecuteCommandAsync();
+
+                    var num = await Db.Queryable<BllExportNoticeDetail>()
+                        .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
+                    if (num <= 0)
+                    {
+                        notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴�
+                        //淇敼鍑哄簱鍗曚俊鎭�
+                        await Db.Updateable(notice).ExecuteCommandAsync();
+                        if (notice.IsWave == "1")
+                        {
+                            var waveNum = await Db.Queryable<BllExportNotice>().CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4");
+                            if (waveNum == 0)
+                            {
+                                var wave = await Db.Queryable<BllWaveMage>().FirstAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo);
+                                if (wave != null)
+                                {
+                                    wave.Status = "4";
+                                    wave.UpdateUser = userId;
+                                    wave.UpdateTime = DateTime.Now;
+                                    await Db.Updateable(wave).ExecuteCommandAsync();
+                                }
+                            }
+                        }
+                    }
+
+                }
+                else
+                {
+                    var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暣鐩掓嫞璐с�� 2锛氭暎鏀嫞璐с��3锛氭暟閲忔嫞璐�
+                    List<DataBoxInfo> boxInfos;
+                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo);
+                    if (await boxInfo.CountAsync() == 0)
+                    {
+                        biaoShi = "1";
+                        boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo2 == boxNo);
+                        if (await boxInfo.CountAsync() == 0)
+                        {
+                            biaoShi = "2";
+                            boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo3 == boxNo);
+                            if (await boxInfo.CountAsync() == 0)
+                            {
+                                throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅");
+                            }
+                        }
+                    }
+                    if (biaoShi == "0" && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)
+                    {
+                        biaoShi = "3";
+                    }
+                    if (biaoShi == "2" && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)
+                    {
+                        throw Oops.Bah("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�");
+                    }
+                    boxInfos = await boxInfo.ToListAsync();
+
+                    var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList();
+                    if (biaoShi == "2") //鏁f敮鎷h揣
+                    {
+                        boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo).ToList();
+
+                        if (boxInfos.Count() == 0)
+                        {
+                            throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅");
+                        }
+                        if (boxInfos.Count() > 1)
+                        {
+                            throw Oops.Bah("璇ヨ拷婧敮鐮佺殑淇℃伅澶т簬1鏉★紝淇℃伅閿欒锛岃鏍稿疄锛�");
+                        }
+
+                        if (boxInfos.Any(m => m.PalletNo != palletNo))
+                        {
+                            throw Oops.Bah("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴");
+                        }
+                        var boxQty = boxInfos.First().Qty;
+                        //if (boxQty > needQty)
+                        //{
+                        //    throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺");
+                        //}
+
+                        foreach (var item in boxInfos)
+                        {
+                            if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3))
+                            {
+                                throw Oops.Bah($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣");
+                            }
+                        }
+                    }
+                    else if (biaoShi == "1")//鏁寸洅鎷h揣
+                    {
+                        if (boxInfo.Count() == 0)
+                        {
+                            throw Oops.Bah("鏈煡璇㈠埌璇ョ洅鐮佺殑淇℃伅");
+                        }
+                        if (boxInfo.Any(m => m.PalletNo != palletNo))
+                        {
+                            throw Oops.Bah("璇ユ墭鐩樹笌鐩掔爜娌℃湁缁戝畾鍏崇郴");
+                        }
+                        var boxQty = await boxInfo.GroupBy(m => m.BoxNo2).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync();
+                        //if (boxQty[0] > needQty)
+                        //{
+                        //    throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺");
+                        //}
+
+                        foreach (var item in boxInfos)
+                        {
+                            if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3))
+                            {
+                                throw Oops.Bah($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣");
+                            }
+                        }
+                    }
+                    else if (biaoShi == "3")//鏁伴噺鎷h揣
+                    {
+                        if (boxInfo.Count() > 1)
+                        {
+                            throw Oops.Bah("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣");
+                        }
+                        decimal boxQty = boxInfo.First().Qty;
+                        if (Convert.ToDecimal(pickQty1) > boxQty)
+                        {
+                            throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺");
+                        }
+                        //if (Convert.ToInt32(pickQty1) > needQty)
+                        //{
+                        //    throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺");
+                        //}
+                    }
+                    else //鏁寸鎷h揣
+                    {
+                        if (boxInfo.Count() == 0)
+                        {
+                            throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅");
+                        }
+                        if (boxInfo.Any(m => m.PalletNo != palletNo))
+                        {
+                            throw Oops.Bah("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴");
+                        }
+                        var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync();
+                        //if (boxQty[0] > needQty)
+                        //{
+                        //    throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺");
+                        //}
+
+                        foreach (var item in boxInfos)
+                        {
+                            if (comDetailList.Any(m => m.BoxNo == item.BoxNo))
+                            {
+                                throw Oops.Bah($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣");
+                            }
+                        }
+                    }
+                    decimal pickQty = 0;//鎷h揣鐨勬暟閲�
+
+                    var comList = new List<BllCompleteDetail>();
+                    foreach (var item in boxInfos)
+                    {
+                        //娣诲姞鎷h揣鏄庣粏
+                        var completeDetail = new BllCompleteDetail()
+                        {
+                            SONo = soNo,
+                            SODetailNo = int.Parse(soDetailId),
+                            ExportAllotId = allot.Id,
+                            StockId = allot.StockId,
+                            BoxNo = item.BoxNo,
+                            BoxNo2 = item.BoxNo2,
+                            BoxNo3 = item.BoxNo3,
+
+                            LotNo = allot.LotNo,
+                            LotText = allot.LotText,
+                            SupplierLot = allot.SupplierLot,
+                            SkuNo = allot.SkuNo,
+                            SkuName = allot.SkuName,
+                            Standard = allot.Standard,
+                            PalletNo = palletNo,
+                            CompleteQty = biaoShi == "3" ? decimal.Parse(pickQty1) : item.Qty,
+
+                            CreateUser = userId
+                        };
+                        comList.Add(completeDetail);
+
+                        if (biaoShi != "3")
+                        {
+                            //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
+                            await Db.Deleteable(item).ExecuteCommandAsync();
+
+                            pickQty += item.Qty;
+                        }
+                        else//鏁伴噺鎷h揣
+                        {
+                            if (decimal.Parse(pickQty1) == item.Qty)
+                            {
+                                //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
+                                await Db.Deleteable(item).ExecuteCommandAsync();
+                            }
+                            else
+                            {
+                                item.Qty -= decimal.Parse(pickQty1);
+                                item.BitBoxMark = "1";//闆剁鏍囪瘑
+                                await Db.Updateable(item).ExecuteCommandAsync();
+                            }
+                            pickQty += decimal.Parse(pickQty1);
+                        }                        
+                    }
+                    //鏀瑰彉搴撳唴绠辩爜鏄惁闆剁淇℃伅
+                    if (biaoShi == "1" || biaoShi == "2")
+                    {
+                        var boxSurplusList = new List<DataBoxInfo>();
+                        if (biaoShi == "1")
+                        {
+                            boxSurplusList = boxInfo.Where(m => m.BoxNo2 != boxNo).ToList();
+                        }
+                        else
+                        {
+                            boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo).ToList();
+                        }
+                        foreach (var item in boxSurplusList)
+                        {
+                            item.BitBoxMark = "1";
+                            await Db.Updateable(item).ExecuteCommandAsync();
+                        }
+                    }
+
+                    await Db.Insertable(comList).ExecuteCommandAsync();
+                    //淇敼鍑哄簱鍒嗛厤淇℃伅
+                    allot.CompleteQty += pickQty;
+                    allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3";
+                    allot.UpdateTime = DateTime.Now;
+                    if (allot.Status == "5")
+                    {
+                        //鍒ゆ柇璇ユ墭鐩樻槸鍚﹁繕瀛樺湪鐗╂枡 瀛樺湪鏀逛负寰呭洖搴� 寰呭洖搴撳畬鎴愬悗鏀逛负宸插畬鎴�
+                    }
+                    await Db.Updateable(allot).ExecuteCommandAsync();
+
+                    //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁�
+                    stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇�
+                    stockDetail.Qty -= pickQty;
+                    stockDetail.LockQty -= pickQty;
+                    if (stockDetail.LockQty < 0)
+                    {
+                        stockDetail.LockQty = 0;
+                    }
+                    if (stockDetail.Qty == stockDetail.LockQty)
+                    {
+                        stockDetail.Status = "2";
+                    }
+                    else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0)
+                    {
+                        stockDetail.Status = "1";
+                    }
+                    else
+                    {
+                        stockDetail.Status = "0";
+                    }
+
+                    if (stockDetail.Qty <= 0)
+                    {
+                        await Db.Deleteable(stockDetail).ExecuteCommandAsync();
+                    }
+                    else
+                    {
+                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
+                    }
+                    stock.Qty -= pickQty;
+                    stock.LockQty -= pickQty;
+                    if (stock.LockQty < 0)
+                    {
+                        stock.LockQty = 0;
+                    }
+                    if (stock.Qty <= 0)
+                    {
+                        await Db.Deleteable(stock).ExecuteCommandAsync();
+                    }
+                    else
+                    {
+                        await Db.Updateable(stock).ExecuteCommandAsync();
+                    }
+                    var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo);
+                    if (num2 <= 0)
+                    {
+                        //鏀瑰彉鎵樼洏鐘舵��
+                        var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0");
+                        if (pallet == null)
+                        {
+                            throw Oops.Bah("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�");
+                        }
+                        pallet.Status = "0";
+                        await Db.Updateable(pallet).ExecuteCommandAsync();
+                    }
+                    //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲�
+                    noticeDetail.CompleteQty += pickQty;
+                    await Db.Updateable(noticeDetail).ExecuteCommandAsync();
+
+                    var num = await Db.Queryable<BllExportNoticeDetail>()
+                        .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
+                    if (num <= 0)
+                    {
+                        notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴�
+                        //淇敼鍑哄簱鍗曚俊鎭�
+                        await Db.Updateable(notice).ExecuteCommandAsync();
+                        if (notice.IsWave == "1")
+                        {
+                            var waveNum = await Db.Queryable<BllExportNotice>()
+                                .CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4");
+                            if (waveNum == 0)
+                            {
+                                var wave = await Db.Queryable<BllWaveMage>().FirstAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo);
+                                if (wave != null)
+                                {
+                                    wave.Status = "4";
+                                    wave.UpdateUser = userId;
+                                    wave.UpdateTime = DateTime.Now;
+                                    await Db.Updateable(wave).ExecuteCommandAsync();
+                                }
+                            }
+                        }
+                    }
+                }
+                //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鍑哄簱", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId);
+                Db.CommitTran();
+            }
+            //catch (AppFriendlyException e)
+            //{
+            //    Db.RollbackTran();
+            //}
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
         //鍑哄簱pda鎷h揣
         public async Task SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId)
         {
diff --git a/Wms/WMS.BLL/BllSoServer/CompleteDetailServer.cs b/Wms/WMS.BLL/BllSoServer/CompleteDetailServer.cs
index a0520ce..1c5336f 100644
--- a/Wms/WMS.BLL/BllSoServer/CompleteDetailServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/CompleteDetailServer.cs
@@ -70,11 +70,12 @@
         }
 
         //鏌ヨ鎷h揣鏄庣粏鏀爜璇︾粏淇℃伅
-        public List<CompleteDetailDto> GetCompBoxInfoList(string boxNo, string boxNo3)
+        public List<CompleteDetailDto> GetCompBoxInfoList(string sONo, string boxNo, string boxNo3)
         {
             try
             {
                 Expression<Func<BllCompleteDetail, bool>> item = Expressionable.Create<BllCompleteDetail>()
+                    .AndIF(!string.IsNullOrWhiteSpace(sONo), it => it.SONo == sONo.Trim())
                     .AndIF(!string.IsNullOrWhiteSpace(boxNo), it => it.BoxNo == boxNo.Trim())
                     .AndIF(!string.IsNullOrWhiteSpace(boxNo3), it => it.BoxNo3.Contains(boxNo3.Trim()))
                     .ToExpression();
@@ -90,6 +91,7 @@
                         ExportAllotId = a.ExportAllotId,
 
                         BoxNo = a.BoxNo,
+                        BoxNo2 = a.BoxNo2,
                         BoxNo3 = a.BoxNo3,
                         LotNo = a.LotNo,
                         LotText = a.LotText,
diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index 84724b2..139e9d3 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -30,6 +30,7 @@
 using System.Drawing.Drawing2D;
 using Model.ModelDto.LogDto;
 using AutoMapper.Internal;
+using System.Diagnostics.Contracts;
 
 namespace WMS.BLL.BllSoServer
 {
@@ -398,7 +399,7 @@
                             {
                                 throw new Exception("鎵规涓嶅彲涓虹┖!");
                             }
-                        }                        
+                        }
                         //搴撳瓨鏄庣粏
                         List<DataStockDetail> stockDetails;
                         //鎸囧畾鎵规
@@ -522,7 +523,7 @@
                                         q2 = q3;
                                     }
                                     if (q2 > d.skuQty - q1)
-                                    {                                        
+                                    {
                                         if (!dic.ContainsKey(stockInfo.Id))
                                         {
                                             dic.Add(stockInfo.Id, d.skuQty - q1);
@@ -535,7 +536,7 @@
                                         q1 += d.skuQty - q1;
                                     }
                                     else
-                                    {                                       
+                                    {
                                         if (!dic.ContainsKey(stockInfo.Id))
                                         {
                                             dic.Add(stockInfo.Id, (decimal)q2);
@@ -599,7 +600,7 @@
                     var notice = new BllExportNotice()
                     {
                         SONo = billNo,
-                        OrderCode=model.orderNo,
+                        OrderCode = model.orderNo,
                         Type = model.orderType,
                         Status = "0",
                         Origin = "SAP",
@@ -609,7 +610,7 @@
                         IsWave = "0",
                         WaveNo = "",
                         IsDespatch = "0",
-                        
+
                         CreateUser = 0,
                     };
                     if (houseNo == "1000" || houseNo == "1001" || houseNo == "2000" || houseNo == "2002" || houseNo == "2003" || houseNo == "2004")
@@ -775,14 +776,14 @@
                 throw new Exception(e.Message);
             }
         }
-        
+
         //鐢熶骇鍙枡
         public bool MESProductionCall(ProductionCallVm model)
         {
             try
             {
                 //楠岃瘉鏄惁澶囨枡瀹屾垚
-                var notice = Db.Queryable<BllExportNotice>().First(m=>m.IsDel == "0" && m.OrderCode == model.OrderCode);
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.OrderCode == model.OrderCode);
                 if (notice == null)
                 {
                     throw new Exception("鏈煡璇㈠埌姝ゅ伐鍗曞彿");
@@ -803,7 +804,7 @@
                     throw new Exception("褰撳墠鍗曟嵁鐗╂枡鍦ㄦ鎶曟枡鍙e彨鏂欎俊鎭凡鏀跺埌锛屾棤闇�閲嶅涓嬪彂");
                 }
                 //鍒ゆ柇褰撳墠鎶曟枡鍙f槸鍚︽湁鍏跺畠宸ュ崟鎶曟枡
-                var call2 = Db.Queryable<BllProductionCallTask>().First(m => m.IsDel == "0" && m.PutInLocation == model.PutInLocation && m.OrderCode != model.OrderCode );
+                var call2 = Db.Queryable<BllProductionCallTask>().First(m => m.IsDel == "0" && m.PutInLocation == model.PutInLocation && m.OrderCode != model.OrderCode);
                 if (call2 != null)
                 {
                     throw new Exception("姝ゆ姇鏂欏彛鏈夊叾瀹冨崟鎹墿鏂欏彨鏂欎俊鎭�");
@@ -834,7 +835,7 @@
                     foreach (var pro in proCallList)
                     {
                         foreach (var item in locateList)
-                        { 
+                        {
                             //鑾峰彇澶囧ソ鏂欑殑鎵樼洏淇℃伅
                             var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "2" && m.SONo == notice.SONo && m.SkuNo == pro.SkuNo && !list.Contains(m.Id)).Select(m => m.PalletNo).ToList();
 
@@ -862,7 +863,7 @@
                             };
                             Db.Insertable(exTask).ExecuteCommand();
                             //鏇存敼鍒嗛厤琛ㄧ殑浠诲姟鍙峰垪
-                            var allot = Db.Queryable<BllExportAllot>().First(m=>m.IsDel == "0" && m.Status =="2" && m.SONo == notice.SONo &&  m.StockId == stockDetail.Id);
+                            var allot = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "2" && m.SONo == notice.SONo && m.StockId == stockDetail.Id);
                             allot.TaskNo = taskNo;
                             Db.Updateable(allot).ExecuteCommand();
                             list.Add(allot.Id);
@@ -871,14 +872,14 @@
                             item.PalletNo = stockDetail.PalletNo;
                             Db.Updateable(item).ExecuteCommand();
 
-                            var locate = Db.Queryable<SysStorageLocat>().First(m=>m.LocatNo == stockDetail.LocatNo);
+                            var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == stockDetail.LocatNo);
                             locate.Status = "5";
                             Db.Updateable(locate).ExecuteCommand();
 
                             break;
                         }
                     }
-                    
+
 
                     Db.CommitTran();
                 }
@@ -887,7 +888,7 @@
                     Db.RollbackTran();
                     throw new Exception(e.Message);
                 }
-                
+
                 return true;
             }
             catch (Exception e)
@@ -927,8 +928,8 @@
                 .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)
-                .LeftJoin<SysWareHouse>((a, b, c, d, e,f) => a.WareHouseNo == f.WareHouseNo)
-                .Select((a, b, c, d, e,f) => new ExportNoticeDto()
+                .LeftJoin<SysWareHouse>((a, b, c, d, e, f) => a.WareHouseNo == f.WareHouseNo)
+                .Select((a, b, c, d, e, f) => new ExportNoticeDto()
                 {
                     Id = a.Id,
                     SONo = a.SONo,
@@ -987,7 +988,7 @@
                 switch (type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧
                 {
                     case "0"://鎴愬搧鍑哄簱
-                        if (house !="W01")
+                        if (house != "W01")
                         {
                             throw new Exception("鎴愬搧鍑哄簱鍙兘閫夋嫨鎴愬搧搴�");
                         }
@@ -1186,7 +1187,7 @@
                 switch (model.WareHouseNo)
                 {
                     case "W01"://鎴愬搧搴�
-                        if (skuList.Any(m=>m.Type !="2"))
+                        if (skuList.Any(m => m.Type != "2"))
                         {
                             throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�");
                         }
@@ -2079,7 +2080,7 @@
                    .AndIF(!string.IsNullOrWhiteSpace(model.BitPalletMark), m => m.BitPalletMark == model.BitPalletMark)
                    .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo))
                    .And(a => a.Status == "0")
-                   .And(a => a.WareHouseNo == "W02")
+                   .And(a => a.WareHouseNo == "W01" || a.WareHouseNo == "W02")
                    .ToExpression();
             var data = await Db.Queryable<DataStockDetail>().Where(item).OrderBy(m => m.LocatNo).ToPageListAsync(model.Page, model.Limit, count);
             //data.Select(m => m.Status == "0" && m.IsDel == "0");
@@ -2329,6 +2330,264 @@
             }
         }
 
+        /// <summary>
+        /// 鎵樼洏鍑哄簱锛堝瘑闆嗗簱锛�
+        /// </summary>
+        /// <param name="palletNo"></param>
+        /// <param name="outMode"></param>
+        /// <param name="userId"></param>
+        /// <param name="url"></param>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public List<OutCommandDto> IssuePalletNoOutMk(string palletNo, string outMode, int userId, string url, out string str)
+        {
+            try
+            {
+                //鍒ゆ柇鎵樼洏鍙锋槸鍚︿负绌�
+                if (string.IsNullOrWhiteSpace(palletNo))
+                {
+                    throw new Exception($"鎵樼洏鍙蜂笉鑳戒负绌猴紝璇锋牳瀹�");
+                }
+
+                str = "";
+                var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0").ToList();
+
+                if (stockDetailList.Count == 0)
+                {
+                    throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅");
+                }
+                var stocka = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetailList[0].SkuNo);
+
+
+                //楠岃瘉搴撳瓨鎵樼洏鐘舵��
+                if (stockDetailList[0].Status != "0")
+                {
+                    throw new Exception($"褰撳墠鎵樼洏鏈浜庡緟鍒嗛厤鐘舵�侊紝璇锋牳瀹烇紒");
+                }
+                //鍒ゆ柇鎵樼洏搴撳瓨淇℃伅鍒嗙粍鍚庢槸鍚﹀ぇ浜�1鏉�
+                var detailGroup = stockDetailList.GroupBy(m => new { m.SkuNo, m.PalletNo, m.WareHouseNo, m.LocatNo }).ToList();
+                if (detailGroup.Count > 1)
+                {
+                    throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅");
+                }
+
+                var locatStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == stockDetailList[0].LocatNo && w.Status == "1");
+                if (locatStart == null)
+                {
+                    throw new Exception($"璧峰鍌ㄤ綅涓嶅瓨鍦ㄦ垨闈炵┖闂诧紝璇锋鏌�");
+                }
+                #region 闆嗗悎 
+
+                var outDto1 = new List<OutCommandDto>(); //鍏堝嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负1鐨勫偍浣嶏級
+                var outDto2 = new List<OutCommandDto>(); //鍚庡嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负2鐨勫偍浣嶏級
+                var moveDto = new List<OutCommandDto>(); //瑕佺Щ搴撴暟鎹殑闆嗗悎
+
+                #endregion
+                var com = new Common();
+                var allot = new AllotLocation();
+
+                #region 闆嗗悎 
+              
+                Db.BeginTran();
+                try
+                {
+                    List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴�
+
+                    var taskNoStr = "";
+
+                    // 鍌ㄤ綅鍙�
+                    var locateNo = locatStart.LocatNo;
+                    List<string> locateListStrs = new List<string>();
+                    locateListStrs.Add(locateNo);
+
+                    var row1 = int.Parse(locatStart.LocatNo.Substring(2, 2));
+                    var row2 = int.Parse(locatStart.AisleOne.Substring(2, 2));
+                    //闇�瑕佺Щ搴撶殑淇℃伅 
+                    var NeedMoveInfo = IsNeedMoveLocate(locatStart, locateListStrs, out int isOut);
+                    if (isOut == 1)
+                    {
+                        //宸烽亾缁勪腑鏈夊叆搴撴垨绉诲叆鐨勫偍浣嶏紝鎴栬�呮槸褰撳墠鍌ㄤ綅鍓嶆湁鍌ㄤ綅鏈笅鍙戞垚鍔熺殑浠诲姟
+                        throw new Exception($"宸烽亾缁勪腑鏈夊叆搴撴垨绉诲叆鐨勫偍浣嶏紝璇风◢鍚庡啀璇�");
+                    }
+                    if (NeedMoveInfo.Count > 0)//闇�瑕佺Щ搴�
+                    {
+                        //鍒ゆ柇搴撳唴绌哄偍浣嶆槸鍚﹀
+                        var okRoad = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == locatStart.WareHouseNo).Select(m => m.RoadwayNo).ToList();
+                        var nullSlotNum = Db.Queryable<SysStorageLocat>().Count(m => m.RoadwayNo != locatStart.RoadwayNo && okRoad.Contains(m.RoadwayNo) && m.Status == "0");
+                        //鍒ゆ柇绌哄偍浣嶇殑鏁伴噺鏄惁澶т簬闇�瑕佺Щ搴撶殑鏁伴噺
+                        if (nullSlotNum >= NeedMoveInfo.Count)
+                        {
+                            foreach (var s in NeedMoveInfo)
+                            {
+                                //鍌ㄤ綅鍒�
+                                var rows = int.Parse(s.Substring(2, 2));
+
+                                //鑾峰彇绉诲簱鍌ㄤ綅
+                                var moveAddress = GetMiJiMoveAddress(s, locatStart.AisleOne);
+                                var tary = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == s);
+                                if (string.IsNullOrWhiteSpace(moveAddress)) // 鍒ゆ柇鏄惁鑾峰彇鍒扮Щ搴撶殑搴撲綅
+                                {
+                                    throw new Exception($"鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗘湭鏌ヨ鍒扮┖鍌ㄤ綅");
+                                }
+                                else
+                                {
+                                    var ykTaskNo = new Common().GetMaxNo("TK");
+                                    var ykTask = new LogTask    //鍑哄簱浠诲姟
+                                    {
+                                        TaskNo = ykTaskNo,
+                                        Sender = "WMS",
+                                        Receiver = "WCS",
+                                        IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                                        StartLocat = s,//璧峰浣嶇疆
+                                        EndLocat = moveAddress,//outMode,//鐩爣浣嶇疆
+                                        PalletNo = tary.PalletNo,//鎵樼洏鐮�
+                                        IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                        IsCancel = 1,//鏄惁鍙彇娑�
+                                        IsFinish = 1,//鏄惁鍙畬鎴�
+                                        Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                        Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                        OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                                        Msg = "浠�" + s + "鍒�" + moveAddress + "鐨勭Щ搴撲换鍔�", //鍏抽敭淇℃伅
+                                    };
+                                    Db.Insertable(ykTask).ExecuteCommand();
+                                    logTaskList.Add(ykTask);
+
+                                    outDto1.Add(new OutCommandDto()
+                                    {
+                                        PalletNo = ykTask.PalletNo,//鎵樼洏鍙�
+                                        StartLocate = ykTask.StartLocat, // 璧峰浣嶇疆
+                                        StartRoadway = locatStart.RoadwayNo,//鍏跺疄宸烽亾
+                                        EndLocate = moveAddress,//outMode, // 鐩爣浣嶇疆 
+                                        TaskNo = ykTaskNo, // 浠诲姟鍙�
+                                        TaskType = "2",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉�  
+                                        Order = Math.Abs(row2 - rows),
+                                        Type = PLCTypeEnum.ShuttleCar
+
+                                    });
+                                    var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s);
+                                    var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress);
+
+                                    slotChange.Status = "5"; //鏀瑰彉鐘舵�侊紙姝e湪鍑哄簱锛�
+                                    slotChange2.Status = "4"; // 鏀瑰彉鐘舵�侊紙姝e湪绉诲叆锛�
+                                    Db.Updateable(slotChange).ExecuteCommand();
+                                    Db.Updateable(slotChange2).ExecuteCommand();
+                                }
+                            }
+                        }
+                        else
+                        {
+                            throw new Exception($"鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗙┖鍌ㄤ綅涓嶅绉诲簱");
+                        }
+                    }
+                    #region 娣诲姞鍑哄簱浠诲姟
+
+                    var taskNo = new Common().GetMaxNo("TK");
+                    var exTask = new LogTask    //鍑哄簱浠诲姟
+                    {
+                        TaskNo = taskNo,
+                        Sender = "WMS",
+                        Receiver = "WCS",
+                        IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                        StartLocat = locatStart.LocatNo,//璧峰浣嶇疆
+                        EndLocat = outMode,//outMode,//鐩爣浣嶇疆
+                        PalletNo = 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 = "浠�" + locatStart.LocatNo + "鍒�" + outMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
+                    };
+                    Db.Insertable(exTask).ExecuteCommand();
+                    logTaskList.Add(exTask);
+                    var endroad = allot.RoadwayToStationNum(locatStart.RoadwayNo, outMode);
+                    outDto1.Add(new OutCommandDto()
+                    {
+                        PalletNo = palletNo,//鎵樼洏鍙�
+                        StartLocate = locatStart.LocatNo, // 璧峰浣嶇疆
+                        StartRoadway = locatStart.RoadwayNo,//璧峰宸烽亾
+                        EndLocate = outMode,//, // 鐩爣浣嶇疆 
+                        EndRoadway = endroad,
+                        TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                        TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� 
+                        OutMode = outMode,  //鍑哄簱鍙� 
+                        Order = Math.Abs(row2 - row1),
+                        Type = PLCTypeEnum.ShuttleCar
+
+                    });
+                    taskNoStr = exTask.TaskNo;
+
+                    #endregion
+
+                    #region 鏀瑰彉鏁版嵁
+
+                    locatStart.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
+                    Db.Updateable(locatStart).ExecuteCommand();
+
+                    #endregion
+
+
+                    outDto1.AddRange(moveDto);
+                    outDto1.AddRange(outDto2);
+                    //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                    new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鎵樼洏鍑哄簱", palletNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鎵樼洏涓猴細{palletNo}", userId);
+                    Db.CommitTran();
+
+                    if (outDto1.Count > 0)
+                    {
+                        // 姝e紡杩愯绋嬪簭鏀惧紑
+                        var list2 = outDto1.Select(m => m.TaskNo).ToList();
+                        var jsonData = JsonConvert.SerializeObject(outDto1);
+                        string response = "";
+
+                        try
+                        {
+                            var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+                            response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+                            var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+                            ////瑙f瀽杩斿洖鏁版嵁 
+                            var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response);
+                            if (wcsModel.code == 200)
+                            {
+                                //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+                                new TaskServer().EditTaskIssueOk(list2, time1, time2);
+                                str += "涓嬪彂鎴愬姛";
+                            }
+                            else
+                            {
+                                new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message);
+                                throw new Exception(wcsModel.message);
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new Exception(ex.Message);
+                        }
+
+                    }
+
+                    return outDto1;
+                }
+                catch (Exception e)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(e.Message);
+                }
+
+
+                #endregion
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
         #endregion
 
         #region 鑷姩鍒嗛厤銆佸彇娑堝垎閰嶃�佽幏鍙栨墜鍔ㄥ垎閰嶇殑鏁版嵁婧愩�佹墜鍔ㄥ垎閰�
@@ -2516,7 +2775,7 @@
                         Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟
                         var qty = 0m;
                         var house = "";
-                        
+
                         //鍒嗛厤璐х墿
                         qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, notice.WareHouseNo);
                         foreach (var sc in stockQtyDic)
@@ -3067,7 +3326,7 @@
         {
             try
             {
-                var notcie = Db.Queryable<BllExportNotice>().First(m=>m.IsDel == "0" && m.SONo == soNo);
+                var notcie = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo);
                 if (notcie == null)
                 {
                     throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曚俊鎭�");
@@ -3155,9 +3414,9 @@
                         {
                             throw new Exception("鍑哄簱鍙e伐浣嶅紓甯�");
                         }
-                        
+
                         var taskNoStr = "";
-                                           
+
                         // 鍌ㄤ綅鍙�
                         var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo;
 
@@ -3200,7 +3459,7 @@
                             }
                             flagList.Add(0);
                             continue;
-                            
+
                         }
 
                         var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭�
@@ -3221,7 +3480,7 @@
                         if (locate.Status == "1") //鏈夌墿鍝�
                         {
                             #region 娣诲姞鍑哄簱浠诲姟
-                            
+
                             var taskNo = new Common().GetMaxNo("TK");
                             var exTask = new LogTask    //鍑哄簱浠诲姟
                             {
@@ -3253,13 +3512,13 @@
                                 StartLocate = locate.LocatNo, // 璧峰浣嶇疆
                                 StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
                                 EndLocate = outModeLocate, // 鐩爣浣嶇疆 
-                                
+
                                 Order = 999,
-                                Type  = PLCTypeEnum.AGV
-                                 
+                                Type = PLCTypeEnum.AGV
+
                             });
                             taskNoStr = exTask.TaskNo;
-                            
+
                             #endregion
 
                             #region 鏀瑰彉鏁版嵁
@@ -3347,7 +3606,7 @@
                             flagList.Add(1);
                         }
                     }
-                    
+
                     //娣诲姞鎿嶄綔鏃ュ織璁板綍
                     var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId);
                     Db.CommitTran();
@@ -3395,8 +3654,8 @@
                             //if (wcsModel.StatusCode == 0)
                             //{
                             //    //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
-                                new TaskServer().EditTaskIssueOk(list2, time1, time2);
-                                str += "涓嬪彂鎴愬姛";
+                            new TaskServer().EditTaskIssueOk(list2, time1, time2);
+                            str += "涓嬪彂鎴愬姛";
                             //}
                             //if (wcsModel.StatusCode == -1)
                             //{
@@ -3462,7 +3721,7 @@
                 //瑕佸嚭搴撶殑鏄庣粏闆嗗悎
                 var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
                 //鎵�鏈夎鍑哄簱鐨勫偍浣嶉泦鍚�
-                var locateListStrs = outStockDetail.Where(m=> !string.IsNullOrWhiteSpace(m.LocatNo)).Select(m => m.LocatNo).Distinct().ToList();
+                var locateListStrs = outStockDetail.Where(m => !string.IsNullOrWhiteSpace(m.LocatNo)).Select(m => m.LocatNo).Distinct().ToList();
                 //鐗╂枡缂栫爜琛�
                 var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0");
                 //鍖呰琛�
@@ -3471,13 +3730,13 @@
                 try
                 {
                     List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴�
-                    
-                    
+
+
                     //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔�
                     foreach (var item in list)
                     {
                         var taskNoStr = "";
-                       
+
                         // 鍌ㄤ綅鍙�
                         var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo;
 
@@ -3528,7 +3787,7 @@
                         }
 
                         //鍒ゆ柇鍌ㄤ綅
-                        var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭�
+                        var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0" && m.WareHouseNo == "W01");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭�
                         if (locate == null)
                         {
                             flagList.Add(2);
@@ -3545,7 +3804,7 @@
 
                         if (locate.Status == "1") //鏈夌墿鍝�
                         {
-                            var row1 = int.Parse(locate.LocatNo.Substring(2,2));
+                            var row1 = int.Parse(locate.LocatNo.Substring(2, 2));
                             var row2 = int.Parse(locate.AisleOne.Substring(2, 2));
                             //闇�瑕佺Щ搴撶殑淇℃伅 
                             var NeedMoveInfo = IsNeedMoveLocate(locate, locateListStrs, out int isOut);
@@ -3567,7 +3826,7 @@
                                     foreach (var s in NeedMoveInfo)
                                     {
                                         //鍌ㄤ綅鍒�
-                                        var rows = int.Parse(s.Substring(2,2));
+                                        var rows = int.Parse(s.Substring(2, 2));
 
                                         //鑾峰彇绉诲簱鍌ㄤ綅
                                         var moveAddress = GetMiJiMoveAddress(s, locate.AisleOne);
@@ -3616,8 +3875,8 @@
 
                                             outDto1.Add(new OutCommandDto()
                                             {
-                                                PalletNo = item.PalletNo,//鎵樼洏鍙�
-                                                StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+                                                PalletNo = ykTask.PalletNo,//鎵樼洏鍙�
+                                                StartLocate = ykTask.StartLocat, // 璧峰浣嶇疆
                                                 StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
                                                 EndLocate = moveAddress,//outMode, // 鐩爣浣嶇疆 
                                                 TaskNo = ykTaskNo, // 浠诲姟鍙�
@@ -3625,7 +3884,7 @@
                                                 Order = Math.Abs(row2 - rows),
                                                 Type = PLCTypeEnum.ShuttleCar
 
-                                            }); 
+                                            });
                                             var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s);
                                             var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress);
 
@@ -3647,7 +3906,7 @@
                                 }
                             }
                             #region 娣诲姞鍑哄簱浠诲姟
-                            
+
                             var taskNo = new Common().GetMaxNo("TK");
                             var exTask = new LogTask    //鍑哄簱浠诲姟
                             {
@@ -3685,7 +3944,7 @@
 
                             });
                             taskNoStr = exTask.TaskNo;
-                            
+
                             #endregion
 
                             #region 鏀瑰彉鏁版嵁
@@ -3859,26 +4118,26 @@
         /// <param name="addressList">瑕佸嚭鍙g殑鍌ㄤ綅闆嗗悎</param>
         /// <param name="isOut">鏄惁鍑哄簱 1:鏈夋湭涓嬪彂鐨勪换鍔″湪鍓嶉潰</param>
         /// <returns>闇�瑕佺Щ搴撶殑闆嗗悎锛堝鏋滀负绌哄垯涓嶉渶绉诲簱锛�</returns>
-        private List<string> IsNeedMoveLocate(SysStorageLocat lcoate,List<string> locateStrList, out int isOut)
+        private List<string> IsNeedMoveLocate(SysStorageLocat lcoate, List<string> locateStrList, out int isOut)
         {
             var nowAddress = new List<string>(); //闇�瑕佺Щ搴撶殑闆嗗悎
-            // 010101 娲惧垪灞�
-            //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne);
-            
-            var sArray = lcoate.LocatNo.Substring(4,2);
+                                                 // 010101 娲惧垪灞�
+                                                 //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne);
+
+            var sArray = lcoate.LocatNo.Substring(2, 2);
             var row = int.Parse(sArray);//鍌ㄤ綅鍒�
-            var sArray2 = lcoate.AisleOne.Substring(4, 2);
+            var sArray2 = lcoate.AisleOne.Substring(2, 2);
             var row2 = int.Parse(sArray2); //閫氶亾鍙e垪
 
             isOut = 0;
-           
+
             var bol = row2 - row > 0;
-                
+
             //鍚岀粍鐨勫偍浣嶉泦鍚�
             var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == lcoate.RoadwayNo).ToList();
             List<string> list;
-            
-            
+
+
             if (bol)
             {
                 //鍌ㄤ綅灏忎簬閫氶亾鍙�   鍊掑簭
@@ -3931,7 +4190,7 @@
             {
                 return nowAddress;
             }
-            
+
 
             return nowAddress;
         }
@@ -3954,7 +4213,7 @@
             // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅
 
             //
-            var sArray = oldAddress.Substring(4,2);
+            var sArray = oldAddress.Substring(4, 2);
             var ceng = int.Parse(sArray);
             //
             var sArray2 = slotOut.Substring(2, 2);
@@ -3985,206 +4244,220 @@
             //鏍规嵁鍗佸瓧鍙e樊鍊兼渶灏忕殑鎺掑簭
             shiKou3 = shiKou3.OrderBy(m => m.distNum).ToList();
 
-                /**
-                //1 绉诲姩鍒版渶杩戠殑绌哄偍浣嶏紝蹇呴』鍥炵Щ銆�
-                //鏍规嵁鍥涘悜杞︾Щ鍔ㄨ建杩硅绠楀嚭鏈�杩戠┖鍌ㄤ綅銆�
-                //鍑哄簱瀹屾垚鍚庢牴鎹壒娆″彿 鐢熶骇鏃ユ湡 鍑哄彛璁$畻鍥炵Щ鍌ㄤ綅銆�
+            /**
+            //1 绉诲姩鍒版渶杩戠殑绌哄偍浣嶏紝蹇呴』鍥炵Щ銆�
+            //鏍规嵁鍥涘悜杞︾Щ鍔ㄨ建杩硅绠楀嚭鏈�杩戠┖鍌ㄤ綅銆�
+            //鍑哄簱瀹屾垚鍚庢牴鎹壒娆″彿 鐢熶骇鏃ユ湡 鍑哄彛璁$畻鍥炵Щ鍌ㄤ綅銆�
 
-                //2 绉诲姩閫傚悎瀛樻斁鐨勭粍锛岀郴缁熻嚜鍔ㄨ绠楁槸鍚﹀洖绉汇�� 
-                //鏍规嵁鎵规鍙� 鐢熶骇鏃ユ湡 鍑哄彛 鐗╂枡绛夎绠楀嚭绉诲簱鐩爣鍌ㄤ綅
-                //鍑哄簱瀹屾垚鍚庯紝鍒ゆ柇鏄惁鏈夋瘮褰撳墠搴撲綅鏇村悎閫傜殑瀛樺偍鍌ㄤ綅锛屾湁绉诲姩锛屾棤涓嶇Щ鍔ㄣ��
-                */
+            //2 绉诲姩閫傚悎瀛樻斁鐨勭粍锛岀郴缁熻嚜鍔ㄨ绠楁槸鍚﹀洖绉汇�� 
+            //鏍规嵁鎵规鍙� 鐢熶骇鏃ユ湡 鍑哄彛 鐗╂枡绛夎绠楀嚭绉诲簱鐩爣鍌ㄤ綅
+            //鍑哄簱瀹屾垚鍚庯紝鍒ゆ柇鏄惁鏈夋瘮褰撳墠搴撲綅鏇村悎閫傜殑瀛樺偍鍌ㄤ綅锛屾湁绉诲姩锛屾棤涓嶇Щ鍔ㄣ��
+            */
 
-                var oldSlot = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldAddress);
-                if (oldSlot == null)
+            var oldSlot = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldAddress);
+            if (oldSlot == null)
+            {
+                throw new Exception("鏈兘鎵惧埌鍌ㄤ綅淇℃伅");
+            }
+            #region 1涓嶉渶瑕佸洖绉荤殑
+
+            //鍚庢湡搴撳瓨鎵樼洏琛ㄦ敼浜嗗悗闇�瑕佸姞绛涢�夋潯浠舵墭鐩樼殑鐘舵�侊紙閫�璐�/棰勬嫞锛�
+            var tray1 = Db.Queryable<DataStockDetail>().Where(m => m.LocatNo == oldAddress).ToList();
+            //鏍规嵁鐗╂枡銆佹壒娆°�佹墭鐩樼姸鎬侊紙閫�璐�/棰勬嫞/鏆傚瓨绛夛級鍒嗙粍鍒ゆ柇
+            var d = tray1.GroupBy(m => new { m.SkuNo, m.LotNo, m.PalletTags });
+            var location = string.Empty;
+            if (d.Any())
+            {
+                //鏃у偍浣嶅悓缁勭殑鍌ㄤ綅闆嗗悎
+                var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == oldSlot.RoadwayNo).Select(m => m.LocatNo).ToList();
+                foreach (var item in d)
                 {
-                    throw new Exception("鏈兘鎵惧埌鍌ㄤ綅淇℃伅");
-                }
-                #region 1涓嶉渶瑕佸洖绉荤殑
-
-                //鍚庢湡搴撳瓨鎵樼洏琛ㄦ敼浜嗗悗闇�瑕佸姞绛涢�夋潯浠舵墭鐩樼殑鐘舵�侊紙閫�璐�/棰勬嫞锛�
-                var tray1 = Db.Queryable<DataStockDetail>().Where(m => m.LocatNo == oldAddress).ToList();
-                //鏍规嵁鐗╂枡銆佹壒娆°�佹墭鐩樼姸鎬侊紙閫�璐�/棰勬嫞/鏆傚瓨绛夛級鍒嗙粍鍒ゆ柇
-                var d = tray1.GroupBy(m => new { m.SkuNo, m.LotNo, m.PalletTags });
-                var location = string.Empty;
-                if (d.Any())
-                {
-                    //鏃у偍浣嶅悓缁勭殑鍌ㄤ綅闆嗗悎
-                    var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == oldSlot.RoadwayNo).Select(m => m.LocatNo).ToList();
-                    foreach (var item in d)
+                    foreach (var item2 in item)
                     {
-                        foreach (var item2 in item)
+                        var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == item2.WareHouseNo).Select(m => m.RoadwayNo).ToList();
+                        //褰撳墠鎵樼洏鎵�鍦ㄦゼ灞�
+                        if (oldSlot.Layer == 1)
                         {
-                            var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0").Select(m => m.RoadwayNo).ToList();
-                            var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo
+                            okLan = okLan.Where(m => Convert.ToInt32(m.Replace("MR", "")) <= 56).ToList();
+                        }
+                        else if (oldSlot.Layer == 2)
+                        {
+                            okLan = okLan.Where(m => Convert.ToInt32(m.Replace("MR", "")) > 56).ToList();
+                        }
+                        else
+                        {
+                            throw new Exception("褰撳墠鎵樼洏鎵�鍦ㄦゼ灞傚紓甯�");
+                        }
+
+                        var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo
                             && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList();
-                            foreach (var s in tray2)
+                        foreach (var s in tray2)
+                        {
+                            if (string.IsNullOrWhiteSpace(s.RoadwayNo))//鍒ゆ柇鏄惁鍦ㄥ簱澶栵紝濡傛槸璺宠繃
                             {
-                                if (string.IsNullOrWhiteSpace(s.RoadwayNo))//鍒ゆ柇鏄惁鍦ㄥ簱澶栵紝濡傛槸璺宠繃
+                                continue;
+                            }
+                            var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList();
+                            //鍒ゆ柇鏄惁鏈夊叆搴撲腑銆佸嚭搴撲腑銆佺Щ鍏ヤ腑銆佺Щ鍑轰腑
+                            if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0)
+                            {
+                                continue;
+                            }
+                            if (lan.Count(m => m.Status == "0") > 0)
+                            {
+
+                                var bol = GetBecomingLocation(s.RoadwayNo, ref location);
+                                if (bol && !string.IsNullOrWhiteSpace(location))
                                 {
-                                    continue;
-                                }
-                                var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList();
-                                //鍒ゆ柇鏄惁鏈夊叆搴撲腑銆佸嚭搴撲腑銆佺Щ鍏ヤ腑銆佺Щ鍑轰腑
-                                if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0)
-                                {
-                                    continue;
-                                }
-                                if (lan.Count(m => m.Status == "0") > 0)
-                                {
-                                    
-                                    var bol = GetBecomingLocation(s.RoadwayNo, ref location);
-                                    if (bol && !string.IsNullOrWhiteSpace(location))
-                                    {
-                                        newAddress = location;
-                                        return newAddress;
-                                        
-                                    }
+                                    newAddress = location;
+                                    return newAddress;
 
                                 }
+
                             }
                         }
                     }
-
                 }
 
-                #endregion
+            }
 
-                #region 2闇�瑕佸洖绉荤殑
+            #endregion
 
-                ////濡傛灉娌℃湁鎵惧埌鍚堥�傜殑鍌ㄤ綅
-                //if (string.IsNullOrWhiteSpace(newAddress))
-                //{
-                //    foreach (var s in shiKou3)
-                //    {
-                         
-                //        var r = int.Parse(s.slotCode.Substring(0, 2));
-                //        var l = int.Parse(s.slotCode.Substring(2, 2));
-                //        var c = int.Parse(s.slotCode.Substring(4, 2));
-                //        //鏌ヨ绌哄偍浣�
-                //        var sqlString = $@"select LocatNo,Row,Column,Layer,(ABS(Row-{r}) + ABS(Column-{l}) ) as distNum 
-                //                from SysStorageLocat where (AisleOneRow  = {r} or AisleTwoRow = {r}) and Status in (0) and
-                //                 RoadwayNo !='{oldSlot.RoadwayNo}' and RoadwayNo not in(select RoadwayNo from SysStorageRoadway where Status = 1) order by distNum,SlotCode";
+            #region 2闇�瑕佸洖绉荤殑
 
-                //        var addressModels = dataContext.ExecuteQuery<addreClass>(sqlString).ToList();
-                //        foreach (var item in addressModels)
-                //        {                            銆�
-                            
-                            
-                //            newAddress = item.slotCode;
-                //            var dz = newAddress.Split(new char[] { '-' });
-                //            var l1 = dz[1];
-                //            var c1 = dz[0];
-                //            newLaneWayAddress = $"{c1}-{l1}-{a[2]}";
-                //            flags = newLaneWayAddress;
+            ////濡傛灉娌℃湁鎵惧埌鍚堥�傜殑鍌ㄤ綅
+            //if (string.IsNullOrWhiteSpace(newAddress))
+            //{
+            //    foreach (var s in shiKou3)
+            //    {
 
-                //            var slotModel = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == item.slotCode);
+            //        var r = int.Parse(s.slotCode.Substring(0, 2));
+            //        var l = int.Parse(s.slotCode.Substring(2, 2));
+            //        var c = int.Parse(s.slotCode.Substring(4, 2));
+            //        //鏌ヨ绌哄偍浣�
+            //        var sqlString = $@"select LocatNo,Row,Column,Layer,(ABS(Row-{r}) + ABS(Column-{l}) ) as distNum 
+            //                from SysStorageLocat where (AisleOneRow  = {r} or AisleTwoRow = {r}) and Status in (0) and
+            //                 RoadwayNo !='{oldSlot.RoadwayNo}' and RoadwayNo not in(select RoadwayNo from SysStorageRoadway where Status = 1) order by distNum,SlotCode";
 
-                //            var lan = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
-                //            if (slotModel.SlotRow > int.Parse(a[2]))
-                //            {
-                //                // 鍙栨渶涓婇潰涓�鎺�
-                //                lan = lan.OrderBy(m => m.SlotCode).ToList();
-                //                for (int i = 0; i < lan.Count; i++)
-                //                {
-                //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
-                //                    if (slot.SlotStatus == 0)
-                //                    {
-                //                        if (i == lan.Count - 1)
-                //                        {
-                //                            newAddress = lan[lan.Count - 1].SlotCode;
+            //        var addressModels = dataContext.ExecuteQuery<addreClass>(sqlString).ToList();
+            //        foreach (var item in addressModels)
+            //        {                            銆�
 
-                //                            break;
-                //                        }
-                //                        else
-                //                        {
-                //                            continue;
-                //                        }
 
-                //                    }
-                //                    else
-                //                    {
-                //                        newAddress = lan[i - 1].SlotCode;
-                //                        break;
-                //                    }
-                //                }
+            //            newAddress = item.slotCode;
+            //            var dz = newAddress.Split(new char[] { '-' });
+            //            var l1 = dz[1];
+            //            var c1 = dz[0];
+            //            newLaneWayAddress = $"{c1}-{l1}-{a[2]}";
+            //            flags = newLaneWayAddress;
 
-                //            }
-                //            else
-                //            {
-                //                // 鍙栨渶涓嬮潰涓�鎺�
-                //                lan = lan.OrderByDescending(m => m.SlotCode).ToList();
-                //                for (int i = 0; i < lan.Count; i++)
-                //                {
-                //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
-                //                    if (slot.SlotStatus == 0)
-                //                    {
-                //                        if (i == lan.Count - 1)
-                //                        {
-                //                            newAddress = lan[lan.Count - 1].SlotCode;
-                //                            break;
-                //                        }
-                //                        else
-                //                        {
-                //                            continue;
-                //                        }
+            //            var slotModel = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == item.slotCode);
 
-                //                    }
-                //                    else
-                //                    {
-                //                        newAddress = lan[i - 1].SlotCode;
-                //                        break;
-                //                    }
-                //                }
-                //            }
-                //            //娣诲姞鍥炵Щ浠诲姟
-                //            AddHyTask(oldAddress, newAddress, newLaneWayAddress, oldSlot.SlotLanewayId, slotOut, billCode);
-                //            refLanWayId = slotModel.SlotLanewayId;
-                //            refLanOutCode = newLaneWayAddress;
-                //            //9锛氶攣瀹氬偍浣� 
-                //            var updateSlot = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
-                //            var newAddressRow = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == newAddress);
-                //            if (newAddressRow.SlotRow > int.Parse(a[2]))
-                //            {
-                //                updateSlot = updateSlot.Where(m => m.SlotRow < newAddressRow.SlotRow && m.SlotRow > int.Parse(a[2])).OrderBy(m => m.SlotCode).ToList();
-                //            }
-                //            else
-                //            {
-                //                updateSlot = updateSlot.Where(m => m.SlotRow > newAddressRow.SlotRow && m.SlotRow < int.Parse(a[2])).OrderByDescending(m => m.SlotCode).ToList();
+            //            var lan = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
+            //            if (slotModel.SlotRow > int.Parse(a[2]))
+            //            {
+            //                // 鍙栨渶涓婇潰涓�鎺�
+            //                lan = lan.OrderBy(m => m.SlotCode).ToList();
+            //                for (int i = 0; i < lan.Count; i++)
+            //                {
+            //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
+            //                    if (slot.SlotStatus == 0)
+            //                    {
+            //                        if (i == lan.Count - 1)
+            //                        {
+            //                            newAddress = lan[lan.Count - 1].SlotCode;
 
-                //            }
-                //            foreach (var source in updateSlot)
-                //            {
-                //                if (source.SlotCode == newAddress)
-                //                {
-                //                    continue;
-                //                }
-                //                if (source.SlotStatus == 0)
-                //                {
-                //                    source.SlotStatus = 8;
-                //                }
-                //            }
+            //                            break;
+            //                        }
+            //                        else
+            //                        {
+            //                            continue;
+            //                        }
 
-                //            if (updateSlot.Count <= 0)
-                //            {
-                //                refLanWayId = "";
-                //                refLanOutCode = "";
-                //            }
-                //            dataContext.SubmitChanges();
-                //            return newAddress;
-                            
+            //                    }
+            //                    else
+            //                    {
+            //                        newAddress = lan[i - 1].SlotCode;
+            //                        break;
+            //                    }
+            //                }
 
-                            
-                //        }
+            //            }
+            //            else
+            //            {
+            //                // 鍙栨渶涓嬮潰涓�鎺�
+            //                lan = lan.OrderByDescending(m => m.SlotCode).ToList();
+            //                for (int i = 0; i < lan.Count; i++)
+            //                {
+            //                    var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
+            //                    if (slot.SlotStatus == 0)
+            //                    {
+            //                        if (i == lan.Count - 1)
+            //                        {
+            //                            newAddress = lan[lan.Count - 1].SlotCode;
+            //                            break;
+            //                        }
+            //                        else
+            //                        {
+            //                            continue;
+            //                        }
 
-                //    }
+            //                    }
+            //                    else
+            //                    {
+            //                        newAddress = lan[i - 1].SlotCode;
+            //                        break;
+            //                    }
+            //                }
+            //            }
+            //            //娣诲姞鍥炵Щ浠诲姟
+            //            AddHyTask(oldAddress, newAddress, newLaneWayAddress, oldSlot.SlotLanewayId, slotOut, billCode);
+            //            refLanWayId = slotModel.SlotLanewayId;
+            //            refLanOutCode = newLaneWayAddress;
+            //            //9锛氶攣瀹氬偍浣� 
+            //            var updateSlot = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
+            //            var newAddressRow = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == newAddress);
+            //            if (newAddressRow.SlotRow > int.Parse(a[2]))
+            //            {
+            //                updateSlot = updateSlot.Where(m => m.SlotRow < newAddressRow.SlotRow && m.SlotRow > int.Parse(a[2])).OrderBy(m => m.SlotCode).ToList();
+            //            }
+            //            else
+            //            {
+            //                updateSlot = updateSlot.Where(m => m.SlotRow > newAddressRow.SlotRow && m.SlotRow < int.Parse(a[2])).OrderByDescending(m => m.SlotCode).ToList();
 
-                //}
+            //            }
+            //            foreach (var source in updateSlot)
+            //            {
+            //                if (source.SlotCode == newAddress)
+            //                {
+            //                    continue;
+            //                }
+            //                if (source.SlotStatus == 0)
+            //                {
+            //                    source.SlotStatus = 8;
+            //                }
+            //            }
 
-                return newAddress;
-                #endregion
+            //            if (updateSlot.Count <= 0)
+            //            {
+            //                refLanWayId = "";
+            //                refLanOutCode = "";
+            //            }
+            //            dataContext.SubmitChanges();
+            //            return newAddress;
 
-            
+
+
+            //        }
+
+            //    }
+
+            //}
+
+            return newAddress;
+            #endregion
+
+
         }
 
         /// <summary>
@@ -4196,14 +4469,14 @@
         private bool GetBecomingLocation(string laneWayId, ref string location)
         {
             bool bl = false;
-            
+
             // 寰幆鍒ゆ柇褰撳墠缁勬槸鍚︽湁鍓╀綑鍌ㄤ綅
             string sqlString = string.Empty;
             location = "";
-            
+
             // 鍒ゆ柇鍌ㄤ綅缁勬槸鍚︽湁绌哄偍浣�   鍏宠仈搴撳瓨鏄庣粏琛ㄥ彲闃叉鍌ㄤ綅鐘舵�佷笉鍑嗙‘閬垮厤閫犳垚婊″叆寮傚父//not in ('1','2','4','6','7','8')
-            sqlString = $"select LocatNo,Column,AisleOne from SysStorageLocat where RoadwayNo = {laneWayId} and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = { laneWayId}) order by Row;";
-            var slotModel =Db.SqlQueryable<LocateInfo>(sqlString).ToList();
+            sqlString = $"select LocatNo,[Column],AisleOne from SysStorageLocat where IsDel=0 and WareHouseNo='W01' and RoadwayNo = '{laneWayId}' and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = '{laneWayId}') order by Row;";
+            var slotModel = Db.SqlQueryable<LocateInfo>(sqlString).ToList();
             if (slotModel.Count == 0)
             {
                 bl = false;
@@ -4211,7 +4484,7 @@
             else  // 瀛樺湪绌哄偍浣�
             {
                 // 鍒ゆ柇褰撳墠缁勫悎閫傜殑鍌ㄤ綅鍦板潃
-                var numstr = slotModel[0].AisleOne.Substring(4,2);
+                var numstr = slotModel[0].AisleOne.Substring(4, 2);
                 int aisleRow = int.Parse(numstr);
 
                 if (slotModel[0].Column > aisleRow)
@@ -4226,11 +4499,11 @@
 
                     location = slotModel[slotModel.Count - 1].LocatNo;
                 }
-                
+
                 bl = true;
             }
 
-            
+
 
             return bl;
         }
@@ -4245,7 +4518,7 @@
             public string LocatNo { get; set; }
             public int Column { get; set; }
             public string AisleOne { get; set; }
-             
+
         }
 
         /// <summary>
@@ -4324,12 +4597,12 @@
                         item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
                         item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
                         item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級
-                        
+
                     }
                     //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級
                     var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
                     var PalletType = "0"; //0锛氱墿鏂欐墭  1锛氱┖鎵樼洏鎵�
-                    
+
                     foreach (var item in allot)
                     {
                         if (item.SkuNo == "100099")
@@ -4345,9 +4618,9 @@
 
                     }
 
-                    var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m=>m.LocatNo).ToList();
+                    var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m => m.LocatNo).ToList();
                     //鍒ゆ柇鏄惁鏄師杈呮枡鍑哄簱浠诲姟  璐ф灦鍌ㄤ綅=銆嬪钩搴撳偍浣�
-                    if ( endLocateList.Contains(task.EndLocat) && PalletType == "0")
+                    if (endLocateList.Contains(task.EndLocat) && PalletType == "0")
                     {
                         //淇敼鐩爣鍦板潃鐘舵��
                         var endLocat = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == task.EndLocat);
@@ -4429,9 +4702,9 @@
                     ////鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱  
                     //if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat))
                     //{
-                        task.Status = "2";
+                    task.Status = "2";
                     //}
-                    
+
                     task.IsSend = 0;
                     task.IsCancel = 0;
                     task.IsFinish = 0;
@@ -4446,13 +4719,13 @@
                         locate.Status = "0";
                         Db.Updateable(locate).ExecuteCommand();
                     }
-                    
+
 
                     //鐩爣鍌ㄤ綅鏀逛负鏈夎揣鐗� 1
                     locate2.Status = "1";
                     Db.Updateable(locate2).ExecuteCommand();
                     //鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱  
-                    if ( pingKuList.Contains(task.EndLocat))
+                    if (pingKuList.Contains(task.EndLocat))
                     {
                         foreach (var item in stockDetail)
                         {
@@ -4463,7 +4736,7 @@
                         }
                         Db.Updateable(stockDetail).ExecuteCommand();
                     }
-                    
+
 
                     #endregion
 
@@ -4490,12 +4763,12 @@
             try
             {
                 Db.BeginTran();
-                var task = Db.Queryable<LogTask>().First(m=>m.IsDel =="0" && m.TaskNo == taskNo);
+                var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == taskNo);
                 if (task == null)
                 {
                     throw new Exception("娌℃湁鏌ヨ鍒颁换鍔′俊鎭�");
                 }
-                if (task.Status!="1")
+                if (task.Status != "1")
                 {
                     throw new Exception("浠诲姟鐘舵�佷笉鏄鍦ㄦ墽琛岋紝璇锋牳瀹�");
                 }
@@ -4504,7 +4777,7 @@
                 {
                     throw new Exception("娌℃湁鏌ヨ鍒拌捣濮嬪偍浣嶄俊鎭�");
                 }
-                if (locate.WareHouseNo!="W04")
+                if (locate.WareHouseNo != "W04")
                 {
                     throw new Exception("璧峰鍌ㄤ綅涓嶆槸骞冲簱鍌ㄤ綅锛岃鏍稿疄");
                 }
@@ -4529,7 +4802,7 @@
             }
         }
 
-        
+
         #endregion
 
         #endregion
@@ -4551,7 +4824,7 @@
                     throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曚俊鎭�");
                 }
                 var task = Db.Queryable<BllExportTimingTask>().Count(m => m.SoNo == soNo);
-                if (task>0)
+                if (task > 0)
                 {
                     throw new Exception("褰撳墠鍑哄簱鍗曞凡鐢熸垚澶囨枡浠诲姟锛屾棤闇�閲嶅鐐瑰嚮");
                 }
@@ -4563,7 +4836,7 @@
                 };
                 Db.Insertable(exTask).ExecuteCommand();
                 notice.Status = "3";//淇敼鍗曟嵁鐘舵�佹湭姝e湪鎵ц
-                notice.UpdateTime = DateTime.Now; 
+                notice.UpdateTime = DateTime.Now;
                 notice.UpdateUser = userId;
 
                 Db.Updateable(notice).ExecuteCommand();
@@ -4575,7 +4848,7 @@
                 throw new Exception(e.Message);
             }
         }
-        
+
         // JC23 澶囨枡瀹氭椂浠诲姟寮�濮� 棰嗘枡鍗曞鏂欎笅鍙戝嚭搴擄紙璋冪敤wcs鎺ュ彛缁欎粬搴撲綅鍦板潃锛�
         public List<OutCommandDto> BeiLiaoIssueOutHouse(string url)
         {
@@ -4669,7 +4942,7 @@
                                 if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
                                 {
                                     var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
-                                    if (detailList.Count(m => m.FactQty>0) > 0)
+                                    if (detailList.Count(m => m.FactQty > 0) > 0)
                                     {
                                         notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
                                         Db.Updateable(notice).ExecuteCommand();
@@ -4696,7 +4969,7 @@
                                 if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
                                 {
                                     var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
-                                    if (detailList.Count(m => m.FactQty>0) > 0)
+                                    if (detailList.Count(m => m.FactQty > 0) > 0)
                                     {
                                         notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
                                         Db.Updateable(notice).ExecuteCommand();
@@ -5085,7 +5358,7 @@
             {
                 //鍏堟煡璇换鍔¤〃涓鏈変换鍔$殑鎶曟枡鍙d俊鎭�
                 var proCallList = Db.Queryable<BllProductionCallTask>().Where(m => m.IsDel == "0").ToList();
-                var proLocationList = proCallList.Select(m=>m.PutInLocation).ToList();
+                var proLocationList = proCallList.Select(m => m.PutInLocation).ToList();
                 if (proCallList.Count == 0)
                 {
                     return null;
@@ -5098,12 +5371,12 @@
                 {
                     //褰撳墠鎶曟枡鍙e寘鍚殑宸ヤ綅
                     var list = locate.Where(m => m.AreaNo == item).ToList();
-                    var listStr = locate.Where(m => m.AreaNo == item).Select(m=>m.LocatNo).ToList();
+                    var listStr = locate.Where(m => m.AreaNo == item).Select(m => m.LocatNo).ToList();
                     //鍒ゆ柇鎶曟枡鍙g殑宸ヤ綅涓槸鍚︽湁鏈笅鍙戞垚鍔熺殑浠诲姟
-                    var task = Db.Queryable<LogTask>().Where(m => m.Type == "1" && m.IsSuccess == 0 && m.Status == "0" && listStr.Contains(m.EndLocat) ).OrderBy(m=>m.TaskNo).ToList();
-                    if(task.Count > 0)
+                    var task = Db.Queryable<LogTask>().Where(m => m.Type == "1" && m.IsSuccess == 0 && m.Status == "0" && listStr.Contains(m.EndLocat)).OrderBy(m => m.TaskNo).ToList();
+                    if (task.Count > 0)
                     {
-                        
+
                         foreach (var item2 in task)
                         {
                             //娣诲姞涓嬪彂浠诲姟鐨勪俊鎭�
@@ -5123,12 +5396,12 @@
                             //item2.Status = "1";
                             //Db.Updateable(item2).ExecuteCommand();
                         }
-                        
+
                         //return outlist;
                     }
 
                 }
-                if (outlist.Count>0)
+                if (outlist.Count > 0)
                 {
                     //灏嗕换鍔″彂閫佽嚦AGV
                     // 姝e紡杩愯绋嬪簭鏀惧紑
@@ -5147,8 +5420,8 @@
                         //if (wcsModel.StatusCode == 0)
                         //{
                         //    //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
-                           new TaskServer().EditTaskIssueOk(list2, time1, time2);
-                            
+                        new TaskServer().EditTaskIssueOk(list2, time1, time2);
+
                         //}
                         //if (wcsModel.StatusCode == -1)
                         //{
@@ -5161,7 +5434,7 @@
                         throw new Exception(ex.Message);
                     }
                 }
-                
+
                 return null;
             }
             catch (Exception e)
@@ -5186,7 +5459,7 @@
                 {
                     throw new Exception("褰撳墠浠诲姟宸插畬鎴�");
                 }
-                
+
                 Db.BeginTran();
                 //搴撳瓨涓綋鍓嶆墭鐩樼殑淇℃伅
                 var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
@@ -5224,11 +5497,11 @@
                         var exTime = Db.Queryable<BllProductionCallTask>().First(m => m.IsDel == "0" && m.PutInLocation == locate.AreaNo && m.SkuNo == locate.SkuNo);
                         if (exTime != null)
                         {
-                            var notice = Db.Queryable<BllExportNotice>().First(m=>m.IsDel =="0" && m.SONo == exTime.OrderCode);
+                            var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == exTime.OrderCode);
                             //鑾峰彇澶囧ソ鏂欑殑鎵樼洏淇℃伅
                             var taskStr = Db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.Receiver == "AGV").Select(m => m.TaskNo).ToList();
                             var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "2" && m.SONo == notice.SONo && m.SkuNo == locate.SkuNo && !taskStr.Contains(m.TaskNo)).Select(m => m.PalletNo).ToList();
-                            if (allotList.Count >0)
+                            if (allotList.Count > 0)
                             {
                                 var stockDetail2 = Db.Queryable<DataStockDetail>().Where(m => allotList.Contains(m.PalletNo)).OrderBy(m => m.LocatNo).First();
 
@@ -5266,7 +5539,7 @@
                             else
                             {
                                 var listLocate = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == locate.AreaNo).ToList();
-                                if (listLocate.Count(m=>m.SkuNo == locate.SkuNo && m.Status != "0") == 0)
+                                if (listLocate.Count(m => m.SkuNo == locate.SkuNo && m.Status != "0") == 0)
                                 {
                                     Db.Deleteable(exTime).ExecuteCommand();
                                 }
@@ -5323,7 +5596,7 @@
                                 //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
                                 Db.Deleteable(item2).ExecuteCommand();
                             }
-                            if (comList.Count>0)
+                            if (comList.Count > 0)
                             {
                                 Db.Insertable(comList).ExecuteCommand();
                             }
@@ -5352,9 +5625,9 @@
                             #endregion
 
                             #region 鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級
-                           
+
                             allot.Status = "5";
-                            
+
                             if (stockInfoList.Count == 0)
                             {
                                 allot.CompleteQty += item.LockQty;
@@ -5368,7 +5641,7 @@
 
                             #region 鍑哄簱鍗曞強鏄庣粏
                             var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.Id == allot.SODetailNo && m.IsDel == "0");
-                            
+
                             if (stockInfoList.Count == 0)
                             {
                                 noticeDetail.CompleteQty += item.LockQty;
@@ -5383,9 +5656,9 @@
                             {
                                 var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == noticeDetail.SONo);
                                 notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴�//淇敼鍑哄簱鍗曚俊鎭�
-                                                     
+
                                 Db.Updateable(notice).ExecuteCommand();
-                                
+
                             }
                             #endregion
 
@@ -5408,7 +5681,7 @@
                                 }
                             }
                         }
-                        
+
                         item.LocatNo = locate2.LocatNo;//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛�
                         item.WareHouseNo = locate2.WareHouseNo;//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
                         item.RoadwayNo = locate2.RoadwayNo;//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
@@ -5782,7 +6055,7 @@
                                                     OutMode = toLocation,  //鐩爣鍦板潃
                                                     Order = 1,
 
-                                                    
+
                                                 });
                                                 #endregion
 
@@ -5872,7 +6145,7 @@
                             item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
                             item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
                             item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡
-                            item.OutMode =  outMode ;//鍑哄簱鍙�
+                            item.OutMode = outMode;//鍑哄簱鍙�
                             //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//瑁呰溅鍙�
                             Db.Updateable(item).ExecuteCommand();
 
@@ -5916,7 +6189,7 @@
                             item.TaskNo = taskNo.TaskNo;
                             item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� 
                             item.OutMode = item.OutMode;//鍑哄簱鍙�
-                            item.UnstackingMode = unstackingMode2 ;//鎷嗗灈妯″紡
+                            item.UnstackingMode = unstackingMode2;//鎷嗗灈妯″紡
                             Db.Updateable(item).ExecuteCommand();
                             flagList.Add(0);
                             #endregion
@@ -6007,7 +6280,7 @@
                 throw new Exception(e.Message);
             }
         }
-        
+
         //閲嶆柊涓嬪彂鍑哄簱浠诲姟
         public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url)
         {
@@ -6330,7 +6603,7 @@
         }
         #endregion
 
-        
+
 
         /// <summary>
         /// 鍒ゆ柇鍑哄簱鏄惁闇�瑕佹媶绠�
@@ -6449,7 +6722,7 @@
                 {
                     sqlPub += $"AND tb1.IsDespatch = '{isDespatch}' ";
                 }
-                if (logisticsId != null) 
+                if (logisticsId != null)
                 {
                     sqlPub += $"AND tb1.LogisticsId = '{logisticsId}' ";
                 }
diff --git a/Wms/WMS.BLL/DataServer/StockServer.cs b/Wms/WMS.BLL/DataServer/StockServer.cs
index 28c62a6..2ecb669 100644
--- a/Wms/WMS.BLL/DataServer/StockServer.cs
+++ b/Wms/WMS.BLL/DataServer/StockServer.cs
@@ -47,9 +47,11 @@
         /// <param name="lotNo">鎵规</param>
         /// <param name="status">搴撳瓨鐘舵��</param>
         /// <param name="inspectStatus">璐ㄦ鐘舵��</param>
+        /// <param name="wareHouseNo">鎵�灞炰粨搴�</param>
+        /// <param name="areaNo">鎵�灞炲尯鍩�</param>
         /// <returns></returns>
         public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, 
-            string ownerName, string lotNo, string status, string inspectStatus)
+            string ownerName, string lotNo, string status, string inspectStatus, string wareHouseNo, string areaNo)
         {
             Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
             .AndIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo))
@@ -59,6 +61,8 @@
             .AndIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo.Contains(lotNo))
             .AndIF(!string.IsNullOrEmpty(status), a => a.Status == status)
             .AndIF(!string.IsNullOrEmpty(inspectStatus), a => a.InspectStatus == inspectStatus)
+            .AndIF(!string.IsNullOrEmpty(wareHouseNo), a => a.WareHouseNo == wareHouseNo)
+            .AndIF(!string.IsNullOrEmpty(areaNo), a => a.AreaNo == areaNo)
             .And(a => a.IsDel == "0")
             .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
 
diff --git a/Wms/WMS.IBLL/IBllSoServer/ICompleteDetailServer.cs b/Wms/WMS.IBLL/IBllSoServer/ICompleteDetailServer.cs
index 20c29d2..42a5036 100644
--- a/Wms/WMS.IBLL/IBllSoServer/ICompleteDetailServer.cs
+++ b/Wms/WMS.IBLL/IBllSoServer/ICompleteDetailServer.cs
@@ -26,7 +26,7 @@
         /// <param name="boxNo">绠辩爜</param>
         /// <param name="boxNo3">鏀爜</param>
         /// <returns></returns>
-        List<CompleteDetailDto> GetCompBoxInfoList(string boxNo,string boxNo3);
+        List<CompleteDetailDto> GetCompBoxInfoList(string sONo, string boxNo,string boxNo3);
 
         #region 鏁版嵁褰掓。
         /// <summary>
diff --git a/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs b/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs
index 80ac280..bae1ed5 100644
--- a/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs
+++ b/Wms/WMS.IBLL/IBllSoServer/IExportNoticeServer.cs
@@ -123,6 +123,18 @@
         /// <returns></returns>
         List<OutCommandDto> IssuePalletNoOut(string palletNo, string outMode, int userId, string url, out string str);
 
+        /// <summary>
+        /// 鎵樼洏鍑哄簱锛堝瘑闆嗗簱锛�
+        /// </summary>
+        /// <param name="palletNo"></param>
+        /// <param name="outMode"></param>
+        /// <param name="userId"></param>
+        /// <param name="url"></param>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        List<OutCommandDto> IssuePalletNoOutMk(string palletNo, string outMode, int userId, string url, out string str);
+
         //------------------------------------------------------------------------------------------
         #region 澶囨枡
 
diff --git a/Wms/WMS.IBLL/IDataServer/IStockServer.cs b/Wms/WMS.IBLL/IDataServer/IStockServer.cs
index 0b7fb63..0d0a3b2 100644
--- a/Wms/WMS.IBLL/IDataServer/IStockServer.cs
+++ b/Wms/WMS.IBLL/IDataServer/IStockServer.cs
@@ -23,9 +23,11 @@
         /// <param name="lotNo">鎵规</param>
         /// <param name="status">搴撳瓨鐘舵��</param>
         /// <param name="inspectStatus">璐ㄦ鐘舵��</param>
+        /// <param name="wareHouseNo">鎵�灞炰粨搴�</param>
+        /// <param name="areaNo">鎵�灞炲尯鍩�</param>
         /// <returns></returns>
         Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, 
-            string status, string inspectStatus);
+            string status, string inspectStatus, string wareHouseNo, string areaNo);
 
         /// <summary>
         /// 鑾峰彇搴撳瓨鏄庣粏
diff --git a/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs b/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
index 486d8e6..0c97f1d 100644
--- a/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
+++ b/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -142,6 +142,18 @@
         /// <param name="boxNo3">鏀�/琚嬬爜</param>
         /// <param name="userId">鎿嶄綔浜�</param>
         Task SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string PickQty, int userId);
+        /// <summary>
+        /// 鍑哄簱pda鎷h揣-JC34
+        /// </summary>
+        /// <param name="soNo"></param>
+        /// <param name="soDetailId"></param>
+        /// <param name="palletNo"></param>
+        /// <param name="boxNo">绠辩爜/鐩掔爜/鏀爜</param>
+        /// <param name="pickQty1"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        Task SoSetPick34(string soNo, string soDetailId, string palletNo, string boxNo, string pickQty1, int userId);
 
         /// <summary>
         /// 鍑哄簱pda鎷h揣
diff --git a/Wms/Wms/Controllers/BllSoController.cs b/Wms/Wms/Controllers/BllSoController.cs
index 3e3ace5..66fcd5e 100644
--- a/Wms/Wms/Controllers/BllSoController.cs
+++ b/Wms/Wms/Controllers/BllSoController.cs
@@ -582,11 +582,11 @@
         }
 
         [HttpGet]
-        public IActionResult GetCompBoxInfoList( string boxNo,string boxNo3)
+        public IActionResult GetCompBoxInfoList(string sONo, string boxNo,string boxNo3)
         {
             try
             {
-                var bolls = _comDetailSvc.GetCompBoxInfoList(boxNo, boxNo3);
+                var bolls = _comDetailSvc.GetCompBoxInfoList(sONo, boxNo, boxNo3);
 
                 return Ok(new { code = 0, count = bolls.Count, msg = "鎷h揣鏄庣粏淇℃伅", data = bolls });
             }
@@ -638,12 +638,21 @@
                     return Ok(new { code = 1, msg = "鏈幏鍙栧埌褰撳墠鎿嶄綔浜轰俊鎭�" });
                 }
                 //楠岃瘉鍑哄簱鍙�
-                //if (string.IsNullOrWhiteSpace(outMode))
-                //{
-                //    return Ok(new { code = 1, msg = "璇烽�夋嫨鍑哄簱鍙�" });
-                //}
-
-                var list = _exNoticeSvc.IssuePalletNoOut(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str);
+                if (string.IsNullOrWhiteSpace(outMode))
+                {
+                    return Ok(new { code = 1, msg = "璇烽�夋嫨鍑哄簱鍙�" });
+                }
+                string str = string.Empty;
+                var list = new List<OutCommandDto>();
+                if (outMode == "17" || outMode == "18")
+                {
+                    list = _exNoticeSvc.IssuePalletNoOutMk(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out str);
+                }
+                else
+                {
+                    list = _exNoticeSvc.IssuePalletNoOut(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out str);
+                }
+                 
 
                 return Ok(new { code = 0, msg = str, data = list });
 
diff --git a/Wms/Wms/Controllers/PdaSoController.cs b/Wms/Wms/Controllers/PdaSoController.cs
index 77e01ba..037cc83 100644
--- a/Wms/Wms/Controllers/PdaSoController.cs
+++ b/Wms/Wms/Controllers/PdaSoController.cs
@@ -160,7 +160,8 @@
         [HttpPost]
         public async Task SoSetPick(PdaSoVm model)
         {
-            await _pdaSoSvc.SoSetPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, _userManager.UserId);
+            //await _pdaSoSvc.SoSetPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, _userManager.UserId);
+            await _pdaSoSvc.SoSetPick34(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.PickQty, _userManager.UserId);
         }
 
         /// <summary>
diff --git a/Wms/Wms/Controllers/StatisticalController.cs b/Wms/Wms/Controllers/StatisticalController.cs
index 83c294e..0d14d91 100644
--- a/Wms/Wms/Controllers/StatisticalController.cs
+++ b/Wms/Wms/Controllers/StatisticalController.cs
@@ -7,6 +7,7 @@
 using WMS.IBLL.IDataServer;
 using System.Security.Claims;
 using System.Threading.Tasks;
+using Model.ModelDto.SysDto;
 
 namespace Wms.Controllers
 {
@@ -51,9 +52,9 @@
         /// <param name="inspectStatus">璐ㄦ鐘舵��</param>
         /// <returns></returns>
         [HttpGet]
-        public async Task<IActionResult> GetInventoryList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus)
+        public async Task<IActionResult> GetInventoryList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus, string wareHouseNo, string areaNo)
         {
-            List<MateDataStockDto> StockList = await _stock.GetDataStockList(selectType, skuNo, skuName, ownerNo, ownerName, lotNo, status, inspectStatus);
+            List<MateDataStockDto> StockList = await _stock.GetDataStockList(selectType, skuNo, skuName, ownerNo, ownerName, lotNo, status, inspectStatus, wareHouseNo, areaNo);
             return Ok(new
             {
                 data = StockList,

--
Gitblit v1.8.0