From 8bfaf7141c88f41d3dbd1995cfb9cb015ca0d1d6 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期五, 02 八月 2024 16:34:13 +0800
Subject: [PATCH] 整理了工序传入传出参数

---
 Tiger.Business.MES/Transaction/Position.cs |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 101 insertions(+), 19 deletions(-)

diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs
index dbcd9fd..eabfb3b 100644
--- a/Tiger.Business.MES/Transaction/Position.cs
+++ b/Tiger.Business.MES/Transaction/Position.cs
@@ -57,6 +57,7 @@
         public IWorkBatch WorkBatch => CurBatch;
         public MES_WIP_DATA CurWipSN { get; set; }
         public MES_WIP_HIS CurWipSNHis { get; set; }
+        public Dictionary<string, object> Context { get; set; } = new();
         public List<WorkStep> Steps { get; set; } = new();
         public WorkStep CurStep { get; set; }
         public List<WorkStep> NextSteps { get; set; } = new();
@@ -146,12 +147,30 @@
         }
 
         /// <summary>
-        /// 閲嶇疆褰撳墠宸ユ
+        /// 閲嶇疆宸ュ簭鎿嶄綔
         /// </summary>
-        public void ResetSteps()
+        /// <returns></returns>
+        public ApiAction Reset()
+        {
+            var action = new ApiAction();
+
+            ResetNode();
+            action.IsSuccessed = true;
+            action.LocaleMsg = new($"宸ュ簭鎿嶄綔宸查噸缃紝璇烽噸鏂版壂鎻忚繘绔欎骇鍝佹潯鐮�");
+            action.LocaleMsg = new("MES.Transaction.Position.ResetNode");
+
+            return action;
+        }
+
+        /// <summary>
+        /// 閲嶇疆褰撳墠宸ュ簭锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉�
+        /// </summary>
+        public virtual void ResetNode()
         {
             Steps.Clear();
             CurWipSN = null;
+            CurWipSNHis = null;
+            CurStep = null;
         }
 
         /// <summary>
@@ -178,7 +197,7 @@
         /// <summary>
         /// 娣诲姞鑺傜偣鐨勪笅涓�涓涓哄埌宸ユ鍒楄〃
         /// </summary>
-        /// <param name="curNode"></param>
+        /// <param name="parent"></param>
         private void AddNextActToSteps(WorkStep parent)
         {
             var edges = CurBatch.Edges.Where(q => q.SRC_NODE == parent.NodeID && CurBatch.NodeActs.Any(a => a.NODE_ID == parent.Node.ID && a.ID == q.TGT_NODE)).ToList();
@@ -189,6 +208,7 @@
                 {
                     var next = Steps.First(q => q.NodeID == act.ID);
                     next.Sequence = next.Sequence > parent.Sequence ? next.Sequence : (parent.Sequence + 1);
+                    next.PrepNodeIDs.Add(parent.NodeID);
                     next.PrepNodeIDs.AddRange(parent.PrepNodeIDs);
                     next.PrepNodeIDs = next.PrepNodeIDs.Distinct().ToList();
                     AddNextActToSteps(next);
@@ -197,12 +217,12 @@
                 {
                     var next = new WorkStep(IWorkStep.Types.Action, this)
                     {
-                        NodeID = act.ID,
                         Sequence = parent.Sequence + 1,
                         Node = parent.Node,
                         NodeAct = act,
                         Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID),
                     };
+                    next.PrepNodeIDs.Add(parent.NodeID);
                     next.PrepNodeIDs.AddRange(parent.PrepNodeIDs);
                     next.PrepNodeIDs = next.PrepNodeIDs.Distinct().ToList();
                     Steps.Add(next);
@@ -231,7 +251,7 @@
                 }
             }
             //濡傛灉褰撳墠宸ユ娌℃湁鍙墽琛岀殑鍚庣画宸ユ锛屽垯鍦ㄥ墠缃伐姝ユ煡鎵捐繕鏈夋病鏈夊悗缁伐姝ユ病瀹屾垚鐨勫伐姝ワ紝鏈夊垯鎵ц
-            if (!result.Any())
+            if (!result.Any() && Steps.Any())
             {
                 //鏌ユ壘鏈夋病鏈夊墠缃伐姝ユ湭瀹屾垚锛岃嫢鏈夊垯鍏堝畬鎴愭湭瀹屾垚鐨勫墠缃伐姝�
                 var prepIDs = curStep.PrepNodeIDs.Where(id => CurBatch.Edges.Any(e => e.SRC_NODE == id && Steps.Any(q => !q.IsFinished && e.TGT_NODE == q.NodeID))).ToList();
@@ -266,33 +286,27 @@
             //灏濊瘯鏈夋病鏈夊彲浠ョ洿鎺ュ紑濮嬬殑鍚庣画宸ユ
             foreach (var step in NextSteps)
             {
+                //灏濊瘯鎵ц鍚庣画宸ユ
                 var canBegin = step.TryBegin(input);
                 //濡傛灉鍚庣画宸ユ鍙互鐩存帴寮�濮嬪垯鐩存帴鎵ц
                 if (canBegin.IsSuccessed)
                 {
+                    //鏇存柊褰撳墠鎵ц宸ユ涓哄凡寮�濮嬪伐姝�
                     CurStep = step;
+                    //鏇存柊鍚庣画鍙墽琛岀殑宸ユ鍒楄〃
                     NextSteps = GetNextSteps(CurStep);
+                    //杩斿洖缁撴灉鍒板鎴风
                     result = canBegin;
-                    result.Data.IsFinished = IsFinishAllSteps;
-                    result.Data.CurWO = CurBatch.WO.ORDER_NO;
-                    result.Data.CurBatch = CurBatch.Batch.BATCH_NO;
-                    result.Data.CurNode = CurStep.NodeAct.ACT_NAME;
-                    result.Data.StepActCode = CurStep.NodeAct.ACT_CODE;
-                    result.Data.NextStepID = CurStep.ID;
+                    result.Data.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps);
                     
                     return result;
                 }
             }
 
-            //鏍规嵁鍚庣画宸ユ杩斿洖ApiAction
-            result.Data.IsFinished = IsFinishAllSteps;
-            result.Data.CurWO = CurBatch.WO.ORDER_NO;
-            result.Data.CurBatch = CurBatch.Batch.BATCH_NO;
-            result.Data.CurNode = CurStep.Node.NODE_NAME;
-            result.Data.StepActCode = CurStep.NodeAct.ACT_CODE;
-            result.Data.NextStepID = "";
+            //娌℃湁鍙互鐩存帴寮�濮嬬殑鍚庣画宸ユ锛屾牴鎹悗缁伐姝ヨ繑鍥濧piAction
+            result.Data.SetValue(CurBatch, CurStep, "", IsFinishAllSteps);
 
-            //鏍规嵁鍚庣画鍙墽琛屽伐姝ュ垪琛ㄨ繑鍥炵浉搴旂殑鎿嶄綔鎻愮ず
+            //娌℃湁鍙互鐩存帴寮�濮嬬殑鍚庣画宸ユ锛屾牴鎹悗缁彲鎵ц宸ユ鍒楄〃杩斿洖鐩稿簲鐨勬搷浣滄彁绀�
             if (NextSteps.Count == 1)
             {
                 result.LocaleMsg = NextSteps.First().GetBeginMsg();
@@ -305,6 +319,74 @@
             return result;
         }
 
+        /// <summary>
+        /// 鑾峰彇鎵撳嵃鏍囩妯℃澘杩囩▼鍙橀噺鍊�
+        /// </summary>
+        /// <param name="labelPVs">杩囩▼鍙橀噺鍒楄〃</param>
+        /// <param name="label">鏍囩妯℃澘</param>
+        /// <returns></returns>
+        public BAS_LABEL_TEMP SetLabelVariables(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_TEMP label)
+        {
+            foreach (var item in label.Variables)
+            {
+                switch (item.VAR_TYPE.GetEnum<BAS_LABEL_VAR.VAR_TYPEs>())
+                {
+                    case BAS_LABEL_VAR.VAR_TYPEs.Constant:
+                        item.Value = item.VAR_VALUE;
+                        break;
+                    case BAS_LABEL_VAR.VAR_TYPEs.ProcessVariable:
+                        item.Value = GetPrintProcessValue(labelPVs, item);
+                        break;
+                    case BAS_LABEL_VAR.VAR_TYPEs.DateVariable:
+                        item.Value = DateTime.Now.ToString(item.VAR_VALUE);
+                        break;
+                    case BAS_LABEL_VAR.VAR_TYPEs.CustomVariable:
+                    default:
+                        item.Value = "";
+                        break;
+                }
+            }
+            return label;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎵撳嵃鏍囩妯℃澘杩囩▼鍙橀噺鍊�
+        /// </summary>
+        /// <param name="labelPVs">杩囩▼鍙橀噺鍒楄〃</param>
+        /// <param name="lv">鏍囩妯℃澘鍙橀噺</param>
+        /// <returns></returns>
+        public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv)
+        {
+            var pv = labelPVs.FirstOrDefault(q => q.VAR_CODE == lv.VAR_VALUE);
+            if (!pv.IsNullOrEmpty())
+            {
+                switch (pv.VAR_TYPE.GetEnum<BAS_LABEL_PV.VAR_TYPEs>())
+                {
+                    case BAS_LABEL_PV.VAR_TYPEs.ServerMethod:
+                        {
+                            switch (pv.VAR_METHOD)
+                            {
+                                case "GetSN":
+                                    return CurWipSN.SN;
+                                case "GetBAS_ITEM":
+                                    return WorkBatch.Product.ToJson();
+                                case "GetCustomer":
+                                    return WorkBatch.Batch.ToJson();
+                                default:
+                                    return "";
+                            }
+                        }
+                    case BAS_LABEL_PV.VAR_TYPEs.WebApiWebApi:
+                        break;
+                    case BAS_LABEL_PV.VAR_TYPEs.StoredProcedure:
+                        break;
+                    default:
+                        break;
+                }
+            }
+            return "";
+        }
+
         #endregion Functions
 
         public override bool Close(bool needSaveHistoryLog = false)

--
Gitblit v1.9.3