mirror of
https://gitea.tendokyu.moe/Kayori/MedusaPluginChargeMachine.git
synced 2026-10-05 05:27:59 +03:00
112 lines
3.7 KiB
C#
112 lines
3.7 KiB
C#
using Abstractions.Handlers;
|
|
using Abstractions.SerializationTypes;
|
|
using Abstractions.Services;
|
|
using MedusaPluginChargeMachine.Models.Request;
|
|
using MedusaPluginChargeMachine.Models.Response;
|
|
using MedusaPluginChargeMachine.Services;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace MedusaPluginChargeMachine.Handlers.LA9;
|
|
|
|
public class GetLastLogEaChargeHandler(ISessionService sessionService, ICardService cardService, ChargeMachineDbContext db)
|
|
: Handler<GetLastLogRequest, GetLastLogEaChargeResponse>
|
|
{
|
|
public override void Configure()
|
|
{
|
|
Module("eacharge");
|
|
Method("getlastlog");
|
|
}
|
|
|
|
public override async Task<GetLastLogEaChargeResponse> HandleAsync(GetLastLogRequest req, GameModel model)
|
|
{
|
|
var targetDate = DateTime.TryParse(req.TargetDate, out var td) ? td.Date : DateTime.Now.Date;
|
|
var utcDayStart = targetDate.ToUniversalTime();
|
|
var utcDayEnd = utcDayStart.AddDays(1);
|
|
|
|
var page = int.TryParse(req.Page, out var p) ? Math.Max(0, p) : 0;
|
|
var perPage = int.TryParse(req.PerPage, out var pp) ? Math.Max(1, pp) : 8;
|
|
|
|
string? cardId = null;
|
|
|
|
if (req.SessionId is not null)
|
|
{
|
|
var session = sessionService.GetSession(req.SessionId);
|
|
cardId = session.refId;
|
|
}
|
|
|
|
var query = db.ChargeHistories.AsQueryable();
|
|
if (cardId is not null)
|
|
query = query.Where(h => h.CardId == cardId);
|
|
|
|
var dayRows = await query
|
|
.Where(h => h.OrderDate >= utcDayStart && h.OrderDate < utcDayEnd)
|
|
.ToListAsync();
|
|
|
|
var dayTotal = dayRows.Sum(h => h.ChargeAmount);
|
|
|
|
var headerItems = dayRows
|
|
.GroupBy(Denomination)
|
|
.Select(g => new GetLastLogChargeItem
|
|
{
|
|
ChargeId = new XrpcString($"N{g.Key}P"),
|
|
ChargeNum = new XrpcInt(g.Sum(h => h.ChargeNum)),
|
|
ChargeAmount = new XrpcInt(g.Sum(h => h.ChargeAmount))
|
|
})
|
|
.ToList();
|
|
|
|
var resultItems = dayRows
|
|
.OrderByDescending(h => h.OrderDate)
|
|
.Skip(page * perPage)
|
|
.Take(perPage)
|
|
.Select(h => new GetLastLogResultItem
|
|
{
|
|
OrderDate = new XrpcString(h.OrderDate.ToLocalTime().ToString("yyyy-MM-dd HH:mm")),
|
|
ChargeId = new XrpcString($"N{Denomination(h)}P"),
|
|
ChargeNum = new XrpcInt(h.ChargeNum),
|
|
CardType = new XrpcString("1"),
|
|
CardNo = new XrpcString(cardService.ConvertUidToKonamiId(h.CardId))
|
|
})
|
|
.ToList();
|
|
|
|
if (headerItems.Count == 0)
|
|
{
|
|
headerItems.Add(new GetLastLogChargeItem
|
|
{
|
|
ChargeId = new XrpcString("N1000P"),
|
|
ChargeNum = new XrpcInt(0),
|
|
ChargeAmount = new XrpcInt(0)
|
|
});
|
|
}
|
|
|
|
if (resultItems.Count == 0)
|
|
{
|
|
resultItems.Add(new GetLastLogResultItem
|
|
{
|
|
OrderDate = new XrpcString("-"),
|
|
ChargeId = new XrpcString("N1000P"),
|
|
ChargeNum = new XrpcInt(0),
|
|
CardType = new XrpcString("1"),
|
|
CardNo = new XrpcString("-")
|
|
});
|
|
}
|
|
|
|
return new GetLastLogEaChargeResponse
|
|
{
|
|
Status = 0,
|
|
Header = new GetLastLogEaChargeHeader
|
|
{
|
|
Chargedaily = new XrpcInt(dayTotal),
|
|
Items = headerItems
|
|
},
|
|
Result = new GetLastLogEaChargeResult
|
|
{
|
|
Items = resultItems
|
|
}
|
|
};
|
|
}
|
|
|
|
private static int Denomination(Entities.ChargeHistory h) =>
|
|
h.ChargeAmount / Math.Max(h.ChargeNum, 1);
|
|
|
|
}
|