From c598e4bf57de2b4703d6c0e4d0905c9159273d26 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期二, 06 八月 2024 10:16:18 +0800
Subject: [PATCH] 条码增加托盘批量过站逻辑和包装外箱过站逻辑

---
 Tiger.Business.MES/Transaction/Position.cs |   82 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 75 insertions(+), 7 deletions(-)

diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs
index eabfb3b..4e11575 100644
--- a/Tiger.Business.MES/Transaction/Position.cs
+++ b/Tiger.Business.MES/Transaction/Position.cs
@@ -55,8 +55,9 @@
         public MES_SHIFT_SYS CurShiftSys { get; set; }
         public WorkBatch CurBatch { get; set; }
         public IWorkBatch WorkBatch => CurBatch;
-        public MES_WIP_DATA CurWipSN { get; set; }
-        public MES_WIP_HIS CurWipSNHis { get; set; }
+        public List<MES_WIP_DATA> CurWipSNs { get; set; }
+        public string CurSN => CurWipSNs.First().TRAY_SN.IsNullOrEmpty() ? CurWipSNs.First().SN : CurWipSNs.First().TRAY_SN;
+        public List<MES_WIP_HIS> CurWipSNHiss { get; set; }
         public Dictionary<string, object> Context { get; set; } = new();
         public List<WorkStep> Steps { get; set; } = new();
         public WorkStep CurStep { get; set; }
@@ -65,6 +66,12 @@
         public bool IsFinishAllSteps => !Steps.Any() || !Steps.Any(q => !q.IsFinished);
         //public int CurStep => Steps.Where(q => !q.IsFinished).OrderBy(q => q.Sequence).FirstOrDefault()?.Sequence ?? 0;
         private DbClient CommitDB;
+        /// <summary>
+        /// 鏄惁闇�瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽緟闇�瑕佺殑鏃跺�欏啀鎻愪氦
+        /// </summary>
+        public bool NeedTemporaryStoreDBCommitAction { get; set; } = false;
+        protected List<Action> DBCommitList { get; set; } = new();
+
         #endregion Propertys & Variables
 
         #region Functions
@@ -168,8 +175,8 @@
         public virtual void ResetNode()
         {
             Steps.Clear();
-            CurWipSN = null;
-            CurWipSNHis = null;
+            CurWipSNs = null;
+            CurWipSNHiss = null;
             CurStep = null;
         }
 
@@ -222,6 +229,7 @@
                         NodeAct = act,
                         Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID),
                     };
+                    next.Init();
                     next.PrepNodeIDs.Add(parent.NodeID);
                     next.PrepNodeIDs.AddRange(parent.PrepNodeIDs);
                     next.PrepNodeIDs = next.PrepNodeIDs.Distinct().ToList();
@@ -280,7 +288,7 @@
         /// <param name="input"></param>
         public ApiAction<SubmitOutput> BeginNextActionStep(SubmitInput input)
         {
-            var result = new ApiAction<SubmitOutput>();
+            var result = new ApiAction<SubmitOutput>(new SubmitOutput());
             //璁剧疆鍚庣画鍙墽琛岀殑宸ユ鍒楄〃
             NextSteps = GetNextSteps(CurStep);
             //灏濊瘯鏈夋病鏈夊彲浠ョ洿鎺ュ紑濮嬬殑鍚庣画宸ユ
@@ -298,7 +306,7 @@
                     //杩斿洖缁撴灉鍒板鎴风
                     result = canBegin;
                     result.Data.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps);
-                    
+
                     return result;
                 }
             }
@@ -317,6 +325,43 @@
                                               string.Join("\r\n", NextSteps.Select(q => "    >> " + T(q.GetBeginMsg(), input.Locale))));
             }
             return result;
+        }
+
+        /// <summary>
+        /// 淇濆瓨宸ユ鐨勬暟鎹簱鎻愪氦鎿嶄綔鍒版暟鎹簱
+        /// </summary>
+        protected void SaveStepsCommitActionToDB()
+        {
+            //淇濆瓨宸ユ鐨勬暟鎹簱鎻愪氦鎿嶄綔鍒版彁浜ゆ搷浣滃垪琛�
+            foreach (var step in Steps.OrderBy(q => q.Sequence))
+            {
+                DBCommitList.Add(step.DBSubmitAction);
+            }
+            //濡傛灉涓嶉渶瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽垯鎶婃彁浜ゆ搷浣滃垪琛ㄦ彁浜ゅ埌鏁版嵁搴�
+            if (!NeedTemporaryStoreDBCommitAction)
+            {
+                //鎭㈠涓存椂瀛樺偍鏍囪涓篺alse
+                NeedTemporaryStoreDBCommitAction = false;
+
+                var dbTran = GetCommitDB().UseTran(() =>
+	            {
+	                //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁
+	                foreach (var action in DBCommitList)
+	                {
+                        action.Invoke();
+	                }
+	            });
+	            if (dbTran.IsSuccess)
+	            {
+                    //淇濆瓨鎴愬姛鍒欐竻绌烘彁浜ゆ搷浣滃垪琛�
+                    DBCommitList.Clear();
+                }
+                else
+                {
+                    //鎶涘嚭寮傚父
+                    throw dbTran.ErrorException;
+                }
+            }
         }
 
         /// <summary>
@@ -367,11 +412,15 @@
                             switch (pv.VAR_METHOD)
                             {
                                 case "GetSN":
-                                    return CurWipSN.SN;
+                                    return string.Join(",", CurWipSNs.Select(q => q.SN));
+                                case "GetTraySN":
+                                    return CurSN;
                                 case "GetBAS_ITEM":
                                     return WorkBatch.Product.ToJson();
                                 case "GetCustomer":
                                     return WorkBatch.Batch.ToJson();
+                                case "GetVarByWo":
+                                    return GetLabelVarWo(lv);
                                 default:
                                     return "";
                             }
@@ -386,6 +435,25 @@
             }
             return "";
         }
+        /// <summary>
+        /// 鑾峰彇宸ュ崟缁存姢鐨勬ā鏉垮彉閲�
+        /// </summary>
+        /// <param name="labelId"></param>
+        /// <returns></returns>
+        private string GetLabelVarWo(BAS_LABEL_VAR lv)
+        {
+            string result = "";
+            var labelVarwos = Biz.Db.Queryable<BAS_LABEL_VAR_WO>().Where(x => x.LABEL_ID == lv.LABEL_ID && x.VAR_NAME == lv.VAR_NAME).ToList();
+            if (labelVarwos.Any(q => q.WORK_ORDER == WorkBatch.Batch.ORDER_NO))
+            {
+                result = labelVarwos.First(q => q.WORK_ORDER == WorkBatch.Batch.ORDER_NO).VAR_VALUE;
+            }
+            else
+            {
+                result = labelVarwos.Count > 0 ? labelVarwos[0].DEFAULT_VALUE : "";
+            }
+            return result;
+        }
 
         #endregion Functions
 

--
Gitblit v1.9.3