using System.Text; using Dlhis.Constants; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.DataAccess.Entity; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; using SqlSugar; namespace Dlhis.Canteen.Tickets.Services.Implements; [Service(nameof(TicketEnumType.Birthday))] public class BirthdayTicketService : BaseTicketService, IBirthdayTicketService { /// public BirthdayTicketService(IDbContext dbContext) : base(dbContext) { } /// public override async Task CreateAsync() { await DbContext.IgnoreAsync(async () => { var today = DateTime.Today; var userCodes = await DbContext.Queryable() .Where(x => SqlFunc.DateIsSame(SqlFunc.ToDate(x.Birthday), today, DateType.Day)) .Select(x => new { x.Code, x.Factory }) .ToListAsync(); const decimal amount = 30; var todayStr = today.ToString("yyyy-MM-dd"); foreach (var item in userCodes) { var qrCode = GetQrCode(item.Code + todayStr); if (!await DbContext.Queryable().Where(x => x.Type == TicketEnumType.Birthday && x.UserCode == item.Code && x.QrCode == qrCode).AnyAsync()) { await DbContext.InsertAsync(new TicketEntity { Type = TicketEnumType.Birthday, UserCode = item.Code, OriginalBalance = amount, Balance = amount, QrCode = qrCode, Remark = todayStr + "生日券", TenantId = item.Factory }); } } }); } private static string GetQrCode(string data) { var qrCode = QrCodeConstants.Birthday + data.ToArray().Select(x => { var b = Encoding.ASCII.GetBytes(x.ToString()); int i = b[0]; return Convert.ToString(i); }).Join(string.Empty); return qrCode; } }