mirror of
https://gitea.tendokyu.moe/Kayori/MedusaPluginChargeMachine.git
synced 2026-09-22 22:27:54 +03:00
Fully working get last log and get recent log
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Abstractions.Handlers;
|
||||
using Abstractions.SerializationTypes;
|
||||
using Abstractions.Services;
|
||||
using MedusaPluginChargeMachine.Models.Request;
|
||||
using MedusaPluginChargeMachine.Models.Response;
|
||||
using MedusaPluginChargeMachine.Services;
|
||||
@@ -7,7 +8,7 @@ using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace MedusaPluginChargeMachine.Handlers.LA9;
|
||||
|
||||
public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMachineDbContext db)
|
||||
public class GetLastLogEaChargeHandler(ISessionService sessionService, ICardService cardService, ChargeMachineDbContext db)
|
||||
: Handler<GetLastLogRequest, GetLastLogEaChargeResponse>
|
||||
{
|
||||
public override void Configure()
|
||||
@@ -18,8 +19,14 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
|
||||
|
||||
public override async Task<GetLastLogEaChargeResponse> HandleAsync(GetLastLogRequest req, GameModel model)
|
||||
{
|
||||
var today = DateTime.UtcNow.Date;
|
||||
var cardId = (string?)null;
|
||||
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)
|
||||
{
|
||||
@@ -31,13 +38,13 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
|
||||
if (cardId is not null)
|
||||
query = query.Where(h => h.CardId == cardId);
|
||||
|
||||
var todayRows = await query
|
||||
.Where(h => h.OrderDate.Date == today)
|
||||
var dayRows = await query
|
||||
.Where(h => h.OrderDate >= utcDayStart && h.OrderDate < utcDayEnd)
|
||||
.ToListAsync();
|
||||
|
||||
var todayTotal = todayRows.Sum(h => h.ChargeAmount);
|
||||
var dayTotal = dayRows.Sum(h => h.ChargeAmount);
|
||||
|
||||
var headerItems = todayRows
|
||||
var headerItems = dayRows
|
||||
.GroupBy(Denomination)
|
||||
.Select(g => new GetLastLogChargeItem
|
||||
{
|
||||
@@ -47,19 +54,17 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
|
||||
})
|
||||
.ToList();
|
||||
|
||||
var recentItems = await query
|
||||
var resultItems = dayRows
|
||||
.OrderByDescending(h => h.OrderDate)
|
||||
.Take(10)
|
||||
.ToListAsync();
|
||||
|
||||
var resultItems = recentItems
|
||||
.Skip(page * perPage)
|
||||
.Take(perPage)
|
||||
.Select(h => new GetLastLogResultItem
|
||||
{
|
||||
OrderDate = new XrpcString(h.OrderDate.ToString("yyyyMMddHHmmss")),
|
||||
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 XrpcInt(1),
|
||||
CardNo = new XrpcString(MaskCardId(h.CardId))
|
||||
CardType = new XrpcString("1"),
|
||||
CardNo = new XrpcString(cardService.ConvertUidToKonamiId(h.CardId))
|
||||
})
|
||||
.ToList();
|
||||
|
||||
@@ -77,11 +82,11 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
|
||||
{
|
||||
resultItems.Add(new GetLastLogResultItem
|
||||
{
|
||||
OrderDate = new XrpcString(""),
|
||||
OrderDate = new XrpcString("-"),
|
||||
ChargeId = new XrpcString("N1000P"),
|
||||
ChargeNum = new XrpcInt(0),
|
||||
CardType = new XrpcInt(1),
|
||||
CardNo = new XrpcString("")
|
||||
CardType = new XrpcString("1"),
|
||||
CardNo = new XrpcString("-")
|
||||
});
|
||||
}
|
||||
|
||||
@@ -90,7 +95,7 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
|
||||
Status = 0,
|
||||
Header = new GetLastLogEaChargeHeader
|
||||
{
|
||||
Chargedaily = new XrpcInt(todayTotal),
|
||||
Chargedaily = new XrpcInt(dayTotal),
|
||||
Items = headerItems
|
||||
},
|
||||
Result = new GetLastLogEaChargeResult
|
||||
@@ -103,8 +108,4 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
|
||||
private static int Denomination(Entities.ChargeHistory h) =>
|
||||
h.ChargeAmount / Math.Max(h.ChargeNum, 1);
|
||||
|
||||
private static string MaskCardId(string cardId) =>
|
||||
cardId.Length <= 4
|
||||
? new string('*', cardId.Length)
|
||||
: new string('*', cardId.Length - 4) + cardId[^4..];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Abstractions.Handlers;
|
||||
using Abstractions.SerializationTypes;
|
||||
using Abstractions.Services;
|
||||
using MedusaPluginChargeMachine.Models.Request;
|
||||
using MedusaPluginChargeMachine.Models.Response;
|
||||
using MedusaPluginChargeMachine.Services;
|
||||
@@ -7,7 +8,7 @@ using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace MedusaPluginChargeMachine.Handlers.LA9;
|
||||
|
||||
public class GetRecentChargeEaChargeHandler(ISessionService sessionService, ChargeMachineDbContext db)
|
||||
public class GetRecentChargeEaChargeHandler(ISessionService sessionService, ICardService cardService, ChargeMachineDbContext db)
|
||||
: Handler<GetRecentChargeRequest, GetRecentChargeResponse>
|
||||
{
|
||||
public override void Configure()
|
||||
@@ -42,11 +43,11 @@ public class GetRecentChargeEaChargeHandler(ISessionService sessionService, Char
|
||||
|
||||
var items = rows.Select(h => new GetRecentChargeItem
|
||||
{
|
||||
RcvTime = new XrpcString(h.OrderDate.ToString("yyyyMMddHHmmss")),
|
||||
RcvTime = new XrpcString(h.OrderDate.ToLocalTime().ToString("yyyy-MM-dd HH:mm")),
|
||||
ChrgPrice = new XrpcInt(h.ChargeAmount),
|
||||
CardNo = new XrpcString(MaskCardId(h.CardId)),
|
||||
AccCode = new XrpcString(""),
|
||||
RcvStatus = new XrpcInt(0),
|
||||
CardNo = new XrpcString(cardService.ConvertUidToKonamiId(h.CardId)),
|
||||
AccCode = new XrpcString("-"), //TODO maybe later when we add a arcade filter which is per PCBID we can safly show the access code
|
||||
RcvStatus = new XrpcString("0"),
|
||||
FontColor = new XrpcString("#FFFFFF")
|
||||
}).ToList();
|
||||
|
||||
@@ -54,11 +55,11 @@ public class GetRecentChargeEaChargeHandler(ISessionService sessionService, Char
|
||||
{
|
||||
items.Add(new GetRecentChargeItem
|
||||
{
|
||||
RcvTime = new XrpcString(""),
|
||||
RcvTime = new XrpcString("-"),
|
||||
ChrgPrice = new XrpcInt(0),
|
||||
CardNo = new XrpcString(""),
|
||||
AccCode = new XrpcString(""),
|
||||
RcvStatus = new XrpcInt(0),
|
||||
CardNo = new XrpcString("-"),
|
||||
AccCode = new XrpcString("-"),
|
||||
RcvStatus = new XrpcString("0"),
|
||||
FontColor = new XrpcString("#FFFFFF")
|
||||
});
|
||||
}
|
||||
@@ -73,16 +74,10 @@ public class GetRecentChargeEaChargeHandler(ISessionService sessionService, Char
|
||||
|
||||
private string? ResolveCardId(GetRecentChargeRequest req)
|
||||
{
|
||||
if (req.SessionId is not null)
|
||||
{
|
||||
try { return sessionService.GetSession(req.SessionId).refId; }
|
||||
catch { /* fall through to cardid */ }
|
||||
}
|
||||
if (req.SessionId is null) return req.CardId;
|
||||
try { return sessionService.GetSession(req.SessionId).refId; }
|
||||
catch { /* fall through to cardid */ }
|
||||
return req.CardId;
|
||||
}
|
||||
|
||||
private static string MaskCardId(string cardId) =>
|
||||
cardId.Length <= 4
|
||||
? new string('*', cardId.Length)
|
||||
: new string('*', cardId.Length - 4) + cardId[^4..];
|
||||
}
|
||||
|
||||
@@ -7,4 +7,19 @@ public class GetLastLogRequest
|
||||
{
|
||||
[XmlElement("sessid")]
|
||||
public string? SessionId { get; set; }
|
||||
|
||||
[XmlElement("ectype")]
|
||||
public string? EcType { get; set; }
|
||||
|
||||
[XmlElement("targetdate")]
|
||||
public string? TargetDate { get; set; }
|
||||
|
||||
[XmlElement("perpage")]
|
||||
public string? PerPage { get; set; }
|
||||
|
||||
[XmlElement("page")]
|
||||
public string? Page { get; set; }
|
||||
|
||||
[XmlElement("version")]
|
||||
public string? Version { get; set; }
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public record GetLastLogResultItem
|
||||
public XrpcInt ChargeNum { get; set; }
|
||||
|
||||
[XmlElement("cardtype")]
|
||||
public XrpcInt CardType { get; set; }
|
||||
public XrpcString CardType { get; set; }
|
||||
|
||||
[XmlElement("cardno")]
|
||||
public XrpcString CardNo { get; set; }
|
||||
|
||||
@@ -32,7 +32,7 @@ public record GetRecentChargeItem
|
||||
public XrpcString AccCode { get; set; }
|
||||
|
||||
[XmlElement("rcvstatus")]
|
||||
public XrpcInt RcvStatus { get; set; }
|
||||
public XrpcString RcvStatus { get; set; }
|
||||
|
||||
[XmlElement("fontcolor")]
|
||||
public XrpcString FontColor { get; set; }
|
||||
|
||||
Reference in New Issue
Block a user