diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java index 8c4ebb833..6e1c5c04f 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java @@ -102,6 +102,8 @@ public enum ReturnCodeEnum { CODE_ADAPAY_MEMBER_IS_NULL_ERROR("00100048", "未查询到该运营商的结算账户"), + CODE_ADAPAY_CALLBACK_IS_NULL_ERROR("00100048", "未查询到订单支付记录回调"), + /* 个人桩 start */ CODE_PILE_HAS_BEEN_BINDING_ERROR("00400001", "此桩已被绑定,请联系管理员!"), diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/common/DivMembers.java b/jsowell-pile/src/main/java/com/jsowell/adapay/common/DivMember.java similarity index 100% rename from jsowell-pile/src/main/java/com/jsowell/adapay/common/DivMembers.java rename to jsowell-pile/src/main/java/com/jsowell/adapay/common/DivMember.java diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayCallbackRecord.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayCallbackRecord.java index 204af5b2d..36e943787 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayCallbackRecord.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayCallbackRecord.java @@ -68,6 +68,9 @@ public class AdapayCallbackRecord implements Serializable { @JsonIgnore private String expend; + /** + * 手续费 + */ private BigDecimal feeAmt; /** 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 9c055113f..e7567509a 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 @@ -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 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 response = PaymentConfirm.create(confirm); + Map 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 paymentConfirm = PaymentConfirm.create(confirmParams); + logger.info("调分账接口param:{}, result:{}", JSON.toJSONString(confirmParams), JSON.toJSONString(paymentConfirm)); // 保存分账接口返回的信息 }