268 lines
8.9 KiB
C#
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;
|
|
}
|
|
} |