品优购-秒杀下单
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)相关推荐

  1. Java之品优购课程讲义_day05(8)

    5.1 最简单的 FastDFS架构 5.1 FastDFS安装 FastDFS 安装步骤非常繁琐,我们在课程中不做要求.已经提供单独的<FastDFS 安装部署文档>供学员们课后阅读. ...

  2. Java之品优购课程讲义_day05(4)

    电商概念及表结构分析 2.1 电商概念 SPU与 SKU SPU = Standard Product Unit ( 标 准 产 品 单 位 ) SPU 是商品信息聚合的最小单位,是一组可复用.易检索 ...

  3. Java之品优购课程讲义_day01(8)

    4.1.1 商家管理后台 构建 web 模块 pinyougou-shop-web 与运营商管理后台的构建方式类似.区别: (1)定义 tomcat 的启动端口为 9102 (2)springmvc. ...

  4. Java之品优购课程讲义_day17(2)

    结算页-收件人地址选择 2.1 需求与数据库分析 2.1.1 需求描述 在结算页实现收件人地址选择功能 2.1.2 数据库结构分析 Tb_address 为地址表 2.1 准备工作 2.1.1 生成代 ...

  5. Java之品优购课程讲义_day16(2)

    2.1 后端控制层 实现思路: (1)从 cookie 中取出购物车 (2)向购物车添加商品 (3)将购物车存入 cookie pinyougou-cart-web 工程新建 CartControll ...

  6. Java之品优购课程讲义_day20(5)

    资源过滤与变量替换 修改 pom.xml ,在 build 节点中添加如下配置 <filters><filter>src/main/resources/filters/db_$ ...

  7. Java之品优购课程讲义_day20(2)

    秒杀商品列表的增量更新 每分钟执行查询秒杀商品表,将符合条件的记录并且缓存中不存在的秒杀商品存入缓存 /*** 刷新秒杀商品 */@Scheduled(cron="0 * * * * ?&q ...

  8. Java之品优购课程讲义_day08(7)

    4.1.1 Hash类型操作 创建测试类 TestHash (1)存入值 @Test public void testSetValue(){ redisTemplate.boundHashOps(&q ...

  9. Java之品优购课程讲义_day12(2)

    1.1 FTL指令 1.1.1 assign指 令 此指令用于在页面上定义一个变量 (1)定义简单类型: <#assign linkman="周先生"> 联系人:${l ...

最新文章

  1. postbody传参_post传参params与body的区别(@RequestParam和@RequestBody的区别)
  2. Oracle中序列(Sequence)详解
  3. 你真的懂用户画像吗?
  4. 提的最多的数据库“索引”,先来简单了解一下
  5. XML Schema ---complexType-----复合元素
  6. SQL Server AlwaysOn配置两个节点加共享文件夹仲裁见证
  7. 六度分离 HDU - 1869 (最短路径)
  8. 【Numpy入门实例:图像的手绘效果】
  9. Axure的灯箱效果说明
  10. python调用turtle(海龟画图),画一个正方形
  11. Neo4j图数据库和GDS图算法应用
  12. 南京恩博:绿水青山的守卫者
  13. python做题记录之正方形拼接
  14. office-word使用技巧——查找替换
  15. 写一个php简单的递归函数
  16. 云计算需要python吗_国内python云计算是啥
  17. 彻底解决Microsoft store闪退问题
  18. 「镁客早报」SpaceX猎鹰或将携带3.6万蠕虫登陆空间站;苹果分析师透露AirPoda半年内迎来升级...
  19. DES加解密工具(DES/ECB、DES/CBC)
  20. arduino程序与c语言,如何用C语言编写Arduino Uno

热门文章

  1. RibbonControl中的主题设计
  2. 数据库的日常管理经验浅谈
  3. React中props与state的区别
  4. smarty模板引擎总结六配置网站title,keywords,description
  5. 安卓自定义Listener
  6. word中格式化姓名的输出
  7. MS SQL SERVER中备份所有数据库
  8. 创建springmvc配置
  9. 初识ES-什么是elasticsearch
  10. RabbitMQ预取值