From 309d016fd1af00a5a5959fc423e2b73967fa90eb Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Tue, 23 Sep 2025 16:22:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AF=E4=BB=B6=E8=B4=AD=E4=B9=B0=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=96=B0=E7=9A=84=E8=B4=AD?= =?UTF-8?q?=E4=B9=B0=E5=9C=A8=E5=89=8D=E5=BA=8F=E8=AE=B0=E5=BD=95=E4=B8=8A?= =?UTF-8?q?=E7=B4=AF=E5=8A=A0=E6=9C=89=E6=95=88=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/enums/ErrorCodeConstants.java | 1 - .../service/pay/PayProductProcessor.java | 34 +++++++------------ 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 28e5a16e0..2e3856c58 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -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, "充值金额、赠送金额不能同时为空"); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayProductProcessor.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayProductProcessor.java index e3971333a..8d31f2ef4 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayProductProcessor.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayProductProcessor.java @@ -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 delayRecordsList) { + private LocalDate calculateDelayEndTime(LocalDate startTime, LocalDate endTime, List delayRecordsList) { // 筛选出延期列表结束时间排序最早和最晚的 ProductDelayRespVO earliestDelayVO = delayRecordsList.stream().min(Comparator.comparing(ProductDelayRespVO::getEndTime)).get(); ProductDelayRespVO lastestDelayVO = delayRecordsList.stream().max(Comparator.comparing(ProductDelayRespVO::getDelayTime)).get();