Blame view

inferface-document/coupon_code/promotion_code_server.md 4.63 KB
xuhongyun authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164

## 1.数据库
### 1.1 优惠码详情(yhb_promotion.promotion_code)
#### sql 脚本
```sql
CREATE TABLE `promotion_code` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(225) NOT NULL,
  `limit_times` int(11) NOT NULL DEFAULT '0',
  `code` varchar(255) NOT NULL,
  `req_department` varchar(255) DEFAULT NULL,
  `limit_date_from` varchar(255) NOT NULL,
  `limit_date_to` varchar(255) NOT NULL,
  `describe` varchar(255) DEFAULT '',
  `promotion_info` text NOT NULL,
  `user_use_limit` int(11) DEFAULT '1',
  `user_source_limit` varchar(255) DEFAULT NULL,
  `user_type_limit` varchar(255) DEFAULT NULL,
  `creator_id` int(11) DEFAULT NULL,
  `create_time` varchar(255) DEFAULT NULL,
  `status` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `code_index` (`code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

```

#### 说明

| 列名 | 说明 | 可用范围 |
| -------- | -------- |-------- |
|name| 名称| |
|limit_times| 本优惠码使用次数限制|默认0,表示无限制|
| code   | 码值  | 用`,`分割|
| req_department   | 请求部门  | |
| limit_date_from   | 使用期限,从xxx  |  格式如下: 2015-12-31 12:23:12|
| limit_date_to  | 使用期限,到xxx  |  格式如下: 2015-12-31 12:23:12|
| describe  | 描述信息  |  |
| user_use_limit|用户使用本优惠码次数限制|默认1,只能使用1次|
| user_source_limit   | 用户来源  | IOS, Android|
| user_type_limit   | 会员身份 |  1(新注册),2(注册未购买)|
| creator_id   | 创建者 |  |
| create_time   | 创建时间 | 格式如下: 2015-12-31 12:23:12 |
| promotion_info  | 优惠信息  |  JSON格式|
| status| 优惠码状态|0: 正常 1:失效|

其中,表中`promotion_info`优惠信息是json格式,如下:
```javascript
{
    "type": "discount_market_price",
    "condition": {
        "amount_at_least": 100,
        "count_at_least": 1
    },
    "action": {
        "discount": 0.88,
        "discount_at_most": 100
    }
}
```

`type` 对应下面3种:
 - discount_market_price: 吊牌价折扣
 - discount_sale_price: 销售价折扣
 - discount_total: 满减

 `condition` 是优惠码使用条件,总金额最少和购买件数最少

 `action` 是具体优惠多少钱:
   - discount: 如果是折扣类型,`discount`表示多少折;如果是满减类型,则表示减少多少钱。
   - discount_at_most: 最多优惠多少钱


###  1.2 优惠码使用记录(yhb_promotion.user_promotion_code_history)

#### SQL 脚本
```sql
CREATE TABLE `user_promotion_code_history` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  `promotion_code` varchar(255) NOT NULL,
  `used_time` varchar(255) DEFAULT NULL,
  `order_code` varchar(255) DEFAULT NULL,
  `is_use` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

```
#### 说明

| 列名 | 说明 |
| -------- | -------- |
|uid| 用户ID| |
|promotion_code| 码值|
| used_time  | 使用时间  |  格式如下: 2015-12-31 12:23:12|
| describe  | 描述信息  |   
| order_code|订单号|
| is_use| 是否使用 | 0 未使用,1 已经使用|


## 2. 流程

![alt text](flow.png "flow")


## 3. 接口

### 3.1 Gateway接口
#### 3.1.1 查询优惠码详情
请求:
- POST URL: `api.yoho.cn`
- content-type: `'x-www-form-urlencoded'`
- body: `uid=123456&code=dx12999&method=app.promotion_code.get`


响应:
```javascript
{
  "is_availble": true,
  "code_info" : {
     "id": 12,
     "name": "8折",
     "limit_times": 0,
     "describe": "this is describe",
     "discount_type": "discount_market_price",
      "amount_at_least":  200,
      "count_at_least": 1,
       "discount": 0.8,
       "discount_at_most": 100
     "status": 0
  }

}
```
| json | 说明 |
| -------- | -------- |
| is_availble   | 用户对优惠码是否可用  |  
| code_info   | 优惠码信息 |  



### 3.2 服务接口
#### 3.2.1 Promotion 查询优惠码详情
入参: `uid, promotion_code`

响应:同上面的gateway接口

判断用户对某个优惠码是否可用的逻辑:

1.判断Promotion Code本身是否有效:

    - 根据promotion_code,获取promotion_code详情
    - 是否在有效期内
    - 状态是否启用
    - 全局使用次数是否达到限制(当前不做)

2.判断用户对promotion_code是否可用:

    - 判断用户来源是否匹配(IOS,Android)
    - 判断用户类型是否匹配(当前只匹配新注册,注册未下单)
    - 判断用户对优惠码使用限制(需要从user_promotion_code_history表中找出记录, 当前只要有记录,则认为已经使用,后续考虑退货、订单取消的情况)


####  3.2.2 Promotion 添加用户使用优惠码记录