基于javaweb+mysql的springboot爱心捐赠管理系统(java+springboot+html+thymeleaf+mybatis+mysql)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot爱心捐赠管理系统(java+springboot+html+thymeleaf+mybatis+mysql)
项目介绍
本项目分两种角色:管理员、用户。
项目功能:注册、登录、修改密码、捐赠衣服、论坛交流、爱心许愿、统计分析、捐赠记录、用户管理等等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.数据库:MySql 5.7版本;
5.是否Maven项目:是;
技术栈
SpringBoot + FreeMarker + JPA
使用说明
-
使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
-
使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
-
将项目中application-dev.properties配置文件中的数据库配置改为自己的配置;
map.put("article", articleList);
//用户心愿数量
List<Wish> wishList = wishService.selectByUserId(userId);
map.put("wishCount", wishList.size());
//用户心愿
map.put("wish", wishList);
//用户留言数量
List<Message> messageList = messageService.selectByUserId(userId);
map.put("messageCount", messageList.size());
//各个捐赠类别的数量
Map<Integer, List<Donation>> groupMap = donationList.stream().collect(Collectors.groupingBy(Donation::getKind));
for(Map.Entry<Integer, List<Donation>> itemGroup : groupMap.entrySet()){
map.put(String.valueOf(itemGroup.getKey()), itemGroup.getValue().stream().mapToDouble(Donation::getNumber).sum());
}
//补零
for(int i=0; i<=5; i++){
if(map.get(String.valueOf(i)) == null){
map.put(String.valueOf(i), 0);
}
}
return map;
}
}
/**
* 页面路由控制层
*/
@Controller
@RequestMapping("/page")
public class PageController {
/**
* 登录页面
*/
@RequestMapping("loginPage")
public String loginPage() {
UserContext.setCurrentUser(null);
return "loginPage";
}
/**
* 注册页面
*/
}
/**
* 前台心愿表单
*/
@RequestMapping("wishForm")
public String wishForm() {
return "user/wishForm";
}
/**
* 后台用户管理页面
*/
@RequestMapping("managerUser")
public String managerUser() {
return "manager/managerUser";
}
/**
* 后台用户表单
*/
@RequestMapping("userForm")
public String userForm() {
return "manager/userForm";
}
/**
* 后台捐赠记录管理页面
*/
@RequestMapping("managerDonation")
public String managerDonation() {
return "manager/managerDonation";
}
/**
* 后台论坛文章管理页面
*/
@RequestMapping("managerForum")
public String managerForum() {
return "manager/managerForum";
}
/**
* 后台留言管理页面
*/
@RequestMapping("managerMessage")
public String managerMessage(){
return "manager/managerMessage";
}
public String userForm() {
return "manager/userForm";
}
/**
* 后台捐赠记录管理页面
*/
@RequestMapping("managerDonation")
public String managerDonation() {
return "manager/managerDonation";
}
/**
* 后台论坛文章管理页面
*/
@RequestMapping("managerForum")
public String managerForum() {
return "manager/managerForum";
}
/**
* 后台留言管理页面
*/
@RequestMapping("managerMessage")
public String managerMessage(){
return "manager/managerMessage";
}
/**
* 后台心愿管理页面
*/
@RequestMapping("managerWish")
public String managerWish(){
return "manager/managerWish";
}
}
*/
@Controller
@RequestMapping("/file")
public class FileController {
/**
* 前缀路径(本地测试环境)
*/
public static String filePrePath = System.getProperty("user.dir")+ "\\src\\main\\resources\\static\\";
/**
* 论坛图片上传
* @param file
* @return
*/
@RequestMapping("/imagesUpload")
@ResponseBody
public String imagesUpload(@RequestParam("file") MultipartFile file){
Map<String, Object> resultMap = new HashMap<>(4);
try{
//修改文件名,防止重复
String filename = file.getOriginalFilename();
String extName = FileNameUtil.getSuffix(filename);
String newFileName = IdUtil.simpleUUID() + "." +extName;
String pathString = filePrePath + "forumImg\\" + newFileName;
//文件上传
File f = new File(pathString);
file.transferTo(f);
//转base64
String base64 = "data:image/"+extName+";base64," + Base64.encode(f);
//回调信息
resultMap.put("code",0);
resultMap.put("data", newFileName);
resultMap.put("baseData", base64);
return JSON.toJSONString(resultMap);
}catch(Exception e){
e.printStackTrace();
resultMap.put("code",1);
return JSON.toJSONString(resultMap);
}
}
/**
* 随机获取一个默认头像
*/
public static String randomGetDefaultUserImg(){
List<String> userImgList = new ArrayList<>();
userImgList.add("defaultOne.jpg");
userImgList.add("defaultTwo.jpg");
userImgList.add("defaultThree.jpg");
}
/**
* 随机获取一个默认头像
*/
public static String randomGetDefaultUserImg(){
List<String> userImgList = new ArrayList<>();
userImgList.add("defaultOne.jpg");
userImgList.add("defaultTwo.jpg");
userImgList.add("defaultThree.jpg");
userImgList.add("defaultFour.jpg");
userImgList.add("defaultFive.jpg");
Random random = new Random();
return userImgList.get(random.nextInt(userImgList.size()));
}
}
/**
* 留言信息控制层
*/
@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
MessageService messageService;
/**
* 留言信息数据表格接口
*/
}).collect(Collectors.groupingBy(Donation::getKindName));
List<Map<String, String>> listMap = new ArrayList<>();
for(Map.Entry<String, List<Donation>> map : allMap.entrySet()){
Double sum = map.getValue().stream().mapToDouble(Donation::getNumber).sum();
Map<String, String> itemMap = new HashMap<String, String>();
itemMap.put("value", String.valueOf(sum));
itemMap.put("name", map.getKey());
listMap.add(itemMap);
}
return listMap;
}
/**
* 前台页面第二个柱状图数据接口
*/
@RequestMapping("/echartsDataTwo")
public Map<String, List<String>> echartsDataTwo(){
Map<String, List<String>> resultMap = new HashMap<>();
//获取最近七天的时间段(往前找3天+往后找三天+今天一天)
List<String> dateList = new ArrayList<>();
String today= DateUtil.today();
Date date = DateUtil.parse(today);
for(int i=0; i<7; i++){
String d = DateUtil.format(DateUtil.offset(date, DateField.DAY_OF_MONTH, -6 + i), "yyyy-MM-dd");
dateList.add(d);
}
//根据日期获取数据
List<String> dataList = new ArrayList<>();
List<Donation> allList = donationService.selectAllList();
for(String currentDate : dateList){
List<Donation> list = allList.stream().filter(o -> currentDate.equals(o.getCreateDate().split(" ")[0])).collect(Collectors.toList());
if(list.isEmpty()){
dataList.add(String.valueOf(0));
}else{
dataList.add(String.valueOf(list.stream().mapToDouble(Donation::getNumber).sum()));
}
}
resultMap.put("dateList", dateList);
resultMap.put("dataList", dataList);
return resultMap;
}
/**
* 前台页面第三个折现图数据接口
* 随机获取一个默认头像
*/
public static String randomGetDefaultUserImg(){
List<String> userImgList = new ArrayList<>();
userImgList.add("defaultOne.jpg");
userImgList.add("defaultTwo.jpg");
userImgList.add("defaultThree.jpg");
userImgList.add("defaultFour.jpg");
userImgList.add("defaultFive.jpg");
Random random = new Random();
return userImgList.get(random.nextInt(userImgList.size()));
}
}
/**
* 留言信息控制层
*/
@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
MessageService messageService;
/**
* 留言信息数据表格接口
*/
@RequestMapping(value = "/getTableData", produces = "application/json; charset=utf-8")
public String getTableData(@RequestBody Message message) {
Map<String, Object> map = messageService.selectPage(message);
return JSON.toJSONString(map);
* 我的文章数据获取
*/
@RequestMapping("/selfArticle")
public List<Article> selfArticle() {
User currentUser = UserContext.getCurrentUser();
List<Article> articleList = articleService.selectByUserId(currentUser.getId());
return articleList;
}
/**
* 根据id获取
*/
@RequestMapping("/getById")
public Article getById(String id) {
Article article = articleService.selectEntity(id);
if(!StrUtil.isBlank(article.getPicStr())){
List<String> picList = new ArrayList<>(Arrays.asList(article.getPicStr().split(",")));
article.setPicList(picList);
}
return article;
}
}
/**
* 文件上传控制层
}
/**
* 前台捐赠信息保存
*/
@RequestMapping("/insertDonationList")
public String insertDonationList(@RequestBody List<Donation> list) {
return donationService.insertDonationList(list);
}
/**
* 捐赠信息删除(物理删除)
*/
@RequestMapping("/deleteDonation")
public String deleteDonation(String id) {
return donationService.deletePhysical(id);
}
/**
* 我的捐赠记录数据获取
*/
@RequestMapping("/selfDonation")
public List<Map<String, Object>> selfDonation(){
User currentUser = UserContext.getCurrentUser();
List<Map<String, Object>> listMap = donationService.countSelfDonation(currentUser.getId());
return listMap;
}
/**
* 后台修改捐赠记录状态
*/
@RequestMapping("/updateVerify")
public String updateVerify(String id, Integer verify){
return donationService.updateVerifyById(id, verify);
}
/**
* 前台页面第一个饼状图数据接口
*/
@RequestMapping("/echartsDataOne")
public List<Map<String, String>> echartsDataOne(){
List<Donation> allList = donationService.selectAllList();
Map<String, List<Donation>> allMap = allList.stream().peek(o -> {
if(o.getKind() == 0){
o.setKindName("上衣");
}else if(o.getKind() == 1){
o.setKindName("裤子");
/**
* 文章信息控制层
*/
@RestController
@RequestMapping("/article")
public class ArticleController {
@Autowired
ArticleService articleService;
/**
* 文章信息数据表格接口
*/
@RequestMapping(value = "/getTableData", produces = "application/json; charset=utf-8")
public String getTableData(@RequestBody Article article) {
Map<String, Object> pageDataMap = new HashMap<>(3);
//默认分页参数
if(article.getCurrentPage() == null || article.getLimitCount() == null){
article.setCurrentPage(1);
article.setLimitCount(10);
}
List<Article> dataList = articleService.selectList(article);
for(Article a : dataList){
if(!StrUtil.isBlank(a.getPicStr())){
a.setCoverImg(a.getPicStr().split(",")[0]);
}
}
Integer totalCount = articleService.selectCount(article);
pageDataMap.put("code", 0);
pageDataMap.put("data", dataList);
pageDataMap.put("count", totalCount);
return JSON.toJSONString(pageDataMap);
}
/**
* 文章信息保存
*/
@RequestMapping("/saveArticle")
/**
* 文件上传控制层
*/
@Controller
@RequestMapping("/file")
public class FileController {
/**
* 前缀路径(本地测试环境)
*/
public static String filePrePath = System.getProperty("user.dir")+ "\\src\\main\\resources\\static\\";
/**
* 论坛图片上传
* @param file
* @return
*/
@RequestMapping("/imagesUpload")
@ResponseBody
public String imagesUpload(@RequestParam("file") MultipartFile file){
Map<String, Object> resultMap = new HashMap<>(4);
try{
//修改文件名,防止重复
String filename = file.getOriginalFilename();
String extName = FileNameUtil.getSuffix(filename);
String newFileName = IdUtil.simpleUUID() + "." +extName;
String pathString = filePrePath + "forumImg\\" + newFileName;
//文件上传
File f = new File(pathString);
file.transferTo(f);
//转base64
String base64 = "data:image/"+extName+";base64," + Base64.encode(f);
//回调信息
resultMap.put("code",0);
resultMap.put("data", newFileName);
resultMap.put("baseData", base64);
return JSON.toJSONString(resultMap);
}catch(Exception e){
UserService userService;
@Autowired
DonationService donationService;
@Autowired
ArticleService articleService;
@Autowired
MessageService messageService;
@Autowired
WishService wishService;
/**
* 用户信息数据表格接口
*/
@RequestMapping(value="/getTableData", produces="application/json; charset=utf-8")
public String getUserData(@RequestBody User user) {
Map<String, Object> map = userService.selectPage(user);
return JSON.toJSONString(map);
}
/**
* 用户信息保存
*/
@RequestMapping("/saveUser")
public String saveUser(@RequestBody User user) {
return userService.saveUser(user);
}
/**
* 用户删除(物理删除)
*/
@RequestMapping("/deleteUser")
public String deleteUser(String id) {
return userService.deletePhysical(id);
}
/**
* 根据userId获取个人信息
*/
@RequestMapping("getPersonalInformation")
public Map<String, Object> getPersonalInformation(String userId){
Map<String, Object> map = new HashMap<>();
@RequestMapping("/message")
public class MessageController {
@Autowired
MessageService messageService;
/**
* 留言信息数据表格接口
*/
@RequestMapping(value = "/getTableData", produces = "application/json; charset=utf-8")
public String getTableData(@RequestBody Message message) {
Map<String, Object> map = messageService.selectPage(message);
return JSON.toJSONString(map);
}
/**
* 留言信息保存
*/
@RequestMapping("/saveMessage")
public String saveMessage(@RequestBody Message message) {
return messageService.saveMessage(message);
}
/**
* 留言信息删除(物理删除)
*/
@RequestMapping("/deleteMessage")
public String deleteMessage(String id) {
return messageService.deletePhysical(id);
}
/**
* 根据文章id获取留言
*/
@RequestMapping("/getByArticleId")
public List<Message> getByArticleId(String articleId) {
List<Message> messageList = messageService.selectByArticleId(articleId);
return messageList;
}
}
return "user/personalPage";
}
/**
* 前台论坛详情页面
*/
@RequestMapping("detailPage")
public String detailPage(String articleId) {
return "user/detailPage";
}
/**
* 前台心愿页面
*/
@RequestMapping("wishPage")
public String wishPage() {
return "user/wishPage";
}
/**
* 前台心愿表单
*/
@RequestMapping("wishForm")
public String wishForm() {
return "user/wishForm";
}
/**
* 后台用户管理页面
*/
@RequestMapping("managerUser")
public String managerUser() {
return "manager/managerUser";
}
/**
* 后台用户表单
*/
@RequestMapping("userForm")
public String userForm() {
return "manager/userForm";
}
/**
* 后台捐赠记录管理页面
*/
@RequestMapping("managerDonation")
public String managerDonation() {
/**
* 随机获取一个默认头像
*/
public static String randomGetDefaultUserImg(){
List<String> userImgList = new ArrayList<>();
userImgList.add("defaultOne.jpg");
userImgList.add("defaultTwo.jpg");
userImgList.add("defaultThree.jpg");
userImgList.add("defaultFour.jpg");
userImgList.add("defaultFive.jpg");
Random random = new Random();
return userImgList.get(random.nextInt(userImgList.size()));
}
}
/**
* 留言信息控制层
*/
@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
MessageService messageService;
/**
* 留言信息数据表格接口
public static String randomGetDefaultUserImg(){
List<String> userImgList = new ArrayList<>();
userImgList.add("defaultOne.jpg");
userImgList.add("defaultTwo.jpg");
userImgList.add("defaultThree.jpg");
userImgList.add("defaultFour.jpg");
userImgList.add("defaultFive.jpg");
Random random = new Random();
return userImgList.get(random.nextInt(userImgList.size()));
}
}
/**
* 留言信息控制层
*/
@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
MessageService messageService;
/**
* 留言信息数据表格接口
*/
@RequestMapping(value = "/getTableData", produces = "application/json; charset=utf-8")
public String getTableData(@RequestBody Message message) {
Map<String, Object> map = messageService.selectPage(message);
return JSON.toJSONString(map);
}
/**
}
}
/**
* RequestHand工具类,用于存取登录用户session
*/
public class UserContext {
private static final String USER_IN_SESSION = "CURRENT_USER";
public static HttpSession getSession() {
return ((ServletRequestAttributes) (RequestContextHolder.getRequestAttributes())).getRequest().getSession();
}
/**
* 当前用户存入session
* @param user 当前登录用户对象
*/
public static void setCurrentUser(User user) {
if(user == null) {
getSession().invalidate();
}else {
getSession().setAttribute(USER_IN_SESSION,user);
}
}
/**
* 当前登录用户取出
* @return 返回当前登录对象实体
*/
public static User getCurrentUser() {
return (User) getSession().getAttribute(USER_IN_SESSION);
}
}
@Autowired
DonationService donationService;
@Autowired
ArticleService articleService;
@Autowired
MessageService messageService;
@Autowired
WishService wishService;
/**
* 用户信息数据表格接口
*/
@RequestMapping(value="/getTableData", produces="application/json; charset=utf-8")
public String getUserData(@RequestBody User user) {
Map<String, Object> map = userService.selectPage(user);
return JSON.toJSONString(map);
}
/**
* 用户信息保存
*/
@RequestMapping("/saveUser")
public String saveUser(@RequestBody User user) {
return userService.saveUser(user);
}
/**
* 用户删除(物理删除)
*/
@RequestMapping("/deleteUser")
public String deleteUser(String id) {
return userService.deletePhysical(id);
}
/**
* 根据userId获取个人信息
*/
@RequestMapping("getPersonalInformation")
public Map<String, Object> getPersonalInformation(String userId){
Map<String, Object> map = new HashMap<>();
if(StrUtil.isBlank(userId)){
User currentUser = UserContext.getCurrentUser();
userId = currentUser.getId();
}
//用户个人信息