feat(tickets): 实现套票购买量和赠送量的分离管理
- 购买量(buyQty)立即设置为可用状态 - 赠送量(giftQty)设置为冻结状态并按计划释放 - 修改总数量计算逻辑,将购买量和赠送量直接相加 - 更新套票记录中的可用数量和冻结数量字段 - 调整释放计划构建方法,仅基于赠送量进行释放规划 - 更新套票日志记录,区分可用量和冻结量的变化追踪
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user