| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- using System;
- using System.Collections;
- using System.Diagnostics;
- using System.Dynamic;
- using System.Linq;
- using Abp.Runtime.Caching;
- using IwbZero.AppServiceBase;
- using IwbZero.IwbBase;
- using IwbZero.ToolCommon.LogHelpers;
- using IwbZero.ToolCommon.StringModel;
- using WeEngine.CommonDto;
- using WeEngine.Enum;
- using WeEngine.Packages;
- namespace WeEngine.Application.RunEngine
- {
- /// <summary>
- /// 演练实施
- /// </summary>
- public class EngineRunAppService : IwbZeroAppServiceBase, IEngineRunAppService
- {
- public EngineRunAppService(ICacheManager cacheManager, PackageRunner packageRunner)
- {
- PackageRunner = packageRunner;
- CacheManager = cacheManager;
- }
- public PackageRunner PackageRunner { get; }
- /// <summary>
- /// 开启训练营
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public void Start(RunStartPackageDto input)
- {
- try
- {
- this.LogDebug($"---[开启训练营]---> Data:[{input.Obj2String()}]");
- if (input.PackageId.IsEmpty())
- {
- CheckErrors("方案包编号不能为空!");
- return;
- }
- var s = Stopwatch.StartNew();
- PackageNode info = GetPackageNode(input.PackageId);
- s.Stop();
- Debug.WriteLine($" ===>{s.Elapsed.TotalSeconds}s ===>{s.Elapsed.TotalMilliseconds}ms");
- if (input.GroupNos != null && input.GroupNos.Any())
- {
- foreach (var groupNo in input.GroupNos)
- {
- s.Restart();
- var package = (PackageNode)info.Clone();
- s.Stop();
- Debug.WriteLine($" ===>{s.Elapsed.TotalSeconds}s ===>{s.Elapsed.TotalMilliseconds}ms");
- package.RunningId = groupNo;
- package.AssessRoles = input.AssessRoles ?? package.AssessRoles;
- package.AssessAuto = input.AssessAuto;
- package.AutoNextRound = input.AutoNextRound;
- package.RoundScore = input.RoundScore == 0 ? package.RoundScore : input.RoundScore;
- package.TargetClientId = input.TargetClientId;
- if (input.Variable.IsNotEmpty())
- {
- Hashtable variables = new Hashtable();
- var arr = input.Variable.Split(',');
- foreach (var v in arr)
- {
- var variable = IwbRtVariable.Str2Variable(v);
- if (!variables.ContainsKey(variable.VarName))
- {
- variables.Add(variable.VarName, variable);
- }
- }
- package.Variables = variables.MergeHashtable(package.Variables);
- }
- PackageRunner.Run(package, OperationType.Start);
- }
- }
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("启动失败!");
- }
- }
- /// <summary>
- /// 重新启动培训营
- /// </summary>
- public void ReStart(ReStartPackageDto input)
- {
- try
- {
- this.LogDebug($"---[重启训练营]---> ");
- var dataNode = input.RunningInfo.Str2Obj<PackageDataNode>();
- this.LogDebug($"=========> Data [{dataNode?.Id}] [{dataNode?.PackageNo}]");
- if (dataNode != null)
- {
- var packageId = dataNode.PackageNo.IsEmpty() ? input.PackageId : dataNode.PackageNo;
- var package = GetPackageNode(packageId);
- if (package != null)
- {
- package.TargetClientId = input.TargetClientId;
- package.AutoNextRound = input.AutoNextRound;
- package.PackageNodeFrom(dataNode);
- PackageRunner.ReRun(package);
- }
- }
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("重启失败!");
- }
- }
- private PackageNode GetPackageNode(string no)
- {
- PackageNode info = null;
- try
- {
- var xmlNode = CacheManager.GetPackageXml(no);
- if (xmlNode == null)
- {
- CheckErrors("方案包信息获取失败!");
- }
- info = (PackageNode)new PackageNode().BuildNodeByXmlNode(xmlNode);
- }
- catch (Exception e)
- {
- CheckErrors($"方案包信息解析失败[{e.Message}]");
- }
- return info;
- }
- /// <summary>
- /// 下一轮次(所有组)
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public void NextRounds(RunGroupPackageDto input)
- {
- this.LogDebug($"---[进入下一轮次]---> Data:[{input.Obj2String()}]");
- if (input.GroupNos != null && input.GroupNos.Any())
- {
- foreach (var groupNo in input.GroupNos)
- {
- var package = GetPackageByRunId(groupNo);
- try
- {
- PackageRunner.Run(package, OperationType.NextRound);
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("操作失败!");
- }
- }
- }
- }
- /// <summary>
- /// 下一轮次
- /// </summary>
- /// <param name="groupNo"></param>
- /// <returns></returns>
- public void NextRound(string groupNo)
- {
- this.LogDebug($"---[进入下一轮次]--->Data:[groupNo:{groupNo}]");
- var package = GetPackageByRunId(groupNo);
- try
- {
- PackageRunner.Run(package, OperationType.NextRound);
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("操作失败!");
- }
- }
- /// <summary>
- /// 下一情景流节点(所有组)
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public void NextAllFlowNodes(RunStartPackageDto input)
- {
- this.LogDebug($"---[下一情景流节点]---> Data:[{input.Obj2String()}]");
- if (input.GroupNos != null && input.GroupNos.Any())
- {
- foreach (var groupNo in input.GroupNos)
- {
- var package = GetPackageByRunId(groupNo);
- try
- {
- PackageRunner.Run(package, OperationType.NextFlowNodes);
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("操作失败!");
- }
- }
- }
- }
- /// <summary>
- /// 下一情景流节点
- /// </summary>
- /// <param name="groupNo"></param>
- /// <returns></returns>
- public void NextGroupFlowNodes(string groupNo)
- {
- this.LogDebug($"---[进入下一情景流节点]---> Data:[groupNo:{groupNo}]");
- var package = GetPackageByRunId(groupNo);
- try
- {
- PackageRunner.Run(package, OperationType.NextFlowNodes);
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("操作失败!");
- }
- }
- /// <summary>
- /// 下一情景流节点
- /// </summary>
- /// <param name="groupNo">分组编号</param>
- /// <param name="flowId">情景流流ID</param>
- /// <returns></returns>
- public void NextFlowNode(string groupNo, string flowId)
- {
- this.LogDebug($"---[进入下一情景流节点]---> Data:[groupNo:{groupNo},f:{flowId}]");
- var package = GetPackageByRunId(groupNo);
- try
- {
- dynamic obj = new ExpandoObject();
- obj.FlowId = flowId;
- package.ExtendData = obj;
- PackageRunner.Run(package, OperationType.NextFlowNode);
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("操作失败!");
- }
- }
- /// <summary>
- /// 匹配关键字
- /// </summary>
- /// <param name="groupNo"></param>
- /// <param name="behaviorWord"></param>
- /// <param name="behaviorRole"></param>
- /// <param name="scenePath"></param>
- /// <param name="checkRole"></param>
- public void MatchWord(string groupNo, string behaviorWord, string behaviorRole, string scenePath,
- bool checkRole)
- {
- this.LogDebug($"---[匹配关键字]---> Data:[groupNo:{groupNo},w:{behaviorWord},r:{behaviorRole},s:{scenePath}]");
- var package = GetPackageByRunId(groupNo);
- try
- {
- dynamic obj = new ExpandoObject();
- obj.BehaviorWord = behaviorWord;
- obj.BehaviorRole = behaviorRole;
- obj.ScenePath = scenePath;
- obj.CheckRole = checkRole;
- package.ExtendData = obj;
- PackageRunner.Run(package, OperationType.MatchKey);
- }
- catch (Exception e)
- {
- this.LogError(e);
- CheckErrors("操作失败!");
- }
- }
- /// <summary>
- /// 匹配关键字
- /// </summary>
- /// <param name="input"></param>
- public void MatchWord(RunOperationDto input)
- {
- this.LogDebug($"---[匹配关键字]---> Data:[{input.Obj2String()}]");
- var package = GetPackageByRunId(input.GroupNo);
- try
- {
- dynamic obj = new ExpandoObject();
- obj.BehaviorWord = input.BehaviorWord;
- obj.BehaviorRole = input.BehaviorRole;
- obj.ScenePath = input.ScenePath;
- obj.CheckRole = input.CheckRole;
- package.ExtendData = obj;
- var ss = package.NotMatchKeywords;
- PackageRunner.Run(package, OperationType.MatchKey);
- this.LogDebug($"---[匹配 =======> 结束]");
- }
- catch (Exception e)
- {
- this.LogError(e);
- this.LogDebug($"---[匹配 =======> ========> 错误]");
- CheckErrors("操作失败!");
- }
- }
- /// <summary>
- /// 查询运行信息
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public PackageDataNode QueryPackageDataNode(string id)
- {
- try
- {
- var package = GetPackageByRunId(id);
- return package.CurPackageInfo.Convert2DataNode();
- }
- catch (Exception e)
- {
- this.LogError(e);
- }
- return null;
- }
- /// <summary>
- /// 查询运行信息
- /// </summary>
- /// <param name="id"></param>
- /// <param name="path"></param>
- /// <returns></returns>
- public DataNodeBase QueryPackageDataNodeWithPath(string id, string path = "")
- {
- try
- {
- var package = GetPackageByRunId(id);
- var node = path.IsEmpty() ? package.CurPackageInfo : package.CurPackageInfo.GetNodeByPath(path);
- if (node != null)
- {
- return node.ConvertToDataNode();
- }
- }
- catch (Exception e)
- {
- this.LogError(e);
- }
- return null;
- }
- /// <summary>
- /// 矫正评分
- /// </summary>
- /// <param name="groupNo"></param>
- /// <param name="score"></param>
- public void CorrectScore(string groupNo, decimal score)
- {
- this.LogDebug($"---[矫正评分]---> Data:[groupNo:{groupNo},score:{score}]");
- var package = GetPackageByRunId(groupNo);
- package.CurRoundInfo.CorrectionScore = score;
- }
- private PackageNode GetPackageByRunId(string runId)
- {
- PackageNode package = null;
- try
- {
- package = (PackageNode)CacheManager.GetCache(EngineCacheName.RunningPackage).GetOrDefault(runId);
- }
- catch (Exception e)
- {
- this.LogError(e);
- }
- if (package == null)
- {
- CheckErrors("未查询到正在演练的培训营!");
- }
- return package;
- }
- /// <summary>
- /// 非演化情景控制
- /// </summary>
- public void NeControl(string groupNo, string ocType)
- {
- }
- }
- }
|