学习笔记
新建表
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; ListlistItem(); 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 ListlistItem() { 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); }}
源码: