服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-08-27 1818a97f14836d85b4f3fa651f77de0394cd4371
增加步骤基类,工序信息增加公布信息列表
已修改7个文件
已添加2个文件
226 ■■■■ 文件已修改
Tiger.Api/Controllers/MES/MESController.Transaction.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/CollectNode.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/PackingNode.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/Position.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/TestNode.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/MES/Biz.WorkStep.cs 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/Common/IStep.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/MES/IWorkStep.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/Controllers/MES/MESController.Transaction.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
using 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
}
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 = () =>
                        {
                            //使用统一的事务DB对象
@@ -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);
Tiger.Business.MES/Transaction/PackingNode.cs
@@ -435,10 +435,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 = () =>
                        {
                            //使用统一的事务DB对象
@@ -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);
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);
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 = () =>
                        {
                            //使用统一的事务DB对象
@@ -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);
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
        }
Tiger.IBusiness/Common/IStep.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
using 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
    }
}
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
    }
}
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; }
    }
}