订单分账逻辑

This commit is contained in:
2023-07-21 14:03:25 +08:00
parent 84e496cc05
commit 497559d5fa
4 changed files with 36 additions and 8 deletions

View File

@@ -68,6 +68,9 @@ public class AdapayCallbackRecord implements Serializable {
@JsonIgnore
private String expend;
/**
* 手续费
*/
private BigDecimal feeAmt;
/**

View File

@@ -14,6 +14,7 @@ import com.huifu.adapay.model.PaymentConfirm;
import com.huifu.adapay.model.PaymentReverse;
import com.huifu.adapay.model.Refund;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.adapay.common.DivMember;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
@@ -869,6 +870,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
/**
* 订单分账逻辑
* 只有开通结算账户的运营商才走分账逻辑
*/
private void ledgerAccount(OrderBasicInfo orderBasicInfo) throws BaseAdaPayException {
// 查询运营商有没有开通结算账户
@@ -879,18 +881,39 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
}
// 查询订单的交易id
String paymentId = "";
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderBasicInfo.getOrderCode());
if (adapayCallbackRecord == null) {
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CALLBACK_IS_NULL_ERROR);
}
String paymentId = adapayCallbackRecord.getPaymentId();
// 金额
String settleAmount = AdapayUtil.formatAmount(orderBasicInfo.getSettleAmount());
// 调汇付的分账接口 确认交易
Map<String, Object> confirm = Maps.newHashMap();
confirm.put("payment_id", paymentId);
confirm.put("order_no", "jsdk_confirm_" + System.currentTimeMillis());
confirm.put("confirm_amt", "0.01");
confirm.put("description", "description");
confirm.put("div_members", "");
Map<String, Object> response = PaymentConfirm.create(confirm);
Map<String, Object> confirmParams = Maps.newHashMap();
// Adapay生成的支付对象id
confirmParams.put("payment_id", paymentId);
// 请求订单号只能为英文、数字或者下划线的一种或多种组合保证在app_id下唯一
confirmParams.put("order_no", "java_sdk_paymemt_confirm_" + System.currentTimeMillis());
// 确认金额必须大于0保留两位小数点如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额。
confirmParams.put("confirm_amt", settleAmount);
// 附加说明
String description = "分账信息:[订单编号:" + orderBasicInfo.getOrderCode() + ", 结算账号:" + adapayMemberAccount.getAdapayMemberId() + "]";
confirmParams.put("description", description);
// 分账对象信息
DivMember divMember = new DivMember();
divMember.setMember_id(adapayMemberAccount.getAdapayMemberId());
divMember.setAmount(settleAmount);
divMember.setFee_flag(Constants.Y);
confirmParams.put("div_members", Lists.newArrayList(divMember));
Map<String, Object> paymentConfirm = PaymentConfirm.create(confirmParams);
logger.info("调分账接口param:{}, result:{}", JSON.toJSONString(confirmParams), JSON.toJSONString(paymentConfirm));
// 保存分账接口返回的信息
}