diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java index 4aa6335c4..0f3166705 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java @@ -5,6 +5,7 @@ import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.vo.AuthorizedDeptVO; import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.SecurityUtils; import com.jsowell.common.util.StringUtils; @@ -183,7 +184,7 @@ public class MemberBasicInfoServiceImpl implements IMemberBasicInfoService { // 更新本金金额 if (updatePrincipalBalance != null) { - if (StringUtils.equals(dto.getType(), "2")) { + if (StringUtils.equals(dto.getType(), MemberWalletEnum.TYPE_OUT.getValue())) { // 扣款 转为负数 updatePrincipalBalance = updatePrincipalBalance.negate(); } @@ -210,7 +211,7 @@ public class MemberBasicInfoServiceImpl implements IMemberBasicInfoService { // 更新赠送金额 if (updateGiftBalance != null) { - if (StringUtils.equals(dto.getType(), "2")) { + if (StringUtils.equals(dto.getType(), MemberWalletEnum.TYPE_OUT.getValue())) { // 扣款 转为负数 updateGiftBalance = updateGiftBalance.negate(); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 2a1d4d722..d06f7a13f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -2775,7 +2775,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { Map resultMap = Maps.newHashMap(); 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())) { // 2023-07-11 全部改为汇付支付 dto.setGoodsTitle("充电费用"); @@ -2995,7 +2996,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { /** * 余额支付订单逻辑 - * + * 去除赠送金额相关的代码 * @param 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 list = calculateTheBalanceDeductionAmount(dto.getMemberId(), chargeAmount); + // 记录支订单付流水 + List 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); + } + /** * 校验充电桩相关的信息 *