diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java index 39be4910b..7ad82f9bb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java @@ -111,8 +111,18 @@ public interface IPileMerchantInfoService { */ List getDeptIdsByAppId(String appId); + /** + * 通过wechatAppId查询一级运营商的延时支付模式配置 + * @param wechatAppId 微信小程序id + * @return 延时分账模式(0-不延时;1-延时分账) + */ String getDelayModeByWechatAppId(String wechatAppId); + /** + * 通过运营商id查询一级运营商配置的delayMode + * @param merchantId 运营商id + * @return 延时分账模式(0-不延时;1-延时分账) + */ String getDelayModeByMerchantId(String merchantId); /** 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 8afae4b79..b27e9050d 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 @@ -2364,6 +2364,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(dto.getPileSn()); PileStationWhitelist pileStationWhitelist = pileStationWhitelistService.queryWhitelistByMemberId(String.valueOf(pileBasicInfo.getStationId()), dto.getMemberId()); + // 运营商id + String merchantId = pileBasicInfo.getMerchantId() + ""; + if (platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) { // 是平台测试员 accountBalance = new BigDecimal("500"); @@ -2375,7 +2378,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(); } else { // 通过memberId获取账户余额 - MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), pileBasicInfo.getMerchantId() + ""); + MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), merchantId); if (memberVO == null) { throw new BusinessException(ReturnCodeEnum.CODE_GET_MEMBER_ACCOUNT_AMOUNT_ERROR); } @@ -2433,7 +2436,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // payOrderDTO.setLockValue(); // payOrderDTO.setOrderBasicInfo(basicInfo); - payOrder(payOrderDTO); + // payOrder(payOrderDTO); + + String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId); + // 获取处理逻辑 + AbstractOrderLogic orderLogic = OrderLogicFactory.getOrderLogic(mode); + orderLogic.payOrder(payOrderDTO); // 推送小程序启动充电消息 // 通过memberId查询openId diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java index cdf2133f2..7403b397a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java @@ -330,69 +330,51 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { String memberId = dto.getMemberId(); // 查询该会员的余额 在所属运营商的余额 MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), merchantId); - // MemberWalletInfo memberWalletInfo = memberWalletInfoService.selectByMemberId(memberId, merchantId); - BigDecimal totalAccountAmount = memberVO.getTotalAccountAmount(); // 总余额 - + // 总余额 + BigDecimal totalAccountAmount = memberVO.getTotalAccountAmount(); if (totalAccountAmount.compareTo(chargeAmount) < 0) { // 总余额小于充电金额 throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT); } BigDecimal principalPay = chargeAmount; - // 更新会员钱包 + // 更新会员钱包 全部金额都用于支付订单 UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder() .memberId(memberId) .targetMerchantId(merchantId) .type(MemberWalletEnum.TYPE_OUT.getValue()) .subType(MemberWalletEnum.SUBTYPE_PAYMENT_FOR_ORDER.getValue()) - .updatePrincipalBalance(principalPay) // 使用本金支付的金额 + .updatePrincipalBalance(memberVO.getPrincipalBalance()) // 使用本金支付的金额 + .updateGiftBalance(memberVO.getGiftBalance()) // 赠送金额支付 .relatedOrderCode(orderCode) .build(); memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO); - // 查询余额充值有剩余的记录 - // List list = calculateTheBalanceDeductionAmount(memberId, chargeAmount); - // 记录订单支付流水 - BigDecimal payAmt = BigDecimal.ZERO; - List paymentInfos = Lists.newArrayList(); - // for (BalanceDeductionAmountVO balanceDeductionAmountVO : list) { - // String paymentId = balanceDeductionAmountVO.getPaymentId(); - // // 此交易单扣除金额 - // BigDecimal deductionAmount = balanceDeductionAmountVO.getDeductionAmount(); - // payAmt = payAmt.add(deductionAmount); - // - // PaymentInfo paymentInfo = new PaymentInfo(); - // paymentInfo.setPaymentId(paymentId); - // paymentInfo.setAmount(deductionAmount.toString()); - // paymentInfos.add(paymentInfo); - // } - OrderPayRecord build = OrderPayRecord.builder() + OrderPayRecord principalPayRecord = OrderPayRecord.builder() .orderCode(orderCode) .payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()) - .payAmount(principalPay) + .payAmount(memberVO.getPrincipalBalance()) .acquirer(AcquirerEnum.LOCAL.getValue()) - .deductionRecord(JSON.toJSONString(paymentInfos)) .createBy(memberId) + .createTime(DateUtils.getNowDate()) + .delFlag(DelFlagEnum.NORMAL.getValue()) + .build(); + + OrderPayRecord giftPayRecord = OrderPayRecord.builder() + .orderCode(orderCode) + .payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue()) + .payAmount(memberVO.getGiftBalance()) + .acquirer(AcquirerEnum.LOCAL.getValue()) + .createBy(memberId) + .createTime(DateUtils.getNowDate()) .delFlag(DelFlagEnum.NORMAL.getValue()) .build(); // 记录支订单付流水 - List payRecordList = Lists.newArrayList(build); + List payRecordList = Lists.newArrayList(principalPayRecord, giftPayRecord); orderPayRecordService.batchInsert(payRecordList); - // 把消费金额冻结 - // for (OrderPayRecord record : payRecordList) { - // List paymentInfoList = parseDeductionRecord(record.getDeductionRecord()); - // // 循环冻结金额 - // for (PaymentInfo paymentInfo : paymentInfoList) { - // String paymentId = paymentInfo.getPaymentId(); - // BigDecimal amount = new BigDecimal(paymentInfo.getAmount()); - // // 余额支付 临时冻结金额 - // memberAdapayRecordService.updateFreezeAmount(paymentId, amount); - // } - // } - // 余额支付可以直接调支付回调方法 PayOrderSuccessCallbackDTO callbackDTO = PayOrderSuccessCallbackDTO.builder() .orderCode(orderCode)