服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-09-25 0fdb04b7c451d7c59b226c25425722afd3364916
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using Tiger.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Rhea.Common;
using System.Net;
using System.Linq;
using Newtonsoft.Json;
using Tiger.IBusiness;
using Tiger.Model.Entitys.MES.Position;
 
namespace Tiger.Business
{
    /// <summary>
    /// 工步
    /// </summary>
    public partial class WorkStep : IWorkStep
    {
        public WorkStep(IWorkStep.NodeTypes type, IPosition position)
        {
            NodeType = type;
            CurPosition = position;
        }
 
        #region Propertys & Variables
        public string ID { get; set; } = Guid.NewGuid().ToString("N");
        public string Name { get; set; }
        private DateTime BeginAt;
        private DateTime EndAt;
        public TimeSpan ElapsedTime => EndAt - BeginAt;
        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 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 => NodeType == IWorkStep.NodeTypes.Action ? NodeAct.ID : Node.ID;
        private bool _IsFinished = false;
        public bool IsFinished
        {
            get => NodeType == IWorkStep.NodeTypes.Action ? CurAction.IsFinished : _IsFinished;
            set { _IsFinished = value; }
        }
        public StepStatus Status { get; set; } = StepStatus.Normal;
        //public bool IsFinished => Status == StepStatus.Finished;
        private Locale _Message;
        public Locale Message
        {
            get => _Message;
            set { _MsgHistory.Add(_Message = value); }
        }
        private List<Locale> _MsgHistory = new();
        public List<Locale> MsgHistory => _MsgHistory;
        public Action DBSubmitAction { get; set; } = () => { };
        #endregion
 
        #region Functions
        /// <summary>
        /// 初始化工步
        /// </summary>
        /// <returns></returns>
        public void Init()
        {
            CurAction = DI.Resolve(NodeAct.Definition.SERVICE_TYPE) as IWorkAction;
            //CurAction = DI.Resolve("Tiger.IBusiness.IPrintLabel,Tiger.IBusiness") as IWorkAction;
            CurAction.Init(this, CurPosition, NodeAct, ActSetting);
        }
 
        /// <summary>
        /// 尝试开始执行工步
        /// </summary>
        /// <returns></returns>
        public ApiAction<SubmitOutput> TryBegin(SubmitInput input)
        {
            BeginAt = DateTime.Now;
            return CurAction.TryBegin(input);
        }
 
        /// <summary>
        /// 获取行为开始的提示信息
        /// </summary>
        /// <returns></returns>
        public Locale GetBeginMsg()
        {
            return CurAction.GetBeginMsg();
        }
 
        /// <summary>
        /// 工步提交数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public ApiAction<SubmitOutput> Submit(SubmitInput input)
        {
            return CurAction.Submit(input);
        }
 
        /// <summary>
        /// 结束工步执行
        /// </summary>
        /// <returns></returns>
        public ApiAction<SubmitOutput> End(SubmitInput input)
        {
            var result = CurAction.End(input);
            EndAt = DateTime.Now;
            return result;
        }
 
        /// <summary>
        /// 获取工步当前耗时
        /// </summary>
        /// <returns></returns>
        public TimeSpan GetElapsedTime()
        {
            return DateTime.Now - BeginAt;
        }
 
        /// <summary>
        /// 设置工步状态和消息
        /// </summary>
        /// <returns></returns>
        public void SetStatusMessage(StepStatus status, Locale msg)
        {
            Message = msg;
            Status = status;
        }
 
        /// <summary>
        /// 获取当前工步的信息
        /// </summary>
        /// <returns></returns>
        public WorkStepInfo GetInfo(string locale)
        {
            return new WorkStepInfo()
            {
                ID = ID,
                Name = Name,
                Sequence = Sequence,
                NodeID = NodeID,
                NodeType = NodeType.ToString(),
                Node = Node,
                OperSetting = OperSetting,
                NodeAct = NodeAct,
                ActSetting = ActSetting,
                Status = Status.ToString(),
                Message = Message.IsNullOrEmpty() ? "" : Biz.T(Message, locale),
            };
        }
        #endregion
 
    }
}