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