PackageModel.cs 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using IwbZero.IwbBase;
  6. using IwbZero.ToolCommon.StringModel;
  7. using WeEngine;
  8. using WeEngine.Enum;
  9. using WeEngine.Packages;
  10. namespace WePlatform.WeLib.Package.Dto
  11. {
  12. public class ModelBase
  13. {
  14. public ModelBase()
  15. {
  16. Children = new List<ModelBase>();
  17. GuideInfos = new List<GuideModel>();
  18. }
  19. public PackageModel PackageModel { get; set; }
  20. public string Id { get; set; }
  21. public string No { get; set; }
  22. public string Name { get; set; }
  23. public string Path { get; set; }
  24. public string ParentPath { get; set; }
  25. //public string _guideNos;
  26. //public string GuideNos {
  27. // get
  28. // {
  29. // return _guideNos.IsEmpty()
  30. // ? string.Join(",", GuideInfos?.Select(a => a.Id) ?? new string[0])
  31. // : _guideNos;
  32. // }
  33. // set => _guideNos = value;
  34. //}
  35. //public string GuideNames => string.Join(",", GuideInfos?.Select(a => a.Name) ?? new string[0]);
  36. public List<GuideModel> GuideInfos { get; set; }
  37. public string SceneCategory { get; set; }
  38. public string SceneCategoryName { get; set; }
  39. public string PreComponent { get; set; }
  40. public string RunningComponent { get; set; }
  41. public string PostComponent { get; set; }
  42. public string VariableStr { get; set; }
  43. public decimal Weights { get; set; }
  44. public List<ModelBase> Children { get; set; }
  45. protected Hashtable GetVariable( )
  46. {
  47. var table= new Hashtable();
  48. if (VariableStr.IsNotEmpty())
  49. {
  50. var varArr = VariableStr.StrToArray();
  51. foreach (var v in varArr)
  52. {
  53. var variable = IwbRtVariable.Str2Variable(v);
  54. table[variable.VarName] = variable;
  55. }
  56. }
  57. return table;
  58. }
  59. /// <summary>
  60. /// 转换Node
  61. /// </summary>
  62. /// <param name="node">空Node</param>
  63. /// <returns></returns>
  64. internal virtual NodeBase NodeFrom(NodeBase node)
  65. {
  66. node.Id = Id;
  67. node.InternalNo = No;
  68. node.Name = Name;
  69. node.EventComponentNode = new ComponentNode()
  70. {
  71. PreComponent = PreComponent,
  72. RunningComponent = RunningComponent,
  73. PostComponent = PostComponent
  74. };
  75. node.GuideInfos = GuideInfos?.Select(a => a.NodeFrom()).ToList() ?? new List<GuideNode>();
  76. node.Variables = GetVariable();
  77. node.Children = new List<NodeBase>();
  78. return node;
  79. }
  80. /// <summary>
  81. /// 转换Model
  82. /// </summary>
  83. /// <param name="node"></param>
  84. /// <returns></returns>
  85. internal virtual void ModelFrom(NodeBase node)
  86. {
  87. Id = node.Id;
  88. No = node.InternalNo;
  89. Name = node.Name;
  90. Weights = node.Weights;
  91. Path = node.NodePath;
  92. ParentPath = node.Parent?.NodePath;
  93. VariableStr = Variable2Str(GetVariable());
  94. PreComponent = node.EventComponentNode?.PreComponent;
  95. RunningComponent = node.EventComponentNode?.RunningComponent;
  96. PostComponent = node.EventComponentNode?.PostComponent;
  97. GuideInfos = node.GuideInfos?.Select(a => new GuideModel().ModelFrom(a)).ToList() ?? new List<GuideModel>();
  98. }
  99. /// <summary>
  100. /// 变量转字符串
  101. /// </summary>
  102. /// <param name="variables"></param>
  103. /// <returns></returns>
  104. private string Variable2Str(Hashtable variables)
  105. {
  106. string str = "";
  107. if (variables != null && variables.Count > 0)
  108. {
  109. string vStr = "";
  110. foreach (DictionaryEntry entry in variables)
  111. {
  112. var v = (IwbRtVariable)entry.Value;
  113. vStr += (vStr == "" ? "" : ",") + IwbRtVariable.Variable2Str(v);
  114. }
  115. }
  116. return str;
  117. }
  118. }
  119. public class PackageModel: ModelBase
  120. {
  121. public PackageModel()
  122. {
  123. PackageModel = this;
  124. }
  125. public int RoundCount { get; set; }
  126. public string EngineType { get; set; }
  127. public string AssessRoles { get; set; }
  128. public string AssessRoleNos { get; set; }
  129. public bool AssessAuto { get; set; }
  130. public bool AutoNextRound { get; set; }
  131. public decimal RoundScore { get; set; }
  132. public List<ComponentModel> Components { get; set; }
  133. #region ALL MODEL INFO
  134. public List<RoundModel> AllRoundModels => Children.Select(a => (RoundModel) a).ToList();
  135. public List<BlockModel> AllBlockModels
  136. {
  137. get
  138. {
  139. var list = new List<BlockModel>();
  140. foreach (var model in AllRoundModels)
  141. {
  142. list.AddRange(model.AllBlockModels);
  143. }
  144. return list;
  145. }
  146. }
  147. public List<SceneFlowModel> AllFlowModels
  148. {
  149. get
  150. {
  151. var list = new List<SceneFlowModel>();
  152. foreach (var model in AllRoundModels)
  153. {
  154. list.AddRange(model.AllFlowModels);
  155. }
  156. return list;
  157. }
  158. }
  159. public List<FlowModel> AllFlowNodeModels
  160. {
  161. get
  162. {
  163. var list = new List<FlowModel>();
  164. foreach (var model in AllRoundModels)
  165. {
  166. list.AddRange(model.AllFlowNodeModels);
  167. }
  168. return list;
  169. }
  170. }
  171. public List<SceneModel> AllSceneModels
  172. {
  173. get
  174. {
  175. var list = new List<SceneModel>();
  176. foreach (var model in AllRoundModels)
  177. {
  178. list.AddRange(model.AllSceneModels);
  179. }
  180. return list;
  181. }
  182. }
  183. public List<BehaviorModel> AllBehaviorModels
  184. {
  185. get
  186. {
  187. var list = new List<BehaviorModel>();
  188. foreach (var model in AllRoundModels)
  189. {
  190. list.AddRange(model.AllBehaviorModels);
  191. }
  192. return list;
  193. }
  194. }
  195. public List<GuideModel> AllGuideModels
  196. {
  197. get
  198. {
  199. var list = new List<GuideModel>();
  200. foreach (var model in AllRoundModels)
  201. {
  202. list.AddRange(model.AllGuideModels);
  203. }
  204. return list;
  205. }
  206. }
  207. public List<EnvironResourceModel> AllEnvironResourceModels
  208. {
  209. get
  210. {
  211. var list = new List<EnvironResourceModel>();
  212. foreach (var model in AllRoundModels)
  213. {
  214. list.AddRange(model.AllEnvironResourceModels);
  215. }
  216. return list;
  217. }
  218. }
  219. #endregion
  220. public List<RoleModel> RoleInfos => PackageNodeFrom().AllRoleInfos
  221. .Select(a => new RoleModel(a.RoleNo, a.RoleName, a.RoleWeight, a.TotalWeight)).ToList();
  222. //public string AllRoleNames => RoleInfos?.Count > 0
  223. // ? string.Join(",", RoleInfos.Select(a => a.ToString()).ToArray())
  224. // : "";
  225. /// <summary>
  226. /// 构建方案包Node
  227. /// </summary>
  228. /// <param name="xmlInfo"></param>
  229. /// <returns></returns>
  230. public PackageNode BuildPackageNodeByXml(PackageXmlInfo xmlInfo)
  231. {
  232. var package = new PackageNode
  233. {
  234. AssessAuto = AssessAuto,
  235. AssessRoles = AssessRoles.Split(',').ToList(),
  236. EngineType = EngineType,
  237. AutoNextRound = AutoNextRound,
  238. RoundScore = RoundScore,
  239. Parent = null,
  240. QueryFlowXmlFunc = id => PackageHelper.GetSceneFlowXmlFromXml(xmlInfo.FlowXml, id),
  241. QuerySceneXmlFunc = id => PackageHelper.GetSceneXmlFromXml(xmlInfo.SceneXml, id),
  242. QueryBehaviorXmlFunc = id => PackageHelper.GetBehaviorXmlFromXml(xmlInfo.BehaviorXml , id),
  243. QueryGuidesXmlFunc = ids => PackageHelper.GetGuidesXmlFromXml(xmlInfo.GuideXml, string.Join( ",",ids)),
  244. QueryEnvironmentXmlFunc = id => PackageHelper.GetEnvironResourceXmlFromXml(xmlInfo.EnvironResourceXml, id),
  245. };
  246. var packageXmlNode = IwbXmlNode.ParseGenericXml(xmlInfo.PackageXml);
  247. package = (PackageNode)package.BuildNodeByXmlNode(packageXmlNode);
  248. return package;
  249. }
  250. /// <summary>
  251. /// 构建方案包Model
  252. /// </summary>
  253. /// <param name="xmlInfo"></param>
  254. /// <returns></returns>
  255. public PackageModel BuildPackageModelByXml(PackageXmlInfo xmlInfo)
  256. {
  257. var packageNode = BuildPackageNodeByXml(xmlInfo);
  258. var packageModel = new PackageModel();
  259. packageModel.ModelFrom(packageNode);
  260. return packageModel;
  261. }
  262. /// <summary>
  263. /// Model转换为Node
  264. /// </summary>
  265. /// <returns></returns>
  266. public PackageNode PackageNodeFrom()
  267. {
  268. var package = new PackageNode
  269. {
  270. AssessAuto = AssessAuto,
  271. AssessRoles = AssessRoles.Split(',').ToList(),
  272. EngineType = EngineType,
  273. AutoNextRound = AutoNextRound,
  274. RoundScore = RoundScore,
  275. Parent = null,
  276. };
  277. package = (PackageNode)NodeFrom(package);
  278. return package;
  279. }
  280. #region XML
  281. public PackageXmlDto PackageFillXml()
  282. {
  283. var packageNode = PackageNodeFrom();
  284. var dto = new PackageXmlDto
  285. {
  286. PackageXml = packageNode.ToXmlString(),
  287. FlowXml = packageNode.Flows2Xml(),
  288. SceneXml = packageNode.Scenes2Xml(),
  289. BehaviorXml = packageNode.Behaviors2Xml(),
  290. GuideXml = packageNode.Guide2Xml(),
  291. EnvironResourceXml = packageNode.EnvironmentRender2Xml(),
  292. ComponentXml = GetComponentXml(Components),
  293. AllRoles = RoleInfos?.Count > 0
  294. ? string.Join(",", RoleInfos.Select(a => a.ToString()).ToArray())
  295. : ""
  296. };
  297. return dto;
  298. }
  299. private string GetComponentXml(List<ComponentModel> models)
  300. {
  301. string str = "";
  302. foreach (var m in models)
  303. {
  304. str += m.ToXmlString() + "\r\n";
  305. }
  306. if (str.IsNotEmpty())
  307. {
  308. str = $"<ComponentInfos>{str}</ComponentInfos>";
  309. }
  310. return str;
  311. }
  312. #endregion
  313. /// <summary>
  314. /// 转换Node
  315. /// </summary>
  316. /// <param name="node">空Node</param>
  317. /// <returns></returns>
  318. internal override NodeBase NodeFrom(NodeBase node)
  319. {
  320. node = base.NodeFrom(node);
  321. node.Parent = null;
  322. if (Children?.Count > 0)
  323. {
  324. foreach (var child in Children)
  325. {
  326. var childNode = new SceneRoundNode(node);
  327. node.Children.Add(child.NodeFrom(childNode));
  328. }
  329. }
  330. return node;
  331. }
  332. /// <summary>
  333. /// 转换为Model
  334. /// </summary>
  335. /// <param name="node"></param>
  336. /// <returns></returns>
  337. internal override void ModelFrom(NodeBase node)
  338. {
  339. base.ModelFrom(node);
  340. var node2 = (PackageNode) node;
  341. AssessAuto = node2.AssessAuto;
  342. AssessRoles = string.Join(",", node2.AssessRoles);
  343. EngineType = node2.EngineType;
  344. AutoNextRound = node2.AutoNextRound;
  345. RoundScore = node2.RoundScore;
  346. if (node.HasChild)
  347. {
  348. foreach (var child in node.Children)
  349. {
  350. var modal = new RoundModel() { PackageModel = PackageModel };
  351. modal.ModelFrom(child);
  352. Children.Add(modal);
  353. }
  354. }
  355. }
  356. }
  357. public class RoundModel: ModelBase
  358. {
  359. public int RoundIndex { get; set; }
  360. public int BlockIndex { get; set; }
  361. public decimal RoundFullScore { get; set; }
  362. public int ControlRate { get; set; }
  363. public int SceneCount { get; set; }
  364. #region ALL MODEL INFO
  365. public List<BlockModel> AllBlockModels => Children.Select(a => (BlockModel)a).ToList();
  366. public List<SceneFlowModel> AllFlowModels
  367. {
  368. get
  369. {
  370. var list = new List<SceneFlowModel>();
  371. foreach (var model in AllBlockModels)
  372. {
  373. list.AddRange(model.AllFlowModels);
  374. }
  375. return list;
  376. }
  377. }
  378. public List<FlowModel> AllFlowNodeModels
  379. {
  380. get
  381. {
  382. var list = new List<FlowModel>();
  383. foreach (var model in AllBlockModels)
  384. {
  385. list.AddRange(model.AllFlowNodeModels);
  386. }
  387. return list;
  388. }
  389. }
  390. public List<SceneModel> AllSceneModels
  391. {
  392. get
  393. {
  394. var list = new List<SceneModel>();
  395. foreach (var model in AllBlockModels)
  396. {
  397. list.AddRange(model.AllSceneModels);
  398. }
  399. return list;
  400. }
  401. }
  402. public List<BehaviorModel> AllBehaviorModels
  403. {
  404. get
  405. {
  406. var list = new List<BehaviorModel>();
  407. foreach (var model in AllBlockModels)
  408. {
  409. list.AddRange(model.AllBehaviorModels);
  410. }
  411. return list;
  412. }
  413. }
  414. public List<GuideModel> AllGuideModels
  415. {
  416. get
  417. {
  418. var list = new List<GuideModel>();
  419. foreach (var model in AllBlockModels)
  420. {
  421. list.AddRange(model.AllGuideModels);
  422. }
  423. return list;
  424. }
  425. }
  426. public List<EnvironResourceModel> AllEnvironResourceModels
  427. {
  428. get
  429. {
  430. var list = new List<EnvironResourceModel>();
  431. foreach (var model in AllBlockModels)
  432. {
  433. list.AddRange(model.AllEnvironResourceModels);
  434. }
  435. return list;
  436. }
  437. }
  438. #endregion
  439. /// <summary>
  440. /// 转换Node
  441. /// </summary>
  442. /// <param name="node">空Node</param>
  443. /// <returns></returns>
  444. internal override NodeBase NodeFrom(NodeBase node)
  445. {
  446. var newNode =(SceneRoundNode) base.NodeFrom(node);
  447. newNode.RoundIndex = RoundIndex;
  448. newNode.RoundFullScore = RoundFullScore;
  449. newNode.ControlRate = ControlRate;
  450. newNode.SceneCount = SceneCount;
  451. if (Children?.Count > 0)
  452. {
  453. foreach (var child in Children)
  454. {
  455. var childNode = new SceneFlowBlockNode(newNode);
  456. newNode.Children.Add(child.NodeFrom(childNode));
  457. }
  458. }
  459. return newNode;
  460. }
  461. /// <summary>
  462. /// 转换Model
  463. /// </summary>
  464. /// <param name="node"></param>
  465. /// <returns></returns>
  466. internal override void ModelFrom(NodeBase node)
  467. {
  468. base.ModelFrom(node);
  469. var node2 = (SceneRoundNode)node;
  470. RoundIndex = node2.RoundIndex;
  471. RoundFullScore = node2.RoundFullScore;
  472. ControlRate = node2.ControlRate;
  473. SceneCount = node2.SceneCount;
  474. if (node.HasChild)
  475. {
  476. Children = new List<ModelBase>();
  477. foreach (var child in node.Children)
  478. {
  479. var modal = new BlockModel() { PackageModel = PackageModel };
  480. modal.ModelFrom(child);
  481. Children.Add(modal);
  482. }
  483. }
  484. }
  485. }
  486. public class BlockModel: ModelBase
  487. {
  488. public int BlockType { get; set; }
  489. public string FlowNos { get; set; }
  490. public string FlowNames { get; set; }
  491. #region ALL MODEL INFO
  492. public List<SceneFlowModel> AllFlowModels => Children.Select(a => (SceneFlowModel)a).ToList();
  493. public List<FlowModel> AllFlowNodeModels
  494. {
  495. get
  496. {
  497. var list = new List<FlowModel>();
  498. foreach (var model in AllFlowModels)
  499. {
  500. list.AddRange(model.AllFlowNodeModels);
  501. }
  502. return list;
  503. }
  504. }
  505. public List<SceneModel> AllSceneModels
  506. {
  507. get
  508. {
  509. var list = new List<SceneModel>();
  510. foreach (var model in AllFlowModels)
  511. {
  512. list.AddRange(model.AllSceneModels);
  513. }
  514. return list;
  515. }
  516. }
  517. public List<BehaviorModel> AllBehaviorModels
  518. {
  519. get
  520. {
  521. var list = new List<BehaviorModel>();
  522. foreach (var model in AllFlowModels)
  523. {
  524. list.AddRange(model.AllBehaviorModels);
  525. }
  526. return list;
  527. }
  528. }
  529. public List<GuideModel> AllGuideModels
  530. {
  531. get
  532. {
  533. var list = new List<GuideModel>();
  534. foreach (var model in AllFlowModels)
  535. {
  536. list.AddRange(model.AllGuideModels);
  537. }
  538. return list;
  539. }
  540. }
  541. public List<EnvironResourceModel> AllEnvironResourceModels
  542. {
  543. get
  544. {
  545. var list = new List<EnvironResourceModel>();
  546. foreach (var model in AllFlowModels)
  547. {
  548. list.AddRange(model.AllEnvironResourceModels);
  549. }
  550. return list;
  551. }
  552. }
  553. #endregion
  554. /// <summary>
  555. /// 转换Node
  556. /// </summary>
  557. /// <param name="node">空Node</param>
  558. /// <returns></returns>
  559. internal override NodeBase NodeFrom(NodeBase node)
  560. {
  561. var newNode = (SceneFlowBlockNode)base.NodeFrom(node);
  562. newNode.BlockType = (SceneFlowBlockType) BlockType;
  563. if (Children?.Count > 0)
  564. {
  565. foreach (var child in Children)
  566. {
  567. var childNode = new SceneFlowNode(newNode);
  568. newNode.Children.Add(child.NodeFrom(childNode));
  569. }
  570. }
  571. return newNode;
  572. }
  573. /// <summary>
  574. /// 转换为Model
  575. /// </summary>
  576. /// <param name="node"></param>
  577. /// <returns></returns>
  578. internal override void ModelFrom(NodeBase node)
  579. {
  580. base.ModelFrom(node);
  581. var node2 = (SceneFlowBlockNode)node;
  582. BlockType = (int)node2.BlockType;
  583. if (node.HasChild)
  584. {
  585. foreach (var child in node.Children)
  586. {
  587. var modal = new RoundModel() { PackageModel = PackageModel };
  588. modal.ModelFrom(child);
  589. Children.Add(modal);
  590. }
  591. }
  592. }
  593. }
  594. public class SceneFlowModel : ModelBase
  595. {
  596. public FlowModel ContentInfo { get; set; }
  597. #region ALL MODEL INFO
  598. public List<FlowModel> AllFlowNodeModels => Children.Select(a => (FlowModel)a).ToList();
  599. public List<SceneModel> AllSceneModels
  600. {
  601. get
  602. {
  603. var list = new List<SceneModel>();
  604. foreach (var model in AllFlowNodeModels)
  605. {
  606. list.AddRange(model.AllSceneModels);
  607. }
  608. return list;
  609. }
  610. }
  611. public List<BehaviorModel> AllBehaviorModels
  612. {
  613. get
  614. {
  615. var list = new List<BehaviorModel>();
  616. foreach (var model in AllFlowNodeModels)
  617. {
  618. list.AddRange(model.AllBehaviorModels);
  619. }
  620. return list;
  621. }
  622. }
  623. public List<GuideModel> AllGuideModels
  624. {
  625. get
  626. {
  627. var list = new List<GuideModel>();
  628. foreach (var model in AllFlowNodeModels)
  629. {
  630. list.AddRange(model.AllGuideModels);
  631. }
  632. return list;
  633. }
  634. }
  635. public List<EnvironResourceModel> AllEnvironResourceModels
  636. {
  637. get
  638. {
  639. var list = new List<EnvironResourceModel>();
  640. foreach (var model in AllFlowNodeModels)
  641. {
  642. list.AddRange(model.AllEnvironResourceModels);
  643. }
  644. return list;
  645. }
  646. }
  647. #endregion
  648. /// <summary>
  649. /// 转换Node
  650. /// </summary>
  651. /// <param name="node">空Node</param>
  652. /// <returns></returns>
  653. internal override NodeBase NodeFrom(NodeBase node)
  654. {
  655. var newNode = (SceneFlowNode)base.NodeFrom(node);
  656. if (Children?.Count > 0)
  657. {
  658. foreach (var child in Children)
  659. {
  660. var childNode = new FlowNode(newNode);
  661. newNode.Children.Add(child.NodeFrom(childNode));
  662. }
  663. }
  664. return newNode;
  665. }
  666. /// <summary>
  667. /// 转换为Model
  668. /// </summary>
  669. /// <param name="node"></param>
  670. /// <returns></returns>
  671. internal override void ModelFrom(NodeBase node)
  672. {
  673. base.ModelFrom(node);
  674. if (node.HasChild)
  675. {
  676. foreach (var child in node.Children)
  677. {
  678. var modal = new FlowModel() { PackageModel = PackageModel };
  679. modal.ModelFrom(child);
  680. Children.Add(modal);
  681. }
  682. }
  683. }
  684. }
  685. public class FlowModel: ModelBase
  686. {
  687. public int Index { get; set; }
  688. public int FlowDepth { get; set; }
  689. public string SceneNos => string.Join(",", SceneInfos?.Select(a => a.Id) ?? new string[0]);
  690. public string SceneNames => string.Join(",", SceneInfos?.Select(a => a.Name) ?? new string[0]);
  691. public List<SceneModel> SceneInfos { get; set; }
  692. #region ALL MODEL INFO
  693. public List<FlowModel> AllFlowNodeModels => GetFlowModels(this);
  694. public List<SceneModel> AllSceneModels
  695. {
  696. get
  697. {
  698. var list = new List<SceneModel>();
  699. foreach (var model in AllFlowNodeModels)
  700. {
  701. list.AddRange(model.AllSceneModels);
  702. }
  703. return list;
  704. }
  705. }
  706. public List<BehaviorModel> AllBehaviorModels
  707. {
  708. get
  709. {
  710. var list = new List<BehaviorModel>();
  711. foreach (var model in AllFlowNodeModels)
  712. {
  713. list.AddRange(model.AllBehaviorModels);
  714. }
  715. return list;
  716. }
  717. }
  718. public List<GuideModel> AllGuideModels
  719. {
  720. get
  721. {
  722. var list = new List<GuideModel>();
  723. foreach (var model in AllFlowNodeModels)
  724. {
  725. list.AddRange(model.AllGuideModels);
  726. }
  727. return list;
  728. }
  729. }
  730. public List<EnvironResourceModel> AllEnvironResourceModels
  731. {
  732. get
  733. {
  734. var list = new List<EnvironResourceModel>();
  735. foreach (var model in AllFlowNodeModels)
  736. {
  737. list.AddRange(model.AllEnvironResourceModels);
  738. }
  739. return list;
  740. }
  741. }
  742. #endregion
  743. /// <summary>
  744. /// 转换Node
  745. /// </summary>
  746. /// <param name="node">空Node</param>
  747. /// <returns></returns>
  748. internal override NodeBase NodeFrom(NodeBase node)
  749. {
  750. var newNode = (FlowNode)base.NodeFrom(node);
  751. if (Children?.Count > 0)
  752. {
  753. foreach (var child in Children)
  754. {
  755. var childNode = new FlowNode(newNode);
  756. newNode.Children.Add(child.NodeFrom(childNode));
  757. }
  758. }
  759. if (SceneInfos?.Count > 0)
  760. {
  761. foreach (var sceneInfo in SceneInfos)
  762. {
  763. var sceneNode = new SceneNode(newNode);
  764. newNode.SceneInfos.Add((SceneNode)sceneInfo.NodeFrom(sceneNode));
  765. }
  766. }
  767. return newNode;
  768. }
  769. /// <summary>
  770. /// 转换Model
  771. /// </summary>
  772. /// <param name="node"></param>
  773. /// <returns></returns>
  774. internal override void ModelFrom(NodeBase node)
  775. {
  776. base.ModelFrom(node);
  777. var node2 = (FlowNode)node;
  778. if (node.HasChild)
  779. {
  780. Children = new List<ModelBase>();
  781. foreach (var child in node.Children)
  782. {
  783. var modal = new FlowModel() { PackageModel = PackageModel };
  784. modal.ModelFrom(child);
  785. Children.Add(modal);
  786. }
  787. }
  788. if (node2.SceneInfos?.Count > 0)
  789. {
  790. SceneInfos = new List<SceneModel>();
  791. foreach (var child in node2.SceneInfos)
  792. {
  793. var modal = new SceneModel() { PackageModel = PackageModel };
  794. modal.ModelFrom(child);
  795. Children.Add(modal);
  796. }
  797. }
  798. }
  799. private List<FlowModel> GetFlowModels(FlowModel model)
  800. {
  801. var list = new List<FlowModel>(){model};
  802. if (model.Children?.Count > 0)
  803. {
  804. foreach (var child in model.Children)
  805. {
  806. list.AddRange(GetFlowModels((FlowModel)child));
  807. }
  808. }
  809. return list;
  810. }
  811. }
  812. public class SceneModel: ModelBase
  813. {
  814. public SceneModel()
  815. {
  816. EnvironResources = new List<EnvironResourceModel>();
  817. }
  818. public int SceneType { get; set; }
  819. public string SceneTag { get; set; }
  820. public string Description { get; set; }
  821. public string BehaviorNos { get; set; }
  822. //public string EnvironResourceNos { get; set; }
  823. public List<EnvironResourceModel> EnvironResources { get; set; }
  824. #region ALL MODEL INFO
  825. public List<BehaviorModel> AllBehaviorModels => Children.Select(a => (BehaviorModel) a).ToList();
  826. public List<GuideModel> AllGuideModels
  827. {
  828. get
  829. {
  830. var list = new List<GuideModel>();
  831. foreach (var model in AllBehaviorModels)
  832. {
  833. list.AddRange(model.AllGuideModels);
  834. }
  835. return list;
  836. }
  837. }
  838. public List<EnvironResourceModel> AllEnvironResourceModels
  839. {
  840. get
  841. {
  842. var list = new List<EnvironResourceModel>();
  843. foreach (var model in AllBehaviorModels)
  844. {
  845. list.AddRange(model.AllEnvironResourceModels);
  846. }
  847. return list;
  848. }
  849. }
  850. #endregion
  851. /// <summary>
  852. /// 转换Node
  853. /// </summary>
  854. /// <param name="node">空Node</param>
  855. /// <returns></returns>
  856. internal override NodeBase NodeFrom(NodeBase node)
  857. {
  858. var newNode = (SceneNode)base.NodeFrom(node);
  859. newNode.SceneTag = SceneTag;
  860. newNode.Description = Description;
  861. newNode.EnvironResources = EnvironResources?.Select(a => a.NodeFrom()).ToList() ?? new List<EnvironResourceNode>();
  862. if (Children?.Count > 0)
  863. {
  864. foreach (var child in Children)
  865. {
  866. var childNode = new BehaviorNode(newNode);
  867. newNode.Children.Add(child.NodeFrom(childNode));
  868. }
  869. }
  870. return newNode;
  871. }
  872. /// <summary>
  873. /// 转换为Model
  874. /// </summary>
  875. /// <param name="node"></param>
  876. /// <returns></returns>
  877. internal override void ModelFrom(NodeBase node)
  878. {
  879. base.ModelFrom(node);
  880. var node2 = (SceneNode)node;
  881. SceneTag = node2.SceneTag;
  882. Description = node2.Description;
  883. EnvironResources = node2.EnvironResources?.Select(a => new EnvironResourceModel().ModelFrom(a)).ToList() ??
  884. new List<EnvironResourceModel>();
  885. if (node.HasChild)
  886. {
  887. foreach (var child in node.Children)
  888. {
  889. var modal = new BehaviorModel() { PackageModel = PackageModel };
  890. modal.ModelFrom(child);
  891. Children.Add(modal);
  892. }
  893. }
  894. }
  895. }
  896. public class BehaviorModel: ModelBase
  897. {
  898. public BehaviorModel()
  899. {
  900. EnvironResources = new List<EnvironResourceModel>();
  901. }
  902. public string BehaviorTag { get; set; }
  903. public string Description { get; set; }
  904. public int BehaviorScoreType { get; set; }
  905. public int RoleLogicType { get; set; }
  906. public List<RoleModel> BehaviorRoles { get; set; }
  907. //public string RoleNames { get; set; }
  908. public string RuleKeyword { get; set; }
  909. //public string EnvironResourceNos { get; set; }
  910. public string KnowledgeNos { get; set; }
  911. public List<EnvironResourceModel> EnvironResources { get; set; }
  912. #region ALL MODEL INFO
  913. public List<GuideModel> AllGuideModels => GuideInfos ?? new List<GuideModel>();
  914. public List<EnvironResourceModel> AllEnvironResourceModels =>
  915. EnvironResources ?? new List<EnvironResourceModel>();
  916. #endregion
  917. /// <summary>
  918. /// 转换Node
  919. /// </summary>
  920. /// <param name="node">空Node</param>
  921. /// <returns></returns>
  922. internal override NodeBase NodeFrom(NodeBase node)
  923. {
  924. var newNode = (BehaviorNode)base.NodeFrom(node);
  925. newNode.BehaviorTag = BehaviorTag;
  926. newNode.BehaviorRoleLogic = (BehaviorRoleLogicType) RoleLogicType;
  927. newNode.BehaviorRoles = BehaviorRoles?.Count > 0
  928. ? BehaviorRoles.Select(a => new RoleNode(a.RoleNo, a.RoleName)).ToList()
  929. : new List<RoleNode>();
  930. newNode.EnvironResources = new List<EnvironResourceNode>();
  931. newNode.Description = Description;
  932. newNode.BuildKeywordNodes(RuleKeyword);
  933. newNode.EnvironResources = EnvironResources?.Select(a => a.NodeFrom()).ToList() ?? new List<EnvironResourceNode>();
  934. return newNode;
  935. }
  936. /// <summary>
  937. /// 转换为Model
  938. /// </summary>
  939. /// <param name="node"></param>
  940. /// <returns></returns>
  941. internal override void ModelFrom(NodeBase node)
  942. {
  943. base.ModelFrom(node);
  944. var node2 = (BehaviorNode)node;
  945. BehaviorTag = node2.BehaviorTag;
  946. RoleLogicType = (int) node2.BehaviorRoleLogic;
  947. BehaviorRoles = node2.BehaviorRoles?.Count > 0
  948. ? node2.BehaviorRoles.Select(a => new RoleModel(a.RoleNo, a.RoleName,a.RoleWeight,a.TotalWeight)).ToList()
  949. : new List<RoleModel>();
  950. Description = node2.Description;
  951. RuleKeyword = node2.Keywords;
  952. EnvironResources = node2.EnvironResources?.Select(a => new EnvironResourceModel().ModelFrom(a)).ToList() ??
  953. new List<EnvironResourceModel>();
  954. if (node.HasChild)
  955. {
  956. foreach (var child in node.Children)
  957. {
  958. var modal = new BehaviorModel() { PackageModel = PackageModel };
  959. modal.ModelFrom(child);
  960. Children.Add(modal);
  961. }
  962. }
  963. }
  964. }
  965. public class GuideModel
  966. {
  967. public string Id { get; set; }
  968. /// <summary>
  969. /// 提示名称
  970. /// </summary>
  971. public string Name { get; set; }
  972. /// <summary>
  973. /// 提示详情
  974. /// </summary>
  975. public string Description { get; set; }
  976. /// <summary>
  977. /// 提示类型
  978. /// </summary>
  979. public int GuideType { get; set; }
  980. public GuideNode NodeFrom()
  981. {
  982. var node = new GuideNode
  983. {
  984. Id = Id,
  985. Name = Name,
  986. GuideType = GuideType,
  987. Description = Description,
  988. };
  989. return node;
  990. }
  991. public GuideModel ModelFrom(GuideNode node)
  992. {
  993. if (node == null)
  994. {
  995. return null;
  996. }
  997. Id = node.Id;
  998. Name = node.Name;
  999. GuideType = node.GuideType;
  1000. Description = node.Description;
  1001. return this;
  1002. }
  1003. }
  1004. public class EnvironResourceModel
  1005. {
  1006. public string Id { get; set; }
  1007. /// <summary>
  1008. /// 资源名称
  1009. /// </summary>
  1010. public string ResourceName { get; set; }
  1011. /// <summary>
  1012. /// 资源类型
  1013. /// </summary>
  1014. public int ResourceType { get; set; }
  1015. /// <summary>
  1016. /// 资源路径
  1017. /// </summary>
  1018. public string ResourcePath { get; set; }
  1019. /// <summary>
  1020. /// 资源描述
  1021. /// </summary>
  1022. public string Description { get; set; }
  1023. public string MessageCode { get; set; }
  1024. public EnvironResourceNode NodeFrom()
  1025. {
  1026. var node = new EnvironResourceNode
  1027. {
  1028. Id = Id,
  1029. ResourceName = ResourceName,
  1030. ResourceType = ResourceType,
  1031. ResourcePath =ResourcePath,
  1032. Description = Description,
  1033. MessageCode = MessageCode
  1034. };
  1035. return node;
  1036. }
  1037. public EnvironResourceModel ModelFrom(EnvironResourceNode node)
  1038. {
  1039. if (node == null)
  1040. {
  1041. return null;
  1042. }
  1043. Id = node.Id;
  1044. ResourceName = node.ResourceName;
  1045. ResourceType = node.ResourceType;
  1046. ResourcePath = node.ResourcePath;
  1047. MessageCode = node.MessageCode;
  1048. Description = node.Description;
  1049. return this;
  1050. }
  1051. }
  1052. public class ComponentModel
  1053. {
  1054. public string Id { get; set; }
  1055. public string No { get; set; }
  1056. public string Name { get; set; }
  1057. public List<ComponentDataModel> Data { get; set; }
  1058. public string ToXmlString()
  1059. {
  1060. var str = "";
  1061. str += $"<ComponentInfo id=\"{Id}\">";
  1062. str += $"<Id>{Id}</Id>\r\n";
  1063. str += $"<Name>{Name}</Name>\r\n";
  1064. var str1 = "";
  1065. foreach (var cd in Data)
  1066. {
  1067. str1 += cd.ToXmlString();
  1068. }
  1069. str += str1.IsEmpty() ?"":$"<ComponentScript>{str1}</ComponentScript>\r\n" ;
  1070. str += "</ComponentInfo>";
  1071. return str;
  1072. }
  1073. public ComponentModel ModelFrom(IwbXmlNode xmlNode)
  1074. {
  1075. if (xmlNode == null)
  1076. {
  1077. return null;
  1078. }
  1079. Data=new List<ComponentDataModel>();
  1080. Id = xmlNode.GetChildValue("Id");
  1081. No = xmlNode.GetChildValue("No");
  1082. Name = xmlNode.GetChildValue("Name");
  1083. var scriptNodes= xmlNode.GetChildNode("ComponentScript")?.Nodes;
  1084. if (scriptNodes?.Count > 0)
  1085. {
  1086. foreach (IwbXmlNode scriptNode in scriptNodes)
  1087. {
  1088. var data= new ComponentDataModel().ModelFrom(scriptNode);
  1089. Data.Add(data);
  1090. }
  1091. }
  1092. return this;
  1093. }
  1094. public List<ComponentModel> CreateByXml(string xml)
  1095. {
  1096. var node = IwbXmlNode.ParseGenericXml(xml);
  1097. return CreateByXml(node);
  1098. }
  1099. public List<ComponentModel> CreateByXml(IwbXmlNode xmlNode)
  1100. {
  1101. var models = new List<ComponentModel>();
  1102. var nodes = xmlNode?.Nodes;
  1103. if (nodes?.Count > 0)
  1104. {
  1105. foreach (IwbXmlNode node in nodes)
  1106. {
  1107. var model = new ComponentModel().ModelFrom(node);
  1108. if (model != null) models.Add(model);
  1109. }
  1110. }
  1111. return models;
  1112. }
  1113. }
  1114. public class ComponentDataModel
  1115. {
  1116. public string Id { get; set; }
  1117. public string No { get; set; }
  1118. public string Name { get; set; }
  1119. public string Path { get; set; }
  1120. public string ParentPath { get; set; }
  1121. public string CompType { get; set; }
  1122. public VariableModel Variable { get; set; }
  1123. public string Condition { get; set; }
  1124. public List<ComponentDataModel> Yes { get; set; }
  1125. public List<ComponentDataModel> Not { get; set; }
  1126. public string WaitNodes { get; set; }
  1127. public string Message { get; set; }
  1128. public string ToXmlString()
  1129. {
  1130. string str = "", str1 = "";
  1131. str += $"<{CompType} id=\"{Id}\">";
  1132. if (Variable != null)
  1133. {
  1134. str1 += Variable.ToXmlString();
  1135. str += str1.IsEmpty() ? "" : $"<Variable>{str1}</Variable>\r\n";
  1136. }
  1137. str += CompType.IsEmpty() ? "" : $"<CompType>{CompType}</CompType>\r\n";
  1138. str += Name.IsEmpty() ? "" : $"<Name>{Name}</Name>\r\n";
  1139. str += Path.IsEmpty() ? "" : $"<Name>{Path}</Name>\r\n";
  1140. str += ParentPath.IsEmpty() ? "" : $"<Name>{ParentPath}</Name>\r\n";
  1141. str += Condition.IsEmpty() ? "" : $"<Condition>{Condition.FormatCode2Xml()}</Condition>\r\n";
  1142. str += WaitNodes.IsEmpty() ? "" : $"<WaitNodes>{WaitNodes}</WaitNodes>\r\n";
  1143. str += Message.IsEmpty() ? "" : $"<Message>{Message}</Message>\r\n";
  1144. str1 = "";
  1145. if (Yes != null)
  1146. {
  1147. foreach (var cd in Yes)
  1148. {
  1149. str1 += cd.ToXmlString();
  1150. }
  1151. }
  1152. str += str1.IsEmpty() ? "" : $"<Yes>{str1}</Yes>\r\n";
  1153. str1 = "";
  1154. if (Not != null)
  1155. {
  1156. foreach (var cd in Not)
  1157. {
  1158. str1 += cd.ToXmlString();
  1159. }
  1160. }
  1161. str += str1.IsEmpty() ? "" : $"<No>{str1}</No>\r\n";
  1162. str += $"</{CompType}>";
  1163. return str;
  1164. }
  1165. public ComponentDataModel ModelFrom(IwbXmlNode xmlNode)
  1166. {
  1167. if (xmlNode == null)
  1168. return null;
  1169. Id = xmlNode.GetChildValue("Id");
  1170. No = xmlNode.GetChildValue("No");
  1171. Name = xmlNode.GetChildValue("Name");
  1172. CompType = xmlNode.GetChildValue("CompType");
  1173. Path = xmlNode.GetChildValue("Path");
  1174. ParentPath = xmlNode.GetChildValue("ParentPath");
  1175. Condition = xmlNode.GetChildValue("Condition");
  1176. WaitNodes = xmlNode.GetChildValue("WaitNodes");
  1177. Message = xmlNode.GetChildValue("Message");
  1178. var variableNodes = xmlNode.GetChildNode("Variable")?.Nodes;
  1179. if (variableNodes?.Count > 0)
  1180. {
  1181. Variable= new VariableModel();
  1182. foreach (IwbXmlNode v in variableNodes)
  1183. {
  1184. Variable.Name = v.GetChildValue("Name");
  1185. Variable.Type = v.GetChildValue("Type");
  1186. Variable.Value = v.GetChildValue("Value");
  1187. Variable.TargetPath = v.GetChildValue("TargetPath");
  1188. Variable.TargetName = v.GetChildValue("TargetName");
  1189. }
  1190. }
  1191. Yes= new List<ComponentDataModel>();
  1192. Not =new List<ComponentDataModel>();
  1193. var yesNodes = xmlNode.GetChildNode("Yes")?.Nodes;
  1194. if (yesNodes?.Count > 0)
  1195. {
  1196. foreach (IwbXmlNode y in yesNodes)
  1197. {
  1198. var yes = new ComponentDataModel().ModelFrom(y);
  1199. if (yes != null) Yes.Add(yes);
  1200. }
  1201. }
  1202. var noNodes = xmlNode.GetChildNode("Not")?.Nodes;
  1203. if (noNodes?.Count > 0)
  1204. {
  1205. foreach (IwbXmlNode n in noNodes)
  1206. {
  1207. var not = new ComponentDataModel().ModelFrom(n);
  1208. if (not != null) Not.Add(not);
  1209. }
  1210. }
  1211. return this;
  1212. }
  1213. }
  1214. public class VariableModel
  1215. {
  1216. public VariableModel()
  1217. {
  1218. }
  1219. public VariableModel(string str)
  1220. {
  1221. var arr = str.StrToArray(":");
  1222. Name = "";
  1223. Type = "STRING";
  1224. Value = "";
  1225. if (arr.Length > 0)
  1226. {
  1227. Name = arr[0].Substring(2);
  1228. }
  1229. if (arr.Length > 1)
  1230. {
  1231. TargetPath = arr[1];
  1232. }
  1233. if (arr.Length > 2)
  1234. {
  1235. Value = arr[2];
  1236. }
  1237. }
  1238. public string Name { get; set; }
  1239. public string Type { get; set; }
  1240. public string Value { get; set; }
  1241. public string TargetPath { get; set; }
  1242. public string TargetName { get; set; }
  1243. public string ToXmlString()
  1244. {
  1245. string str = "";
  1246. str += Name.IsEmpty() ? "" : $"<Name>{Name}</Name>\r\n";
  1247. str += Type.IsEmpty() ? "" : $"<Type>{Type}</Type>\r\n";
  1248. str += Value.IsEmpty() ? "" : $"<Value>{Value}</Value>\r\n";
  1249. str += TargetPath.IsEmpty() ? "" : $"<TargetPath>{TargetPath}</TargetPath>\r\n";
  1250. str += TargetName.IsEmpty() ? "" : $"<TargetName>{TargetName}</TargetName>\r\n";
  1251. return str;
  1252. }
  1253. }
  1254. public class RoleModel
  1255. {
  1256. public RoleModel()
  1257. {
  1258. }
  1259. public RoleModel(string roleNo, string roleName)
  1260. {
  1261. RoleNo = roleNo;
  1262. RoleName = roleName;
  1263. RoleWeight = 1;
  1264. TotalWeight = 1;
  1265. }
  1266. public RoleModel(string roleNo, string roleName, decimal roleWeight, decimal totalWeight)
  1267. {
  1268. RoleNo = roleNo;
  1269. RoleName = roleName;
  1270. RoleWeight = roleWeight;
  1271. TotalWeight = totalWeight;
  1272. }
  1273. public string RoleNo { get; set; }
  1274. public string RoleName { get; set; }
  1275. public decimal RoleWeight { get; }
  1276. public decimal TotalWeight { get; }
  1277. public decimal RolePer => Math.Round(TotalWeight == 0 ? 0 : RoleWeight * 100 / TotalWeight, 2);
  1278. public static RoleModel ModelFrom(string roles)
  1279. {
  1280. var node = new RoleNode();
  1281. var arr = roles.Split(':');
  1282. node.RoleNo = arr[0];
  1283. if (arr.Length > 1)
  1284. {
  1285. node.RoleName = arr[1];
  1286. }
  1287. if (arr.Length > 2)
  1288. {
  1289. node.SetWeight(int.TryParse(arr[2], out var w) ? w : 0);
  1290. }
  1291. if (arr.Length > 3)
  1292. {
  1293. node.SetTotalWeight(int.TryParse(arr[3], out var w) ? w : 0);
  1294. }
  1295. return new RoleModel(node.RoleNo,node.RoleName,node.RoleWeight,node.TotalWeight);
  1296. }
  1297. public override string ToString()
  1298. {
  1299. return new RoleNode(RoleNo, RoleName, RoleWeight, TotalWeight).ToString();
  1300. }
  1301. }
  1302. }