From bbeadfe2c0dd55405b83641751ad88874d0716f6 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期五, 31 十月 2025 09:06:52 +0800
Subject: [PATCH] 完善物料标签的补打标签和合并标签功能

---
 Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs |  325 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 289 insertions(+), 36 deletions(-)

diff --git a/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs b/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
index f6d72cd..9e38ac1 100644
--- a/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
+++ b/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
@@ -15,6 +15,9 @@
 using WMS.Entity.Context;
 using WMS.Entity.SysEntity;
 using WMS.IBLL.IBllAsnServer;
+using WMS.Entity.DataEntity;
+using Dm;
+using System.Reflection;
 
 namespace WMS.BLL.BllAsnServer
 {
@@ -514,7 +517,7 @@
                         CreateTime = a.CreateTime,
                         UpdateTime = a.UpdateTime
 
-                    }).OrderByDescending(a => a.CreateTime).OrderBy(a => a.BoxNo).ToOffsetPage(model.Page, model.Limit, ref total);
+                    }).OrderByDescending(a => a.ASNNo).OrderBy(a => a.BoxNo).ToOffsetPage(model.Page, model.Limit, ref total);
                 count = total;
                 return data;
             }
@@ -534,8 +537,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("鏈煡璇㈠埌鍗曟嵁鏄庣粏涓殑鐗╂枡鍖呰淇℃伅");
@@ -597,17 +609,31 @@
                 {
                     throw new Exception("鍗曟嵁鏁伴噺涓嶈兘灏忎簬绛変簬0");
                 }
-                if (string.IsNullOrWhiteSpace(asnList.LotNo))
+                //if (string.IsNullOrWhiteSpace(asnList.LotNo))
+                //{
+                //    throw new Exception("鍗曟嵁鎵规鍙蜂笉鑳戒负绌�");
+                //}
+                if (string.IsNullOrWhiteSpace(asnList.BoxCodeStr))
                 {
-                    throw new Exception("鍗曟嵁鎵规鍙蜂笉鑳戒负绌�");
+                    throw new Exception("鍗曟嵁绠辩爜甯稿�间笉鑳戒负绌�");
                 }
                 var asn = Db.Queryable<BllArrivalNotice>().First(m => m.ASNNo == asnList.ASNNo && m.IsDel == "0");
                 if (asn == null)
                 {
                     throw new Exception("鏈煡璇㈠埌鍗曟嵁淇℃伅");
                 }
-
-                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == asnList.PackagNo);
+                //鍖呰缂栫爜
+                var packagNo = asnList.PackagNo;
+                if (string.IsNullOrEmpty(packagNo))
+                {
+                    var skuInfo = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == asnList.SkuNo);
+                    if (skuInfo == null)
+                    {
+                        throw new Exception("鏈煡璇㈠埌鐗╂枡淇℃伅");
+                    }
+                    packagNo = skuInfo.PackagNo;
+                }
+                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == packagNo);
                 if (pack == null)
                 {
                     throw new Exception("鏈煡璇㈠埌褰撳墠鍗曟嵁涓墿鏂欑殑鍖呰淇℃伅");
@@ -649,16 +675,16 @@
 
                 #region 鍖呰鏌ヨ
 
-                var bNum = 0;//绠辩墿鍝佹暟閲�
-                var zNum = 0;//鏀墿鍝佹暟閲�
+                var bNum = 0m;//绠辩墿鍝佹暟閲�
+                var zNum = 0m;//鏀墿鍝佹暟閲�
                 var packLevel = 0;
 
                 if (pack.L2Num.HasValue)
                 {
                     if (pack.L2Name != "鎵�")
                     {
-                        packLevel = 2;
-                        bNum = Convert.ToInt32(pack.L2Num);
+                        packLevel = 1;//JC34椤圭洰鍙湁涓�绾ф爣绛�
+                        bNum = Convert.ToDecimal(pack.L2Num);
                     }
                 }
                 if (pack.L1Num.HasValue)
@@ -666,9 +692,9 @@
                     if (packLevel == 0)
                     {
                         packLevel = 1;
-                        bNum = Convert.ToInt32(pack.L1Num);
+                        bNum = Convert.ToDecimal(pack.L1Num);
                     }
-                    zNum = Convert.ToInt32(pack.L1Num);
+                    zNum = Convert.ToDecimal(pack.L1Num);
                 }
 
                 if (packLevel < 1)//鍖呰绛夌骇灏忎簬1锛屾寜鐓�1绾ф爣绛炬墦鍗�
@@ -710,22 +736,29 @@
                     #endregion
 
                     int labelNum = 1; //鐢熶骇鏉$爜鏁伴噺
-                    if (zNum > 0)
-                    {
-                        labelNum = int.Parse(Math.Ceiling(qty / zNum).ToString());//鏍囩鏁伴噺
-                    }
-                    else
-                    {
-                        throw new Exception("褰撳墠鍗曟嵁鐗╂枡鏄竴绾у寘瑁咃紝鏈煡璇㈠埌涓�绾у寘瑁呬俊鎭�");
-                    }
+                    //if (zNum > 0)
+                    //{
+                        labelNum = int.Parse(Math.Ceiling(qty / bNum).ToString());//鏍囩鏁伴噺
+                    //}
+                    //else
+                    //{
+                    //    throw new Exception("褰撳墠鍗曟嵁鐗╂枡鏄竴绾у寘瑁咃紝鏈煡璇㈠埌涓�绾у寘瑁呬俊鎭�");
+                    //}
 
                     #region 鑾峰彇/鐢熸垚鎵规鍙�
 
                     string maxLotNoStr = ""; //鎵规鍙�
                     string maxBoxCode = ""; //绠辩爜鍙�
-                    
-                    maxLotNoStr = asnList.LotNo;
-                    maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo);
+
+                    maxLotNoStr = asnList.BoxCodeStr;//asnList.LotNo;
+                    if (string.IsNullOrEmpty(asnList.LotNo))
+                    {
+                        maxBoxCode = label.Where(m => m.ASNDetailNo == asnList.Id).Max(a => a.BoxNo);
+                    }
+                    else
+                    {
+                        maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo);
+                    }
                     #endregion
 
                     for (int i = 1; i <= labelNum; i++)
@@ -734,30 +767,30 @@
                         if (i == labelNum)
                         {
                             // 鏈�鍚庝竴涓潯鐮�
-                            var s = zNum * (i - 1);
-                            if (zNum > qty - s)
+                            var s = bNum * (i - 1);
+                            if (bNum > qty - s)
                             {
                                 boxQty = qty - s;// 鏁伴噺
                             }
                             else
                             {
-                                boxQty = zNum;// 鏁伴噺
+                                boxQty = bNum;// 鏁伴噺
                             }
                         }
                         else
                         {
-                            boxQty = zNum;         // 鏁伴噺
+                            boxQty = bNum;         // 鏁伴噺
                         }
 
                         //鑾峰彇绠辩爜
                         if (string.IsNullOrWhiteSpace(maxBoxCode))
                         {
-                            var str = "B" + maxLotNoStr + "000001"; //鎵瑰彿+ 娴佹按  2302010001000001
+                            var str = "B" + maxLotNoStr + "000001"; //鎵瑰彿+ 娴佹按  B 230201 0001  000001
                             maxBoxCode = str;
                         }
                         else
                         {
-                            maxBoxCode = maxBoxCode.Substring(0, 11) + (int.Parse(maxBoxCode.Substring(11, 6)) + 1).ToString().PadLeft(6, '0');
+                            maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length-6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0');
                         }
 
                         // 灏嗘潯鐮佷繚瀛樺埌鍘熸枡鏉$爜琛�
@@ -771,7 +804,7 @@
                             Status = "0",
                             SkuNo = asnList.SkuNo,
                             SkuName = asnList.SkuName,
-                            LotNo = maxLotNoStr,
+                            LotNo = asnList.LotNo,//maxLotNoStr,
                             Standard = asnList.Standard,
                             PackageStandard = packStr,
                             SupplierLot = supplierLot,
@@ -779,14 +812,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);
@@ -931,14 +976,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);
@@ -1026,6 +1083,7 @@
 
                             model.ExpirationTime = data.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                             model.StoreTime = data.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                            model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
 
                             model.Qty = dataList.Sum(m => m.Qty);// 鏁伴噺
 
@@ -1081,6 +1139,7 @@
 
                                 model.ExpirationTime = data.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                 model.StoreTime = data.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
 
                                 model.Qty = data1.Sum(m => m.Qty);// 鏁伴噺
 
@@ -1133,6 +1192,7 @@
 
                             model.ExpirationTime = data.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                             model.StoreTime = data.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                            model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
 
                             model.Qty = data.Qty;// 鏁伴噺
 
@@ -1185,6 +1245,7 @@
 
                                 model.ExpirationTime = data.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                 model.StoreTime = data.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
 
                                 model.Qty = data.Qty;// 鏁伴噺
 
@@ -1251,6 +1312,7 @@
 
                                     model1.ExpirationTime = data.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                     model1.StoreTime = data.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                    model1.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
                                     model1.Qty = dataList.Sum(m => m.Qty);// 鏁伴噺
                                     model1.BoxNo = data.BoxNo;                 // 绠卞彿     
 
@@ -1270,6 +1332,7 @@
 
                                     model.ExpirationTime = data.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                     model.StoreTime = data.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                    model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
                                     model.Qty = data.Qty;// 鏁伴噺
                                     model.BoxNo = data.BoxNo3;                 // 鏀彿     
 
@@ -1317,6 +1380,7 @@
 
                                     model.ExpirationTime = boxData.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                     model.StoreTime = boxData.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                    model.ProductionTime = boxData.ProductionTime;//鐢熶骇鏃ユ湡
                                     model.Qty = data.Sum(m => m.Qty);     // 鏁伴噺
                                     model.BoxNo = boxData.BoxNo;                 // 鏀彿     
 
@@ -1339,6 +1403,7 @@
 
                                         model1.ExpirationTime = item.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                         model1.StoreTime = item.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                        model1.ProductionTime = item.ProductionTime;//鐢熶骇鏃ユ湡
                                         model1.Qty = item.Qty;// 鏁伴噺
                                         model1.BoxNo = item.BoxNo3;                 // 鏀彿     
 
@@ -1385,6 +1450,7 @@
 
                                 model.ExpirationTime = boxData.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                 model.StoreTime = boxData.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                model.ProductionTime = boxData.ProductionTime;//鐢熶骇鏃ユ湡
                                 model.Qty = data.Sum(m => m.Qty);     // 鏁伴噺
                                 model.BoxNo = boxData.BoxNo;                 // 鏀彿     
 
@@ -1409,6 +1475,7 @@
 
                                         model1.ExpirationTime = item.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                         model1.StoreTime = item.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                        model.ProductionTime = item.ProductionTime;//鐢熶骇鏃ユ湡
                                         model1.Qty = item.Qty;     // 鏁伴噺
                                         model1.BoxNo = item.BoxNo3;                 // 鏀彿     
 
@@ -1477,6 +1544,7 @@
 
                                 model.ExpirationTime = boxData.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                 model.StoreTime = boxData.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                model.ProductionTime = boxData.ProductionTime;//鐢熶骇鏃ユ湡
                                 model.Qty = data.Sum(m => m.Qty);     // 鏁伴噺
                                 model.BoxNo = boxData.BoxNo;                 // 鏀彿     
 
@@ -1505,6 +1573,7 @@
 
                                         model1.ExpirationTime = item.ExpirationTime;                  // 鏈夋晥鏈熻嚦
                                         model1.StoreTime = item.StoreTime;                     // 鍌ㄥ瓨鏈熻嚦 
+                                        model.ProductionTime = item.ProductionTime;//鐢熶骇鏃ユ湡
                                         model1.Qty = item.Qty;// 鏁伴噺
                                         model1.BoxNo = item.BoxNo3;                 // 鏀彿     
 
@@ -1679,6 +1748,190 @@
                 throw new Exception(e.Message);
             }
         }
+        /// <summary>
+        /// 鎷嗗垎绠辩爜鏍囩
+        /// </summary>
+        /// <param name="boxNo"></param>
+        /// <param name="chaiQty"></param>
+        /// <param name="userId"></param>
+        /// <exception cref="Exception"></exception>
+        public void ChaiLableBox(string boxNo,decimal chaiQty, int userId)
+        {
+            try
+            {
+                if (string.IsNullOrEmpty(boxNo))
+                {
+                    throw new Exception("璇疯緭鍏ユ媶绠辩鐮�");
+                }
+                if (chaiQty <= 0)
+                {
+                    throw new Exception("璇疯緭鍏ユ媶鍒嗘暟閲�");
+                }
+                //鏍囩淇℃伅
+                var boxList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList();
+                if (boxList.Count < 1)
+                {
+                    throw new Exception("璇ョ鐮佷俊鎭敊璇紝鏈煡鍒版绠辩爜淇℃伅");
+                }
+                if (boxList.Count > 1)
+                {
+                    throw new Exception("璇ョ鐮佷俊鎭敊璇紝瀛樺湪澶氫釜姝ょ鐮佷俊鎭�");
+                }
+                var boxInfo = boxList.First();
+                if (boxInfo.Qty <= chaiQty)
+                {
+                    throw new Exception("鎷嗙鏁伴噺澶х瓑浜庡綋鍓嶇鍐呮暟閲�");
+                }
+                if (boxInfo.Status != "0")
+                {
+                    throw new Exception("璇ョ鐮佷笉鏄湭缁勬墭鐘舵�侊紝涓嶅厑璁告媶绠憋紒");
+                }
+
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+
+                boxInfo.Qty -= chaiQty;
+                boxInfo.BitBoxMark = "1";
+                //鏇存柊绠辩爜搴撳瓨琛�
+                Db.Updateable(boxInfo).ExecuteCommand();
+
+                var boxStr = boxInfo.BoxNo.Substring(0, boxInfo.BoxNo.Length - 6);//鑾峰彇绠辩爜鍓嶇紑-闄ゅ悗鍏綅娴佹按澶�
+                var maxBoxCode1 = Db.Queryable<BllBoxInfo>().Where(m => m.BoxNo.Contains(boxStr) && m.IsDel == "0" && m.Origin == "WMS鐢熸垚").Max(a => a.BoxNo);
+
+                var maxBoxCode2 = Db.Queryable<DataBoxInfo>().Where(m => m.BoxNo.Contains(boxStr) && m.IsDel == "0").Max(a => a.BoxNo);
+                //濡傛灉缁撴灉涓�0锛屽垯璇存槑涓や釜瀛楃涓茬浉绛夛紱  ABC  BCE
+                //濡傛灉缁撴灉灏忎簬0锛屽垯璇存槑绗竴涓瓧绗︿覆灏忎簬绗簩涓瓧绗︿覆锛�
+                //濡傛灉缁撴灉澶т簬0锛屽垯璇存槑绗竴涓瓧绗︿覆澶т簬绗簩涓瓧绗︿覆銆�
+                var maxBoxCode = maxBoxCode1;
+                var bol = String.CompareOrdinal(maxBoxCode1, maxBoxCode2);
+                if (bol < 0)
+                {
+                    maxBoxCode = maxBoxCode2;
+                }
+                var boxNoNew = maxBoxCode.Substring(0, maxBoxCode.Length - 6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0');
+
+                // 娣诲姞鏂扮鐮佷俊鎭�
+                var boxModel = new BllBoxInfo()
+                {
+                    ASNNo = boxInfo.ASNNo,
+                    ASNDetailNo = boxInfo.ASNDetailNo,
+                    BoxNo = boxNoNew,
+                    BoxNo2 = "",
+                    BoxNo3 = "",
+                    Qty = chaiQty,
+                    FullQty = boxInfo.FullQty,
+                    Status = "0",//寰呯粍鎵�
+                    BindNo = null,
+                    PalletNo = "",
+                    SkuNo = boxInfo.SkuNo,
+                    SkuName = boxInfo.SkuName,
+                    LotNo = boxInfo.LotNo,
+                    Standard = boxInfo.Standard,
+                    PackageStandard = boxInfo.PackageStandard,
+                    SupplierLot = boxInfo.SupplierLot,
+                    InspectMark = boxInfo.InspectMark,
+                    BitBoxMark = "1",
+                    InspectStatus = "0",
+
+                    ProductionTime = boxInfo.ProductionTime,
+                    StoreTime = boxInfo.StoreTime,
+                    ExpirationTime = boxInfo.ExpirationTime,
+
+                    Origin = "WMS鐢熸垚",
+                    CreateUser = userId,
+                    CreateTime = DateTime.Now,
+                };
+                Db.Insertable(boxModel).ExecuteCommand();
+
+                //娣诲姞鎿嶄綔鏃ュ織
+                new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鐗╂枡鏍囩", boxNo, "缂栬緫", $"鎷嗗垎浜嗙鐮亄boxNo}鏁伴噺{chaiQty}鍒版柊绠辩爜{boxNoNew}", userId);
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
+            }   
+            catch (Exception e)
+            {
+                //鍥炴粴浜嬪姟
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
+        /// <summary>
+        /// 鍚堝苟绠辩爜鏍囩
+        /// </summary>
+        /// <param name="boxNo"></param>
+        /// <param name="boxNo2"></param>
+        /// <param name="userId"></param>
+        public void MergeLableBox(string boxNo,string boxNo2, int userId)
+        {
+            try
+            {
+                if (string.IsNullOrEmpty(boxNo) || string.IsNullOrEmpty(boxNo2))
+                {
+                    throw new Exception("璇疯緭鍏ヨ鍚堝苟鐨勭鐮�");
+                }
+                //鏍囩淇℃伅
+                var boxList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList();
+                if (boxList.Count < 1)
+                {
+                    throw new Exception($"{boxNo}璇ョ鐮佷俊鎭敊璇紝鏈煡鍒版绠辩爜淇℃伅");
+                }
+                if (boxList.Count > 1)
+                {
+                    throw new Exception($"{boxNo}璇ョ鐮佷俊鎭敊璇紝瀛樺湪澶氫釜姝ょ鐮佷俊鎭�");
+                }
+                var boxInfo = boxList.First();
+                if (boxInfo.Status != "0")
+                {
+                    throw new Exception($"{boxNo}璇ョ鐮佷笉鏄湭缁勬墭鐘舵�侊紝涓嶅厑璁稿悎骞讹紒");
+                }
+                var boxList2 = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo2).ToList();
+                if (boxList2.Count < 1)
+                {
+                    throw new Exception($"{boxNo2}璇ョ鐮佷俊鎭敊璇紝鏈煡鍒版绠辩爜淇℃伅");
+                }
+                if (boxList2.Count > 1)
+                {
+                    throw new Exception($"{boxNo2}璇ョ鐮佷俊鎭敊璇紝瀛樺湪澶氫釜姝ょ鐮佷俊鎭�");
+                }
+                var boxInfo2 = boxList2.First();
+                if (boxInfo2.Status != "0")
+                {
+                    throw new Exception($"{boxNo2}璇ョ鐮佷笉鏄湭缁勬墭鐘舵�侊紝涓嶅厑璁稿悎骞讹紒");
+                }
+                if (boxInfo.SkuNo != boxInfo2.SkuNo || boxInfo.LotNo != boxInfo2.LotNo)
+                {
+                    throw new Exception($"涓や釜绠辩爜鐗╂枡鎵规淇℃伅涓嶄竴鑷达紝涓嶅厑璁稿悎骞讹紒");
+                }
+                if (boxInfo.ASNNo != boxInfo2.ASNNo || boxInfo.ASNDetailNo != boxInfo2.ASNDetailNo)
+                {
+                    throw new Exception($"涓や釜绠辩爜鎵�灞炲叆搴撳崟淇℃伅涓嶄竴鑷达紝涓嶅厑璁稿悎骞讹紒");
+                }
+                if (boxInfo.Qty + boxInfo2.Qty > boxInfo.FullQty)
+                {
+                    throw new Exception($"涓や釜绠辩爜鍚堝苟鍚庢暟閲忚秴杩囨弧绠辨暟閲忥紝涓嶅厑璁稿悎骞讹紒");
+                }
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+
+                boxInfo.Qty += boxInfo2.Qty;
+                //鏇存柊绠辩爜搴撳瓨琛�
+                Db.Updateable(boxInfo).ExecuteCommand();
+                //鍒犻櫎琚悎骞剁鐮佷俊鎭�
+                Db.Deleteable(boxInfo2).ExecuteCommand();
+
+                //娣诲姞鎿嶄綔鏃ュ織
+                new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鐗╂枡鏍囩", boxNo, "缂栬緫", $"灏唟boxNo2}绠辩爜鍚堝苟鍒颁簡{boxNo}绠辩爜涓�", userId);
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
+
+            }
+            catch (Exception e)
+            {
+                //鍥炴粴浜嬪姟
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
         #endregion
 
         #region 鏁版嵁褰掓。

--
Gitblit v1.8.0