Java生鲜电商平台-优惠券设计与架构

说明:现在电商白热化的程度,无论是生鲜电商还是其他的电商等等,都会有促销的这个体系,目的就是增加订单量与知名度等等

那么对于Java开源生鲜电商平台而言,我们采用优惠券的这种方式进行促销。(补贴价格战对烧钱而言非常的恐怖的,太烧钱了)

1. 优惠券基础信息表

说明:任何一个优惠券或者说代金券都是有一个基础的说明,比如:优惠券名称,类型,价格,有效期,状态,说明等等基础信息。

CREATE TABLE `coupon` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',
`region_id` bigint(20) DEFAULT NULL COMMENT '所属区域',
`type` int(11) DEFAULT NULL COMMENT '所属类型,1为满减',
`name` varchar(32) DEFAULT NULL COMMENT '优惠券名称',
`img` varchar(64) DEFAULT NULL COMMENT '图片的URL地址',
`start_time` datetime DEFAULT NULL COMMENT '优惠券开始时间',
`end_time` datetime DEFAULT NULL COMMENT '优惠券结束时间',
`money` decimal(11,2) DEFAULT NULL COMMENT '优惠券金额,用整数,固定值目前。',
`status` int(11) DEFAULT NULL COMMENT '状态,0表示未开始,1表示进行中,-1表示结束',
`remarks` varchar(512) DEFAULT NULL COMMENT '优惠券的说明',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`full_money` decimal(12,2) DEFAULT NULL COMMENT '金额满',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='优惠券基础配置表';

说明:业务说可以规定某个区域,做优惠券,而且是纳新后才有,这样增加买家用户。价格可以后端进行设置。

状态的意义在于,用户需要注册完成后,然后主动认领才有效,为什么要这样设计呢?目的只有一个:让用户在对APP这个软件玩一会儿,增加熟悉程度.

2. 优惠券领取记录表

说明:我们需要记录那个买家,什么时候进行的领取,领取的的时间,券的额度是多少等等,是否已经使用等信息

CREATE TABLE `coupon_receive` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',
`buyer_id` bigint(20) DEFAULT NULL COMMENT '买家ID',
`coupon_id` bigint(20) DEFAULT NULL COMMENT '优惠券编号',
`coupon_money` decimal(12,2) DEFAULT NULL COMMENT '券额',
`create_time` datetime DEFAULT NULL COMMENT '领取时间',
`full_money` decimal(12,2) DEFAULT NULL COMMENT '金额满',
`status` int(11) DEFAULT NULL COMMENT '状态,1为已使用,0为已领取未使用,-1为已过期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='优惠券领取记录表';

3.优惠券消费记录表

说明:优惠券消费记录表,是需要知道那个买家,那个优惠券,那个订单使用了优惠券,这边有个特别注意的地方是,这个优惠券的执行在支付成功后的回调。

CREATE TABLE `coupon_logs` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',
`buyer_id` bigint(20) DEFAULT NULL COMMENT '买家ID',
`coupon_receive_id` bigint(20) DEFAULT NULL COMMENT '优惠券id',
`order_number` varchar(64) DEFAULT NULL COMMENT '订单号',
`order_original_amount` decimal(12,2) DEFAULT NULL COMMENT '原订单金额',
`coupon_amount` decimal(11,2) DEFAULT NULL COMMENT '优惠券的金额',
`order_final_amount` decimal(12,2) DEFAULT NULL COMMENT '抵扣优惠券之后的订单金额',
`create_time` datetime DEFAULT NULL COMMENT '领取时间',
`status` int(2) DEFAULT '0' COMMENT '日志状态: 默认为0,支付回调成功后为1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='优惠券消费记录表';

说明:相对而言,优惠券的难度不算大,重点的是业务方面的指导与学习,包括数据库的架构与设计等等,还有就是思路的学习。

相关核心代码如下:

APP需要后台提供以下几个接口:

3.1 查询所有买家的优惠券。

3.2 判断买家是否可以领取优惠券。

3.3 买家主动领取优惠券

/**
* 优惠券controller
*/
@RestController
@RequestMapping("/buyer/coupon")
public class CouponController extends BaseController { private static final Logger logger = LoggerFactory.getLogger(CouponController.class); @Autowired
private CouponReceiveService couponReceiveService; @Autowired
private UsersService usersService; /**
* 查询买家所有优惠券
*
* @param request
* @param response
* @param buyerId
* @return
*/
@RequestMapping(value = "/list", method = { RequestMethod.GET, RequestMethod.POST })
public JsonResult getCouponList(HttpServletRequest request, HttpServletResponse response, Long buyerId) {
try {
if (buyerId == null) {
return new JsonResult(JsonResultCode.FAILURE, "买家不存在", "");
}
List<CouponReceive> result = couponReceiveService.selectAllByBuyerId(buyerId);
return new JsonResult(JsonResultCode.SUCCESS, "查询成功", result);
} catch (Exception ex) {
logger.error("[CouponController][getCouponList] exception", ex);
return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
}
} /**
* 判断买家是否可以领取优惠券
*
* @param request
* @param response
* @param buyerId
* @return
*/
@RequestMapping(value = "/judge", method = { RequestMethod.GET, RequestMethod.POST })
public JsonResult judgeReceive(HttpServletRequest request, HttpServletResponse response, Long buyerId) {
try {
// 判断当前用户是否可用
Users users = usersService.getUsersById(buyerId);
if (users == null) {
logger.info("OrderController.judgeReceive.buyerId " + buyerId);
return new JsonResult(JsonResultCode.FAILURE, "你的账号有误,请重新登录", "");
}
int status = users.getStatus();
if (UserStatus.FORBIDDEN == status) {
return new JsonResult(JsonResultCode.FAILURE, "你的账号已经被禁用了,请联系公司客服", "");
}
List<Coupon> result = couponReceiveService.selectByBuyerId(buyerId);
if (CollectionUtils.isEmpty(result)) {
result = new ArrayList<Coupon>();
}
return new JsonResult(JsonResultCode.SUCCESS, "查询成功", result);
} catch (Exception ex) {
logger.error("[CouponController][judgeReceive] exception", ex);
return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
}
} /**
* 买家领取优惠券
*
* @param request
* @param response
* @param buyerId
* @return
*/
@RequestMapping(value = "/add", method = { RequestMethod.GET, RequestMethod.POST })
public JsonResult saveCoupon(HttpServletRequest request, HttpServletResponse response, Long buyerId,
Long couponId) {
try {
// 判断当前用户是否可用
Users users = usersService.getUsersById(buyerId);
if (users == null) {
logger.info("OrderController.saveCoupon.buyerId " + buyerId);
return new JsonResult(JsonResultCode.FAILURE, "你的账号有误,请重新登录", "");
}
//判断当前用户的状态是否可用
int status = users.getStatus();
if (UserStatus.FORBIDDEN == status) {
return new JsonResult(JsonResultCode.FAILURE, "你的账号已经被禁用了,请联系公司客服", "");
}
if (couponId == null) {
return new JsonResult(JsonResultCode.SUCCESS, "活动已经结束", "");
}
//新增
int result = couponReceiveService.insert(buyerId, couponId);
if (result == -1) {
return new JsonResult(JsonResultCode.SUCCESS, "领取失败,已经领取过优惠券了", "");
} else if (result == 0) {
return new JsonResult(JsonResultCode.FAILURE, "领取失败,活动已经结束", "");
} else {
return new JsonResult(JsonResultCode.SUCCESS, "领取成功", "");
}
} catch (Exception ex) {
logger.error("[CouponController][saveCoupon] exception", ex);
return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
}
}
}

最终总结:用户优惠券会发放在买家的APP中的个人中心里面,然后进行点击查看与领取,然后在支付的时候会自动显示出优惠券的数据,非常的灵活与方便。

Java开源生鲜电商平台-优惠券设计与架构(源码可下载)的更多相关文章

  1. Java开源生鲜电商平台-盈利模式详解(源码可下载)

    Java开源生鲜电商平台-盈利模式详解(源码可下载) 该平台提供一个联合买家与卖家的一个平台.(类似淘宝购物,这里指的是食材的购买.) 平台有以下的盈利模式:(类似的平台有美菜网,食材网等) 1. 订 ...

  2. 点菜网---Java开源生鲜电商平台-商品基础业务架构设计-商品分类(源码可下载)

    点菜网---Java开源生鲜电商平台-商品基础业务架构设计-商品分类 (源码可下载) 说明:我们搞过电商的人都可以体会到,搞生鲜电商是最复杂的,为什么复杂呢?我总结了有以下几个业务特性决定的: 1. ...

  3. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android or IOS)   1. 数据库表设计. 说明:无论是支付宝还 ...

  4. Java开源生鲜电商平台-用户表的设计(源码可下载)

    Java开源生鲜电商平台-用户表的设计(源码可下载) 说明:由于该系统属于B2B平台,不设计到B2C的架构. 角色分析:买家与卖家. 由于买家与卖家所填写的资料都不一样,需要建立两站表进行维护,比如: ...

  5. Java开源生鲜电商平台-商品表的设计(源码可下载)

    Java开源生鲜电商平台-商品表的设计(源码可下载) 任何一个电商,无论是B2C还是B2B的电商,商品表的设计关系到整个系统架构的核心. 1. 商品基本信息表:用单词:goods做为商品表 2. 商品 ...

  6. Java开源生鲜电商平台-订单表的设计(源码可下载)

    Java开源生鲜电商平台-订单表的设计(源码可下载) 场景分析说明: 买家(餐馆)用户,通过APP进行选菜,放入购物车,然后下单,最终支付的流程,我们称为下单过程. 买家可以在张三家买茄子,李四家买萝 ...

  7. Java开源生鲜电商平台-购物车模块的设计与架构(源码可下载)

    ava开源生鲜电商平台-购物车模块的设计与架构(源码可下载) 说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题, ...

  8. Java开源生鲜电商平台-推荐系统模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-推荐系统模块的设计与架构(源码可下载) 业务需求: 对于一个B2B的生鲜电商平台,对于买家而言,他需要更加快速的购买到自己的产品,跟自己的餐饮店不相关的东西,他是不关心的,而 ...

  9. Java开源生鲜电商平台-监控模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-监控模块的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-监控模块的设计与架构,我们谈到监控,一般设计到两个方面的内容: 1. 服务器本身的监控.(比如:linux ...

随机推荐

  1. 关于Linux和Unix的分析

    Linux操作系统即linux.  Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软 ...

  2. Activex、OLE、COM、OCX、DLL之间有什么区别?

    来源:http://www.blogjava.net/Jack2007/archive/2008/04/27/196392.html         熟悉面向对象编程和网络编程的人一定对ActiveX ...

  3. AttributeError: module 'enum' has no attribute 'IntFlag'

    Mac PyCharm新建以Python3.6.1为解释器的Django项目的时候出现以下错误提示: AttributeError: module 'enum' has no attribute 'I ...

  4. 表示一个文件的 File 类型

    从本篇文章开始,我们将开启对 Java IO 系统的学习,本质上就是对文件的读写操作,听上去简单,其实并不容易.Java 的 IO 系统一直在完善和改进,设计了大量的类,也只有理解了这些类型被设计出来 ...

  5. netcore入门-基础

    .NETCORE1.0出来了,咦不错,什么开源,跨平台的,观望下等2.0:我擦2.0出来了可以学习了,截止到目前2.1都快出来了,是时候学习一下了. 先建一个webapi项目,从简单的demo开始 l ...

  6. Linux的安装(虚拟机环境)与基础配置

    一.背景 本文介绍如何安装虚拟机VMware以及如果在虚拟机上安装Linux系统以及Linux安装完毕之后的基础配置 需要准备的东西有VMware以及Linux镜像文件 二.下载安装VMware 下载 ...

  7. java中new关键字和newInstance()方法的区别

    1> new是一个关键字,可以说是一个指令: newInstance()是一个方法,Class对象的一个方法. 2> new主要作用是在内存中生成一个实例,而这个类可以没有提前加载到内从中 ...

  8. Asp.Net MVC 中JS通过ajaxfileupload上传图片获取身份证姓名、生日、家庭住址等详细信息

    客户要求用身份证图片上传获取身份证的详细信息就下来研究了一下(现在的客户真的懒 身份证信息都懒得输入了哈哈...),经过慢慢研究,果然皇天不负有心人搞出来了.这个借助的是腾讯的一个SKD  腾讯优图云 ...

  9. unity3d入门教程

    2010年Unity3D游戏引擎进入人们的视野,它操作简单.易学.灵活,逐步被各类平台厂商运用到新作品中,产生了全球游戏开发商.个人使用Unity3D的热潮.而在国内,根据权威部门统计,50%的Uni ...

  10. Socket 聊天工具

    package cn.davy.mychat; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FontD ...