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