Java秒殺系統(十)實現秒殺功能-商品列表頁
阿新 • • 發佈:2019-01-28
商品表
CREATE TABLE `goods` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID', `goods_name` varchar(16) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '商品名稱', `goods_title` varchar(64) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '商品標題', `goods_img` varchar(64) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '商品的圖片', `goods_detail` longtext CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '商品的詳情介紹', `goods_price` decimal(10,2) DEFAULT 0.00 COMMENT '商品單價', `goods_stock` int(11) DEFAULT 0 COMMENT '商品庫存', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ---------------------------- -- Records of goods -- ---------------------------- INSERT INTO `goods` VALUES ('1', '小米Mix2', '小米Mix2(黑科技十足)', '/img/小米Mix2.png', '小米Mix2s', '3499.00', '10'); INSERT INTO `goods` VALUES ('2', 'huawei mate10', 'Huawei華為', '/img/huawei.png', 'Huwei Mate10', '4800.00', '10'); INSERT INTO `goods` VALUES ('3', 'honor10', '榮耀10', '/img/榮耀10.png', 'Honor 10', '2799.00', '10'); INSERT INTO `goods` VALUES ('4', '三星s9', 'Sanxing S9', '/img/三星.png', 'sanxing S9', '6899.00', '10'); INSERT INTO `goods` VALUES ('5', 'iPhone X', 'iphoneX(全網通)', '/img/iPhoneX.png', 'iphoneX', '8848.00', '8'); INSERT INTO `goods` VALUES ('6', '小米8', '黑科技十足', '/img/小米8.png', '小米8', '3499.00', '10'); DROP TABLE IF EXISTS `goods`;
秒殺商品表
DROP TABLE IF EXISTS `miaosha_goods`; CREATE TABLE `miaosha_goods` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '秒殺的商品表', `goods_id` bigint(20) DEFAULT NULL COMMENT '商品的ID', `miaosha_price` decimal(10,2) DEFAULT 0.00 COMMENT '秒殺價', `stock_count` int(11) DEFAULT NULL COMMENT '庫存數量', `start_date` datetime DEFAULT NULL COMMENT '秒殺開始時間', `end_date` datetime DEFAULT NULL COMMENT '秒殺結束時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of miaosha_goods -- ---------------------------- INSERT INTO `miaosha_goods` VALUES ('1', '1', '300.00', '6', '2018-05-26 11:33:59', '2018-05-26 11:34:08'); INSERT INTO `miaosha_goods` VALUES ('2', '2', '150.00', '5', '2018-05-25 11:34:32', '2018-07-19 11:34:40'); INSERT INTO `miaosha_goods` VALUES ('3', '3', '100.00', '10', '2018-06-14 10:24:04', '2018-07-19 10:24:21'); INSERT INTO `miaosha_goods` VALUES ('4', '4', '200.00', '6', '2018-05-25 10:24:42', '2018-07-19 10:24:47'); INSERT INTO `miaosha_goods` VALUES ('5', '5', '800.00', '5', '2018-05-25 11:11:42', '2018-06-15 11:11:50'); INSERT INTO `miaosha_goods` VALUES ('6', '6', '1.00', '10', '2018-05-31 09:15:13', '2018-06-30 09:15:18');
訂單表
DROP TABLE IF EXISTS `order_info`;
CREATE TABLE `order_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL COMMENT '使用者',
`goods_id` bigint(20) DEFAULT NULL COMMENT '商品ID',
`delivery_addr_id` bigint(20) DEFAULT NULL COMMENT '收貨地址ID',
`goods_name` varchar(16) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '冗餘過來的商品名稱',
`goods_count` int(11) DEFAULT 0 COMMENT '商品數量',
`goods_price` decimal(10,2) DEFAULT 0.00 COMMENT '商品價格',
`order_channel` tinyint(4) DEFAULT 0 COMMENT '1pc,2android,3ios',
`status` tinyint(4) DEFAULT 0 COMMENT '訂單狀態,0新建來支付,1已經支付,2已經發貨,3已經收貨,4已退款,5已完成',
`create_date` datetime DEFAULT NULL COMMENT '建立時間',
`pay_date` datetime DEFAULT NULL COMMENT '支付時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
秒殺訂單表
DROP TABLE IF EXISTS `miaosha_order`;
CREATE TABLE `miaosha_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL COMMENT '使用者ID',
`order_id` bigint(20) DEFAULT NULL COMMENT '訂單ID',
`goods_id` bigint(20) DEFAULT NULL COMMENT '商品ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
建立domain物件
public class Goods {
private Long id;
private String goodsName;
private String goodsTitle;
private String goodsImg;
private String goodsDetail;
private Double goodsPrice;
private Integer goodsStock;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsTitle() {
return goodsTitle;
}
public void setGoodsTitle(String goodsTitle) {
this.goodsTitle = goodsTitle;
}
public String getGoodsImg() {
return goodsImg;
}
public void setGoodsImg(String goodsImg) {
this.goodsImg = goodsImg;
}
public String getGoodsDetail() {
return goodsDetail;
}
public void setGoodsDetail(String goodsDetail) {
this.goodsDetail = goodsDetail;
}
public Double getGoodsPrice() {
return goodsPrice;
}
public void setGoodsPrice(Double goodsPrice) {
this.goodsPrice = goodsPrice;
}
public Integer getGoodsStock() {
return goodsStock;
}
public void setGoodsStock(Integer goodsStock) {
this.goodsStock = goodsStock;
}
}
package cn.tedu.miaosha.domain;
import java.util.Date;
public class MiaoshaGoods {
private Long id;
private Long goodsId;
private Integer stockCount;
private Date startDate;
private Date endDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public Integer getStockCount() {
return stockCount;
}
public void setStockCount(Integer stockCount) {
this.stockCount = stockCount;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
}
package cn.tedu.miaosha.domain;
public class MiaoshaOrder {
private Long id;
private Long userId;
private Long orderId;
private Long goodsId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
}
package cn.tedu.miaosha.domain;
import java.util.Date;
public class MiaoshaUser {
private Long id;
private String nickname;
private String password;
private String salt;
private String head;
private Date registerDate;
private Date lastLoginDate;
private Integer loginCount;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public Date getRegisterDate() {
return registerDate;
}
public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
}
public Date getLastLoginDate() {
return lastLoginDate;
}
public void setLastLoginDate(Date lastLoginDate) {
this.lastLoginDate = lastLoginDate;
}
public Integer getLoginCount() {
return loginCount;
}
public void setLoginCount(Integer loginCount) {
this.loginCount = loginCount;
}
}
package cn.tedu.miaosha.domain;
import java.util.Date;
public class OrderInfo {
private Long id;
private Long userId;
private Long goodsId;
private Long deliveryAddrId;
private String goodsName;
private Integer goodsCount;
private Double goodsPrice;
private Integer orderChannel;
private Integer status;
private Date createDate;
private Date payDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public Long getDeliveryAddrId() {
return deliveryAddrId;
}
public void setDeliveryAddrId(Long deliveryAddrId) {
this.deliveryAddrId = deliveryAddrId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public Integer getGoodsCount() {
return goodsCount;
}
public void setGoodsCount(Integer goodsCount) {
this.goodsCount = goodsCount;
}
public Double getGoodsPrice() {
return goodsPrice;
}
public void setGoodsPrice(Double goodsPrice) {
this.goodsPrice = goodsPrice;
}
public Integer getOrderChannel() {
return orderChannel;
}
public void setOrderChannel(Integer orderChannel) {
this.orderChannel = orderChannel;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getPayDate() {
return payDate;
}
public void setPayDate(Date payDate) {
this.payDate = payDate;
}
}
package cn.tedu.miaosha.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import cn.tedu.miaosha.domain.MiaoshaGoods;
import cn.tedu.miaosha.vo.GoodsVo;
@Mapper
public interface GoodsDao {
@Select("select g.*,mg.stock_count, mg.start_date, mg.end_date,mg.miaosha_price from miaosha_goods mg left join goods g on mg.goods_id = g.id")
public List<GoodsVo> listGoodsVo();
@Select("select g.*,mg.stock_count, mg.start_date, mg.end_date,mg.miaosha_price from miaosha_goods mg left join goods g on mg.goods_id = g.id where g.id = #{goodsId}")
public GoodsVo getGoodsVoByGoodsId(@Param("goodsId")long goodsId);
@Update("update miaosha_goods set stock_count = stock_count - 1 where goods_id = #{goodsId}")
public int reduceStock(MiaoshaGoods g);
}
package cn.tedu.miaosha.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.tedu.miaosha.dao.GoodsDao;
import cn.tedu.miaosha.domain.MiaoshaGoods;
import cn.tedu.miaosha.vo.GoodsVo;
@Service
public class GoodsService {
@Autowired
GoodsDao goodsDao;
public List<GoodsVo> listGoodsVo(){
return goodsDao.listGoodsVo();
}
public GoodsVo getGoodsVoByGoodsId(long goodsId) {
return goodsDao.getGoodsVoByGoodsId(goodsId);
}
public void reduceStock(GoodsVo goods) {
MiaoshaGoods g = new MiaoshaGoods();
g.setGoodsId(goods.getId());
goodsDao.reduceStock(g);
}
}
新增商品頁面
<div class="panel panel-default" style="height:100%;background-color:rgba(222,222,222,0.8)">
<div class="panel-heading" align="center" style="font-size:30px;color:black ;font-weight: bold;font-family:宋體;background-color:#E3E3E3">秒殺商品列表</div>
<table class="table" id="goodslist">
<tr><td>商品名稱</td><td>商品圖片</td><td>商品原價</td><td>秒殺價</td><td>庫存數量</td><td>詳情</td></tr>
<tr th:each="goods,goodsStat : ${goodsList}">
<td th:text="${goods.goodsName}"></td>
<td ><img th:src="@{${goods.goodsImg}}" width="100" height="100" /></td>
<td th:text="${goods.goodsPrice}"></td>
<td th:text="${goods.miaoshaPrice}"></td>
<td th:text="${goods.stockCount}"></td>
<td><a th:href="'/goods/to_detail/'+${goods.id}">詳情</a></td>
</tr>
</table>
</div>
img圖片