CacheMangerEx.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  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 WeApp.BaseInfo;
  10. using WeApp.TrainingCamp;
  11. using WeEngine.CommonDto;
  12. using WeEngine.CommonDto.WeInfo;
  13. using WeEngine.Packages;
  14. namespace WeApp.Configuration.Cache
  15. {
  16. public static class CacheMangerEx
  17. {
  18. /// <summary>
  19. /// 方案包详情
  20. /// </summary>
  21. /// <param name="CacheManager"></param>
  22. /// <param name="no"></param>
  23. /// <param name="urlPrev"></param>
  24. /// <returns></returns>
  25. public static WePackageDetailDto GetPackageDetail(this ICacheManager CacheManager, string no, string urlPrev)
  26. {
  27. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"PD{no}", () =>
  28. {
  29. var url = $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageDetail?no={no}";
  30. var result = url.RequestPost("");
  31. var dto = result.Str2Obj<WePackageDetailDto>();
  32. return dto;
  33. });
  34. }
  35. /// <summary>
  36. /// 培训营方案包详情
  37. /// </summary>
  38. /// <param name="CacheManager"></param>
  39. /// <param name="no"></param>
  40. /// <param name="urlPrev"></param>
  41. /// <param name="rep"></param>
  42. /// <returns></returns>
  43. public static async Task<WePackageDetailDto> GetCampPackageDetail(this ICacheManager CacheManager, string no, string urlPrev, IRepository<CampInfo, string> rep)
  44. {
  45. return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync($"CPD{no}", async () =>
  46. {
  47. var camp = await rep.FirstOrDefaultAsync(a => a.Id == no);
  48. if (camp == null)
  49. {
  50. return null;
  51. }
  52. var dto = GetPackageDetail(CacheManager, camp.PackageNo, urlPrev);
  53. return dto;
  54. });
  55. }
  56. /// <summary>
  57. /// 方案包信息
  58. /// </summary>
  59. /// <param name="CacheManager"></param>
  60. /// <param name="no"></param>
  61. /// <param name="urlPrev"></param>
  62. /// <returns></returns>
  63. public static WePackageDto GetPackageInfo(this ICacheManager CacheManager, string no, string urlPrev)
  64. {
  65. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"PI{no}", () =>
  66. {
  67. var url =
  68. $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfo?no={no}";
  69. var result = url.RequestPost("");
  70. var dto = result.Str2Obj<WePackageDto>();
  71. return dto;
  72. });
  73. }
  74. /// <summary>
  75. /// 获取全部方案包
  76. /// </summary>
  77. /// <returns></returns>
  78. public static List<WePackageDto> GetPackageInfos(this ICacheManager CacheManager, string urlPrev)
  79. {
  80. var url =
  81. $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos";
  82. var result = url.RequestPost("");
  83. var list = result.Str2Obj<List<WePackageDto>>();
  84. return list;
  85. //CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Remove("ALL");
  86. //return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get("ALL", () =>
  87. //{
  88. // var url =
  89. // $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos";
  90. // var result = url.RequestPost("");
  91. // var list = result.Str2Obj<List<WePackageDto>>();
  92. // return list;
  93. //});
  94. }
  95. /// <summary>
  96. /// 获取方案包xml
  97. /// </summary>
  98. /// <returns></returns>
  99. public static WePackageXmlDto GetPackageXmlInfos(this ICacheManager CacheManager, string no, string urlPrev)
  100. {
  101. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML{no}", () =>
  102. {
  103. var url =
  104. $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageXml?no={no}";
  105. var result = url.RequestPost("");
  106. var xml = result.Str2Obj<WePackageXmlDto>();
  107. return xml;
  108. });
  109. }
  110. public static PackageNode GetPackageNode(this ICacheManager CacheManager, string no, string urlPrev)
  111. {
  112. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_NODE{no}", () =>
  113. {
  114. var pXml = GetPackageXmlInfos(CacheManager, no, urlPrev);
  115. var pn = pXml.ToPackage();
  116. return pn;
  117. });
  118. }
  119. public static PackageDataNode GetPackageDataNode(this ICacheManager CacheManager, string no, string urlPrev)
  120. {
  121. return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_DATA_NODE{no}", () =>
  122. {
  123. var pXml = GetPackageXmlInfos(CacheManager, no, urlPrev);
  124. var pn = pXml.ToDataNode();
  125. return pn;
  126. });
  127. }
  128. /// <summary>
  129. /// 获取消息客户端信息
  130. /// </summary>
  131. /// <returns></returns>
  132. public static MsgClientDto GetMsgClientDto(this ICacheManager CacheManager, string appid, string urlPrev)
  133. {
  134. return CacheManager.GetCache("WeAppClient").Get($"{appid}", () =>
  135. {
  136. var url =
  137. $"{urlPrev.Ew("/")}api/services/WePlatform/MessageServer/GetClient?appid={appid}";
  138. var result = url.RequestPost("");
  139. var list = result.Str2Obj<MsgClientDto>();
  140. return list;
  141. });
  142. }
  143. /// <summary>
  144. /// 获取培训营行为标签
  145. /// </summary>
  146. /// <returns></returns>
  147. public static async Task<GroupScoreInfo> GetGroupRoundScore(this ICacheManager CacheManager, string no, int round, IRepository<GroupScoreInfo> rep)
  148. {
  149. return await CacheManager.GetCache(IwbCacheNames.GroupRunningInfoCache).GetAsync($"SCORE-{no}-{round}", async () =>
  150. {
  151. var gs = await rep.FirstOrDefaultAsync(a => a.GroupNo == no && a.RoundIndex == round);
  152. return gs;
  153. });
  154. }
  155. /// <summary>
  156. /// 获取培训营行为标签
  157. /// </summary>
  158. /// <returns></returns>
  159. public static async Task<List<string>> GetCampTags(this ICacheManager CacheManager, string no, IRepository<CampInfo, string> rep)
  160. {
  161. return await CacheManager.GetCache(IwbCacheNames.CampInfoCache).Get($"TAG{no}", async () =>
  162. {
  163. var camp = await rep.FirstOrDefaultAsync(a => a.Id == no);
  164. if (camp == null || camp.EvalBehaviorTags.IsEmpty())
  165. {
  166. return null;
  167. }
  168. var list = camp.EvalBehaviorTags.Split(',').ToList();
  169. return list;
  170. });
  171. }
  172. /// <summary>
  173. /// 获取分组运行信息
  174. /// </summary>
  175. /// <returns></returns>
  176. public static async Task<PackageDataNode> GetGroupRunningInfo(this ICacheManager CacheManager, string no, IRepository<CampGroupInfo, string> rep)
  177. {
  178. var runGroupInfo = await CacheManager.GetCache(IwbCacheNames.GroupRunningInfoCache)
  179. .GetAsync(no, async () =>
  180. {
  181. var entity = await rep.GetAllIncluding(a => a.CampInfo)
  182. .FirstOrDefaultAsync(a => a.Id == no);
  183. if (entity == null)
  184. {
  185. return null;
  186. }
  187. PackageDataNode info = null;
  188. if (entity.RunningInfo.IsNotEmpty())
  189. {
  190. info = entity.RunningInfo.Str2Obj<PackageDataNode>();
  191. info.Name = entity.Name;
  192. }
  193. return info;
  194. });
  195. return runGroupInfo;
  196. }
  197. /// <summary>
  198. /// 获取情景附件
  199. /// </summary>
  200. /// <returns></returns>
  201. public static async Task<List<CampAttachDto>> GetSceneAttaches(this ICacheManager CacheManager, string campNo, string no, IRepository<CampSceneMapInfo> rep, IRepository<SysAttachFile> rep2)
  202. {
  203. return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Get($"A-{campNo}-{no}", async () =>
  204. {
  205. var sceneMap = await rep.FirstOrDefaultAsync(a => a.CampNo == campNo && a.SceneNo == no);
  206. if (sceneMap == null)
  207. {
  208. return null;
  209. }
  210. var attachInfos = new List<CampAttachDto>();
  211. var arr = sceneMap.AttachNos?.Split(',');
  212. if (arr != null)
  213. {
  214. foreach (var aNo in arr)
  215. {
  216. var attach = await rep2.FirstOrDefaultAsync(a => a.AttachNo == aNo);
  217. if (attach != null)
  218. {
  219. attachInfos.Add(new CampAttachDto()
  220. { AttachNo = aNo, CampNo = no, FileType = attach.FileType, FileTitle = attach.FileTitle, FileName = attach.FileName, FilePath = attach.FilePath });
  221. }
  222. }
  223. }
  224. return attachInfos;
  225. });
  226. }
  227. /// <summary>
  228. /// 获取分组运行的情景编码
  229. /// </summary>
  230. /// <param name="CacheManager"></param>
  231. /// <param name="no"></param>
  232. /// <param name="rep"></param>
  233. /// <returns></returns>
  234. public static async Task<ScenePathDto> GetSceneNos(this ICacheManager CacheManager, string no, IRepository<CampGroupInfo, string> rep)
  235. {
  236. return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).GetAsync($"SceneNos-{no}", async () =>
  237. {
  238. var nos = new List<string>();
  239. var dataNode = await CacheManager.GetGroupRunningInfo(no, rep);
  240. var rounds = dataNode?.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  241. if (rounds != null)
  242. foreach (var r in rounds)
  243. {
  244. var blocks = r.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  245. if (blocks != null)
  246. foreach (var b in blocks)
  247. {
  248. var flows = b.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  249. if (flows != null)
  250. foreach (var f in flows)
  251. {
  252. var nodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
  253. if (nodes != null)
  254. foreach (var node in nodes)
  255. {
  256. nos = GetSceneNoFromNode(nos, (FlowNodeDataNode)node);
  257. }
  258. }
  259. }
  260. }
  261. var dto = new ScenePathDto()
  262. {
  263. hasChange = false,
  264. PathList = nos
  265. };
  266. return dto;
  267. });
  268. }
  269. private static List<string> GetSceneNoFromNode(List<string> list, FlowNodeDataNode node)
  270. {
  271. list = list ?? new List<string>();
  272. if (node.SceneNodes != null)
  273. {
  274. var nos = node.SceneNodes.Select(a => a.Id).ToList();
  275. list.AddRange(nos);
  276. }
  277. var childNode = node.Children?.FirstOrDefault(a => a.IsStart);
  278. if (childNode != null)
  279. {
  280. list = GetSceneNoFromNode(list, (FlowNodeDataNode)childNode);
  281. }
  282. return list;
  283. }
  284. }
  285. }