From 1ab448972aed699a5665876316972cc07b879e95 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期五, 18 十月 2024 15:35:13 +0800
Subject: [PATCH] 包装行为支持生成包装条码

---
 Tiger.Model.Net/Entitys/BAS/BAS_PKG_DTL.cs                       |   74 ++++++++++++++----------
 Tiger.Business.MES/Transaction/Position.cs                       |   39 ++++++++++--
 Tiger.Business.MES/WorkAction/PackingAction.cs                   |   12 ++-
 Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs |    1 
 Tiger.IBusiness.MES/Transaction/IPosition.cs                     |    7 ++
 Tiger.Business.MES/Common/WoContext.cs                           |    2 
 6 files changed, 92 insertions(+), 43 deletions(-)

diff --git a/Tiger.Business.MES/Common/WoContext.cs b/Tiger.Business.MES/Common/WoContext.cs
index 6fcdb16..9804f8d 100644
--- a/Tiger.Business.MES/Common/WoContext.cs
+++ b/Tiger.Business.MES/Common/WoContext.cs
@@ -35,7 +35,7 @@
         {
             if (ExistsBatch(workorder, lineCode, batchNo))
             {
-                return WoBatchDic.FirstOrDefault(q => q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode && (batchNo.IsNullOrEmpty() || q.Value.Batch.BATCH_NO == batchNo)).Value;
+                return WoBatchDic.FirstOrDefault(q => !q.Value.Batch.IsNullOrEmpty() && q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode && (batchNo.IsNullOrEmpty() || q.Value.Batch.BATCH_NO == batchNo)).Value;
             }
             return null;
         }
diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs
index 5035f38..7c5b570 100644
--- a/Tiger.Business.MES/Transaction/Position.cs
+++ b/Tiger.Business.MES/Transaction/Position.cs
@@ -538,7 +538,7 @@
         /// <param name="labelPVs">杩囩▼鍙橀噺鍒楄〃</param>
         /// <param name="lv">鏍囩妯℃澘鍙橀噺</param>
         /// <returns></returns>
-        public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv, List<BAS_LABEL_VAR> lvars, IWorkAction action)
+        public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv, List<BAS_LABEL_VAR> lvars, IWorkAction curAction)
         {
             var pv = labelPVs.FirstOrDefault(q => q.VAR_CODE == lv.VAR_VALUE);
             if (!pv.IsNullOrEmpty())
@@ -562,12 +562,12 @@
                                 case "GetPackNumber":
                                     return GetLabelVarWo(lv, WorkBatch.WO.ORDER_NO);
                                 case "GetBoxQR":
-                                    return action is PackingAction ? GetBoxCode(lvars, action as PackingAction) : "";
+                                    return curAction is PackingAction ? GetBoxCode(lvars, curAction as PackingAction) : "";
                                 case "GetCardQR":
-                                    return action is PackingAction ? GetCardOrBoxQR(GetCardCode(lvars), lvars, action as PackingAction) : "";
+                                    return curAction is PackingAction ? GetCardOrBoxQR(GetCardCode(lvars), lvars, curAction as PackingAction) : "";
                                 case "GetCardSN":
                                     List<string> minPkgList = new List<string>();
-                                    var _pkaction = action is PackingAction ? action as PackingAction : null;
+                                    var _pkaction = curAction is PackingAction ? curAction as PackingAction : null;
                                     if (_pkaction != null)
                                     {
                                         minPkgList = GetMinPkgList(_pkaction);
@@ -583,7 +583,7 @@
                                     return GetLabelVarWo(lv, WorkBatch.WO.Customer?.CUST_NAME_CN);
                                 case "GetHWDate":
                                     List<string> list = new List<string>();
-                                    var _action = action is PackingAction ? action as PackingAction : null;
+                                    var _action = curAction is PackingAction ? curAction as PackingAction : null;
                                     if (_action != null)
                                     {
                                         list = GetMinPkgList(_action);
@@ -591,7 +591,7 @@
                                     return GetHuaWeiWeek(WorkBatch.Batch.ORDER_NO, list);
                                 case "GetQty":
                                     List<string> qtylist = new List<string>();
-                                    var _qtyAction = action is PackingAction ? action as PackingAction : null;
+                                    var _qtyAction = curAction is PackingAction ? curAction as PackingAction : null;
                                     if (_qtyAction != null)
                                     {
                                         qtylist = GetMinPkgList(_qtyAction);
@@ -611,7 +611,7 @@
                                     return GetLabelVarWo(lv, "");
                                 case "GetLOTNO":
                                     string _lotnos = "";
-                                    var _orderAction = action is PackingAction ? action as PackingAction : null;
+                                    var _orderAction = curAction is PackingAction ? curAction as PackingAction : null;
                                     if (_orderAction != null)
                                     {
                                         var snList = _orderAction.GetMinPackageList(_orderAction.CurPkg.Item).Select(q => q.FLOW_SN).ToList();
@@ -816,6 +816,31 @@
             }
         }
         #endregion
+        #region 鏉$爜瑙勫垯鏂规硶
+        /// <summary>
+        /// 鑾峰彇鏍规嵁鏉$爜瑙勫垯鐢熸垚鏉$爜
+        /// </summary>
+        /// <param name="ruleCode"></param>
+        /// <param name="curAction"></param>
+        /// <returns></returns>
+        public string GenerateSN(string ruleCode, IWorkAction curAction)
+        {
+            var rule = Biz.CodeRule[ruleCode ?? ""];
+            if (!rule.IsNullOrEmpty())
+            {
+                switch (rule.RULE_CODE)
+                {
+                    case "WhiteBoxNo":
+                        return rule.Generate("W", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
+                    case "CartonNo":
+                        return rule.Generate("B", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
+                    default:
+                        return rule.Generate().Data.ToString() ?? "";
+                }
+            }
+            return "";
+        }
+        #endregion
         #region 鍖呰涓撶敤鏂规硶
         /// <summary>
         /// 鏍规嵁浼犲叆鐨勫寘瑁呭璞¤繑鍥炴墍鏈夌殑鍖呰瀹炰綋鍒楄〃
diff --git a/Tiger.Business.MES/WorkAction/PackingAction.cs b/Tiger.Business.MES/WorkAction/PackingAction.cs
index 2fed0fa..b16ca05 100644
--- a/Tiger.Business.MES/WorkAction/PackingAction.cs
+++ b/Tiger.Business.MES/WorkAction/PackingAction.cs
@@ -84,6 +84,7 @@
                         PKG_LEVEL = max.PKG_LEVEL,
                         PKG_QTY = max.PKG_QTY,
                         LABEL_CODE = LabelDic.Count > max.PKG_LEVEL ? LabelDic[max.PKG_LEVEL]?.LABEL_CODE : null,
+                        SN = CurPosition.GenerateSN(max.SN_RULE, this),
                     }
                 };
                 WipPkgItem child = null;
@@ -99,6 +100,7 @@
                             PKG_LEVEL = dtl.PKG_LEVEL,
                             PKG_QTY = dtl.PKG_QTY,
                             LABEL_CODE = LabelDic.Count > dtl.PKG_LEVEL ? LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE : null,
+                            SN = CurPosition.GenerateSN(dtl.SN_RULE, this),
                         };
                         if (!child.IsNullOrEmpty())
                         {
@@ -533,14 +535,15 @@
                         PKG_LEVEL = dtl.PKG_LEVEL,
                         PKG_QTY = dtl.PKG_QTY,
                         LABEL_CODE = LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE,
+                        SN = CurPosition.GenerateSN(dtl.SN_RULE, this).IsNullOrEmpty(pInput.PkgSN),
                         IsFinished = true,
                     };
 
-                    CurPkgItem.Package = Biz.Db.Queryable<MES_WIP_PKG>().Where(q => q.SN == pInput.PkgSN && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).First() ?? new()
+                    CurPkgItem.Package = Biz.Db.Queryable<MES_WIP_PKG>().Where(q => q.SN == CurPkgItem.SN && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).First() ?? new()
                     {
                         AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                         AUTH_PROD = CurPosition.CurLine.LINE_CODE,
-                        SN = pInput.PkgSN,
+                        SN = CurPkgItem.SN,
                     };
                     CurPkgItem.Package.WIP_ID = CurPosition.CurWipSNs.Count == 1 ? CurPosition.CurWipSNs.First().ID : null;
                     CurPkgItem.Package.PKG_TYPE = dtl.PkgType.PKG_NAME;
@@ -585,7 +588,7 @@
                         {
                             AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                             AUTH_PROD = CurPosition.CurLine.LINE_CODE,
-                            SN = pInput.PkgSN,
+                            SN = CurPkgItem.SN.IsNullOrEmpty(pInput.PkgSN),
                             PKG_TYPE = dtl.PkgType.PKG_NAME,
                             ITEM_CODE = CurPkgItem.Items.First().Package.ITEM_CODE,
                             QTY = CurPkgItem.Items.Sum(q => q.Package.QTY),
@@ -605,7 +608,7 @@
                         {
                             AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                             AUTH_PROD = CurPosition.CurLine.LINE_CODE,
-                            SN = pInput.PkgSN,
+                            SN = CurPkgItem.SN.IsNullOrEmpty(pInput.PkgSN),
                             PKG_TYPE = dtl.PkgType.PKG_NAME,
                             ITEM_CODE = CurPosition.CurWipSNs.First().ITEM_CODE,
                             QTY = CurPkgItem.Items.Sum(q => q.Package.QTY),
@@ -656,6 +659,7 @@
                                     PKG_LEVEL = nextDtl.PKG_LEVEL,
                                     PKG_QTY = nextDtl.PKG_QTY,
                                     LABEL_CODE = LabelDic[nextDtl.PKG_LEVEL]?.LABEL_CODE,
+                                    SN = CurPosition.GenerateSN(nextDtl.SN_RULE, this),
                                 };
                                 curItem.Items.Add(next);
                             }
diff --git a/Tiger.IBusiness.MES/Transaction/IPosition.cs b/Tiger.IBusiness.MES/Transaction/IPosition.cs
index c6edc37..00e49f9 100644
--- a/Tiger.IBusiness.MES/Transaction/IPosition.cs
+++ b/Tiger.IBusiness.MES/Transaction/IPosition.cs
@@ -78,6 +78,13 @@
         /// <param name="parent"></param>
         /// <returns></returns>
         public List<MES_WIP_PKG> GetPackageList(WipPkgItem parent);
+        /// <summary>
+        /// 鑾峰彇鏍规嵁鏉$爜瑙勫垯鐢熸垚鏉$爜
+        /// </summary>
+        /// <param name="ruleCode"></param>
+        /// <param name="curAction"></param>
+        /// <returns></returns>
+        public string GenerateSN(string ruleCode, IWorkAction curAction);
         #endregion Functions
     }
 }
diff --git a/Tiger.Model.Net/Entitys/BAS/BAS_PKG_DTL.cs b/Tiger.Model.Net/Entitys/BAS/BAS_PKG_DTL.cs
index 1e1ad2f..a3c20a5 100644
--- a/Tiger.Model.Net/Entitys/BAS/BAS_PKG_DTL.cs
+++ b/Tiger.Model.Net/Entitys/BAS/BAS_PKG_DTL.cs
@@ -6,45 +6,57 @@
 
 namespace Tiger.Model
 {
-	/// <summary>
-	/// 瀹炰綋锛氬寘瑁呮暟閲忔槑缁�
-	/// </summary>
-	[Description("Primary:ID")]
-	[Serializable]
-	[SugarTable("BAS_PKG_DTL")]
-	public class BAS_PKG_DTL : DbEntityWithAuth
-	{
-		#region 鏋勯�犲嚱鏁�
-		/// <summary>
-		/// 瀹炰綋锛氬寘瑁呮暟閲忔槑缁�
-		/// </summary>
-		public BAS_PKG_DTL() {}
-		#endregion
+    /// <summary>
+    /// 瀹炰綋锛氬寘瑁呮暟閲忔槑缁�
+    /// </summary>
+    [Description("Primary:ID")]
+    [DisplayName("鍖呰鏁伴噺鏄庣粏")]
+    [Serializable]
+    [SugarTable("BAS_PKG_DTL")]
+    public class BAS_PKG_DTL : DbEntityWithAuth
+    {
+        #region 鏋勯�犲嚱鏁�
+        /// <summary>
+        /// 瀹炰綋锛氬寘瑁呮暟閲忔槑缁�
+        /// </summary>
+        public BAS_PKG_DTL() { }
+        #endregion
 
-		#region 鍏叡灞炴��
-		/// <summary>
-		/// 鍖呰瑙勫垯ID
-		/// </summary>
-		public string PKG_RULE_ID { get; set; }
-		/// <summary>
-		/// 鍖呰/杞藉叿缂栫爜
-		/// </summary>
-		public string PKG_CODE { get; set; }
-		/// <summary>
-		/// 鍖呰灞傜骇
-		/// </summary>
-		public int PKG_LEVEL { get; set; }
-		/// <summary>
-		/// 鍖呰鏁伴噺
-		/// </summary>
-		public int PKG_QTY { get; set; }
+        #region 鍏叡灞炴��
+        /// <summary>
+        /// 鍖呰瑙勫垯ID
+        /// </summary>
+        [DisplayName("鍖呰瑙勫垯ID")]
+        public string PKG_RULE_ID { get; set; }
+        /// <summary>
+        /// 鍖呰/杞藉叿缂栫爜
+        /// </summary>
+        [DisplayName("鍖呰/杞藉叿缂栫爜")]
+        public string PKG_CODE { get; set; }
+        /// <summary>
+        /// 鍖呰灞傜骇
+        /// </summary>
+        [DisplayName("鍖呰灞傜骇")]
+        public int PKG_LEVEL { get; set; }
+        /// <summary>
+        /// 鍖呰鏁伴噺
+        /// </summary>
+        [DisplayName("鍖呰鏁伴噺")]
+        public int PKG_QTY { get; set; }
         /// <summary>
         /// 鏍囩妯℃澘缂栫爜
         /// </summary>
+        [DisplayName("鏍囩妯℃澘缂栫爜")]
         public string LABEL_CODE { get; set; }
+        /// <summary>
+        /// 鍖呰鏉$爜瑙勫垯缂栫爜
+        /// </summary>
+        [DisplayName("鍖呰鏉$爜瑙勫垯缂栫爜")]
+        public string SN_RULE { get; set; }
         /// <summary>
         /// 澶囨敞
         /// </summary>
+        [DisplayName("澶囨敞")]
         public string REMARK { get; set; }
         #endregion
 
diff --git a/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs b/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
index 80918c0..ba389de 100644
--- a/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
+++ b/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
@@ -182,6 +182,7 @@
         public int PKG_LEVEL { get; set; }
         public int PKG_QTY { get; set; }
         public string LABEL_CODE { get; set; }
+        public string SN { get; set; }
         public MES_WIP_PKG Package { get; set; }
         public bool IsFinished { get; set; } = false;
         public List<WipPkgItem> Items { get; set; } = new List<WipPkgItem>();

--
Gitblit v1.9.3