## 1. 界面
1. 运营后台-订单管理-所有订单![img](https://img.kancloud.cn/b5/7d/b57d446175432113674b6414f5ece11c_1603x621.png)
2. 运营后台-订单管理-订单详情![img](https://img.kancloud.cn/73/e0/73e018f87debdd980f54ac0d9b84534a_1486x946.png)
# 2. 数据库实体
整体实体类关系如下图:
![img](https://img.kancloud.cn/3f/f6/3ff6a4a9e77106b1db9d82e700432153_1032x460.png)
- OrderSettlement:一个订单会有一个结算信息,结算信息记录着用户的支付方式,支付金额等。
- Order:一个订单的订单信息,记录着订单的订单状态、运费、备注等信息。
- OrderItem:一个订单有多个订单项,每个订单项记录着每件商品的订单信息。
- UserAddrOrder:订单地址信息,每个订单会有收货地址。
## 2.1 Order
Order,订单。一次下单,生成一条订单记录,即使多种商品。
字段较多,我们进行简单的切块。
### 2.1.1 基础字段
```java
/**
* 订单ID
*/
@TableId
private Long orderId;
/**
* 店铺id
*/
private Long shopId;
/**
* 订购流水号
*/
private String orderNumber;
/**
* 订单状态 1:待付款 2:待发货 3:待收货 4:待评价 5:成功 6 交易失败
*/
private Integer status;
/**
* 订购时间
*/
private Date createTime;
/**
* 订单更新时间
*/
private Date updateTime;
/**
* 付款时间
*/
private Date payTime;
/**
* 发货时间
*/
private Date dvyTime;
/**
* 完成时间
*/
private Date finallyTime;
/**
* 取消时间
*/
private Date cancelTime;
```
- `orderId` :订单id,自增,没啥用。
- `orderNumber`:订单编号例如:1060804015757070336 。通过[雪花算法](http://www.cnblogs.com/relucent/p/4955340.html)生成id。
- `shopId` :店铺编号。
- `status`:订单状态,交易主状态。交易会有较多分支状态,例如退款状态、物流状态等等状态。不同于分支状态,主状态控制整个订单的生命周期。
状态流转如下图:![img](https://img.kancloud.cn/9e/74/9e74a5ecd6f2e6e6f2fc397cdbb643c4_948x1464.png)
### 2.1.2 商品信息
```java
/**
* 产品名称,多个产品将会以逗号隔开
*/
private String prodName;
/**
* 总值
*/
private Double total;
/**
* 实际总值
*/
private Double actualTotal;
/**
* 订单商品总数
*/
private Integer productNums;
/**
* 优惠总额
*/
private Double reduceAmount;
```
- 我们可以看到,该快字段主要**冗余**了多个商品的名称到交易记录中。
### 2.1.3 买家信息
```java
/**
* 订购用户ID
*/
private String userId;
/**
* 订单备注
*/
private String remarks;
```
- `userId` ,买家用户编号。
- `remarks` ,买家购买备注。
![img](https://img.kancloud.cn/97/4f/974f375aa4b9daab857534094290225a_440x865.png)
### 2.1.4 价格信息
```
/**
* 总值
*/
private Double total;
/**
* 实际总值
*/
private Double actualTotal;
/**
* 订单运费
*/
private Double freightAmount;
/**
* 优惠总额
*/
private Double reduceAmount;
```
- `total` :商品总价。该字段通过 OrderItem的 `price` 求和计算。
- `freightAmount` :运费总价。该字段通过 OrderItem的商品的**运费价格**求和计算。
- `reduceAmount`:交易优惠金额。注意,TradeOrder 的
- 购买的商品参加
折扣活动,原价 100 元,折扣价 10 元。那么数据如下(我们会看到折扣活动跟着 商品走):
- `total = 100` ,`reduceAmount = 10` ,`actualTotal = 90` 。
- 购买的商品使用优惠劵,在上面例子的基础上,优惠劵打 2 折。那么数据如下(我们会看到优惠劵跟着 Trade 走):
- `total = 100` ,`reduceAmount = 72` ,`actualTotal = 18` 。
- `actualTotal`:`actualTotal = total + freightAmount - reduceAmount`
### 2.1.5 物流
```java
/**
* 配送类型
*/
private String dvyType;
/**
* 配送方式ID
*/
private Long dvyId;
/**
* 物流单号
*/
private String dvyFlowId;
```
通过物流的id获取物流方式,提供给前端显示
## 2.2 收货人信息UserAddrOrder
```java
public class UserAddrOrder implements Serializable {
/**
* ID
*/
@TableId
private Long addrOrderId;
/**
* 地址ID
*/
private Long addrId;
/**
* 用户ID
*/
private String userId;
/**
* 收货人
*/
private String receiver;
/**
* 省
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 区
*/
private String area;
/**
* 地址
*/
private String addr;
/**
* 邮编
*/
private String postCode;
/**
* 省ID
*/
private Long provinceId;
/**
* 城市ID
*/
private Long cityId;
/**
* 区域ID
*/
private Long areaId;
/**
* 手机
*/
private String mobile;
/**
* 建立时间
*/
private Date createTime;
/**
* 版本号
*/
private Integer version;
}
```
- `addrOrderId` ,收货人的地址编号。
- `receiver` **等等**,**冗余**交易的收货地址信息,避免买家修改收货人地址编号对应的地址信息。
## 2.3 结算信息OrderSettlement
```java
public class OrderSettlement implements Serializable {
/**
* 支付结算单据ID
*/
@TableId
private Long settlementId;
/**
* 用户系统内部的订单号
*/
private String payNo;
/**
* 外部订单流水号
*/
private String bizPayNo;
/**
* 订单号
*/
private String orderNumber;
/**
* 支付方式 0 手动代付 1 微信支付 2 支付宝
*/
private Integer payType;
/**
* 支付金额
*/
private Double payAmount;
/**
* 用户ID
*/
private String userId;
/**
* 是否清算 0:否 1:是
*/
private Integer isClearing;
/**
* 创建时间
*/
private Date createTime;
/**
* 清算时间
*/
private Date clearingTime;
/**
* 支付状态
*/
private Integer payStatus;
/**
* 版本号
*/
private Integer version;
/**
* 支付方式名称
*/
private String payTypeName;
}
```
- `orderNumber` :关联订单的订单号
- `payNo`: 支付时的支付订单号,根据雪花算法生成
- `payAmount`:实付金额。
- `bizPayNo`:外部交易编号。比如,如果支付方式是微信支付,就是财付通的交易单号。
## 2.4 订单项 OrderItem
每个订单都会有多个商品,每个商品就是一个订单项。
```java
/**
* 订单项ID
*/
@TableId(type = IdType.AUTO)
private Long orderItemId;
private Long shopId;
/**
* 订单orderNumber
*/
private String orderNumber;
/**
* 产品ID
*/
private Long prodId;
/**
* 产品SkuID
*/
private Long skuId;
/**
* 购物车产品个数
*/
private Integer prodCount;
/**
* 产品名称
*/
private String prodName;
/**
* sku名称
*/
private String skuName;
/**
* 产品主图片路径
*/
private String pic;
/**
* 产品价格
*/
private Double price;
/**
* 用户Id
*/
private String userId;
/**
* 商品总金额
*/
private Double productTotalAmount;
/**
* 购物时间
*/
private Date recTime;
/**
* 评论状态: 0 未评价 1 已评价
*/
private Integer commSts;
/**
* 推广员使用的推销卡号
*/
private String distributionCardNo;
/**
* 加入购物车的时间
*/
private Date basketDate;
```
- `orderNumber` :订单编号,指向 `Order.orderNumber` 。
- `prodId`:商品id
- 冗余商品字段:
- `prodName` ,商品标题。
- `pic` ,商品主图片地址。
- `skuId` ,商品 SKU 编号,指向 `ItemSku.id` 。
- 冗余商品 SKU 字段:
- `skuName` ,SKU的值,即:商品的规格。如:机身颜色:黑色;手机套餐:官方标配。
- `num` ,购买数量。
- 开发环境准备
- 基本开发手册
- 项目目录结构
- 权限管理
- 通用分页表格
- Swagger文档
- undertow容器
- 对xss攻击的防御
- 分布式锁
- 统一的系统日志
- 统一验证
- 统一异常处理
- 文件上传下载
- 一对多、多对多分页
- 认证与授权
- 从授权开始看源码
- 自己写个授权的方法-开源版
- 商城表设计
- 商品信息
- 商品分组
- 购物车
- 订单
- 地区管理
- 运费模板
- 接口设计
- 必读
- 购物车的设计
- 订单设计-确认订单
- 订单设计-提交订单
- 订单设计-支付
- 生产环境
- nginx安装与跨域配置
- 安装mysql
- 安装redis
- 传统方式部署项目
- docker
- 使用docker部署商城
- centos jdk安装
- docker centos 安装
- Docker Compose 安装与卸载
- docker 镜像的基本操作
- docker 容器的基本操作
- 通过yum安装maven
- 常见问题