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 4f7a41343..fad69e1c8 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 @@ -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 adapayMemberAccounts, BigDecimal confirmAmt, String orderCode, String wechatAppId) { + // 调汇付的分账接口 确认交易 + Map 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 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 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); + } + /** * 创建余额支付请求 * 汇付余额转账 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 28b7dceb7..83641ea4c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -1451,7 +1451,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { /** * 延迟交易订单 交易确认 - * + * 订单分账 * @param orderBasicInfo 订单 * @param adapayMemberAccount 结算账户 */ @@ -1478,9 +1478,6 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { List 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 orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); + // 选出需要分账的支付id + List paymentInfos = Lists.newArrayList(); + for (OrderPayRecord orderPayRecord : orderPayRecordList) { + + } + return null; + } + /** * 校验订单分账金额 *