using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using Abp.Domain.Repositories; using Abp.Runtime.Caching; using IwbZero.ToolCommon; using IwbZero.ToolCommon.StringModel; using WeEngine.CommonDto; using WeEngine.CommonDto.WeInfo; using WeEngine.Packages; using WeOnlineApp.BaseInfo; using WeOnlineApp.TrainingCamp; namespace WeOnlineApp.Configuration.Cache { public static class CacheMangerEx { public static bool HasLoadPackageCache; public static async Task LoadPackageInfos(this ICacheManager CacheManager, string urlPrev) { if (HasLoadPackageCache) { HasLoadPackageCache = false; var list = GetPackageInfos(CacheManager, urlPrev); foreach (var p in list) { await Task.Run(() => GetPackageInfo(CacheManager, p.Id, urlPrev)); await Task.Run(() => GetPackageDetail(CacheManager, p.Id, urlPrev)); await Task.Run(() => GetPackageXmlInfos(CacheManager, p.Id, urlPrev)); await Task.Run(() => GetPackageNode(CacheManager, p.Id, urlPrev)); await Task.Run(() => GetPackageDataNode(CacheManager, p.Id, urlPrev)); } } } /// /// 方案包详情 /// /// /// /// /// 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 xml = GetPackageXmlInfos(CacheManager, no, urlPrev); var package = xml.ToPackage(); return package; }); } public static PackageDataNode GetPackageDataNode(this ICacheManager CacheManager, string no, string urlPrev) { return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_DATA___NODE{no}", () => { var xml = GetPackageXmlInfos(CacheManager, no, urlPrev); var package = xml.ToDataNode(); return package; }); } public static PackageDataNode GetFullRunPackageDataNode(this ICacheManager CacheManager, PackageDataNode runNode, string urlPrev) { return CacheManager.GetCache(IwbCacheNames.PackageInfoCache).Get($"XML_DATA_NODE{runNode.Id}", () => { var package = GetPackageNode(CacheManager, runNode.PackageNo, urlPrev); var runPackage = (PackageNode)runNode.ConvertToNode(package); var fullRunNode = runPackage.Convert2DataNode(true); return fullRunNode; }); } /// /// 获取消息客户端信息 /// /// 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 GetGroupRoundScoreAsync(this ICacheManager CacheManager, string no, int round, IRepository rep) { return await CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).GetAsync($"SCORE-{no}-{round}", async () => { var gs = await rep.FirstOrDefaultAsync(a => a.PlayNo == no && a.RoundIndex == round); return gs; }); } public static CampPlayScoreInfo GetGroupRoundScore(this ICacheManager CacheManager, string no, int round, IRepository rep) { return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).Get($"SCORE-{no}-{round}", () => { var gs = rep.FirstOrDefault(a => a.PlayNo == no && a.RoundIndex == round); return gs; }); } public static Task SetGroupRoundScoreAsync(this ICacheManager CacheManager, string no, int round, CampPlayScoreInfo ps) { return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).SetAsync($"SCORE-{no}-{round}", ps); } public static void SetGroupRoundScore(this ICacheManager CacheManager, string no, int round, CampPlayScoreInfo ps) { CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache).Set($"SCORE-{no}-{round}", ps); } /// /// 获取培训营行为标签 /// /// 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(',').OrderBy(a => a).ToList(); return list; }); } /// /// 获取分组运行信息 /// /// public static async Task GetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, IRepository rep) { var runGroupInfo = await CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache) .GetAsync(no, async () => { var entity = await rep.GetAll().Where(a => a.Id == no).Select(a => new { a.Name, a.RunningInfo }) .FirstOrDefaultAsync(); var info = entity?.RunningInfo?.Str2Obj(); if (info != null) { info.Name = entity.Name; } return info; }); return runGroupInfo; } /// /// 获取分组运行信息 /// /// public static PackageDataNode GetGroupRunningInfo(this ICacheManager CacheManager, string no, IRepository rep) { var runGroupInfo = CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache) .Get(no, () => { var entity = rep.GetAll().Where(a => a.Id == no).Select(a => new { a.Name, a.RunningInfo }) .FirstOrDefault(); var info = entity?.RunningInfo?.Str2Obj(); if (info != null) { info.Name = entity.Name; } return info; }); return runGroupInfo; } /// /// 缓存分组运行信息 /// /// public static Task SetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, PackageDataNode runNode) { return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache) .SetAsync(no, runNode); } /// /// 缓存分组运行信息 /// /// public static void SetGroupRunningInfo(this ICacheManager CacheManager, string no, PackageDataNode runNode) { CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache) .Set(no, runNode); } /// /// 缓存分组运行信息 /// /// public static Task SetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, string runInfo) { var runNode = runInfo.Str2Obj(); return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache) .SetAsync(no, runNode); } /// /// 缓存分组运行信息 /// /// public static void SetGroupRunningInfo(this ICacheManager CacheManager, string no, string runInfo) { var runNode = runInfo.Str2Obj(); CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache) .Set(no, runNode); } /// /// 获取分组运行信息 /// /// public static async Task GetPlayInfoAsync(this ICacheManager CacheManager, string no, IRepository rep) { var playInfo = await CacheManager.GetCache(IwbCacheNames.PlayInfoCache) .GetAsync(no, async () => { var info = await rep.GetAllIncluding(a => a.CampInfo).FirstOrDefaultAsync(a => a.Id == no); return info; }); return playInfo; } /// /// 获取分组运行信息 /// /// public static CampPlayInfo GetPlayInfo(this ICacheManager CacheManager, string no, IRepository rep) { var playInfo = CacheManager.GetCache(IwbCacheNames.PlayInfoCache) .Get(no, () => { var info = rep.GetAllIncluding(a => a.CampInfo).FirstOrDefault(a => a.Id == no); return info; //try //{ // var query = rep.GetAllIncluding(a => a.CampInfo); // var q = from a in query // where a.Id == no // select new // { // Id = a.Id, // Name = a.Name, // CampInfo = a.CampInfo, // StartDate = a.StartDate, // EndDate = a.EndDate, // CampNo = a.CampNo, // RoundIndex = a.RoundIndex, // InvitationCode = a.InvitationCode, // IsPublic = a.IsPublic, // PlayState = a.PlayState, // PlayRoleNames = a.PlayRoleNames, // TrainingMinute = a.TrainingMinute, // PlayModel = a.PlayModel, // Remark = a.Remark, // a.CreatorUserId, // a.CreatorUser, // a.CreationTime, // }; // var info = q.FirstOrDefault()?.Obj2String().Str2Obj(); // if (info != null) // { // info.RunningInfo = GetGroupRunningInfo(CacheManager, no, rep).Obj2String(); // } // return info; //} //catch (Exception e) //{ // Console.WriteLine(e); // return null; //} }); return playInfo; } /// /// 缓存运行分组 /// /// /// /// public static async Task SetPlayInfoAsync(this ICacheManager CacheManager, CampPlayInfo entity) { await CacheManager.GetCache(IwbCacheNames.PlayInfoCache).SetAsync(entity.Id, entity); } /// /// 缓存运行分组缓存 /// /// /// public static void SetPlayInfo(this ICacheManager CacheManager, CampPlayInfo entity) { CacheManager.GetCache(IwbCacheNames.PlayInfoCache).Set(entity.Id, entity); } /// /// 获取情景附件 /// /// 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 GetSceneListAsync(this ICacheManager CacheManager, string no, IRepository rep) { return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).GetAsync($"SceneNos-{no}", async () => { var nos = new List(); var runGroupInfo = await CacheManager.GetGroupRunningInfoAsync(no, rep); var runRounds = runGroupInfo?.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runRounds != null) foreach (var r in runRounds) { var runBlocks = r.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runBlocks != null) foreach (var b in runBlocks) { var runFlows = b.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runFlows != null) foreach (var f in runFlows) { var runNodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runNodes != null) foreach (var node in runNodes) { nos = GetSceneNoFromNode(nos, node); } } } } var dto = new ScenePathDto() { hasChange = false, PathList = nos }; return dto; }); } /// /// 获取分组运行的情景编码 /// /// /// /// /// public static ScenePathDto GetScenePathList(this ICacheManager CacheManager, string no, IRepository rep) { return CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Get($"SceneNos-{no}", () => { var nos = new List(); var runGroupInfo = CacheManager.GetGroupRunningInfo(no, rep); var runRounds = runGroupInfo?.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runRounds != null) foreach (var r in runRounds) { var runBlocks = r.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runBlocks != null) foreach (var b in runBlocks) { var runFlows = b.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runFlows != null) foreach (var f in runFlows) { var runNodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id); if (runNodes != null) foreach (var node in runNodes) { nos = GetSceneNoFromNode(nos, node); } } } } var dto = new ScenePathDto() { hasChange = false, PathList = nos }; return dto; }); } /// /// 缓存分组运行的情景编码 /// /// /// /// /// public static Task SetSceneNosAsync(this ICacheManager CacheManager, string path, ScenePathDto paths) { return CacheManager.GetCache(IwbCacheNames.SceneInfoCache).SetAsync($"ScenePath-{path}", paths); } /// /// 缓存分组运行的情景编码 /// /// /// /// /// public static void SetScenePathList(this ICacheManager CacheManager, string path, ScenePathDto paths) { CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Set($"ScenePath-{path}", paths); } private static List GetSceneNoFromNode(List list, FlowNodeDataNode node) { list = list ?? new List(); if (node.SceneNodes != null) { var pathList = node.SceneNodes.Select(a => a.Path).ToList(); list.AddRange(pathList); } var runChild = node.Children?.FirstOrDefault(a => a.IsStart); if (runChild != null) { list = GetSceneNoFromNode(list, runChild); } return list; } } }