diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java index b46d7f128..eb6ad1e84 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java @@ -22,6 +22,7 @@ import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.adapay.AdapayStatusEnum; +import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.AdapayUtil; @@ -105,7 +106,8 @@ public class AdapayService { // 封装对象 String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额 // String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账 - // String payMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId()); + String delayMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId()); + String payMode = MerchantDelayModeEnum.getAdapayPayMode(delayMode); CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam(); createAdaPaymentParam.setOrder_no(dto.getOrderCode()); createAdaPaymentParam.setPay_amt(amount); 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 e12ddd643..7609afcf6 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 @@ -1,6 +1,7 @@ package com.jsowell.pile.service.orderlogic; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -27,6 +28,7 @@ import com.jsowell.pile.vo.web.UpdateMemberBalanceDTO; import com.jsowell.wxpay.dto.WechatSendMsgDTO; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; @@ -80,9 +82,12 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { /** * 余额支付订单 */ + @Transactional(rollbackFor = Exception.class) public void balancePayOrder(PayOrderDTO dto) { - String orderCode = dto.getOrderCode(); // 订单编号 - BigDecimal chargeAmount = dto.getPayAmount(); // 支付金额 + // 订单编号 + String orderCode = dto.getOrderCode(); + // 支付金额 + BigDecimal chargeAmount = dto.getPayAmount(); // 查询该会员的余额 MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId()); BigDecimal totalAccountAmount = memberVO.getPrincipalBalance(); @@ -105,35 +110,57 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { // 查询余额充值有剩余的记录 List list = calculateTheBalanceDeductionAmount(dto.getMemberId(), chargeAmount); - // 记录支订单付流水 - List payRecordList = Lists.newArrayList(); + + // 记录订单支付流水 + JSONArray jsonArray = new JSONArray(); + BigDecimal payAmt = BigDecimal.ZERO; for (BalanceDeductionAmountVO balanceDeductionAmountVO : list) { String paymentId = balanceDeductionAmountVO.getPaymentId(); + // 此交易单扣除金额 BigDecimal deductionAmount = balanceDeductionAmountVO.getDeductionAmount(); + payAmt = payAmt.add(deductionAmount); JSONObject json = new JSONObject(); json.put("paymentId", paymentId); json.put("amount", deductionAmount); - // 记录流水 - payRecordList.add(OrderPayRecord.builder() - .orderCode(orderCode) - .payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()) - .payAmount(deductionAmount) - .acquirer(AcquirerEnum.LOCAL.getValue()) - .deductionRecord(json.toJSONString()) - .createBy(dto.getMemberId()) - .delFlag(DelFlagEnum.NORMAL.getValue()) - .build()); + jsonArray.add(json); } + OrderPayRecord build = OrderPayRecord.builder() + .orderCode(orderCode) + .payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()) + .payAmount(payAmt) + .acquirer(AcquirerEnum.LOCAL.getValue()) + .deductionRecord(jsonArray.toJSONString()) + .createBy(dto.getMemberId()) + .delFlag(DelFlagEnum.NORMAL.getValue()) + .build(); + + // 记录支订单付流水 + List payRecordList = Lists.newArrayList(build); + // 订单支付流水入库 if (CollectionUtils.isNotEmpty(payRecordList)) { orderPayRecordService.batchInsert(payRecordList); + + // 把消费金额冻结 for (OrderPayRecord record : payRecordList) { String deductionRecord = record.getDeductionRecord(); - JSONObject jsonObject = JSON.parseObject(deductionRecord); - String paymentId = jsonObject.getString("paymentId"); - BigDecimal amount = jsonObject.getBigDecimal("amount"); - // 余额支付 临时冻结金额 - memberAdapayRecordService.updateFreezeAmount(paymentId, amount); + Object object = JSON.parse(deductionRecord); + + // 都放入list里 + List arr = Lists.newArrayList(); + if (object instanceof JSONArray) { + arr.addAll(((JSONArray) object).toList(JSONObject.class)); + } else { + arr.add((JSONObject) object); + } + + // 循环冻结金额 + for (JSONObject jsonObject : arr) { + String paymentId = jsonObject.getString("paymentId"); + BigDecimal amount = jsonObject.getBigDecimal("amount"); + // 余额支付 临时冻结金额 + memberAdapayRecordService.updateFreezeAmount(paymentId, amount); + } } }