11-图书归还
1-实现查询归还信息功能
-
在
RecordDao.java
添加此方法public int modify(double deposit, long userId, long id) throws SQLException { Connection conn = DBHelper.getConnection(); String sql = "update record set backDate = CURRENT_DATE, deposit = ?, userId = ? where id = ?"; int count = runner.update(conn, sql, deposit, userId, id); DBHelper.close(conn); return count; }
-
修改
RecordBiz.java
文件的getRecordsByMemberId
方法public List<Record> getRecordsByMemberId(long memberId) { List<Record> records = null; try { records = recordDao.getRecordsByMemberId(memberId); Member member = memberBiz.getById(memberId); for (Record record: records) { long bookId = record.getBookId(); Book book = bookDao.getById(bookId); record.setBook(book); record.setMember(member); long day = member.getType().getKeepDay(); java.sql.Date rentDate = record.getRentDate(); java.sql.Date backDate = DateHelper.getNewDate(rentDate, day); record.setBackDate(backDate); } } catch (SQLException e) { e.printStackTrace(); } return records; }
-
在
RecordServlet
的switch添加如下代码case "queryback": String idn = req.getParameter("idn"); Member member = memberBiz.getByIdNumber(idn); List<Record> records = recordBiz.getRecordsByMemberId(member.getId()); req.setAttribute("member",member); req.setAttribute("records", records); req.getRequestDispatcher("return_list.jsp").forward(req, resp); break;
-
把
return_list.html
文件转换成return_list.jsp
文件 -
修改
return_list.jsp
文件下面显示的代码<%@ page import="com.wang.book.bean.Record" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <script src="Js/jquery-3.3.1.min.js"></script> <script> $(function() { $("#btnQuery").click(function() { var idn = $("#idNumber").val(); location.href = "record.let?type=queryback&idn=" + idn; }) $("#ckAll").click(function() { $(".ck").prop("checked", $(this).prop("checked")); }) $("#btnReturn").click(function() { if (!$("#memberId").val()) { alert("请输入会员信息"); return; } var idList = new Array(); $(".ck").each(function() { if ($(this).prop("checked")) { idList.push($(this).val()); } }) if (idList.length == 0) { alert("请选择需要归还的书籍信息"); return; } var idStr = idList.join("_"); var path = "record.let?type=back&mid=" + $("#memberId").val() + "&ids=" + idStr; location.href = path; }) }) </script> <fieldset> <legend>查询会员</legend> <c:if test="${member==null}"> <table width="100%" class="cont" > <tr> <td width="8%" class="run-right"> 会员编号</td> <td colspan="7"><input class="text" type="text" id="idNumber"/> <input type="button" id="btnQuery" value="确定" style="width: 80px;"/> <input type="button" id="btnReturn" value="批量归还" style="width: 80px;"/> </td> </tr> <tr> <td width="8%" class="run-right">会员名称</td> <td width="17%"><input class="text" type="text" disabled/> <input type="hidden" id="memberId" value=""> </td> <td width="8%" class="run-right">会员类型:</td> <td width="17%"><input class="text" type="text" disabled /></td> <td width="8%" class="run-right">可借数量</td> <td width="17%"><input class="text" type="text" disabled /></td> <td width="8%" class="run-right">账户余额</td> <td width="17%"><input class="text" type="text" disabled /></td> </tr> </table> </c:if> <c:if test="${member!=null}"> <table width="100%" class="cont" > <tr> <td width="8%" class="run-right"> 会员编号</td> <td colspan="7"><input class="text" type="text" id="idNumber" value="${member.idNumber}"/> <input type="button" id="btnQuery" value="确定" disabled style="width: 80px;"/> <input type="button" id="btnReturn" value="批量归还" style="width: 80px;"/> </td> </tr> <tr> <td width="8%" class="run-right">会员名称</td> <td width="17%"><input class="text" type="text" name="memberId" value="${member.name}" disabled/> <input type="hidden" id="memberId" value="${member.id}"> </td> <td width="8%" class="run-right">会员类型:</td> <td width="17%"><input class="text" type="text" name="memberId" value="${member.type.name}" disabled /></td> <td width="8%" class="run-right">可借数量</td> <% List<Record> records = (List<Record>) request.getAttribute("records"); %> <td width="17%"><input class="text" type="text" name="memberId" value="<%=records.size()%>" disabled /></td> <td width="8%" class="run-right">账户余额</td> <td width="17%"><input class="text" type="text" name="memberId" value="${member.balance}" disabled /></td> </tr> </table> </c:if> </fieldset> <form action="" method=""> <table width="100%" class="cont tr_color"> <tr> <th><input id="ckAll" type="checkbox" value="" checkbox id="ckAll" />全选/全不选</th> <th>书籍名</th> <th>借阅时间</th> <th>应还时间</th> <th>出版社</th> <th>书架</th> <th>押金(元)</th> <th>操作</th> </tr> <c:if test="${records == null}" > <tr align="center" class="d"> <td colspan="8" align="center"><h2>暂无数据展示</h2></td> </tr> </c:if> <c:if test="${records != null}" > <c:forEach items="${records}" var="r"> <% Record record = (Record)pageContext.getAttribute("r"); java.sql.Date date = new java.sql.Date(System.currentTimeMillis()); if (record.getBackDate().before(date)) { %> <tr align="center" class="d" style="background-color: #f08080"> <td><input type="checkbox" value="${r.id}" class="ck" checked /></td> <td>${r.book.name}</td> <td>${r.rentDate}</td> <td>${r.backDate}</td> <td>${r.book.publish}</td> <td>${r.book.address}</td> <td>${r.deposit}</td> <td><a href="record.let?type=keep&id=${r.id}">续借</a></td> </tr> <% } else { %> <tr align="center" class="d"> <td><input type="checkbox" value="${r.id}" class="ck" checked /></td> <td>${r.book.name}</td> <td>${r.rentDate}</td> <td>${r.backDate}</td> <td>${r.book.publish}</td> <td>${r.book.address}</td> <td>${r.deposit}</td> <td><a href="record.let?type=keep&id=${r.id}">续借</a></td> </tr> <% } %> </c:forEach> </c:if> </table> </form>
2-实现批量归还功能
-
在
RecordServlet
的switch添加如下代码case "back": long memberId2 = Long.parseLong(req.getParameter("mid")); String idStr = req.getParameter("ids"); String []idStrs = idStr.split("_"); List<Long> recordIds = new ArrayList<Long>(); for (String s: idStrs) { recordIds.add(Long.parseLong(s)); } long userId2 = user.getId(); int count2 = recordBiz.modify(memberId2, recordIds, userId2); if (count2 > 0) { out.println("<script>alert('归还成功');location.href='main.jsp';</script>"); } else { out.println("<script>alert('归还失败');location.href='main.jsp';</script>"); } break;
-
在
RecordBiz.java
类中添加如下方法。public int modify(long memberId, List<Long> recordIds, long userId) { try { DBHelper.beginTransaction(); double total = 0; Member member = memberBiz.getById(memberId); for (long recordId: recordIds) { Record record = recordDao.getById(recordId); java.sql.Date backDate = DateHelper.getNewDate(record.getRentDate(), member.getType().getKeepDay()); java.util.Date currentDate = new java.util.Date(); int day = 0; if (currentDate.after(backDate)) { day = DateHelper.getSpan(currentDate, backDate); } total += record.getDeposit() - day; recordDao.modify(day, userId, recordId); bookDao.modify(record.getBookId(), 1); } memberDao.modifyBalance(memberId, total); DBHelper.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); try { DBHelper.rollbackTransaction(); } catch (SQLException ex) { ex.printStackTrace(); } return 0; } return 1; }
-
在
RecordDao.java
类中添加如下方法。public Record getById(long recordId) throws SQLException { Connection conn = DBHelper.getConnection(); String sql = "select * from record where id = ?"; Record record = runner.query(conn, sql, new BeanHandler<Record>(Record.class), recordId); DBHelper.close(conn); return record; }
-
在
util
包下的DateHelper.java
添加如下方法。public static int getSpan(Date date01, Date date02) { long span = date01.getTime() - date02.getTime(); int day = (int) (span/1000/60/60/24); return Math.abs(day); }
3-实现续借功能
-
在
RecordServlet
的switch添加如下代码case "keep": long recordId = Long.parseLong(req.getParameter("id")); int count3 = recordBiz.modify(recordId); if (count3 > 0) { out.println("<script>alert('续借成功');location.href='main.jsp';</script>"); } else { out.println("<script>alert('续借失败');location.href='main.jsp';</script>"); } break;
-
在
RecordBiz.java
类中添加如下方法。public int modify(long id) { int count = 0; try { count = recordDao.modify(id); } catch (SQLException e) { e.printStackTrace(); } return count; }
-
在
RecordDao.java
类中添加如下方法。public int modify(long id) throws SQLException { Connection conn = DBHelper.getConnection(); String sql = "update record set backDate = CURRENT_DATE where id = ?"; int count = runner.update(conn, sql, id); DBHelper.close(conn); return count; }
12-历史查询
1-历史查询Dao层
-
在
RecordDao.java
类中添加如下方法。public List<Map<String, Object>> query(int typeId, String keyWord) throws SQLException { Connection conn = DBHelper.getConnection(); StringBuilder sb = new StringBuilder("select * from recordView where 1 = 1 "); switch (typeId) { case 0: break; case 1: sb.append("and backDate is not null"); break; case 2: sb.append("and backDate is null"); break; case 3: sb.append("and backDate is null and returnDate < date_add(CURRENT_DATE, interval 7 DAY) "); break; } if (keyWord != null) { sb.append(" and bookName like '%" + keyWord + "%' or memberName like '%" + keyWord + "%' or concat(rentDate, '') like '%" + keyWord + "%'"); } List<Map<String, Object>> data = runner.query(conn, sb.toString(), new MapListHandler()); DBHelper.close(conn); return data; }
2-历史查询Server层
-
在
RecordBiz.java
类中添加如下方法。public List<Map<String, Object>> query(int typeId, String keyword) { List<Map<String, Object>> rows = null; try { rows = recordDao.query(typeId, keyword); } catch (SQLException e) { e.printStackTrace(); } return rows; }
3-历史查询Servlet层
-
在
RecordServlet
的switch添加如下代码case "doajax": int typeId = Integer.parseInt(req.getParameter("typeId")); String keyword = req.getParameter("keyword"); keyword = keyword.isEmpty() ? null : keyword; List<Map<String, Object>> rows = recordBiz.query(typeId, keyword); out.print(JSON.toJSONString(rows)); break;
4-历史查询界面实现
-
把
rent_list.html
文件转换成rent_list.jsp
文件 -
修改
rent_list.jsp
文件下面显示的代码<script src="Js/jquery-3.3.1.min.js" ></script> <script> $(function() { $("#btnQuery").click(function() { $("#tbRecord").find("tbody").html(""); var typeId = $(":radio:checked").prop("value"); var keyword = $("#keyword").val(); var url = "record.let?type=doajax&typeId=" + typeId + "&keyword=" + keyword; $.get(url, function(data) { console.log(data); if (data === "[]") { alert("没有信息展示"); return; } var records = JSON.parse(data); for (var i = 0; i < records.length; i++) { var record = records[i]; var tr = $("<tr align='center' class='d'>"); var tdMName = $("<td>" + record.memberName + "</td>"); var tdBName = $("<td>" + record.bookName + "</td>"); var tdRentDate = $("<td>" + record.rentDate + "</td>"); var tdBackDate = $("<td>" + (record.backDate === undefined ? "" : record.backDate) + "</td>"); var tdDeposit = $("<td>" + record.deposit + "</td>"); tr.append(tdMName); tr.append(tdBName); tr.append(tdRentDate); tr.append(tdBackDate); tr.append(tdDeposit); $("#tbRecord").find("tbody").append(tr); } }) }) }) </script> <form action="" method=""> <table width="100%" class="cont tr_color" id="tbRecord"> <thead> <tr> <th>会员名称</th> <th>书籍名称</th> <th>借阅时间</th> <th>归还时间</th> <th>押金(元)</th> </tr> </thead> <tbody></tbody> </table> </form>