实时分账

This commit is contained in:
Guoqs
2024-09-12 10:03:39 +08:00
parent b116e1e4ba
commit f7171d7efe
2 changed files with 68 additions and 8 deletions

View File

@@ -51,10 +51,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -996,6 +993,54 @@ public class AdapayService {
return JSONObject.parseObject(jsonString, PaymentConfirmResponse.class);
}
/**
* 创建交易确认请求/创建分账请求
* 这个方法只适用于多用户分账
*
* @param paymentId 支付对象id
* @param adapayMemberAccounts 收到该账的汇付会员信息
* @param confirmAmt 确认的金额
* @param orderCode 订单编号
*/
public PaymentConfirmResponse createPaymentConfirmRequestMultiuser(String paymentId, List<DivMember> adapayMemberAccounts, BigDecimal confirmAmt, String orderCode, String wechatAppId) {
// 调汇付的分账接口 确认交易
Map<String, Object> confirmParams = Maps.newHashMap();
// Adapay生成的支付对象id
confirmParams.put("payment_id", paymentId);
// 请求订单号只能为英文、数字或者下划线的一种或多种组合保证在app_id下唯一
confirmParams.put("order_no", IdUtils.get16UUID("PC"));
// 确认金额必须大于0保留两位小数点如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额。
confirmParams.put("confirm_amt", AdapayUtil.formatAmount(confirmAmt));
// 参与分账的会员列表
List<String> collect = adapayMemberAccounts.stream().map(DivMember::getMember_id).collect(Collectors.toList());
// 附加说明
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderCode", orderCode);
jsonObject.put("adapayMemberIds", StringUtils.join(collect, ","));
confirmParams.put("description", jsonObject.toJSONString());
// 分账对象信息 一次最多7个
// DivMember divMember = new DivMember();
// divMember.setMember_id(adapayMemberAccount.getAdapayMemberId());
// divMember.setAmount(AdapayUtil.formatAmount(confirmAmt));
// divMember.setFee_flag(Constants.Y);
if (adapayMemberAccounts.size() > 7) {
throw new BusinessException("", "分账人数不能超过7人");
}
confirmParams.put("div_members", adapayMemberAccounts);
Map<String, Object> paymentConfirm = null;
try {
paymentConfirm = PaymentConfirm.create(confirmParams, wechatAppId);
} catch (BaseAdaPayException e) {
log.error("创建交易确认请求error", e);
}
String jsonString = JSON.toJSONString(paymentConfirm);
log.info("调分账接口param:{}, result:{}", JSON.toJSONString(confirmParams), jsonString);
// 删除支付确认信息缓存
redisCache.deleteObject(CacheConstants.PAYMENT_CONFIRM_LIST + paymentId);
return JSONObject.parseObject(jsonString, PaymentConfirmResponse.class);
}
/**
* 创建余额支付请求
* 汇付余额转账

View File

@@ -1451,7 +1451,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
/**
* 延迟交易订单 交易确认
*
* 订单分账
* @param orderBasicInfo 订单
* @param adapayMemberAccount 结算账户
*/
@@ -1478,9 +1478,6 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
List<String> paymentIds = paymentInfos.stream().map(PaymentInfo::getPaymentId).collect(Collectors.toList());
// 查询该笔订单的支付交易回调
// AdapayCallbackRecord adapayCallbackRecord = selectAdapayCallbackRecordByPaymentId(paymentInfos.get(0).getPaymentId());
// 支付id
String paymentId = paymentInfos.get(0).getPaymentId();
@@ -1504,6 +1501,24 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
return result;
}
/**
* 订单实时分账方法
*/
public OrderSettleResult doPaymentConfirmWithRealTime(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
// 订单编号
String orderCode = orderBasicInfo.getOrderCode();
// 订单结算金额
BigDecimal settleAmount = orderBasicInfo.getSettleAmount();
// 查询订单支付记录
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
// 选出需要分账的支付id
List<PaymentInfo> paymentInfos = Lists.newArrayList();
for (OrderPayRecord orderPayRecord : orderPayRecordList) {
}
return null;
}
/**
* 校验订单分账金额
*