package org.app
package service
import models.{BookModel, BorrowRecordModel}
import org.app.dao.{BookDAO, BorrowRecordDAO}
import java.time.LocalDateTime
import scala.collection.mutable.ListBuffer
// 图书业务逻辑层
class BookService {
private val bookDAO = new BookDAO()
private val borrowRecordDAO = new BorrowRecordDAO()
// 查询所有的图书
// def searchBooks(query:String): 图书列表List(Book对象)
def searchBooks(query:String):ListBuffer[BookModel] = {
// 从文本文件中读取书本信息,并保存列表中,返回
val books = bookDAO.loadBooks()
query match {
case "" => books // 没有条件,就返回全部
case _ => books.filter(b => b.name.contains(query) || b.author.contains(query)) // 有条件,就过滤
}
}
// 普通用户,借阅图书
def borrowBook(username:String, bookId:Int):Boolean = {
// (1)根据图书的ID,查询图书,判断图书是否存在
val books = bookDAO.loadBooks()
// 所有的借阅记录
val records = borrowRecordDAO.loadBorrowRecords()
val book = books.find(b => b.id == bookId)
if(book.nonEmpty){
val b = book.get
// (2)判断图书是否已经被借出
if(b.available){
// (3)借阅图书 更新这本书的状态
b.available = false
// 把更新之后的图书的信息写回txt文件
bookDAO.saveBooks(books)
// 添加一条借阅记录
records += BorrowRecordModel(username, b.id,b.name, LocalDateTime.now().toString)
// 写借阅记录回文件
borrowRecordDAO.saveBorrowRecords(records)
println("借阅成功,已保存借阅记录!")
true
} else {
println("这本书被借走了")
false
}
} else {
println("没有找到这本书")
false
}
}
//普通用户,查询自己的借阅记录
def queryBorrowedBooks(username: String):ListBuffer[BorrowRecordModel] = {
// 1.把所有的记录全读出来
val records = borrowRecordDAO.loadBorrowRecords()
// 2.过滤出当前用户的借阅记录
records.filter(r => r.userName == username)
}
// 普通用户.归还自己借的某一本书
def returnBook(username: String, bookId: Int): Boolean = {
// 1.确定这本书是他本人借的并处于没有归还的状态
queryBorrowedBooks(username).find(r => r.bookID == bookId && r.returnDate.isEmpty) match {
case Some(record) =>
// 2.更新书的状态
// 2.1 加载全部的书
val books = bookDAO.loadBooks()
// 2.2 选择当前这本书
val b = books.find(_.id == bookId).get
b.available = true
// 2.3 把更新之后的状态写回.txt文件
bookDAO.saveBooks(books)
// 3.更新借阅记录的状态
// 3.1 加载全部的借阅记录
val records = borrowRecordDAO.loadBorrowRecords()
// 3.2 找到当前这本书的借阅记录 bookID,userName,returnDate = None
val r = records.find(r => r.bookID == bookId && r.userName == username && r.returnDate.isEmpty).get
r.returnDate = Some(LocalDateTime.now().toString)
// 3.3 把更新之后的状态写回.txt文件
borrowRecordDAO.saveBorrowRecords(records)
true
case None => false
}
}
// 添加图书
def addBook(book: BookModel): Unit = {
// 1. 生成一个book ID
// 查询所有图书. 找到最大的ID,+1
var id = 1
val books = bookDAO.loadBooks()
if (books.nonEmpty) {
id = books.map(_.id).max + 1
}
// 2. 更新ID
val newBook = book.copy(id = id)
// 3. 把新的图书添加到books
books += newBook
// 4.写回到.txt中
bookDAO.saveBooks(books)
}
}