promotion_code_server.md
4.63 KB
1.数据库
1.1 优惠码详情(yhb_promotion.promotion_code)
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格式,如下:
{
"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 脚本
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 | 使用时间 |
describe | 描述信息 |
order_code | 订单号 |
is_use | 是否使用 |
2. 流程
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
响应:
{
"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表中找出记录, 当前只要有记录,则认为已经使用,后续考虑退货、订单取消的情况)