@Override public void saveRecord(SaleRecord record) { // 遍历判断书的库存是否不够 for (BookSaleRecord r : record.getBookSaleRecords()) { String bookId = r.getBook().getID(); Book b = bookDao.find(bookId); // 当存库不够时,抛出异常 if (Integer.valueOf(r.getTRADE_SUM()) > Integer.valueOf(b.getREPERTORY_SIZE())) { throw new BusinessException(b.getBOOK_NAME() + " 的库存不够"); } } // 先保存交易记录 String id = saleRecordDao.save(record); // 再保存书的交易记录 for (BookSaleRecord r : record.getBookSaleRecords()) { // 设置销售记录id r.setT_SALE_RECORD_ID_FK(id); bookSaleRecordDao.saveBookSaleRecord(r); // 修改书的库存 String bookId = r.getBook().getID(); Book b = bookDao.find(bookId); // 计算剩余的库存 int leave = Integer.valueOf(b.getREPERTORY_SIZE()) - Integer.valueOf(r.getTRADE_SUM()); // 设置库存并将库存数保存到数据库 b.setREPERTORY_SIZE(String.valueOf(leave)); bookDao.updateRepertory(b); } }
// 处理一个SaleRecord, 设置它的书本销售记录属性和书本名字属性 private SaleRecord processDatas(SaleRecord r) { // 查找该记录所对应的书的销售记录 Collection<BookSaleRecord> brs = bookSaleRecordDao.findBySaleRecord(r.getID()); // 设置结果集中的每一个book属性 setBook(brs); // 设置SaleRecord对象中的书的销售记录集合 r.setBookSaleRecords((Vector<BookSaleRecord>) brs); // 设置SaleRecord的书名集合 r.setBookNames(getBookNames(brs)); // 设置数量与总价 r.setAmount(getAmount(brs)); r.setTotalPrice(getTotalPrice(brs)); return r; }