mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-13 06:20:07 +08:00
交易分账 重构
This commit is contained in:
@@ -5,6 +5,7 @@ import com.jsowell.common.constant.CacheConstants;
|
|||||||
import com.jsowell.common.constant.Constants;
|
import com.jsowell.common.constant.Constants;
|
||||||
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
|
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
|
||||||
import com.jsowell.common.core.redis.RedisCache;
|
import com.jsowell.common.core.redis.RedisCache;
|
||||||
|
import com.jsowell.common.enums.MemberWalletEnum;
|
||||||
import com.jsowell.common.util.DateUtils;
|
import com.jsowell.common.util.DateUtils;
|
||||||
import com.jsowell.common.util.SecurityUtils;
|
import com.jsowell.common.util.SecurityUtils;
|
||||||
import com.jsowell.common.util.StringUtils;
|
import com.jsowell.common.util.StringUtils;
|
||||||
@@ -183,7 +184,7 @@ public class MemberBasicInfoServiceImpl implements IMemberBasicInfoService {
|
|||||||
|
|
||||||
// 更新本金金额
|
// 更新本金金额
|
||||||
if (updatePrincipalBalance != null) {
|
if (updatePrincipalBalance != null) {
|
||||||
if (StringUtils.equals(dto.getType(), "2")) {
|
if (StringUtils.equals(dto.getType(), MemberWalletEnum.TYPE_OUT.getValue())) {
|
||||||
// 扣款 转为负数
|
// 扣款 转为负数
|
||||||
updatePrincipalBalance = updatePrincipalBalance.negate();
|
updatePrincipalBalance = updatePrincipalBalance.negate();
|
||||||
}
|
}
|
||||||
@@ -210,7 +211,7 @@ public class MemberBasicInfoServiceImpl implements IMemberBasicInfoService {
|
|||||||
|
|
||||||
// 更新赠送金额
|
// 更新赠送金额
|
||||||
if (updateGiftBalance != null) {
|
if (updateGiftBalance != null) {
|
||||||
if (StringUtils.equals(dto.getType(), "2")) {
|
if (StringUtils.equals(dto.getType(), MemberWalletEnum.TYPE_OUT.getValue())) {
|
||||||
// 扣款 转为负数
|
// 扣款 转为负数
|
||||||
updateGiftBalance = updateGiftBalance.negate();
|
updateGiftBalance = updateGiftBalance.negate();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2775,7 +2775,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
Map<String, Object> resultMap = Maps.newHashMap();
|
Map<String, Object> resultMap = Maps.newHashMap();
|
||||||
if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) {
|
if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) {
|
||||||
// 余额支付
|
// 余额支付
|
||||||
balancePayOrder(dto);
|
// balancePayOrder(dto);
|
||||||
|
balancePayOrderV2(dto);
|
||||||
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
|
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
|
||||||
// 2023-07-11 全部改为汇付支付
|
// 2023-07-11 全部改为汇付支付
|
||||||
dto.setGoodsTitle("充电费用");
|
dto.setGoodsTitle("充电费用");
|
||||||
@@ -2995,7 +2996,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 余额支付订单逻辑
|
* 余额支付订单逻辑
|
||||||
*
|
* 去除赠送金额相关的代码
|
||||||
* @param dto
|
* @param dto
|
||||||
*/
|
*/
|
||||||
private void balancePayOrder(PayOrderDTO dto) {
|
private void balancePayOrder(PayOrderDTO dto) {
|
||||||
@@ -3090,6 +3091,75 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void balancePayOrderV2(PayOrderDTO dto) {
|
||||||
|
String orderCode = dto.getOrderCode(); // 订单编号
|
||||||
|
BigDecimal chargeAmount = dto.getPayAmount(); // 支付金额
|
||||||
|
// 查询该会员的余额
|
||||||
|
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId());
|
||||||
|
BigDecimal totalAccountAmount = memberVO.getPrincipalBalance();
|
||||||
|
|
||||||
|
if (totalAccountAmount.compareTo(chargeAmount) < 0) {
|
||||||
|
// 总余额小于充电金额
|
||||||
|
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
|
||||||
|
}
|
||||||
|
BigDecimal principalPay = chargeAmount;
|
||||||
|
|
||||||
|
// 更新会员钱包
|
||||||
|
UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder()
|
||||||
|
.memberId(dto.getMemberId())
|
||||||
|
.type(MemberWalletEnum.TYPE_OUT.getValue())
|
||||||
|
.subType(MemberWalletEnum.SUBTYPE_PAYMENT_FOR_ORDER.getValue())
|
||||||
|
.updatePrincipalBalance(principalPay) // 使用本金支付的金额
|
||||||
|
.relatedOrderCode(orderCode)
|
||||||
|
.build();
|
||||||
|
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||||
|
|
||||||
|
// 查询余额充值有剩余的记录
|
||||||
|
List<BalanceDeductionAmountVO> list = calculateTheBalanceDeductionAmount(dto.getMemberId(), chargeAmount);
|
||||||
|
// 记录支订单付流水
|
||||||
|
List<OrderPayRecord> payRecordList = Lists.newArrayList();
|
||||||
|
for (BalanceDeductionAmountVO balanceDeductionAmountVO : list) {
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("paymentId", balanceDeductionAmountVO.getPaymentId());
|
||||||
|
json.put("amount", balanceDeductionAmountVO.getDeductionAmount());
|
||||||
|
// 记录流水
|
||||||
|
payRecordList.add(OrderPayRecord.builder()
|
||||||
|
.orderCode(orderCode)
|
||||||
|
.payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())
|
||||||
|
.payAmount(balanceDeductionAmountVO.getDeductionAmount())
|
||||||
|
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||||
|
.deductionRecord(json.toJSONString())
|
||||||
|
.createBy(dto.getMemberId())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
// 订单支付流水入库
|
||||||
|
if (CollectionUtils.isNotEmpty(payRecordList)) {
|
||||||
|
orderPayRecordService.batchInsert(payRecordList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 余额支付可以直接调支付回调方法
|
||||||
|
PayOrderSuccessCallbackDTO callbackDTO = PayOrderSuccessCallbackDTO.builder()
|
||||||
|
.orderCode(orderCode)
|
||||||
|
.payAmount(chargeAmount)
|
||||||
|
.payMode(dto.getPayMode())
|
||||||
|
.startMode(dto.getStartMode())
|
||||||
|
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||||
|
.build();
|
||||||
|
payOrderSuccessCallback(callbackDTO);
|
||||||
|
|
||||||
|
// 余额支付订单 记录会员交易流水
|
||||||
|
MemberTransactionRecord record = MemberTransactionRecord.builder()
|
||||||
|
.orderCode(orderCode)
|
||||||
|
.scenarioType(ScenarioEnum.ORDER.getValue())
|
||||||
|
.memberId(memberVO.getMemberId())
|
||||||
|
.actionType(ActionTypeEnum.FORWARD.getValue())
|
||||||
|
.payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue())
|
||||||
|
.paymentInstitutions(PaymentInstitutionsEnum.LOCAL_ACCOUNTS.getValue())
|
||||||
|
.amount(dto.getPayAmount()) // 单位元
|
||||||
|
.build();
|
||||||
|
memberTransactionRecordService.insertSelective(record);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验充电桩相关的信息
|
* 校验充电桩相关的信息
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user