1.撤销支付2.重新整理回调

This commit is contained in:
HH 2022-05-31 20:55:09 +08:00
parent 6c88cd78f9
commit 98bef1400a
23 changed files with 186 additions and 386 deletions

View File

@ -1,6 +1,6 @@
package com.ghy.web.controller.pay;
import com.ghy.common.adapay.callback.Event;
import com.ghy.common.adapay.model.Event;
import com.ghy.common.core.controller.BaseController;
import com.ghy.common.utils.spring.SpringUtils;
import com.ghy.payment.service.CallBackService;
@ -19,8 +19,6 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
public class AdapayCallbackController extends BaseController {
private CallBackService callBackService;
@PostMapping("/adapay/callback")
public String callback(Event event) {
logger.info(" 收单返回消息event" + event);
@ -45,15 +43,19 @@ public class AdapayCallbackController extends BaseController {
switch (type) {
case "payment.succeeded":
case "payment.failed":
beanName = "payCallBackService";
beanName = "payCallbackService";
break;
case "payment_reverse.succeeded":
case "payment_reverse.failed":
beanName = "payReverseCallbackService";
break;
case "payment.close.succeeded":
case "payment.close.failed":
beanName = "refundCallBackService";
beanName = "refundCallbackService";
break;
case "cash.succeeded":
case "cash.failed":
beanName = "drawCashCallBackService";
beanName = "drawCashCallbackService";
break;
default:
logger.warn("UNKNOWN EVENT TYPE [{}]", type);
@ -61,7 +63,7 @@ public class AdapayCallbackController extends BaseController {
}
logger.info("handler bean is {} ", beanName);
callBackService = SpringUtils.getBean(beanName);
CallBackService callBackService = SpringUtils.getBean(beanName);
callBackService.onCallback(event);
return "OK";
}

View File

@ -1,23 +0,0 @@
package com.ghy.web.core.adapay;
import com.ghy.common.adapay.callback.IDrawCashCallback;
import com.ghy.common.adapay.model.DrawCashReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* 处理提现结果
*
* @author HH 2022/5/27
*/
@Component
public class DrawCashCallback implements IDrawCashCallback {
private static final Logger logger = LoggerFactory.getLogger(DrawCashCallback.class);
@Override
public void onCallback(DrawCashReply reply) {
logger.info("提现结果:{}", reply);
}
}

View File

@ -1,62 +0,0 @@
package com.ghy.web.core.adapay;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.callback.IPayCallback;
import com.ghy.common.adapay.model.AdapayStatusEnum;
import com.ghy.common.adapay.model.PayReply;
import com.ghy.common.adapay.model.PaymentDTO;
import com.ghy.payment.domain.FinancialMaster;
import com.ghy.payment.service.FinancialMasterService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 处理支付结果
*
* @author HH 2022/5/27
*/
@Component
public class PayCallback implements IPayCallback {
private static final Logger logger = LoggerFactory.getLogger(PayCallback.class);
@Resource
FinancialMasterService financialMasterService;
@Override
public void onCallback(PayReply reply) {
// 更新交易记录
PaymentDTO payment = new PaymentDTO();
payment.setId(reply.getId());
payment.setStatus(reply.getStatus());
payment.setPayTime(reply.getPayTime());
financialMasterService.updatePayment(payment);
if (AdapayStatusEnum.succeeded.code.equals(reply.getStatus())) {
// 修改主财务单状态
financialMasterService.paySucceeded(reply.getOrderNo(), reply.getPayChannel());
} else {
logger.warn("支付失败 : {}", reply);
}
}
@Override
public void onResponse(JSONObject response) {
// 保存一条支付记录
PaymentDTO payment = response.toJavaObject(PaymentDTO.class);
payment.setStatus("pending");
financialMasterService.insertPayment(payment);
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) {
FinancialMaster update = new FinancialMaster();
update.setOrderMasterCode(response.getString("order_no"));
update.setPaymentId(response.getString("id"));
financialMasterService.updateFinancialMaster(update);
} else {
logger.warn("请求支付失败 : {}", response.toJSONString());
}
}
}

View File

@ -1,23 +0,0 @@
package com.ghy.web.core.adapay;
import com.ghy.common.adapay.callback.IRefundCallback;
import com.ghy.common.adapay.model.RefundReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* 处理退款结果
*
* @author HH 2022/5/27
*/
@Component
public class RefundCallback implements IRefundCallback {
private static final Logger logger = LoggerFactory.getLogger(RefundCallback.class);
@Override
public void onCallback(RefundReply reply) {
logger.info("退款结果:{}", reply);
}
}

View File

@ -1,14 +0,0 @@
package com.ghy.common.adapay.callback;
import com.ghy.common.adapay.model.DrawCashReply;
/**
* 处理提现结果的接口
*
* @author HH 2022/4/1
*/
public interface IDrawCashCallback {
void onCallback(DrawCashReply reply);
}

View File

@ -1,16 +0,0 @@
package com.ghy.common.adapay.callback;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.PayReply;
/**
* 处理支付结果的回调接口
*
* @author HH 2022/3/25
*/
public interface IPayCallback {
void onCallback(PayReply reply);
void onResponse(JSONObject response);
}

View File

@ -1,13 +0,0 @@
package com.ghy.common.adapay.callback;
import com.ghy.common.adapay.model.RefundReply;
/**
* 处理退款结果的回调接口
*
* @author HH 2022/3/29
*/
public interface IRefundCallback {
void onCallback(RefundReply reply);
}

View File

@ -1,40 +0,0 @@
package com.ghy.common.adapay.callback.mapping;
import com.alibaba.fastjson.JSON;
import com.ghy.common.adapay.callback.IDrawCashCallback;
import com.ghy.common.adapay.callback.Event;
import com.ghy.common.adapay.model.DrawCashReply;
import org.springframework.util.Assert;
import java.util.concurrent.ConcurrentHashMap;
/**
* 提现结果匹配
*
* @author HH 2022/4/1
*/
public class DrawCashReplyMapping {
/**
* 临时保存支付结果
* key: orderNo
* value: 处理支付结果的回调接口
*/
private final static ConcurrentHashMap<String, IDrawCashCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
public static void putReply(Event event, IDrawCashCallback callback) {
String data = event.getData();
DrawCashReply reply = JSON.parseObject(data, DrawCashReply.class);
Assert.hasText(reply.getOrderNo(), "orderNo is blank !!!");
PAY_RESULT_CALLBACK_MAP.remove(reply.getOrderNo());
if (callback != null) {
callback.onCallback(reply);
}
}
public static void putCallback(String orderNo, IDrawCashCallback callback) {
Assert.hasText(orderNo, "orderNo is blank !!!");
Assert.notNull(callback, "PayCallback is null !!!");
PAY_RESULT_CALLBACK_MAP.put(orderNo, callback);
}
}

View File

@ -1,47 +0,0 @@
package com.ghy.common.adapay.callback.mapping;
import com.alibaba.fastjson.JSON;
import com.ghy.common.adapay.callback.Event;
import com.ghy.common.adapay.callback.IPayCallback;
import com.ghy.common.adapay.model.PayReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
import java.util.concurrent.ConcurrentHashMap;
/**
* 支付结果匹配
*
* @author HH 2022/3/25
*/
public class PayReplyMapping {
protected static final Logger logger = LoggerFactory.getLogger(PayReplyMapping.class);
/**
* 临时保存支付结果
* key: orderNo
* value: 处理支付结果的回调接口
*/
private final static ConcurrentHashMap<String, IPayCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
public static void putReply(Event event, IPayCallback callback) {
String data = event.getData();
PayReply payment = JSON.parseObject(data, PayReply.class);
Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!");
payment.setPayTime(event.getCreatedTime());
PAY_RESULT_CALLBACK_MAP.remove(payment.getOrderNo());
if (callback != null) {
callback.onCallback(payment);
} else {
logger.warn("PayCallback don't exist! {}", payment);
}
}
public static void putCallback(String orderNo, IPayCallback callback) {
Assert.hasText(orderNo, "orderNo is blank !!!");
Assert.notNull(callback, "PayCallback is null !!!");
PAY_RESULT_CALLBACK_MAP.put(orderNo, callback);
}
}

View File

@ -1,40 +0,0 @@
package com.ghy.common.adapay.callback.mapping;
import com.alibaba.fastjson.JSON;
import com.ghy.common.adapay.callback.Event;
import com.ghy.common.adapay.callback.IRefundCallback;
import com.ghy.common.adapay.model.RefundReply;
import org.springframework.util.Assert;
import java.util.concurrent.ConcurrentHashMap;
/**
* 退款结果匹配
*
* @author HH 2022/3/29
*/
public class RefundReplyMapping {
/**
* 临时保存退款结果
* key: orderNo
* value: 处理支付结果的回调接口
*/
private final static ConcurrentHashMap<String, IRefundCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
public static void putReply(Event event, IRefundCallback refundCallback) {
String data = event.getData();
RefundReply payment = JSON.parseObject(data, RefundReply.class);
Assert.hasText(payment.getPaymentId(), "paymentId is blank !!!");
IRefundCallback callback = PAY_RESULT_CALLBACK_MAP.remove(payment.getPaymentId());
if (callback != null) {
callback.onCallback(payment);
}
}
public static void putCallback(String paymentId, IRefundCallback callback) {
Assert.hasText(paymentId, "paymentId is blank !!!");
Assert.notNull(callback, "RefundCallback is null !!!");
PAY_RESULT_CALLBACK_MAP.put(paymentId, callback);
}
}

View File

@ -1,4 +1,4 @@
package com.ghy.common.adapay.callback;
package com.ghy.common.adapay.model;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

View File

@ -1,5 +1,6 @@
package com.ghy.payment.mapper;
import com.ghy.common.adapay.model.PaymentDTO;
import com.huifu.adapay.model.Payment;
/**
@ -12,4 +13,6 @@ public interface PaymentMapper {
int insertPayment(Payment payment);
int updatePayment(Payment payment);
PaymentDTO selectById(String id);
}

View File

@ -3,13 +3,11 @@ package com.ghy.payment.service;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.AdapayConfig;
import com.ghy.common.adapay.AdapayProperties;
import com.ghy.common.adapay.callback.IDrawCashCallback;
import com.ghy.common.adapay.callback.IPayCallback;
import com.ghy.common.adapay.callback.IRefundCallback;
import com.ghy.common.adapay.callback.mapping.DrawCashReplyMapping;
import com.ghy.common.adapay.callback.mapping.RefundReplyMapping;
import com.ghy.common.adapay.model.*;
import com.ghy.payment.service.impl.PayCallBackServiceImpl;
import com.ghy.payment.service.impl.DrawCashCallbackService;
import com.ghy.payment.service.impl.PayCallbackService;
import com.ghy.payment.service.impl.PayReverseCallbackService;
import com.ghy.payment.service.impl.RefundCallbackService;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.model.*;
import org.apache.commons.lang3.StringUtils;
@ -33,13 +31,13 @@ public class AdapayService {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private IPayCallback payCallback;
private PayCallbackService payCallBackService;
@Resource
private PayCallBackServiceImpl payCallBackService;
private RefundCallbackService refundCallbackService;
@Resource
private IDrawCashCallback drawCashCallback;
private DrawCashCallbackService drawCashCallbackService;
@Resource
private IRefundCallback refundCallback;
private PayReverseCallbackService payReverseCallbackService;
@Resource
private AdapayProperties adapayProperties;
@ -237,8 +235,9 @@ public class AdapayService {
cashParam.put("notify_url", adapayProperties.getNotifyUrl());
cashParam.put("remark", remark);
cashParam.put("fee_mode", feeMode);
DrawCashReplyMapping.putCallback(orderNo, drawCashCallback);
return (JSONObject) Drawcash.create(cashParam, deptId.toString());
JSONObject response = (JSONObject) Drawcash.create(cashParam, deptId.toString());
drawCashCallbackService.onResponse(response);
return response;
}
/**
@ -298,7 +297,7 @@ public class AdapayService {
}
/**
* 发起退款
* 发起退款用于[延迟分账]或者[延迟分账且确认支付后]的支付单
* 当您的业务需要发起退款时可通过 Adapay 系统提供的创建 Refund对象 方法创建一个退款对象资金会原路退回用户的支付宝或微信中
* 支持一次全额或多次部分退款退款次数最多不超过10次多次部分退款时当前退款金额 + 已退款金额不能大于原支付金额
* 对于每次撤销交易Adapay 都会通过 异步消息通知 告知结果
@ -319,8 +318,9 @@ public class AdapayService {
JSONObject refundParams = new JSONObject();
refundParams.put("refund_amt", refundAmt);
refundParams.put("refund_order_no", refundOrderNo);
RefundReplyMapping.putCallback(paymentId, refundCallback);
return (JSONObject) Refund.create(paymentId, refundParams, deptId.toString());
JSONObject response = (JSONObject) Refund.create(paymentId, refundParams, deptId.toString());
refundCallbackService.onResponse(response);
return response;
}
/**
@ -362,4 +362,29 @@ public class AdapayService {
return (JSONObject) Member.query(memberParams, deptId.toString());
}
/**
* 支付撤销
* 支付撤销对象适用于[延时分账]的场景只有已支付完成且为延时分账的Payment对象在没有创建支付确认对象成功之前可以调用创建支付撤销对象
* 用来撤销支付资金会原路退回用户的支付宝或微信中 支持一次全额或多次部分撤销撤销次数最多不超过10次
* 多次部分撤销时当前撤销金额 + 已撤销金额 + 已确认金额不能大于原支付金额
* 对于每次撤销交易Adapay 都会通过 异步消息通知 告知结果
* https://docs.adapay.tech/api/trade.html#payment-reverse-object
*
* @param deptId [必填]商户ID
* @param paymentId [必填]Adapay生成的支付对象id
* @param reverseAmt [必填]撤销金额必须大于0保留两位小数点如0.10100.05等撤销金额必须小于等于支付金额 - 已确认金额 - 已撤销撤销成功+撤销中金额
* @return 创建支付撤销对象同步返回成功表示 Adapay 受理成功撤销结果以异步通知为准
*/
public JSONObject payReverse(@NotNull Long deptId, @NotNull String paymentId, @NotNull String reverseAmt) throws BaseAdaPayException {
JSONObject reverseParams = new JSONObject();
reverseParams.put("app_id", AdapayConfig.getAppId(deptId));
reverseParams.put("payment_id", paymentId);
reverseParams.put("reverse_amt", reverseAmt);
reverseParams.put("notify_url", adapayProperties.getNotifyUrl());
reverseParams.put("order_no", "PAYMENT_REVERSE" + System.currentTimeMillis());
JSONObject response = (JSONObject) PaymentReverse.create(reverseParams);
payReverseCallbackService.onResponse(response);
return response;
}
}

View File

@ -1,16 +1,10 @@
package com.ghy.payment.service;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.callback.Event;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import com.ghy.common.adapay.model.Event;
public interface CallBackService {
public final static ConcurrentMap<String, List<String>> resultCallBackMap = new ConcurrentHashMap<>(1024);
/**
* @param event 回调
*/

View File

@ -76,4 +76,11 @@ public interface FinancialMasterService {
* @param payment 支付对象
*/
int updatePayment(PaymentDTO payment);
/**
* 用交易ID查询交易记录
*
* @param id 交易ID
*/
PaymentDTO selectPaymentById(String id);
}

View File

@ -1,37 +0,0 @@
package com.ghy.payment.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.callback.Event;
import com.ghy.payment.service.CallBackService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service("drawCashCallBackService")
public class DrawCashCallBackServiceImpl implements CallBackService {
private static Logger logger = LoggerFactory.getLogger(DrawCashCallBackServiceImpl.class);
private final static List<String> drawCashList = new ArrayList<>(1024);
/**
* 临时保存支付结果
* key: orderNo
* value: 处理支付结果的回调接口
*/
@Override
public void onCallback(Event event) {
logger.info("draw callback is {}", event.toString());
}
@Override
public void onResponse(JSONObject response) {
logger.info("draw response is {}", response.toString());
}
}

View File

@ -0,0 +1,30 @@
package com.ghy.payment.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.Event;
import com.ghy.payment.service.CallBackService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* 提现回调
*
* @author HH 2022/5/30
*/
@Service("drawCashCallbackService")
public class DrawCashCallbackService implements CallBackService {
private static final Logger logger = LoggerFactory.getLogger(DrawCashCallbackService.class);
@Override
public void onCallback(Event event) {
logger.info("提现 callback: {}", event.toString());
}
@Override
public void onResponse(JSONObject response) {
logger.info("提现 response: {}", response.toString());
}
}

View File

@ -76,7 +76,7 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
public void paySucceeded(String orderNo, String payChannel) {
try {
financialMasterMapper.paySucceeded(orderNo, PayTypeEnum.valueOf(payChannel.toUpperCase()).getCode());
}catch (IllegalArgumentException e){
} catch (IllegalArgumentException e) {
logger.warn("OrderNo[{}] Unknown payChannel [{}]!", orderNo, payChannel);
}
}
@ -103,4 +103,9 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
return paymentMapper.updatePayment(payment);
}
@Override
public PaymentDTO selectPaymentById(String id) {
return paymentMapper.selectById(id);
}
}

View File

@ -2,7 +2,7 @@ package com.ghy.payment.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.callback.Event;
import com.ghy.common.adapay.model.Event;
import com.ghy.common.adapay.model.AdapayStatusEnum;
import com.ghy.common.adapay.model.PayReply;
import com.ghy.common.adapay.model.PaymentDTO;
@ -15,41 +15,54 @@ import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
@Service("payCallBackService")
public class PayCallBackServiceImpl implements CallBackService {
/**
* 支付回调
*
* @author HH 2022/5/31
*/
@Service("payCallbackService")
public class PayCallbackService implements CallBackService {
private static Logger logger = LoggerFactory.getLogger(PayCallBackServiceImpl.class);
private static final Logger logger = LoggerFactory.getLogger(PayCallbackService.class);
private final static List<String> payList = new ArrayList<>(1024);
// 用HashSet检索效率高
private final static HashSet<String> orderNoSet = new HashSet<>(1024);
@Resource
FinancialMasterService financialMasterService;
@Override
public void onCallback(Event event) {
logger.debug("pay callback is {}", event);
String data = event.getData();
PayReply payment = JSON.parseObject(data, PayReply.class);
Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!");
// 校验是否是本系统发出去的回调请求
if(payList.contains(payment.getOrderNo())){
boolean ours = orderNoSet.remove(payment.getOrderNo());
if (!ours) {
//如果内存里没有 就从数据库里找这条记录
PaymentDTO dto = financialMasterService.selectPaymentById(payment.getId());
ours = dto != null;
}
if (ours) {
// 更新交易记录
PaymentDTO param = new PaymentDTO();
param.setId(payment.getId());
param.setStatus(payment.getStatus());
param.setPayTime(payment.getPayTime());
financialMasterService.updatePayment(param);
if (AdapayStatusEnum.succeeded.code.equals(payment.getStatus())) {
// 修改主财务单状态
financialMasterService.paySucceeded(payment.getOrderNo(), payment.getPayChannel());
} else {
logger.warn("支付失败 : {}", payment);
}
} else {
logger.warn("系统中不存在这条交易记录: {}", event);
}
logger.info("pay callback is {}", event.toString());
}
@Override
@ -67,10 +80,8 @@ public class PayCallBackServiceImpl implements CallBackService {
} else {
logger.warn("请求支付失败 : {}", response.toJSONString());
}
// 将记录保存到临时会话中
payList.add(response.getString("order_no"));
resultCallBackMap.put("pay", payList);
orderNoSet.add(response.getString("order_no"));
}
}

View File

@ -0,0 +1,29 @@
package com.ghy.payment.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.Event;
import com.ghy.payment.service.CallBackService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* 撤销支付回调
*
* @author HH 2022/5/31
*/
@Service("payReverseCallbackService")
public class PayReverseCallbackService implements CallBackService {
private static final Logger logger = LoggerFactory.getLogger(PayReverseCallbackService.class);
@Override
public void onCallback(Event event) {
logger.debug("撤销支付 callback: {}", event.toString());
}
@Override
public void onResponse(JSONObject response) {
logger.debug("撤销支付 Response: {}", response.toString());
}
}

View File

@ -1,25 +0,0 @@
package com.ghy.payment.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.callback.Event;
import com.ghy.payment.service.CallBackService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service("refundCallBackService")
public class RefundCallBackServiceImpl implements CallBackService {
private static Logger logger = LoggerFactory.getLogger(RefundCallBackServiceImpl.class);
@Override
public void onCallback(Event event) {
logger.info("refund callback is {}", event.toString());
}
@Override
public void onResponse(JSONObject response) {
logger.info("refund response is {}", response.toString());
}
}

View File

@ -0,0 +1,30 @@
package com.ghy.payment.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.Event;
import com.ghy.payment.service.CallBackService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* 退款回调
*
* @author HH 2022/5/30
*/
@Service("refundCallbackService")
public class RefundCallbackService implements CallBackService {
private static final Logger logger = LoggerFactory.getLogger(RefundCallbackService.class);
@Override
public void onCallback(Event event) {
logger.debug("退款 callback: {}", event.toString());
}
@Override
public void onResponse(JSONObject response) {
logger.debug("退款 Response: {}", response.toString());
}
}

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ghy.payment.mapper.PaymentMapper">
<resultMap id="FinancialMasterResult" type="com.ghy.common.adapay.model.PaymentDTO">
<resultMap id="PaymentResult" type="com.ghy.common.adapay.model.PaymentDTO">
<result property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<result property="prodMode" column="prod_mode"/>
@ -16,7 +16,7 @@
<result property="payTime" column="pay_time"/>
</resultMap>
<sql id="selectFinancialMaster">
<sql id="selectPayment">
SELECT id, order_no, prod_mode, app_id, pay_channel, pay_amt, party_order_id, query_url,
currency, status, pay_time, created_time, update_time
FROM adapay_pay_log
@ -58,4 +58,8 @@
WHERE id = #{id}
</update>
<select id="selectById" resultMap="PaymentResult">
<include refid="selectPayment"/> WHERE id = #{id}
</select>
</mapper>