博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 构建电商基础秒杀项目 (十) 交易下单
阅读量:7165 次
发布时间:2019-06-29

本文共 6196 字,大约阅读时间需要 20 分钟。

学习笔记

新建表

create table if not exists order_info (    id varchar(32) not null default '',    user_id int not null default 0,    item_id int not null default 0,    item_price double(10, 2) not null default 0,    amount int not null default 0,    order_price double(10, 2) default 0,    primary key (id));create table if not exists sequence_info (    name varchar(64) not null default '',    current_value int not null default 0,    step int not null default 1,    primary key (name));insert into sequence_info (name, current_value, step) values ('order_info', 1, 1);

新增 OrderModel

public class OrderModel {    private String id;    private Integer userId;    private Integer itemId;    private BigDecimal itemPrice;    private Integer amount;    private BigDecimal orderPrice;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public Integer getUserId() {        return userId;    }    public void setUserId(Integer userId) {        this.userId = userId;    }    public Integer getItemId() {        return itemId;    }    public void setItemId(Integer itemId) {        this.itemId = itemId;    }    public BigDecimal getItemPrice() {        return itemPrice;    }    public void setItemPrice(BigDecimal itemPrice) {        this.itemPrice = itemPrice;    }    public Integer getAmount() {        return amount;    }    public void setAmount(Integer amount) {        this.amount = amount;    }    public BigDecimal getOrderPrice() {        return orderPrice;    }    public void setOrderPrice(BigDecimal orderPrice) {        this.orderPrice = orderPrice;    }}

新增 ItemService

public interface ItemService {    ItemModel createItem(ItemModel itemModel) throws BusinessException;    List
listItem(); ItemModel getItemById(Integer id); boolean decreaseStock(Integer itemId, Integer amount); void increaseSales(Integer itemId, Integer amount) throws BusinessException;}

新增 ItemServiceImpl

@Servicepublic 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());        }        ItemDO itemDO = convertFromModel(itemModel);        itemDOMapper.insertSelective(itemDO);        itemModel.setId(itemDO.getId());        ItemStockDO itemStockDO = convertItemStockFromModel(itemModel);        itemStockDOMapper.insertSelective(itemStockDO);        return getItemById(itemModel.getId());    }    @Override    public List
listItem() { List
itemDOList = itemDOMapper.listItem(); List
itemModelList = itemDOList.stream().map(itemDO -> { ItemStockDO itemStockDO = itemStockDOMapper.selectByItemId(itemDO.getId()); ItemModel itemModel = convertFromDataObject(itemDO, itemStockDO); return itemModel; }).collect(Collectors.toList()); return itemModelList; } @Override public ItemModel getItemById(Integer id) { ItemDO itemDO = itemDOMapper.selectByPrimaryKey(id); if(itemDO == null){ return null; } ItemStockDO itemStockDO = itemStockDOMapper.selectByItemId(itemDO.getId()); ItemModel itemModel = convertFromDataObject(itemDO, itemStockDO); return itemModel; } private ItemDO convertFromModel(ItemModel itemModel){ if(itemModel == null){ return null; } ItemDO itemDO = new ItemDO(); BeanUtils.copyProperties(itemModel, itemDO); itemDO.setPrice(itemModel.getPrice().doubleValue()); return itemDO; } private ItemStockDO convertItemStockFromModel(ItemModel itemModel){ if(itemModel == null){ return null; } ItemStockDO itemStockDO = new ItemStockDO(); itemStockDO.setItemId(itemModel.getId()); itemStockDO.setStock(itemModel.getStock()); return itemStockDO; } private ItemModel convertFromDataObject(ItemDO itemDO, ItemStockDO itemStockDO){ if(itemDO == null){ return null; } ItemModel itemModel = new ItemModel(); BeanUtils.copyProperties(itemDO, itemModel); itemModel.setPrice(new BigDecimal(itemDO.getPrice())); itemModel.setStock(itemStockDO.getStock()); return itemModel; } @Override @Transactional public boolean decreaseStock(Integer itemId, Integer amount) { int affectedRow = itemStockDOMapper.decreaseStock(itemId, amount); return affectedRow > 0; } @Override @Transactional public void increaseSales(Integer itemId, Integer amount) throws BusinessException { itemDOMapper.increaseSales(itemId, amount); }}

新增 OrderController

@Controller("order")@RequestMapping("/order")@CrossOrigin(allowCredentials = "true", allowedHeaders = "*")public class OrderController extends BaseController {    @Autowired    private OrderService orderService;    @Autowired    private HttpServletRequest httpServletRequest;    @RequestMapping(value = "/createorder", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED})    @ResponseBody    public CommonReturnType createOrder(@RequestParam(name="itemId") Integer itemId,                                        @RequestParam(name="amount") Integer amount)            throws BusinessException {        Boolean isLogin = (Boolean)httpServletRequest.getSession().getAttribute("LOGIN");        if(isLogin == null || !isLogin.booleanValue()){            throw new BusinessException(EmBusinessError.USER_NOT_LOGIN);        }        UserModel userModel = (UserModel)httpServletRequest.getSession().getAttribute("LOGIN_USER");        OrderModel orderModel = orderService.createOrder(userModel.getId(), itemId, amount);        return CommonReturnType.create(null);    }}

源码:

转载于:https://www.cnblogs.com/victorbu/p/10585901.html

你可能感兴趣的文章
采用缓存技术-让 ccflow工作流性能大幅度提高-降低用户的硬件成本
查看>>
apache mod_wsgi 模块不存在错误
查看>>
嵌入式工程师笔试面试题目
查看>>
Mysql主从配置和跳过事务
查看>>
多层Nginx转发需要注意的地方!
查看>>
AD从2003升级到2008
查看>>
java获取电脑mac地址注意事项
查看>>
Redis Sentinel机制与用法(一)
查看>>
我的友情链接
查看>>
用hadoop中的libhdfs和fuse-dfs构建快速云存储
查看>>
yii cgridview 动态生成列
查看>>
JavaScript 简介与实现
查看>>
介绍MyBatis代码生成网站(七) --- Html标签与Copy区
查看>>
对grub的总结
查看>>
RDLC直接打印帮助类
查看>>
Android 小技术点
查看>>
使用ADB“推送/提取/安装”文件进手机(华为U8825D)及错误举例
查看>>
专业绘图工具visio的相关基础优化(来源于李导教学)
查看>>
我的友情链接
查看>>
TClientDataSet[28]: 读写其他格式的 XML 文件
查看>>