perf: 优化自动分账没有默认分账组时的处理

This commit is contained in:
DaxPay
2024-12-19 11:42:41 +08:00
parent fbd045cd21
commit 8150ecf778
3 changed files with 21 additions and 12 deletions

View File

@@ -36,10 +36,11 @@ public class AllocGroupManager extends BaseManager<AllocGroupMapper, AllocGroup>
/**
* 根据分账组编号查询
*/
public Optional<AllocGroup> findByGroupNo(String groupNo, String appId) {
public Optional<AllocGroup> findByGroupNo(String channel, String groupNo, String appId) {
return this.lambdaQuery()
.eq(AllocGroup::getGroupNo,groupNo)
.eq(AllocGroup::getAppId,appId)
.eq(AllocGroup::getChannel,channel)
.oneOpt();
}

View File

@@ -224,10 +224,12 @@ public class AllocOrderService {
AllocGroup allocationGroup;
if (Objects.nonNull(param.getGroupNo())){
// 指定分账组
allocationGroup = groupManager.findByGroupNo(param.getGroupNo(),param.getAppId()).orElseThrow(() -> new DataErrorException("未查询到分账组"));
allocationGroup = groupManager.findByGroupNo(payOrder.getChannel(), param.getGroupNo(),param.getAppId())
.orElseThrow(() -> new DataErrorException("未查询到分账组"));
} else {
// 默认分账组
allocationGroup = groupManager.findDefaultGroup(payOrder.getChannel(),param.getAppId()).orElseThrow(() -> new DataErrorException("未查询到默认分账组"));
allocationGroup = groupManager.findDefaultGroup(payOrder.getChannel(),param.getAppId())
.orElseThrow(() -> new DataErrorException("未查询到默认分账组"));
}
// 判断通道类型是否一致
if (!Objects.equals(allocationGroup.getChannel(), payOrder.getChannel())){

View File

@@ -3,6 +3,7 @@ package org.dromara.daxpay.service.service.order.pay;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.daxpay.core.exception.DataErrorException;
import org.dromara.daxpay.core.exception.TradeNotExistException;
import org.dromara.daxpay.core.param.allocation.transaction.AllocationParam;
import org.dromara.daxpay.core.util.TradeNoGenerateUtil;
@@ -85,15 +86,20 @@ public class PayOrderService {
* 自动分账
*/
public void autoAllocation(Long id){
PayOrder payOrder = payOrderManager.findById(id).orElseThrow(() -> new TradeNotExistException("支付订单不存在"));
// 是否开启自动完结
AllocConfig allocConfig = allocConfigManager.findByAppId(payOrder.getAppId()).orElse(null);
if (Objects.nonNull(allocConfig)){
paymentAssistService.initMchApp(payOrder.getAppId());
AllocationParam param = new AllocationParam()
.setBizAllocNo("B"+TradeNoGenerateUtil.allocation());
param.setAppId(payOrder.getAppId());
allocationService.start(param, payOrder);
try {
PayOrder payOrder = payOrderManager.findById(id).orElseThrow(() -> new TradeNotExistException("支付订单不存在"));
// 是否开启自动完结
AllocConfig allocConfig = allocConfigManager.findByAppId(payOrder.getAppId()).orElse(null);
if (Objects.nonNull(allocConfig)){
paymentAssistService.initMchApp(payOrder.getAppId());
AllocationParam param = new AllocationParam()
.setBizAllocNo("B"+TradeNoGenerateUtil.allocation());
param.setAppId(payOrder.getAppId());
allocationService.start(param, payOrder);
}
} catch (DataErrorException e) {
// 如果没有默认分账组, 会触发分账失败, 并不需要额外处理
log.warn("自动分账失败", e);
}
}
}