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 | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 274 insertions(+), 22 deletions(-)
diff --git a/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs b/Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
index ace488b..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,8 +675,8 @@
#region 鍖呰鏌ヨ
- var bNum = 0;//绠辩墿鍝佹暟閲�
- var zNum = 0;//鏀墿鍝佹暟閲�
+ var bNum = 0m;//绠辩墿鍝佹暟閲�
+ var zNum = 0m;//鏀墿鍝佹暟閲�
var packLevel = 0;
if (pack.L2Num.HasValue)
@@ -658,7 +684,7 @@
if (pack.L2Name != "鎵�")
{
packLevel = 1;//JC34椤圭洰鍙湁涓�绾ф爣绛�
- bNum = Convert.ToInt32(pack.L2Num);
+ 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绾ф爣绛炬墦鍗�
@@ -723,9 +749,16 @@
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++)
@@ -760,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()
{
@@ -772,7 +804,7 @@
Status = "0",
SkuNo = asnList.SkuNo,
SkuName = asnList.SkuName,
- LotNo = maxLotNoStr,
+ LotNo = asnList.LotNo,//maxLotNoStr,
Standard = asnList.Standard,
PackageStandard = packStr,
SupplierLot = supplierLot,
@@ -780,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);
@@ -932,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);
@@ -1027,6 +1083,7 @@
model.ExpirationTime = data.ExpirationTime; // 鏈夋晥鏈熻嚦
model.StoreTime = data.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
model.Qty = dataList.Sum(m => m.Qty);// 鏁伴噺
@@ -1082,6 +1139,7 @@
model.ExpirationTime = data.ExpirationTime; // 鏈夋晥鏈熻嚦
model.StoreTime = data.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
model.Qty = data1.Sum(m => m.Qty);// 鏁伴噺
@@ -1134,6 +1192,7 @@
model.ExpirationTime = data.ExpirationTime; // 鏈夋晥鏈熻嚦
model.StoreTime = data.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
model.Qty = data.Qty;// 鏁伴噺
@@ -1186,6 +1245,7 @@
model.ExpirationTime = data.ExpirationTime; // 鏈夋晥鏈熻嚦
model.StoreTime = data.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
model.Qty = data.Qty;// 鏁伴噺
@@ -1252,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; // 绠卞彿
@@ -1271,6 +1332,7 @@
model.ExpirationTime = data.ExpirationTime; // 鏈夋晥鏈熻嚦
model.StoreTime = data.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model.ProductionTime = data.ProductionTime;//鐢熶骇鏃ユ湡
model.Qty = data.Qty;// 鏁伴噺
model.BoxNo = data.BoxNo3; // 鏀彿
@@ -1318,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; // 鏀彿
@@ -1340,6 +1403,7 @@
model1.ExpirationTime = item.ExpirationTime; // 鏈夋晥鏈熻嚦
model1.StoreTime = item.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model1.ProductionTime = item.ProductionTime;//鐢熶骇鏃ユ湡
model1.Qty = item.Qty;// 鏁伴噺
model1.BoxNo = item.BoxNo3; // 鏀彿
@@ -1386,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; // 鏀彿
@@ -1410,6 +1475,7 @@
model1.ExpirationTime = item.ExpirationTime; // 鏈夋晥鏈熻嚦
model1.StoreTime = item.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model.ProductionTime = item.ProductionTime;//鐢熶骇鏃ユ湡
model1.Qty = item.Qty; // 鏁伴噺
model1.BoxNo = item.BoxNo3; // 鏀彿
@@ -1478,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; // 鏀彿
@@ -1506,6 +1573,7 @@
model1.ExpirationTime = item.ExpirationTime; // 鏈夋晥鏈熻嚦
model1.StoreTime = item.StoreTime; // 鍌ㄥ瓨鏈熻嚦
+ model.ProductionTime = item.ProductionTime;//鐢熶骇鏃ユ湡
model1.Qty = item.Qty;// 鏁伴噺
model1.BoxNo = item.BoxNo3; // 鏀彿
@@ -1680,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