★学习目标:
1、掌握云借阅系统的当前借阅
★思考任务:
1、当前借阅有那些功能?
★任务学习:
★知识要点:
1、查询图书
当前借阅模块的图书查询和图书借阅模块中的图书查询类似,可以按条件查询图书,如果不输入查询条件,就查询全部图书。对查询结果也进行分页显示。
step 1: 实现DAO层:由于普通用户和管理员用户查询出的当前借阅的图书信息并不相同,所以可以定义2个不同的方法来供Service层调用。在BookMapper接口中新增2个方法selectMyBorrowed()和selectBorrowed(),selectMyBorrowed()方法用于查询当前用户未归还的图书信息,selectBorrowed()方法用于查询当前用户未归还和所有待确认归还的图书信息。
step 2:实现Service层:在BookService接口中添加一个查询当前借阅图书的方法searchBorrowed(),具体代码如下所示。
// 查询当前借阅的图书
PageResult searchBorrowed(
Book book,
User user,
Integer pageNum,
Integer pageSize);
step 3:BookServiceImpl类中重写BookService接口的searchBorrowed()方法,
public PageResult searchBorrowed(Book book, User user, Integer pageNum,
Integer pageSize) {
PageHelper.startPage(pageNum, pageSize); // 设置分页查询的参数,开始分页
Page<Book> page;
book.setBorrower(user.getName()); //将当前登录的用户放入查询条件中
//如果是管理员,查询当前用户借阅但未归还的图书和所有待确认归还的图书
if("ADMIN".equals(user.getRole())) {
page= bookMapper.selectBorrowed(book);
} else {//如果是普通用户,查询当前用户借阅但未归还的图书
page= bookMapper.selectMyBorrowed(book); }
return new PageResult(page.getTotal(),page.getResult()); }
step 4:实现Controller:在BookController.java文件的BookController类中新增一个查询当前借阅图书的方法searchBorrowed()。(这个查询当前借阅图书的方法省略)
step 5:实现页面效果:在后台首页main.jsp的导航侧栏中,配置“当前借阅”超链接的目标路径。配置代码如下所示。
<li>
<a href="${pageContext.request.contextPath}/book/searchBorrowed"
target="iframe">
<i class="fa fa-circle-o"></i>当前借阅
</a>
</li>
step 6:启动项目,使用管理员账号登录系统,单击导航侧栏中的“当前借阅”超链接,页面显示效果如图所示。

2、归还图书
在归还图书时,需要由借阅者先在系统中提交归还图书的申请,然后将图书归还到指定还书点,管理员确认图书归还后,图书才真正归还成功。
当用户申请归还图书时,只需在当前借阅的图书列表中,单击右侧的“归还”按钮选择归还图书即可,申请归还后,图书的状态由借阅中变为归还中。
step 1:实现DAO层:提交归还图书的申请,只是修改图书的借阅状态,因此复用BookMapper接口的editBook()方法即可。 (这个复用editBook()编辑图书信息的方法省略)
step 2:实现Service层:在BookService接口中添加一个归还图书的方法returnBook(),具体代码如下所示。
boolean returnBook(
String id,
User user
);
step 3:在BookServiceImpl类中重写BookService接口的returnBook()方法,具体代码如下所示。
public boolean returnBook(String id,User user) {
// 根据图书id查询出图书的完整信息
Book book = this.findById(id);
// 再次核验当前登录人员和图书借阅者是不是同一个人
boolean rb=book.getBorrower().equals(user.getName());
// 如果是同一个人,允许归还
if(rb) {
// 将图书借阅状态修改为归还中
book.setStatus("2");
bookMapper.editBook(book);
} return rb; }
step 4:实现Controller:在BookController类中新增一个归还图书的方法returnBook(),新增的代码如下所示。
@ResponseBody
@RequestMapping("/returnBook")
public Result returnBook(String id, HttpSession session) {
// 获取当前登录的用户信息
User user = (User) session.getAttribute("USER_SESSION");
try { boolean flag = bookService.returnBook(id, user);
if (!flag) { return new Result(false, "还书失败!"); }
return new Result(true, "还书确认中,请先到行政中心还书!");
} catch (Exception e) {e.printStackTrace();
return new Result(false, "还书失败!");
}}
step 5:实现页面效果:当前借阅图书列表中的“归还”按钮绑定了鼠标单击事件,当事件触发时,会执行文件my.js中的returnBook()方法。returnBook()方法将归还的图书id作为参数向映射路径为“/book/returnBook”的控制器发送异步请求,并将请求结果的信息展示在页面中,显示当前借阅列表最新的信息。book_borrowed.jsp页面中“归还”按钮的代码如下所示。
<c:if test="${book.status ==1}">
<button type="button" class="btn bg-olive btn-xs"
onclick ="returnBook(${book.id})">归还
</button>
</c:if>
step 6:启动项目,使用普通用户账号登录系统,单击后台首页导航侧栏中的“当前借阅”超链接,页面显示效果如图所示。

3、确认归还
用户在申请图书归还后,需要由图书管理员进行归还确认。
step 1:实现DAO层:归还确认的操作,只是将图书的借阅信息进行清除,所以复用BookMapper接口的editBook()方法即可。(这个复用editBook()编辑图书信息的方法省略)
step 2:实现Service层:在BookService接口中添加一个归还图书的方法returnConfirm(),具体代码如下所示。
Integer returnConfirm(
String id
);
step 3:在BookServiceImpl类中重写BookService接口的returnConfirm()方法,具体代码如下所示。
public Integer returnConfirm(String id) {
// 根据图书id查询图书的完整信息
Book book = this.findById(id);
// 将图书的借阅状态修改为可借阅
book.setStatus("0");
book.setBorrower(""); // 清除当前图书的借阅人信息
book.setBorrowTime(""); // 清除当前图书的借阅时间信息
// 清除当前图书的预计归还时间信息
book.setReturnTime("");
return bookMapper.editBook(book);
}
step 4:实现Controller:在BookController类中新增一个图书归还确认的方法returnConfirm(),新增的代码如下所示。
@ResponseBody
@RequestMapping("/returnConfirm")
public Result returnConfirm(String id) {
try {
Integer count=bookService.returnConfirm(id);
if(count!=1) { return new Result(false, "确认失败!"); }
return new Result(true, "确认成功!");
} catch (Exception e) {
e.printStackTrace();
return new Result(false, "确认失败!");
}}
step 5:实现页面效果:当前借阅数据列表中的“归还确认”按钮绑定了鼠标单击事件,当事件触发时,会执行文件my.js中的returnConfirm()方法。returnConfirm()方法将待归还确认的图书id作为参数向映射路径为“/book/returnConfirm”的控制器发送异步请求,并将请求结果的信息展示在页面中,显示最新的当前借阅列表信息。book_borrowed.jsp页面中“归还确认”按钮的代码如下所示。
<c:if test="${USER_SESSION.role =='ADMIN'}">
<button type="button" class="btn bg-olive btn-xs"
onclick ="returnConfirm(${book.id})"> 归还确认
</button>
</c:if>
step 6:


