CloudGamingAdmin/admin-server/CloudGaming.Api.Admin/ApplicationServices/Apps/App/T_RedemptionCodeService.cs
2024-11-19 20:20:58 +08:00

92 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using CloudGaming.Repository.Game.Entities.App;
using CloudGaming.Repository.Game.Entities.Game;
using NPOI.SS.Formula.Functions;
namespace CloudGaming.Api.Admin.ApplicationServices.Apps.App;
/// <summary>
/// 兑换码表 服务 T_RedemptionCodeService
/// </summary>
public class T_RedemptionCodeService(IServiceProvider serviceProvider,
IRepository<T_User_RedemptionUsage> userRedemptionUsage
)
: ApplicationUserService<T_RedemptionCode, int, T_RedemptionCode, T_RedemptionCode>(serviceProvider)
{
/// <summary>
/// 获取列表数据
/// </summary>
/// <param name="pagingSearchInput"></param>
/// <returns></returns>
public async override Task<PagingView> FindListAsync(PagingSearchInput<T_RedemptionCode> pagingSearchInput)
{
var query = this.Repository.Select
//兑换码(唯一)
.WhereIf(!string.IsNullOrWhiteSpace(pagingSearchInput.Search?.Code),
w => w.Code.Contains(pagingSearchInput.Search.Code ?? ""))
//兑换码类型
.WhereIf(pagingSearchInput.Search?.Type != null && pagingSearchInput.Search?.Type > 0,
w => w.Type == pagingSearchInput.Search.Type)
.OrderByDescending(w => w.Id)
.Select(w => new
{
w.Id,
w.Code,
w.Type,
w.UsageLimit,
w.ExpirationDate,
w.IsActive,
w.CreatedDate,
w.Remarks,
w.TenantId,
UserCount = 0,
Statistic = ""
})
;
var result = await Repository.AsPagingViewAsync(query, pagingSearchInput);
result.DataSource.ForEach(item =>
{
if (item.TryGetValue("Code", out var codeObj))
{
var code = codeObj.ToString();
var count = userRedemptionUsage.SelectNoTracking.Where(it => it.Code == code && it.Status == 1).Count();
item["UserCount"] = count;
var shibai1 = userRedemptionUsage.SelectNoTracking.Where(it => it.Code == code && it.Status == 2).Count();
var guoqi = userRedemptionUsage.SelectNoTracking.Where(it => it.Code == code && it.Status == 3).Count();
item["Statistic"] = $"领取成功:{count},领取失败:{shibai1},已过期:{guoqi}";
}
});
// 设置列
//result.GetColumn(query, w => w.OperatorName).SetColumn("操作人");
//result.GetColumn(query, w => w. !).SetColumn<SysUser>(w => w.Name!);
result
.FormatValue(query, w => w.ExpirationDate, (oldValue) => oldValue.ToString("yyyy-MM-dd"))
.FormatValue(query, w => w.CreatedDate, (oldValue) => oldValue.ToString("yyyy-MM-dd"))
;
return result;
}
/// <summary>
/// 保存数据
/// </summary>
/// <param name="form"></param>
/// <returns></returns>
public override async Task SaveFormAsync(T_RedemptionCode form)
{
//添加
var isSelect = await Repository.Select.Where(it => it.Code == form.Code).FirstOrDefaultAsync();
if (isSelect != null && form.Id != isSelect.Id)
{
throw MessageBox.Show("兑换码不能重复");
}
await Repository.InsertOrUpdateAsync(form ?? throw MessageBox.Show("保存函数参数Dto不是数据库类型请对保存函数重写"));
}
}