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); } } } }