From 0c8f2e8d5f85e9d5f3027151f8c85e7465dc1ba8 Mon Sep 17 00:00:00 2001 From: terrfly Date: Wed, 16 Jun 2021 18:33:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=80=80=E6=AC=BE=E8=A1=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BF=A1=E6=81=AF=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/sql/init.sql | 15 +++--- .../jeepay/core/entity/RefundOrder.java | 46 +++++++++++-------- .../ctrl/refund/RefundOrderController.java | 36 +++++---------- .../jeepay/pay/rqrs/refund/RefundOrderRQ.java | 2 +- .../service/mapper/RefundOrderMapper.xml | 7 +-- 5 files changed, 52 insertions(+), 54 deletions(-) diff --git a/docs/sql/init.sql b/docs/sql/init.sql index b571f72..85928cb 100644 --- a/docs/sql/init.sql +++ b/docs/sql/init.sql @@ -346,22 +346,23 @@ CREATE TABLE `t_order_snapshot` ( -- 退款订单表 DROP TABLE IF EXISTS t_refund_order; CREATE TABLE `t_refund_order` ( - `refund_order_id` VARCHAR(30) NOT NULL COMMENT '退款订单号', - `pay_order_id` VARCHAR(30) NOT NULL COMMENT '支付订单号', - `channel_pay_order_no` VARCHAR(64) DEFAULT NULL COMMENT '渠道支付单号', + `refund_order_id` VARCHAR(30) NOT NULL COMMENT '退款订单号(支付系统生成订单号)', + `pay_order_id` VARCHAR(30) NOT NULL COMMENT '支付订单号(与t_pay_order对应)', + `channel_pay_order_no` VARCHAR(64) DEFAULT NULL COMMENT '渠道支付单号(与t_pay_order channel_order_no对应)', `mch_no` VARCHAR(64) NOT NULL COMMENT '商户号', + `isv_no` VARCHAR(64) COMMENT '服务商号', + `app_id` VARCHAR(64) NOT NULL COMMENT '应用ID', + `mch_name` VARCHAR(30) NOT NULL COMMENT '商户名称', `mch_type` TINYINT(6) NOT NULL COMMENT '类型: 1-普通商户, 2-特约商户(服务商模式)', - `mch_refund_no` VARCHAR(64) NOT NULL COMMENT '商户退款单号', - `isv_no` VARCHAR(64) DEFAULT NULL COMMENT '服务商号', + `mch_refund_no` VARCHAR(64) NOT NULL COMMENT '商户退款单号(商户系统的订单号)', `way_code` VARCHAR(20) NOT NULL COMMENT '支付方式代码', `if_code` VARCHAR(20) NOT NULL COMMENT '支付接口代码', `pay_amount` BIGINT(20) NOT NULL COMMENT '支付金额,单位分', `refund_amount` BIGINT(20) NOT NULL COMMENT '退款金额,单位分', `currency` VARCHAR(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny', `state` TINYINT(6) NOT NULL DEFAULT '0' COMMENT '退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败', - `result` TINYINT(6) NOT NULL DEFAULT '0' COMMENT '退款结果:0-不确认结果,1-等待手动处理,2-确认成功,3-确认失败', `client_ip` VARCHAR(32) DEFAULT NULL COMMENT '客户端IP', - `remark` VARCHAR(256) DEFAULT NULL COMMENT '备注', + `refund_reason` VARCHAR(256) NOT NULL COMMENT '退款原因', `channel_order_no` VARCHAR(32) DEFAULT NULL COMMENT '渠道订单号', `channel_err_code` VARCHAR(128) DEFAULT NULL COMMENT '渠道错误码', `channel_err_msg` VARCHAR(128) DEFAULT NULL COMMENT '渠道错误描述', diff --git a/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/RefundOrder.java b/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/RefundOrder.java index ae159f9..1842d09 100644 --- a/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/RefundOrder.java +++ b/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/RefundOrder.java @@ -23,7 +23,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import java.io.Serializable; import java.util.Date; /** @@ -38,7 +37,12 @@ import java.util.Date; @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_refund_order") -public class RefundOrder extends BaseModel implements Serializable { +public class RefundOrder extends BaseModel { + + public static final byte STATE_INIT = 0; //订单生成 + public static final byte STATE_ING = 1; //退款中 + public static final byte STATE_SUCCESS = 2; //退款成功 + public static final byte STATE_FAIL = 3; //退款失败 public static final LambdaQueryWrapper gw(){ return new LambdaQueryWrapper<>(); @@ -47,18 +51,18 @@ public class RefundOrder extends BaseModel implements Serializable { private static final long serialVersionUID=1L; /** - * 退款订单号 + * 退款订单号(支付系统生成订单号) */ @TableId private String refundOrderId; /** - * 支付订单号 + * 支付订单号(与t_pay_order对应) */ private String payOrderId; /** - * 渠道支付单号 + * 渠道支付单号(与t_pay_order channel_order_no对应) */ private String channelPayOrderNo; @@ -68,19 +72,29 @@ public class RefundOrder extends BaseModel implements Serializable { private String mchNo; /** - * 类型: 1-普通商户, 2-特约商户(服务商模式) + * 服务商号 */ - private Byte mchType; + private String isvNo; /** - * 商户退款单号 + * 应用ID */ - private String mchRefundNo; + private String appId; /** - * 服务商号 + * 商户名称 */ - private String isvNo; + private String mchName; + + /** + * 类型: 1-普通商户, 2-特约商户(服务商模式) + */ + private Byte mchType; + + /** + * 商户退款单号(商户系统的订单号) + */ + private String mchRefundNo; /** * 支付方式代码 @@ -112,20 +126,15 @@ public class RefundOrder extends BaseModel implements Serializable { */ private Byte state; - /** - * 退款结果:0-不确认结果,1-等待手动处理,2-确认成功,3-确认失败 - */ - private Byte result; - /** * 客户端IP */ private String clientIp; /** - * 备注 + * 退款原因 */ - private String remark; + private String refundReason; /** * 渠道订单号 @@ -172,5 +181,4 @@ public class RefundOrder extends BaseModel implements Serializable { */ private Date updatedAt; - } diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/refund/RefundOrderController.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/refund/RefundOrderController.java index 794c1ac..0763f9d 100644 --- a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/refund/RefundOrderController.java +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/refund/RefundOrderController.java @@ -15,8 +15,6 @@ */ package com.jeequan.jeepay.pay.ctrl.refund; -import cn.hutool.core.date.DateUtil; -import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.*; import com.jeequan.jeepay.core.exception.BizException; import com.jeequan.jeepay.core.model.ApiRes; @@ -25,18 +23,8 @@ import com.jeequan.jeepay.core.utils.SpringBeansUtil; import com.jeequan.jeepay.core.utils.StringKit; import com.jeequan.jeepay.pay.channel.IPaymentService; import com.jeequan.jeepay.pay.ctrl.ApiController; -import com.jeequan.jeepay.pay.ctrl.payorder.AbstractPayOrderController; -import com.jeequan.jeepay.pay.exception.ChannelException; -import com.jeequan.jeepay.pay.model.IsvConfigContext; import com.jeequan.jeepay.pay.model.MchAppConfigContext; -import com.jeequan.jeepay.pay.mq.queue.MqQueue4ChannelOrderQuery; -import com.jeequan.jeepay.pay.rqrs.QueryPayOrderRQ; -import com.jeequan.jeepay.pay.rqrs.QueryPayOrderRS; import com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg; -import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ; -import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRS; -import com.jeequan.jeepay.pay.rqrs.payorder.payway.QrCashierOrderRQ; -import com.jeequan.jeepay.pay.rqrs.payorder.payway.QrCashierOrderRS; import com.jeequan.jeepay.pay.rqrs.refund.RefundOrderRQ; import com.jeequan.jeepay.pay.rqrs.refund.RefundOrderRS; import com.jeequan.jeepay.pay.service.ConfigContextService; @@ -46,7 +34,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @@ -114,7 +101,7 @@ public class RefundOrderController extends ApiController { } - RefundOrder refundOrder = genPayOrder(rq, payOrder, mchInfo, mchApp); + RefundOrder refundOrder = genRefundOrder(rq, payOrder, mchInfo, mchApp); //订单入库 订单状态: 生成状态 此时没有和任何上游渠道产生交互。 refundOrderService.save(refundOrder); @@ -140,31 +127,32 @@ public class RefundOrderController extends ApiController { } - private RefundOrder genPayOrder(RefundOrderRQ rq, PayOrder payOrder, MchInfo mchInfo, MchApp mchApp){ + private RefundOrder genRefundOrder(RefundOrderRQ rq, PayOrder payOrder, MchInfo mchInfo, MchApp mchApp){ RefundOrder refundOrder = new RefundOrder(); refundOrder.setRefundOrderId(SeqKit.genPayOrderId()); //退款订单号 refundOrder.setPayOrderId(payOrder.getPayOrderId()); //支付订单号 refundOrder.setChannelPayOrderNo(payOrder.getChannelOrderNo()); //渠道支付单号 refundOrder.setMchNo(mchInfo.getMchNo()); //商户号 + refundOrder.setIsvNo(mchInfo.getIsvNo()); //服务商号 + refundOrder.setAppId(mchApp.getAppId()); //商户应用ID + refundOrder.setMchName(mchInfo.getMchShortName()); //商户名称 refundOrder.setMchType(mchInfo.getType()); //商户类型 refundOrder.setMchRefundNo(rq.getMchRefundNo()); //商户退款单号 - refundOrder.setIsvNo(mchInfo.getIsvNo()); //服务商号 refundOrder.setWayCode(payOrder.getWayCode()); //支付方式代码 refundOrder.setIfCode(payOrder.getIfCode()); //支付接口代码 refundOrder.setPayAmount(payOrder.getAmount()); //支付金额,单位分 - refundOrder.setRefundAmount(rq.getAmount()); //退款金额,单位分 + refundOrder.setRefundAmount(rq.getRefundAmount()); //退款金额,单位分 refundOrder.setCurrency(rq.getCurrency()); //三位货币代码,人民币:cny - refundOrder.setState(null); //退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败 - refundOrder.setResult(null); //退款结果:0-不确认结果,1-等待手动处理,2-确认成功,3-确认失败 - refundOrder.setClientIp(null); //客户端IP - refundOrder.setRemark(null); //备注 + refundOrder.setState(RefundOrder.STATE_INIT); //退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败 + refundOrder.setClientIp(StringUtils.defaultIfEmpty(rq.getClientIp(), getClientIp())); //客户端IP + refundOrder.setRefundReason(rq.getRefundReason()); //退款原因 refundOrder.setChannelOrderNo(null); //渠道订单号 refundOrder.setChannelErrCode(null); //渠道错误码 refundOrder.setChannelErrMsg(null); //渠道错误描述 - refundOrder.setChannelExtra(null); //特定渠道发起时额外参数 - refundOrder.setNotifyUrl(null); //通知地址 - refundOrder.setExtParam(null); //扩展参数 + refundOrder.setChannelExtra(rq.getChannelExtra()); //特定渠道发起时额外参数 + refundOrder.setNotifyUrl(rq.getNotifyUrl()); //通知地址 + refundOrder.setExtParam(rq.getExtParam()); //扩展参数 refundOrder.setSuccessTime(null); //订单退款成功时间 refundOrder.setCreatedAt(new Date()); //创建时间 diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/rqrs/refund/RefundOrderRQ.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/rqrs/refund/RefundOrderRQ.java index a5fe169..b3a7cd9 100644 --- a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/rqrs/refund/RefundOrderRQ.java +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/rqrs/refund/RefundOrderRQ.java @@ -45,7 +45,7 @@ public class RefundOrderRQ extends AbstractMchAppRQ { /** 退款金额, 单位:分 **/ @NotNull(message="退款金额不能为空") @Min(value = 1, message = "退款金额请大于1分") - private Long amount; + private Long refundAmount; /** 货币代码 **/ @NotBlank(message="货币代码不能为空") diff --git a/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/RefundOrderMapper.xml b/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/RefundOrderMapper.xml index 2f9cd62..ce52887 100644 --- a/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/RefundOrderMapper.xml +++ b/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/RefundOrderMapper.xml @@ -8,18 +8,19 @@ + + + - - - + -- GitLab