# charity_book **Repository Path**: Deep_feel/charity_book ## Basic Information - **Project Name**: charity_book - **Description**: 慈善图书系统 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2018-04-05 - **Last Updated**: 2021-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 慈善图书借阅平台 ## 系统摘要 本平台适用于小局部范围的图书借阅、管理以及用户之间的共享。 平台实现了包括PC端、移动端、微信公众号多平台提供浏览使用, 平台有效地展示各种分类图书以及流行图书, 读者能够快速检索到想要的图书,再结合线下书库管理员, 打通线上借书到线下定点取书的流程环节。 ## 功能描述 平台的功能模块主要分为用户模块和管理员模块: * 用户模块主要功能有: 1. 基于邮箱、微信的登录注册,邮箱找回密码、修改密码 2. 修改个人信息、账号昵称、头像的更改 3. 图书的条件查询、借阅数量和上架时间排序、对图书进行评论、对评论回复和点赞 4. 收藏图书,未登录时收藏会保存到本地浏览器上,登录后收藏的图书会跟随用户的账号 5. 用户实名认证、缴纳押金、图书共享 6. 发布书愿墙、点赞书愿(如用户想要借阅的图书在书库中没有,可在书愿墙上表达自己的需求,平台鼓励其他用户进行共享或者平台有购书计划会优先考虑该书) 7. 通过共享图书获取不同级别的爱心会员称号,进入共享排行榜,拥有更大的借书权限(数量/时长) * 管理员模块主要功能有: 1. 用户管理、用户实名认证审批、用户禁言 2. 图书管理 3. 添加借阅记录、查看借阅记录列表、借阅审批、借阅归还结果处理 4. 评论管理 5. 书愿墙管理 6. 慈善活动管理 7. 首页轮播管理 8. 系统工具功能包括:数据库监控、静态化首页模块:轮播静态化、慈善活动静态化、共享排行静态化、借阅排行静态化以及生成微信公众菜单 ## 平台技术栈 后端:Spring boot 1.5.2、Shiro、Druid、Redis、Fastjson、Swagger、Kaptcha、腾讯云存储 前端:Layui、Themeleaf、Javascript、jQuery、H5 主要难点: 1. 实现微信扫二维码登录,主要是因为微信测试号只能授权,无法使用二维码登录,于是自己实现二维码登录。 实现方案请看我的博客:https://blog.csdn.net/deel_feel/article/details/79961150 2. 首页静态化:首页是访问量最大的地方,首页模块静态化之后,访问这些模块无需查询数据库,能够很好地减少数据库压力,即使数据库出了问题,也不影响网站首页的正常访问。对于共享排行以及借阅排行模块,平台会执行定时任务,定时执行模块的重新静态化,达到刷新数据的功能,后台管理系统也提供专门的按钮,让管理员手动重新静态化。 实现:利用页面引擎模板Themeleaf技术把部分页面模块静态化。 ```java Context context = new Context(); context.setVariable("userList", userList); // 构造模板引擎 ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver(); resolver.setPrefix("templates/"); resolver.setSuffix(".html"); TemplateEngine templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(resolver); // 渲染模板 File f = new File("src//main//resources//static//page//" + resultPage+".html"); FileWriter write = new FileWriter(f); templateEngine.process(modelPage, context, write); write.close(); ``` 3. 个人书库,可以在未登录状态或者登录状态进行图书收藏。未登录时收藏会保存到cookie,登录后收藏的图书会跟随用户的账号保存到Redis。 4. 评论点赞属于热数据,使用了redis作为缓存,先把读者点赞数据存储在redis中,然后使用定时任务把redis中的点赞数据同步到数据库对应的表中。 ```java // 存入评论id setOperations.add(COMMENT_SET, commentId+""); //是否存在commentId-userId if(!hashOperations.hasKey(USER_LIKE_COMMENT_+commentId, userId)){ Map map = new HashMap(); map.put("likeTime",new Date()); // 不存在则存入用户id和操作 hashOperations.put(USER_LIKE_COMMENT_+commentId, userId, map); }else{ // 存在则抵消操作 hashOperations.delete(USER_LIKE_COMMENT_+commentId, userId); } // 点赞计数器 if("0".equals(value)){ redisTemplate.opsForValue().increment("post_counter_"+commentId, -1); }else if("1".equals(value)){ redisTemplate.opsForValue().increment("post_counter_"+commentId, 1); } ``` 5. Druid多数据源读写分离,mysql主从同步。 (后来使用mybatis二级缓存遇到了一个坑,请看https://blog.csdn.net/deel_feel/article/details/80049662) ## 平台截图(样式有点丑) 首页截图: ![首页截图](https://deepfeel-1253391577.cos.ap-guangzhou.myqcloud.com/myImage/index.jpg) 个人书库: ![个人书库截图](https://deepfeel-1253391577.cos.ap-guangzhou.myqcloud.com/myImage/cart.jpg) 书愿墙: ![书愿墙截图](https://deepfeel-1253391577.cos.ap-guangzhou.myqcloud.com/myImage/wish.jpg)