springboot基于微信小程序的“热岛”志愿者服务平台

server/2024/10/23 0:40:55/

文章目录

  • 前言
  • 项目介绍
  • 技术介绍
  • 功能介绍
  • 核心代码
    • 数据库参考
  • 系统效果图
  • 文章目录


前言

文章底部名片,获取项目的完整演示视频,免费解答技术疑问

项目介绍

  当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统志愿者服务管理采取了人工的管理方法,但这种管理方法存在着许多弊端,比如效率低下、安全性低以及信息传输的不准确等,同时由于志愿者服务管理中会形成众多的个人文档和信息系统数据,通过人工方法对活动信息、志愿者服务、志愿者招募、培训信息等进行集中管理会形成检索、更改和维护等较为麻烦的管理问题,同时由于广大用户对网络技术的需求也日益高涨,于是信息技术也需要继续开展全新的改革以满足时代的需求。根据此问题,研发一套志愿者服务管理平台,既能够大大提高信息的检索、变更与维护的工作效率,也能够方便微信小程序的管理运用,从而减少信息管理成本,提高效率。
该志愿者服务管理平台采用Uni-weixin、SpringBoot框架,前端以小程序页面呈现给活动主办方、志愿者和志愿小组长,结合后台java语言使页面更加完善,后台使用MySQL数据库进行数据存储。该微信小程序操作简便,界面设计简洁,不但可以基本满足本行业的日常管理工作,同时又可以有效减少人员成本和时间成本,为志愿者服务管理工作提供了方便。

技术介绍

开发语言:Java
框架:springboot
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven

安卓框架:uniapp
安卓开发软件:HBuilder X
开发模式:混合开发

功能介绍

志愿者服务管理平台根据权限类型进行分类,主要可分为活动主办方、志愿者和志愿小组长微信端和管理员服务端四大模块。活动主办方、志愿者和志愿小组长微信端模块主要实现了可以查看活动信息、志愿者服务、志愿者招募、培训信息等操作,加强了活动主办方、志愿者和志愿小组长的操作体验。管理员服务端模块主要根据管理员对整个系统的管理进行设计,提高了管理的效率和规范[11]。系统总体模块设计如下图所示
在这里插入图片描述

图4-1 系统总体模块设计

核心代码


package com.example.controller;import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.Caiwu;
import com.example.exception.CustomException;
import com.example.service.CaiwuService;
import com.example.utils.MapWrapperUtils;
import com.example.utils.jwt.JwtUtil;
import com.example.vo.CaiwuVo;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping(value = "/caiwu")
public class CaiwuController {@Resourceprivate CaiwuService caiwuService;@PostMappingpublic Result<Caiwu> add(@RequestBody CaiwuVo caiwu) {caiwuService.add(caiwu);return Result.success(caiwu);}@PostMapping("/deleteList")public Result<Caiwu> deleteList(@RequestBody CaiwuVo caiwu) {caiwuService.deleteList(caiwu.getList());return Result.success();}@DeleteMapping("/{id}")public Result delete(@PathVariable Long id) {caiwuService.delete(id);return Result.success();}@PutMappingpublic Result update(@RequestBody CaiwuVo caiwu) {caiwuService.update(caiwu);return Result.success();}@GetMapping("/{id}")public Result<Caiwu> detail(@PathVariable Integer id) {Caiwu caiwu = caiwuService.findById(id);return Result.success(caiwu);}@GetMappingpublic Result<List<Caiwu>> all() {return Result.success(caiwuService.list());}@PostMapping("/page")public Result<CaiwuVo> page(@RequestBody CaiwuVo caiwuVo) {return Result.success(caiwuService.findPage(caiwuVo));}@PostMapping("/login")public Result login(@RequestBody Caiwu caiwu, HttpServletRequest request) {if (StrUtil.isBlank(caiwu.getZhanghao()) || StrUtil.isBlank(caiwu.getMima())) {throw new CustomException(ResultCode.PARAM_LOST_ERROR);}Caiwu login = caiwuService.login(caiwu);
//        if(!login.getStatus()){
//            return Result.error("1001","状态限制,无法登录系统");
//        }if(login != null) {HashMap hashMap = new HashMap();hashMap.put("user", login);Map<String, Object> map = MapWrapperUtils.builder(MapWrapperUtils.KEY_USER_ID,caiwu.getId());String token = JwtUtil.creatToken(map);hashMap.put("token", token);return Result.success(hashMap);}else {return Result.error();}}@PutMapping("/updatePassword")public Result updatePassword(@RequestBody Caiwu info, HttpServletRequest request) {Caiwu caiwu = caiwuService.findById(info.getId());String oldPassword = SecureUtil.md5(info.getMima());if (!oldPassword.equals(caiwu.getMima())) {return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);}info.setMima(SecureUtil.md5(info.getNewPassword()));Caiwu caiwu1 = new Caiwu();BeanUtils.copyProperties(info, caiwu1);caiwuService.update(caiwu1);return Result.success();}
}

数据库参考

--
-- Current Database: `springbootfd0t5g0m`
--/*!40000 DROP DATABASE IF EXISTS `springbootfd0t5g0m`*/;CREATE DATABASE /*!32312 IF NOT EXISTS*/ `springbootfd0t5g0m` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;USE `springbootfd0t5g0m`;--
-- Table structure for table `canjiapeixun`
--DROP TABLE IF EXISTS `canjiapeixun`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `canjiapeixun` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`peixunmingcheng` varchar(200) DEFAULT NULL COMMENT '培训名称',`peixuntupian` longtext COMMENT '培训图片',`peixunshijian` varchar(200) DEFAULT NULL COMMENT '培训时间',`peixundidian` varchar(200) DEFAULT NULL COMMENT '培训地点',`zhiyuanzhezhanghao` varchar(200) DEFAULT NULL COMMENT '志愿者账号',`zhiyuanzhexingming` varchar(200) DEFAULT NULL COMMENT '志愿者姓名',`shoujihaoma` varchar(200) DEFAULT NULL COMMENT '手机号码',`canjiashijian` datetime DEFAULT NULL COMMENT '参加时间',`crossuserid` bigint(20) DEFAULT NULL COMMENT '跨表用户id',`crossrefid` bigint(20) DEFAULT NULL COMMENT '跨表主键id',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8 COMMENT='参加培训';
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `canjiapeixun`
--LOCK TABLES `canjiapeixun` WRITE;
/*!40000 ALTER TABLE `canjiapeixun` DISABLE KEYS */;
INSERT INTO `canjiapeixun` VALUES (101,'2024-04-16 06:34:46','培训名称1','upload/canjiapeixun_peixuntupian1.jpg,upload/canjiapeixun_peixuntupian2.jpg,upload/canjiapeixun_peixuntupian3.jpg','培训时间1','培训地点1','志愿者账号1','志愿者姓名1','手机号码1','2024-04-16 14:34:46',1,1),(102,'2024-04-16 06:34:46','培训名称2','upload/canjiapeixun_peixuntupian2.jpg,upload/canjiapeixun_peixuntupian3.jpg,upload/canjiapeixun_peixuntupian4.jpg','培训时间2','培训地点2','志愿者账号2','志愿者姓名2','手机号码2','2024-04-16 14:34:46',2,2),(103,'2024-04-16 06:34:46','培训名称3','upload/canjiapeixun_peixuntupian3.jpg,upload/canjiapeixun_peixuntupian4.jpg,upload/canjiapeixun_peixuntupian5.jpg','培训时间3','培训地点3','志愿者账号3','志愿者姓名3','手机号码3','2024-04-16 14:34:46',3,3),(104,'2024-04-16 06:34:46','培训名称4','upload/canjiapeixun_peixuntupian4.jpg,upload/canjiapeixun_peixuntupian5.jpg,upload/canjiapeixun_peixuntupian6.jpg','培训时间4','培训地点4','志愿者账号4','志愿者姓名4','手机号码4','2024-04-16 14:34:46',4,4),(105,'2024-04-16 06:34:46','培训名称5','upload/canjiapeixun_peixuntupian5.jpg,upload/canjiapeixun_peixuntupian6.jpg,upload/canjiapeixun_peixuntupian7.jpg','培训时间5','培训地点5','志愿者账号5','志愿者姓名5','手机号码5','2024-04-16 14:34:46',5,5),(106,'2024-04-16 06:34:46','培训名称6','upload/canjiapeixun_peixuntupian6.jpg,upload/canjiapeixun_peixuntupian7.jpg,upload/canjiapeixun_peixuntupian8.jpg','培训时间6','培训地点6','志愿者账号6','志愿者姓名6','手机号码6','2024-04-16 14:34:46',6,6),(107,'2024-04-16 06:34:46','培训名称7','upload/canjiapeixun_peixuntupian7.jpg,upload/canjiapeixun_peixuntupian8.jpg,upload/canjiapeixun_peixuntupian9.jpg','培训时间7','培训地点7','志愿者账号7','志愿者姓名7','手机号码7','2024-04-16 14:34:46',7,7),(108,'2024-04-16 06:34:46','培训名称8','upload/canjiapeixun_peixuntupian8.jpg,upload/canjiapeixun_peixuntupian9.jpg,upload/canjiapeixun_peixuntupian10.jpg','培训时间8','培训地点8','志愿者账号8','志愿者姓名8','手机号码8','2024-04-16 14:34:46',8,8);
/*!40000 ALTER TABLE `canjiapeixun` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `config`
--DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(100) NOT NULL COMMENT '配置参数名称',`value` varchar(100) DEFAULT NULL COMMENT '配置参数值',`url` varchar(500) DEFAULT NULL COMMENT 'url',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `config`
--LOCK TABLES `config` WRITE;
/*!40000 ALTER TABLE `config` DISABLE KEYS */;
INSERT INTO `config` VALUES (1,'picture1','upload/picture1.jpg',NULL),(2,'picture2','upload/picture2.jpg',NULL),(3,'picture3','upload/picture3.jpg',NULL);
/*!40000 ALTER TABLE `config` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `forum`
--DROP TABLE IF EXISTS `forum`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `forum` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`title` varchar(200) DEFAULT NULL COMMENT '帖子标题',`content` longtext NOT NULL COMMENT '帖子内容',`parentid` bigint(20) DEFAULT NULL COMMENT '父节点id',`userid` bigint(20) NOT NULL COMMENT '用户id',`username` varchar(200) DEFAULT NULL COMMENT '用户名',`avatarurl` longtext COMMENT '头像',`isdone` varchar(200) DEFAULT NULL COMMENT '状态',`istop` int(11) DEFAULT '0' COMMENT '是否置顶',`toptime` datetime DEFAULT NULL COMMENT '置顶时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=169 DEFAULT CHARSET=utf8 COMMENT='交流论坛';
/*!40101 SET character_set_client = @saved_cs_client */;

系统效果图

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

文章目录

目 录
摘 要 I
Abstract II
1 概 述 1
1.1 课题研究背景 1
1.2 微信小程序意义介绍 1
1.3 国内外研究现状 1
2 系统开发环境及相关技术 2
2.1 系统开发环境 2
2.2 系统开发技术 2
2.2.1 SpringBoot框架 3
2.2.2 Java语言简介 3
2.2.3 MySQL数据库 4
2.2.4小微信公众号开发技术 4
3 系统需求分析 5
2.1 可行性分析 5
3.2 功能需求分析 5
3.3 系统流程分析 7
3.3.1 登录流程 7
3.3.2 添加信息流程 8
4 系统设计 10
4.1 功能模块设计 10
4.2 系统数据库设计 11
4.2.1 数据库系统 11
4.2.2 数据库概念设计 11
4.2.3 数据表设计 12
4.2.4 数据表的建立 12
5 系统实现 22
5.1活动主办方微信端模块实现 22
5.2志愿小组长微信端模块实现 23
5.3志愿者微信端模块实现 24
5.4管理员服务端模块实现 26
6 系统测试 32
6.1软件测试过程 32
6.2测试用例 33
结 论 34
致 谢 35
参 考 文 献 36


http://www.ppmy.cn/server/134034.html

相关文章

【Golang】Go语言web框架Gin响应客户端有哪些方式

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Golang | Leetcode Golang题解之第479题最大回文数乘积

题目&#xff1a; 题解&#xff1a; func largestPalindrome(n int) int {if n 1 {return 9}upper : int(math.Pow10(n)) - 1for left : upper; ; left-- { // 枚举回文数的左半部分p : leftfor x : left; x > 0; x / 10 {p p*10 x%10 // 翻转左半部分到其自身末尾&…

网络爬虫-数美滑块验证码

仅供研究学习使用。 今天带来的是数美滑块验证码的逆向 目标站 --> 传送门 解决此类验证码 首先要解决滑动距离的判定 无论是使用selenium还是使用协议的方式来破解 都绕不开滑动距离的识别 滑动距离可以参考以前我博客上的方式&#xff0c;或者找一找开源的一些算法&am…

六、LogicFlow 自定义业务边 Edge

前言 经过前面的文章讲解&#xff0c;目前已经实现了节点拖拽到画布中&#xff0c;并且也实现了节点之间的基础连线&#xff0c;到这里也算是入了门&#xff0c;接下来继续探究新学习新的功能&#xff0c;以满足新的需求&#xff0c;那么这一章就会学习如何更改两节点之间的连…

云开发的力量:腾讯云产品在业务项目中的最佳实践分享

全文目录&#xff1a; &#x1f4a1; 前言&#xff1a;技术如何助力业务成功&#x1f31f; 目录&#x1f50d; 应用背景&#xff1a;业务痛点与挑战&#x1f4ca; 高并发场景中的挑战 &#x1f6e0; 腾讯云云开发解决方案&#xff1a;最佳实践与接入方式&#x1f310; 云开发如…

苍穹外卖--开发记录day08

目录 苍穹外卖day08一&#xff1a;导入地址簿代码二&#xff1a;用户下单三&#xff1a;微信支付 苍穹外卖day08 一&#xff1a;导入地址簿代码 很简单就是单表的增删改查&#xff0c;这里不做过多的赘述了&#xff1b; 二&#xff1a;用户下单 这里用户下单所涉及到的参数比较…

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)

1.问题描述&#xff1a; compatibleSdkVersion升级到5.0.0&#xff08;12&#xff09;之后&#xff0c;调用坐标系转换API&#xff1a;map.convertCoordinate(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, { longitude: location.longitude, latitude:…

设计模式-模板方法

模板方法&#xff08;Template Method&#xff09;是行为型设计模式的一种&#xff0c;它在一个抽象类中定义了一个算法的骨架&#xff0c;而将算法的一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法使得子类可以在不改变算法整体结构的情况下&#xff0c;重新定义…