上期回顾: Java Seckill Module:product details

秒杀其实很简单,就是做了一个form的表单提交,提交的时候就传递一个参数,就是商品ID,提交的路径到form表单的action属性中去:

<form id="miaoshaForm" method="post" action="/miaosha/do_miaosha"><button class="btn btn-primary btn-block" type="submit" id="buyButton">立即秒杀</button><input type="hidden" name="goodsId"  id="goodsId" />
</form> 

在秒杀controller中写个do_Miaosha来做一个form的提交:

首先要获取用户user,需要做个判断,如果用户为空,则直接返回登录页面,接着需要判断商品是否有库存,如果没库存则直接返回失败就就可以了,在判断库存之前需要将商品给查询出来,方法中需要接收下form参数:(@RequestParam("goodsId")long goodsId),拿到商品ID之后,我们就可以查GoodsVo了,接着需要判断是否秒杀到了,防止一个人秒杀到了多个商品,此时就需要到秒杀订单中去查了,引入OrderService,再从order中去查goodsId,看有没有秒杀order,判断完用户是否秒杀到了之后,如果没有秒杀到,下一步就是进行秒杀了:

public MiaoshaOrder getMiaoshaOrderByUserIdGoodsId(long userId, long goodsId) {return orderDao.getMiaoshaOrderByUserIdGoodsId(userId, goodsId);
} 
@Select("select * from miaosha_order where user_id=#{userId} and goods_id=#{goodsId}")
public MiaoshaOrder getMiaoshaOrderByUserIdGoodsId(@Param("userId")long userId, @Param("goodsId")long goodsId);

解读:实际上就是某一个用户秒杀了某一个商品。

OrderInfo orderInfo = miaoshaService.miaosha(user, goods);
model.addAttribute("orderInfo",orderInfo);
model.addAttribute("goods",goods);
return "order_detail";

解读:秒杀成功后生成订单,并返回订单,最后就是秒杀成功进入订单详情页。

@Transactional
public OrderInfo miaosha(MiaoshaUser user, GoodsVo goods) {goodsService.reduceStock(goods);return orderService.createOrder(user, goods);}
}
public void reduceStock(GoodsVo goods) {MiaoshaGoods g = new MiaoshaGoods();g.setGoodsId(goods.getId());goodsDao.reduceStock(g);
}
@Update("update miaosha_goods set stock_count = stock_count - 1 where goods_id = #{goodsId} and stock_count > 0")
public int reduceStock(MiaoshaGoods g); 
@Transactional
public OrderInfo createOrder(MiaoshaUser user, GoodsVo goods) {OrderInfo orderInfo = new OrderInfo();orderInfo.setCreateDate(new Date());orderInfo.setDeliveryAddrId(0L);orderInfo.setGoodsCount(1);orderInfo.setGoodsId(goods.getId());orderInfo.setGoodsName(goods.getGoodsName());orderInfo.setGoodsPrice(goods.getMiaoshaPrice());orderInfo.setOrderChannel(1);orderInfo.setStatus(0);orderInfo.setUserId(user.getId());orderDao.insert(orderInfo);MiaoshaOrder miaoshaOrder = new MiaoshaOrder();miaoshaOrder.setGoodsId(goods.getId());miaoshaOrder.setOrderId(orderInfo.getId());miaoshaOrder.setUserId(user.getId());orderDao.insertMiaoshaOrder(miaoshaOrder); return orderInfo;
} 

解读:(分别是先减库存,下订单,写入秒杀订单)到了createOrder之后呢,就开始设置订单数据,接着生成一张商品的订单表:

@Insert("insert into order_info(user_id, goods_id, goods_name, goods_count, goods_price, order_channel, status, create_date)values("+ "#{userId}, #{goodsId}, #{goodsName}, #{goodsCount}, #{goodsPrice}, #{orderChannel},#{status},#{createDate} )")
@SelectKey(keyColumn="id", keyProperty="id", resultType=long.class, before=false, statement="select last_insert_id()")
public long insert(OrderInfo orderInfo);

随后生成一个秒杀order对象,设置秒杀order表数据。

@Insert("insert into miaosha_order (user_id, goods_id, order_id)values(#{userId}, #{goodsId}, #{orderId})")
public int insertMiaoshaOrder(MiaoshaOrder miaoshaOrder);

接着将秒杀订单数据插入秒杀订单表中,最后返回秒杀订单。

需要注意的数据值:

orderInfo.setGoodsCount(1):每个用户只能秒杀一件商品。

orderInfo.setOrderChannel(1):用户的秒杀渠道。

orderInfo.setStatus(0):这里由于只是先生成商品的订单信息,而用户还没有进行秒杀,所以状态值是0,也就是未支付。

最后就是写页面了,这里不做演示。

订单详情这一块没什么好说的,很简单不做解释了。

Java Seckill Module:seckill相关推荐

  1. Java Seckill Module:Order details are static and Resolve purchases beyond

    上期回顾: Java Seckill Module:Seckill interface front and rear end separation 一.订单详情页面静态化 获取订单详情:页面传入ord ...

  2. 如何解决java.lang.NoClassDefFoundError:Java 9中的javax / xml / bind / JAXBException

    本文翻译自:How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9 I have s ...

  3. Java技术分享:SpringBoot多模块开发

    在Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,常见的就是分为model(域模型层).dao(数据库访问层).service(业务逻辑层).controller(控制器层).we ...

  4. Java SE 9:使用IntelliJ IDE开发和测试模块之间的隐式可读性(第5部分)

    I have already discussed many theoretical concepts about "Java 9 Module System" and also d ...

  5. Java SE 9:使用Eclipse和IntelliJ IDEA IDE开发和测试HelloWorld模块(第4部分)

    I have already discuss about "Java Module System" Basics in my previous posts. I'm going t ...

  6. Java 编程问题:七、Java 反射类、接口、构造器、方法和字段

    原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括涉及 Java 反射 ...

  7. java.lang.module_如何修复“java.lang.module.FindException:module java.se.ee not found”错误

    我正在尝试打包我的kivy应用程序(python3),但是当我运行命令buildozer -v android debug时,看到这个错误# Cwd /home/javier/.buildozer/a ...

  8. java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得

    该文章出自:http://www.cnblogs.com/hucn/p/3572384.html 分析工具:http://www.blogjava.net/jjshcc/archive/2014/03 ...

  9. 更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动

    Zing虚拟机文档Understanding Java Garbage Collection(了解Java垃圾收集) 首先说明这个Zing是收费的,但是他也是优秀的,我觉得我们可以研究下他的一些思想对 ...

  10. Java学习总结:18

    认识异常 异常是程序中导致程序中断的一种指令流. 例:产生异常 package com.study.Demo;public class Test1 {public static void main(S ...

最新文章

  1. 如何将 CentOS迁移到 AlmaLinux?
  2. R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的离散变量进行分析、使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标y的关系
  3. 德州学院计算机吴,计算机与信息学院举办“博士讲堂”系列讲座
  4. 你不是在拯救世界就是在拯救世界的路上
  5. uva437The Tower of Babylon
  6. Pytorch基础(八)——正则化
  7. 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
  8. 160 - 27 Cosh.1
  9. Centos用户和用户组管理
  10. 互联网晚报 | 4月08日 星期五 | 国家网信办:互联网企业近半年来用工人数保持平稳;特斯拉将推出一款“专用的”自动驾驶出租车...
  11. 手把手教你在Linux环境下安装Python3
  12. arcgis离线地图Java_ArcGIS API For Android离线地图的实现
  13. Extjs EditorGridPanel功能
  14. Vue Elements 可用的省市县数据
  15. JVET专家组下360Lib全景视频投影格式测试平台
  16. 手脱 FSG 1.0 壳
  17. 微信小程序canvas绘制圆形头像
  18. 算法-入门篇(欧式距离)
  19. Android之模仿微信登陆界面(一)
  20. 干货 | 视频插帧的方案实现与对比~~

热门文章

  1. 概率论与数理统计学习笔记——第四十三讲——两个正态总体的抽样分布
  2. 在Excel中批量生成复选框,也支持批量打勾批量删除,#excel插件
  3. Windows10 文件夹按分组排序
  4. MySQL基础查询语句练习题
  5. PS--常用操作技巧(一)快捷键
  6. 基于收益率的基金绩效归因
  7. Deepin Linux禁用笔记本自带键盘
  8. IAR for ARM介绍、下载、安装与注册
  9. E - Antinomy与红玉海
  10. 说说我的专业计算机作文,说说我自己作文(精选11篇)