| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using IwbZero.IwbBase;
- using IwbZero.ToolCommon.StringModel;
- using WeEngine;
- using WeEngine.Enum;
- using WeEngine.Packages;
- namespace WePlatform.WeLib.Package.Dto
- {
- public class ModelBase
- {
- public ModelBase()
- {
- Children = new List<ModelBase>();
- GuideInfos = new List<GuideModel>();
- }
- public PackageModel PackageModel { get; set; }
- public string Id { get; set; }
- public string No { get; set; }
- public string Name { get; set; }
- public string Path { get; set; }
- public string ParentPath { get; set; }
- //public string _guideNos;
- //public string GuideNos {
- // get
- // {
- // return _guideNos.IsEmpty()
- // ? string.Join(",", GuideInfos?.Select(a => a.Id) ?? new string[0])
- // : _guideNos;
- // }
- // set => _guideNos = value;
- //}
- //public string GuideNames => string.Join(",", GuideInfos?.Select(a => a.Name) ?? new string[0]);
- public List<GuideModel> GuideInfos { get; set; }
- public string SceneCategory { get; set; }
- public string SceneCategoryName { get; set; }
- public string PreComponent { get; set; }
- public string RunningComponent { get; set; }
- public string PostComponent { get; set; }
- public string VariableStr { get; set; }
- public decimal Weights { get; set; }
- public List<ModelBase> Children { get; set; }
- protected Hashtable GetVariable( )
- {
- var table= new Hashtable();
- if (VariableStr.IsNotEmpty())
- {
- var varArr = VariableStr.StrToArray();
- foreach (var v in varArr)
- {
- var variable = IwbRtVariable.Str2Variable(v);
- table[variable.VarName] = variable;
- }
- }
- return table;
- }
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal virtual NodeBase NodeFrom(NodeBase node)
- {
- node.Id = Id;
- node.InternalNo = No;
- node.Name = Name;
- node.EventComponentNode = new ComponentNode()
- {
- PreComponent = PreComponent,
- RunningComponent = RunningComponent,
- PostComponent = PostComponent
- };
- node.GuideInfos = GuideInfos?.Select(a => a.NodeFrom()).ToList() ?? new List<GuideNode>();
- node.Variables = GetVariable();
- node.Children = new List<NodeBase>();
- return node;
- }
- /// <summary>
- /// 转换Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal virtual void ModelFrom(NodeBase node)
- {
- Id = node.Id;
- No = node.InternalNo;
- Name = node.Name;
- Weights = node.Weights;
- Path = node.NodePath;
- ParentPath = node.Parent?.NodePath;
- VariableStr = Variable2Str(GetVariable());
- PreComponent = node.EventComponentNode?.PreComponent;
- RunningComponent = node.EventComponentNode?.RunningComponent;
- PostComponent = node.EventComponentNode?.PostComponent;
- GuideInfos = node.GuideInfos?.Select(a => new GuideModel().ModelFrom(a)).ToList() ?? new List<GuideModel>();
- }
- /// <summary>
- /// 变量转字符串
- /// </summary>
- /// <param name="variables"></param>
- /// <returns></returns>
- private string Variable2Str(Hashtable variables)
- {
- string str = "";
- if (variables != null && variables.Count > 0)
- {
- string vStr = "";
- foreach (DictionaryEntry entry in variables)
- {
- var v = (IwbRtVariable)entry.Value;
- vStr += (vStr == "" ? "" : ",") + IwbRtVariable.Variable2Str(v);
- }
- }
- return str;
- }
-
- }
- public class PackageModel: ModelBase
- {
- public PackageModel()
- {
- PackageModel = this;
- }
- public int RoundCount { get; set; }
- public string EngineType { get; set; }
- public string AssessRoles { get; set; }
- public string AssessRoleNos { get; set; }
- public bool AssessAuto { get; set; }
- public bool AutoNextRound { get; set; }
- public decimal RoundScore { get; set; }
- public List<ComponentModel> Components { get; set; }
- #region ALL MODEL INFO
- public List<RoundModel> AllRoundModels => Children.Select(a => (RoundModel) a).ToList();
- public List<BlockModel> AllBlockModels
- {
- get
- {
- var list = new List<BlockModel>();
- foreach (var model in AllRoundModels)
- {
- list.AddRange(model.AllBlockModels);
- }
- return list;
- }
- }
- public List<SceneFlowModel> AllFlowModels
- {
- get
- {
- var list = new List<SceneFlowModel>();
- foreach (var model in AllRoundModels)
- {
- list.AddRange(model.AllFlowModels);
- }
- return list;
- }
- }
- public List<FlowModel> AllFlowNodeModels
- {
- get
- {
- var list = new List<FlowModel>();
- foreach (var model in AllRoundModels)
- {
- list.AddRange(model.AllFlowNodeModels);
- }
- return list;
- }
- }
- public List<SceneModel> AllSceneModels
- {
- get
- {
- var list = new List<SceneModel>();
- foreach (var model in AllRoundModels)
- {
- list.AddRange(model.AllSceneModels);
- }
- return list;
- }
- }
- public List<BehaviorModel> AllBehaviorModels
- {
- get
- {
- var list = new List<BehaviorModel>();
- foreach (var model in AllRoundModels)
- {
- list.AddRange(model.AllBehaviorModels);
- }
- return list;
- }
- }
- public List<GuideModel> AllGuideModels
- {
- get
- {
- var list = new List<GuideModel>();
- foreach (var model in AllRoundModels)
- {
- list.AddRange(model.AllGuideModels);
- }
- return list;
- }
- }
- public List<EnvironResourceModel> AllEnvironResourceModels
- {
- get
- {
- var list = new List<EnvironResourceModel>();
- foreach (var model in AllRoundModels)
- {
- list.AddRange(model.AllEnvironResourceModels);
- }
- return list;
- }
- }
- #endregion
- public List<RoleModel> RoleInfos => PackageNodeFrom().AllRoleInfos
- .Select(a => new RoleModel(a.RoleNo, a.RoleName, a.RoleWeight, a.TotalWeight)).ToList();
- //public string AllRoleNames => RoleInfos?.Count > 0
- // ? string.Join(",", RoleInfos.Select(a => a.ToString()).ToArray())
- // : "";
- /// <summary>
- /// 构建方案包Node
- /// </summary>
- /// <param name="xmlInfo"></param>
- /// <returns></returns>
- public PackageNode BuildPackageNodeByXml(PackageXmlInfo xmlInfo)
- {
- var package = new PackageNode
- {
- AssessAuto = AssessAuto,
- AssessRoles = AssessRoles.Split(',').ToList(),
- EngineType = EngineType,
- AutoNextRound = AutoNextRound,
- RoundScore = RoundScore,
- Parent = null,
- QueryFlowXmlFunc = id => PackageHelper.GetSceneFlowXmlFromXml(xmlInfo.FlowXml, id),
- QuerySceneXmlFunc = id => PackageHelper.GetSceneXmlFromXml(xmlInfo.SceneXml, id),
- QueryBehaviorXmlFunc = id => PackageHelper.GetBehaviorXmlFromXml(xmlInfo.BehaviorXml , id),
- QueryGuidesXmlFunc = ids => PackageHelper.GetGuidesXmlFromXml(xmlInfo.GuideXml, string.Join( ",",ids)),
- QueryEnvironmentXmlFunc = id => PackageHelper.GetEnvironResourceXmlFromXml(xmlInfo.EnvironResourceXml, id),
- };
- var packageXmlNode = IwbXmlNode.ParseGenericXml(xmlInfo.PackageXml);
- package = (PackageNode)package.BuildNodeByXmlNode(packageXmlNode);
- return package;
- }
- /// <summary>
- /// 构建方案包Model
- /// </summary>
- /// <param name="xmlInfo"></param>
- /// <returns></returns>
- public PackageModel BuildPackageModelByXml(PackageXmlInfo xmlInfo)
- {
- var packageNode = BuildPackageNodeByXml(xmlInfo);
- var packageModel = new PackageModel();
- packageModel.ModelFrom(packageNode);
- return packageModel;
- }
- /// <summary>
- /// Model转换为Node
- /// </summary>
- /// <returns></returns>
- public PackageNode PackageNodeFrom()
- {
- var package = new PackageNode
- {
- AssessAuto = AssessAuto,
- AssessRoles = AssessRoles.Split(',').ToList(),
- EngineType = EngineType,
- AutoNextRound = AutoNextRound,
- RoundScore = RoundScore,
- Parent = null,
- };
- package = (PackageNode)NodeFrom(package);
- return package;
- }
- #region XML
- public PackageXmlDto PackageFillXml()
- {
- var packageNode = PackageNodeFrom();
- var dto = new PackageXmlDto
- {
- PackageXml = packageNode.ToXmlString(),
- FlowXml = packageNode.Flows2Xml(),
- SceneXml = packageNode.Scenes2Xml(),
- BehaviorXml = packageNode.Behaviors2Xml(),
- GuideXml = packageNode.Guide2Xml(),
- EnvironResourceXml = packageNode.EnvironmentRender2Xml(),
- ComponentXml = GetComponentXml(Components),
- AllRoles = RoleInfos?.Count > 0
- ? string.Join(",", RoleInfos.Select(a => a.ToString()).ToArray())
- : ""
- };
- return dto;
- }
- private string GetComponentXml(List<ComponentModel> models)
- {
- string str = "";
- foreach (var m in models)
- {
- str += m.ToXmlString() + "\r\n";
- }
- if (str.IsNotEmpty())
- {
- str = $"<ComponentInfos>{str}</ComponentInfos>";
- }
- return str;
- }
- #endregion
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal override NodeBase NodeFrom(NodeBase node)
- {
- node = base.NodeFrom(node);
- node.Parent = null;
- if (Children?.Count > 0)
- {
- foreach (var child in Children)
- {
- var childNode = new SceneRoundNode(node);
- node.Children.Add(child.NodeFrom(childNode));
- }
- }
- return node;
- }
- /// <summary>
- /// 转换为Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal override void ModelFrom(NodeBase node)
- {
- base.ModelFrom(node);
- var node2 = (PackageNode) node;
- AssessAuto = node2.AssessAuto;
- AssessRoles = string.Join(",", node2.AssessRoles);
- EngineType = node2.EngineType;
- AutoNextRound = node2.AutoNextRound;
- RoundScore = node2.RoundScore;
- if (node.HasChild)
- {
- foreach (var child in node.Children)
- {
- var modal = new RoundModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- }
- }
- public class RoundModel: ModelBase
- {
- public int RoundIndex { get; set; }
- public int BlockIndex { get; set; }
- public decimal RoundFullScore { get; set; }
- public int ControlRate { get; set; }
- public int SceneCount { get; set; }
- #region ALL MODEL INFO
- public List<BlockModel> AllBlockModels => Children.Select(a => (BlockModel)a).ToList();
- public List<SceneFlowModel> AllFlowModels
- {
- get
- {
- var list = new List<SceneFlowModel>();
- foreach (var model in AllBlockModels)
- {
- list.AddRange(model.AllFlowModels);
- }
- return list;
- }
- }
- public List<FlowModel> AllFlowNodeModels
- {
- get
- {
- var list = new List<FlowModel>();
- foreach (var model in AllBlockModels)
- {
- list.AddRange(model.AllFlowNodeModels);
- }
- return list;
- }
- }
- public List<SceneModel> AllSceneModels
- {
- get
- {
- var list = new List<SceneModel>();
- foreach (var model in AllBlockModels)
- {
- list.AddRange(model.AllSceneModels);
- }
- return list;
- }
- }
- public List<BehaviorModel> AllBehaviorModels
- {
- get
- {
- var list = new List<BehaviorModel>();
- foreach (var model in AllBlockModels)
- {
- list.AddRange(model.AllBehaviorModels);
- }
- return list;
- }
- }
- public List<GuideModel> AllGuideModels
- {
- get
- {
- var list = new List<GuideModel>();
- foreach (var model in AllBlockModels)
- {
- list.AddRange(model.AllGuideModels);
- }
- return list;
- }
- }
- public List<EnvironResourceModel> AllEnvironResourceModels
- {
- get
- {
- var list = new List<EnvironResourceModel>();
- foreach (var model in AllBlockModels)
- {
- list.AddRange(model.AllEnvironResourceModels);
- }
- return list;
- }
- }
- #endregion
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal override NodeBase NodeFrom(NodeBase node)
- {
- var newNode =(SceneRoundNode) base.NodeFrom(node);
- newNode.RoundIndex = RoundIndex;
- newNode.RoundFullScore = RoundFullScore;
- newNode.ControlRate = ControlRate;
- newNode.SceneCount = SceneCount;
- if (Children?.Count > 0)
- {
- foreach (var child in Children)
- {
- var childNode = new SceneFlowBlockNode(newNode);
- newNode.Children.Add(child.NodeFrom(childNode));
- }
- }
- return newNode;
- }
- /// <summary>
- /// 转换Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal override void ModelFrom(NodeBase node)
- {
- base.ModelFrom(node);
- var node2 = (SceneRoundNode)node;
- RoundIndex = node2.RoundIndex;
- RoundFullScore = node2.RoundFullScore;
- ControlRate = node2.ControlRate;
- SceneCount = node2.SceneCount;
- if (node.HasChild)
- {
- Children = new List<ModelBase>();
- foreach (var child in node.Children)
- {
- var modal = new BlockModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- }
- }
- public class BlockModel: ModelBase
- {
-
- public int BlockType { get; set; }
- public string FlowNos { get; set; }
- public string FlowNames { get; set; }
- #region ALL MODEL INFO
- public List<SceneFlowModel> AllFlowModels => Children.Select(a => (SceneFlowModel)a).ToList();
- public List<FlowModel> AllFlowNodeModels
- {
- get
- {
- var list = new List<FlowModel>();
- foreach (var model in AllFlowModels)
- {
- list.AddRange(model.AllFlowNodeModels);
- }
- return list;
- }
- }
- public List<SceneModel> AllSceneModels
- {
- get
- {
- var list = new List<SceneModel>();
- foreach (var model in AllFlowModels)
- {
- list.AddRange(model.AllSceneModels);
- }
- return list;
- }
- }
- public List<BehaviorModel> AllBehaviorModels
- {
- get
- {
- var list = new List<BehaviorModel>();
- foreach (var model in AllFlowModels)
- {
- list.AddRange(model.AllBehaviorModels);
- }
- return list;
- }
- }
- public List<GuideModel> AllGuideModels
- {
- get
- {
- var list = new List<GuideModel>();
- foreach (var model in AllFlowModels)
- {
- list.AddRange(model.AllGuideModels);
- }
- return list;
- }
- }
- public List<EnvironResourceModel> AllEnvironResourceModels
- {
- get
- {
- var list = new List<EnvironResourceModel>();
- foreach (var model in AllFlowModels)
- {
- list.AddRange(model.AllEnvironResourceModels);
- }
- return list;
- }
- }
- #endregion
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal override NodeBase NodeFrom(NodeBase node)
- {
- var newNode = (SceneFlowBlockNode)base.NodeFrom(node);
- newNode.BlockType = (SceneFlowBlockType) BlockType;
- if (Children?.Count > 0)
- {
- foreach (var child in Children)
- {
- var childNode = new SceneFlowNode(newNode);
- newNode.Children.Add(child.NodeFrom(childNode));
- }
- }
- return newNode;
- }
- /// <summary>
- /// 转换为Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal override void ModelFrom(NodeBase node)
- {
- base.ModelFrom(node);
- var node2 = (SceneFlowBlockNode)node;
- BlockType = (int)node2.BlockType;
- if (node.HasChild)
- {
- foreach (var child in node.Children)
- {
- var modal = new RoundModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- }
- }
- public class SceneFlowModel : ModelBase
- {
- public FlowModel ContentInfo { get; set; }
- #region ALL MODEL INFO
- public List<FlowModel> AllFlowNodeModels => Children.Select(a => (FlowModel)a).ToList();
- public List<SceneModel> AllSceneModels
- {
- get
- {
- var list = new List<SceneModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllSceneModels);
- }
- return list;
- }
- }
- public List<BehaviorModel> AllBehaviorModels
- {
- get
- {
- var list = new List<BehaviorModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllBehaviorModels);
- }
- return list;
- }
- }
- public List<GuideModel> AllGuideModels
- {
- get
- {
- var list = new List<GuideModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllGuideModels);
- }
- return list;
- }
- }
- public List<EnvironResourceModel> AllEnvironResourceModels
- {
- get
- {
- var list = new List<EnvironResourceModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllEnvironResourceModels);
- }
- return list;
- }
- }
- #endregion
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal override NodeBase NodeFrom(NodeBase node)
- {
- var newNode = (SceneFlowNode)base.NodeFrom(node);
- if (Children?.Count > 0)
- {
- foreach (var child in Children)
- {
- var childNode = new FlowNode(newNode);
- newNode.Children.Add(child.NodeFrom(childNode));
- }
- }
- return newNode;
- }
- /// <summary>
- /// 转换为Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal override void ModelFrom(NodeBase node)
- {
- base.ModelFrom(node);
- if (node.HasChild)
- {
- foreach (var child in node.Children)
- {
- var modal = new FlowModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- }
- }
- public class FlowModel: ModelBase
- {
- public int Index { get; set; }
- public int FlowDepth { get; set; }
- public string SceneNos => string.Join(",", SceneInfos?.Select(a => a.Id) ?? new string[0]);
- public string SceneNames => string.Join(",", SceneInfos?.Select(a => a.Name) ?? new string[0]);
- public List<SceneModel> SceneInfos { get; set; }
- #region ALL MODEL INFO
- public List<FlowModel> AllFlowNodeModels => GetFlowModels(this);
- public List<SceneModel> AllSceneModels
- {
- get
- {
- var list = new List<SceneModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllSceneModels);
- }
- return list;
- }
- }
- public List<BehaviorModel> AllBehaviorModels
- {
- get
- {
- var list = new List<BehaviorModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllBehaviorModels);
- }
- return list;
- }
- }
- public List<GuideModel> AllGuideModels
- {
- get
- {
- var list = new List<GuideModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllGuideModels);
- }
- return list;
- }
- }
- public List<EnvironResourceModel> AllEnvironResourceModels
- {
- get
- {
- var list = new List<EnvironResourceModel>();
- foreach (var model in AllFlowNodeModels)
- {
- list.AddRange(model.AllEnvironResourceModels);
- }
- return list;
- }
- }
- #endregion
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal override NodeBase NodeFrom(NodeBase node)
- {
- var newNode = (FlowNode)base.NodeFrom(node);
- if (Children?.Count > 0)
- {
- foreach (var child in Children)
- {
- var childNode = new FlowNode(newNode);
- newNode.Children.Add(child.NodeFrom(childNode));
-
- }
- }
- if (SceneInfos?.Count > 0)
- {
- foreach (var sceneInfo in SceneInfos)
- {
- var sceneNode = new SceneNode(newNode);
- newNode.SceneInfos.Add((SceneNode)sceneInfo.NodeFrom(sceneNode));
- }
- }
- return newNode;
- }
- /// <summary>
- /// 转换Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal override void ModelFrom(NodeBase node)
- {
- base.ModelFrom(node);
- var node2 = (FlowNode)node;
- if (node.HasChild)
- {
- Children = new List<ModelBase>();
- foreach (var child in node.Children)
- {
- var modal = new FlowModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- if (node2.SceneInfos?.Count > 0)
- {
- SceneInfos = new List<SceneModel>();
- foreach (var child in node2.SceneInfos)
- {
- var modal = new SceneModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- }
- private List<FlowModel> GetFlowModels(FlowModel model)
- {
- var list = new List<FlowModel>(){model};
- if (model.Children?.Count > 0)
- {
- foreach (var child in model.Children)
- {
- list.AddRange(GetFlowModels((FlowModel)child));
- }
- }
- return list;
- }
- }
- public class SceneModel: ModelBase
- {
- public SceneModel()
- {
- EnvironResources = new List<EnvironResourceModel>();
- }
- public int SceneType { get; set; }
- public string SceneTag { get; set; }
- public string Description { get; set; }
- public string BehaviorNos { get; set; }
- //public string EnvironResourceNos { get; set; }
- public List<EnvironResourceModel> EnvironResources { get; set; }
- #region ALL MODEL INFO
- public List<BehaviorModel> AllBehaviorModels => Children.Select(a => (BehaviorModel) a).ToList();
- public List<GuideModel> AllGuideModels
- {
- get
- {
- var list = new List<GuideModel>();
- foreach (var model in AllBehaviorModels)
- {
- list.AddRange(model.AllGuideModels);
- }
- return list;
- }
- }
- public List<EnvironResourceModel> AllEnvironResourceModels
- {
- get
- {
- var list = new List<EnvironResourceModel>();
- foreach (var model in AllBehaviorModels)
- {
- list.AddRange(model.AllEnvironResourceModels);
- }
- return list;
- }
- }
- #endregion
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal override NodeBase NodeFrom(NodeBase node)
- {
- var newNode = (SceneNode)base.NodeFrom(node);
- newNode.SceneTag = SceneTag;
- newNode.Description = Description;
- newNode.EnvironResources = EnvironResources?.Select(a => a.NodeFrom()).ToList() ?? new List<EnvironResourceNode>();
- if (Children?.Count > 0)
- {
- foreach (var child in Children)
- {
- var childNode = new BehaviorNode(newNode);
- newNode.Children.Add(child.NodeFrom(childNode));
- }
- }
- return newNode;
- }
- /// <summary>
- /// 转换为Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal override void ModelFrom(NodeBase node)
- {
- base.ModelFrom(node);
- var node2 = (SceneNode)node;
- SceneTag = node2.SceneTag;
- Description = node2.Description;
- EnvironResources = node2.EnvironResources?.Select(a => new EnvironResourceModel().ModelFrom(a)).ToList() ??
- new List<EnvironResourceModel>();
- if (node.HasChild)
- {
- foreach (var child in node.Children)
- {
- var modal = new BehaviorModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- }
- }
- public class BehaviorModel: ModelBase
- {
- public BehaviorModel()
- {
- EnvironResources = new List<EnvironResourceModel>();
- }
- public string BehaviorTag { get; set; }
- public string Description { get; set; }
- public int BehaviorScoreType { get; set; }
- public int RoleLogicType { get; set; }
- public List<RoleModel> BehaviorRoles { get; set; }
- //public string RoleNames { get; set; }
- public string RuleKeyword { get; set; }
- //public string EnvironResourceNos { get; set; }
- public string KnowledgeNos { get; set; }
- public List<EnvironResourceModel> EnvironResources { get; set; }
- #region ALL MODEL INFO
- public List<GuideModel> AllGuideModels => GuideInfos ?? new List<GuideModel>();
- public List<EnvironResourceModel> AllEnvironResourceModels =>
- EnvironResources ?? new List<EnvironResourceModel>();
- #endregion
- /// <summary>
- /// 转换Node
- /// </summary>
- /// <param name="node">空Node</param>
- /// <returns></returns>
- internal override NodeBase NodeFrom(NodeBase node)
- {
- var newNode = (BehaviorNode)base.NodeFrom(node);
- newNode.BehaviorTag = BehaviorTag;
- newNode.BehaviorRoleLogic = (BehaviorRoleLogicType) RoleLogicType;
- newNode.BehaviorRoles = BehaviorRoles?.Count > 0
- ? BehaviorRoles.Select(a => new RoleNode(a.RoleNo, a.RoleName)).ToList()
- : new List<RoleNode>();
- newNode.EnvironResources = new List<EnvironResourceNode>();
- newNode.Description = Description;
- newNode.BuildKeywordNodes(RuleKeyword);
- newNode.EnvironResources = EnvironResources?.Select(a => a.NodeFrom()).ToList() ?? new List<EnvironResourceNode>();
- return newNode;
- }
- /// <summary>
- /// 转换为Model
- /// </summary>
- /// <param name="node"></param>
- /// <returns></returns>
- internal override void ModelFrom(NodeBase node)
- {
- base.ModelFrom(node);
- var node2 = (BehaviorNode)node;
- BehaviorTag = node2.BehaviorTag;
- RoleLogicType = (int) node2.BehaviorRoleLogic;
- BehaviorRoles = node2.BehaviorRoles?.Count > 0
- ? node2.BehaviorRoles.Select(a => new RoleModel(a.RoleNo, a.RoleName,a.RoleWeight,a.TotalWeight)).ToList()
- : new List<RoleModel>();
- Description = node2.Description;
- RuleKeyword = node2.Keywords;
- EnvironResources = node2.EnvironResources?.Select(a => new EnvironResourceModel().ModelFrom(a)).ToList() ??
- new List<EnvironResourceModel>();
- if (node.HasChild)
- {
- foreach (var child in node.Children)
- {
- var modal = new BehaviorModel() { PackageModel = PackageModel };
- modal.ModelFrom(child);
- Children.Add(modal);
- }
- }
- }
- }
- public class GuideModel
- {
- public string Id { get; set; }
- /// <summary>
- /// 提示名称
- /// </summary>
- public string Name { get; set; }
- /// <summary>
- /// 提示详情
- /// </summary>
- public string Description { get; set; }
- /// <summary>
- /// 提示类型
- /// </summary>
- public int GuideType { get; set; }
- public GuideNode NodeFrom()
- {
- var node = new GuideNode
- {
- Id = Id,
- Name = Name,
- GuideType = GuideType,
- Description = Description,
- };
- return node;
- }
- public GuideModel ModelFrom(GuideNode node)
- {
- if (node == null)
- {
- return null;
- }
- Id = node.Id;
- Name = node.Name;
- GuideType = node.GuideType;
- Description = node.Description;
- return this;
- }
-
-
- }
- public class EnvironResourceModel
- {
- public string Id { get; set; }
- /// <summary>
- /// 资源名称
- /// </summary>
- public string ResourceName { get; set; }
- /// <summary>
- /// 资源类型
- /// </summary>
- public int ResourceType { get; set; }
- /// <summary>
- /// 资源路径
- /// </summary>
- public string ResourcePath { get; set; }
- /// <summary>
- /// 资源描述
- /// </summary>
- public string Description { get; set; }
- public string MessageCode { get; set; }
- public EnvironResourceNode NodeFrom()
- {
- var node = new EnvironResourceNode
- {
- Id = Id,
- ResourceName = ResourceName,
- ResourceType = ResourceType,
- ResourcePath =ResourcePath,
- Description = Description,
- MessageCode = MessageCode
- };
- return node;
- }
- public EnvironResourceModel ModelFrom(EnvironResourceNode node)
- {
- if (node == null)
- {
- return null;
- }
- Id = node.Id;
- ResourceName = node.ResourceName;
- ResourceType = node.ResourceType;
- ResourcePath = node.ResourcePath;
- MessageCode = node.MessageCode;
- Description = node.Description;
- return this;
- }
-
- }
- public class ComponentModel
- {
- public string Id { get; set; }
- public string No { get; set; }
- public string Name { get; set; }
- public List<ComponentDataModel> Data { get; set; }
- public string ToXmlString()
- {
- var str = "";
- str += $"<ComponentInfo id=\"{Id}\">";
- str += $"<Id>{Id}</Id>\r\n";
- str += $"<Name>{Name}</Name>\r\n";
- var str1 = "";
- foreach (var cd in Data)
- {
- str1 += cd.ToXmlString();
- }
- str += str1.IsEmpty() ?"":$"<ComponentScript>{str1}</ComponentScript>\r\n" ;
- str += "</ComponentInfo>";
- return str;
- }
- public ComponentModel ModelFrom(IwbXmlNode xmlNode)
- {
- if (xmlNode == null)
- {
- return null;
- }
- Data=new List<ComponentDataModel>();
- Id = xmlNode.GetChildValue("Id");
- No = xmlNode.GetChildValue("No");
- Name = xmlNode.GetChildValue("Name");
- var scriptNodes= xmlNode.GetChildNode("ComponentScript")?.Nodes;
- if (scriptNodes?.Count > 0)
- {
- foreach (IwbXmlNode scriptNode in scriptNodes)
- {
- var data= new ComponentDataModel().ModelFrom(scriptNode);
- Data.Add(data);
- }
- }
- return this;
- }
- public List<ComponentModel> CreateByXml(string xml)
- {
- var node = IwbXmlNode.ParseGenericXml(xml);
- return CreateByXml(node);
- }
- public List<ComponentModel> CreateByXml(IwbXmlNode xmlNode)
- {
- var models = new List<ComponentModel>();
- var nodes = xmlNode?.Nodes;
- if (nodes?.Count > 0)
- {
- foreach (IwbXmlNode node in nodes)
- {
- var model = new ComponentModel().ModelFrom(node);
- if (model != null) models.Add(model);
- }
- }
- return models;
- }
- }
- public class ComponentDataModel
- {
- public string Id { get; set; }
- public string No { get; set; }
- public string Name { get; set; }
- public string Path { get; set; }
- public string ParentPath { get; set; }
- public string CompType { get; set; }
- public VariableModel Variable { get; set; }
- public string Condition { get; set; }
- public List<ComponentDataModel> Yes { get; set; }
- public List<ComponentDataModel> Not { get; set; }
- public string WaitNodes { get; set; }
- public string Message { get; set; }
- public string ToXmlString()
- {
- string str = "", str1 = "";
- str += $"<{CompType} id=\"{Id}\">";
- if (Variable != null)
- {
- str1 += Variable.ToXmlString();
- str += str1.IsEmpty() ? "" : $"<Variable>{str1}</Variable>\r\n";
- }
- str += CompType.IsEmpty() ? "" : $"<CompType>{CompType}</CompType>\r\n";
- str += Name.IsEmpty() ? "" : $"<Name>{Name}</Name>\r\n";
- str += Path.IsEmpty() ? "" : $"<Name>{Path}</Name>\r\n";
- str += ParentPath.IsEmpty() ? "" : $"<Name>{ParentPath}</Name>\r\n";
- str += Condition.IsEmpty() ? "" : $"<Condition>{Condition.FormatCode2Xml()}</Condition>\r\n";
- str += WaitNodes.IsEmpty() ? "" : $"<WaitNodes>{WaitNodes}</WaitNodes>\r\n";
- str += Message.IsEmpty() ? "" : $"<Message>{Message}</Message>\r\n";
- str1 = "";
- if (Yes != null)
- {
- foreach (var cd in Yes)
- {
- str1 += cd.ToXmlString();
- }
- }
-
- str += str1.IsEmpty() ? "" : $"<Yes>{str1}</Yes>\r\n";
- str1 = "";
- if (Not != null)
- {
- foreach (var cd in Not)
- {
- str1 += cd.ToXmlString();
- }
- }
-
- str += str1.IsEmpty() ? "" : $"<No>{str1}</No>\r\n";
- str += $"</{CompType}>";
- return str;
- }
- public ComponentDataModel ModelFrom(IwbXmlNode xmlNode)
- {
- if (xmlNode == null)
- return null;
- Id = xmlNode.GetChildValue("Id");
- No = xmlNode.GetChildValue("No");
- Name = xmlNode.GetChildValue("Name");
- CompType = xmlNode.GetChildValue("CompType");
- Path = xmlNode.GetChildValue("Path");
- ParentPath = xmlNode.GetChildValue("ParentPath");
- Condition = xmlNode.GetChildValue("Condition");
- WaitNodes = xmlNode.GetChildValue("WaitNodes");
- Message = xmlNode.GetChildValue("Message");
- var variableNodes = xmlNode.GetChildNode("Variable")?.Nodes;
- if (variableNodes?.Count > 0)
- {
- Variable= new VariableModel();
- foreach (IwbXmlNode v in variableNodes)
- {
- Variable.Name = v.GetChildValue("Name");
- Variable.Type = v.GetChildValue("Type");
- Variable.Value = v.GetChildValue("Value");
- Variable.TargetPath = v.GetChildValue("TargetPath");
- Variable.TargetName = v.GetChildValue("TargetName");
- }
- }
- Yes= new List<ComponentDataModel>();
- Not =new List<ComponentDataModel>();
- var yesNodes = xmlNode.GetChildNode("Yes")?.Nodes;
- if (yesNodes?.Count > 0)
- {
- foreach (IwbXmlNode y in yesNodes)
- {
- var yes = new ComponentDataModel().ModelFrom(y);
- if (yes != null) Yes.Add(yes);
- }
- }
- var noNodes = xmlNode.GetChildNode("Not")?.Nodes;
- if (noNodes?.Count > 0)
- {
- foreach (IwbXmlNode n in noNodes)
- {
- var not = new ComponentDataModel().ModelFrom(n);
- if (not != null) Not.Add(not);
- }
- }
- return this;
- }
- }
- public class VariableModel
- {
- public VariableModel()
- {
- }
- public VariableModel(string str)
- {
- var arr = str.StrToArray(":");
- Name = "";
- Type = "STRING";
- Value = "";
- if (arr.Length > 0)
- {
- Name = arr[0].Substring(2);
- }
- if (arr.Length > 1)
- {
- TargetPath = arr[1];
- }
- if (arr.Length > 2)
- {
- Value = arr[2];
- }
- }
- public string Name { get; set; }
- public string Type { get; set; }
- public string Value { get; set; }
- public string TargetPath { get; set; }
- public string TargetName { get; set; }
- public string ToXmlString()
- {
- string str = "";
-
- str += Name.IsEmpty() ? "" : $"<Name>{Name}</Name>\r\n";
- str += Type.IsEmpty() ? "" : $"<Type>{Type}</Type>\r\n";
- str += Value.IsEmpty() ? "" : $"<Value>{Value}</Value>\r\n";
- str += TargetPath.IsEmpty() ? "" : $"<TargetPath>{TargetPath}</TargetPath>\r\n";
- str += TargetName.IsEmpty() ? "" : $"<TargetName>{TargetName}</TargetName>\r\n";
-
- return str;
- }
- }
- public class RoleModel
- {
- public RoleModel()
- {
- }
- public RoleModel(string roleNo, string roleName)
- {
- RoleNo = roleNo;
- RoleName = roleName;
- RoleWeight = 1;
- TotalWeight = 1;
- }
- public RoleModel(string roleNo, string roleName, decimal roleWeight, decimal totalWeight)
- {
- RoleNo = roleNo;
- RoleName = roleName;
- RoleWeight = roleWeight;
- TotalWeight = totalWeight;
- }
- public string RoleNo { get; set; }
- public string RoleName { get; set; }
- public decimal RoleWeight { get; }
- public decimal TotalWeight { get; }
- public decimal RolePer => Math.Round(TotalWeight == 0 ? 0 : RoleWeight * 100 / TotalWeight, 2);
- public static RoleModel ModelFrom(string roles)
- {
- var node = new RoleNode();
- var arr = roles.Split(':');
- node.RoleNo = arr[0];
- if (arr.Length > 1)
- {
- node.RoleName = arr[1];
- }
- if (arr.Length > 2)
- {
- node.SetWeight(int.TryParse(arr[2], out var w) ? w : 0);
- }
- if (arr.Length > 3)
- {
- node.SetTotalWeight(int.TryParse(arr[3], out var w) ? w : 0);
- }
- return new RoleModel(node.RoleNo,node.RoleName,node.RoleWeight,node.TotalWeight);
- }
- public override string ToString()
- {
- return new RoleNode(RoleNo, RoleName, RoleWeight, TotalWeight).ToString();
- }
- }
- }
|