促销管理――优惠券设计与架构

匿名 (未验证) 提交于 2019-12-03 00:22:01

最近公司让写一个优惠卷的demo,最近总结学习了一下,做下总结;大佬们别喷我哈,新人求照顾~

做促销活动的目的就是增加订单量与知名度等等, 那么对于电商(家具)平台而言,我们采用优惠券的这种方式进行促销。

首先设计数据库表

1. 优惠券基础信息表

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

DROP TABLE IF EXISTS `coupon`; CREATE TABLE `coupon` (   `coupon_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',   `coupon_no` varchar(32) DEFAULT NULL COMMENT '优惠券编号',   `coupon_name` varchar(64) DEFAULT NULL COMMENT '优惠券名称',   `coupon_send_type` tinyint(2) DEFAULT NULL COMMENT '优惠券发放类型,1为注册时发送',   `coupon_setting_type` tinyint(2) DEFAULT NULL COMMENT '优惠券结算类型,1,折抵价,2,满减券,3,折扣券',   `coupon_money` decimal(12,2) unsigned zerofill DEFAULT NULL COMMENT '优惠金额',   `coupon_number` int(11) unsigned zerofill DEFAULT NULL COMMENT '优惠券发放数量',   `coupon_start_time` datetime DEFAULT NULL COMMENT '优惠券开始时间',   `coupon_end_time` datetime DEFAULT NULL COMMENT '优惠券结束时间',   `coupon_start_period` datetime DEFAULT NULL COMMENT '优惠券有效开始时间。',   `coupon_end_period` datetime DEFAULT NULL COMMENT '优惠券有效结束时间。',   `coupon_status` tinyint(2) DEFAULT '0' COMMENT '状态,0表示可用,-1表示不可用',   `categoryids` varchar(64) DEFAULT NULL COMMENT '所属分类ID的集合,用逗号分隔存储',   `coupon_remarks` varchar(128) DEFAULT NULL COMMENT '优惠券的备注信息',   `create_time` datetime DEFAULT NULL COMMENT '优惠券创建时间',   PRIMARY KEY (`coupon_id`),   UNIQUE KEY `unique_coupon` (`coupon_name`) USING BTREE,   UNIQUE KEY `unique_coupon_no` (`coupon_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='优惠券信息表';

说明:业务说可以规定某个分类(例如:家具一类,水果一类等。。),做优惠券,主要是增加买家用户。价格可以后端进行设置。

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


2. 优惠券领取记录表

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

DROP TABLE IF EXISTS `coupon_receive`; CREATE TABLE `coupon_receive` (   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',   `user_id` bigint(20) DEFAULT NULL COMMENT '用户ID',   `coupon_id` bigint(20) DEFAULT NULL COMMENT '优惠券ID',   `status` tinyint(2) DEFAULT NULL COMMENT '状态,0表示可用,-1表示不可用',   `create_time` datetime DEFAULT NULL COMMENT '领取时间',   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='优惠券领取记录表';

3.优惠券消费记录表

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

DROP TABLE IF EXISTS `coupon_logs`; CREATE TABLE `coupon_logs` (   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',   `user_id` bigint(20) DEFAULT NULL COMMENT '买家ID',   `coupon_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='优惠券消费记录表';

第一次做是有点麻烦,因为不懂业务,只需理解业务后,相对而言,优惠券的难度不算大,重点的是业务方面的指导与学习,包括数据库的架构与设计等等,还有就是思路的学习。

相关核心代码如下:

由于是前后分离写法,所以我只需提供好接口就可以:

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

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

3.3 买家主动领取优惠券

/**  * 优惠券基础配置表  * @author administrator  */ @RestController public class CouponController extends BaseController { 	 	private static final Logger logger=LoggerFactory.getLogger(CouponController.class); 	 	@Autowired 	private CouponService couponService;  	/** 	 * 分页查询优惠卷,可以根据优惠卷名称和有效期进行筛选 	 * @param couponName 	 * @param couponStartPeriod 	 * @param couponEndPeriod 	 * @param currentPage 	 * @param pageSize 	 * @return RestResponse 	 */ 	@RequestMapping("/promotionserver/list") 	public RestResponse deliveryList(@RequestParam(required = false) String couponName, 									 @RequestParam(required = false) String couponStartPeriod, 									 @RequestParam(required = false) String couponEndPeriod, 									 @RequestParam(value = "currentPage", defaultValue = "1") Integer currentPage, 									 @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) { 		try { 			PageBean<Coupon> pageBean = couponService.findByCouponId(couponName,couponStartPeriod,couponEndPeriod, currentPage, pageSize); 			return RestResponse.success(pageBean); 		} catch (Exception e) { 			e.printStackTrace(); 		} 		return RestResponse.failure(GenericCode.ERROR); 	}  	/** 	 * 新增优惠券 	 * @param record 	 * @return RestResponse 	 */ 	@RequestMapping(value = "/promotionserver/toAdd") 	public RestResponse add(@RequestBody Coupon record) { 		try { 			couponService.add(record); 			return RestResponse.failure(GenericCode.SUCCESS); 		} catch (Exception e) { 			logger.error("[CouponController][add] coupon:", e); 			return RestResponse.failure(GenericCode.SYSTEM_ERROR); 		} 	}   //	/** //	 * 修改活动状态 //	 */ //	@ResponseBody //	@RequestMapping(value = "/updateStatus", method = { RequestMethod.GET, RequestMethod.POST }) //	public RestResponse updateStatus(HttpServletRequest request, HttpServletResponse response, Integer status, Integer id) { //		try { //			if(status == null || id == null){ //				return RestResponse.failure(GenericCode.ERROR_PARAM); //			} //			int result = couponService.updateStatus(status,id); //			if (result > 0) { //				return RestResponse.failure(GenericCode.SUCCESS); //			} else { //				return RestResponse.failure(GenericCode.ERROR); //			} //		} catch (Exception e) { //			logger.error("[CouponController][updateStatus] status:", e); //			return RestResponse.failure(GenericCode.SYSTEM_ERROR); //		} //	}  }


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





标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!