需要全部代码请点赞关注收藏后评论区留言私信~~~
分布式优惠券后台应用系统服务于两类用户群体,一类是商户,商户可以根据自己的实际情况即进行优惠券投放,另一类是平台消费用户,用户可以去领取商户发放的优惠券
分布式优惠券后台应用系统采用SpringBoot作为主体开发框架,使用Kafka消息队列实现优惠券从商户到用户的传递,Mysql存储商户信息,HBase存储用户信息,优惠券信息等,Redis保存优惠券的缓存信息 系统整体架构如下
对于商户投放子系统,商户注册生成对应的商户实体信息,并保存到Mysql数据库,商户可以投放自己商家的优惠券,且优惠券有自己的Token存放于Redis中,投放的优惠券信息将由Kafka向用户消费子系统发送,而商户投放的优惠券并不在Mysql中进行存储,而是在商户投放子系统中放送消息给Kafka,用户消费子系统通过侦听Kafka消息获得Kafka分布式信息并存储到HBase中,用户通过读取Redis中的优惠券信息领取消费券,并将自己领取到的优惠券信息存放在HBase中
mysql表结果设计如何 存放商户基本信息
HBase表结构设计
在HBase中建立三个表,分别是消费用户表,优惠券表和优惠券领取表
1:新建MAVEN工程 引入相关依赖包
2:修改applicaiton.yml文件 包括mysql和kafka的连接相关配置
3:建立各个类包存放路径
4:核心代码实现
商户投放子系统成功启动效果如下
用户子系统成功启动效果如下
发放优惠券界面如下
数据库表插入情况如下
部分代码如下 需要全部代码请点赞关注收藏后评论区留言私信~~~
package com.coupon.passbook.controller;
import com.coupon.passbook.log.LogConstants;
import com.coupon.passbook.log.LogGenerator;
import com.coupon.passbook.service.IUserService;
import com.coupon.passbook.vo.Response;
import com.coupon.passbook.vo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* 创建用户服务
* Created by Qinyi.
*/
@Slf4j
@RestController
@RequestMapping("/passbook")
public class CreateUserController {
/** 创建用户服务 */
private final IUserService userService;
/** HttpServletRequest */
private final HttpServletRequest httpServletRequest;
@Autowired
public CreateUserController(IUserService userService,
HttpServletRequest httpServletRequest) {
this.userService = userService;
this.httpServletRequest = httpServletRequest;
}
/**
* 创建用户
* @param user {@link User}
* @return {@link Response}
* */
@ResponseBody
@PostMapping("/createuser")
Response createUser(@RequestBody User user) throws Exception {
LogGenerator.genLog(
httpServletRequest,
user.getId(),
LogConstants.ActionName.CREATE_USER,
user
);
return userService.createUser(user);
}
}
控制器2
package com.coupon.passbook.controller;
import com.coupon.passbook.log.LogConstants;
import com.coupon.passbook.log.LogGenerator;
import com.coupon.passbook.service.IFeedbackService;
import com.coupon.passbook.service.IGainPassTemplateService;
import com.coupon.passbook.service.IInventoryService;
import com.coupon.passbook.service.IUserPassService;
import com.coupon.passbook.vo.Feedback;
import com.coupon.passbook.vo.GainPassTemplateRequest;
import com.coupon.passbook.vo.Pass;
import com.coupon.passbook.vo.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* Passbook Rest Controller
* Created by Qinyi.
*/
@Slf4j
@RestController
@RequestMapping("/passbook")
public class PassbookController {
/** 用户优惠券服务 */
private final IUserPassService userPassService;
/** 优惠券库存服务 */
private final IInventoryService inventoryService;
/** 领取优惠券服务 */
private final IGainPassTemplateService gainPassTemplateService;
/** 反馈服务 */
private final IFeedbackService feedbackService;
/** HttpServletRequest */
private final HttpServletRequest httpServletRequest;
@Autowired
public PassbookController(IUserPassService userPassService,
IInventoryService inventoryService,
IGainPassTemplateService gainPassTemplateService,
IFeedbackService feedbackService,
HttpServletRequest httpServletRequest) {
this.userPassService = userPassService;
this.inventoryService = inventoryService;
this.gainPassTemplateService = gainPassTemplateService;
this.feedbackService = feedbackService;
this.httpServletRequest = httpServletRequest;
}
/**
* 获取用户个人的优惠券信息
* @param userId 用户 id
* @return {@link Response}
* */
@ResponseBody
@GetMapping("/userpassinfo")
Response userPassInfo(Long userId) throws Exception {
LogGenerator.genLog(
httpServletRequest,
userId,
LogConstants.ActionName.USER_PASS_INFO,
null
);
return userPassService.getUserPassInfo(userId);
}
/**
* 获取用户使用了的优惠券信息
* @param userId 用户 id
* @return {@link Response}
* */
@ResponseBody
@GetMapping("userusedpassinfo")
Response userUsedPassInfo(Long userId) throws Exception {
LogGenerator.genLog(
httpServletRequest,
userId, LogConstants.ActionName.USER_USED_PASS_INFO,
null
);
return userPassService.getUserUsedPassInfo(userId);
}
/**
* 用户使用优惠券
* @param pass {@link Pass}
* @return {@link Response}
* */
@ResponseBody
@PostMapping("/userusepass")
Response userUsePass(@RequestBody Pass pass) {
LogGenerator.genLog(
httpServletRequest,
pass.getUserId(),
LogConstants.ActionName.USER_USE_PASS,
pass
);
return userPassService.userUsePass(pass);
}
/**
* 获取库存信息
* @param userId 用户 id
* @return {@link Response}
* */
@ResponseBody
@GetMapping("/inventoryinfo")
Response inventoryInfo(Long userId) throws Exception {
LogGenerator.genLog(
httpServletRequest,
userId,
LogConstants.ActionName.INVENTORY_INFO,
null
);
return inventoryService.getInventoryInfo(userId);
}
/**
* 用户领取优惠券
* @param request {@link GainPassTemplateRequest}
* @return {@link Response}
* */
@ResponseBody
@PostMapping("/gainpasstemplate")
Response gainPassTemplate(@RequestBody GainPassTemplateRequest request)
throws Exception {
LogGenerator.genLog(
httpServletRequest,
request.getUserId(),
LogConstants.ActionName.GAIN_PASS_TEMPLATE,
request
);
return gainPassTemplateService.gainPassTemplate(request);
}
/**
* 用户创建评论
* @param feedback {@link Feedback}
* @return {@link Response}
* */
@ResponseBody
@PostMapping("/createfeedback")
Response createFeedback(@RequestBody Feedback feedback) {
LogGenerator.genLog(
httpServletRequest,
feedback.getUserId(),
LogConstants.ActionName.CREATE_FEEDBACK,
feedback
);
return feedbackService.createFeedback(feedback);
}
/**
* 用户获取评论信息
* @param userId 用户 id
* @return {@link Response}
* */
@ResponseBody
@GetMapping("/getfeedback")
Response getFeedback(Long userId) {
LogGenerator.genLog(
httpServletRequest,
userId,
LogConstants.ActionName.GET_FEEDBACK,
null
);
return feedbackService.getFeedback(userId);
}
/**
* 异常演示接口
* @return {@link Response}
* */
@ResponseBody
@GetMapping("/exception")
Response exception() throws Exception {
throw new Exception("Welcome To IMOOC");
}
}
创作不易 觉得有帮助请点赞关注收藏~~~