using CloudGaming.Repository.Game.Entities.Ext; using Flurl; using System; namespace CloudGaming.Api.Admin.ApplicationServices.Apps.Ext; /// /// 图片列表 服务 T_App_ImageService /// public class T_App_ImageService(IServiceProvider serviceProvider) : ApplicationGameService(serviceProvider) { [Autowired] public virtual AppConfig appConfig { get; set; } private string appImageUrl; public string AppImageUrl { get { if (string.IsNullOrEmpty(appImageUrl)) { var newUrl = appConfig.AliyunConfig.DomainName; if (!newUrl.EndsWith('/')) { newUrl += "/"; } appImageUrl = newUrl; } return appImageUrl; } } /// /// 获取列表数据 /// /// /// public async override Task FindListAsync(PagingSearchInput pagingSearchInput) { //this.Repository.QueryBySql("") var query = this.Repository.QueryableBySql(@" select * from ( SELECT Id, Type, ImageId, Name, Url, UpdateTime, CreateTime,Language,STR((select count(1) from T_App_Image l where l.ImageId=CTE.ImageId)) [Desc] FROM ( SELECT Id, Type, ImageId, Name, Url, UpdateTime, CreateTime, [Desc], Language, ROW_NUMBER() OVER (PARTITION BY ImageId ORDER BY ImageOrder,id) AS rn FROM (select *,(CASE Language WHEN 'zh' THEN 0 WHEN 'en' THEN 1 ELSE 3 END) ImageOrder from T_App_Image ) t_image ) CTE WHERE rn = 1 ) tappimage") //图片Id .WhereIf(pagingSearchInput.Search?.ImageId != null && pagingSearchInput.Search?.ImageId > 0, w => w.ImageId == pagingSearchInput.Search.ImageId) //图片名称 .WhereIf(!string.IsNullOrWhiteSpace(pagingSearchInput.Search?.Name), w => w.Name.Contains(pagingSearchInput.Search.Name ?? "")) //类型 .WhereIf(pagingSearchInput.Search?.Type != null && pagingSearchInput.Search?.Type > -1, w => w.Type == pagingSearchInput.Search.Type) .OrderByDescending(w => w.Id) .Select(w => new { w.Id, w.Type, w.ImageId, w.Name, w.Url, w.UpdateTime, w.CreateTime, w.Desc, w.Language, }) ; var result = await Repository.AsPagingViewAsync(query, pagingSearchInput); // 设置列 //result.GetColumn(query, w => w.OperatorName).SetColumn("操作人"); //result.GetColumn(query, w => w. !).SetColumn(w => w.Name!); result .FormatValue(query, w => w.UpdateTime, (oldValue) => oldValue?.ToString("yyyy-MM-dd")) .FormatValue(query, w => w.CreateTime, (oldValue) => oldValue?.ToString("yyyy-MM-dd")) ; result.DataSource.ForEach(item => { if (item.TryGetValue("Url", out var urlObj)) { if (urlObj != null && !string.IsNullOrEmpty(urlObj.ToString())) { var url = urlObj.ToString(); if (!url.StartsWith("http://") && !url.StartsWith("https://")) { item["Url"] = AppImageUrl + url; } } } // if (item.TryGetValue("Desc", out var value)) { if (value != null) { var valueStr = value.ToString(); if (!string.IsNullOrEmpty(valueStr)) { if (int.TryParse(valueStr, out int count)) { if (count > 1) { if (item.TryGetValue("ImageId", out var imageIds) && item.TryGetValue("Id", out var ids)) { var imageId = int.Parse(imageIds.ToString()); var id = (int)ids; var imageList = this.Repository.Select.AsNoTracking().Where(it => it.ImageId == imageId && it.Id != id).ToList(); if (imageList != null && imageList.Count > 0) { imageList.ForEach(it => { var url = it.Url; if (!url.StartsWith("http://") && !url.StartsWith("https://")) { it.Url = AppImageUrl + url; } }); item.Add("children", imageList); } } } } } } } item["Desc"] = ""; }); return result; } /// /// 查询表单数据 /// /// /// public async override Task> FindFormAsync(int id) { var res = new Dictionary(); var form = await Repository.FindByIdAsync(id); form = form.NullSafe(); if (form != null && !string.IsNullOrEmpty(form.Url) && !form.Url.StartsWith("http://") && !form.Url.StartsWith("https://")) { form.Url = AppImageUrl + form.Url; } if (form?.CreateTime == null) { form.CreateTime = DateTime.Now; } if (form?.UpdateTime == null) { form.UpdateTime = DateTime.Now; } res[nameof(id)] = id == 0 ? "" : id; res[nameof(form)] = form; return res; } /// /// 查询表单数据 /// /// /// public async Task> FindFormAsync(int imageId, string language) { var res = new Dictionary(); var form = await Repository.SelectNoTracking.FirstOrDefaultAsync(it => it.ImageId == imageId && it.Language == language); form = form.NullSafe(); if (form != null && !string.IsNullOrEmpty(form.Url) && !form.Url.StartsWith("http://") && !form.Url.StartsWith("https://")) { form.Url = AppImageUrl + form.Url; } if (form?.CreateTime == null) { form.CreateTime = DateTime.Now; } if (form?.UpdateTime == null) { form.UpdateTime = DateTime.Now; } form.Desc = ""; res["id"] = form?.Id ?? 0; res[nameof(form)] = form; return res; } /// /// /// /// /// public async Task> GetImageList(int imageType) { return await this.Repository.SelectNoTracking.Where(it => it.Type == imageType).ToListAsync(); } /// /// 保存数据 /// /// /// public async override Task SaveFormAsync(T_App_Image form) { if ((form.ImageId == null || form.ImageId == 0) && form.Id == 0) { var maxImageId = Repository.Select.Where(it => it.ImageId < 80000).Max(it => (int?)it.ImageId) ?? 0; form.ImageId = maxImageId + 1; } if (!string.IsNullOrEmpty(form.Url)) { if (form.Url.StartsWith(AppImageUrl)) { form.Url = form.Url.Replace(AppImageUrl, ""); } } await Repository.InsertOrUpdateAsync(form); return form.ImageId ?? 0; } /// /// /// /// /// /// public async Task GetImageUrl(int? imageId, string language) { if (imageId == null || imageId == 0) { return $"{AppImageUrl}zanwu.png"; } var image = await Repository.SelectNoTracking.Where(it => it.Language == language && it.ImageId == imageId).FirstOrDefaultAsync(); if (image == null) { return $"{AppImageUrl}zanwu.png"; } var url = image?.Url; if (!url.StartsWith("http://") && !url.StartsWith("https://")) { url = AppImageUrl + url; } return url; } }