65 lines
2.2 KiB
C#
65 lines
2.2 KiB
C#
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
|
|
{
|
|
/// <inheritdoc />
|
|
public BirthdayTicketService(IDbContext dbContext) : base(dbContext)
|
|
{
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override async Task CreateAsync()
|
|
{
|
|
await DbContext.IgnoreAsync<ITenantId>(async () =>
|
|
{
|
|
var today = DateTime.Today;
|
|
var userCodes = await DbContext.Queryable<GainfoEntity>()
|
|
.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<TicketEntity>().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;
|
|
}
|
|
} |