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);@Autowiredprivate CouponReceiveService couponReceiveService;@Autowiredprivate 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中的个人中心里面,然后进行点击查看与领取,然后在支付的时候会自动显示出优惠券的数据,非常的灵活与方便。

转载于:https://www.cnblogs.com/jurendage/p/9091587.html

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

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

    说明:现在电商白热化的程度,无论是生鲜电商还是其他的电商等等,都会有促销的这个体系,目的就是增加订单量与知名度等等 那么对于Java开源生鲜电商平台而言,我们采用优惠券的这种方式进行促销.(补贴价格战 ...

  2. 20、生鲜电商平台-优惠券设计与架构

    说明:现在电商白热化的程度,无论是生鲜电商还是其他的电商等等,都会有促销的这个体系,目的就是增加订单量与知名度等等 那么对于Java开源生鲜电商平台而言,我们采用优惠券的这种方式进行促销.(补贴价格战 ...

  3. Java生鲜电商平台-优惠券系统的架构设计与源码解析

    电商后台:实例解读促销系统 电商后台系统包括商品管理系统.采购系统.仓储系统.订单系统.促销系统.维权系统.财务系统.会员系统.权限系统等,各系统之间相互关联.相互依托,为前端的正常业务流转建立结实稳 ...

  4. Java生鲜电商平台-促销系统的架构设计与源码解析

    Java生鲜电商平台-促销系统的架构设计与源码解析 说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大,也是比较复杂的系 ...

  5. Java生鲜电商平台-商品基础业务架构设计-商品设计

    Java生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...

  6. Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP)

    Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP) 说明:Java生鲜电商平台中,由于商品的架构很大程度决定了电商的扩展性与伸缩性.对此根据自己多年的生鲜电商经验,整理了以下的商品中 ...

  7. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  8. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案

    Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...

  9. Java生鲜电商平台-统一异常处理及架构实战

    Java生鲜电商平台-统一异常处理及架构实战 补充说明:本文讲得比较细,所以篇幅较长. 请认真读完,希望读完后能对统一异常处理有一个清晰的认识. 背景 软件开发过程中,不可避免的是需要处理各种异常,就 ...

最新文章

  1. PR详解及二分类的PR曲线绘制
  2. 最小生成树板子-AcWing 859. Kruskal算法求最小生成树
  3. 结对开发石家庄地铁系统
  4. 一文读懂「中台」的前世今生
  5. 退出android app时界面残留影响,【Android】App 或 Activity 销毁重建的状态恢复对回调带来的影响...
  6. iOS-UI分析利器--Reveal安装破解以及简单使用
  7. python贝叶斯估计库_tsbngen一个python库,可从任意动态贝叶斯网络生成时间序列数据...
  8. 初级第二旬04—六字准提观试题
  9. 麻省理工学院公开课:经典力学
  10. VINS-Mono代码阅读笔记(十三):posegraph中四自由度位姿优化
  11. 超大文件上传 WebUploader 断点续传,分片上传
  12. 华为机试真题 Java 实现【不含 101 的数】【2022.11 Q4新题】
  13. 肾虚的信号你明白嘛?
  14. mPEG2000-EP,含有环氧基的线性单功能PEG,mPEG2000-Epoxide
  15. 关于五笔和拼音输入法的最本质区别
  16. B6065刨床推动架机械加工工艺规程及专用夹具设计(说明书+CAD图纸+工序卡+过程卡)
  17. xp 架设网站服务器软件,xp架设ftp服务器软件
  18. 28岁存款6万的我裸辞了
  19. ANSYS学习笔记——汽车绕流实验
  20. Unity移动---鼠标拖拽物体在3D空间移动(地面和非地面)

热门文章

  1. 利用有道翻译实现英汉互译
  2. java创建linux文件_Java生成文件夹
  3. 群主发红包-java实现
  4. win10自定义鼠标右键多级菜单(包含桌面)
  5. MySQL的索引和事务
  6. 90后的成人化有多可怕?
  7. Android之打开系统的网络设置
  8. javascript基础:表单处理3
  9. 遥测终端RTU边坡监测预警
  10. openwrt系统备份