提交 1fc1d8e1 authored 作者: YunaiV's avatar YunaiV

增加文档

上级 6e91c41c
[toc]
# 前言 # 前言
B2C 电商。 基于微服务的思想,构建在 B2C 电商场景下的项目实战。
* 「Talk is cheap. Show me the code」(屁话少说,放码过来)
> 我们看过很多技术文章,却依然不知道微服务该咋整。
* 整体的功能如下图:![功能图](http://static.iocoder.cn/mall%20%E5%8A%9F%E8%83%BD%E5%9B%BE-min.png)
> 功能图,和实际后端模块拆分,并不是绝对对应。
* 交流群:[传送门](http://www.iocoder.cn/mall-user-group/?vip&gitee)
> 一起交流,Get 知识。
* 我们迫切希望更多的参与进来,可以加入「交流群」,一起骚聊。
# 演示
## H5 商城
[体验传送门](http://h5.shop.iocoder.cn:18099)
TODO 此处应有一个演示的装逼 GIF 图。
## 管理后台
[体验传送门](http://admin.shop.iocoder.cn:18099)
TODO 暂时不提供管理后台的账号密码,等后面提供。
TODO 此处应有一个演示的装逼 GIF 图。
## TODO
提供其他演示环境。例如说 skywalking、sentinel 等等。
# 技术
## 搭建环境
# 技术栈 [搭建调试环境](https://gitee.com/zhijiantianya/mall/docs/setup/quick-start.md)
## 前端 ## 架构图
* 用户 H5 站:Vue + Vant TODO 此处应有一个架构图的装逼 JPG 图。
* 管理后台:React + Antd
## 后端 ## 项目结构
| 模块 | 名称 | 端口 |
| --- | --- | --- |
| `admin-web` | 【前端】管理后台 | HTTP 8080 |
| `mobile-web` | 【前端】商城 H5 | HTTP 8000 |
| `admin-application` | 管理员 HTTP 服务 | HTTP 18083 |
| `user-application` | 用户 HTTP 服务 | HTTP 18082 |
| `product-application` | 商品 HTTP 服务 | HTTP 18081 |
| `pay-application` | 支付 HTTP 服务 | HTTP 18084 |
| `promotion-application` | 促销 HTTP 服务 | HTTP 18085 |
| `search-application` | 搜索 HTTP 服务 | HTTP 18086 |
| `order-application` | 订单 HTTP 服务 | HTTP 18088 |
-------
后端项目,目前的项目结构如下:
```Java
[-] xxx
├──[-] xxx-application // 提供对外 HTTP API 。
├──[-] xxx-service-api // 提供 Dubbo 服务 API 。
├──[-] xxx-service-impl // 提供 Dubbo 服务 Service 实现。
```
考虑到大多数公司,无需拆分的特别细,并且过多 JVM 带来的服务器成本。所以目前的设定是:
* `xxx-service-impl` 内嵌在 `xxx-application` 中运行。
* MQ 消费者、定时器执行器,内嵌在 `xxx-service-impl` 中运行。
也就是说,一个 `xxx-application` 启动后,该模块就完整启动了。
## 技术栈
### 后端
| 框架 | 说明 | 版本 |
| --- | --- | --- |
| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.1.4 |
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.6 |
| [MyBatis](http://www.mybatis.org/mybatis-3/zh/index.html) | 数据持久层框架 | 3.5.0 |
| [Redis](https://redis.io/) | key-value 数据库 | 暂未引入,等压测后,部分模块 |
| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 暂未引入,等压测后,部分模块 |
| [Elasticsearch](https://www.elastic.co/cn/) | 分布式搜索引擎 | 6.7.1 |
| [Dubbo](http://dubbo.apache.org/) | 分布式 RPC 服务框架 | 2.6.5 |
| [RocketMQ](http://dubbo.apache.org/) | 消息中间件 | 4.3.2 |
| [SkyWalking](http://skywalking.apache.org/) | 分布式应用追踪系统 | 6.0.0 |
| [Zookeeper](http://zookeeper.apache.org/) | 分布式系统协调 | 3.4.9 作为注册中心 |
| [XXL-Job](http://www.xuxueli.com/xxl-job/) | 分布式任务调度平台 | 2.0.1 |
未来考虑引入
* Spring Boot
* MyBatis + MySQL
* [ ] Redis + Redisson
* Elasticsearch 搜索引擎
* Dubbo 服务化框架
* RocketMQ 消息队列
* Zookeeper 注册中心
* SkyWalking 链路追踪 & JVM 监控
* XXL-Job 任务调度
* [ ] 配置中心 Nacos * [ ] 配置中心 Nacos
* [ ] 服务保障 Sentinel * [ ] 服务保障 Sentinel
* [ ] 分布式事务 Seata * [ ] 分布式事务 Seata
* [ ] 数据库连接池 Druid
* [ ] 网关 Soul
## 其它 ### 前端
* Jenkins 持续集成 商城 H5 和管理后台,分别采用了 Vue 和 React ,基于其适合的场景考虑。具体的,可以看看 [《为什么 React 比 Vue 更适合大型应用?》](https://www.zhihu.com/question/314761485/answer/615318460) 的讨论。
* Nginx 服务器
* [ ] Docker 容器
# 项目结构 **商城 H5**
* admin-web 管理后台 | 框架 | 说明 | 版本 |
* mobile-web 用户 H5 站 | --- | --- | --- |
* user 用户服务 | [Vue](https://cn.vuejs.org/index.html) | JavaScript 框架 | 2.5.17 |
* product 商品服务 | [Vant](https://youzan.github.io/vant/#/zh-CN/intro) | Vue UI 组件库 | 3.13.0 |
* order 订单服务
* pay 支付服务
* admin 管理员、数据字典、短信等等系统大杂烩
# 演示 **管理后台**
* H5 商城:http://h5.shop.iocoder.cn:18099 | 框架 | 说明 | 版本 |
* 管理后台:http://admin.shop.iocoder.cn:18099 | --- | --- | --- |
| [React](https://reactjs.org/) | JavaScript 框架 | 16.7.0 |
| [Ant Design](https://ant.design/docs/react/introduce-cn) | React UI 组件库 | 3.13.0 |
TODO 暂时不提供管理后台的账号密码,等后面提供。 ### 其它
# 结尾 * Jenkins 持续集成
* Nginx 服务器
* [ ] Docker 容器
* [ ] Nginx
如果你对该项目感兴趣,可以加 QQ 7685413 。 # 某种结尾
目前成员 目前成员
......
* setup
> 提供安装指南
* [搭建调试环境](https://gitee.com/zhijiantianya/mall/docs/setup/quick-start.md)
* sql
> 提供 SQL 文件
* guides
> 提供入门指南
* TODO
\ No newline at end of file
# 1. 概述
> 艿艿:本文暂时会写的比较简洁,如果有不懂的地方,请来[「交流群」](http://www.iocoder.cn/mall-user-group/?vip&gitee),艿艿来帮你解决。
本文,我们希望能带着胖友,快速搭建一个开发/调试环境。总的来说,我们需要安装如下东西:
* 后端
* JDK 8+
* Maven
* IntelliJ IDEA
* 前端
* NPM
# 2. 源码拉取
使用 IntelliJ IDEA 从 <https://gitee.com/zhijiantianya/mall> 。拉取完成后,Maven 会下载依赖包,可能会花费一些时间,耐心等待下。
> 艿艿:也不要瞎等,咱继续顺着本文往下走。
# 3. MySQL
① 安装 MySQL 数据库
* Windows :参考 [《Windows 安装 MySQL》](https://juejin.im/post/5bdab0645188251e753c66f8)
* Mac :参考 [《Mac 下安装与配置 MySQL》](https://www.jianshu.com/p/a8e4068a7a8a)
② 导入 SQL
[docs/sql](TODO) 下的 SQL ,逐个导入到数据库中。
③ 修改项目中的 MySQL 配置
在 IDEA 中,搜索每个 `xxx-service-impl` 项目下的 `application.yaml` 文件,将数据库配置修改成连接你的。如下:
```YAML
spring:
# datasource
datasource:
url: jdbc:mysql://180.167.213.26:13306/mall_product?useSSL=false&useUnicode=true&characterEncoding=UTF-8 # 请修改成你本地的 MySQL url
driver-class-name: com.mysql.jdbc.Driver
username: root # 请修改成你本地的 MySQL username
password: ${MALL_MYSQL_PASSWORD} # 请修改成你本地的 MySQL password
```
# 4. Zookeeper
① 安装 Zookeeper
* Windows :参考 [《Windows 下 ZooKeeper 的配置和启动步骤 —— 单机模式》](https://www.jianshu.com/p/66857cbccbd3)
* Mac :参考 [《Mac 下安装与配置 MySQL》](https://www.jianshu.com/p/a8e4068a7a8a)
② 修改项目中的 Zookeeper 配置
在 IDEA 中,搜索每个 `xxx-service-impl` 项目下的 `application.yaml` 文件,将 Zookeeper 配置修改成连接你的。如下:
```YAML
# dubbo
dubbo:
application:
name: product-service
registry:
address: zookeeper://127.0.0.1:2181 # 请修改成你本地的 Zookeeper url
protocol:
port: -1
name: dubbo
scan:
base-packages: cn.iocoder.mall.product.service
```
# 5. RocketMQ
① 安装 RocketMQ
* Windows :参考 [《RocketMQ 入门 —— 安装以及快速入门》](http://www.iocoder.cn/RocketMQ/start/install/?vip&gitee)
* Mac :参考 [《RocketMQ 入门 —— 安装以及快速入门》](http://www.iocoder.cn/RocketMQ/start/install/?vip&gitee)
② 修改项目中的 RocketMQ 配置
在 IDEA 中,搜索每个 `xxx-service-impl` 项目下的 `application.yaml` 文件,将 RocketMQ 配置修改成连接你的。如下:
```YAML
rocketmq:
name-server: 127.0.0.1:9876 # 请修改成你本地的 RocketMQ url
producer:
group: product-producer-group
```
# 6. XXL-Job
> 艿艿:这个中间件的安装,是可选项。如果不安装,只是定时任务无法执行。
TODO 未完成。建议先跳过。
① 安装 XXL-Job
参考 [《分布式任务调度平台 XXL-JOB》](http://www.xuxueli.com/xxl-job/#/) 官方文档。
② 修改项目中的 XXL-Job 配置
在 IDEA 中,搜索每个 `xxx-service-impl` 项目下的 `application-dev.yaml` 文件,将 XXL-Job 配置修改成连接你的。如下:
```YAML
# xxl-job
xxl:
job:
admin:
addresses: http://127.0.0.1:18079/ # 请修改成你本地的 XXL-Job url
executor:
appname: pay-job-executor
ip:
port: 0
logpath: /Users/yunai/logs/xxl-job/ # 请修改成你希望存放日志的目录
logretentiondays: 1
accessToken:
```
③ 配置项目中的每个作业
TODO 芋艿,需要完善
# 7. Elasticsearch
① 安装 Elasticsearch
* Windows :参考 [《ElasticSearch 入门 第一篇:Windows 下安装ElasticSearch》](http://www.cnblogs.com/ljhdo/p/4887557.html)
* Mac :参考 [《mac 安装 ElasticSearch 笔记》](https://www.jianshu.com/p/81b0b3a60c01)
② 修改项目中的 Elasticsearch 配置
在 IDEA 中,搜索`search-service-impl` 项目下的 `application.yaml` 文件,将 Elasticsearch 配置修改成连接你的。如下:
```YAML
# es
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 180.167.213.26:9300 # 请修改成你本地的 Elasticsearch url
repositories:
enable: true
```
# 8. 启动后端项目
在 IDEA 中,右键运行每个 `XXXApplication.java` 。例如说,`admin` 项目是 AdminApplication 。
是否启动成功,请查看 IDEA 输出的日志。
具体的启动顺序,是:
* AdminApplication
* UserApplication
* ProductApplication
* PayApplication
> 因为支付服务,涉及三方支付平台的配置。所以,需要艿艿后续提供简便的方案。TODO
* PromotionApplication
* SearchApplication
* OrderApplication
# 9. 启动前端项目
① 启动商城 H5 项目
`mobile-web` 项目下,执行 `npm start`
启动成功后,浏览器访问 <http://127.0.0.1:8000>
② 启动管理后台项目
`admin-web` 项目下,执行 `npm run start:no-mock`
启动成功后,浏览器访问 <http://127.0.0.1:8080>
# 10. 数据配置
TODO 芋艿
因为项目该配置完,是没有任何数据的。所以,需要操作对应的功能,添加数据。
# 233. 彩蛋
> 艿艿:本文暂时会写的比较简洁,如果有不懂的地方,请来[「交流群」](http://www.iocoder.cn/mall-user-group/?vip&gitee),艿艿来帮你解决。
\ No newline at end of file
/*
Navicat Premium Data Transfer
Source Server : mall_mysql
Source Server Type : MySQL
Source Server Version : 50643
Source Host : 180.167.213.26:13306
Source Schema : mall_admin
Target Server Type : MySQL
Target Server Version : 50643
File Encoding : 65001
Date: 28/04/2019 18:05:05
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '管理员编号',
`username` varchar(16) NOT NULL COMMENT '登陆账号',
`nickname` varchar(10) NOT NULL COMMENT '昵称',
`password` varchar(32) NOT NULL COMMENT '密码\n *\n * TODO 芋艿 暂时最简单的 MD5',
`create_time` datetime NOT NULL COMMENT '创建时间',
`status` tinyint(11) NOT NULL COMMENT '账号状态',
`deleted` bit(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='admin_d_o';
-- ----------------------------
-- Table structure for admin_access_log
-- ----------------------------
DROP TABLE IF EXISTS `admin_access_log`;
CREATE TABLE `admin_access_log` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`admin_id` int(11) NOT NULL DEFAULT '-1' COMMENT '管理员编号.',
`uri` varchar(4096) NOT NULL DEFAULT '' COMMENT '访问地址',
`query_string` varchar(4096) NOT NULL DEFAULT '' COMMENT '参数',
`method` varchar(50) NOT NULL DEFAULT '' COMMENT 'http 方法',
`user_agent` varchar(1024) NOT NULL DEFAULT '' COMMENT 'userAgent',
`ip` varchar(50) NOT NULL DEFAULT '' COMMENT 'ip',
`start_time` datetime NOT NULL COMMENT '请求时间',
`response_time` int(11) NOT NULL COMMENT '响应时长 -- 毫秒级',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5874 DEFAULT CHARSET=utf8mb4 COMMENT='admin_access_log';
-- ----------------------------
-- Table structure for admin_role
-- ----------------------------
DROP TABLE IF EXISTS `admin_role`;
CREATE TABLE `admin_role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`admin_id` int(11) NOT NULL COMMENT '管理员编号(外键:{@link AdminDO}',
`role_id` int(11) NOT NULL COMMENT '角色编号(外键:{@link RoleDO}',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`deleted` bit(1) DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='admin_role_d_o';
-- ----------------------------
-- Table structure for data_dict
-- ----------------------------
DROP TABLE IF EXISTS `data_dict`;
CREATE TABLE `data_dict` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`enum_value` varchar(50) NOT NULL DEFAULT '' COMMENT '大类枚举值',
`display_name` varchar(50) NOT NULL DEFAULT '' COMMENT '展示名',
`sort` int(11) NOT NULL DEFAULT '-1' COMMENT '排序值',
`memo` varchar(50) DEFAULT '' COMMENT '备注',
`value` varchar(50) NOT NULL DEFAULT '' COMMENT '小类数值',
`deleted` tinyint(11) NOT NULL DEFAULT '0' COMMENT '是否删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COMMENT='data_dict';
-- ----------------------------
-- Table structure for oauth2_access_token
-- ----------------------------
DROP TABLE IF EXISTS `oauth2_access_token`;
CREATE TABLE `oauth2_access_token` (
`id` varchar(32) NOT NULL,
`refresh_token` varchar(32) DEFAULT NULL,
`admin_id` bigint(20) DEFAULT NULL,
`valid` tinyint(4) DEFAULT NULL,
`expires_time` datetime DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`last_update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_uid` (`admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for oauth2_refresh_token
-- ----------------------------
DROP TABLE IF EXISTS `oauth2_refresh_token`;
CREATE TABLE `oauth2_refresh_token` (
`id` varchar(32) NOT NULL,
`admin_id` bigint(20) DEFAULT NULL,
`valid` tinyint(4) DEFAULT NULL,
`expires_time` datetime DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`last_update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_uid` (`admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for resource
-- ----------------------------
DROP TABLE IF EXISTS `resource`;
CREATE TABLE `resource` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '资源编号',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '资源名字',
`type` int(11) NOT NULL DEFAULT '-1' COMMENT '资源类型',
`sort` int(11) NOT NULL DEFAULT '-1' COMMENT '排序',
`display_name` varchar(50) NOT NULL DEFAULT '' COMMENT '展示名',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
`pid` int(11) NOT NULL DEFAULT '-1' COMMENT '父级资源编号(外键:{@link ResourceDO#id})',
`handler` varchar(50) DEFAULT '' COMMENT '操作\n *\n * 当资源类型为【菜单】时,handler 配置为界面 URL ,或者前端组件名\n * 当资源类型为【操作】时,handler 配置为后端 URL 。举个例子,如果有一个「创建管理员」的表单,那么前端界面上的按钮可以根据这个 url 判断是否展示,后端接收到该 url 的请求时会判断是否有权限。',
`deleted` bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='resource_d_o';
-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色编号',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '角色名',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='role_d_o';
-- ----------------------------
-- Table structure for role_resource
-- ----------------------------
DROP TABLE IF EXISTS `role_resource`;
CREATE TABLE `role_resource` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`role_id` int(11) NOT NULL DEFAULT '-1' COMMENT '角色编号(外键:{@link RoleDO}',
`resource_id` int(11) NOT NULL DEFAULT '-1' COMMENT '资源编号',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`deleted` bit(1) DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=287 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='role_resource_d_o';
SET FOREIGN_KEY_CHECKS = 1;
差异被折叠。
差异被折叠。
/*
Navicat Premium Data Transfer
Source Server : mall_mysql
Source Server Type : MySQL
Source Server Version : 50643
Source Host : 180.167.213.26:13306
Source Schema : mall_product
Target Server Type : MySQL
Target Server Version : 50643
File Encoding : 65001
Date: 28/04/2019 18:05:35
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for product_attr
-- ----------------------------
DROP TABLE IF EXISTS `product_attr`;
CREATE TABLE `product_attr` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '规格编号',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态\n *\n * 1-开启\n * 2-禁用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`deleted` bit(1) DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='product_attr';
-- ----------------------------
-- Table structure for product_attr_value
-- ----------------------------
DROP TABLE IF EXISTS `product_attr_value`;
CREATE TABLE `product_attr_value` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '规格编号',
`attr_id` int(11) DEFAULT NULL COMMENT '规格编号',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态\n *\n * 1-开启\n * 2-禁用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`deleted` bit(1) DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COMMENT='product_attr';
-- ----------------------------
-- Table structure for product_category
-- ----------------------------
DROP TABLE IF EXISTS `product_category`;
CREATE TABLE `product_category` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类编号',
`pid` int(11) DEFAULT NULL COMMENT '父分类编号',
`name` varchar(16) DEFAULT NULL COMMENT '名称',
`description` varchar(255) DEFAULT NULL,
`pic_url` varchar(255) DEFAULT NULL,
`sort` smallint(4) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`status` tinyint(4) DEFAULT NULL COMMENT '状态',
`deleted` bit(1) DEFAULT b'1' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=793 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for product_sku
-- ----------------------------
DROP TABLE IF EXISTS `product_sku`;
CREATE TABLE `product_sku` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'sku 编号',
`spu_id` int(11) NOT NULL DEFAULT '-1' COMMENT '商品编号',
`status` int(11) NOT NULL DEFAULT '-1' COMMENT '状态\n *\n * 1-正常\n * 2-禁用',
`pic_url` varchar(50) DEFAULT '' COMMENT '图片地址',
`attrs` varchar(50) NOT NULL DEFAULT '' COMMENT '规格值({@link ProductAttrDO})数组\n *\n * 数组,以逗号分隔',
`price` int(11) NOT NULL DEFAULT '-1' COMMENT '价格,单位:分',
`quantity` int(11) NOT NULL DEFAULT '-1' COMMENT '库存数量',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb4 COMMENT='product_sku';
-- ----------------------------
-- Table structure for product_spu
-- ----------------------------
DROP TABLE IF EXISTS `product_spu`;
CREATE TABLE `product_spu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'SPU 编号',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT 'SPU 名字',
`sell_point` varchar(50) NOT NULL DEFAULT '' COMMENT '卖点',
`description` text NOT NULL COMMENT '描述',
`cid` int(11) NOT NULL DEFAULT '-1' COMMENT '分类编号',
`pic_urls` varchar(1024) NOT NULL DEFAULT '' COMMENT '商品主图地址\n *\n * 数组,以逗号分隔\n *\n * 建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张',
`visible` tinyint(3) NOT NULL DEFAULT '0' COMMENT '是否上架商品(是否可见)。\n *\n * true 为已上架\n * false 为已下架',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序字段',
`price` int(11) DEFAULT NULL COMMENT '价格',
`quantity` int(11) DEFAULT NULL COMMENT '库存数量',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8mb4 COMMENT='product_spu';
SET FOREIGN_KEY_CHECKS = 1;
/*
Navicat Premium Data Transfer
Source Server : mall_mysql
Source Server Type : MySQL
Source Server Version : 50643
Source Host : 180.167.213.26:13306
Source Schema : mall_promotion
Target Server Type : MySQL
Target Server Version : 50643
File Encoding : 65001
Date: 28/04/2019 18:05:45
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for banner
-- ----------------------------
DROP TABLE IF EXISTS `banner`;
CREATE TABLE `banner` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`title` varchar(32) NOT NULL COMMENT '标题',
`url` varchar(255) NOT NULL COMMENT '跳转链接',
`pic_url` varchar(255) NOT NULL COMMENT '跳转链接',
`sort` int(11) NOT NULL COMMENT '排序',
`status` tinyint(1) NOT NULL COMMENT '状态',
`memo` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='banner';
-- ----------------------------
-- Table structure for coupon_card
-- ----------------------------
DROP TABLE IF EXISTS `coupon_card`;
CREATE TABLE `coupon_card` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '优惠劵编号',
`template_id` int(11) NOT NULL COMMENT '优惠劵(码)分组编号,{@link CouponTemplateDO} 的 id',
`title` varchar(50) NOT NULL COMMENT '标题',
`status` tinyint(4) NOT NULL COMMENT '优惠码状态\n *\n * 1-未使用\n * 2-已使用\n * 3-已失效',
`user_id` int(11) NOT NULL COMMENT '用户编号',
`take_type` tinyint(4) NOT NULL COMMENT '领取类型\n *\n * 1 - 用户主动领取\n * 2 - 后台自动发放',
`price_available` int(11) NOT NULL COMMENT '是否设置满多少金额可用,单位:分\n *\n * 0-不限制\n * 大于0-多少金额可用',
`valid_start_time` datetime NOT NULL COMMENT '生效开始时间',
`valid_end_time` datetime NOT NULL COMMENT '生效结束时间',
`preferential_type` tinyint(4) NOT NULL COMMENT '优惠类型\n *\n * 1-代金卷\n * 2-折扣卷',
`percent_off` tinyint(4) DEFAULT NULL COMMENT '折扣',
`price_off` int(11) DEFAULT NULL COMMENT '优惠金额,单位:分。',
`discount_price_limit` int(11) DEFAULT NULL COMMENT '折扣上限,仅在 {@link #preferentialType} 等于 2 时生效。\n *\n * 例如,折扣上限为 20 元,当使用 8 折优惠券,订单金额为 1000 元时,最高只可折扣 20 元,而非 80 元。',
`used_time` datetime DEFAULT NULL COMMENT '使用时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='coupon_card';
-- ----------------------------
-- Table structure for coupon_template
-- ----------------------------
DROP TABLE IF EXISTS `coupon_template`;
CREATE TABLE `coupon_template` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '模板编号,自增唯一。',
`title` varchar(50) NOT NULL COMMENT '标题',
`description` varchar(50) DEFAULT NULL COMMENT '使用说明',
`type` tinyint(4) NOT NULL DEFAULT '-1' COMMENT '类型\n *\n * 1-优惠劵\n * 2-优惠码',
`code_type` tinyint(4) DEFAULT NULL COMMENT '码类型\n *\n * 1-一卡一码(UNIQUE)\n * 2-通用码(GENERAL)\n *\n * 【优惠码独有】 @see CouponCodeDO',
`status` tinyint(4) NOT NULL COMMENT '优惠码状态\n *\n * 1-开启中\n * 2-禁用中\n * 3-已过期\n *\n * 当优惠劵(码)开启中,可以手动操作,设置禁用中。',
`quota` tinyint(4) DEFAULT NULL COMMENT '每人限领个数\n *\n * null - 则表示不限制',
`total` int(11) DEFAULT NULL COMMENT '发行总量',
`price_available` int(11) DEFAULT NULL COMMENT '是否设置满多少金额可用,单位:分\n *\n * 0-不限制\n * 大于0-多少金额可用',
`range_type` tinyint(4) NOT NULL COMMENT '可用范围的类型\n *\n * 10-全部(ALL):所有可用\n * 20-部分(PART):部分商品可用,或指定商品可用\n * 21-部分(PART):部分商品不可用,或指定商品可用\n * 30-部分(PART):部分分类可用,或指定商品可用\n * 31-部分(PART):部分分类不可用,或指定商品可用',
`range_values` varchar(50) DEFAULT NULL COMMENT '指定商品 / 分类列表,使用逗号分隔商品编号',
`date_type` tinyint(4) NOT NULL COMMENT '生效日期类型\n *\n * 1-固定日期\n * 2-领取日期:领到券 {@link #fixedTerm} 日开始 N 天内有效',
`valid_start_time` datetime DEFAULT NULL COMMENT '固定日期-生效开始时间',
`valid_end_time` datetime DEFAULT NULL COMMENT '固定日期-生效结束时间',
`fixed_start_term` int(11) DEFAULT NULL COMMENT '领取日期-开始天数',
`fixed_end_term` int(11) DEFAULT NULL COMMENT '领取日期-结束天数',
`preferential_type` int(11) NOT NULL COMMENT '优惠类型\n *\n * 1-代金卷\n * 2-折扣卷',
`percent_off` tinyint(4) DEFAULT NULL COMMENT '折扣百分比。\n *\n * 例如,80% 为 80。\n * 当 100% 为 100 ,则代表免费。',
`price_off` int(11) DEFAULT NULL COMMENT '优惠金额,单位:分',
`discount_price_limit` int(11) DEFAULT NULL COMMENT '折扣上限,仅在 {@link #preferentialType} 等于 2 时生效。\n *\n * 例如,折扣上限为 20 元,当使用 8 折优惠券,订单金额为 1000 元时,最高只可折扣 20 元,而非 80 元。',
`stat_fetch_num` int(11) NOT NULL COMMENT '领取优惠券的次数',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='coupon_template';
-- ----------------------------
-- Table structure for product_recommend
-- ----------------------------
DROP TABLE IF EXISTS `product_recommend`;
CREATE TABLE `product_recommend` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`type` tinyint(4) NOT NULL COMMENT '类型',
`product_spu_id` int(11) NOT NULL COMMENT '商品 Spu 编号',
`sort` int(11) NOT NULL COMMENT '排序',
`status` tinyint(4) NOT NULL COMMENT '状态',
`memo` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='product_recommend';
-- ----------------------------
-- Table structure for promotion_activity
-- ----------------------------
DROP TABLE IF EXISTS `promotion_activity`;
CREATE TABLE `promotion_activity` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '活动编号',
`title` varchar(50) NOT NULL DEFAULT '' COMMENT '活动标题',
`activity_type` tinyint(4) NOT NULL COMMENT '活动类型\n *\n * 参见 {@link cn.iocoder.mall.promotion.api.constant.PromotionActivityTypeEnum} 枚举',
`status` tinyint(4) NOT NULL DEFAULT '-1' COMMENT '活动状态\n *\n * 参见 {@link cn.iocoder.mall.promotion.api.constant.PromotionActivityStatusEnum} 枚举',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`invalid_time` datetime DEFAULT NULL COMMENT '失效时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
`time_limited_discount` varchar(2000) DEFAULT NULL COMMENT '限制折扣字符串,使用 JSON 序列化成字符串存储',
`full_privilege` varchar(2000) DEFAULT NULL COMMENT '限制折扣字符串,使用 JSON 序列化成字符串存储',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='promotion_activity';
SET FOREIGN_KEY_CHECKS = 1;
/*
Navicat Premium Data Transfer
Source Server : mall_mysql
Source Server Type : MySQL
Source Server Version : 50643
Source Host : 180.167.213.26:13306
Source Schema : mall_user
Target Server Type : MySQL
Target Server Version : 50643
File Encoding : 65001
Date: 28/04/2019 18:05:53
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for mobile_code
-- ----------------------------
DROP TABLE IF EXISTS `mobile_code`;
CREATE TABLE `mobile_code` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`mobile` varchar(11) NOT NULL,
`code` varchar(6) NOT NULL,
`today_index` tinyint(4) NOT NULL,
`used` tinyint(4) NOT NULL,
`userd_user_id` int(20) DEFAULT NULL,
`used_time` datetime DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for oauth2_access_token
-- ----------------------------
DROP TABLE IF EXISTS `oauth2_access_token`;
CREATE TABLE `oauth2_access_token` (
`id` varchar(32) NOT NULL,
`refresh_token` varchar(32) DEFAULT NULL,
`user_id` int(20) DEFAULT NULL,
`valid` tinyint(4) DEFAULT NULL,
`expires_time` datetime DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_uid` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for oauth2_refresh_token
-- ----------------------------
DROP TABLE IF EXISTS `oauth2_refresh_token`;
CREATE TABLE `oauth2_refresh_token` (
`id` varchar(32) NOT NULL,
`user_id` int(20) DEFAULT NULL,
`valid` tinyint(4) DEFAULT NULL,
`expires_time` datetime DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_uid` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for user_access_log
-- ----------------------------
DROP TABLE IF EXISTS `user_access_log`;
CREATE TABLE `user_access_log` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`user_id` int(11) NOT NULL DEFAULT '-1' COMMENT '管理员编号.',
`uri` varchar(4096) NOT NULL DEFAULT '' COMMENT '访问地址',
`query_string` varchar(4096) NOT NULL DEFAULT '' COMMENT '参数',
`method` varchar(50) NOT NULL DEFAULT '' COMMENT 'http 方法',
`user_agent` varchar(1024) NOT NULL DEFAULT '' COMMENT 'userAgent',
`ip` varchar(50) NOT NULL DEFAULT '' COMMENT 'ip',
`start_time` datetime NOT NULL COMMENT '请求时间',
`response_time` int(11) NOT NULL COMMENT '响应时长 -- 毫秒级',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7772 DEFAULT CHARSET=utf8mb4 COMMENT='admin_access_log';
-- ----------------------------
-- Table structure for user_address
-- ----------------------------
DROP TABLE IF EXISTS `user_address`;
CREATE TABLE `user_address` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '用户编号',
`area_no` varchar(10) COLLATE utf8mb4_bin NOT NULL COMMENT '区域编号',
`name` varchar(10) COLLATE utf8mb4_bin NOT NULL COMMENT '收件人名称',
`mobile` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '手机号',
`address` varchar(250) COLLATE utf8mb4_bin NOT NULL COMMENT '详细地址',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`has_default` int(1) NOT NULL COMMENT '是否默认',
`deleted` int(2) NOT NULL COMMENT '删除状态',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for user_register
-- ----------------------------
DROP TABLE IF EXISTS `user_register`;
CREATE TABLE `user_register` (
`id` int(20) NOT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`udpate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`mobile` varchar(11) COLLATE utf8mb4_bin NOT NULL,
`nickname` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '昵称',
`avatar` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像',
`status` tinyint(4) DEFAULT NULL COMMENT '状态',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`deleted` bit(1) DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_uid` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
SET FOREIGN_KEY_CHECKS = 1;
...@@ -136,7 +136,7 @@ public class PingxxPaySDK extends AbstractPaySDK { ...@@ -136,7 +136,7 @@ public class PingxxPaySDK extends AbstractPaySDK {
new PingxxPaySDK().submitTransaction(transaction, extension, null); new PingxxPaySDK().submitTransaction(transaction, extension, null);
} }
if (true) { // 测试退款请求 if (true) { // 测试退款请求
PayRefundDO refund = new PayRefundDO().setPrice(1).setOrderDescription("测试描述"); PayRefundDO refund = new PayRefundDO().setPrice(9999999).setOrderDescription("测试描述");
PayTransactionExtensionDO transactionExtension = new PayTransactionExtensionDO() PayTransactionExtensionDO transactionExtension = new PayTransactionExtensionDO()
.setExtensionData("{\"id\":\"evt_400190423100354205607502\",\"created\":1555985033,\"livemode\":false,\"type\":\"charge.succeeded\",\"data\":{\"object\":{\"id\":\"ch_DCGyXTmDGuHKb1C0yTzjPOGC\",\"object\":\"charge\",\"created\":1555985032,\"livemode\":false,\"paid\":true,\"refunded\":false,\"reversed\":false,\"app\":\"app_aTyfXDjrvzDSbLuz\",\"channel\":\"wx_pub\",\"order_no\":\"20190423100352158401\",\"client_ip\":\"114.87.158.59\",\"amount\":10,\"amount_settle\":10,\"currency\":\"cny\",\"subject\":\"kafka 实战\",\"body\":\"测试描述\",\"extra\":{\"open_id\":\"just_for_test\",\"bank_type\":\"your bank type\"},\"time_paid\":1555985033,\"time_expire\":1555992232,\"time_settle\":null,\"transaction_no\":\"1244341374201904238178164740\",\"refunds\":{\"object\":\"list\",\"url\":\"/v1/charges/ch_DCGyXTmDGuHKb1C0yTzjPOGC/refunds\",\"has_more\":false,\"data\":[]},\"amount_refunded\":0,\"failure_code\":null,\"failure_msg\":null,\"metadata\":{},\"credential\":{},\"description\":\"测试备注\"}},\"object\":\"event\",\"request\":\"iar_4e9mPODW5ujPqLen5OOmvL8S\",\"pending_webhooks\":0}"); .setExtensionData("{\"id\":\"evt_400190423100354205607502\",\"created\":1555985033,\"livemode\":false,\"type\":\"charge.succeeded\",\"data\":{\"object\":{\"id\":\"ch_DCGyXTmDGuHKb1C0yTzjPOGC\",\"object\":\"charge\",\"created\":1555985032,\"livemode\":false,\"paid\":true,\"refunded\":false,\"reversed\":false,\"app\":\"app_aTyfXDjrvzDSbLuz\",\"channel\":\"wx_pub\",\"order_no\":\"20190423100352158401\",\"client_ip\":\"114.87.158.59\",\"amount\":10,\"amount_settle\":10,\"currency\":\"cny\",\"subject\":\"kafka 实战\",\"body\":\"测试描述\",\"extra\":{\"open_id\":\"just_for_test\",\"bank_type\":\"your bank type\"},\"time_paid\":1555985033,\"time_expire\":1555992232,\"time_settle\":null,\"transaction_no\":\"1244341374201904238178164740\",\"refunds\":{\"object\":\"list\",\"url\":\"/v1/charges/ch_DCGyXTmDGuHKb1C0yTzjPOGC/refunds\",\"has_more\":false,\"data\":[]},\"amount_refunded\":0,\"failure_code\":null,\"failure_msg\":null,\"metadata\":{},\"credential\":{},\"description\":\"测试备注\"}},\"object\":\"event\",\"request\":\"iar_4e9mPODW5ujPqLen5OOmvL8S\",\"pending_webhooks\":0}");
......
...@@ -20,7 +20,7 @@ public class PayRefundServiceImplTest { ...@@ -20,7 +20,7 @@ public class PayRefundServiceImplTest {
PayRefundSubmitDTO payRefundSubmitDTO = new PayRefundSubmitDTO() PayRefundSubmitDTO payRefundSubmitDTO = new PayRefundSubmitDTO()
.setAppId("POd4RC6a") .setAppId("POd4RC6a")
.setCreateIp("127.0.0.1") .setCreateIp("127.0.0.1")
.setOrderId("135") .setOrderId("13500000")
.setOrderDescription("测试下退款") .setOrderDescription("测试下退款")
.setPrice(1); .setPrice(1);
payRefundService.submitRefund(payRefundSubmitDTO); payRefundService.submitRefund(payRefundSubmitDTO);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论