From 1818a97f14836d85b4f3fa651f77de0394cd4371 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期二, 27 八月 2024 14:24:36 +0800
Subject: [PATCH] 增加步骤基类,工序信息增加公布信息列表

---
 Tiger.IBusiness/MES/IWorkStep.cs                                 |   26 +----
 Tiger.Api/Controllers/MES/MESController.Transaction.cs           |   57 ++++++++++++++
 Tiger.Business.MES/Transaction/CollectNode.cs                    |    7 +
 Tiger.IBusiness/Common/IStep.cs                                  |   49 ++++++++++++
 Tiger.Business.MES/Transaction/PackingNode.cs                    |    9 +-
 Tiger.Business.MES/Transaction/Position.cs                       |   11 +-
 Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs |   18 ++++
 Tiger.Business/MES/Biz.WorkStep.cs                               |   44 +++++++++--
 Tiger.Business.MES/Transaction/TestNode.cs                       |    7 +
 9 files changed, 187 insertions(+), 41 deletions(-)

diff --git a/Tiger.Api/Controllers/MES/MESController.Transaction.cs b/Tiger.Api/Controllers/MES/MESController.Transaction.cs
new file mode 100644
index 0000000..34fc0d2
--- /dev/null
+++ b/Tiger.Api/Controllers/MES/MESController.Transaction.cs
@@ -0,0 +1,57 @@
+锘縰sing Autofac;
+using Microsoft.AspNetCore.Mvc;
+using Rhea.Common;
+using SqlSugar;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using Tiger.Api.iBiz;
+using Tiger.IBusiness;
+using Tiger.Model;
+using Tiger.Model.Entitys.MES.Position;
+
+namespace Tiger.Api.Controllers.MES
+{
+    public partial class MESController : ControllerBase
+    {
+        /// <summary>
+        /// GetSteps(ApiAction)
+        /// 鑾峰彇褰撳墠宸ュ簭鐨勫伐姝ュ垪琛�
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/Node/GetSteps")]
+        public async Task<IActionResult> Node_GetStepsAsync([FromBody] ApiAction action)
+        {
+            ApiAction response;
+            ITestNode trans = null;
+            try
+            {
+                if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.MES.Context.GetTransDic()[action.ID] as ITestNode;
+                    if (!trans.IsFinished)
+                    {
+                        lock (trans.TransLock) { response = action.GetResponse(trans.Reset()); }
+                    }
+                    else
+                    {
+                        response = action.GetResponse($"Transaction Error: 宀椾綅[{trans.PostCode}]鐨勬祴璇曞伐搴忎簨鍔ID:{action.ID}]宸茬粡鍏抽棴", false);
+                    }
+                }
+                else
+                {
+                    response = action.GetResponse($"Transaction Error: 宀椾綅鐨勬祴璇曞伐搴忎簨鍔ID:{action.ID}]宸茬粡琚叧闂�", false);
+                }
+            }
+            catch (System.Exception ex)
+            {
+                response = action.GetResponse().CatchExceptionWithLog(ex);
+            }
+            trans?.AddHistory(Request, action);
+            return Ok(response);
+        }
+
+    }//endClass
+}
diff --git a/Tiger.Business.MES/Transaction/CollectNode.cs b/Tiger.Business.MES/Transaction/CollectNode.cs
index 9c45352..bb5973e 100644
--- a/Tiger.Business.MES/Transaction/CollectNode.cs
+++ b/Tiger.Business.MES/Transaction/CollectNode.cs
@@ -403,10 +403,11 @@
 
                     //鍒濆鍖栧伐姝ュ垪琛�
                     Steps.Clear();
-                    var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this)
+                    var curStep = new Biz.WorkStep(IWorkStep.NodeTypes.Node, this)
                     {
                         Sequence = Steps.Count + 1,
                         Node = curNode,
+                        OperSetting = CurBatch.NodeSets.FirstOrDefault(q => q.NODE_ID == curNode.ID),
                         DBSubmitAction = () =>
                         {
                             //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄
@@ -456,7 +457,7 @@
                 }
                 else if (!IsFinishNodeSteps)
                 {
-                    var curStep = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
+                    var curStep = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
 
                     //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ
                     curStep.IsFinished = true;
@@ -469,7 +470,7 @@
                     //鏈畬鎴愭墍鏈夊伐搴忚妭鐐瑰伐姝�
                     if (!IsFinishNodeSteps)
                     {
-                        var next = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
+                        var next = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
                         //璁剧疆鍚庣画鍙墽琛岀殑宸ユ鍒楄〃
                         NextSteps.Clear();
                         NextSteps.Add(next);
diff --git a/Tiger.Business.MES/Transaction/PackingNode.cs b/Tiger.Business.MES/Transaction/PackingNode.cs
index ec5a96b..3af03ea 100644
--- a/Tiger.Business.MES/Transaction/PackingNode.cs
+++ b/Tiger.Business.MES/Transaction/PackingNode.cs
@@ -435,11 +435,12 @@
 
                     //鍒濆鍖栧伐姝ュ垪琛�
                     Steps.Clear();
-	                var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this) 
+	                var curStep = new Biz.WorkStep(IWorkStep.NodeTypes.Node, this) 
                     {
 	                    Sequence = Steps.Count + 1,
 	                    Node = curNode,
-	                    DBSubmitAction = () =>
+                        OperSetting = CurBatch.NodeSets.FirstOrDefault(q => q.NODE_ID == curNode.ID),
+                        DBSubmitAction = () =>
 	                    {
                             //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄
                             var db = GetCommitDB();
@@ -488,7 +489,7 @@
                 } 
                 else if (!IsFinishNodeSteps)
                 {
-                    var curStep = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
+                    var curStep = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
 
                     //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ
                     curStep.IsFinished = true;
@@ -501,7 +502,7 @@
                     //鏈畬鎴愭墍鏈夊伐搴忚妭鐐瑰伐姝�
                     if (!IsFinishNodeSteps)
                     {
-                        var next = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
+                        var next = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
                         //璁剧疆鍚庣画鍙墽琛岀殑宸ユ鍒楄〃
                         NextSteps.Clear();
                         NextSteps.Add(next);
diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs
index f01aa1f..676be4b 100644
--- a/Tiger.Business.MES/Transaction/Position.cs
+++ b/Tiger.Business.MES/Transaction/Position.cs
@@ -63,7 +63,7 @@
         public List<WorkStep> Steps { get; set; } = new();
         public WorkStep CurStep { get; set; }
         public List<WorkStep> NextSteps { get; set; } = new();
-        public bool IsFinishNodeSteps => !Steps.Any(q => q.Type == IWorkStep.Types.Node && !q.IsFinished);
+        public bool IsFinishNodeSteps => !Steps.Any(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished);
         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;
@@ -74,7 +74,7 @@
         protected Dictionary<string, List<Action>> DBCommitList { get; set; } = new();
         protected List<Position> NodeCommitList { get; set; } = new();
         protected Dictionary<string, OperInfo> OperInfoDic { get; set; } = new();
-        protected OperInfo CurOperInfo { get; set; }
+        //protected OperInfo CurOperInfo { get; set; }
         #endregion Propertys & Variables
 
         #region Functions
@@ -198,11 +198,13 @@
             {
                 info.CurNode = CurWipSNs.First().NODE_NAME;
                 info.NextNode = string.Join(",", CurBatch.GetNextNodes(CurWipSNs.First()).Select(q => q.NODE_NAME));
+                info.StepsInfo = Steps.Select(q => q.GetInfo()).ToList();
             }
             else
             {
                 info.CurNode = "   鈥�   ";
                 info.NextNode = "   鈥�   ";
+                info.StepsInfo = new();
             }
             return info;
         }
@@ -249,12 +251,13 @@
                 }
                 else
                 {
-                    var next = new WorkStep(IWorkStep.Types.Action, this)
+                    var next = new WorkStep(IWorkStep.NodeTypes.Action, this)
                     {
                         Sequence = parent.Sequence + 1,
                         Node = parent.Node,
+                        OperSetting = CurBatch.NodeSets.FirstOrDefault(q => q.NODE_ID == parent.Node.ID),
                         NodeAct = act,
-                        Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID),
+                        ActSetting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID),
                     };
                     next.Init();
                     next.PrepNodeIDs.Add(parent.NodeID);
diff --git a/Tiger.Business.MES/Transaction/TestNode.cs b/Tiger.Business.MES/Transaction/TestNode.cs
index 225d9cd..3a9e2e2 100644
--- a/Tiger.Business.MES/Transaction/TestNode.cs
+++ b/Tiger.Business.MES/Transaction/TestNode.cs
@@ -403,10 +403,11 @@
 
                     //鍒濆鍖栧伐姝ュ垪琛�
                     Steps.Clear();
-                    var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this)
+                    var curStep = new Biz.WorkStep(IWorkStep.NodeTypes.Node, this)
                     {
                         Sequence = Steps.Count + 1,
                         Node = curNode,
+                        OperSetting = CurBatch.NodeSets.FirstOrDefault(q => q.NODE_ID == curNode.ID),
                         DBSubmitAction = () =>
                         {
                             //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄
@@ -456,7 +457,7 @@
                 }
                 else if (!IsFinishNodeSteps)
                 {
-                    var curStep = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
+                    var curStep = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
 
                     //瀹屾垚褰撳墠宸ュ簭鑺傜偣宸ユ
                     curStep.IsFinished = true;
@@ -469,7 +470,7 @@
                     //鏈畬鎴愭墍鏈夊伐搴忚妭鐐瑰伐姝�
                     if (!IsFinishNodeSteps)
                     {
-                        var next = Steps.Where(q => q.Type == IWorkStep.Types.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
+                        var next = Steps.Where(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished).OrderBy(q => q.Sequence).First();
                         //璁剧疆鍚庣画鍙墽琛岀殑宸ユ鍒楄〃
                         NextSteps.Clear();
                         NextSteps.Add(next);
diff --git a/Tiger.Business/MES/Biz.WorkStep.cs b/Tiger.Business/MES/Biz.WorkStep.cs
index dfff6ea..467f105 100644
--- a/Tiger.Business/MES/Biz.WorkStep.cs
+++ b/Tiger.Business/MES/Biz.WorkStep.cs
@@ -22,28 +22,28 @@
         /// </summary>
         public partial class WorkStep : IWorkStep
         {
-            public WorkStep(IWorkStep.Types type, IPosition position)
+            public WorkStep(IWorkStep.NodeTypes type, IPosition position)
             {
-                Type = type;
+                NodeType = type;
                 CurPosition = position;
             }
 
             #region Propertys & Variables
             public string ID { get; set; } = Guid.NewGuid().ToString("N");
-            
-            public IWorkStep.Types Type { get; set; }
+            public IWorkStep.NodeTypes NodeType { get; set; }
             public MES_WO_NODE Node { get; set; }
+            public MES_WO_OPER OperSetting { get; set; }
             public MES_WO_NODE_ACT NodeAct { get; set; }
-            public MES_WO_ACTION Setting { get; set; }
+            public MES_WO_ACTION ActSetting { get; set; }
             public IPosition CurPosition { get; set; }
             public IWorkAction CurAction { get; set; }
             public int Sequence { get; set; }
             public List<string> PrepNodeIDs { get; set; } = new();
-            public string NodeID => Type == IWorkStep.Types.Action ? NodeAct.ID : Node.ID;
+            public string NodeID => NodeType == IWorkStep.NodeTypes.Action ? NodeAct.ID : Node.ID;
             private bool _IsFinished = false;
             public bool IsFinished
             {
-                get => Type == IWorkStep.Types.Action ? CurAction.IsFinished : _IsFinished; 
+                get => NodeType == IWorkStep.NodeTypes.Action ? CurAction.IsFinished : _IsFinished; 
                 set { _IsFinished = value; }
             }
             public Action DBSubmitAction { get; set; } = () => { };
@@ -58,7 +58,7 @@
             {
                 CurAction = DI.Resolve(NodeAct.Definition.SERVICE_TYPE) as IWorkAction;
                 //CurAction = DI.Resolve("Tiger.IBusiness.IPrintLabel,Tiger.IBusiness") as IWorkAction;
-                CurAction.Init(this, CurPosition, NodeAct, Setting);
+                CurAction.Init(this, CurPosition, NodeAct, ActSetting);
             }
 
             /// <summary>
@@ -88,6 +88,34 @@
             {
                 return CurAction.Submit(input);
             }
+
+            /// <summary>
+            /// 缁撴潫宸ユ鎵ц
+            /// </summary>
+            /// <returns></returns>
+            public ApiAction<SubmitOutput> End()
+            {
+                return CurAction.End();
+            }
+
+            /// <summary>
+            /// 鑾峰彇褰撳墠宸ユ鐨勪俊鎭�
+            /// </summary>
+            /// <returns></returns>
+            public WorkStepInfo GetInfo()
+            {
+                return new WorkStepInfo() { 
+                    ID = ID,
+                    Sequence = Sequence,
+                    NodeID = NodeID,
+                    NodeType = NodeType.ToString(),
+                    Node = Node,
+                    OperSetting = OperSetting,
+                    NodeAct = NodeAct,
+                    ActSetting = ActSetting,
+                    IsFinished = IsFinished,
+                };
+            }
             #endregion
 
         }
diff --git a/Tiger.IBusiness/Common/IStep.cs b/Tiger.IBusiness/Common/IStep.cs
new file mode 100644
index 0000000..e86ba8a
--- /dev/null
+++ b/Tiger.IBusiness/Common/IStep.cs
@@ -0,0 +1,49 @@
+锘縰sing Newtonsoft.Json;
+using Rhea.Common;
+using System;
+using Tiger.Model;
+using Tiger.Model.Entitys.MES.Position;
+
+namespace Tiger.IBusiness
+{
+    /// <summary>
+    /// 姝ラ鍩虹被
+    /// </summary>
+    public interface IStep<InputT, OutputT>
+    {
+        #region Propertys & Variables
+        /// <summary>
+        /// 姝ラID
+        /// </summary>
+        public string ID { get; set; }
+        /// <summary>
+        /// 姝ラ搴忓彿
+        /// </summary>
+        public int Sequence { get; set; }
+        /// <summary>
+        /// 姝ラ鏄惁瀹屾垚
+        /// </summary>
+        public abstract bool IsFinished { get; set; }
+        #endregion Propertys & Variables
+
+        #region Functions
+        /// <summary>
+        /// 灏濊瘯寮�濮嬫墽琛�
+        /// </summary>
+        /// <returns></returns>
+        public abstract ApiAction<OutputT> TryBegin(InputT input);
+        /// <summary>
+        /// 鎻愪氦鏁版嵁
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public abstract ApiAction<OutputT> Submit(InputT input);
+        /// <summary>
+        /// 缁撴潫鎵ц
+        /// </summary>
+        /// <returns></returns>
+        public abstract ApiAction<OutputT> End();
+        #endregion Functions
+    }
+
+}
diff --git a/Tiger.IBusiness/MES/IWorkStep.cs b/Tiger.IBusiness/MES/IWorkStep.cs
index 4321411..4499dbf 100644
--- a/Tiger.IBusiness/MES/IWorkStep.cs
+++ b/Tiger.IBusiness/MES/IWorkStep.cs
@@ -9,41 +9,29 @@
     /// <summary>
     /// 宸ユ琛屼负鍩虹被
     /// </summary>
-    public interface IWorkStep
+    public interface IWorkStep : IStep<SubmitInput, SubmitOutput>
     {
         #region Propertys & Variables
-        public string ID { get; set; }
-        public Types Type { get; set; }
-        public int Sequence { get; set; }
+        public string NodeID { get; }
+        public NodeTypes NodeType { get; set; }
         public MES_WO_NODE Node { get; set; }
+        public MES_WO_OPER OperSetting { get; set; }
         public MES_WO_NODE_ACT NodeAct { get; set; }
-        public MES_WO_ACTION Setting { get; set; }
+        public MES_WO_ACTION ActSetting { get; set; }
         public IPosition CurPosition { get; set; }
         public IWorkAction CurAction { get; set; }
         public List<string> PrepNodeIDs { get; set; }
-        public string NodeID { get; }
-        public bool IsFinished { get; set; }
         public Action DBSubmitAction { get; set; }
         #endregion Propertys & Variables
-        public enum Types { Node, Action }
+        public enum NodeTypes { Node, Action }
 
         #region Functions
-        /// <summary>
-        /// 灏濊瘯寮�濮嬫墽琛屽伐姝�
-        /// </summary>
-        /// <returns></returns>
-        public ApiAction<SubmitOutput> TryBegin(SubmitInput input);
         /// <summary>
         /// 鑾峰彇琛屼负寮�濮嬬殑鎻愮ず淇℃伅
         /// </summary>
         /// <returns></returns>
         public Locale GetBeginMsg();
-        /// <summary>
-        /// 宸ユ鎻愪氦鏁版嵁
-        /// </summary>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        public ApiAction<SubmitOutput> Submit(SubmitInput input);
         #endregion Functions
     }
+
 }
diff --git a/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs b/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
index 133dc6b..b55ebf6 100644
--- a/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
+++ b/Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
@@ -240,5 +240,23 @@
         public string NextNode { get; set; } = "   鈥�   ";
         public string CurNode { get; set; } = "   鈥�   ";
         public int InputQty { get; set; } = 0;
+        public List<WorkStepInfo> StepsInfo { get; set; } = new List<WorkStepInfo>();
     }
+
+    /// <summary>
+    /// 宸ユ淇℃伅
+    /// </summary>
+    public class WorkStepInfo
+    {
+        public string ID { get; set; }
+        public int Sequence { get; set; }
+        public string NodeID { get; set; }
+        public string NodeType { get; set; }
+        public MES_WO_NODE Node { get; set; }
+        public MES_WO_OPER OperSetting { get; set; }
+        public MES_WO_NODE_ACT NodeAct { get; set; }
+        public MES_WO_ACTION ActSetting { get; set; }
+        public bool IsFinished { get; set; }
+    }
+
 }

--
Gitblit v1.9.3