- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
先上表结构图, 我这里用的MySQL数据库, 表结构如下 。
对应建表SQL
create table cdk(
id int(11) unsigned not null primary key auto_increment,
cdk varchar(16) not null comment '兑换码',
cdk_kind tinyint not null comment '兑换类型 1-会员卡, 2-优惠券, 3-优惠券包',
cdk_kind_no varchar(32) not null comment '兑换类型编号',
cdk_status tinyint not null default 1 comment '兑换码使用状态 1-未使用, 2-已使用',
cdk_export_status tinyint not null default 1 comment '兑换码导出状态 1-未导出, 2-已导出',
act_account_id int(11) comment '使用人',
act_time datetime comment '使用时间',
gen_account_id int(11) comment '生成人',
gen_time datetime comment '生成时间',
export_account_id int(11) comment '导出人',
export_time datetime comment '导出时间',
valid_time datetime comment '有效期开始时间',
expire_time datetime comment '有效期失效时间',
remark text comment '备注',
create_time datetime not null default current_timestamp comment '创建时间',
update_time datetime not null default current_timestamp on update CURRENT_TIMESTAMP comment '更新时间',
unique key(cdk)
)engine=innodb comment '兑换码';
设计说明 1.兑换码与兑换商品类型: 一个表中可以维护所有可以通过兑换码兑换的商品的兑换码, 使用 cdk_kind 区分不同的商品类型, 使用 cdk_kind_no 区分某个商品下更具体的商品. 比如你平台共有两种会员卡, 编号分别为"VIP"和"SVIP", 则 cdk_kind=1 , cdk_kind_no分别为"VIP"和"SVIP" . 。
cdk 字段为兑换码, 这里是此字段单独作为唯一索引. 另有方案可以用 cdk 字段与 cdk_kind 一起做联合唯一索引. cdk 字段单独做唯一索引, 则只需要设计一个兑换页面, 换到什么就是什么, 当然也可以多个兑换入口页面, 调同一个接口就行; cdk 字段与 cdk_kind 做联合唯一索引时, 意味着同一个兑换码在不同的地方可以兑换不同的商品, 需要多个入口或者一个入口时需要选择兑换的商品类型. 。
如果有新的商品需要参与使用兑换码兑换, 只需要新增 cdk_kind 字段的枚举. 。
兑换码服务与被兑换商品的服务之间, 可以兑换码服务直接调用被兑换商品的服务, 也可以兑换码服务将兑换信息放入消息队列, 被兑换商品的服务消费消息处理兑换入账. 。
2.兑换码兑换之后, 对应记录由 1-未使用 状态变为 2-已使用 状态. 。
3.导出状态, 即为兑换码是否出库的状态. 刚生成出来时为 1-未导出 状态, 可以通过从管理后台下载到excel等方式出库, 出库后及改为 2-已导出 状态, 标识这个兑换码已经有人预定了, 不能重复给另一个人. 同时, 管理后台最好设计兑换码不可见, 即不在页面展示兑换码的号码, 避免能见到的人把未导出状态的码直接给出去使用, 也可以避免有人将别人已导出但未使用的码提前使用. 。
4.兑换码可以设计有效期开始和结束时间, 时间范围内才可以兑换. 可以用在某些特定的场景下. 比如某个会员卡需要一周之后才上线, 但可以提前将其兑换码上线. 指定一周之后才生效. 。
5.为避免多个人同时导出兑换码的冲突, 建议遵循 谁生成谁导出 的原则, 即设计中的 gen_account_id-生成人 字段与 export_account_id-导出人 字段, 与当前登录的的账号id一致. 假如有用户a和用户b两个人在几乎同时操作导出, 用户a需要100个, 用户b需要10个, 在用户a生成了100个的时候, 用户b发现库中有足够的未导出状态的码, 则可能自己不会生成, 而是把用户a生成的100个中的10个抢先导出了. 而如果遵循"谁生成谁导出"则可以避免此类问题. 。
最后此篇关于兑换码设计的文章就讲到这里了,如果你想了解更多关于兑换码设计的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
为了实现促销代码,我执行了以下步骤: 在 Google Play Console>User Acquisition>Promotions 我添加了促销 Activity 在应用程序中,我使用它来将用户
我希望能够生成链接,允许我的 iOS 应用程序的用户兑换应用程序内购买的促销代码。因此,他们可能会收到一封带有“兑换代码”按钮的电子邮件,该按钮会将他们带到应用商店兑换页面,其中预填充了代码,或者为他
从最近的版本和下面的对话来看,它说现在 Katana(4.1.0) 支持代码流和自动代码赎回(这意味着我们没有明确调用 tokenendpoint 来赎回 idtoken、accesstoken 等的
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我是一名优秀的程序员,十分优秀!