软件购买流程修改,新的购买在前序记录上累加有效时间

This commit is contained in:
gaoqr
2025-09-23 16:22:04 +08:00
parent 8b1421310a
commit 309d016fd1
2 changed files with 13 additions and 22 deletions
@@ -491,7 +491,6 @@ public class ErrorCodeConstants {
//=========== 产品延期管理 1-002-049-000 ============
public static final ErrorCode PRODUCT_PURCHASE_NO_EXIST = new ErrorCode(1_002_049_001, "当前购买记录不存在,请检查");
public static final ErrorCode PRODUCT_PURCHASE_ENDTIME_BEFORE_DELAYTIME_ERROR = new ErrorCode(1_002_049_002, "当前订购的产品延期时间{}超过续费时间{},请调整续费时长");
public static final ErrorCode PRODUCT_PURCHASE_ENDTIME_NOT_ENOUGH_ERROR = new ErrorCode(1_002_049_003, "本次订购的产品结束时间{}早于当前有效产品结束时间{},请勿重复订购");
//=========== 手工调账管理 1-002-050-000 ============
public static final ErrorCode RECHARGE_GIFT_MEANWHILE_EMPTY_ERROR = new ErrorCode(1_002_050_001, "充值金额、赠送金额不能同时为空");
@@ -44,7 +44,6 @@ import static com.cf.imes.module.system.enums.ErrorCodeConstants.PAY_PRODUCT_BAL
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PAY_PRODUCT_GIFT_BALANCE_INSUFFICIENT;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCTS_DETAIL_DURATION_UNIT_NOT_SUPPORT;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCT_PURCHASE_ENDTIME_BEFORE_DELAYTIME_ERROR;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCT_PURCHASE_ENDTIME_NOT_ENOUGH_ERROR;
/**
* 产品购买类型处理器
@@ -74,6 +73,8 @@ public class PayProductProcessor {
private PurchaseRecordDO previousPurchaseRecord;
private LocalDate startTime = LocalDate.now();
public PayProductProcessor(ProductsDO productsDO, ProductsDetailDO productsDetailDO, PurchaseRecordDO orgInitialPurchaseRecord, PreviouProductDelayRespVO previouProductDelayRespVO,
OrganAmountDO organAmountDO, Long organId, ChenfengPayConfig payConfig, MybatisIdProperties mybatisIdProperties) {
this.productsDO = productsDO;
@@ -82,6 +83,8 @@ public class PayProductProcessor {
this.previouProductDelayRespVO = previouProductDelayRespVO;
if (ObjectUtil.isNotNull(previouProductDelayRespVO.getPreviouPurchaseRecord())) {
previousPurchaseRecord = previouProductDelayRespVO.getPreviouPurchaseRecord();
// 如果有前置购买记录,那么新的开始时间是上一次订购的结束时间
startTime = previousPurchaseRecord.getEndTime();
}
this.organAmountDO = organAmountDO;
this.organId = organId;
@@ -160,7 +163,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayProductChannelCodeEnum.BALANCE_ONLY.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -218,7 +221,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayProductChannelCodeEnum.BALANCE_ONLY.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -273,7 +276,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayProductChannelCodeEnum.BALANCE_ONLY.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -314,7 +317,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayProductChannelCodeEnum.BALANCE_ONLY.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -360,7 +363,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayProductChannelCodeEnum.BALANCE_AND_GIFT.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -438,7 +441,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayChannelCodeEnum.ALIPAY_PC.equals(payChannelCodeEnum) ? PayProductChannelCodeEnum.BALANCE_AND_GIFT_AND_ALIPAY.getCode() : PayProductChannelCodeEnum.BALANCE_AND_GIFT_AND_WECHAT.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -518,7 +521,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayChannelCodeEnum.ALIPAY_PC.equals(payChannelCodeEnum) ? PayProductChannelCodeEnum.GIFT_AND_ALIPAY.getCode() : PayProductChannelCodeEnum.GIFT_AND_WECHAT.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -600,7 +603,7 @@ public class PayProductProcessor {
.purchaseDurationUnit(productsDetailDO.getDurationUnit())
.giftDuration(productsDetailDO.getGiftDuration())
.giftDurationUnit(productsDetailDO.getGiftDurationUnit())
.startTime(LocalDate.now())
.startTime(startTime)
.paymentMethod(PayProductChannelCodeEnum.BALANCE_AND_GIFT.getCode())
.totalAmount(price)
.originalAmount(productsDetailDO.getCurrentPrice())
@@ -721,17 +724,6 @@ public class PayProductProcessor {
endTime = calculateDelayEndTime(startTime, endTime, delayRespVOList);
}
PurchaseRecordDO previouPurchaseRecord = previouProductDelayRespVO.getPreviouPurchaseRecord();
if (ObjectUtil.isNotNull(previouPurchaseRecord)) {
// 如果本次订购的时间小于上次订购的结束时间,提示请勿重复订购
LocalDate previouPurchaseRecordEndTime = previouPurchaseRecord.getEndTime();
if (endTime.isBefore(previouPurchaseRecordEndTime)) {
throw ServiceExceptionUtil.exception(PRODUCT_PURCHASE_ENDTIME_NOT_ENOUGH_ERROR,
LocalDateTimeUtil.format(endTime, DatePattern.NORM_DATE_PATTERN),
LocalDateTimeUtil.format(previouPurchaseRecordEndTime, DatePattern.NORM_DATE_PATTERN));
}
}
return endTime;
}
@@ -762,7 +754,7 @@ public class PayProductProcessor {
* @param delayRecordsList 延期列表
* @return
*/
private static LocalDate calculateDelayEndTime(LocalDate startTime, LocalDate endTime, List<ProductDelayRespVO> delayRecordsList) {
private LocalDate calculateDelayEndTime(LocalDate startTime, LocalDate endTime, List<ProductDelayRespVO> delayRecordsList) {
// 筛选出延期列表结束时间排序最早和最晚的
ProductDelayRespVO earliestDelayVO = delayRecordsList.stream().min(Comparator.comparing(ProductDelayRespVO::getEndTime)).get();
ProductDelayRespVO lastestDelayVO = delayRecordsList.stream().max(Comparator.comparing(ProductDelayRespVO::getDelayTime)).get();