mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-10-13 21:30:25 +00:00
feat 分账同步功能开发
This commit is contained in:
@@ -1,29 +1,37 @@
|
||||
package org.dromara.daxpay.channel.alipay.service.allocation;
|
||||
|
||||
import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
|
||||
import cn.bootx.platform.common.mybatisplus.function.CollectorsFunction;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayResponse;
|
||||
import com.alipay.api.domain.AlipayTradeOrderSettleModel;
|
||||
import com.alipay.api.domain.OpenApiRoyaltyDetailInfoPojo;
|
||||
import com.alipay.api.domain.SettleExtendParams;
|
||||
import com.alipay.api.domain.*;
|
||||
import com.alipay.api.request.AlipayTradeOrderSettleQueryRequest;
|
||||
import com.alipay.api.request.AlipayTradeOrderSettleRequest;
|
||||
import com.alipay.api.response.AlipayTradeOrderSettleQueryResponse;
|
||||
import com.alipay.api.response.AlipayTradeOrderSettleResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.daxpay.channel.alipay.code.AliPayCode;
|
||||
import org.dromara.daxpay.channel.alipay.service.config.AliPayConfigService;
|
||||
import org.dromara.daxpay.core.enums.AllocDetailResultEnum;
|
||||
import org.dromara.daxpay.core.exception.OperationFailException;
|
||||
import org.dromara.daxpay.core.exception.TradeFailException;
|
||||
import org.dromara.daxpay.core.util.PayUtil;
|
||||
import org.dromara.daxpay.service.bo.allocation.AllocStartResultBo;
|
||||
import org.dromara.daxpay.service.bo.allocation.AllocSyncResultBo;
|
||||
import org.dromara.daxpay.service.entity.allocation.transaction.AllocDetail;
|
||||
import org.dromara.daxpay.service.entity.allocation.transaction.AllocOrder;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -60,7 +68,7 @@ public class AliPayAllocationService {
|
||||
model.setRoyaltyParameters(royaltyParameters);
|
||||
AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest();
|
||||
request.setBizModel(model);
|
||||
AlipayTradeOrderSettleResponse response = null;
|
||||
AlipayTradeOrderSettleResponse response;
|
||||
try {
|
||||
response = aliPayConfigService.execute(request);
|
||||
this.verifyErrorMsg(response);
|
||||
@@ -79,7 +87,7 @@ public class AliPayAllocationService {
|
||||
public void finish(AllocOrder allocOrder, List<AllocDetail> orderDetails){
|
||||
// 分账主体参数
|
||||
AlipayTradeOrderSettleModel model = new AlipayTradeOrderSettleModel();
|
||||
model.setOutRequestNo(String.valueOf(allocOrder.getAllocNo()));
|
||||
model.setOutRequestNo(allocOrder.getAllocNo());
|
||||
model.setTradeNo(allocOrder.getOutOrderNo());
|
||||
model.setRoyaltyMode(AliPayCode.ALLOC_ASYNC);
|
||||
// 分账完结参数
|
||||
@@ -113,37 +121,40 @@ public class AliPayAllocationService {
|
||||
/**
|
||||
* 分账状态同步
|
||||
*/
|
||||
// @SneakyThrows
|
||||
// public AllocRemoteSyncResult sync(AllocOrder allocOrder, List<AllocDetail> allocOrderDetails, AliPayConfig config){
|
||||
// AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config);
|
||||
// AlipayTradeOrderSettleQueryModel model = new AlipayTradeOrderSettleQueryModel();
|
||||
// model.setTradeNo(allocOrder.getOutOrderNo());
|
||||
// model.setOutRequestNo(allocOrder.getAllocNo());
|
||||
// AlipayTradeOrderSettleQueryRequest request = new AlipayTradeOrderSettleQueryRequest();
|
||||
// request.setBizModel(model);
|
||||
// AlipayTradeOrderSettleQueryResponse response = alipayClient.execute(request);
|
||||
// // 验证
|
||||
// this.verifyErrorMsg(response);
|
||||
// Map<String, AllocOrderDetail> detailMap = allocOrderDetails.stream()
|
||||
// .collect(Collectors.toMap(AllocOrderDetail::getReceiverAccount, Function.identity(), CollectorsFunction::retainLatest));
|
||||
// List<RoyaltyDetail> royaltyDetailList = response.getRoyaltyDetailList();
|
||||
// for (RoyaltyDetail receiver : royaltyDetailList) {
|
||||
// AllocOrderDetail detail = detailMap.get(receiver.getTransIn());
|
||||
// if (Objects.nonNull(detail)) {
|
||||
// detail.setResult(this.getDetailResultEnum(receiver.getState()).getCode());
|
||||
// detail.setErrorCode(receiver.getErrorCode());
|
||||
// detail.setErrorMsg(receiver.getErrorDesc());
|
||||
// // 如果是完成, 更新时间
|
||||
// if (AllocDetailResultEnum.SUCCESS.getCode().equals(detail.getResult())){
|
||||
// LocalDateTime finishTime = LocalDateTimeUtil.of(receiver.getExecuteDt());
|
||||
// detail.setFinishTime(finishTime)
|
||||
// .setErrorMsg(null)
|
||||
// .setErrorCode(null);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return new AllocRemoteSyncResult().setSyncInfo(JSONUtil.toJsonStr(response));
|
||||
// }
|
||||
public AllocSyncResultBo sync(AllocOrder allocOrder, List<AllocDetail> allocOrderDetails){
|
||||
AlipayTradeOrderSettleQueryModel model = new AlipayTradeOrderSettleQueryModel();
|
||||
model.setOutRequestNo(allocOrder.getAllocNo());
|
||||
model.setTradeNo(allocOrder.getOutOrderNo());
|
||||
AlipayTradeOrderSettleQueryRequest request = new AlipayTradeOrderSettleQueryRequest();
|
||||
request.setBizModel(model);
|
||||
AlipayTradeOrderSettleQueryResponse response;
|
||||
try {
|
||||
response = aliPayConfigService.execute(request);
|
||||
} catch (AlipayApiException e) {
|
||||
throw new OperationFailException(e.getMessage());
|
||||
}
|
||||
// 验证
|
||||
this.verifyErrorMsg(response);
|
||||
Map<String, AllocDetail> detailMap = allocOrderDetails.stream()
|
||||
.collect(Collectors.toMap(AllocDetail::getReceiverAccount, Function.identity(), CollectorsFunction::retainLatest));
|
||||
List<RoyaltyDetail> royaltyDetailList = response.getRoyaltyDetailList();
|
||||
for (RoyaltyDetail receiver : royaltyDetailList) {
|
||||
var detail = detailMap.get(receiver.getTransIn());
|
||||
if (Objects.nonNull(detail)) {
|
||||
detail.setResult(this.getDetailResultEnum(receiver.getState()).getCode());
|
||||
detail.setErrorCode(receiver.getErrorCode());
|
||||
detail.setErrorMsg(receiver.getErrorDesc());
|
||||
// 如果是完成, 更新时间
|
||||
if (AllocDetailResultEnum.SUCCESS.getCode().equals(detail.getResult())){
|
||||
LocalDateTime finishTime = LocalDateTimeUtil.of(receiver.getExecuteDt());
|
||||
detail.setFinishTime(finishTime)
|
||||
.setErrorMsg(null)
|
||||
.setErrorCode(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
return new AllocSyncResultBo().setSyncInfo(JSONUtil.toJsonStr(response));
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证错误信息
|
||||
|
@@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.daxpay.channel.alipay.service.allocation.AliPayAllocationService;
|
||||
import org.dromara.daxpay.core.enums.ChannelEnum;
|
||||
import org.dromara.daxpay.service.bo.allocation.AllocStartResultBo;
|
||||
import org.dromara.daxpay.service.bo.allocation.AllocSyncResultBo;
|
||||
import org.dromara.daxpay.service.strategy.AbsAllocationStrategy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -43,4 +44,12 @@ public class AliAllocationStrategy extends AbsAllocationStrategy {
|
||||
public void finish() {
|
||||
aliPayAllocationService.finish(getOrder(), getDetails());
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步状态
|
||||
*/
|
||||
@Override
|
||||
public AllocSyncResultBo doSync() {
|
||||
return aliPayAllocationService.sync(getOrder(), getDetails());
|
||||
}
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.daxpay.core.enums.ChannelEnum;
|
||||
import org.dromara.daxpay.service.bo.allocation.AllocStartResultBo;
|
||||
import org.dromara.daxpay.service.bo.allocation.AllocSyncResultBo;
|
||||
import org.dromara.daxpay.service.strategy.AbsAllocationStrategy;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -46,4 +47,12 @@ public class WechatAllocationStrategy extends AbsAllocationStrategy {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步状态
|
||||
*/
|
||||
@Override
|
||||
public AllocSyncResultBo doSync() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user