服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-10-16 879014e6dcd2e3897eea4a7585fb7c87183d9ffd
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
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 _IsActive = true;
        public bool IsActive
        {
            get => NodeType == IWorkStep.NodeTypes.Action ? ActSetting.IS_ACTIVE == "Y" : _IsActive;
            set { _IsActive = value; }
        }
        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;
            //工步行为启用则正常执行
            if (IsActive)
            {
                return CurAction.TryBegin(input);
            }
            //工步行为不启用,否则工步默认完成
            else
            {
                CurAction.IsFinished = true;
                var action = new ApiAction<SubmitOutput>(new SubmitOutput());
                this.Message = Biz.L($"行为未启用");
                this.Status = StepStatus.InActive;
                action.Data.ShortMsg = new($"行为未启用", ShortMessage.Types.Success);
                //action.LocaleMsg = new($"{0}行为未启用");
                action.LocaleMsg = new("MES.WorkAction.NotActive", NodeAct.ACT_NAME);
                return action;
            }
        }
 
        /// <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
 
    }
}