## 1. 界面
1. 運營后臺-訂單管理-所有訂單
2. 運營后臺-訂單管理-訂單詳情
# 2. 數據庫實體
整體實體類關系如下圖:

- 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`:訂單狀態,交易主狀態。交易會有較多分支狀態,例如退款狀態、物流狀態等等狀態。不同于分支狀態,主狀態控制整個訂單的生命周期。
狀態流轉如下圖:
### 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` ,買家購買備注。

### 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
- 常見問題