CloudGamingAdmin/admin-server/CloudGaming.Api.Admin/ApplicationServices/Apps/Ext/T_App_ImageService.cs
2024-11-15 02:58:48 +08:00

268 lines
8.9 KiB
C#

using CloudGaming.Repository.Game.Entities.Ext;
using Flurl;
using System;
namespace CloudGaming.Api.Admin.ApplicationServices.Apps.Ext;
/// <summary>
/// 图片列表 服务 T_App_ImageService
/// </summary>
public class T_App_ImageService(IServiceProvider serviceProvider)
: ApplicationGameService<T_App_Image, int, T_App_Image, T_App_Image>(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;
}
}
/// <summary>
/// 获取列表数据
/// </summary>
/// <param name="pagingSearchInput"></param>
/// <returns></returns>
public async override Task<PagingView> FindListAsync(PagingSearchInput<T_App_Image> 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<SysUser>(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;
}
/// <summary>
/// 查询表单数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async override Task<Dictionary<string, object?>> FindFormAsync(int id)
{
var res = new Dictionary<string, object?>();
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;
}
/// <summary>
/// 查询表单数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<Dictionary<string, object?>> FindFormAsync(int imageId, string language)
{
var res = new Dictionary<string, object?>();
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;
}
/// <summary>
///
/// </summary>
/// <param name="imageType"></param>
/// <returns></returns>
public async Task<List<T_App_Image>> GetImageList(int imageType)
{
return await this.Repository.SelectNoTracking.Where(it => it.Type == imageType).ToListAsync();
}
/// <summary>
/// 保存数据
/// </summary>
/// <param name="form"></param>
/// <returns></returns>
public async override Task<int> 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;
}
/// <summary>
///
/// </summary>
/// <param name="imageId"></param>
/// <param name="language"></param>
/// <returns></returns>
public async Task<string> 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;
}
}