mirror of
				https://gitee.com/coder-xiaomo/flashsale
				synced 2025-11-04 06:03:13 +08:00 
			
		
		
		
	商品模型-商品创建实现
This commit is contained in:
		@@ -11,7 +11,7 @@
 | 
				
			|||||||
 Target Server Version : 50726
 | 
					 Target Server Version : 50726
 | 
				
			||||||
 File Encoding         : 65001
 | 
					 File Encoding         : 65001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Date: 03/03/2022 13:13:05
 | 
					 Date: 03/03/2022 15:29:13
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SET NAMES utf8mb4;
 | 
					SET NAMES utf8mb4;
 | 
				
			||||||
@@ -26,14 +26,15 @@ CREATE TABLE `item_info`  (
 | 
				
			|||||||
  `title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
 | 
					  `title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
 | 
				
			||||||
  `price` decimal(10, 2) NOT NULL DEFAULT 0.00,
 | 
					  `price` decimal(10, 2) NOT NULL DEFAULT 0.00,
 | 
				
			||||||
  `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
 | 
					  `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
 | 
				
			||||||
  `sales` int(11) NOT NULL,
 | 
					  `sales` int(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
  `img_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
 | 
					  `img_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
 | 
				
			||||||
  PRIMARY KEY (`id`) USING BTREE
 | 
					  PRIMARY KEY (`id`) USING BTREE
 | 
				
			||||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 | 
					) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- ----------------------------
 | 
					-- ----------------------------
 | 
				
			||||||
-- Records of item_info
 | 
					-- Records of item_info
 | 
				
			||||||
-- ----------------------------
 | 
					-- ----------------------------
 | 
				
			||||||
 | 
					INSERT INTO `item_info` VALUES (1, 'item-h7p0wt-22680', 22.00, '0sddhs4aeowc26638j5fp2ox', 0, 'https://domain.com/pic/190ghi.jpg');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- ----------------------------
 | 
					-- ----------------------------
 | 
				
			||||||
-- Table structure for item_stock
 | 
					-- Table structure for item_stock
 | 
				
			||||||
@@ -46,11 +47,12 @@ CREATE TABLE `item_stock`  (
 | 
				
			|||||||
  PRIMARY KEY (`id`) USING BTREE,
 | 
					  PRIMARY KEY (`id`) USING BTREE,
 | 
				
			||||||
  INDEX `item_id`(`item_id`) USING BTREE,
 | 
					  INDEX `item_id`(`item_id`) USING BTREE,
 | 
				
			||||||
  CONSTRAINT `item_stock_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `item_info` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
 | 
					  CONSTRAINT `item_stock_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `item_info` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
 | 
				
			||||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 | 
					) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- ----------------------------
 | 
					-- ----------------------------
 | 
				
			||||||
-- Records of item_stock
 | 
					-- Records of item_stock
 | 
				
			||||||
-- ----------------------------
 | 
					-- ----------------------------
 | 
				
			||||||
 | 
					INSERT INTO `item_stock` VALUES (1, 140, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- ----------------------------
 | 
					-- ----------------------------
 | 
				
			||||||
-- Table structure for user_info
 | 
					-- Table structure for user_info
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										119
									
								
								frontend/createitem.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								frontend/createitem.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
 | 
					    <title>Title</title>
 | 
				
			||||||
 | 
					    <link href="static/assets/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
 | 
				
			||||||
 | 
					    <link href="static/assets/global/css/components.css" rel="stylesheet" type="text/css"/>
 | 
				
			||||||
 | 
					    <link href="static/assets/admin/pages/css/login.css" rel="stylesheet" type="text/css"/>
 | 
				
			||||||
 | 
					    <script src="./static/assets/global/plugins/jquery-1.11.0.min.js" type="text/javascript"></script>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body class="login">
 | 
				
			||||||
 | 
					<div class="content">
 | 
				
			||||||
 | 
					    <h3 class="form-title">创建商品</h3>
 | 
				
			||||||
 | 
					    <div class="from-group">
 | 
				
			||||||
 | 
					        <label class="control-label">商品名</label>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					            <input class="form-control" type="text" placeholder="商品名" name="title" id="title">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="from-group">
 | 
				
			||||||
 | 
					        <label class="control-label">商品描述</label>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					            <input class="form-control" type="text" placeholder="商品描述" name="description" id="description">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="from-group">
 | 
				
			||||||
 | 
					        <label class="control-label">价格</label>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					            <input class="form-control" type="text" placeholder="价格" name="price" id="price">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="from-group">
 | 
				
			||||||
 | 
					        <label class="control-label">图片</label>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					            <input class="form-control" type="text" placeholder="图片" name="imgUrl" id="imgUrl">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="from-group">
 | 
				
			||||||
 | 
					        <label class="control-label">库存</label>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					            <input class="form-control" type="text" placeholder="库存" name="stock" id="stock">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="form-actions">
 | 
				
			||||||
 | 
					        <button class="btn blue" id="create" type="submit">
 | 
				
			||||||
 | 
					            创建商品
 | 
				
			||||||
 | 
					        </button>
 | 
				
			||||||
 | 
					        <a href="getotp.html?quickDebug">获取验证码</a>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					    jQuery(document).ready(function () {
 | 
				
			||||||
 | 
					        $("#create").on("click", function () {
 | 
				
			||||||
 | 
					            var title = $("#title").val();
 | 
				
			||||||
 | 
					            var description = $("#description").val();
 | 
				
			||||||
 | 
					            var imgUrl = $("#imgUrl").val();
 | 
				
			||||||
 | 
					            var price = $("#price").val();
 | 
				
			||||||
 | 
					            var stock = $("#stock").val();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (title == null || title == "") {
 | 
				
			||||||
 | 
					                alert("商品名不能为空");
 | 
				
			||||||
 | 
					                return false; // 捕获onclick事件,不让他传递到上一层
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (description == null || description == "") {
 | 
				
			||||||
 | 
					                alert("商品描述不能为空");
 | 
				
			||||||
 | 
					                return false; // 捕获onclick事件,不让他传递到上一层
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (imgUrl == null || imgUrl == "") {
 | 
				
			||||||
 | 
					                alert("图片Url不能为空");
 | 
				
			||||||
 | 
					                return false; // 捕获onclick事件,不让他传递到上一层
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (price == null || price == "") {
 | 
				
			||||||
 | 
					                alert("价格不能为空");
 | 
				
			||||||
 | 
					                return false; // 捕获onclick事件,不让他传递到上一层
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (stock == null || stock == "") {
 | 
				
			||||||
 | 
					                alert("库存不能为空");
 | 
				
			||||||
 | 
					                return false; // 捕获onclick事件,不让他传递到上一层
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $.ajax({
 | 
				
			||||||
 | 
					                type: "POST",
 | 
				
			||||||
 | 
					                contentType: "application/x-www-form-urlencoded",
 | 
				
			||||||
 | 
					                url: "http://localhost:8090/item/create",
 | 
				
			||||||
 | 
					                data: {
 | 
				
			||||||
 | 
					                    "title": title,
 | 
				
			||||||
 | 
					                    "description": description,
 | 
				
			||||||
 | 
					                    "imgUrl": imgUrl,
 | 
				
			||||||
 | 
					                    "price": price,
 | 
				
			||||||
 | 
					                    "stock": stock,
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                xhrFields: {withCredentials: true},
 | 
				
			||||||
 | 
					                success: function (data) {
 | 
				
			||||||
 | 
					                    if (data.status == "success") {
 | 
				
			||||||
 | 
					                        alert("创建成功");
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        alert("创建失败,原因为" + data.data.errMsg);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                error: function (data) {
 | 
				
			||||||
 | 
					                    alert("创建失败,原因为" + data.responseText);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function filldata() {
 | 
				
			||||||
 | 
					            const date = new Date();
 | 
				
			||||||
 | 
					            $("#title").val("item-" + Math.random().toString(36).slice(-6) + "-" + date.getSeconds() + date.getMilliseconds());
 | 
				
			||||||
 | 
					            $("#description").val(Math.random().toString(36).slice(-6) + Math.random().toString(36).slice(-6) + Math.random().toString(36).slice(-6) + Math.random().toString(36).slice(-6));
 | 
				
			||||||
 | 
					            $("#imgUrl").val("https://domain.com/pic/" + Math.random().toString(36).slice(-6) + ".jpg");
 | 
				
			||||||
 | 
					            $("#price").val(Math.round(Math.random() * (500 - 1) + 1));
 | 
				
			||||||
 | 
					            $("#stock").val(Math.round(Math.random() * (1000 - 1) + 1));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        filldata();
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					package com.cxyxiaomo.flashsale.controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.controller.viewobject.ItemVO;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.error.BusinessException;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.response.CommonReturnType;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.service.ItemService;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.service.model.ItemModel;
 | 
				
			||||||
 | 
					import org.springframework.beans.BeanUtils;
 | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Controller;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Controller("/item")
 | 
				
			||||||
 | 
					@RequestMapping("/item")
 | 
				
			||||||
 | 
					@CrossOrigin(allowedHeaders = "*", allowCredentials = "true")
 | 
				
			||||||
 | 
					public class ItemController extends BaseController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private ItemService itemService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 创建商品的Controller
 | 
				
			||||||
 | 
					    @RequestMapping(value = "/create", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED})
 | 
				
			||||||
 | 
					    @ResponseBody
 | 
				
			||||||
 | 
					    public CommonReturnType createItem(@RequestParam(name = "title") String title,
 | 
				
			||||||
 | 
					                                       @RequestParam(name = "description") String description,
 | 
				
			||||||
 | 
					                                       @RequestParam(name = "price") BigDecimal price,
 | 
				
			||||||
 | 
					                                       @RequestParam(name = "stock") Integer stock,
 | 
				
			||||||
 | 
					                                       @RequestParam(name = "imgUrl") String imgUrl) throws BusinessException {
 | 
				
			||||||
 | 
					        // 封装Service请求用来创建商品
 | 
				
			||||||
 | 
					        ItemModel itemModel = new ItemModel();
 | 
				
			||||||
 | 
					        itemModel.setTitle(title);
 | 
				
			||||||
 | 
					        itemModel.setDescription(description);
 | 
				
			||||||
 | 
					        itemModel.setPrice(price);
 | 
				
			||||||
 | 
					        itemModel.setStock(stock);
 | 
				
			||||||
 | 
					        itemModel.setImgUrl(imgUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ItemModel itemModelForReturn = itemService.createItem(itemModel);
 | 
				
			||||||
 | 
					        ItemVO itemVO = convertVOFromModel(itemModelForReturn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return CommonReturnType.create(itemVO);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ItemVO convertVOFromModel(ItemModel itemModel) {
 | 
				
			||||||
 | 
					        if (itemModel == null) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ItemVO itemVO = new ItemVO();
 | 
				
			||||||
 | 
					        BeanUtils.copyProperties(itemModel, itemVO);
 | 
				
			||||||
 | 
					        return itemVO;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					package com.cxyxiaomo.flashsale.controller.viewobject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class ItemVO {
 | 
				
			||||||
 | 
					    // 商品价格
 | 
				
			||||||
 | 
					    private Integer id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品名称
 | 
				
			||||||
 | 
					    private String title;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品价格
 | 
				
			||||||
 | 
					    private BigDecimal price;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品的库存
 | 
				
			||||||
 | 
					    private Integer stock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品的描述
 | 
				
			||||||
 | 
					    private String description;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品的销量
 | 
				
			||||||
 | 
					    private Integer sales;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品描述图片的URL
 | 
				
			||||||
 | 
					    private String imgUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Integer getId() {
 | 
				
			||||||
 | 
					        return id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setId(Integer id) {
 | 
				
			||||||
 | 
					        this.id = id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getTitle() {
 | 
				
			||||||
 | 
					        return title;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setTitle(String title) {
 | 
				
			||||||
 | 
					        this.title = title;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public BigDecimal getPrice() {
 | 
				
			||||||
 | 
					        return price;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setPrice(BigDecimal price) {
 | 
				
			||||||
 | 
					        this.price = price;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Integer getStock() {
 | 
				
			||||||
 | 
					        return stock;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setStock(Integer stock) {
 | 
				
			||||||
 | 
					        this.stock = stock;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getDescription() {
 | 
				
			||||||
 | 
					        return description;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setDescription(String description) {
 | 
				
			||||||
 | 
					        this.description = description;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Integer getSales() {
 | 
				
			||||||
 | 
					        return sales;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setSales(Integer sales) {
 | 
				
			||||||
 | 
					        this.sales = sales;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getImgUrl() {
 | 
				
			||||||
 | 
					        return imgUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setImgUrl(String imgUrl) {
 | 
				
			||||||
 | 
					        this.imgUrl = imgUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -35,6 +35,8 @@ public interface ItemStockDOMapper {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    ItemStockDO selectByPrimaryKey(Integer id);
 | 
					    ItemStockDO selectByPrimaryKey(Integer id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ItemStockDO selectByItemId(Integer id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This method was generated by MyBatis Generator.
 | 
					     * This method was generated by MyBatis Generator.
 | 
				
			||||||
     * This method corresponds to the database table item_stock
 | 
					     * This method corresponds to the database table item_stock
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					package com.cxyxiaomo.flashsale.service;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.error.BusinessException;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.service.model.ItemModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface ItemService {
 | 
				
			||||||
 | 
					    // 创建商品
 | 
				
			||||||
 | 
					    ItemModel createItem(ItemModel itemModel) throws BusinessException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品列表浏览
 | 
				
			||||||
 | 
					    List<ItemModel> listItem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 商品详情浏览
 | 
				
			||||||
 | 
					    ItemModel getItemById(Integer id);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					package com.cxyxiaomo.flashsale.service.impl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.dao.ItemDOMapper;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.dao.ItemStockDOMapper;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.dataobject.ItemDO;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.dataobject.ItemStockDO;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.error.BusinessException;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.error.EmBusinessError;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.service.ItemService;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.service.model.ItemModel;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.validator.ValidationResult;
 | 
				
			||||||
 | 
					import com.cxyxiaomo.flashsale.validator.ValidatorImpl;
 | 
				
			||||||
 | 
					import org.springframework.beans.BeanUtils;
 | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import org.springframework.transaction.annotation.Transactional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Service
 | 
				
			||||||
 | 
					public class ItemServiceImpl implements ItemService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private ValidatorImpl validator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private ItemDOMapper itemDOMapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private ItemStockDOMapper itemStockDOMapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    @Transactional
 | 
				
			||||||
 | 
					    public ItemModel createItem(ItemModel itemModel) throws BusinessException {
 | 
				
			||||||
 | 
					        // 校验入参
 | 
				
			||||||
 | 
					        ValidationResult result = validator.validate(itemModel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (result.isHasErrors()) {
 | 
				
			||||||
 | 
					            throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, result.getErrMsg());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 转化 ItemModel -> Data Object
 | 
				
			||||||
 | 
					        ItemDO itemDO = this.convertItemDOFromItemModel(itemModel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 写入数据库
 | 
				
			||||||
 | 
					        itemDOMapper.insertSelective(itemDO);
 | 
				
			||||||
 | 
					        itemModel.setId(itemDO.getId());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ItemStockDO itemStockDO = this.convertItemStockDOFormItemStockModel(itemModel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        itemStockDOMapper.insertSelective(itemStockDO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 返回创建完成的对象
 | 
				
			||||||
 | 
					        return this.getItemById(itemModel.getId());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ItemDO convertItemDOFromItemModel(ItemModel itemModel) {
 | 
				
			||||||
 | 
					        if (itemModel == null) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ItemDO itemDO = new ItemDO();
 | 
				
			||||||
 | 
					        BeanUtils.copyProperties(itemModel, itemDO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return itemDO;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ItemStockDO convertItemStockDOFormItemStockModel(ItemModel itemModel) {
 | 
				
			||||||
 | 
					        if (itemModel == null) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ItemStockDO itemStockDO = new ItemStockDO();
 | 
				
			||||||
 | 
					        itemStockDO.setItemId(itemModel.getId());
 | 
				
			||||||
 | 
					        itemStockDO.setStock(itemModel.getStock());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return itemStockDO;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public List<ItemModel> listItem() {
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public ItemModel getItemById(Integer id) {
 | 
				
			||||||
 | 
					        ItemDO itemDO = itemDOMapper.selectByPrimaryKey(id);
 | 
				
			||||||
 | 
					        if (itemDO == null) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // 操作获得库存数量
 | 
				
			||||||
 | 
					        ItemStockDO itemStockDO = itemStockDOMapper.selectByItemId(itemDO.getId());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 将Data Object -> Model
 | 
				
			||||||
 | 
					        ItemModel itemModel = convertModelFromDataObject(itemDO, itemStockDO);
 | 
				
			||||||
 | 
					        return itemModel;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ItemModel convertModelFromDataObject(ItemDO itemDO, ItemStockDO itemStockDO) {
 | 
				
			||||||
 | 
					        ItemModel itemModel = new ItemModel();
 | 
				
			||||||
 | 
					        BeanUtils.copyProperties(itemDO, itemModel);
 | 
				
			||||||
 | 
					        itemModel.setStock(itemStockDO.getStock());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return itemModel;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,8 @@
 | 
				
			|||||||
package com.cxyxiaomo.flashsale.service.model;
 | 
					package com.cxyxiaomo.flashsale.service.model;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.validation.constraints.Min;
 | 
				
			||||||
 | 
					import javax.validation.constraints.NotBlank;
 | 
				
			||||||
 | 
					import javax.validation.constraints.NotNull;
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ItemModel {
 | 
					public class ItemModel {
 | 
				
			||||||
@@ -7,21 +10,27 @@ public class ItemModel {
 | 
				
			|||||||
    private Integer id;
 | 
					    private Integer id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 商品名称
 | 
					    // 商品名称
 | 
				
			||||||
 | 
					    @NotBlank(message = "商品名称不能为空")
 | 
				
			||||||
    private String title;
 | 
					    private String title;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 商品价格
 | 
					    // 商品价格
 | 
				
			||||||
 | 
					    @NotNull(message = "商品价格不能为空")
 | 
				
			||||||
 | 
					    @Min(value = 0, message = "商品价格必须大于0")
 | 
				
			||||||
    private BigDecimal price;
 | 
					    private BigDecimal price;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 商品的库存
 | 
					    // 商品的库存
 | 
				
			||||||
 | 
					    @NotNull(message = "库存不能不填")
 | 
				
			||||||
    private Integer stock;
 | 
					    private Integer stock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 商品的描述
 | 
					    // 商品的描述
 | 
				
			||||||
 | 
					    @NotBlank(message = "商品描述信息不能为空")
 | 
				
			||||||
    private String description;
 | 
					    private String description;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 商品的销量
 | 
					    // 商品的销量
 | 
				
			||||||
    private Integer sales;
 | 
					    private Integer sales;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 商品描述图片的URL
 | 
					    // 商品描述图片的URL
 | 
				
			||||||
 | 
					    @NotBlank(message = "商品描述图片不能为空")
 | 
				
			||||||
    private String imgUrl;
 | 
					    private String imgUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Integer getId() {
 | 
					    public Integer getId() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,4 +108,10 @@
 | 
				
			|||||||
      item_id = #{itemId,jdbcType=INTEGER}
 | 
					      item_id = #{itemId,jdbcType=INTEGER}
 | 
				
			||||||
    where id = #{id,jdbcType=INTEGER}
 | 
					    where id = #{id,jdbcType=INTEGER}
 | 
				
			||||||
  </update>
 | 
					  </update>
 | 
				
			||||||
 | 
					  <select id="selectByItemId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
 | 
				
			||||||
 | 
					    select
 | 
				
			||||||
 | 
					    <include refid="Base_Column_List" />
 | 
				
			||||||
 | 
					    from item_stock
 | 
				
			||||||
 | 
					    where item_id = #{itemId,jdbcType=INTEGER}
 | 
				
			||||||
 | 
					  </select>
 | 
				
			||||||
</mapper>
 | 
					</mapper>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user