mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-08-09 15:53:44 +08:00
修复余额不足仍可启动充电问题
统一启动金额优先级并在启动前校验会员余额。 同步完成订单创建和余额支付后再返回鉴权成功,并增加支付凭证补偿、异常停机和结算保护。
This commit is contained in:
@@ -8,6 +8,7 @@ import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.controller.BaseController;
|
||||
import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.enums.adapay.AdapayPayChannelEnum;
|
||||
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
|
||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.response.RestApiResponse;
|
||||
@@ -125,7 +126,8 @@ public class PayController extends BaseController {
|
||||
if (StringUtils.isBlank(memberId)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_TOKEN_ERROR);
|
||||
}
|
||||
if (dto.getPayAmount() == null) {
|
||||
if (dto.getPayAmount() == null
|
||||
&& !StringUtils.equals(OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue(), dto.getPayMode())) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR);
|
||||
}
|
||||
dto.setMemberId(memberId);
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.jsowell.pile.util;
|
||||
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class ChargeAmountUtilsTest {
|
||||
|
||||
@Test
|
||||
void resolveStartupAmount_shouldPreferFrontendAmount() {
|
||||
BigDecimal amount = ChargeAmountUtils.resolveStartupAmount(
|
||||
new BigDecimal("100"), new BigDecimal("300"));
|
||||
|
||||
assertEquals(new BigDecimal("100"), amount);
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveStartupAmount_shouldUseMemberDefaultWhenFrontendAmountIsNull() {
|
||||
BigDecimal amount = ChargeAmountUtils.resolveStartupAmount(null, new BigDecimal("300"));
|
||||
|
||||
assertEquals(new BigDecimal("300"), amount);
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveStartupAmount_shouldUseCodeDefaultWhenOtherAmountsAreUnavailable() {
|
||||
BigDecimal amount = ChargeAmountUtils.resolveStartupAmount(null, BigDecimal.ZERO);
|
||||
|
||||
assertEquals(Constants.BALANCE_PAY_MAX_AMOUNT_NEW, amount);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user