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;
}
}
}