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. 流程

alt text

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表中找出记录, 当前只要有记录,则认为已经使用,后续考虑退货、订单取消的情况)

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