基于Java+SpringBoot+Vue+uniapp实现微信小程序的高校报修与互助平台小程序
高校报修与互助平台小程序的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与高校报修与互助平台小程序管理的实际需求相结合,讨论了基于高校报修与互助平台小程序管理的使用。本文以java为开发技术,实现了一个高校报修与互助平台小程序。高校报修与互助平台小程序的主要使用者分为管理员、学生、工作人员;实现功能:首页、公告栏、模块管理(文章分类、学生文章、职工文章、校园文章、宿舍报修、室内报修、室外
文末获取源码
开发语言:Java
框架:SpringBoot
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7/8.0
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器
小程序框架:uniapp
小程序开发软件:HBuilder X
小程序运行软件:微信开发者
一、前言介绍
高校报修与互助平台小程序的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与高校报修与互助平台小程序管理的实际需求相结合,讨论了基于高校报修与互助平台小程序管理的使用。
本文以java为开发技术,实现了一个高校报修与互助平台小程序。高校报修与互助平台小程序的主要使用者分为管理员、学生、工作人员;实现功能:首页、公告栏、模块管理(文章分类、学生文章、职工文章、校园文章、宿舍报修、室内报修、室外报修、网络报修、求助信息、用户反馈、职工反馈)轮播图、系统用户(管理员、学生用户、工作人员)等功能。通过这些功能模块的设计,基本上实现了整个高校报修与互助平台信息管理的过程。
具体在系统设计上,采用了B/S的结构,同时,也使用java技术在动态页面上进行了设计,后台上采用Mysql数据库,是一个非常优秀的高校报修与互助平台小程序。
二、系统开发技术
2.1 uni-app主要功能
uni-app实现了一套代码,同时运行到多个平台一套代码,同时运行到iOS模拟器、Android模拟器、H5、微信开发者工具、支付宝小程序Studio、百度开发者工具、字节跳动开发者工具、QQ开发者工具(底部8个终端选项卡代表8个终端模拟器。
2.2 Vue.js 介绍
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。
三、系统结构设计
系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。高校报修与互助平台小程序的整体结构设计如图所示。
四、统详细设计
4.1 学生功能模块
高校报修与互助平台小程序,在系统首页可以查看首页、我的(基本信息、收藏、学生文章、宿舍报修、室内报修、室外报修、网络报修、求助信息、用户反馈)等内容,如图所示。
学生文章,在学生文章页面可以查看文章标题、文章内容、发布日期、文章类型、发布学生等详细内容,如图所示。
用户注册,在用户注册页面通过填写用户名、密码、姓名、手机、邮箱等信息完成用户注册,如图所示。
求助信息,在求助信息页面可以查看求助标题、求助内容、求助日期等详细内容,如图所示。
宿舍报修,在宿舍报修列表页面可填写宿舍号、报修日期、报修内容、、报修状态、维修记录、维修人员等信息进行提交,如图所示。
室外报修,在室外报修页面可查看报修日期、报修内容、报修状态、维修记录、维修人员、当前位置等信息,根据需要对室外报修进行相对应操作,如图所示。
4.2 工作人员功能模块
高校报修与互助平台小程序,工作人员在系统首页可以查看首页、我的(基本信息、收藏、职工文章、宿舍报修、室内报修、室外报修、网络报修、职工反馈)等内容,如图所示。
职工文章,在 职工文章页面可以查看文章标题、文章内容、发布日期、文章类型、发布职工等详细内容,如图所示。
宿舍报修,在宿舍报修列表页面可填写宿舍号、报修日期、报修内容、报修状态、维修记录、维修人员等信息进行审核,如图所示。
室外报修,在室外报修页面可查看报修日期、报修内容、报修状态、维修记录、维修人员、当前位置等信息,根据需要对室外报修进行审核操作,如图所示。
4.3 管理员功能模块
管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图所示。
管理员登录进入高校报修与互助平台小程序可以查看首页、公告栏、模块管理(文章分类、学生文章、职工文章、校园文章、宿舍报修、室内报修、室外报修、网络报修、求助信息、用户反馈、职工反馈)轮播图、系统用户(管理员、学生用户、工作人员)等信息,如图所示。
用户管理,在用户管理页面中可以查看索引、用户名、密码、姓名、性别、头像、手机、邮箱等信息,并可根据需要进行修改或删除等操作,如图所示。
公告栏管理,在公告栏管理页面中可以查看索引、标题、创建时间、更新时间等信息,并可根据需要进行修改或删除等操作,如图所示。
校园文章管理,在校园文章管理页面中可以查看文章标题、发布日期、文章标题、文章封面、发布用户、文章内容等信息,并可根据需要进行查看详情、修改或删除等操作,如图所示。
用户反馈管理,在用户反馈管理页面中可以查看反馈用户、学号、姓名、反馈日期、反馈内容、审核状态、审核回复等信息,并可根据需要进行查看详情、修改或删除等操作,如图所示。
求助信息管理,在求助信息管理页面中可以查看求助标题、求助类型、求助日期、发布用户、求助内容、备注信息等信息,并可根据需要进行查看详情、修改或删除等操作,如图所示。
五、关键代码
/**
* 用户账户:用于保存用户登录信息(User)表控制层
*/
@Slf4j
@RestController
@RequestMapping("user")
public class UserController extends BaseController<User, UserService> {
/**
* 服务对象
*/
@Autowired
public UserController(UserService service) {
setService(service);
}
/**
* Token服务
*/
@Autowired
private AccessTokenService tokenService;
@Autowired
private UserGroupService userGroupService;
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 找回密码
* @param form
* @return
*/
@PostMapping("forget_password")
public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
JSONObject ret = new JSONObject();
String username = form.getUsername();
String code = form.getCode();
String password = form.getPassword();
// 判断条件
if(code == null || code.length() == 0){
return error(30000, "验证码不能为空");
}
if(username == null || username.length() == 0){
return error(30000, "用户名不能为空");
}
if(password == null || password.length() == 0){
return error(30000, "密码不能为空");
}
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",username);
Query select = service.select(query, service.readConfig(request));
List list = select.getResultList();
if (list.size() > 0) {
User o = (User) list.get(0);
JSONObject query2 = new JSONObject();
JSONObject form2 = new JSONObject();
// 修改用户密码
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用户不存在");
}
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
Query ret = service.count(query, service.readConfig(request));
List list = ret.getResultList();
Object s = list.get(0);
int count = Integer.parseInt(list.get(0).toString());
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密码修改失败!");
}
/**
* 登录态
* @param request
* @return
*/
@GetMapping("state")
public Map<String, Object> state(HttpServletRequest request) {
JSONObject ret = new JSONObject();
// 获取状态
String token = request.getHeader("x-auth-token");
// 根据登录态获取用户ID
Integer userId = tokenGetUserId(token);
log.info("[返回userId] {}",userId);
if(userId == null || userId == 0){
return error(10000,"用户未登录!");
}
// 根据用户ID获取用户
Map<String,String> query = new HashMap<>();
query.put("user_id" ,String.valueOf(userId));
// 根据用户ID获取
Query select = service.select(query,service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));
user.put("token",token);
ret.put("obj",user);
return success(ret);
} else {
return error(10000,"用户未登录!");
}
}
/**
* 登录态
* @param request
* @return
*/
@GetMapping("quit")
public Map<String, Object> quit(HttpServletRequest request) {
String token = request.getHeader("x-auth-token");
JSONObject ret = new JSONObject();
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
try{
tokenService.delete(query,service.readConfig(request));
}catch (Exception e){
e.printStackTrace();
}
return success("退出登录成功!");
}
/**
* 获取登录用户ID
* @param token
* @return
*/
public Integer tokenGetUserId(String token) {
log.info("[获取的token] {}",token);
// 根据登录态获取用户ID
if(token == null || "".equals(token)){
return 0;
}
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
AccessToken byToken = tokenService.findOne(query);
if(byToken == null){
return 0;
}
return byToken.getUser_id();
}
/**
* 重写add
* @return
*/
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> map = service.readBody(request.getReader());
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
}
六、数据库设计
数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示用户工作环境中所涉及的事物,属性则是对实体特性的描述。在系统设计当中数据库起着决定性的因素。下面设计出这几个关键实体的实体—关系图。
七、结论
本系统通过对java和Mysql数据库的简介,从硬件和软件两反面说明了高校报修与互助平台小程序的可行性,本文结论及研究成果如下:实现了java与Mysql相结合构建的高校报修与互助平台小程序,网站可以响应式展示。通过本次高校报修与互助平台小程序的研究与实现,我感到学海无涯,学习是没有终点的,而且实践出真知,只有多动手才能尽快掌握它,经验对系统的开发非常重要,经验不足,就难免会有许多考虑不周之处。比如要有美观的界面,更完善的功能,才能吸引更多的用户。
由于在此之前对于java知识没有深入了解,所以从一开始就碰到许多困难,例如一开始的页面显示不规范、数据库连接有问题已经无法实现参数的传递等等,不过通过在网上寻找有关资料以及同学的帮助下最后都得到了解决,在此过程中,我不仅学到了很多知识,也提高了自己解决问题的能力,尤其是学会如何从大量的信息中筛选出所需有用的信息,同时我更加深刻的体会到了,虽然书本上的大部分知识都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们一定要通过实践才能找到解决问题的方案。在此次毕业设计活动中,我不断的提高了自己,也得到了宝贵的经验,我相信这些对我以后的发展都会有很大帮助。
通过这次高校报修与互助平台小程序的开发,我参考了很多相关系统的例子,取长补短,吸取了其他系统的长处,逐步对该系统进行了完善,但是该系统还是有很多的不足之处,有待以后进一步学习。
实践证明,高校报修与互助平台小程序有着非常好的发展前景,经过测试运行,系统各项功能都十分完善,界面漂亮,使用方便,操作容易,在技术理论上已经成熟。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)