| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569 |
- 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));
- }
- }
- }
- /// <summary>
- /// 方案包详情
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="no"></param>
- /// <param name="urlPrev"></param>
- /// <returns></returns>
- 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<WePackageDetailDto>();
- return dto;
- });
- }
- /// <summary>
- /// 培训营方案包详情
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="no"></param>
- /// <param name="urlPrev"></param>
- /// <param name="rep"></param>
- /// <returns></returns>
- public static async Task<WePackageDetailDto> GetCampPackageDetail(this ICacheManager CacheManager, string no, string urlPrev, IRepository<CampInfo, string> 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;
- });
- }
- /// <summary>
- /// 方案包信息
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="no"></param>
- /// <param name="urlPrev"></param>
- /// <returns></returns>
- 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<WePackageDto>();
- return dto;
- });
- }
- /// <summary>
- /// 获取全部方案包
- /// </summary>
- /// <returns></returns>
- public static List<WePackageDto> GetPackageInfos(this ICacheManager CacheManager, string urlPrev)
- {
- var url =
- $"{urlPrev.Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos";
- var result = url.RequestPost("");
- var list = result.Str2Obj<List<WePackageDto>>();
- 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<List<WePackageDto>>();
- // return list;
- //});
- }
- /// <summary>
- /// 获取方案包xml
- /// </summary>
- /// <returns></returns>
- 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<WePackageXmlDto>();
- 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;
- });
- }
- /// <summary>
- /// 获取消息客户端信息
- /// </summary>
- /// <returns></returns>
- 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<MsgClientDto>();
- return list;
- });
- }
- /// <summary>
- /// 获取培训营行为标签
- /// </summary>
- /// <returns></returns>
- public static async Task<CampPlayScoreInfo> GetGroupRoundScoreAsync(this ICacheManager CacheManager, string no, int round, IRepository<CampPlayScoreInfo> 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<CampPlayScoreInfo> 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);
- }
- /// <summary>
- /// 获取培训营行为标签
- /// </summary>
- /// <returns></returns>
- public static async Task<List<string>> GetCampTags(this ICacheManager CacheManager, string no, IRepository<CampInfo, string> 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;
- });
- }
- /// <summary>
- /// 获取分组运行信息
- /// </summary>
- /// <returns></returns>
- public static async Task<PackageDataNode> GetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> 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<PackageDataNode>();
- if (info != null)
- {
- info.Name = entity.Name;
- }
- return info;
- });
- return runGroupInfo;
- }
- /// <summary>
- /// 获取分组运行信息
- /// </summary>
- /// <returns></returns>
- public static PackageDataNode GetGroupRunningInfo(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> 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<PackageDataNode>();
- if (info != null)
- {
- info.Name = entity.Name;
- }
- return info;
- });
- return runGroupInfo;
- }
- /// <summary>
- /// 缓存分组运行信息
- /// </summary>
- /// <returns></returns>
- public static Task SetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, PackageDataNode runNode)
- {
- return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
- .SetAsync(no, runNode);
- }
- /// <summary>
- /// 缓存分组运行信息
- /// </summary>
- /// <returns></returns>
- public static void SetGroupRunningInfo(this ICacheManager CacheManager, string no, PackageDataNode runNode)
- {
- CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
- .Set(no, runNode);
- }
- /// <summary>
- /// 缓存分组运行信息
- /// </summary>
- /// <returns></returns>
- public static Task SetGroupRunningInfoAsync(this ICacheManager CacheManager, string no, string runInfo)
- {
- var runNode = runInfo.Str2Obj<PackageDataNode>();
- return CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
- .SetAsync(no, runNode);
- }
- /// <summary>
- /// 缓存分组运行信息
- /// </summary>
- /// <returns></returns>
- public static void SetGroupRunningInfo(this ICacheManager CacheManager, string no, string runInfo)
- {
- var runNode = runInfo.Str2Obj<PackageDataNode>();
- CacheManager.GetCache(IwbCacheNames.PlayRunningInfoCache)
- .Set(no, runNode);
- }
- /// <summary>
- /// 获取分组运行信息
- /// </summary>
- /// <returns></returns>
- public static async Task<CampPlayInfo> GetPlayInfoAsync(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> 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;
- }
- /// <summary>
- /// 获取分组运行信息
- /// </summary>
- /// <returns></returns>
- public static CampPlayInfo GetPlayInfo(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> 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<CampPlayInfo>();
- // if (info != null)
- // {
- // info.RunningInfo = GetGroupRunningInfo(CacheManager, no, rep).Obj2String();
- // }
- // return info;
- //}
- //catch (Exception e)
- //{
- // Console.WriteLine(e);
- // return null;
- //}
- });
- return playInfo;
- }
- /// <summary>
- /// 缓存运行分组
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="entity"></param>
- /// <returns></returns>
- public static async Task SetPlayInfoAsync(this ICacheManager CacheManager, CampPlayInfo entity)
- {
- await CacheManager.GetCache(IwbCacheNames.PlayInfoCache).SetAsync(entity.Id, entity);
- }
- /// <summary>
- /// 缓存运行分组缓存
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="entity"></param>
- public static void SetPlayInfo(this ICacheManager CacheManager, CampPlayInfo entity)
- {
- CacheManager.GetCache(IwbCacheNames.PlayInfoCache).Set(entity.Id, entity);
- }
- /// <summary>
- /// 获取情景附件
- /// </summary>
- /// <returns></returns>
- public static async Task<List<CampAttachDto>> GetSceneAttaches(this ICacheManager CacheManager, string campNo, string no, IRepository<CampSceneMapInfo> rep, IRepository<SysAttachFile> 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<CampAttachDto>();
- 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;
- });
- }
- /// <summary>
- /// 获取分组运行的情景编码
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="no"></param>
- /// <param name="rep"></param>
- /// <returns></returns>
- public static async Task<ScenePathDto> GetSceneListAsync(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
- {
- return await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).GetAsync($"SceneNos-{no}", async () =>
- {
- var nos = new List<string>();
- 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;
- });
- }
- /// <summary>
- /// 获取分组运行的情景编码
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="no"></param>
- /// <param name="rep"></param>
- /// <returns></returns>
- public static ScenePathDto GetScenePathList(this ICacheManager CacheManager, string no, IRepository<CampPlayInfo, string> rep)
- {
- return CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Get($"SceneNos-{no}", () =>
- {
- var nos = new List<string>();
- 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;
- });
- }
- /// <summary>
- /// 缓存分组运行的情景编码
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="path"></param>
- /// <param name="paths"></param>
- /// <returns></returns>
- public static Task SetSceneNosAsync(this ICacheManager CacheManager, string path, ScenePathDto paths)
- {
- return CacheManager.GetCache(IwbCacheNames.SceneInfoCache).SetAsync($"ScenePath-{path}", paths);
- }
- /// <summary>
- /// 缓存分组运行的情景编码
- /// </summary>
- /// <param name="CacheManager"></param>
- /// <param name="path"></param>
- /// <param name="paths"></param>
- /// <returns></returns>
- public static void SetScenePathList(this ICacheManager CacheManager, string path, ScenePathDto paths)
- {
- CacheManager.GetCache(IwbCacheNames.SceneInfoCache).Set($"ScenePath-{path}", paths);
- }
- private static List<string> GetSceneNoFromNode(List<string> list, FlowNodeDataNode node)
- {
- list = list ?? new List<string>();
- 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;
- }
- }
- }
|