基于javaweb+mysql的ssm+maven图书租赁管理系统(java+ssm+jsp+bootstrap+echarts+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM+Maven图书租赁管理系统(java+ssm+jsp+bootstrap+echarts+mysql)
图书租赁管理系统
项目介绍
图书租赁管理系统,该系统分为管理员与普通读者两种角色; 管理员主要功能包括: 图书管理:添加、修改、删除; 图书分类管理:添加、修改、删除; 借阅信息:还书; 预定信息:确认借书; 归还信息; 统计管理:借书/归还、营业额、销量; 普通读者主要功能包括:预定图书、待拿图书、借阅中、归还信息等;
客户端的充值,使用的支付宝沙箱测试化境
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 8.0版本; 7.lombok插件安装:本项目需要安装lombok插件,否则运行会有异常;
技术栈
- 后端:Spring SpringMVC MyBatis 2. 前端:JSP+bootstrap+jQuery+echarts
使用说明
-
使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行; 3. 将项目中db.properties配置文件中的数据库配置改为自己的配置;
-
运行项目,输入localhost:8080/bm/
Integer rId = borrowBook.getRId();
Reader reader = readerMapper.selectByPrimaryKey(rId);
if(reader == null){ //用户不存在
throw new LyException(ExceptionEnum.SERVICE_BUSY);
}
MailTemplate mailTemplate = null;
//实际借书天数(现在的时间-租借的时间)
int readyDay = DateUtils.differenceDay(new Date(),borrowBook.getBbTime());
//最大借书天数 = 应该还书的时间-租借的时间
int maxDay = DateUtils.differenceDay(borrowBook.getDueTime(),borrowBook.getBbTime());
//逾期天数 = 实际借书天数 - 最大借书天数
int overDay = readyDay - maxDay;
//用户是否逾期
if(overDay <=0 ){ //还未逾期
//查询未逾期模板
mailTemplate = templateMapper.selectByPrimaryKey(1);
borrowBook.setRemainingDays(maxDay-readyDay);
}else{
mailTemplate = templateMapper.selectByPrimaryKey(2);
borrowBook.setRemainingDays(overDay);
}
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
String url = basePath;
String aDocument = "<a href=\""+url+"\">"+url+"</a>";
//发送的邮箱内容
String emailMsg = mailTemplate.getTemplate()
.replace("{borrowBooksTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getBbTime()))
.replace("{dueTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getDueTime()))
.replace("{bookName}",borrowBook.getBName())
.replace("{userName}",borrowBook.getRName())
.replace("{remainingDay}",borrowBook.getRemainingDays()+"")
.replace("{systemUrl}",aDocument);
//发送邮箱提醒
try {
mailUtils.sendRemind(reader.getEmail(),emailMsg);
} catch (MessagingException e) { //发送邮箱还书提醒失败!
e.printStackTrace();
throw new LyException(ExceptionEnum.SEND_REMIND_FAIL);
}
}
}
String emailMsg = mailTemplate.getTemplate()
.replace("{borrowBooksTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getBbTime()))
.replace("{dueTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getDueTime()))
.replace("{bookName}",borrowBook.getBName())
.replace("{userName}",borrowBook.getRName())
.replace("{remainingDay}",borrowBook.getRemainingDays()+"")
.replace("{systemUrl}",aDocument);
//发送邮箱提醒
try {
mailUtils.sendRemind(reader.getEmail(),emailMsg);
} catch (MessagingException e) { //发送邮箱还书提醒失败!
e.printStackTrace();
throw new LyException(ExceptionEnum.SEND_REMIND_FAIL);
}
}
}
@RequestMapping("reader/reserveBorrow")
@RestController
public class RReserveBorrowBooksController {
@Autowired
private ReserveBorrowBooksService reserveBookService;
@Autowired
private BMSystemProperties bmProperties;
//分页查询 并可以带查询参数
@GetMapping("/{page}/{size}")
public ResponseEntity<Page<ReserveBorrowBooks>> borrowBookByPage(@PathVariable("page") Integer page,
@PathVariable("size") Integer size,
ReserveBorrowBooks reserveBorrowBooks,
HttpServletRequest request){
//获取当前用户
Reader reader = (Reader)request.getSession().getAttribute(bmProperties.getReaderSessionName());
reserveBorrowBooks.setRName(reader.getRName()); //根据当前用户查找
return ResponseEntity.ok(reserveBookService.reserveBookByPage(page,size, reserveBorrowBooks));
}
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
alipayRequest.setBizModel(model);
//获取当前用户信息
Reader reader = (Reader)request.getSession().getAttribute(bmProperties.getReaderSessionName());
//redis中存入 订单编号 , 用户id,支付状态
HashMap<String,String> map = new HashMap<>();
map.put("rId",reader.getRId()+"");
map.put("status","false");
jedis.hmset(orderNo,map);
//redis中支付订单失效时间
Integer time = (bmProperties.getZFBTimeoutExpressAddTime()+bmProperties.getOrderZFBTimeoutExpress())*60;
jedis.expire(orderNo,time);
//请求
try {
String result = alipayClient.pageExecute(alipayRequest).getBody();
//输出
response.getWriter().println(result);
} catch (Exception e) {
System.out.println("支付请求失败");
e.printStackTrace();
}
}
//同步通知
@Transactional(isolation = Isolation.READ_COMMITTED)
public void returnUrl(HttpServletRequest request) {
try{
//商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//获取订单信息
Map<String, String> map = jedis.hgetAll(out_trade_no);
if(!CollectionUtils.isEmpty(map)){ //order 未失效
if(map.get("status").equals("true")){ //订单已经支付
//根据rId查询用户信息
Reader reader = readerMapper.selectByPrimaryKey(Integer.parseInt(map.get("rId")));
//存入session
request.getSession().setAttribute(bmProperties.getReaderSessionName(),reader);
//redis中删除订单
jedis.expire(out_trade_no,-1);
}
}
//——请在这里编写您的程序(以上代码仅作参考)——
}catch (Exception e){
e.printStackTrace();
}
}
//异步通知
@Transactional
public void notify(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
//用户是否逾期
if(overDay <=0 ){ //还未逾期
//查询未逾期模板
mailTemplate = templateMapper.selectByPrimaryKey(1);
borrowBook.setRemainingDays(maxDay-readyDay);
}else{
mailTemplate = templateMapper.selectByPrimaryKey(2);
borrowBook.setRemainingDays(overDay);
}
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
String url = basePath;
String aDocument = "<a href=\""+url+"\">"+url+"</a>";
//发送的邮箱内容
String emailMsg = mailTemplate.getTemplate()
.replace("{borrowBooksTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getBbTime()))
.replace("{dueTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getDueTime()))
.replace("{bookName}",borrowBook.getBName())
.replace("{userName}",borrowBook.getRName())
.replace("{remainingDay}",borrowBook.getRemainingDays()+"")
.replace("{systemUrl}",aDocument);
//发送邮箱提醒
try {
mailUtils.sendRemind(reader.getEmail(),emailMsg);
} catch (MessagingException e) { //发送邮箱还书提醒失败!
e.printStackTrace();
throw new LyException(ExceptionEnum.SEND_REMIND_FAIL);
}
}
}
@RequestMapping("reader/reserveBorrow")
@RestController
public class RReserveBorrowBooksController {
@Service
@Slf4j
public class ReaderService {
@Autowired
private ReaderMapper readerMapper;
@Autowired
private Jedis jedis;
@Autowired
private BMSystemProperties bmProperties;
@Autowired
private MailUtils mailUtils;
//根据id查询读者信息
public Reader queryById(Integer rId) {
return readerMapper.selectByPrimaryKey(rId);
}
//判断账户名是否存在
public void accountNameExist(String accountName) {
if (!CollectionUtils.isEmpty(readerMapper.select(new Reader(accountName)))) { //账户名已存在
throw new LyException(ExceptionEnum.READER_ACCOUNT_NAME_EXIST);
}
}
ExceptionEnum em = ExceptionEnum.GREATER_THAN_MAX_BORROW_BOOKS_DAY;
em.setMsg(em.getMsg().replace("{maxBorrowBooksDay}",bmProperties.getMaxBorrowBooksDay()+""));
throw new LyException(em);
}
//根据id查询 预约图书表中的数据
ReserveBorrowBooks reserveBorrowBooks = reserveBookMapper.selectByPrimaryKey(rbbId);
if(reserveBorrowBooks == null){ //预定记录不存在,您的书籍已经成功领取!
log.error("预约图书表修改剩余天数,失败");
throw new LyException(ExceptionEnum.BOOK_GET_DOWN);
}
//查询图书是否存在
Books books = bookMapper.selectByPrimaryKey(reserveBorrowBooks.getBId());
if(books == null){
throw new LyException(ExceptionEnum.BOOK_INFO_LOSE);
}
//修改图书数据
if(remainingDays > 0){
reserveBorrowBooks.setRemainingDays(remainingDays);
//修改预约表中的数据
reserveBookMapper.updateByPrimaryKey(reserveBorrowBooks);
}
}
//读者 删除预定
@Transactional
public void deleteReserve(List<Integer> rbbIds) {
for (Integer rbbId : rbbIds) {
//根据id查询 预约图书表中的数据
ReserveBorrowBooks reserveBorrowBooks = reserveBookMapper.selectByPrimaryKey(rbbId);
if(reserveBorrowBooks == null){ //图书预定不存在,您的书籍已经成功领取!
log.error("删除预定失败!");
throw new LyException(ExceptionEnum.BOOK_GET_DOWN);
}
//查询图书信息
Books books = bookMapper.selectByPrimaryKey(reserveBorrowBooks.getBId());
if(books == null){ //判断是否存在
throw new LyException(ExceptionEnum.BOOK_INFO_LOSE);
}
//删除数据
reserveBookMapper.deleteByPrimaryKey(rbbId);
}
}
}
//修改一个图书分类
@PutMapping
public ResponseEntity<Void> modifyBookType(@RequestBody BookType bookType){
bookTypeService.modifyBookType(bookType);
return ResponseEntity.ok().build();
}
}
@RequestMapping("manager/reserveBorrow")
@RestController
public class MReserveBorrowBooksController {
@Autowired
private ReserveBorrowBooksService reserveBookService;
//分页查询 并可以带查询参数
@GetMapping("/{page}/{size}")
public ResponseEntity<Page<ReserveBorrowBooks>> borrowBookByPage(@PathVariable("page") Integer page,
@PathVariable("size") Integer size,
ReserveBorrowBooks reserveBorrowBooks){
return ResponseEntity.ok(reserveBookService.reserveBookByPage(page,size, reserveBorrowBooks));
}
//借书 一个
@PostMapping("/{resId}")
public ResponseEntity<Void> saveReserve(@PathVariable("resId") Integer resId){
reserveBookService.saveReserves(Arrays.asList(resId));
return ResponseEntity.status(HttpStatus.CREATED).build();
}
//借书 多个
@PostMapping
public ResponseEntity<Void> saveReserves(@RequestBody List<Integer> resIds){
reserveBookService.saveReserves(resIds);
readerMapper.insert(reader);
}
//发送邮箱验证码
public void verifyMailCode(String account, String email) {
//获取4位数的验证码
String verifyCode = new Random().nextInt(9999) + "";
//将验证码根据 account存入redis中
jedis.set(account, verifyCode);
//设置验证码有效期
jedis.expire(account, bmProperties.getEmailVerifyCodeMinute()*60);
//发送邮箱验证码
Integer validMinute = bmProperties.getEmailVerifyCodeMinute();
String emailMsg = bmProperties.getMailReaderRegisterContentModel();
emailMsg = emailMsg.replace("{emailVerifyCode}", verifyCode).replace("{emailVerifyCodeMinute}", validMinute + "");
try {
mailUtils.sendRegisterVerifyCode(email, emailMsg);
} catch (MessagingException e) {
e.printStackTrace(); //发送邮箱验证码失败
throw new LyException(ExceptionEnum.SEND_REGISTER_VERIFY_CODE_FAIL);
}
}
public void addBalance(Double money,HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
//商户订单号,商户网站订单系统中唯一订单号,必填
String orderNo = NumberUtils.getOrderNo();
model.setOutTradeNo(orderNo);
//订单名称,必填
model.setSubject("图书借阅系统充值");
//支付金额
model.setTotalAmount(money+"");
//超时关闭该订单时间
model.setTimeoutExpress(bmProperties.getOrderZFBTimeoutExpress()+"m");
model.setProductCode("FAST_INSTANT_TRADE_PAY");
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
alipayRequest.setBizModel(model);
//获取当前用户信息
Reader reader = (Reader)request.getSession().getAttribute(bmProperties.getReaderSessionName());
//redis中存入 订单编号 , 用户id,支付状态
throw new LyException(ExceptionEnum.READER_ACCOUNT_NAME_EXIST);
}
}
//用户注册
public void saveReader(Reader reader) {
//根据用户的账户名获取邮箱的验证码
String verifyCode = jedis.get(reader.getAccount());
if (StringUtils.isBlank(verifyCode)) { //验证码已失效,或邮箱地址错误!
throw new LyException(ExceptionEnum.VERIFY_EXPIRY_OR_EMAIL_ERROR);
}
if (!reader.getVerifyCode().equals(verifyCode)) { //邮箱验证码不匹配
throw new LyException(ExceptionEnum.VERIFY_CODE_NOT_MATCHING);
}
reader.builderReader();
readerMapper.insert(reader);
}
//发送邮箱验证码
public void verifyMailCode(String account, String email) {
//获取4位数的验证码
String verifyCode = new Random().nextInt(9999) + "";
//将验证码根据 account存入redis中
jedis.set(account, verifyCode);
//设置验证码有效期
jedis.expire(account, bmProperties.getEmailVerifyCodeMinute()*60);
//发送邮箱验证码
Integer validMinute = bmProperties.getEmailVerifyCodeMinute();
String emailMsg = bmProperties.getMailReaderRegisterContentModel();
emailMsg = emailMsg.replace("{emailVerifyCode}", verifyCode).replace("{emailVerifyCodeMinute}", validMinute + "");
try {
mailUtils.sendRegisterVerifyCode(email, emailMsg);
} catch (MessagingException e) {
e.printStackTrace(); //发送邮箱验证码失败
throw new LyException(ExceptionEnum.SEND_REGISTER_VERIFY_CODE_FAIL);
}
}
public void addBalance(Double money,HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
* 设置Cookie的值,并使其在指定时间内生效
*
* @param cookieMaxage
* cookie生效的最大秒数
*/
private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode,String path) {
try {
if (cookieValue == null) {
cookieValue = "";
} else if (isEncode) {
cookieValue = URLEncoder.encode(cookieValue, "utf-8");
}
Cookie cookie = new Cookie(cookieName, cookieValue);
if (cookieMaxage > 0)
cookie.setMaxAge(cookieMaxage);
if (null != request)// 设置域名的cookie
cookie.setDomain(getDomainName(request));
cookie.setPath(path);
response.addCookie(cookie);
} catch (Exception e) {
logger.error("Cookie Encode Error.", e);
}
}
/**
* 设置Cookie的值,并使其在指定时间内生效
*
* @param cookieMaxage
* cookie生效的最大秒数
*/
private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, String encodeString,String path) {
try {
if (cookieValue == null) {
cookieValue = "";
} else {
cookieValue = URLEncoder.encode(cookieValue, encodeString);
}
Cookie cookie = new Cookie(cookieName, cookieValue);
if (cookieMaxage > 0)
cookie.setMaxAge(cookieMaxage);
if (null != request)// 设置域名的cookie
cookie.setDomain(getDomainName(request));
cookie.setPath(path);
response.addCookie(cookie);
//读者 预定图书
@PostMapping("/{bId}/{RentDay}")
public ResponseEntity<Integer> reserveBooks(@PathVariable("bId") Integer bId,
@PathVariable("RentDay") Integer rentDay,
HttpSession session){
return ResponseEntity.ok().body(reserveBookService.reserveBook(bId, rentDay, session));
}
}
@RequestMapping("/manager/books")
@RestController()
public class MBookController {
@Autowired
private BookService bookService;
//分页获取图书信息 并可查找
@GetMapping(value = "/{page}/{size}")
public ResponseEntity<Page<Books>> booksList(@PathVariable("page") Integer page,
@PathVariable("size") Integer size,
Books book){
return ResponseEntity.ok(bookService.getBookList(page,size,book));
}
//添加图书
@PostMapping
public ResponseEntity<Void> addBook(@RequestBody Books books){
bookService.addBook(books);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
serverName = serverName.substring(0, end);
final String[] domains = serverName.split("\\.");
int len = domains.length;
if (len > 3) {
// www.xxx.com.cn
domainName = domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
} else if (len <= 3 && len > 1) {
// xxx.com or xxx.cn
domainName = domains[len - 2] + "." + domains[len - 1];
} else {
domainName = serverName;
}
}
if (domainName != null && domainName.indexOf(":") > 0) {
String[] ary = domainName.split("\\:");
domainName = ary[0];
}
return domainName;
}
}
@Service
public class LoginService {
public ResponseEntity<Void> addBookType(@PathVariable("tName") String tName){
bookTypeService.addBookType(tName);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
//删除多个图书分类
@DeleteMapping
public ResponseEntity<Void> deleteBookTypes(@RequestBody List<Integer> ids ){
bookTypeService.deleteBookTypes(ids);
return ResponseEntity.ok().build();
}
//删除一个图书分类
@DeleteMapping("/{btId}")
public ResponseEntity<Void> deleteBookType(@PathVariable("btId") Integer btId ){
bookTypeService.deleteBookTypes(Arrays.asList(btId));
return ResponseEntity.ok().build();
}
//修改一个图书分类
@PutMapping
public ResponseEntity<Void> modifyBookType(@RequestBody BookType bookType){
bookTypeService.modifyBookType(bookType);
return ResponseEntity.ok().build();
}
}
@RequestMapping("manager/reserveBorrow")
@RestController
public class MReserveBorrowBooksController {
@Autowired
private ReserveBorrowBooksService reserveBookService;
//分页查询 并可以带查询参数
@GetMapping("/{page}/{size}")
/**
* 根据id修改邮箱模板
* @param id
* @param template
* @return
*/
@PutMapping("/mailTemplate/{id}")
public ResponseEntity<Void> modifyMailTemplate(@PathVariable("id") Integer id,
@RequestBody String template){
templateService.modifyMailTemplate(id,template);
return ResponseEntity.ok().build();
}
/**
* 根据id修改默认邮箱模板
* @param id
* @param defaultTemplate
* @return
*/
@PutMapping("/mailTemplate/default/{id}")
public ResponseEntity<Void> modifyMailDefaultTemplate(@PathVariable("id") Integer id,
@RequestBody String defaultTemplate){
templateService.modifyMailDefaultTemplate(id,defaultTemplate);
return ResponseEntity.ok().build();
}
//提醒还书
@PostMapping("/remind/{bbId}")
public ResponseEntity<Void> remind(@PathVariable("bbId") Integer bbId){
templateService.remind(bbId);
return ResponseEntity.ok().build();
}
}
public void remind(Integer bbId) {
//查询借阅记录是否还存在
BorrowBooks borrowBook = borrowBookMapper.queryBorrowBookByBbId(bbId);
if(borrowBook == null){ //该图书已被归还
throw new LyException(ExceptionEnum.BORROW_BOOKS_IS_RETURN);
}
//获取用户的id查询用户的邮箱
Integer rId = borrowBook.getRId();
Reader reader = readerMapper.selectByPrimaryKey(rId);
if(reader == null){ //用户不存在
throw new LyException(ExceptionEnum.SERVICE_BUSY);
}
MailTemplate mailTemplate = null;
//实际借书天数(现在的时间-租借的时间)
int readyDay = DateUtils.differenceDay(new Date(),borrowBook.getBbTime());
//最大借书天数 = 应该还书的时间-租借的时间
int maxDay = DateUtils.differenceDay(borrowBook.getDueTime(),borrowBook.getBbTime());
//逾期天数 = 实际借书天数 - 最大借书天数
int overDay = readyDay - maxDay;
//用户是否逾期
if(overDay <=0 ){ //还未逾期
//查询未逾期模板
mailTemplate = templateMapper.selectByPrimaryKey(1);
borrowBook.setRemainingDays(maxDay-readyDay);
}else{
mailTemplate = templateMapper.selectByPrimaryKey(2);
borrowBook.setRemainingDays(overDay);
}
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
String url = basePath;
String aDocument = "<a href=\""+url+"\">"+url+"</a>";
//发送的邮箱内容
String emailMsg = mailTemplate.getTemplate()
.replace("{borrowBooksTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getBbTime()))
.replace("{dueTime}",DateUtils.dateFormat("yyyy年MM月dd日",borrowBook.getDueTime()))
.replace("{bookName}",borrowBook.getBName())
.replace("{userName}",borrowBook.getRName())
.replace("{remainingDay}",borrowBook.getRemainingDays()+"")
@Service
@Slf4j
public class ReserveBorrowBooksService {
@Autowired
private ReserveBorrowBookMapper reserveBookMapper;
@Autowired
private BorrowBookMapper borrowBookMapper;
@Autowired
private BookMapper bookMapper;
@Autowired
private BMSystemProperties bmProperties;
@Autowired
private ReaderMapper readerMapper;
public Page<ReserveBorrowBooks> reserveBookByPage(Integer page, Integer size,
ReserveBorrowBooks reserveBorrowBook) {
boolean search = false;
if(!StringUtils.isEmpty(reserveBorrowBook.getBName()) ||
!StringUtils.isEmpty(reserveBorrowBook.getNumber()) ||
!StringUtils.isEmpty(reserveBorrowBook.getRName()) ) {
search = true;
}
//支付同步通知
@RequestMapping("/returnUrl")
public String returnUrl(HttpServletRequest request,HttpServletResponse response){
readerService.returnUrl(request);
return "redirect:/pages/reader/bookDatalist.jsp";
}
//支付异步通知
@PostMapping("/notify")
public void notify(HttpServletRequest request,HttpServletResponse response){
readerService.notify(request,response);
}
@GetMapping("/refreshMoney")
public ResponseEntity<Double> refreshMoney(HttpServletRequest request){
return ResponseEntity.ok(readerService.refreshMoney(request));
}
}
public class ManagerLoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
System.out.println("ManagerLoginInterceptor");
// 判断session
HttpSession session = request.getSession();
// 从session中取出用户身份信息
Manager managerInfo = (Manager)session.getAttribute("managerInfo");
// session存在时,放行
if (managerInfo!=null) {
return true;
}
// 执行这里表示用户身份需要认证,跳转登陆页面
response.sendRedirect("/pages/login.jsp");
@RequestMapping("/login")
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
//用户登录
@PostMapping
@ResponseBody
public String login(@RequestBody LoginVo loginVo, HttpServletResponse response,
HttpServletRequest request){
String url = loginService.login(loginVo,response,request);
return url;
}
//读者自动登录
@GetMapping("/autoLogin")
public String autoLoginReader(HttpServletResponse response,HttpServletRequest request){
Boolean flag = loginService.autoLoginReader(response, request);
String url = "";
if(flag){ //登录成功
url = "/pages/reader/bookDatalist.jsp";
}else{ //登陆失败
url = "/pages/login.jsp";
}
return "redirect:"+ url;
}
}
@RequestMapping("manager/giveBack")
@RestController
public class MGiveBackBookController {
@Autowired