feat(tickets): 实现套票购买量和赠送量的分离管理

- 购买量(buyQty)立即设置为可用状态
- 赠送量(giftQty)设置为冻结状态并按计划释放
- 修改总数量计算逻辑,将购买量和赠送量直接相加
- 更新套票记录中的可用数量和冻结数量字段
- 调整释放计划构建方法,仅基于赠送量进行释放规划
- 更新套票日志记录,区分可用量和冻结量的变化追踪
This commit is contained in:
2026-02-04 10:24:46 +08:00
parent 937e707890
commit 58c755b715

View File

@@ -206,10 +206,8 @@ public class GltTicketIssueService {
int giftMultiplier = template.getGiftMultiplier() != null ? template.getGiftMultiplier() : 0;
int giftQty = buyQty * Math.max(giftMultiplier, 0);
int totalQty = giftQty;
if (Boolean.TRUE.equals(template.getIncludeBuyQty())) {
totalQty += buyQty;
}
// 购买量buyQty应立即可用赠送量giftQty进入冻结并按计划释放。
int totalQty = buyQty + giftQty;
if (totalQty <= 0) {
log.info("套票发放跳过计算结果为0 - tenantId={}, orderNo={}, buyQty={}, giftMultiplier={}, includeBuyQty={}",
@@ -226,10 +224,11 @@ public class GltTicketIssueService {
userTicket.setOrderNo(order.getOrderNo());
userTicket.setOrderGoodsId(og.getId());
userTicket.setTotalQty(totalQty);
userTicket.setAvailableQty(0);
userTicket.setFrozenQty(totalQty);
userTicket.setAvailableQty(buyQty);
userTicket.setFrozenQty(giftQty);
userTicket.setUsedQty(0);
userTicket.setReleasedQty(0);
// 初始可用量来自“购买量”,视为已释放
userTicket.setReleasedQty(buyQty);
userTicket.setUserId(order.getUserId());
userTicket.setSortNumber(0);
userTicket.setComments("订单发放套票");
@@ -246,7 +245,7 @@ public class GltTicketIssueService {
if (baseTime == null) {
baseTime = now;
}
List<GltUserTicketRelease> releases = buildReleasePlan(template, userTicket, baseTime, totalQty, now);
List<GltUserTicketRelease> releases = buildReleasePlan(template, userTicket, baseTime, giftQty, now);
if (!releases.isEmpty()) {
gltUserTicketReleaseService.saveBatch(releases);
}
@@ -255,11 +254,11 @@ public class GltTicketIssueService {
GltUserTicketLog issueLog = new GltUserTicketLog();
issueLog.setUserTicketId(userTicket.getId());
issueLog.setChangeType(CHANGE_TYPE_ISSUE);
issueLog.setChangeAvailable(0);
issueLog.setChangeFrozen(totalQty);
issueLog.setChangeAvailable(buyQty);
issueLog.setChangeFrozen(giftQty);
issueLog.setChangeUsed(0);
issueLog.setAvailableAfter(0);
issueLog.setFrozenAfter(totalQty);
issueLog.setAvailableAfter(buyQty);
issueLog.setFrozenAfter(giftQty);
issueLog.setUsedAfter(0);
issueLog.setOrderId(order.getOrderId());
issueLog.setOrderNo(order.getOrderNo());