| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System.Collections.Generic;
- using IwbZero.IocNamed;
- using IwbZero.IwbBase;
- using IwbZero.ToolCommon.LogHelpers;
- using IwbZero.ToolCommon.StringModel;
- using WeEngine.ComponentInfo;
- using WeEngine.Components.InterfaceFactory;
- using WeEngine.Enum;
- using WeEngine.Packages;
- namespace WeEngine.Components.Statements
- {
- /// <summary>
- /// 等待其他节点运行结束
- /// </summary>
- [IocNamed(CompStmtType.SetNodeToWait)]
- public class SetNodeToWaitStatement : IStatementRunner
- {
- public bool Run(ComponentRunner runner, IwbXmlNode poStatement)
- {
- var flag = false;
- var curNode = runner.CurrentNode;
- this.LogDebug($"============[开始执行事务]====>[等待节点运行]======>{curNode.NodePath}");
- var childValue = poStatement.GetChildValue("WaitNode");
- if (childValue.IsEmpty())
- {
- var waitNodes = poStatement.GetChildNode("WaitNodes");
- if (waitNodes != null && waitNodes.Nodes.Count > 0)
- {
- foreach (IwbXmlNode node in waitNodes.Nodes)
- {
- childValue = node.GetChildValue("WaitNode");
- var waitPath = runner.Evaluate(childValue);
- flag = flag || SetWaitNode(curNode, waitPath);
- }
- }
- else
- {
- childValue = poStatement.GetChildValue("WaitNodes");
- }
-
- }
- if (childValue.IsNotEmpty())
- {
- foreach (var path in childValue.StrToArray())
- {
- var waitPath = runner.Evaluate(path);
- flag = flag || SetWaitNode(curNode, waitPath);
- }
- }
- //var variable = new IwbRtVariable(DefaultVariable.RunValidate).SetValue((!flag).ToString());
- //if (runner.Variables.ContainsKey(DefaultVariable.RunValidate))
- //{
- // runner.Variables[DefaultVariable.RunValidate] = variable;
- //}
- //else
- //{
- // runner.Variables.Add(DefaultVariable.RunValidate, variable);
- //}
- this.LogDebug($"============[执行事务完成]====>[等待节点运行]======>{flag}");
- return flag;
- }
- private bool SetWaitNode(NodeBase curNode, string waitPath)
- {
- waitPath = waitPath.StartsWith("P_R")
- ? waitPath
- : waitPath.Sw($"{curNode.CurPackageInfo.CurRoundInfo.NodePath}_");
- this.LogDebug($"============[执行事务中...]====>[等待节点运行]======>waitPath{waitPath}");
- var waitNode = curNode.CurPackageInfo.GetNodeByPath(waitPath);
- if (waitNode == null || waitNode.NodeState == NodeState.RunEnd || waitNode.NodeState == NodeState.Complete)
- {
- return false;
- }
- curNode.WaitPath = curNode.WaitPath ?? new List<string>();
- if (!curNode.WaitPath.Contains(waitPath))
- {
- curNode.WaitPath.Add(waitPath);
- }
- if (curNode.CurPackageInfo.WaitForRunNode.ContainsKey(waitPath))
- {
- List<string> toRunList = curNode.CurPackageInfo.WaitForRunNode[waitPath];
- toRunList.Add(curNode.NodePath);
- curNode.CurPackageInfo.WaitForRunNode[waitPath] = toRunList;
- }
- else
- {
- curNode.CurPackageInfo.WaitForRunNode.Add(waitPath, new List<string>() { curNode.NodePath });
- }
- return true;
- }
- }
- }
|