博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌
博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。
🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
Java项目案例《100套》 https://blog.csdn.net/qq_57756904/category_12173599.html uniapp小程序《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。
最后再送一句:最好是学会了,而不是学废了!!
2
核心表结构设计
1. 用户账户相关表
用户信息表(user_info)
CREATE TABLE `user_info` (
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`user_name` varchar(64) NOT NULL COMMENT '用户名',
`user_type` tinyint(4) NOT NULL COMMENT '用户类型(1-个人 2-企业)',
`real_name` varchar(64) DEFAULT NULL COMMENT '真实姓名',
`id_card_no` varchar(32) DEFAULT NULL COMMENT '证件号码',
`mobile` varchar(20) DEFAULT NULL COMMENT '手机号',
`email` varchar(128) DEFAULT NULL COMMENT '邮箱',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态(0-禁用 1-正常)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `idx_mobile` (`mobile`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户基本信息表';
账户表(account)
CREATE TABLE `account` (
`account_id` bigint(20) NOT NULL COMMENT '账户ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`account_type` tinyint(4) NOT NULL COMMENT '账户类型(1-现金账户 2-信用账户)',
`currency` varchar(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
`balance` decimal(20,4) NOT NULL DEFAULT '0.0000' COMMENT '可用余额',
`freeze_amount` decimal(20,4) NOT NULL DEFAULT '0.0000' COMMENT '冻结金额',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态(0-冻结 1-正常)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`account_id`),
UNIQUE KEY `idx_user_currency_type` (`user_id`,`currency`,`account_type`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户账户表';
2. 支付交易相关表
支付订单表(payment_order)
CREATE TABLE `payment_order` (
`order_id` varchar(32) NOT NULL COMMENT '订单号',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`merchant_id` bigint(20) NOT NULL COMMENT '商户ID',
`order_amount` decimal(20,4) NOT NULL COMMENT '订单金额',
`order_currency` varchar(10) NOT NULL DEFAULT 'CNY' COMMENT '订单币种',
`order_subject` varchar(256) NOT NULL COMMENT '订单标题',
`order_body` varchar(512) DEFAULT NULL COMMENT '订单描述',
`order_time` datetime NOT NULL COMMENT '订单创建时间',
`order_expire` datetime DEFAULT NULL COMMENT '订单过期时间',
`order_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '订单状态(0-待支付 1-支付中 2-支付成功 3-支付失败 4-已关闭)',
`notify_url` varchar(512) DEFAULT NULL COMMENT '异步通知地址',
`callback_url` varchar(512) DEFAULT NULL COMMENT '前端跳转地址',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`order_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_merchant_id` (`merchant_id`),
KEY `idx_create_time` (`create_time`),
KEY `idx_order_status` (`order_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付订单表';
支付交易表(payment_transaction)
CREATE TABLE `payment_transaction` (
`transaction_id` varchar(32) NOT NULL COMMENT '交易流水号',
`order_id` varchar(32) NOT NULL COMMENT '关联订单号',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`merchant_id` bigint(20) NOT NULL COMMENT '商户ID',
`transaction_amount` decimal(20,4) NOT NULL COMMENT '交易金额',
`transaction_currency` varchar(10) NOT NULL DEFAULT 'CNY' COMMENT '交易币种',
`transaction_type` tinyint(4) NOT NULL COMMENT '交易类型(1-支付 2-退款)',
`payment_method` tinyint(4) NOT NULL COMMENT '支付方式(1-余额 2-银行卡 3-支付宝 4-微信)',
`payment_channel` varchar(32) NOT NULL COMMENT '支付渠道编码',
`channel_transaction_id` varchar(64) DEFAULT NULL COMMENT '渠道交易号',
`transaction_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '交易状态(0-处理中 1-成功 2-失败)',
`complete_time` datetime DEFAULT NULL COMMENT '交易完成时间',
`error_code` varchar(32) DEFAULT NULL COMMENT '错误码',
`error_msg` varchar(128) DEFAULT NULL COMMENT '错误信息',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`transaction_id`),
UNIQUE KEY `idx_order_id_type` (`order_id`,`transaction_type`),
KEY `idx_user_id` (`user_id`),
KEY `idx_merchant_id` (`merchant_id`),
KEY `idx_channel_transaction_id` (`channel_transaction_id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付交易表';
3. 资金流水相关表
账户流水表(account_flow)
CREATE TABLE `account_flow` (
`flow_id` bigint(20) NOT NULL COMMENT '流水ID',
`account_id` bigint(20) NOT NULL COMMENT '账户ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`transaction_id` varchar(32) NOT NULL COMMENT '关联交易号',
`order_id` varchar(32) NOT NULL COMMENT '关联订单号',
`flow_type` tinyint(4) NOT NULL COMMENT '流水类型(1-收入 2-支出 3-冻结 4-解冻)',
`flow_amount` decimal(20,4) NOT NULL COMMENT '变动金额',
`balance` decimal(20,4) NOT NULL COMMENT '变动后余额',
`flow_desc` varchar(256) DEFAULT NULL COMMENT '流水描述',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`flow_id`),
KEY `idx_account_id` (`account_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_transaction_id` (`transaction_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账户流水表';
4. 渠道相关表
支付渠道表(payment_channel)
CREATE TABLE `payment_channel` (
`channel_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '渠道ID',
`channel_code` varchar(32) NOT NULL COMMENT '渠道编码',
`channel_name` varchar(64) NOT NULL COMMENT '渠道名称',
`channel_type` tinyint(4) NOT NULL COMMENT '渠道类型(1-银行卡 2-第三方支付)',
`merchant_id` varchar(64) DEFAULT NULL COMMENT '渠道商户号',
`merchant_key` varchar(256) DEFAULT NULL COMMENT '渠道密钥',
`api_url` varchar(512) DEFAULT NULL COMMENT '接口地址',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态(0-禁用 1-启用)',
`config_json` text COMMENT '渠道配置JSON',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`channel_id`),
UNIQUE KEY `idx_channel_code` (`channel_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付渠道表';
5. 对账相关表
对账批次表(recon_batch)
CREATE TABLE `recon_batch` (
`batch_id` bigint(20) NOT NULL COMMENT '对账批次ID',
`channel_code` varchar(32) NOT NULL COMMENT '渠道编码',
`batch_date` date NOT NULL COMMENT '对账日期',
`batch_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态(0-初始化 1-对账中 2-对账完成 3-异常)',
`total_count` int(11) DEFAULT '0' COMMENT '总记录数',
`success_count` int(11) DEFAULT '0' COMMENT '成功记录数',
`fail_count` int(11) DEFAULT '0' COMMENT '失败记录数',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`batch_id`),
UNIQUE KEY `idx_channel_date` (`channel_code`,`batch_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对账批次表';
对账差异表(recon_diff)
CREATE TABLE `recon_diff` (
`diff_id` bigint(20) NOT NULL COMMENT '差异ID',
`batch_id` bigint(20) NOT NULL COMMENT '对账批次ID',
`transaction_id` varchar(32) NOT NULL COMMENT '交易流水号',
`channel_transaction_id` varchar(64) DEFAULT NULL COMMENT '渠道交易号',
`diff_type` tinyint(4) NOT NULL COMMENT '差异类型(1-我方有渠道无 2-渠道有我方无 3-金额不一致)',
`our_amount` decimal(20,4) DEFAULT NULL COMMENT '我方金额',
`channel_amount` decimal(20,4) DEFAULT NULL COMMENT '渠道金额',
`our_status` tinyint(4) DEFAULT NULL COMMENT '我方状态',
`channel_status` tinyint(4) DEFAULT NULL COMMENT '渠道状态',
`handle_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '处理状态(0-未处理 1-已处理)',
`handle_remark` varchar(256) DEFAULT NULL COMMENT '处理备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`diff_id`),
KEY `idx_batch_id` (`batch_id`),
KEY `idx_transaction_id` (`transaction_id`),
KEY `idx_channel_transaction_id` (`channel_transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对账差异表';
分库分表策略
用户相关表:按user_id哈希分片
user_info
account
account_flow
交易相关表:按创建时间范围分表
payment_order_YYYYMM
payment_transaction_YYYYMM
对账相关表:按对账日期分表
recon_batch_YYYY
recon_diff_YYYY
索引设计原则
所有主表必须有自增主键
高频查询字段建立索引
联合查询字段建立组合索引
状态字段建立索引用于筛选
时间字段建立索引用于范围查询
数据安全考虑
敏感字段加密存储(如身份证、银行卡号)
操作日志表记录关键数据变更
定期数据备份策略
敏感数据访问权限控制
这个数据库设计涵盖了支付系统核心功能,可根据实际业务需求进行调整和扩展。
3