diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/app/PayAppDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/app/PayAppDO.java
new file mode 100644
index 0000000..a4d439e
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/app/PayAppDO.java
@@ -0,0 +1,66 @@
+package com.tashow.cloud.pay.dal.dataobject.app;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 支付应用 DO
+ * 一个商户下,可能会有多个支付应用。例如说,京东有京东商城、京东到家等等
+ * 不过一般来说,一个商户,只有一个应用哈~
+ *
+ * 即 PayMerchantDO : PayAppDO = 1 : n
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_app")
+@KeySequence("pay_app_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayAppDO extends BaseDO {
+
+ /**
+ * 应用编号,数据库自增
+ */
+ @TableId
+ private Long id;
+ /**
+ * 应用标识
+ */
+ private String appKey;
+ /**
+ * 应用名
+ */
+ private String name;
+ /**
+ * 状态
+ *
+ * 枚举 {@link CommonStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 支付结果的回调地址
+ */
+ private String orderNotifyUrl;
+ /**
+ * 退款结果的回调地址
+ */
+ private String refundNotifyUrl;
+
+ /**
+ * 转账结果的回调地址
+ */
+ private String transferNotifyUrl;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/channel/PayChannelDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/channel/PayChannelDO.java
new file mode 100644
index 0000000..3828922
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/channel/PayChannelDO.java
@@ -0,0 +1,69 @@
+package com.tashow.cloud.pay.dal.dataobject.channel;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;
+import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
+import com.tashow.cloud.pay.dal.dataobject.app.PayAppDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.*;
+
+/**
+ * 支付渠道 DO
+ * 一个应用下,会有多种支付渠道,例如说微信支付、支付宝支付等等
+ *
+ * 即 PayAppDO : PayChannelDO = 1 : n
+ *
+ * @author 芋道源码
+ */
+@TableName(value = "pay_channel", autoResultMap = true)
+@KeySequence("pay_channel_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayChannelDO extends TenantBaseDO {
+
+ /**
+ * 渠道编号,数据库自增
+ */
+ private Long id;
+ /**
+ * 渠道编码
+ *
+ * 枚举 {@link PayChannelEnum}
+ */
+ private String code;
+ /**
+ * 状态
+ *
+ * 枚举 {@link CommonStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 渠道费率,单位:百分比
+ */
+ private Double feeRate;
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 支付渠道配置
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private PayClientConfig config;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/demo/PayDemoOrderDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/demo/PayDemoOrderDO.java
new file mode 100644
index 0000000..e29388c
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/demo/PayDemoOrderDO.java
@@ -0,0 +1,87 @@
+package com.tashow.cloud.pay.dal.dataobject.demo;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 示例订单
+ *
+ * 演示业务系统的订单,如何接入 pay 系统的支付与退款
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_demo_order")
+@KeySequence("pay_demo_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayDemoOrderDO extends BaseDO {
+
+ /**
+ * 订单编号,自增
+ */
+ @TableId
+ private Long id;
+ /**
+ * 用户编号
+ */
+ private Long userId;
+ /**
+ * 商品编号
+ */
+ private Long spuId;
+ /**
+ * 商品名称
+ */
+ private String spuName;
+ /**
+ * 价格,单位:分
+ */
+ private Integer price;
+
+ // ========== 支付相关字段 ==========
+
+ /**
+ * 是否支付
+ */
+ private Boolean payStatus;
+ /**
+ * 支付订单编号
+ *
+ * 对接 pay-module-biz 支付服务的支付订单编号,即 PayOrderDO 的 id 编号
+ */
+ private Long payOrderId;
+ /**
+ * 付款时间
+ */
+ private LocalDateTime payTime;
+ /**
+ * 支付渠道
+ *
+ * 对应 PayChannelEnum 枚举
+ */
+ private String payChannelCode;
+
+ // ========== 退款相关字段 ==========
+ /**
+ * 支付退款单号
+ */
+ private Long payRefundId;
+ /**
+ * 退款金额,单位:分
+ */
+ private Integer refundPrice;
+ /**
+ * 退款完成时间
+ */
+ private LocalDateTime refundTime;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/demo/PayDemoTransferDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/demo/PayDemoTransferDO.java
new file mode 100644
index 0000000..e25adca
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/demo/PayDemoTransferDO.java
@@ -0,0 +1,84 @@
+package com.tashow.cloud.pay.dal.dataobject.demo;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.enums.transfer.PayTransferTypeEnum;
+import com.tashow.cloud.pay.dal.dataobject.app.PayAppDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+// TODO 芋艿:需要详细 review
+/**
+ * 示例转账订单
+ *
+ * 演示业务系统的转账业务
+ */
+@TableName(value ="pay_demo_transfer", autoResultMap = true)
+@KeySequence("pay_demo_transfer_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+public class PayDemoTransferDO extends BaseDO {
+
+ /**
+ * 订单编号
+ */
+ @TableId
+ private Long id;
+
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+
+ /**
+ * 转账类型
+ *
+ * 枚举 {@link PayTransferTypeEnum}
+ */
+ private Integer type;
+
+ /**
+ * 转账金额,单位:分
+ */
+ private Integer price;
+
+ /**
+ * 收款人姓名
+ */
+ private String userName;
+
+ /**
+ * 支付宝登录号
+ */
+ private String alipayLogonId;
+
+ /**
+ * 微信 openId
+ */
+ private String openid;
+
+ /**
+ * 转账状态
+ */
+ private Integer transferStatus;
+
+ /**
+ * 转账单编号
+ */
+ private Long payTransferId;
+
+ /**
+ * 转账支付成功渠道
+ */
+ private String payChannelCode;
+
+ /**
+ * 转账支付时间
+ */
+ private LocalDateTime transferTime;
+
+}
\ No newline at end of file
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/notify/PayNotifyLogDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/notify/PayNotifyLogDO.java
new file mode 100644
index 0000000..84188c0
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/notify/PayNotifyLogDO.java
@@ -0,0 +1,51 @@
+package com.tashow.cloud.pay.dal.dataobject.notify;
+
+import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 商户支付、退款等的通知 Log
+ * 每次通知时,都会在该表中,记录一次 Log,方便排查问题
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_notify_log")
+@KeySequence("pay_notify_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayNotifyLogDO extends BaseDO {
+
+ /**
+ * 日志编号,自增
+ */
+ private Long id;
+ /**
+ * 通知任务编号
+ *
+ * 关联 {@link PayNotifyTaskDO#getId()}
+ */
+ private Long taskId;
+ /**
+ * 第几次被通知
+ *
+ * 对应到 {@link PayNotifyTaskDO#getNotifyTimes()}
+ */
+ private Integer notifyTimes;
+ /**
+ * HTTP 响应结果
+ */
+ private String response;
+ /**
+ * 支付通知状态
+ *
+ * 枚举 {@link PayNotifyStatusEnum}
+ */
+ private Integer status;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/notify/PayNotifyTaskDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/notify/PayNotifyTaskDO.java
new file mode 100644
index 0000000..fa82763
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/notify/PayNotifyTaskDO.java
@@ -0,0 +1,100 @@
+package com.tashow.cloud.pay.dal.dataobject.notify;
+
+import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
+import com.tashow.cloud.pay.dal.dataobject.app.PayAppDO;
+import com.tashow.cloud.pay.dal.dataobject.order.PayOrderDO;
+import com.tashow.cloud.pay.dal.dataobject.refund.PayRefundDO;
+import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
+import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * 支付通知
+ * 在支付系统收到支付渠道的支付、退款的结果后,需要不断的通知到业务系统,直到成功。
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_notify_task")
+@KeySequence("pay_notify_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class PayNotifyTaskDO extends TenantBaseDO {
+
+ /**
+ * 通知频率,单位为秒。
+ *
+ * 算上首次的通知,实际是一共 1 + 8 = 9 次。
+ */
+ public static final Integer[] NOTIFY_FREQUENCY = new Integer[]{
+ 15, 15, 30, 180,
+ 1800, 1800, 1800, 3600
+ };
+
+ /**
+ * 编号,自增
+ */
+ @TableId
+ private Long id;
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 通知类型
+ *
+ * 枚举 {@link PayNotifyTypeEnum}
+ */
+ private Integer type;
+ /**
+ * 数据编号,根据不同 type 进行关联:
+ *
+ * 1. {@link PayNotifyTypeEnum#ORDER} 时,关联 {@link PayOrderDO#getId()}
+ * 2. {@link PayNotifyTypeEnum#REFUND} 时,关联 {@link PayRefundDO#getId()}
+ */
+ private Long dataId;
+ /**
+ * 商户订单编号
+ */
+ private String merchantOrderId;
+ /**
+ * 商户转账单编号
+ */
+ private String merchantTransferId;
+ /**
+ * 通知状态
+ *
+ * 枚举 {@link PayNotifyStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 下一次通知时间
+ */
+ private LocalDateTime nextNotifyTime;
+ /**
+ * 最后一次执行时间
+ */
+ private LocalDateTime lastExecuteTime;
+ /**
+ * 当前通知次数
+ */
+ private Integer notifyTimes;
+ /**
+ * 最大可通知次数
+ */
+ private Integer maxNotifyTimes;
+ /**
+ * 通知地址
+ */
+ private String notifyUrl;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/order/PayOrderDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/order/PayOrderDO.java
new file mode 100644
index 0000000..61f28bc
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/order/PayOrderDO.java
@@ -0,0 +1,138 @@
+package com.tashow.cloud.pay.dal.dataobject.order;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;
+import com.tashow.cloud.pay.dal.dataobject.app.PayAppDO;
+import com.tashow.cloud.pay.dal.dataobject.channel.PayChannelDO;
+import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 支付订单 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_order")
+@KeySequence("pay_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayOrderDO extends BaseDO {
+
+ /**
+ * 订单编号,数据库自增
+ */
+ private Long id;
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 渠道编号
+ *
+ * 关联 {@link PayChannelDO#getId()}
+ */
+ private Long channelId;
+ /**
+ * 渠道编码
+ *
+ * 枚举 {@link PayChannelEnum}
+ */
+ private String channelCode;
+
+ // ========== 商户相关字段 ==========
+
+ /**
+ * 商户订单编号
+ *
+ * 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
+ */
+ private String merchantOrderId;
+ /**
+ * 商品标题
+ */
+ private String subject;
+ /**
+ * 商品描述信息
+ */
+ private String body;
+ /**
+ * 异步通知地址
+ */
+ private String notifyUrl;
+
+ // ========== 订单相关字段 ==========
+
+ /**
+ * 支付金额,单位:分
+ */
+ private Integer price;
+ /**
+ * 渠道手续费,单位:百分比
+ *
+ * 冗余 {@link PayChannelDO#getFeeRate()}
+ */
+ private Double channelFeeRate;
+ /**
+ * 渠道手续金额,单位:分
+ */
+ private Integer channelFeePrice;
+ /**
+ * 支付状态
+ *
+ * 枚举 {@link PayOrderStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 用户 IP
+ */
+ private String userIp;
+ /**
+ * 订单失效时间
+ */
+ private LocalDateTime expireTime;
+ /**
+ * 订单支付成功时间
+ */
+ private LocalDateTime successTime;
+ /**
+ * 支付成功的订单拓展单编号
+ *
+ * 关联 {@link PayOrderExtensionDO#getId()}
+ */
+ private Long extensionId;
+ /**
+ * 支付成功的外部订单号
+ *
+ * 关联 {@link PayOrderExtensionDO#getNo()}
+ */
+ private String no;
+
+ // ========== 退款相关字段 ==========
+ /**
+ * 退款总金额,单位:分
+ */
+ private Integer refundPrice;
+
+ // ========== 渠道相关字段 ==========
+ /**
+ * 渠道用户编号
+ *
+ * 例如说,微信 openid、支付宝账号
+ */
+ private String channelUserId;
+ /**
+ * 渠道订单号
+ */
+ private String channelOrderNo;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/order/PayOrderExtensionDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/order/PayOrderExtensionDO.java
new file mode 100644
index 0000000..9191db7
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/order/PayOrderExtensionDO.java
@@ -0,0 +1,96 @@
+package com.tashow.cloud.pay.dal.dataobject.order;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
+import com.tashow.cloud.pay.dal.dataobject.channel.PayChannelDO;
+import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.*;
+
+import java.util.Map;
+
+/**
+ * 支付订单拓展 DO
+ *
+ * 每次调用支付渠道,都会生成一条对应记录
+ *
+ * @author 芋道源码
+ */
+@TableName(value = "pay_order_extension",autoResultMap = true)
+@KeySequence("pay_order_extension_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayOrderExtensionDO extends BaseDO {
+
+ /**
+ * 订单拓展编号,数据库自增
+ */
+ private Long id;
+ /**
+ * 外部订单号,根据规则生成
+ *
+ * 调用支付渠道时,使用该字段作为对接的订单号:
+ * 1. 微信支付:对应 JSAPI 支付 的 out_trade_no 字段
+ * 2. 支付宝支付:对应 电脑网站支付 的 out_trade_no 字段
+ *
+ * 例如说,P202110132239124200055
+ */
+ private String no;
+ /**
+ * 订单号
+ *
+ * 关联 {@link PayOrderDO#getId()}
+ */
+ private Long orderId;
+ /**
+ * 渠道编号
+ *
+ * 关联 {@link PayChannelDO#getId()}
+ */
+ private Long channelId;
+ /**
+ * 渠道编码
+ */
+ private String channelCode;
+ /**
+ * 用户 IP
+ */
+ private String userIp;
+ /**
+ * 支付状态
+ *
+ * 枚举 {@link PayOrderStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 支付渠道的额外参数
+ *
+ * 参见 参数说明>
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private Map channelExtras;
+
+ /**
+ * 调用渠道的错误码
+ */
+ private String channelErrorCode;
+ /**
+ * 调用渠道报错时,错误信息
+ */
+ private String channelErrorMsg;
+
+ /**
+ * 支付渠道的同步/异步通知的内容
+ *
+ * 对应 {@link PayOrderRespDTO#getRawData()}
+ */
+ private String channelNotifyData;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/refund/PayRefundDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/refund/PayRefundDO.java
new file mode 100644
index 0000000..546cd32
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/refund/PayRefundDO.java
@@ -0,0 +1,160 @@
+package com.tashow.cloud.pay.dal.dataobject.refund;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundRespDTO;
+import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;
+import com.tashow.cloud.pay.dal.dataobject.app.PayAppDO;
+import com.tashow.cloud.pay.dal.dataobject.channel.PayChannelDO;
+import com.tashow.cloud.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 支付退款单 DO
+ * 一个支付订单,可以拥有多个支付退款单
+ *
+ * 即 PayOrderDO : PayRefundDO = 1 : n
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_refund")
+@KeySequence("pay_refund_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayRefundDO extends BaseDO {
+
+ /**
+ * 退款单编号,数据库自增
+ */
+ @TableId
+ private Long id;
+ /**
+ * 外部退款号,根据规则生成
+ *
+ * 调用支付渠道时,使用该字段作为对接的退款号:
+ * 1. 微信退款:对应 申请退款 的 out_refund_no 字段
+ * 2. 支付宝退款:对应 的 out_request_no 字段
+ */
+ private String no;
+
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 渠道编号
+ *
+ * 关联 {@link PayChannelDO#getId()}
+ */
+ private Long channelId;
+ /**
+ * 渠道编码
+ *
+ * 枚举 {@link PayChannelEnum}
+ */
+ private String channelCode;
+ /**
+ * 订单编号
+ *
+ * 关联 {@link PayOrderDO#getId()}
+ */
+ private Long orderId;
+ /**
+ * 支付订单编号
+ *
+ * 冗余 {@link PayOrderDO#getNo()}
+ */
+ private String orderNo;
+
+ // ========== 商户相关字段 ==========
+ /**
+ * 商户订单编号
+ *
+ * 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
+ */
+ private String merchantOrderId;
+ /**
+ * 商户退款订单号
+ *
+ * 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
+ */
+ private String merchantRefundId;
+ /**
+ * 异步通知地址
+ */
+ private String notifyUrl;
+
+ // ========== 退款相关字段 ==========
+ /**
+ * 退款状态
+ *
+ * 枚举 {@link PayRefundStatusEnum}
+ */
+ private Integer status;
+
+ /**
+ * 支付金额,单位:分
+ */
+ private Integer payPrice;
+ /**
+ * 退款金额,单位:分
+ */
+ private Integer refundPrice;
+
+ /**
+ * 退款原因
+ */
+ private String reason;
+
+ /**
+ * 用户 IP
+ */
+ private String userIp;
+
+ // ========== 渠道相关字段 ==========
+ /**
+ * 渠道订单号
+ *
+ * 冗余 {@link PayOrderDO#getChannelOrderNo()}
+ */
+ private String channelOrderNo;
+ /**
+ * 渠道退款单号
+ *
+ * 1. 微信退款:对应 申请退款 的 refund_id 字段
+ * 2. 支付宝退款:没有字段
+ */
+ private String channelRefundNo;
+ /**
+ * 退款成功时间
+ */
+ private LocalDateTime successTime;
+
+ /**
+ * 调用渠道的错误码
+ */
+ private String channelErrorCode;
+ /**
+ * 调用渠道的错误提示
+ */
+ private String channelErrorMsg;
+
+ /**
+ * 支付渠道的同步/异步通知的内容
+ *
+ * 对应 {@link PayRefundRespDTO#getRawData()}
+ */
+ private String channelNotifyData;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/transfer/PayTransferDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/transfer/PayTransferDO.java
new file mode 100644
index 0000000..dda157e
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/transfer/PayTransferDO.java
@@ -0,0 +1,158 @@
+package com.tashow.cloud.pay.dal.dataobject.transfer;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;
+import cn.iocoder.yudao.framework.pay.core.enums.transfer.PayTransferStatusRespEnum;
+import cn.iocoder.yudao.framework.pay.core.enums.transfer.PayTransferTypeEnum;
+import com.tashow.cloud.pay.dal.dataobject.app.PayAppDO;
+import com.tashow.cloud.pay.dal.dataobject.channel.PayChannelDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+// TODO 芋艿:需要详细 review
+/**
+ * 转账单 DO
+ *
+ * @author jason
+ */
+@TableName(value ="pay_transfer", autoResultMap = true)
+@KeySequence("pay_transfer_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+public class PayTransferDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+
+ /**
+ * 转账单号
+ *
+ */
+ private String no;
+
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+
+ /**
+ * 转账渠道编号
+ *
+ * 关联 {@link PayChannelDO#getId()}
+ */
+ private Long channelId;
+
+ /**
+ * 转账渠道编码
+ *
+ * 枚举 {@link PayChannelEnum}
+ */
+ private String channelCode;
+
+ // ========== 商户相关字段 ==========
+ /**
+ * 商户转账单编号
+ *
+ * 例如说,内部系统 A 的订单号,需要保证每个 PayAppDO 唯一
+ */
+ private String merchantTransferId;
+
+ // ========== 转账相关字段 ==========
+
+ /**
+ * 类型
+ *
+ * 枚举 {@link PayTransferTypeEnum}
+ */
+ private Integer type;
+
+ /**
+ * 转账标题
+ */
+ private String subject;
+
+ /**
+ * 转账金额,单位:分
+ */
+ private Integer price;
+
+ /**
+ * 收款人姓名
+ */
+ private String userName;
+
+ /**
+ * 转账状态
+ *
+ * 枚举 {@link PayTransferStatusRespEnum}
+ */
+ private Integer status;
+
+ /**
+ * 订单转账成功时间
+ */
+ private LocalDateTime successTime;
+
+ // ========== 支付宝转账相关字段 ==========
+ /**
+ * 支付宝登录号
+ */
+ private String alipayLogonId;
+
+
+ // ========== 微信转账相关字段 ==========
+ /**
+ * 微信 openId
+ */
+ private String openid;
+
+ // ========== 其它字段 ==========
+
+ /**
+ * 异步通知地址
+ */
+ private String notifyUrl;
+
+ /**
+ * 用户 IP
+ */
+ private String userIp;
+
+ /**
+ * 渠道的额外参数
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private Map channelExtras;
+
+ /**
+ * 渠道转账单号
+ */
+ private String channelTransferNo;
+
+ /**
+ * 调用渠道的错误码
+ */
+ private String channelErrorCode;
+ /**
+ * 调用渠道的错误提示
+ */
+ private String channelErrorMsg;
+
+ /**
+ * 渠道的同步/异步通知的内容
+ *
+ */
+ private String channelNotifyData;
+
+}
\ No newline at end of file
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletDO.java
new file mode 100644
index 0000000..df0f5a2
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletDO.java
@@ -0,0 +1,59 @@
+package com.tashow.cloud.pay.dal.dataobject.wallet;
+
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 会员钱包 DO
+ *
+ * @author jason
+ */
+@TableName(value ="pay_wallet")
+@KeySequence("pay_wallet_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+public class PayWalletDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+
+ /**
+ * 用户 id
+ *
+ * 关联 MemberUserDO 的 id 编号
+ * 关联 AdminUserDO 的 id 编号
+ */
+ private Long userId;
+ /**
+ * 用户类型, 预留 多商户转帐可能需要用到
+ *
+ * 关联 {@link UserTypeEnum}
+ */
+ private Integer userType;
+
+ /**
+ * 余额,单位分
+ */
+ private Integer balance;
+
+ /**
+ * 冻结金额,单位分
+ */
+ private Integer freezePrice;
+
+ /**
+ * 累计支出,单位分
+ */
+ private Integer totalExpense;
+ /**
+ * 累计充值,单位分
+ */
+ private Integer totalRecharge;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletRechargeDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletRechargeDO.java
new file mode 100644
index 0000000..df089f5
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletRechargeDO.java
@@ -0,0 +1,116 @@
+package com.tashow.cloud.pay.dal.dataobject.wallet;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.tashow.cloud.pay.dal.dataobject.order.PayOrderDO;
+import com.tashow.cloud.pay.dal.dataobject.refund.PayRefundDO;
+import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 会员钱包充值
+ */
+@TableName(value ="pay_wallet_recharge")
+@KeySequence("pay_wallet_recharge_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+public class PayWalletRechargeDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+
+ /**
+ * 钱包编号
+ *
+ * 关联 {@link PayWalletDO#getId()}
+ */
+ private Long walletId;
+
+ /**
+ * 用户实际到账余额
+ *
+ * 例如充 100 送 20,则该值是 120
+ */
+ private Integer totalPrice;
+ /**
+ * 实际支付金额
+ */
+ private Integer payPrice;
+ /**
+ * 钱包赠送金额
+ */
+ private Integer bonusPrice;
+
+ /**
+ * 充值套餐编号
+ *
+ * 关联 {@link PayWalletRechargeDO#getPackageId()} 字段
+ */
+ private Long packageId;
+
+ /**
+ * 是否已支付
+ *
+ * true - 已支付
+ * false - 未支付
+ */
+ private Boolean payStatus;
+
+ /**
+ * 支付订单编号
+ *
+ * 关联 {@link PayOrderDO#getId()}
+ */
+ private Long payOrderId;
+
+ /**
+ * 支付成功的支付渠道
+ *
+ * 冗余 {@link PayOrderDO#getChannelCode()}
+ */
+ private String payChannelCode;
+ /**
+ * 订单支付时间
+ */
+ private LocalDateTime payTime;
+
+ /**
+ * 支付退款单编号
+ *
+ * 关联 {@link PayRefundDO#getId()}
+ */
+ private Long payRefundId;
+
+ /**
+ * 退款金额,包含赠送金额
+ */
+ private Integer refundTotalPrice;
+ /**
+ * 退款支付金额
+ */
+ private Integer refundPayPrice;
+
+ /**
+ * 退款钱包赠送金额
+ */
+ private Integer refundBonusPrice;
+
+ /**
+ * 退款时间
+ */
+ private LocalDateTime refundTime;
+
+ /**
+ * 退款状态
+ *
+ * 枚举 {@link PayRefundStatusEnum}
+ */
+ private Integer refundStatus;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletRechargePackageDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletRechargePackageDO.java
new file mode 100644
index 0000000..44790e7
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletRechargePackageDO.java
@@ -0,0 +1,47 @@
+package com.tashow.cloud.pay.dal.dataobject.wallet;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 会员钱包充值套餐 DO
+ *
+ * 通过充值套餐时,可以赠送一定金额;
+ *
+ * @author 芋道源码
+ */
+@TableName(value ="pay_wallet_recharge_package")
+@KeySequence("pay_wallet_recharge_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+public class PayWalletRechargePackageDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 套餐名
+ */
+ private String name;
+
+ /**
+ * 支付金额
+ */
+ private Integer payPrice;
+ /**
+ * 赠送金额
+ */
+ private Integer bonusPrice;
+
+ /**
+ * 状态
+ *
+ * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum}
+ */
+ private Integer status;
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletTransactionDO.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletTransactionDO.java
new file mode 100644
index 0000000..d8064d9
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/dataobject/wallet/PayWalletTransactionDO.java
@@ -0,0 +1,66 @@
+package com.tashow.cloud.pay.dal.dataobject.wallet;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 会员钱包流水 DO
+ *
+ * @author jason
+ */
+@TableName(value ="pay_wallet_transaction")
+@KeySequence("pay_wallet_transaction_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+public class PayWalletTransactionDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+
+ /**
+ * 流水号
+ */
+ private String no;
+
+ /**
+ * 钱包编号
+ *
+ * 关联 {@link PayWalletDO#getId()}
+ */
+ private Long walletId;
+
+ /**
+ * 关联业务分类
+ *
+ * 枚举 {@link PayWalletBizTypeEnum#getType()}
+ */
+ private Integer bizType;
+
+ /**
+ * 关联业务编号
+ */
+ private String bizId;
+
+ /**
+ * 流水说明
+ */
+ private String title;
+
+ /**
+ * 交易金额,单位分
+ *
+ * 正值表示余额增加,负值表示余额减少
+ */
+ private Integer price;
+
+ /**
+ * 交易后余额,单位分
+ */
+ private Integer balance;
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/app/PayAppMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/app/PayAppMapper.java
new file mode 100644
index 0000000..0200ef6
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/app/PayAppMapper.java
@@ -0,0 +1,26 @@
+package com.tashow.cloud.pay.dal.mysql.app;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.controller.admin.app.vo.PayAppPageReqVO;
+import com.tashow.cloud.pay.dal.dataobject.app.PayAppDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PayAppMapper extends BaseMapperX {
+
+ default PageResult selectPage(PayAppPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(PayAppDO::getName, reqVO.getName())
+ .likeIfPresent(PayAppDO::getAppKey, reqVO.getAppKey())
+ .eqIfPresent(PayAppDO::getStatus, reqVO.getStatus())
+ .betweenIfPresent(PayAppDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PayAppDO::getId));
+ }
+
+ default PayAppDO selectByAppKey(String appKey) {
+ return selectOne(PayAppDO::getAppKey, appKey);
+ }
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/channel/PayChannelMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/channel/PayChannelMapper.java
new file mode 100644
index 0000000..e1b99c0
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/channel/PayChannelMapper.java
@@ -0,0 +1,28 @@
+package com.tashow.cloud.pay.dal.mysql.channel;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.dal.dataobject.channel.PayChannelDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Collection;
+import java.util.List;
+
+@Mapper
+public interface PayChannelMapper extends BaseMapperX {
+
+ default PayChannelDO selectByAppIdAndCode(Long appId, String code) {
+ return selectOne(PayChannelDO::getAppId, appId, PayChannelDO::getCode, code);
+ }
+
+ default List selectListByAppIds(Collection appIds){
+ return selectList(PayChannelDO::getAppId, appIds);
+ }
+
+ default List selectListByAppId(Long appId, Integer status) {
+ return selectList(new LambdaQueryWrapperX()
+ .eq(PayChannelDO::getAppId, appId)
+ .eq(PayChannelDO::getStatus, status));
+ }
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/demo/PayDemoOrderMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/demo/PayDemoOrderMapper.java
new file mode 100644
index 0000000..c49ac37
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/demo/PayDemoOrderMapper.java
@@ -0,0 +1,28 @@
+package com.tashow.cloud.pay.dal.mysql.demo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.dal.dataobject.demo.PayDemoOrderDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 示例订单 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface PayDemoOrderMapper extends BaseMapperX {
+
+ default PageResult selectPage(PageParam reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .orderByDesc(PayDemoOrderDO::getId));
+ }
+
+ default int updateByIdAndPayed(Long id, boolean wherePayed, PayDemoOrderDO updateObj) {
+ return update(updateObj, new LambdaQueryWrapperX()
+ .eq(PayDemoOrderDO::getId, id).eq(PayDemoOrderDO::getPayStatus, wherePayed));
+ }
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/demo/PayDemoTransferMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/demo/PayDemoTransferMapper.java
new file mode 100644
index 0000000..ea6102a
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/demo/PayDemoTransferMapper.java
@@ -0,0 +1,17 @@
+package com.tashow.cloud.pay.dal.mysql.demo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.dal.dataobject.demo.PayDemoTransferDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PayDemoTransferMapper extends BaseMapperX {
+
+ default PageResult selectPage(PageParam pageParam){
+ return selectPage(pageParam, new LambdaQueryWrapperX()
+ .orderByDesc(PayDemoTransferDO::getId));
+ }
+}
\ No newline at end of file
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/notify/PayNotifyLogMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/notify/PayNotifyLogMapper.java
new file mode 100644
index 0000000..dabdefd
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/notify/PayNotifyLogMapper.java
@@ -0,0 +1,16 @@
+package com.tashow.cloud.pay.dal.mysql.notify;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import com.tashow.cloud.pay.dal.dataobject.notify.PayNotifyLogDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PayNotifyLogMapper extends BaseMapperX {
+
+ default List selectListByTaskId(Long taskId) {
+ return selectList(PayNotifyLogDO::getTaskId, taskId);
+ }
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/notify/PayNotifyTaskMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/notify/PayNotifyTaskMapper.java
new file mode 100644
index 0000000..fdb8cb9
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/notify/PayNotifyTaskMapper.java
@@ -0,0 +1,44 @@
+package com.tashow.cloud.pay.dal.mysql.notify;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.controller.admin.notify.vo.PayNotifyTaskPageReqVO;
+import com.tashow.cloud.pay.dal.dataobject.notify.PayNotifyTaskDO;
+import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+public interface PayNotifyTaskMapper extends BaseMapperX {
+
+ /**
+ * 获得需要通知的 PayNotifyTaskDO 记录。需要满足如下条件:
+ *
+ * 1. status 非成功
+ * 2. nextNotifyTime 小于当前时间
+ *
+ * @return PayTransactionNotifyTaskDO 数组
+ */
+ default List selectListByNotify() {
+ return selectList(new LambdaQueryWrapper()
+ .in(PayNotifyTaskDO::getStatus, PayNotifyStatusEnum.WAITING.getStatus(),
+ PayNotifyStatusEnum.REQUEST_SUCCESS.getStatus(), PayNotifyStatusEnum.REQUEST_FAILURE.getStatus())
+ .le(PayNotifyTaskDO::getNextNotifyTime, LocalDateTime.now()));
+ }
+
+ default PageResult selectPage(PayNotifyTaskPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(PayNotifyTaskDO::getAppId, reqVO.getAppId())
+ .eqIfPresent(PayNotifyTaskDO::getType, reqVO.getType())
+ .eqIfPresent(PayNotifyTaskDO::getDataId, reqVO.getDataId())
+ .eqIfPresent(PayNotifyTaskDO::getStatus, reqVO.getStatus())
+ .eqIfPresent(PayNotifyTaskDO::getMerchantOrderId, reqVO.getMerchantOrderId())
+ .betweenIfPresent(PayNotifyTaskDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PayNotifyTaskDO::getId));
+ }
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/order/PayOrderExtensionMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/order/PayOrderExtensionMapper.java
new file mode 100644
index 0000000..ff9b66d
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/order/PayOrderExtensionMapper.java
@@ -0,0 +1,38 @@
+package com.tashow.cloud.pay.dal.mysql.order;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import com.tashow.cloud.pay.dal.dataobject.order.PayOrderExtensionDO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+public interface PayOrderExtensionMapper extends BaseMapperX {
+
+ default PayOrderExtensionDO selectByNo(String no) {
+ return selectOne(PayOrderExtensionDO::getNo, no);
+ }
+
+ default int updateByIdAndStatus(Long id, Integer status, PayOrderExtensionDO update) {
+ return update(update, new LambdaQueryWrapper()
+ .eq(PayOrderExtensionDO::getId, id).eq(PayOrderExtensionDO::getStatus, status));
+ }
+
+ default List selectListByOrderId(Long orderId) {
+ return selectList(PayOrderExtensionDO::getOrderId, orderId);
+ }
+
+ default List selectListByOrderIdAndStatus(Long orderId, Integer status) {
+ return selectList(PayOrderExtensionDO::getOrderId, orderId,
+ PayOrderExtensionDO::getStatus, status);
+ }
+
+ default List selectListByStatusAndCreateTimeGe(Integer status, LocalDateTime minCreateTime) {
+ return selectList(new LambdaQueryWrapper()
+ .eq(PayOrderExtensionDO::getStatus, status)
+ .ge(PayOrderExtensionDO::getCreateTime, minCreateTime));
+ }
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/order/PayOrderMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/order/PayOrderMapper.java
new file mode 100644
index 0000000..e949908
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/order/PayOrderMapper.java
@@ -0,0 +1,62 @@
+package com.tashow.cloud.pay.dal.mysql.order;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.controller.admin.order.vo.PayOrderExportReqVO;
+import com.tashow.cloud.pay.controller.admin.order.vo.PayOrderPageReqVO;
+import com.tashow.cloud.pay.dal.dataobject.order.PayOrderDO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+public interface PayOrderMapper extends BaseMapperX {
+
+ default PageResult selectPage(PayOrderPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(PayOrderDO::getAppId, reqVO.getAppId())
+ .eqIfPresent(PayOrderDO::getChannelCode, reqVO.getChannelCode())
+ .likeIfPresent(PayOrderDO::getMerchantOrderId, reqVO.getMerchantOrderId())
+ .likeIfPresent(PayOrderDO::getChannelOrderNo, reqVO.getChannelOrderNo())
+ .likeIfPresent(PayOrderDO::getNo, reqVO.getNo())
+ .eqIfPresent(PayOrderDO::getStatus, reqVO.getStatus())
+ .betweenIfPresent(PayOrderDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PayOrderDO::getId));
+ }
+
+ default List selectList(PayOrderExportReqVO reqVO) {
+ return selectList(new LambdaQueryWrapperX()
+ .eqIfPresent(PayOrderDO::getAppId, reqVO.getAppId())
+ .eqIfPresent(PayOrderDO::getChannelCode, reqVO.getChannelCode())
+ .likeIfPresent(PayOrderDO::getMerchantOrderId, reqVO.getMerchantOrderId())
+ .likeIfPresent(PayOrderDO::getChannelOrderNo, reqVO.getChannelOrderNo())
+ .likeIfPresent(PayOrderDO::getNo, reqVO.getNo())
+ .eqIfPresent(PayOrderDO::getStatus, reqVO.getStatus())
+ .betweenIfPresent(PayOrderDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PayOrderDO::getId));
+ }
+
+ default Long selectCountByAppId(Long appId) {
+ return selectCount(PayOrderDO::getAppId, appId);
+ }
+
+ default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) {
+ return selectOne(PayOrderDO::getAppId, appId,
+ PayOrderDO::getMerchantOrderId, merchantOrderId);
+ }
+
+ default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) {
+ return update(update, new LambdaQueryWrapper()
+ .eq(PayOrderDO::getId, id).eq(PayOrderDO::getStatus, status));
+ }
+
+ default List selectListByStatusAndExpireTimeLt(Integer status, LocalDateTime expireTime) {
+ return selectList(new LambdaQueryWrapper()
+ .eq(PayOrderDO::getStatus, status)
+ .lt(PayOrderDO::getExpireTime, expireTime));
+ }
+
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/refund/PayRefundMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/refund/PayRefundMapper.java
new file mode 100644
index 0000000..a8e383c
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/refund/PayRefundMapper.java
@@ -0,0 +1,78 @@
+package com.tashow.cloud.pay.dal.mysql.refund;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.controller.admin.refund.vo.PayRefundExportReqVO;
+import com.tashow.cloud.pay.controller.admin.refund.vo.PayRefundPageReqVO;
+import com.tashow.cloud.pay.dal.dataobject.refund.PayRefundDO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PayRefundMapper extends BaseMapperX {
+
+ default Long selectCountByAppId(Long appId) {
+ return selectCount(PayRefundDO::getAppId, appId);
+ }
+
+ default PayRefundDO selectByAppIdAndMerchantRefundId(Long appId, String merchantRefundId) {
+ return selectOne(new LambdaQueryWrapperX()
+ .eq(PayRefundDO::getAppId, appId)
+ .eq(PayRefundDO::getMerchantRefundId, merchantRefundId));
+ }
+
+ default Long selectCountByAppIdAndOrderId(Long appId, Long orderId, Integer status) {
+ return selectCount(new LambdaQueryWrapperX()
+ .eq(PayRefundDO::getAppId, appId)
+ .eq(PayRefundDO::getOrderId, orderId)
+ .eq(PayRefundDO::getStatus, status));
+ }
+
+ default PayRefundDO selectByAppIdAndNo(Long appId, String no) {
+ return selectOne(new LambdaQueryWrapperX()
+ .eq(PayRefundDO::getAppId, appId)
+ .eq(PayRefundDO::getNo, no));
+ }
+
+ default PayRefundDO selectByNo(String no) {
+ return selectOne(PayRefundDO::getNo, no);
+ }
+
+ default int updateByIdAndStatus(Long id, Integer status, PayRefundDO update) {
+ return update(update, new LambdaQueryWrapper()
+ .eq(PayRefundDO::getId, id).eq(PayRefundDO::getStatus, status));
+ }
+
+ default PageResult selectPage(PayRefundPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(PayRefundDO::getAppId, reqVO.getAppId())
+ .eqIfPresent(PayRefundDO::getChannelCode, reqVO.getChannelCode())
+ .likeIfPresent(PayRefundDO::getMerchantOrderId, reqVO.getMerchantOrderId())
+ .likeIfPresent(PayRefundDO::getMerchantRefundId, reqVO.getMerchantRefundId())
+ .likeIfPresent(PayRefundDO::getChannelOrderNo, reqVO.getChannelOrderNo())
+ .likeIfPresent(PayRefundDO::getChannelRefundNo, reqVO.getChannelRefundNo())
+ .eqIfPresent(PayRefundDO::getStatus, reqVO.getStatus())
+ .betweenIfPresent(PayRefundDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PayRefundDO::getId));
+ }
+
+ default List selectList(PayRefundExportReqVO reqVO) {
+ return selectList(new LambdaQueryWrapperX()
+ .eqIfPresent(PayRefundDO::getAppId, reqVO.getAppId())
+ .eqIfPresent(PayRefundDO::getChannelCode, reqVO.getChannelCode())
+ .likeIfPresent(PayRefundDO::getMerchantOrderId, reqVO.getMerchantOrderId())
+ .likeIfPresent(PayRefundDO::getMerchantRefundId, reqVO.getMerchantRefundId())
+ .likeIfPresent(PayRefundDO::getChannelOrderNo, reqVO.getChannelOrderNo())
+ .likeIfPresent(PayRefundDO::getChannelRefundNo, reqVO.getChannelRefundNo())
+ .eqIfPresent(PayRefundDO::getStatus, reqVO.getStatus())
+ .betweenIfPresent(PayRefundDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PayRefundDO::getId));
+ }
+
+ default List selectListByStatus(Integer status) {
+ return selectList(PayRefundDO::getStatus, status);
+ }
+}
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/transfer/PayTransferMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/transfer/PayTransferMapper.java
new file mode 100644
index 0000000..b6f8a8a
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/transfer/PayTransferMapper.java
@@ -0,0 +1,53 @@
+package com.tashow.cloud.pay.dal.mysql.transfer;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.controller.admin.transfer.vo.PayTransferPageReqVO;
+import com.tashow.cloud.pay.dal.dataobject.transfer.PayTransferDO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PayTransferMapper extends BaseMapperX {
+
+ default int updateByIdAndStatus(Long id, List status, PayTransferDO updateObj) {
+ return update(updateObj, new LambdaQueryWrapper()
+ .eq(PayTransferDO::getId, id).in(PayTransferDO::getStatus, status));
+ }
+
+ default PayTransferDO selectByAppIdAndMerchantTransferId(Long appId, String merchantTransferId){
+ return selectOne(PayTransferDO::getAppId, appId,
+ PayTransferDO::getMerchantTransferId, merchantTransferId);
+ }
+
+ default PageResult selectPage(PayTransferPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(PayTransferDO::getNo, reqVO.getNo())
+ .eqIfPresent(PayTransferDO::getAppId, reqVO.getAppId())
+ .eqIfPresent(PayTransferDO::getChannelCode, reqVO.getChannelCode())
+ .eqIfPresent(PayTransferDO::getMerchantTransferId, reqVO.getMerchantTransferId())
+ .eqIfPresent(PayTransferDO::getType, reqVO.getType())
+ .eqIfPresent(PayTransferDO::getStatus, reqVO.getStatus())
+ .likeIfPresent(PayTransferDO::getUserName, reqVO.getUserName())
+ .eqIfPresent(PayTransferDO::getChannelTransferNo, reqVO.getChannelTransferNo())
+ .betweenIfPresent(PayTransferDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PayTransferDO::getId));
+ }
+
+ default List selectListByStatus(Integer status) {
+ return selectList(PayTransferDO::getStatus, status);
+ }
+
+ default PayTransferDO selectByAppIdAndNo(Long appId, String no) {
+ return selectOne(PayTransferDO::getAppId, appId,
+ PayTransferDO::getNo, no);
+ }
+
+}
+
+
+
+
diff --git a/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/wallet/PayWalletMapper.java b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/wallet/PayWalletMapper.java
new file mode 100644
index 0000000..76e75ba
--- /dev/null
+++ b/tashow-module/tashow-module-pay/src/main/java/com/tashow/cloud/pay/dal/mysql/wallet/PayWalletMapper.java
@@ -0,0 +1,134 @@
+package com.tashow.cloud.pay.dal.mysql.wallet;
+
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.tashow.cloud.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
+import com.tashow.cloud.pay.dal.dataobject.wallet.PayWalletDO;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PayWalletMapper extends BaseMapperX {
+
+ default PayWalletDO selectByUserIdAndType(Long userId, Integer userType) {
+ return selectOne(PayWalletDO::getUserId, userId,
+ PayWalletDO::getUserType, userType);
+ }
+
+ default PageResult selectPage(PayWalletPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX