92 lines
3.5 KiB
C#
92 lines
3.5 KiB
C#
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不是数据库类型,请对保存函数重写!"));
|
||
}
|
||
|
||
|
||
|
||
} |