using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Entities.Voucher;
using Dlhis.Entity.Canteen.Enums;
using Dlhis.Jip.Api;
using Dlhis.Jip.Api.Requests;
using Dlhis.ScheduledTask.Attributes;
using SqlSugar;
namespace Dlhis.ScheduledTask.Jobs;
///
/// 生日券发放消费上传
///
[RecurringJob(nameof(BirthdayCostUploadJob), "0 0 0 10 * ? ", Name = "生日券发放消费上传")]
public class BirthdayCostUploadJob : BaseJob
{
public BirthdayCostUploadJob(IServiceProvider serviceProvider) : base(serviceProvider)
{
}
protected override async Task RunAsync(IServiceProvider serviceProvider)
{
var jipApi = serviceProvider.GetService();
var now = DateTime.Now;
var year = now.Month == 1 ? now.Year - 1 : now.Year;
var month = now.Month == 1 ? 12 : now.Month - 1;
var s = new DateTime(year, month, 1);
var e = s.AddMonths(1);
var endDayOfMonth = e.AddDays(-1);
var userCodeAll = await DbContext.Queryable()
.Select(x => x.UserCode)
.Distinct()
.ToListAsync();
//获取所有人员的生日券发放和消费数据,逐人上传
foreach (var userCode in userCodeAll)
{
var request = new UploadCostRequest
{
Data = new List(2)
};
try
{
//查询生日券发放数据
var voucher = await DbContext.Queryable()
.LeftJoin((x, xu) => x.No == xu.VoucherNo)
.Where((x, xu) => xu.UserCode == userCode)// 指定用户
.Where(x => x.Type == VoucherEnumType.Birthday)
.Where(x => x.ClaimDateTime >= s && x.ClaimDateTime < e)
.Select((x, xu) => new
{
x.OriginalBalance
})
.SingleAsync();
if (voucher != null)
{
request.Data.Add(new UploadCostItemRequest
{
WorkCode = userCode,
Code = "2088",
BeginDate = endDayOfMonth.ToString("yyyy-MM-dd"),
Charge = voucher.OriginalBalance
});
}
//生日券消费数据
var cost = await DbContext.Queryable()
.Where(record => record.UserCode == userCode)// 指定用户
.Where(record => record.CostDate >= s && record.CostDate < e)
.Where(record => record.Source == BalanceRecordSourceEnumType.Birthday)
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
.SumAsync(record => SqlFunc.Abs(SqlFunc.IsNull(record.Amount, 0)));
request.Data.Add(new UploadCostItemRequest
{
WorkCode = userCode,
Code = "2089",
BeginDate = endDayOfMonth.ToString("yyyy-MM-dd"),
Charge = cost
});
var response = await jipApi.UploadCostAsync(request);
var handleData = response.Data.Where(x => x.Success == "S").ToList();
Logger.LogInformation("BirthdayCostUploadJob生日券发放消费上传成功{userCode}", userCode);
}
catch (Exception ex)
{
Logger.LogError(ex, "BirthdayCostUploadJob生日券发放消费上传失败-{userCode}:{error}", userCode, ex.Message);
}
}
}
}