From f6d9155a4a0cf27fd5732314b70109cbc090ccf8 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期二, 04 十一月 2025 08:06:10 +0800
Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/JC34WMS

---
 Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs |  245 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 232 insertions(+), 13 deletions(-)

diff --git a/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs b/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
index a8f25c3..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
 {
@@ -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("鏈煡璇㈠埌鍗曟嵁鏄庣粏涓殑鐗╂枡鍖呰淇℃伅");
@@ -663,8 +675,8 @@
 
                 #region 鍖呰鏌ヨ
 
-                var bNum = 0;//绠辩墿鍝佹暟閲�
-                var zNum = 0;//鏀墿鍝佹暟閲�
+                var bNum = 0m;//绠辩墿鍝佹暟閲�
+                var zNum = 0m;//鏀墿鍝佹暟閲�
                 var packLevel = 0;
 
                 if (pack.L2Num.HasValue)
@@ -672,7 +684,7 @@
                     if (pack.L2Name != "鎵�")
                     {
                         packLevel = 1;//JC34椤圭洰鍙湁涓�绾ф爣绛�
-                        bNum = Convert.ToInt32(pack.L2Num);
+                        bNum = Convert.ToDecimal(pack.L2Num);
                     }
                 }
                 if (pack.L1Num.HasValue)
@@ -680,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绾ф爣绛炬墦鍗�
@@ -781,7 +793,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 +812,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 +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);
@@ -1713,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