Java之品优购课程讲义_day19(6)
品优购-秒杀下单
4.1 需求分析
商品详细页点击立即抢购实现秒杀下单,下单时扣减库存。当库存为 0 或不在活动期 范围内时无法秒杀。
4.2 后端代码
4.2.1 服务接口层
修改 pinyougou-seckill-interface 的 SeckillOrderService.java
/*** 提交订单 * @param seckillId * @param userId */
public void submitOrder(Long seckillId,String userId);服务实现层
Spring 配置文件配置 IdWorker
pinyougou-seckill-service 的 SeckillOrderServiceImpl.java 实现方法 @Autowired private RedisTemplate redisTemplate; @Autowired private IdWorker idWorker; @Override public void submitOrder(Long seckillId, String userId) {//从缓存中查询秒杀商品 TbSeckillGoods seckillGoods =(TbSeckillGoods)
redisTemplate.boundHashOps("seckillGoods").get(seckillId); if(seckillGoods==null){throw new RuntimeException("商品不存在"); }if(seckillGoods.getStockCount()<=0){throw new RuntimeException("商品已抢购一空"); } //扣减(redis)库存 seckillGoods.setStockCount(seckillGoods.getStockCount()-1);
redisTemplate.boundHashOps("seckillGoods").put(seckillId, seckillGoods);//放
回缓存 if(seckillGoods.getStockCount()==0){//如果已经被秒光 seckillGoodsMapper.updateByPrimaryKey(seckillGoods);//同步到数据库
redisTemplate.boundHashOps("seckillGoods").delete(seckillId); }//保存(redis)订单 long orderId = idWorker.nextId(); TbSeckillOrder seckillOrder=new TbSeckillOrder(); seckillOrder.setId(orderId); seckillOrder.setCreateTime(new Date()); seckillOrder.setMoney(seckillGoods.getCostPrice());//秒杀价格 seckillOrder.setSeckillId(seckillId); seckillOrder.setSellerId(seckillGoods.getSellerId());
seckillOrder.setUserId(userId);//设置用户 ID seckillOrder.setStatus("0");//状态 redisTemplate.boundHashOps("seckillOrder").put(userId, seckillOrder); }控制层
修改 pinyougou-seckill-web 的 SeckillOrderController.java @RequestMapping("/submitOrder")
public Result submitOrder(Long seckillId){String userId =
SecurityContextHolder.getContext().getAuthentication().getName(); if("anonymousUser".equals(userId)){//如果未登录 return new Result(false, "用户未登录"); }try {seckillOrderService.submitOrder(seckillId, userId); return new Result(true, "提交成功"); }catch (RuntimeException e) {e.printStackTrace(); return new Result(false, e.getMessage()); } catch (Exception e) {e.printStackTrace(); return new Result(false, "提交失败"); }
}
转载于:https://blog.51cto.com/13517854/2312224
Java之品优购课程讲义_day19(6)相关推荐
- Java之品优购课程讲义_day05(8)
5.1 最简单的 FastDFS架构 5.1 FastDFS安装 FastDFS 安装步骤非常繁琐,我们在课程中不做要求.已经提供单独的<FastDFS 安装部署文档>供学员们课后阅读. ...
- Java之品优购课程讲义_day05(4)
电商概念及表结构分析 2.1 电商概念 SPU与 SKU SPU = Standard Product Unit ( 标 准 产 品 单 位 ) SPU 是商品信息聚合的最小单位,是一组可复用.易检索 ...
- Java之品优购课程讲义_day01(8)
4.1.1 商家管理后台 构建 web 模块 pinyougou-shop-web 与运营商管理后台的构建方式类似.区别: (1)定义 tomcat 的启动端口为 9102 (2)springmvc. ...
- Java之品优购课程讲义_day17(2)
结算页-收件人地址选择 2.1 需求与数据库分析 2.1.1 需求描述 在结算页实现收件人地址选择功能 2.1.2 数据库结构分析 Tb_address 为地址表 2.1 准备工作 2.1.1 生成代 ...
- Java之品优购课程讲义_day16(2)
2.1 后端控制层 实现思路: (1)从 cookie 中取出购物车 (2)向购物车添加商品 (3)将购物车存入 cookie pinyougou-cart-web 工程新建 CartControll ...
- Java之品优购课程讲义_day20(5)
资源过滤与变量替换 修改 pom.xml ,在 build 节点中添加如下配置 <filters><filter>src/main/resources/filters/db_$ ...
- Java之品优购课程讲义_day20(2)
秒杀商品列表的增量更新 每分钟执行查询秒杀商品表,将符合条件的记录并且缓存中不存在的秒杀商品存入缓存 /*** 刷新秒杀商品 */@Scheduled(cron="0 * * * * ?&q ...
- Java之品优购课程讲义_day08(7)
4.1.1 Hash类型操作 创建测试类 TestHash (1)存入值 @Test public void testSetValue(){ redisTemplate.boundHashOps(&q ...
- Java之品优购课程讲义_day12(2)
1.1 FTL指令 1.1.1 assign指 令 此指令用于在页面上定义一个变量 (1)定义简单类型: <#assign linkman="周先生"> 联系人:${l ...
最新文章
- postbody传参_post传参params与body的区别(@RequestParam和@RequestBody的区别)
- Oracle中序列(Sequence)详解
- 你真的懂用户画像吗?
- 提的最多的数据库“索引”,先来简单了解一下
- XML Schema ---complexType-----复合元素
- SQL Server AlwaysOn配置两个节点加共享文件夹仲裁见证
- 六度分离 HDU - 1869 (最短路径)
- 【Numpy入门实例:图像的手绘效果】
- Axure的灯箱效果说明
- python调用turtle(海龟画图),画一个正方形
- Neo4j图数据库和GDS图算法应用
- 南京恩博:绿水青山的守卫者
- python做题记录之正方形拼接
- office-word使用技巧——查找替换
- 写一个php简单的递归函数
- 云计算需要python吗_国内python云计算是啥
- 彻底解决Microsoft store闪退问题
- 「镁客早报」SpaceX猎鹰或将携带3.6万蠕虫登陆空间站;苹果分析师透露AirPoda半年内迎来升级...
- DES加解密工具(DES/ECB、DES/CBC)
- arduino程序与c语言,如何用C语言编写Arduino Uno