From e00c9e03eeaffad919cf16c95b2d6048e8abfb9d Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期五, 28 三月 2025 16:34:59 +0800
Subject: [PATCH] 修改问题

---
 Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs |    2 
 Wms/Wms/Controllers/PdaCrController.cs       |    8 
 Wms/Wms/Controllers/PdaSoController.cs       |    4 
 Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs      |  741 +++++++++++++++++++++++++++++++++++++++
 Pda/View/SoSetting/pinTuoOut.html            |   38 +-
 Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs      |   29 +
 Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs      |  265 ++++++++-----
 Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs      |    3 
 8 files changed, 957 insertions(+), 133 deletions(-)

diff --git a/Pda/View/SoSetting/pinTuoOut.html b/Pda/View/SoSetting/pinTuoOut.html
index 982a286..2475d5f 100644
--- a/Pda/View/SoSetting/pinTuoOut.html
+++ b/Pda/View/SoSetting/pinTuoOut.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>
@@ -310,7 +310,7 @@
 											</div>
 										</div>
 									</td>
-								</tr>
+								</tr> -->
 
 							</table>
 						</div>
@@ -680,7 +680,7 @@
 					isContinue = "0";
 				}
 				$('#boxNo').val("");
-				$('#boxNo3').val("");
+				//$('#boxNo3').val("");
 			});
 
 			//绠辩爜鏂囨湰妗嗗洖杞︿簨浠�
@@ -986,20 +986,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()) 
@@ -1032,8 +1032,8 @@
 					"SoDetailId": $("#skuLotNo").val(),
 					"PalletNo": $('#palletNo').val(),
 					"BoxNo": $('#boxNo').val(),
-					"BoxNo3": $('#boxNo3').val(),
-					"PickQty": $('#pickQty1').val(),
+					//"BoxNo3": $('#boxNo3').val(),
+					//"PickQty": $('#pickQty1').val(),
 					"palletNoNew": $('#palletNo3').val(),
 				}
 				sendData(IP + "/PdaSo/SoSetPinPick", param, 'post', function (res) {
diff --git a/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
index 96924c1..a0e216c 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -5,8 +5,10 @@
 using System.Text;
 using System.Threading.Tasks;
 using Dm;
+using Model.InterFaceModel;
 using Model.ModelDto.BllCheckDto;
 using Model.ModelDto.PdaDto;
+using Newtonsoft.Json;
 using SqlSugar;
 using Utility;
 using WMS.BLL.LogServer;
@@ -780,123 +782,170 @@
         /// <param name="palletNo"></param>
         /// <param name="areaNo"></param>
         /// <param name="ruku"></param>
-        public async Task AgvTransport(string palletNo, string areaNo, string ruku, int userId)
+        public async Task AgvTransport(string palletNo, string areaNo, string ruku, string url, int userId)
         {
-            if (string.IsNullOrEmpty(palletNo))
+            try
             {
-                throw Oops.Bah("璇锋壂鎻忔墭鐩樻潯鐮侊紒");
-            }
-            if (string.IsNullOrEmpty(areaNo) && string.IsNullOrEmpty(ruku))
-            {
-                throw Oops.Bah("璇烽�夋嫨鐩爣鍖哄煙鎴栧叆搴撳彛锛�");
-            }
-            if (!string.IsNullOrEmpty(areaNo) && !string.IsNullOrEmpty(ruku))
-            {
-                throw Oops.Bah("鐩爣鍖哄煙鍜屽叆搴撳彛涓嶈兘鍚屾椂閫夋嫨锛�");
-            }
-            string EndLocat = string.Empty;//鐩爣浣嶇疆                
-
-            var log = await Db.Queryable<LogTask>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1"));
-            if (log != null)
-            {
-                throw Oops.Bah("璇ユ墭鐩樺凡鏈夊皬杞︾瓑寰呮墽琛屾垨姝e湪鎵ц鐨勪换鍔�!");
-            }
-            var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo);
-            if (stockDetail == null)
-            {
-                throw Oops.Bah("鎵樼洏涓婄墿鏂欏簱瀛樻槑缁嗕俊鎭笉瀛樺湪,璇锋鏌�!");
-            }
-            if (!string.IsNullOrEmpty(areaNo))
-            {
-                var storageArea = await Db.Queryable<SysStorageArea>().FirstAsync(w => w.IsDel == "0" && w.AreaNo == areaNo);
-                if (storageArea == null)
+                if (string.IsNullOrEmpty(palletNo))
                 {
-                    throw Oops.Bah("鎵�閫夊尯鍩熶俊鎭笉瀛樺湪,璇锋鏌�!");
+                    throw Oops.Bah("璇锋壂鎻忔墭鐩樻潯鐮侊紒");
                 }
-                EndLocat = await GetLocat(areaNo, stockDetail.SkuNo, stockDetail.LotNo, palletNo);
-            }
-            else
-            {
-                EndLocat = ruku;
-            }
-            var stock = await Db.Queryable<DataStock>().FirstAsync(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo);
-            if (stock == null)
-            {
-                throw Oops.Bah("鎵樼洏涓婄墿鏂欏簱瀛樹俊鎭笉瀛樺湪,璇锋鏌�!");
-            }
-            if (string.IsNullOrEmpty(stockDetail.LocatNo))
-            {
-                throw Oops.Bah("鎵樼洏鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
-            }
-            if (stockDetail.WareHouseNo != "W02")
-            {
-                throw Oops.Bah("璇ユ墭鐩樻湭鍦ㄥ钩搴撳唴,璇锋鏌�!");
-            }
-            //璧峰鍌ㄤ綅淇℃伅
-            var storageLocat = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == stockDetail.LocatNo);
-            if (storageLocat == null)
-            {
-                throw Oops.Bah("鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
-            }
-            //鐩爣鍌ㄤ綅淇℃伅
-            var storageLocatEnd = new SysStorageLocat();
-            if (!string.IsNullOrEmpty(areaNo))
-            {
-                storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0" && w.Status == "0");
-                if (storageLocatEnd == null)
+                if (string.IsNullOrEmpty(areaNo) && string.IsNullOrEmpty(ruku))
                 {
-                    throw Oops.Bah("鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
+                    throw Oops.Bah("璇烽�夋嫨鐩爣鍖哄煙鎴栧叆搴撳彛锛�");
                 }
+                if (!string.IsNullOrEmpty(areaNo) && !string.IsNullOrEmpty(ruku))
+                {
+                    throw Oops.Bah("鐩爣鍖哄煙鍜屽叆搴撳彛涓嶈兘鍚屾椂閫夋嫨锛�");
+                }
+                string EndLocat = string.Empty;//鐩爣浣嶇疆                
+
+                var log = await Db.Queryable<LogTask>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1"));
+                if (log != null)
+                {
+                    throw Oops.Bah("璇ユ墭鐩樺凡鏈夌瓑寰呮墽琛屾垨姝e湪鎵ц鐨勪换鍔�!");
+                }
+                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo);
+                if (stockDetail == null)
+                {
+                    throw Oops.Bah("鎵樼洏涓婄墿鏂欏簱瀛樻槑缁嗕俊鎭笉瀛樺湪,璇锋鏌�!");
+                }
+                if (!string.IsNullOrEmpty(areaNo))
+                {
+                    var storageArea = await Db.Queryable<SysStorageArea>().FirstAsync(w => w.IsDel == "0" && w.AreaNo == areaNo);
+                    if (storageArea == null)
+                    {
+                        throw Oops.Bah("鎵�閫夊尯鍩熶俊鎭笉瀛樺湪,璇锋鏌�!");
+                    }
+                    EndLocat = await GetLocat(areaNo, stockDetail.SkuNo, stockDetail.LotNo, palletNo);
+                }
+                else
+                {
+                    EndLocat = ruku;
+                }
+                var stock = await Db.Queryable<DataStock>().FirstAsync(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo);
+                if (stock == null)
+                {
+                    throw Oops.Bah("鎵樼洏涓婄墿鏂欏簱瀛樹俊鎭笉瀛樺湪,璇锋鏌�!");
+                }
+                if (string.IsNullOrEmpty(stockDetail.LocatNo))
+                {
+                    throw Oops.Bah("鎵樼洏鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
+                }
+                if (stockDetail.WareHouseNo != "W04")
+                {
+                    throw Oops.Bah("璇ユ墭鐩樻湭鍦ㄥ钩搴撳唴,璇锋鏌�!");
+                }
+                //璧峰鍌ㄤ綅淇℃伅
+                var storageLocat = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == stockDetail.LocatNo);
+                if (storageLocat == null)
+                {
+                    throw Oops.Bah("鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
+                }
+                //鐩爣鍌ㄤ綅淇℃伅
+                var storageLocatEnd = new SysStorageLocat();
+                if (!string.IsNullOrEmpty(areaNo))
+                {
+                    storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0" && w.Status == "0");
+                    if (storageLocatEnd == null)
+                    {
+                        throw Oops.Bah("鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
+                    }
+                }
+
+                //娣诲姞鍑哄簱浠诲姟
+                var taskNo = new Common().GetMaxNo("TK");
+                var exTask = new LogTask
+                {
+                    TaskNo = taskNo,
+                    Sender = "WMS",
+                    Receiver = "AGV",
+                    IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                    StartLocat = stockDetail.LocatNo,//璧峰浣嶇疆
+                    EndLocat = EndLocat,//鐩爣浣嶇疆
+                    PalletNo = palletNo,//鎵樼洏鐮�
+                    Msg = string.Format("杞繍浠诲姟锛歿0}=>>{1}", stockDetail.LocatNo, EndLocat),
+                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                    IsCancel = 1,//鏄惁鍙彇娑�
+                    IsFinish = 1,//鏄惁鍙畬鎴�
+                    Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                    OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+
+                    CreateTime = DateTime.Now
+                };
+                await Db.Insertable(exTask).ExecuteCommandAsync();
+
+                //淇敼搴撳瓨鏄庣粏淇℃伅
+                //stockDetail.Status = "4";//绉诲簱閿佸畾
+                //stockDetail.LockQty = stockDetail.Qty;//閿佸畾搴撳瓨鏁伴噺
+                //await Db.Updateable(stockDetail).ExecuteCommandAsync();
+                ////淇敼搴撳瓨淇℃伅
+                //stock.LockQty += (decimal)stockDetail.Qty;
+                //await Db.Updateable(stock).ExecuteCommandAsync();
+
+                //淇敼璧峰鍌ㄤ綅鍦板潃鐘舵��
+                storageLocat.Status = "5";//0锛氱┖鍌ㄤ綅 1锛氭湁鐗╁搧 2锛氬叆搴撲腑 3锛氬嚭搴撲腑 4锛氱Щ鍏ヤ腑 5锛氱Щ鍑轰腑 
+                await Db.Updateable(storageLocat).ExecuteCommandAsync();
+
+                //淇敼鐩爣鍌ㄤ綅鍦板潃鐘舵��
+                if (storageLocatEnd != null)
+                {
+                    storageLocatEnd.Status = "4";//0锛氱┖鍌ㄤ綅 1锛氭湁鐗╁搧 2锛氬叆搴撲腑 3锛氬嚭搴撲腑 4锛氱Щ鍏ヤ腑 5锛氱Щ鍑轰腑 
+                    await Db.Updateable(storageLocatEnd).ExecuteCommandAsync();
+                }
+                //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                var k = new OperationCrServer().AddLogOperationCr("PDA妯″潡", "AGV杞繍", palletNo, "绉诲簱", $"PDA鍛煎彨灏忚溅瀵规墭鐩樺彿锛歿palletNo}鍙戣捣杞繍", userId);
+
+                var outDto = new List<OutCommandDto>();
+                outDto.Add(new OutCommandDto()
+                {
+                    PalletNo = exTask.PalletNo,//鎵樼洏鍙�
+                    StartLocate = exTask.StartLocat, // 璧峰浣嶇疆
+                    StartRoadway = storageLocat.RoadwayNo,//鍏跺疄宸烽亾
+                    EndLocate = EndLocat, // 鐩爣浣嶇疆 
+                    TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+                    TaskType = "2",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� 
+                    OutMode = "",  //鍑哄簱鍙� 
+                    Order = 1
+
+                });
+
+                // 姝e紡杩愯绋嬪簭鏀惧紑
+                var list2 = outDto.Select(m => m.TaskNo).ToList();
+                var jsonData = JsonConvert.SerializeObject(outDto);
+                string response = "";
+
+                try
+                {
+                    var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+                    //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+                    var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+                    //////瑙f瀽杩斿洖鏁版嵁 
+                    //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
+                    //if (wcsModel.StatusCode == 0)
+                    //{
+                    //    //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+                    new TaskServer().EditTaskIssueOk(list2, time1, time2);
+                    //}
+                    //if (wcsModel.StatusCode == -1)
+                    //{
+                    //    new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
+                    //    throw new Exception(wcsModel.Msg);
+                    //}
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+
             }
-
-            //娣诲姞鍑哄簱浠诲姟
-            var taskNo = new Common().GetMaxNo("TK");
-            var exTask = new LogTask
+            catch (Exception e)
             {
-                TaskNo = taskNo,
-                Sender = "WMS",
-                Receiver = "AGV",
-                IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
-
-                StartLocat = stockDetail.LocatNo,//璧峰浣嶇疆
-                EndLocat = EndLocat,//鐩爣浣嶇疆
-                PalletNo = palletNo,//鎵樼洏鐮�
-                Msg = string.Format("杞繍浠诲姟锛歿0}=>>{1}", stockDetail.LocatNo, EndLocat),
-                IsSend = 1,//鏄惁鍙啀娆′笅鍙�
-                IsCancel = 1,//鏄惁鍙彇娑�
-                IsFinish = 1,//鏄惁鍙畬鎴�
-                Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
-                Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
-                OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
-
-                CreateTime = DateTime.Now
-            };
-            await Db.Insertable(exTask).ExecuteCommandAsync();
-
-            //淇敼搴撳瓨鏄庣粏淇℃伅
-            stockDetail.Status = "4";//绉诲簱閿佸畾
-            stockDetail.LockQty = stockDetail.Qty;//閿佸畾搴撳瓨鏁伴噺
-            await Db.Updateable(stockDetail).ExecuteCommandAsync();
-            //淇敼搴撳瓨淇℃伅
-            stock.LockQty += (decimal)stockDetail.Qty;
-            await Db.Updateable(stock).ExecuteCommandAsync();
-
-            //淇敼璧峰鍌ㄤ綅鍦板潃鐘舵��
-            storageLocat.Status = "5";//0锛氱┖鍌ㄤ綅 1锛氭湁鐗╁搧 2锛氬叆搴撲腑 3锛氬嚭搴撲腑 4锛氱Щ鍏ヤ腑 5锛氱Щ鍑轰腑 
-            await Db.Updateable(storageLocat).ExecuteCommandAsync();
-
-            //淇敼鐩爣鍌ㄤ綅鍦板潃鐘舵��
-            if (storageLocatEnd != null)
-            {
-                storageLocatEnd.Status = "4";//0锛氱┖鍌ㄤ綅 1锛氭湁鐗╁搧 2锛氬叆搴撲腑 3锛氬嚭搴撲腑 4锛氱Щ鍏ヤ腑 5锛氱Щ鍑轰腑 
-                await Db.Updateable(storageLocatEnd).ExecuteCommandAsync();
+                throw new Exception(e.Message);
             }
-            //娣诲姞鎿嶄綔鏃ュ織璁板綍
-            var k = new OperationCrServer().AddLogOperationCr("PDA妯″潡", "AGV杞繍", palletNo, "绉诲簱", $"PDA鍛煎彨灏忚溅瀵规墭鐩樺彿锛歿palletNo}鍙戣捣杞繍", userId);
-
-            #region 鍛煎彨灏忚溅浠g爜
-
-            #endregion
         }
         /// <summary>
         /// agv杞繍鍛煎彨灏忚溅鍙栬揣
diff --git a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
index 2c65e4c..5a9d722 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -29,6 +29,747 @@
     {
         private static readonly SqlSugarScope Db = DataContext.Db;
 
+        #region JC34
+
+        /// <summary>
+        /// 鎷兼墭鍑哄簱pda鎷h揣-鏍囩
+        /// </summary>
+        /// <param name="soNo"></param>
+        /// <param name="soDetailId"></param>
+        /// <param name="palletNo"></param>
+        /// <param name="boxNo"></param>
+        /// <param name="palletNoNew"></param>
+        /// <param name="userId"></param>
+        public async Task SoSetPinPick34(string soNo, string soDetailId, string palletNo, string boxNo , string palletNoNew, int userId)
+        {
+            Db.BeginTran();
+            try
+            {
+                var nowDate = DateTime.Now;//褰撳墠鏃堕棿
+                #region 鍒ゆ柇
+
+                if (string.IsNullOrWhiteSpace(soNo))
+                {
+                    throw Oops.Bah("鍑哄簱鍗曟嵁涓嶈兘涓虹┖");
+                }
+                if (string.IsNullOrWhiteSpace(soDetailId))
+                {
+                    throw Oops.Bah("鍑哄簱鐗╂枡-鎵规涓嶈兘涓虹┖");
+                }
+                if (string.IsNullOrWhiteSpace(palletNo))
+                {
+                    throw Oops.Bah("鎵樼洏鐮佷笉鑳戒负绌�");
+                }
+                if (string.IsNullOrWhiteSpace(palletNoNew))
+                {
+                    throw Oops.Bah("鏂版墭鐩樼爜涓嶈兘涓虹┖");
+                }
+                if (palletNo == palletNoNew)//鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷�
+                {
+                    if (!string.IsNullOrEmpty(boxNo))
+                    {
+                        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")
+                {
+                    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.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
+
+                #region 鎷兼墭淇℃伅
+                var sdId = 0;
+                bool isNew = false;
+                var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
+                if (pinStockDetail != null)
+                {
+                    if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐�
+                    {
+                        if (pinStockDetail.SONo != notice.SONo)
+                        {
+                            throw Oops.Bah("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�");
+                        }
+                        if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo)
+                        {
+                            isNew = true;
+                        }
+                    }
+                    sdId = pinStockDetail.Id;
+                }
+                else
+                {
+                    isNew = true;
+
+                    var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
+                    if (newPalletInfo == null)
+                    {
+                        throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒");
+                    }
+                    //淇敼鏂版墭鐩樼姸鎬�
+                    newPalletInfo.Status = "1";
+                    await Db.Updateable(newPalletInfo).ExecuteCommandAsync();
+                }
+                var sd = new DataStockDetail();
+                if (isNew)
+                {
+                    sd.LotNo = stockDetail.LotNo;
+                    sd.LotText = stockDetail.LotText;
+                    sd.SupplierLot = stockDetail.SupplierLot;
+                    sd.SkuNo = stockDetail.SkuNo;
+                    sd.SkuName = stockDetail.SkuName;
+                    sd.Standard = stockDetail.Standard;
+
+                    sd.FrozenQty = 0;
+                    sd.InspectQty = 0;
+                    sd.ASNNo = "";
+                    sd.ASNDetailNo = null;
+                    sd.SONo = soNo;//鍑哄簱鍗曞彿
+                    sd.WareHouseNo = "";
+                    sd.RoadwayNo = "";
+                    sd.AreaNo = "";
+                    sd.LocatNo = "";
+                    sd.PalletNo = palletNoNew;
+                    sd.PalletNo2 = "";
+                    sd.PalletNo3 = "";
+
+                    sd.CompleteTime = nowDate;
+                    sd.ProductionTime = stockDetail.ProductionTime;
+                    sd.ExpirationTime = stockDetail.ExpirationTime;
+                    sd.Status = "2";//鐘舵�侊紝宸插垎閰�
+                    sd.InspectMark = stockDetail.InspectMark;
+                    sd.InspectStatus = stockDetail.InspectStatus;
+                    sd.BitPalletMark = "0";
+                    sd.PackagNo = noticeDetail.PackagNo;
+                    sd.IsBale = stockDetail.IsBale;
+                    sd.IsBelt = stockDetail.IsBelt;
+                    sd.Demo = stockDetail.Demo;
+                    sd.OwnerName = stockDetail.OwnerName;
+                    sd.OwnerNo = stockDetail.OwnerNo;
+                    sd.SupplierName = stockDetail.SupplierName;
+                    sd.SupplierNo = stockDetail.SupplierNo;
+
+                    sd.IsDel = "0";
+                    sd.CreateUser = userId;
+                    sd.CreateTime = nowDate;
+
+                    //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅
+                    sdId = await Db.Insertable(sd).ExecuteReturnIdentityAsync();
+                }
+                #endregion
+
+                decimal pickQty = 0;//鎷h揣鐨勬暟閲�
+                if (string.IsNullOrWhiteSpace(boxNo))//鏁存墭鎷h揣
+                {
+                    List<DataBoxInfo> boxInfos;
+                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo);//鎵惧埌鎵樼洏涓婃墍鏈夌鐮�
+                    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揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺");
+                    }
+
+                    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.BoxNo == item.BoxNo))
+                        {
+                            throw Oops.Bah($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷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);
+
+                        if (palletNo != palletNoNew)
+                        {
+                            item.StockDetailId = sdId;
+                            item.BindNo = null;//鎵樼洏缁戝畾鍙�
+                            item.PalletNo = palletNoNew;
+                        }
+                        item.Status = "5";//绠辨敮鐘舵�侊紝0锛氭湭缁勬墭  1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣
+                        //淇敼搴撳瓨绠辩爜鏄庣粏
+                        await Db.Updateable(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();
+
+                    if (palletNo != palletNoNew)
+                    {
+                        //鍒犻櫎鍘熸墭鐩樺簱瀛樻槑缁�
+                        await Db.Deleteable(stockDetail).ExecuteCommandAsync();
+
+                        //鏀瑰彉鍘熸墭鐩樼姸鎬佷负锛氭湭浣跨敤
+                        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();
+                    }
+                    else
+                    {
+                        stockDetail.SONo = soNo;
+                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
+                    }
+
+                    //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲�
+                    noticeDetail.CompleteQty += pickQty;
+                    await Db.Updateable(noticeDetail).ExecuteCommandAsync();
+
+                    var num = Db.Queryable<BllExportNoticeDetail>().Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
+                    if (num <= 0)
+                    {
+                        notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴�
+                    }
+                    //淇敼鍑哄簱鍗曚俊鎭�
+                    await Db.Updateable(notice).ExecuteCommandAsync();
+                }
+                else
+                {
+                    var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暎鏀嫞璐с��2锛氭暟閲忔嫞璐�
+                    List<DataBoxInfo> boxInfos;
+                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo);
+                    if (await boxInfo.CountAsync() == 0)
+                    {
+                        throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅");
+                    }
+                    
+                    var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync();
+                    
+                    //鏁寸鎷h揣
+                    
+                    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揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺");
+                    }
+                    boxInfos = await boxInfo.ToListAsync();
+                    foreach (var item in boxInfos)
+                    {
+                        if (comDetailList.Any(m => m.BoxNo == item.BoxNo))
+                        {
+                            throw Oops.Bah($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷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 = item.Qty,
+
+                            CreateUser = userId
+                        };
+                        comList.Add(completeDetail);
+
+                        //淇敼搴撳瓨绠辩爜鏄庣粏
+                        item.StockDetailId = sdId;
+                        item.BindNo = null;//鎵樼洏缁戝畾鍙�
+                        item.PalletNo = palletNoNew;
+                        item.Status = "5";//绠辨敮鐘舵�侊紝0锛氭湭缁勬墭  1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣
+                        await Db.Updateable(item).ExecuteCommandAsync();
+
+                        pickQty += item.Qty;
+                        
+                    }
+                    
+                    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();
+
+                    //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁�
+                    stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇�
+                    stockDetail.Qty -= pickQty;
+                    stockDetail.LockQty -= pickQty;
+                    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();
+                    }
+                    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 (isNew)
+                {
+                    sd.Qty = pickQty;
+                    sd.LockQty = pickQty;
+                    await Db.Updateable(sd).ExecuteCommandAsync();
+                }
+                else
+                {
+                    if (palletNo != palletNoNew)
+                    {
+                        //淇敼鎷兼墭鎵樼洏搴撳瓨鏄庣粏
+                        pinStockDetail.Qty += pickQty;
+                        pinStockDetail.LockQty += pickQty;
+                        await Db.Updateable(pinStockDetail).ExecuteCommandAsync();
+                    }
+                }
+
+                //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鎷兼墭", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勫師鎵樼洏鐮佷负锛歿palletNo}锛屾柊鎵樼洏鐮佷负锛歿palletNoNew}鐨勬嫞璐ф嫾鎵樻搷浣�", userId);
+                Db.CommitTran();
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw e;
+            }
+        }
+
+        /// <summary>
+        /// 鎷兼墭鍑哄簱pda鎷h揣-鏁伴噺
+        /// </summary>
+        /// <param name="soNo"></param>
+        /// <param name="soDetailId"></param>
+        /// <param name="palletNo"></param>
+        /// <param name="PickQty"></param>
+        /// <param name="palletNoNew"></param>
+        /// <param name="userId"></param>
+        public async Task SoSetQtyPinPick34(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId)
+        {
+            Db.BeginTran();
+            try
+            {
+                var nowDate = DateTime.Now;//褰撳墠鏃堕棿
+                #region 鍒ゆ柇
+
+                if (string.IsNullOrWhiteSpace(soNo))
+                {
+                    throw Oops.Bah("鍑哄簱鍗曟嵁涓嶈兘涓虹┖");
+                }
+                if (string.IsNullOrWhiteSpace(palletNo))
+                {
+                    throw Oops.Bah("鎵樼洏鐮佷笉鑳戒负绌�");
+                }
+                if (string.IsNullOrWhiteSpace(palletNoNew))
+                {
+                    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")
+                {
+                    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.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;
+                if (int.Parse(PickQty) > needQty)
+                {
+                    throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬鎵樺唴鍓╀綑寰呮嫞鏁伴噺");
+                }
+
+                //搴撳瓨鏄庣粏
+                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("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�");
+                }
+                if (palletNo == palletNoNew)//鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷�
+                {
+                    if (int.Parse(PickQty) != stockDetail.Qty)
+                    {
+                        throw Oops.Bah("鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷达紝闇�瑕佹妸鎵樼洏涓婃墍鏈夋暟閲忔嫞璐�");
+                    }
+                }
+                #endregion
+
+                #region 鎷兼墭淇℃伅
+                bool isNew = false;
+                var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
+                if (pinStockDetail != null)
+                {
+                    if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐�
+                    {
+                        if (pinStockDetail.SONo != notice.SONo)
+                        {
+                            throw Oops.Bah("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�");
+                        }
+                        if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo)
+                        {
+                            isNew = true;
+                        }
+                    }
+                }
+                else
+                {
+                    isNew = true;
+
+                    var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
+                    if (newPalletInfo == null)
+                    {
+                        throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒");
+                    }
+                    //淇敼鏂版墭鐩樼姸鎬�
+                    newPalletInfo.Status = "1";
+                    await Db.Updateable(newPalletInfo).ExecuteCommandAsync();
+                }
+
+                if (isNew)
+                {
+                    var sd = new DataStockDetail();
+
+                    sd.LotNo = stockDetail.LotNo;
+                    sd.LotText = stockDetail.LotText;
+                    sd.SupplierLot = stockDetail.SupplierLot;
+                    sd.SkuNo = stockDetail.SkuNo;
+                    sd.SkuName = stockDetail.SkuName;
+                    sd.Standard = stockDetail.Standard;
+
+                    sd.Qty = int.Parse(PickQty);
+                    sd.LockQty = int.Parse(PickQty);
+
+                    sd.FrozenQty = 0;
+                    sd.InspectQty = 0;
+                    sd.ASNNo = "";
+                    sd.ASNDetailNo = null;
+                    sd.SONo = soNo;//鍑哄簱鍗曞彿
+                    sd.WareHouseNo = "";
+                    sd.RoadwayNo = "";
+                    sd.AreaNo = "";
+                    sd.LocatNo = "";
+                    sd.PalletNo = palletNoNew;
+                    sd.PalletNo2 = "";
+                    sd.PalletNo3 = "";
+                    //PalletType = item.PalletType,
+                    sd.CompleteTime = nowDate;
+                    sd.ProductionTime = stockDetail.ProductionTime;
+                    sd.ExpirationTime = stockDetail.ExpirationTime;
+                    sd.Status = "2";//鐘舵�侊紝宸插垎閰�
+                    sd.InspectMark = stockDetail.InspectMark;
+                    sd.InspectStatus = stockDetail.InspectStatus;
+                    sd.BitPalletMark = "0";
+                    sd.PackagNo = noticeDetail.PackagNo;
+                    sd.IsBale = stockDetail.IsBale;
+                    sd.IsBelt = stockDetail.IsBelt;
+                    sd.Demo = stockDetail.Demo;
+                    sd.OwnerName = stockDetail.OwnerName;
+                    sd.OwnerNo = stockDetail.OwnerNo;
+                    sd.SupplierName = stockDetail.SupplierName;
+                    sd.SupplierNo = stockDetail.SupplierNo;
+
+                    sd.IsDel = "0";
+                    sd.CreateUser = userId;
+                    sd.CreateTime = nowDate;
+
+                    //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅
+                    await Db.Insertable(sd).ExecuteReturnIdentityAsync();
+                }
+                else
+                {
+                    if (palletNo != palletNoNew)
+                    {
+                        //淇敼鎷兼墭鎵樼洏搴撳瓨鏄庣粏
+                        pinStockDetail.Qty += int.Parse(PickQty);
+                        pinStockDetail.LockQty += int.Parse(PickQty);
+                        await Db.Updateable(pinStockDetail).ExecuteCommandAsync();
+                    }
+                    else
+                    {
+                        pinStockDetail.SONo = soNo;
+                        await Db.Updateable(pinStockDetail).ExecuteCommandAsync();
+                    }
+                }
+                #endregion
+
+                //鑾峰彇褰撳墠鎵樼洏鎷h揣鏄庣粏
+                var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id);
+
+                //鍒よ鏄惁瀛樺湪鎷h揣鏄庣粏
+                int isComplete = 0;
+                if (complete != null)
+                {
+                    isComplete = 1;
+                }
+
+                var comList = new List<BllCompleteDetail>();
+                //鍒ゆ柇鏄惁瀛樺湪鎷h揣鏄庣粏
+                isComplete = 0;//鎵�鏈夋棤绠辩爜鎴栦竴绾х鐮佹嫞璐ф椂锛屾嫞璐ф槑缁嗗簲閲嶆柊鎻掑叆鏁版嵁(浣撶幇澶氭鎷h揣娴佺▼璁板綍)
+                if (isComplete == 0)
+                {
+                    //娣诲姞鎷h揣鏄庣粏
+                    var completeDetail = new BllCompleteDetail()
+                    {
+                        SONo = soNo,
+                        SODetailNo = int.Parse(soDetailId),
+                        ExportAllotId = allot.Id,
+                        StockId = allot.StockId,
+                        BoxNo = "",
+                        BoxNo2 = "",
+                        BoxNo3 = "",
+
+                        LotNo = allot.LotNo,
+                        LotText = allot.LotText,
+                        SupplierLot = allot.SupplierLot,
+                        SkuNo = allot.SkuNo,
+                        SkuName = allot.SkuName,
+                        Standard = allot.Standard,
+                        PalletNo = palletNo,
+                        CompleteQty = int.Parse(PickQty),
+
+                        CreateUser = userId,
+                        CreateTime = Db.GetDate(),
+                    };
+                    comList.Add(completeDetail);
+
+                    //娣诲姞鎷h揣鏄庣粏
+                    await Db.Insertable(comList).ExecuteCommandAsync();
+                }
+                else if (isComplete == 1)
+                {
+                    complete.CompleteQty += int.Parse(PickQty);
+                    complete.UpdateUser = userId;
+                    complete.UpdateTime = Db.GetDate();
+
+                    await Db.Updateable(complete).ExecuteCommandAsync();
+                }
+
+                //淇敼鍑哄簱鍒嗛厤淇℃伅
+                allot.CompleteQty += int.Parse(PickQty);
+                allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
+                allot.UpdateTime = DateTime.Now;
+                await Db.Updateable(allot).ExecuteCommandAsync();
+
+                int isDel = 0;
+
+                if (palletNo != palletNoNew)
+                {
+                    //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁�
+                    stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇�
+                    stockDetail.Qty -= int.Parse(PickQty);
+                    stockDetail.LockQty -= int.Parse(PickQty);
+                    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
+                    {
+                        isDel = 1;
+                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
+                    }
+                }
+                else
+                {
+                    isDel = 1;
+                }
+                //鍒ゆ柇鎵樼洏涓婄墿鏂欐槸鍚︽嫞璐у畬姣�
+                if (isDel == 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 += int.Parse(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();
+
+                //娣诲姞鎿嶄綔鏃ュ織璁板綍
+                var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鎷兼墭", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}锛屾柊鎵樼洏鐮佷负锛歿palletNoNew}鐨勬嫞璐ф搷浣�", userId);
+                Db.CommitTran();
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw e;
+            }
+        }
+
+        #endregion
+
         //楠岃瘉鎵樼洏鏄惁瀛樺湪骞舵槸鍚﹀彲鍑哄簱
         public async Task<string> IsEnableOkPalletNo(string palletNo)
         {
diff --git a/Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs b/Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs
index 2b9bd85..2ba4af2 100644
--- a/Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs
+++ b/Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs
@@ -127,7 +127,7 @@
         public decimal? CompleteQty {get;set;}
 
         /// <summary>
-        /// Desc:鐘舵��
+        /// Desc:鐘舵�� 0寰呬笅鍙�  1浠诲姟涓嬪彂  2寰呮嫞璐�  3閮ㄥ垎鎷h揣  5宸插畬鎴�  6寮傚父鍙栨秷
         /// Default:0
         /// Nullable:True
         /// </summary>           
diff --git a/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs b/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
index 9efe0bd..9c0210f 100644
--- a/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
+++ b/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
@@ -130,7 +130,8 @@
         /// <param name="palletNo"></param>
         /// <param name="areaNo"></param>
         /// <param name="ruku"></param>
-        Task AgvTransport(string palletNo, string areaNo, string ruku, int userId);
+        /// <param name="url"></param>
+        Task AgvTransport(string palletNo, string areaNo, string ruku, string url, int userId);
         /// <summary>
         ///  agv杞繍鍛煎彨灏忚溅鍙栬揣
         /// </summary>
diff --git a/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs b/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
index d0d59f4..871c02d 100644
--- a/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
+++ b/Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -10,6 +10,35 @@
 {
     public interface IPdaSoServer
     {
+
+        #region JC34
+
+
+        /// <summary>
+        /// 鎷兼墭鍑哄簱pda鎷h揣-鏍囩
+        /// </summary>
+        /// <param name="soNo">鍑哄簱鍗�</param>
+        /// <param name="soDetailId">鍑哄簱鍗曟槑缁咺D</param>
+        /// <param name="palletNo">鎵樼洏鍙�</param> 
+        /// <param name="boxNo">绠辩爜</param>
+        /// <param name="boxNo2">鐩掔爜</param>
+        /// <param name="boxNo3">鏀�/琚嬬爜</param>
+        /// <param name="palletNo">鏂版墭鐩樺彿</param> 
+        /// <param name="userId">鎿嶄綔浜�</param>
+        Task SoSetPinPick34(string soNo, string soDetailId, string palletNo, string boxNo,string palletNoNew, int userId);
+        /// <summary>
+        /// 鎷兼墭鍑哄簱pda鎷h揣-鏁伴噺
+        /// </summary>
+        /// <param name="soNo"></param>
+        /// <param name="soDetailId"></param>
+        /// <param name="palletNo"></param>
+        /// <param name="PickQty"></param>
+        /// <param name="palletNoNew"></param>
+        /// <param name="userId"></param>
+        Task SoSetQtyPinPick34(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId);
+
+        #endregion
+
         /// <summary>
         /// 楠岃瘉鎵樼洏鏄惁瀛樺湪骞舵槸鍚﹀彲鍑哄簱
         /// </summary>
diff --git a/Wms/Wms/Controllers/PdaCrController.cs b/Wms/Wms/Controllers/PdaCrController.cs
index 616062a..9dea8fb 100644
--- a/Wms/Wms/Controllers/PdaCrController.cs
+++ b/Wms/Wms/Controllers/PdaCrController.cs
@@ -15,6 +15,8 @@
 using Model.ModelDto.PdaDto;
 using Microsoft.AspNetCore.Identity;
 using System.Security.Cryptography;
+using Wms.Tools;
+using Microsoft.Extensions.Options;
 
 namespace Wms.Controllers
 {
@@ -23,11 +25,13 @@
     [Authorize]
     public class PdaCrController : ControllerBase
     {
+        private readonly ApiUrlConfig _config; //鎺ュ彛浜や簰璺緞
         private readonly IPdaCrServer _pdaCrSvc;
         private readonly UserManager _userManager;
 
-        public PdaCrController(IPdaCrServer pdaCrSvc, UserManager userManager)
+        public PdaCrController(IOptions<ApiUrlConfig> setting, IPdaCrServer pdaCrSvc, UserManager userManager)
         {
+            _config = setting.Value;
             _pdaCrSvc = pdaCrSvc;
             _userManager = userManager;
         }
@@ -231,7 +235,7 @@
         [UnitOfWork]
         public async Task AgvTransport(PdaAgvTransportVm model)
         {
-            await _pdaCrSvc.AgvTransport(model.PalletNo, model.AreaNo, model.Ruku, _userManager.UserId);
+            await _pdaCrSvc.AgvTransport(model.PalletNo, model.AreaNo, model.Ruku, _config.WcsHost+ _config.IssueComApiUrl, _userManager.UserId);
         }
         /// <summary>
         /// agv杞繍鍛煎彨灏忚溅鍙栬揣
diff --git a/Wms/Wms/Controllers/PdaSoController.cs b/Wms/Wms/Controllers/PdaSoController.cs
index 7e4d432..a20295f 100644
--- a/Wms/Wms/Controllers/PdaSoController.cs
+++ b/Wms/Wms/Controllers/PdaSoController.cs
@@ -251,7 +251,7 @@
         [HttpPost]
         public async Task SoSetPinPick(PdaSoVm model)
         {
-            await _pdaSoSvc.SoSetPinPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, model.PalletNoNew, _userManager.UserId);
+            await _pdaSoSvc.SoSetPinPick34(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.PalletNoNew, _userManager.UserId);
         }
         /// <summary>
         /// 鎷兼墭鍑哄簱pda鎷h揣-鏁伴噺
@@ -261,7 +261,7 @@
         [HttpPost]
         public async Task SoSetQtyPinPick(PdaSoVm model)
         {
-            await _pdaSoSvc.SoSetQtyPinPick(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.PalletNoNew, _userManager.UserId);
+            await _pdaSoSvc.SoSetQtyPinPick34(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.PalletNoNew, _userManager.UserId);
         }
         #endregion
 

--
Gitblit v1.8.0