基于SpringBoot的公益慈善平台

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

基于SpringBoot的公益慈善平台是一款致力于为社会所有人带来便利服务的B/S架构的应用程序。随着网络技术的发展,公益慈善网站已经逐渐成为公益行动的主要信息载体。在这个平台上,主要有管理员、捐赠者和志愿者三种角色,他们各自拥有不同的权限和功能。

管理员作为平台的运营者,主要负责管理整个平台的运行情况,包括用户信息管理、项目管理等。而捐赠者则是为公益事业做出贡献的人,他们可以浏览平台上的各种公益项目,并选择自己感兴趣的项目进行捐赠。此外,他们还可以在平台上查看自己的捐赠记录和捐赠的项目进展情况。

志愿者是公益事业的重要推动力,他们在平台上可以找到自己感兴趣的志愿者活动,并进行报名参与。同时,他们也可以在平台上查看自己的志愿服务记录和参与的活动信息。

在技术实现上,该平台采用了SpringBoot整合Mybatis、Redis等主流开发技术,以提供高效、稳定的服务。此外,还整合了支付宝支付、websocket聊天室等功能,为用户提供更便捷的操作体验。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  3. Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
  4. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
  5. Bootstrap:Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。 国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。
  6. Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
    超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:article(article)

字段名类型默认值列注释
idintNULL文章ID
user_idintNULL作者用户ID
titlevarcharNULL文章标题
contentlongtextNULL文章正文
statusintNULL文章状态:发布(1),回收站(2)
read_countintNULL阅读量
imgvarcharNULL封面图片
typeintNULL类型:文章由普通用户发布(1),活动由管理员发表(2)
is_checkedintNULL文章审核,0:未审核,1:审核通过,2:审核不通过
infovarcharNULL审核未通过返回的消息
gmt_createdatetimeNULL数据插入时间,即发布时间
gmt_modifieddatetimeNULL更新时间

2:article_activity(article_activity)

字段名类型默认值列注释
idintNULL主键ID
article_idintNULL文章的ID
activity_article_idintNULL活动文章的ID
gmt_createdatetimeNULL插入数据的时间
gmt_modifieddatetimeNULL更新的时间

3:certification(certification)

字段名类型默认值列注释
idintNULL主键ID
user_idintNULL用户ID
namevarcharNULL机构名称
leader_namevarcharNULL领导者姓名
id_cardvarcharNULL领导者身份证号码
typevarcharNULL机构类型
show_namevarcharNULL认证称号(XXX官方账户)
prove_imgvarcharNULL单位证明/营业执照图片地址
id_card_img0varcharNULL领导者身份证照片(反面)
id_card_img1varcharNULL领导者身份证照片(正面)
is_checkedintNULL审核(0),成功(1),失败(2)
infovarcharNULL认证未通过返回的消息
gmt_createdatetimeNULL插入数据的时间
gmt_modifieddatetimeNULL更新的时间

4:comment(comment)

字段名类型默认值列注释
idintNULL主键ID
user_idintNULL发表评论用户的ID
user_namevarcharNULL用户名
imgvarcharNULL用户头像地址
target_idintNULL目标ID:可以是项目ID 、文章ID
typeintNULL类型:项目(1),文章(2)
contentvarcharNULL评论内容
reply_idintNULL回复评论的ID
is_firstintNULL是否置顶:置顶(1),不置顶(0)
gmt_createdatetimeNULL插入数据的时间,即发表评论的时间
gmt_modifieddatetimeNULL更新的时间

5:feedback(feedback)

字段名类型默认值列注释
idintNULL主键ID
user_idintNULL反馈的用户的ID
user_namevarcharNULL用户名
imgvarcharNULL用户头像地址
contentvarcharNULL评论内容
gmt_createdatetimeNULL插入数据的时间,即发表评论的时间
gmt_modifieddatetimeNULL更新的时间

6:link(link)

字段名类型默认值列注释
idintNULL主键ID
namevarcharNULL名称
target_urlvarcharNULL链接地址
typeintNULL类型:顶部菜单(1),友情链接(2)
gmt_createdatetimeNULL插入数据的时间
gmt_modifieddatetimeNULL更新的时间

7:message(message)

字段名类型默认值列注释
idintNULL主键ID
receive_user_idintNULL接收消息的用户ID
sent_user_idintNULL发送消息的用户ID
typeintNULL类型:项目评论(1)/文章评论(2)/审核 (3)
target_idintNULL目标ID:公益项目/文章ID
titlevarcharNULL标题
contentvarcharNULL消息的内容
is_readintNULL是否已读:未读(0),已读(1)
gmt_createdatetimeNULL插入数据的时间,即发表评论的时间
gmt_modifieddatetimeNULL更新的时间
sent_user_imgvarcharNULL发送消息的用户头像

8:message_board(message_board)

字段名类型默认值列注释
idintNULL主键ID
namevarcharNULL昵称
emailvarcharNULL邮件地址
contentvarcharNULL留言内容
gmt_createdatetimeNULL插入数据的时间
gmt_modifieddatetimeNULL更新的时间

9:project(project)

字段名类型默认值列注释
idintNULL主键ID
namevarcharNULL名称
backgroundvarcharNULL背景
targetvarcharNULL目的
themevarcharNULL主题
sponsorvarcharNULL赞助
contentlongtextNULL内容
imgvarcharNULL公益项目的封面
gmt_createdatetimeNULL插入数据的时间
gmt_modifieddatetimeNULL更新的时间

10:user(user)

字段名类型默认值列注释
idintNULL主键ID
namevarcharNULL姓名
passwordvarcharNULL密码
emailvarcharNULL邮箱地址
phonecharNULL手机号码
addressvarcharNULL地址
sexintNULL性别:女(0)男(1)
birthdaydateNULL出生年月
careervarcharNULL职业
certification_idintNULL认证类型ID
imgvarcharNULL头像地址
statusintNULL状态:正常(0),封禁(1)
gmt_createdatetimeNULL注册时间
gmt_modifieddatetimeNULL最近更新
roleintNULL角色:普通用户(0)管理员(1)

五、功能模块:

  1. 系统主页:浏览系统主页、留言、浏览公益项目、浏览平台活动、浏览求助文章,每次浏览都会累积访问量

    系统主页

  2. 用户登录注册:填写用户信息进行账号注册(邮箱验证码)、使用邮箱密码进行登录、忘记密码(邮箱验证码并重置)、退出登录

    用户登录注册

  3. 公益项目:包括项目标题、内容(Markdown)、封面、背景、主题、目的、赞助

    公益项目

  4. 平台活动:

    平台活动

  5. 留言:

    留言

  6. 普通用户后台:| 仪表盘 | 数据统计、最新活动、最新求助文章 |
    | ---------- | ------------------------------------------------------------ |
    | 求助文章 | 标题、编写求助文章(Markdown编辑器)、上传封面、关联平台活动、文章搜索、重新编辑 |
    | 审核队列 | 等待审核、已审核 |
    | 文章回收站 | 删除文章后自动加入回收站,可再次删除、移出回收站 |
    | 评论管理 | 置顶评论、删除评论、查询详情 |
    | 通知消息 | 查看消息、全部已读 |

    普通用户后台

  7. 管理员用户管理:

    管理员用户管理

  8. 管理员公益项目发布:

    管理员公益项目发布

  9. 管理员认证审核:

    管理员认证审核

  10. 管理员评论管理:

    ### 管理员评论管理

六、代码示例:

 /**
     * 发布求助文章
     */
    @PostMapping("/publishArticle")
    @ResponseBody
    public String publishArticle(String title, String content, String imgPath, Integer activityId) {
        // 生成文章对象
        Article article = Article.builder()
                .title(title).content(content).userId(loginUser.getId())
                .type(TypeStatus.ARTICLE).readCount(0).status(TrashStatus.NOT_IN).isChecked(CheckStatus.WAIT)
                .gmtCreate(new Date()).gmtModified(new Date())
                .build();
        // 为文章设置封面,如果为空就生成随机封面
        article.setImg(StringUtils.isEmpty(imgPath) ? OssUtils.getRandomFace() : imgPath);
        if (articleService.insert(article)) {
            if (activityId != -1) {
                articleService.insertArticleActivity(article.getId(), activityId);
                logger.info("【成功】:添加文章活动");
            }
            result.setCode(200);
            logger.info("【成功】:添加文章");
        } else {
            result.setCode(500);
            logger.info("【失败】:添加文章");
        }
        return JSONObject.toJSONString(result);
    }

    /**
     * 更新文章
     */
    @PostMapping("/updateArticle")
    @ResponseBody
    public String updateArticle(Integer id, String title, String content, String imgPath, int activityId) {
        // 生成文章对象
        Article article = Article.builder()
                .id(id).title(title).content(content).status(TrashStatus.NOT_IN).isChecked(CheckStatus.WAIT)
                .gmtModified(new Date())
                .build();
        // 为文章设置封面,如果为空就生成随机封面
        article.setImg(StringUtils.isEmpty(imgPath) ? OssUtils.getRandomFace() : imgPath);
        if (articleService.update(article)) {
            if (activityId != -1) {
                // 获取原来参加的活动
                Article activity = articleService.getActivityByArticleId(id);
                if (activity == null || activity.getId() != activityId) {
                    // 删除参与的活动
                    articleService.deleteArticleActivity(id);
                    // 添加新的活动
                    articleService.insertArticleActivity(article.getId(), activityId);
                    logger.info("【成功】:更新文章活动");
                }
            }
            result.setCode(200);
            logger.info("【成功】:更新文章");
        } else {
            result.setCode(500);
            logger.info("【失败】:更新文章");
        }
        return JSONObject.toJSONString(result);
    }

    /**
     * 将文章移到回收站
     */
    @GetMapping("/putIntoTrash")
    public String putIntoTrash(@RequestParam("id") Integer id, @RequestParam("checked") Integer checked) {
        // 获取文章
        Article article = articleService.getById(id);
        if (article.getType() == TypeStatus.ACTIVITY) {
            logger.info("【失败】:将文章移到回收站,类型错误");
            return "error/400";
        }
        if (article.getUserId() != loginUser.getId()) {
            logger.info("【失败】:将文章移到回收站,无权限");
            return "error/401";
        }
        article.setStatus(TrashStatus.IS_IN);
        if (articleService.update(article)) {
            logger.info("【成功】:将文字移到回收站");
        } else {
            logger.info("【失败】:将文字移到回收站");
        }
        return "redirect:/my-articles?checked=" + checked;
    }

七、项目总结:

之前在教材内容读书过程中开发设计技术专业知识,对研究过程的认知,对开发设计设计课程学习,及其如何有效开展系统的市场分析和设计。老师还选了更具有标志性管理方案系统来解读教学过程,课下安排工作使们进行练习。在这段时间,老师还应当掌握系统地完成和测试。应对餐厅点餐管理系统的开发,的脑海里的确有一个清晰的认知。在系统制做及配套文本文件撰写中,按照软件开发流程一步步做好本职工作。

从系统的角度看,依据餐厅点餐管理系统生产,其艰难在于功能清楚、系统构造设计、设计使用性能数据库系统、挑选核心技术进行系统功能等,这种都是自己的难题。针对这一艰难,实行了一些防范措施。当也不知道系统的功能时,在网上找到很多相似的系统,做好记录了一些系统的一般功能,并用了这一系统的高效功能的一部分。除此之外,在在网络上得到了很多关于系统设计的前提知识,包含系统模块划分、设计规范、数据库表的设计和创建,及其程序流程编码的专业技能知识,包含撰写与使用数据和信息加上、删掉和变更编码控制器。在系统序号进行相关功能后,认真的试了系统中所有功能,最后发现自己研发的系统符合规定,能接受。系统功能与系统剖析设计高度一致,系统质量稳定。为应对客户的实际操作不正确,还设有不恰当反馈机制,系统性能稳定。唯一的最大的缺点是系统数据报表的设计不健全,字段名称相匹配的引用类型不正确,一部分系统编码很多地方并没有注解,编码不足简易。

从文本文件的角度看,依据基于SpringBoot的公益慈善平台生产后,应叙述生产过程的需求,包含怎样进行数据分析报告、怎样进行系统设计及其系统功能的具体运作实际效果。在这期间,用了接近一个月的时间来做。要实现院校标准化的文档排版标准,多次在老师的建议下学习办公软件使用和排版设计设计。坚持就是收益。经过长时间的的撰写和优化,的文档终于完成。

总而言之,尽管制做经历了太多阶段,但如果认真完成这件事情,们将在每一个环节得到许多知识,在每一个环节的操作过程中锻练们自己的实践技能。根据该项目的制做,开始明白,许多知识不但来源于书籍,来源于教师在课堂教学中讲的知识,还来源于各种网络学习平台和社会实践。到现在为止,将继续努力,维持新知识的深入学习习惯性

八、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/198756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python实现SVM来解决二分类问题

下面是一个使用Python实现SVM来解决二分类问题的例子: # 导入所需的库 from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.svm import SVC import matplotlib.pyplot as plt# 生成一个二分类数据集 X, …

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO 概述 上节 ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO 讲述了如何通过网页控制一个 GPIO。本节实现在网页上控制多个 GPIO。 示例解析 前端设计 前端代码建立了四个 GPIO,如下死 GPIO 2 在前端的…

STM32F407-14.3.5-01捕获_比较通道

捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器) 包括: 捕获的输入部分(数字滤波、多路复用和预分频器), 输出部分(比较器和输出控制)。 中文参考手册中框图分成了三大模块, 把框图合并成了一个整体,以便更好的理解捕获输…

深度学习之基于百度飞桨PaddleOCR图像字符检测识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介主要特点使用步骤 二、功能三、系统四. 总结 一项目简介 # Introduction to PaddleOCR Image Character Detection and Recognition System Based on Baidu…

Java---权限修饰符、final、static

文章目录 1. 权限修饰符2. final(最终态)3. static(静态) 1. 权限修饰符 修饰符同一个类中同一个包中的子类和无关类不同包的子类不同包的无关类private√默认√√protected√√√public√√√√ 2. final(最终态) 1. final关键字是最终的意思,可以修饰成员方法、…

Appium PO模式UI自动化测试框架——设计与实践

1. 目的 相信做过测试的同学都听说过自动化测试,而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说,它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟,那么存在即合理,自动化UI测试自然也是广…

《融合SCADA系统数据的天然气管道泄漏多源感知技术研究》误报数据识别模型开发

数据处理不作表述。因为我用的是处理后的数据,数据点这。 文章目录 工作内容1CC040VFD电流VFD转速压缩机转速反馈进出口差压 紧急截断阀开到位进出电动阀开到位发球筒电筒阀开到位收球筒电动阀开到位电动阀2005开到位越站阀开到位 工作内容2工作内容3 工作内容1 任…

金字塔原理 读书笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言第1篇 表达的逻辑第1章 为什么要用金字塔结构归类分组,将思想组织成金字塔自上而下表达,结论先行自下而上思考,总结概括 第2…

Spark---资源、任务调度

一、Spark资源调度源码 1、Spark资源调度源码过程 Spark资源调度源码是在Driver启动之后注册Application完成后开始的。Spark资源调度主要就是Spark集群如何给当前提交的Spark application在Worker资源节点上划分资源。Spark资源调度源码在Master.scala类中的schedule()中进行…

基于SSM的云鑫曦科技办公自动化管理系统设计与实现

基于SSM的云鑫曦科技办公自动化管理系统设计与实现 摘 要: 随着时代的发展,单位办公方式逐渐从传统的线下纸张办公转向了使用个人pc的线上办公,办公效率低下的传统纸质化办公时代的淘汰,转型到信息化办公时代,面对当今数据逐渐膨…

奇数求和(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

Keil5 debug

目录 debug调试功能 基本功能: 程序复位:Reset 运行:Run 停止:Stop 断点调试(Breakpoint Debugging) 单步调试: 单步调试:Step 单步跳过调试:Step Over: 单步返…

vue项目中使用jsonp跨域请求百度联想接口

一. 内容简介 vue项目中使用jsonp跨域请求百度联想接口 二. 软件环境 2.1 Visual Studio Code 1.75.0 2.2 chrome浏览器 2.3 node v18.14.0 三.主要流程 3.1 代码 核心代码 // 这个是请求函数doLeno() {// 挂载回调函数,不挂载,会报不存在window…

算法中的时间复杂度,空间复杂度

一、前言 算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别 衡量不同算法之间的优劣主要是通过时…

【动态规划】求最长递增子序列问题

目录 问题描述递推关系建立递推关系的思路约束条件:以 s [ k ] s[k] s[k] 结尾约束条件:以 s [ k ] s[k] s[k] 开头约束条件:增加子问题参数(前缀)约束条件:增加子问题参数(后缀)约束条件:LIS长度为k且末尾元素最小 运行实例 问…

MySQL -DDL 及表类型

DDL 创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:[DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1.CHARACTER SET&#xff1a…

Java后端开发——MVC商品管理程序

Java后端开发——MVC商品管理程序 本篇文章内容主要有下面几个部分: MVC架构介绍项目环境搭建商品管理模块Servlet代码重构BaseServlet文件上传 MVC 是模型-视图-控制器(Model-View-Controller),它是一种设计模式,也…

.net7.0中把exe和dll分开打包

之前写过 C#把dll分别放在指定的文件夹_wpf core dll 放文件夹-CSDN博客 C#把dll打包到exe_c# 打包exe_故里2130的博客-CSDN博客 这都是老技术了,可以进行参考。 现在的.netcore系列有单独支持把exe和dll分开打包的功能了,当然也支持.net7.0和.net8.…

开源堡垒机Jumpserver

文章目录 开源堡垒机JumpserverJumpserver介绍安装环境部署安装jumpserver访问jumpserver的web界面 开源堡垒机Jumpserver Jumpserver介绍 Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的运维安全审计系统。 Jumpse…

AIGC-文生视频

stable diffusion: stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,喂到你嘴里 - 知乎个人网站一、前言(可跳过)hello,大家好我是 Tian-Feng,今天介绍一些stable diffusion的原理&#…