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