CacheMangerEx.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. using System.Collections.Generic;
  2. using System.Data.Entity;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Abp.Domain.Repositories;
  6. using Abp.Runtime.Caching;
  7. using IwbZero.ToolCommon;
  8. using IwbZero.ToolCommon.StringModel;
  9. using WeEngine.CommonDto;
  10. using WeEngine.CommonDto.WeInfo;
  11. using WeEngine.Packages;
  12. using WeOnlineApp.BaseInfo;
  13. using WeOnlineApp.TrainingCamp;
  14. namespace WeOnlineApp.Configuration.Cache
  15. {
  16. public static class CacheMangerEx
  17. {
  18. public static bool HasLoadPackageCache;
  19. public static async Task LoadPackageInfos(this ICacheManager CacheManager, string urlPrev)
  20. {
  21. if (HasLoadPackageCache)
  22. {
  23. HasLoadPackageCache = false;
  24. var list = GetPackageInfos(CacheManager, urlPrev);
  25. foreach (var p in list)
  26. {
  27. await Task.Run(() => GetPackageInfo(CacheManager, p.Id, urlPrev));
  28. await Task.Run(() => GetPackageDetail(CacheManager, p.Id, urlPrev));
  29. await Task.Run(() => GetPackageXmlInfos(CacheManager, p.Id, urlPrev));
  30. await Task.Run(() => GetPackageNode(CacheManager, p.Id, urlPrev));
  31. await Task.Run(() => GetPackageDataNode(CacheManager, p.Id, urlPrev));
  32. }
  33. }
  34. }
  35. /// <summary>
  36. /// 方案包详情
  37. /// </summary>
  38. /// <param name="CacheManager"></param>
  39. /// <param name="no"></param>
  40. /// <param name="urlPrev"></param>
  41. /// <returns></returns>
  42. public static WePackageDetailDto GetPackageDetail(this ICacheManager CacheManager, string no, string urlPrev)
  43. {
  44. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"PD{no}", () =>
  45. {
  46. var url = $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageDetail?no={no}";
  47. var result = url.RequestPost("");
  48. var dto = result.Str2Obj<WePackageDetailDto>();
  49. return dto;
  50. });
  51. }
  52. /// <summary>
  53. /// 培训营方案包详情
  54. /// </summary>
  55. /// <param name="CacheManager"></param>
  56. /// <param name="no"></param>
  57. /// <param name="urlPrev"></param>
  58. /// <param name="rep"></param>
  59. /// <returns></returns>
  60. public static async Task<WePackageDetailDto> GetCampPackageDetail(this ICacheManager CacheManager, string no, string urlPrev, IRepository<CampInfo, string> rep)
  61. {
  62. return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync($"CPD{no}", async () =>
  63. {
  64. var camp = await rep.FirstOrDefaultAsync(a => a.Id == no);
  65. if (camp == null)
  66. {
  67. return null;
  68. }
  69. var dto = GetPackageDetail(CacheManager, camp.PackageNo, urlPrev);
  70. return dto;
  71. });
  72. }
  73. /// <summary>
  74. /// 方案包信息
  75. /// </summary>
  76. /// <param name="CacheManager"></param>
  77. /// <param name="no"></param>
  78. /// <param name="urlPrev"></param>
  79. /// <returns></returns>
  80. public static WePackageDto GetPackageInfo(this ICacheManager CacheManager, string no, string urlPrev)
  81. {
  82. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"PI{no}", () =>
  83. {
  84. var url =
  85. $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfo?no={no}";
  86. var result = url.RequestPost("");
  87. var dto = result.Str2Obj<WePackageDto>();
  88. return dto;
  89. });
  90. }
  91. /// <summary>
  92. /// 获取全部方案包
  93. /// </summary>
  94. /// <returns></returns>
  95. public static List<WePackageDto> GetPackageInfos(this ICacheManager CacheManager, string urlPrev)
  96. {
  97. var url =
  98. $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos";
  99. var result = url.RequestPost("");
  100. var list = result.Str2Obj<List<WePackageDto>>();
  101. return list;
  102. //CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Remove("ALL");
  103. //return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get("ALL", () =>
  104. //{
  105. // var url =
  106. // $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos";
  107. // var result = url.RequestPost("");
  108. // var list = result.Str2Obj<List<WePackageDto>>();
  109. // return list;
  110. //});
  111. }
  112. /// <summary>
  113. /// 获取方案包xml
  114. /// </summary>
  115. /// <returns></returns>
  116. public static WePackageXmlDto GetPackageXmlInfos(this ICacheManager CacheManager, string no, string urlPrev)
  117. {
  118. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML{no}", () =>
  119. {
  120. var url =
  121. $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageXml?no={no}";
  122. var result = url.RequestPost("");
  123. var xml = result.Str2Obj<WePackageXmlDto>();
  124. return xml;
  125. });
  126. }
  127. public static PackageNode GetPackageNode(this ICacheManager CacheManager, string no, string urlPrev)
  128. {
  129. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_NODE{no}", () =>
  130. {
  131. var xml = GetPackageXmlInfos(CacheManager, no, urlPrev);
  132. var package = xml.ToPackage();
  133. return package;
  134. });
  135. }
  136. public static PackageDataNode GetPackageDataNode(this ICacheManager CacheManager, string no, string urlPrev)
  137. {
  138. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_DATA___NODE{no}", () =>
  139. {
  140. var xml = GetPackageXmlInfos(CacheManager, no, urlPrev);
  141. var package = xml.ToDataNode();
  142. return package;
  143. });
  144. }
  145. public static PackageDataNode GetFullRunPackageDataNode(this ICacheManager CacheManager, PackageDataNode runNode, string urlPrev)
  146. {
  147. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_DATA_NODE{runNode.Id}", () =>
  148. {
  149. var package = GetPackageNode(CacheManager, runNode.PackageNo, urlPrev);
  150. var runPackage = (PackageNode)runNode.ConvertToNode(package);
  151. var fullRunNode = runPackage.Convert2DataNode(true);
  152. return fullRunNode;
  153. });
  154. }
  155. /// <summary>
  156. /// 获取消息客户端信息
  157. /// </summary>
  158. /// <returns></returns>
  159. public static MsgClientDto GetMsgClientDto(this ICacheManager CacheManager, string appid, string urlPrev)
  160. {
  161. return CacheManager.GetCache("WeAppClient").Get($"{appid}", () =>
  162. {
  163. var url =
  164. $"{urlPrev.Ew("/")}api/services/WePlatform/MessageServer/GetClient?appid={appid}";
  165. var result = url.RequestPost("");
  166. var list = result.Str2Obj<MsgClientDto>();
  167. return list;
  168. });
  169. }
  170. /// <summary>
  171. /// 获取培训营行为标签
  172. /// </summary>
  173. /// <returns></returns>
  174. public static async Task<CampPlayScoreInfo> GetGroupRoundScoreAsync(this ICacheManager CacheManager, string no, int round, IRepository<CampPlayScoreInfo> rep)
  175. {
  176. return await CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).GetAsync($"SCORE-{no}-{round}", async () =>
  177. {
  178. var gs = await rep.FirstOrDefaultAsync(a => a.PlayNo == no && a.RoundIndex == round);
  179. return gs;
  180. });
  181. }
  182. public static CampPlayScoreInfo GetGroupRoundScore(this ICacheManager CacheManager, string no, int round, IRepository<CampPlayScoreInfo> rep)
  183. {
  184. return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).Get($"SCORE-{no}-{round}", () =>
  185. {
  186. var gs = rep.FirstOrDefault(a => a.PlayNo == no && a.RoundIndex == round);
  187. return gs;
  188. });
  189. }
  190. public static Task SetGroupRoundScoreAsync(this ICacheManager CacheManager, string no, int round, CampPlayScoreInfo ps)
  191. {
  192. return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).SetAsync($"SCORE-{no}-{round}", ps);
  193. }
  194. public static void SetGroupRoundScore(this ICacheManager CacheManager, string no, int round, CampPlayScoreInfo ps)
  195. {
  196. CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).Set($"SCORE-{no}-{round}", ps);
  197. }
  198. /// <summary>
  199. /// 获取培训营行为标签
  200. /// </summary>
  201. /// <returns></returns>
  202. public static async Task<List<string>> GetCampTags(this ICacheManager CacheManager, string no, IRepository<CampInfo, string> rep)
  203. {
  204. return await CacheManager.GetCache(IwbCacheNames.CampInfoCache).Get($"TAG{no}", async () =>
  205. {
  206. var camp = await rep.FirstOrDefaultAsync(a => a.Id == no);
  207. if (camp == null || camp.EvalBehaviorTags.IsEmpty())
  208. {
  209. return null;
  210. }
  211. var list = camp.EvalBehaviorTags.Split(',').OrderBy(a => a).ToList();
  212. return list;
  213. });
  214. }
  215. /// <summary>
  216. /// 获取分组运行信息
  217. /// </summary>
  218. /// <returns></returns>
  219. public static async Task<PackageDataNode> GetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
  220. {
  221. var runGroupInfo = await CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
  222. .GetAsync(no, async () =>
  223. {
  224. var entity = await rep.GetAll().Where(a => a.Id == no).Select(a => new { a.Name, a.RunningInfo })
  225. .FirstOrDefaultAsync();
  226. var info = entity?.RunningInfo?.Str2Obj<PackageDataNode>();
  227. if (info != null)
  228. {
  229. info.Name = entity.Name;
  230. }
  231. return info;
  232. });
  233. return runGroupInfo;
  234. }
  235. /// <summary>
  236. /// 获取分组运行信息
  237. /// </summary>
  238. /// <returns></returns>
  239. public static PackageDataNode GetGroupRunningInfo(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
  240. {
  241. var runGroupInfo = CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
  242. .Get(no, () =>
  243. {
  244. var entity = rep.GetAll().Where(a => a.Id == no).Select(a => new { a.Name, a.RunningInfo })
  245. .FirstOrDefault();
  246. var info = entity?.RunningInfo?.Str2Obj<PackageDataNode>();
  247. if (info != null)
  248. {
  249. info.Name = entity.Name;
  250. }
  251. return info;
  252. });
  253. return runGroupInfo;
  254. }
  255. /// <summary>
  256. /// 缓存分组运行信息
  257. /// </summary>
  258. /// <returns></returns>
  259. public static Task SetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, PackageDataNode runNode)
  260. {
  261. return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
  262. .SetAsync(no, runNode);
  263. }
  264. /// <summary>
  265. /// 缓存分组运行信息
  266. /// </summary>
  267. /// <returns></returns>
  268. public static void SetGroupRunningInfo(this ICacheManager CacheManager, string no, PackageDataNode runNode)
  269. {
  270. CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
  271. .Set(no, runNode);
  272. }
  273. /// <summary>
  274. /// 缓存分组运行信息
  275. /// </summary>
  276. /// <returns></returns>
  277. public static Task SetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, string runInfo)
  278. {
  279. var runNode = runInfo.Str2Obj<PackageDataNode>();
  280. return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
  281. .SetAsync(no, runNode);
  282. }
  283. /// <summary>
  284. /// 缓存分组运行信息
  285. /// </summary>
  286. /// <returns></returns>
  287. public static void SetGroupRunningInfo(this ICacheManager CacheManager, string no, string runInfo)
  288. {
  289. var runNode = runInfo.Str2Obj<PackageDataNode>();
  290. CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
  291. .Set(no, runNode);
  292. }
  293. /// <summary>
  294. /// 获取分组运行信息
  295. /// </summary>
  296. /// <returns></returns>
  297. public static async Task<CampPlayInfo> GetPlayInfoAsync(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
  298. {
  299. var playInfo = await CacheManager.GetCache(IwbCacheNames.PlayInfoCache)
  300. .GetAsync(no, async () =>
  301. {
  302. var info = await rep.GetAllIncluding(a => a.CampInfo).FirstOrDefaultAsync(a => a.Id == no);
  303. return info;
  304. });
  305. return playInfo;
  306. }
  307. /// <summary>
  308. /// 获取分组运行信息
  309. /// </summary>
  310. /// <returns></returns>
  311. public static CampPlayInfo GetPlayInfo(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
  312. {
  313. var playInfo = CacheManager.GetCache(IwbCacheNames.PlayInfoCache)
  314. .Get(no, () =>
  315. {
  316. var info = rep.GetAllIncluding(a => a.CampInfo).FirstOrDefault(a => a.Id == no);
  317. return info;
  318. //try
  319. //{
  320. // var query = rep.GetAllIncluding(a => a.CampInfo);
  321. // var q = from a in query
  322. // where a.Id == no
  323. // select new
  324. // {
  325. // Id = a.Id,
  326. // Name = a.Name,
  327. // CampInfo = a.CampInfo,
  328. // StartDate = a.StartDate,
  329. // EndDate = a.EndDate,
  330. // CampNo = a.CampNo,
  331. // RoundIndex = a.RoundIndex,
  332. // InvitationCode = a.InvitationCode,
  333. // IsPublic = a.IsPublic,
  334. // PlayState = a.PlayState,
  335. // PlayRoleNames = a.PlayRoleNames,
  336. // TrainingMinute = a.TrainingMinute,
  337. // PlayModel = a.PlayModel,
  338. // Remark = a.Remark,
  339. // a.CreatorUserId,
  340. // a.CreatorUser,
  341. // a.CreationTime,
  342. // };
  343. // var info = q.FirstOrDefault()?.Obj2String().Str2Obj<CampPlayInfo>();
  344. // if (info != null)
  345. // {
  346. // info.RunningInfo = GetGroupRunningInfo(CacheManager, no, rep).Obj2String();
  347. // }
  348. // return info;
  349. //}
  350. //catch (Exception e)
  351. //{
  352. // Console.WriteLine(e);
  353. // return null;
  354. //}
  355. });
  356. return playInfo;
  357. }
  358. /// <summary>
  359. /// 缓存运行分组
  360. /// </summary>
  361. /// <param name="CacheManager"></param>
  362. /// <param name="entity"></param>
  363. /// <returns></returns>
  364. public static async Task SetPlayInfoAsync(this ICacheManager CacheManager, CampPlayInfo entity)
  365. {
  366. await CacheManager.GetCache(IwbCacheNames.PlayInfoCache).SetAsync(entity.Id, entity);
  367. }
  368. /// <summary>
  369. /// 缓存运行分组缓存
  370. /// </summary>
  371. /// <param name="CacheManager"></param>
  372. /// <param name="entity"></param>
  373. public static void SetPlayInfo(this ICacheManager CacheManager, CampPlayInfo entity)
  374. {
  375. CacheManager.GetCache(IwbCacheNames.PlayInfoCache).Set(entity.Id, entity);
  376. }
  377. /// <summary>
  378. /// 获取情景附件
  379. /// </summary>
  380. /// <returns></returns>
  381. public static async Task<List<CampAttachDto>> GetSceneAttaches(this ICacheManager CacheManager, string campNo, string no, IRepository<CampSceneMapInfo> rep, IRepository<SysAttachFile> rep2)
  382. {
  383. return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Get($"A-{campNo}-{no}", async () =>
  384. {
  385. var sceneMap = await rep.FirstOrDefaultAsync(a => a.CampNo == campNo && a.SceneNo == no);
  386. if (sceneMap == null)
  387. {
  388. return null;
  389. }
  390. var attachInfos = new List<CampAttachDto>();
  391. var arr = sceneMap.AttachNos?.Split(',');
  392. if (arr != null)
  393. {
  394. foreach (var aNo in arr)
  395. {
  396. var attach = await rep2.FirstOrDefaultAsync(a => a.AttachNo == aNo);
  397. if (attach != null)
  398. {
  399. attachInfos.Add(new CampAttachDto()
  400. { AttachNo = aNo, CampNo = no, FileType = attach.FileType, FileTitle = attach.FileTitle, FileName = attach.FileName, FilePath = attach.FilePath });
  401. }
  402. }
  403. }
  404. return attachInfos;
  405. });
  406. }
  407. /// <summary>
  408. /// 获取分组运行的情景编码
  409. /// </summary>
  410. /// <param name="CacheManager"></param>
  411. /// <param name="no"></param>
  412. /// <param name="rep"></param>
  413. /// <returns></returns>
  414. public static async Task<ScenePathDto> GetSceneListAsync(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
  415. {
  416. return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).GetAsync($"SceneNos-{no}", async () =>
  417. {
  418. var nos = new List<string>();
  419. var runGroupInfo = await CacheManager.GetGroupRunningInfoAsync(no, rep);
  420. var runRounds = runGroupInfo?.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  421. if (runRounds != null)
  422. foreach (var r in runRounds)
  423. {
  424. var runBlocks = r.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  425. if (runBlocks != null)
  426. foreach (var b in runBlocks)
  427. {
  428. var runFlows = b.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  429. if (runFlows != null)
  430. foreach (var f in runFlows)
  431. {
  432. var runNodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  433. if (runNodes != null)
  434. foreach (var node in runNodes)
  435. {
  436. nos = GetSceneNoFromNode(nos, node);
  437. }
  438. }
  439. }
  440. }
  441. var dto = new ScenePathDto()
  442. {
  443. hasChange = false,
  444. PathList = nos
  445. };
  446. return dto;
  447. });
  448. }
  449. /// <summary>
  450. /// 获取分组运行的情景编码
  451. /// </summary>
  452. /// <param name="CacheManager"></param>
  453. /// <param name="no"></param>
  454. /// <param name="rep"></param>
  455. /// <returns></returns>
  456. public static ScenePathDto GetScenePathList(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
  457. {
  458. return CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Get($"SceneNos-{no}", () =>
  459. {
  460. var nos = new List<string>();
  461. var runGroupInfo = CacheManager.GetGroupRunningInfo(no, rep);
  462. var runRounds = runGroupInfo?.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  463. if (runRounds != null)
  464. foreach (var r in runRounds)
  465. {
  466. var runBlocks = r.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  467. if (runBlocks != null)
  468. foreach (var b in runBlocks)
  469. {
  470. var runFlows = b.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  471. if (runFlows != null)
  472. foreach (var f in runFlows)
  473. {
  474. var runNodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  475. if (runNodes != null)
  476. foreach (var node in runNodes)
  477. {
  478. nos = GetSceneNoFromNode(nos, node);
  479. }
  480. }
  481. }
  482. }
  483. var dto = new ScenePathDto()
  484. {
  485. hasChange = false,
  486. PathList = nos
  487. };
  488. return dto;
  489. });
  490. }
  491. /// <summary>
  492. /// 缓存分组运行的情景编码
  493. /// </summary>
  494. /// <param name="CacheManager"></param>
  495. /// <param name="path"></param>
  496. /// <param name="paths"></param>
  497. /// <returns></returns>
  498. public static Task SetSceneNosAsync(this ICacheManager CacheManager, string path, ScenePathDto paths)
  499. {
  500. return CacheManager.GetCache(IwbCacheNames.SceneInfoCache).SetAsync($"ScenePath-{path}", paths);
  501. }
  502. /// <summary>
  503. /// 缓存分组运行的情景编码
  504. /// </summary>
  505. /// <param name="CacheManager"></param>
  506. /// <param name="path"></param>
  507. /// <param name="paths"></param>
  508. /// <returns></returns>
  509. public static void SetScenePathList(this ICacheManager CacheManager, string path, ScenePathDto paths)
  510. {
  511. CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Set($"ScenePath-{path}", paths);
  512. }
  513. private static List<string> GetSceneNoFromNode(List<string> list, FlowNodeDataNode node)
  514. {
  515. list = list ?? new List<string>();
  516. if (node.SceneNodes != null)
  517. {
  518. var pathList = node.SceneNodes.Select(a => a.Path).ToList();
  519. list.AddRange(pathList);
  520. }
  521. var runChild = node.Children?.FirstOrDefault(a => a.IsStart);
  522. if (runChild != null)
  523. {
  524. list = GetSceneNoFromNode(list, runChild);
  525. }
  526. return list;
  527. }
  528. }
  529. }