using Abp.Domain.Repositories; using Abp.Runtime.Caching; using IwbZero.ToolCommon; using IwbZero.ToolCommon.StringModel; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using WeApp.BaseInfo; using WeApp.TrainingCamp; using WeEngine.CommonDto; using WeEngine.CommonDto.WeInfo; using WeEngine.Packages; namespace WeApp.Configuration.Cache { public static class CacheMangerEx { /// /// 方案包详情 /// /// /// /// /// public static WePackageDetailDto GetPackageDetail(this ICacheManager CacheManager, string no, string urlPrev) { return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"PD{no}", () => { var url = $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageDetail?no={no}"; var result = url.RequestPost(""); var dto = result.Str2Obj(); return dto; }); } /// /// 培训营方案包详情 /// /// /// /// /// /// public static async Task GetCampPackageDetail(this ICacheManager CacheManager, string no, string urlPrev, IRepository rep) { return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync($"CPD{no}", async () => { var camp = await rep.FirstOrDefaultAsync(a => a.Id == no); if (camp == null) { return null; } var dto = GetPackageDetail(CacheManager, camp.PackageNo, urlPrev); return dto; }); } /// /// 方案包信息 /// /// /// /// /// public static WePackageDto GetPackageInfo(this ICacheManager CacheManager, string no, string urlPrev) { return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"PI{no}", () => { var url = $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfo?no={no}"; var result = url.RequestPost(""); var dto = result.Str2Obj(); return dto; }); } /// /// 获取全部方案包 /// /// public static List GetPackageInfos(this ICacheManager CacheManager, string urlPrev) { var url = $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos"; var result = url.RequestPost(""); var list = result.Str2Obj>(); return list; //CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Remove("ALL"); //return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get("ALL", () => //{ // var url = // $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos"; // var result = url.RequestPost(""); // var list = result.Str2Obj>(); // return list; //}); } /// /// 获取方案包xml /// /// public static WePackageXmlDto GetPackageXmlInfos(this ICacheManager CacheManager, string no, string urlPrev) { return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML{no}", () => { var url = $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageXml?no={no}"; var result = url.RequestPost(""); var xml = result.Str2Obj(); return xml; }); } public static PackageNode GetPackageNode(this ICacheManager CacheManager, string no, string urlPrev) { return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_NODE{no}", () => { var pXml = GetPackageXmlInfos(CacheManager, no, urlPrev); var pn = pXml.ToPackage(); return pn; }); } public static PackageDataNode GetPackageDataNode(this ICacheManager CacheManager, string no, string urlPrev) { return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_DATA_NODE{no}", () => { var pXml = GetPackageXmlInfos(CacheManager, no, urlPrev); var pn = pXml.ToDataNode(); return pn; }); } /// /// 获取消息客户端信息 /// /// public static MsgClientDto GetMsgClientDto(this ICacheManager CacheManager, string appid, string urlPrev) { return CacheManager.GetCache("WeAppClient").Get($"{appid}", () => { var url = $"{urlPrev.Ew("/")}api/services/WePlatform/MessageServer/GetClient?appid={appid}"; var result = url.RequestPost(""); var list = result.Str2Obj(); return list; }); } /// /// 获取培训营行为标签 /// /// public static async Task GetGroupRoundScore(this ICacheManager CacheManager, string no, int round, IRepository rep) { return await CacheManager.GetCache(IwbCacheNames.GroupRunningInfoCache).GetAsync($"SCORE-{no}-{round}", async () => { var gs = await rep.GetAllIncluding(a => a.CampGroupInfo).FirstOrDefaultAsync(a => a.GroupNo == no && a.RoundIndex == round); return gs; }); } /// /// 获取培训营行为标签 /// /// public static async Task> GetCampTags(this ICacheManager CacheManager, string no, IRepository rep) { return await CacheManager.GetCache(IwbCacheNames.CampInfoCache).Get($"TAG{no}", async () => { var camp = await rep.FirstOrDefaultAsync(a => a.Id == no); if (camp == null || camp.EvalBehaviorTags.IsEmpty()) { return null; } var list = camp.EvalBehaviorTags.Split(',').ToList(); return list; }); } /// /// 获取分组运行信息 /// /// public static async Task GetGroupRunningInfo(this ICacheManager CacheManager, string no, IRepository rep) { var runGroupInfo = await CacheManager.GetCache(IwbCacheNames.GroupRunningInfoCache) .GetAsync(no, async () => { var entity = await rep.GetAllIncluding(a => a.CampInfo) .FirstOrDefaultAsync(a => a.Id == no); if (entity == null) { return null; } PackageDataNode info = null; if (entity.RunningInfo.IsNotEmpty()) { info = entity.RunningInfo.Str2Obj(); info.Name = entity.Name; } return info; }); return runGroupInfo; } /// /// 获取情景附件 /// /// public static async Task> GetSceneAttaches(this ICacheManager CacheManager, string campNo, string no, IRepository rep, IRepository rep2) { return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Get($"A-{campNo}-{no}", async () => { var sceneMap = await rep.FirstOrDefaultAsync(a => a.CampNo == campNo && a.SceneNo == no); if (sceneMap == null) { return null; } var attachInfos = new List(); var arr = sceneMap.AttachNos?.Split(','); if (arr != null) { foreach (var aNo in arr) { var attach = await rep2.FirstOrDefaultAsync(a => a.AttachNo == aNo); if (attach != null) { attachInfos.Add(new CampAttachDto() { AttachNo = aNo, CampNo = no, FileType = attach.FileType, FileTitle = attach.FileTitle, FileName = attach.FileName, FilePath = attach.FilePath }); } } } return attachInfos; }); } /// /// 获取分组运行的情景编码 /// /// /// /// /// public static async Task GetSceneNos(this ICacheManager CacheManager, string no, IRepository rep) { return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).GetAsync($"SceneNos-{no}", async () => { var nos = new List(); var dataNode = await CacheManager.GetGroupRunningInfo(no, rep); var rounds = dataNode?.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (rounds != null) foreach (var r in rounds) { var blocks = r.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (blocks != null) foreach (var b in blocks) { var flows = b.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (flows != null) foreach (var f in flows) { var nodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (nodes != null) foreach (var node in nodes) { nos = GetSceneNoFromNode(nos, (FlowNodeDataNode)node); } } } } var dto = new ScenePathDto() { hasChange = false, PathList = nos }; return dto; }); } private static List GetSceneNoFromNode(List list, FlowNodeDataNode node) { list = list ?? new List(); if (node.SceneNodes != null) { var nos = node.SceneNodes.Select(a => a.Id).ToList(); list.AddRange(nos); } var childNode = node.Children?.FirstOrDefault(a => a.IsStart); if (childNode != null) { list = GetSceneNoFromNode(list, (FlowNodeDataNode)childNode); } return list; } } }