二、相关技术介绍
2.1 spring
Spring 框架是Java技术平台上的一种常见开源应用框架,提具有控制反转IOC的容器。尽管长时间以来Spring框架自身对编程没有限制,但是其在Java应用中的频繁使用让它很受青睐,所有后来让它作为EJB(EnterpriseJavaBeans)模型信息补充,java Spring框架为开发提供了一系列技术解决方案,比如:利用控制反转IOC的特性,通过实现依赖注入来实现管理整个对象生命周期容器化,利用java面向切面编程技术进行声明式事务管理,整合各种持久化技术管理数据的访问,提供了很多优秀的Web框架方便开发、JAVA Spring框架具有控制反转IOC特性,IOC主要在方便项目维护和测试时期,它提供了一种通过Java反射机制对Java对象进行统一配置与各种管理的方法。
2.2 Spring MVC
Spring MVC框架是一个经典的MVC流程框架,通过实现ModelView以及Controller处理器来很好地将数据和业务以及展现层进行完全分离。从这样的一个角度来说的话,Spring MVC、Struts以及Struts2非常的类似。SpringMVC总体设计是围绕DispatcherServlet前端控制器来展开的,DispatcherServlet负责将前端请求发送到特定的handler映射。通过配置的handler mappings---view resolution---locale以及theme resolution来处理收到的请求并且转到对应的视图处理器。Spring MVC请求业务处理的整体流程如下展示:
2.3 mybatis
MyBatis框架是底层JDBC访问数据库的封装,它使得底层访问数据库的操作是透明的。MyBatis的操作是基于一个SQL SessionFactory实例。MyBatis框架通过各种配置文件与特定对象实体类的映射Mapper文件相关联,并且Mapper文件配置了每个对象到数据库的SQL映射。当与数据库交互时,通过SQLSessionFactory实例获取SQLSession对象并执行SQL命令。访问数据库。
2.4 jQuery
JQuery框架是一个快速、经典和简单的JavaScript前端框架计划。它是继Prototype之后的又一个优秀的JavaScript代码基础框架。jQuery设计的目的是写的少,做的多,也就是说写的代码少。它做的事情越多,就封装了常见的JavaScript功能和代码,并提供了一个简单的JavaScript设计相关的模式,用于优化HTML文档操作、事件处理、CSS样式化、动画设计和Ajax请求交互。
2.5 Mysql
MySQL数据库是与PHP、Java、c++ / c#等主流编程语言技术紧密结合的安全、跨平台、高效的轻量级数据库系统。MySQL数据库系统是由瑞典公司MySQL AB开发、发布和支持的。它于1995年由MySQL的最初开发者David Axmark和Michael Monty Wdenius创建。
目前,MySQL数据库在互联网网站上被广泛使用。由于MySQL数据库体积小、速度快、整体拥有成本很低,尤其是在开源的特点上,很多互联网公司都采用了MySQL数据库来降低开发系统的成本。
MySQL数据库是世界上最快的SQL数据库之一。因为它有许多其他数据库没有的特性,MySQL数据库也是免费和开源的。用户可以通过网络直接从网站上下载MySQL数据库并使用,无需支付任何费用。
2.6 SpringBoot
SpringBoot是一个新的开源轻量级框架,由Pivotal团队于2013年开始开发,第一个版本于2014年4月发布。它是基于Spring4.0设计的,不仅继承了Spring框架的优秀特性,而且通过简化配置简化了Spring应用程序的整个设置和开发过程。此外,SpringBoot集成了大量框架来解决版本冲突和依赖包引用不稳定的问题。
SpringBoot功能包括:
(1)你可以创建独立的Spring应用程序,并基于它们的Maven或Gradle插件创建可执行的jar和Wars;
(2)嵌入Tomcat或Jetty等Servlet容器;
(3)提供“starter”项目对象模型(POMS)的自动配置,简化Maven的配置;
(4)只要可能,自动配置Spring容器;
(5)提供现成的功能,如度量、健康检查和外部化配置;
(6)绝对不需要代码生成,不需要XML配置。[1] [2]
在SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。OutOfBox是一种开箱即用的方法,通过向Maven项目的POM文件添加依赖包,然后使用相应的注释,而不是冗长的XML配置文件,可以在开发期间管理对象的生命周期。该特性将开发人员从复杂的配置和依赖管理中解放出来,并允许他们更多地关注业务逻辑。约定优于配置是一种软件设计范式,其中目标结构由SpringBoot本身配置,开发人员将信息添加到结构中。这降低了一些灵活性并增加了BUG定位的复杂性,但它减少了开发人员需要做出的决策数量,减少了大量XML配置,并实现了代码编译、测试和打包的自动化。
从前端到后台描述了SpringBoot应用系统开发模板的基本架构设计:前端经常使用模板引擎,主要是Freemarker和Thymeleaf,它们是用Java语言编写的,用来呈现模板并输出相应的文本,这样接口设计就与应用程序的逻辑分离了。同时,前端开发也使用了Bootstrap、AngularJS、jQuery等。浏览器的数据传输格式包括JSON、non-XML和RESTfulAPI。对于数据访问层,主要有Hibernate、MyBatis、JPA等持久性层框架;数据库常用MySQL;推荐开发工具IntelliJidea。
三、需求分析和可行性
3.1 系统功能概述
3.1主要模块设计如下:
3.2 系统运行环境
开发系统: Windows7。
JDK版本: Java JDK1.8
开发工具: IDEA
数据库版本: mysql5
数据库可视化工具: navicat for mysql
服务器:apache tomcat 7
其他工具:谷歌浏览器控制台调整网页布局
Postman接口工具进行接口测试
3.3 技术设计
此系统需要java面向对象编程基础,数据库知识和功能分析。根据目前阶段所掌握的相关专业知识,以及这学期和之前学习掌握的java编程知识和数据库应用知识以及前端知识做出一个这样的基于springboot+vue前后端分离的轻量级框架网页版的党建信息管理管理平台。
3.4 社会可行性
在互联网技术高速发展的今天,通过互联网的传播会让企业更容易的创造更多的经济效益,利用互联网的传播党建信息管理、通过网页版党建信息管理平台的实现 ,让更多人了解到党建新闻、组织风采等相关信息、得到了更大的宣传,在这样一个大环境下把资源统筹规化起来,就会获得高效的党建党员信息和推广。
3.5 安全性可行性
人们在使用网络的时候越来越重视信息的安全性,这也促进了加密技术的发展,同时应用加密技术能够有效提升网络信息的安全性。本党建信息管理平台系统采用了几种加密保护、对本地用户密码采用MD5加密方式、页面发送请求获取数据采用关键部分采用post请求对数据传输的保护机制、避免请求数据暴露在浏览器上面、以及不同用户具有不同权限操作通过这些安全性操作,保证系统的稳定性以及可靠性。
3.6 经济可行性
服务器端的安装简洁明了,客户机无需再装任何软件,通过浏览器就可以直接访问,可以直接接入 Internet ,无论您身在何处只要您可以访问 Internet 都可以使用本系统。本系统对计算机配置的要求不高,企业机房更换下来的低配置电脑都可以完全满足需要、所以在经济上具有完全的可行性。
3.7 法律可行性
本系统是自行开发的党建信息管理平台系统,是很有实际意义的系统,开发环境软件和使用的数据库都是开源代码, 开发这个系统不同于开发普通的系统软件,不存在侵权等问题,即法律上是可行的。
四、系统设计
4.1 系统模式架构
本系统经典的采用B/S架构(浏览器、服务器),是采用浏览器和服务器架构模式设计的架构,随着Internet技术的兴起,对C/S架构模式的一种改变升级或改进。目前,在该架构的应用下,用户通过WWW.xxx.com浏览器实现数据访问和操作。一小部分事务逻辑在前端页面实现,主要业务事务逻辑在服务器端实现,形成三层结构MVC。B/S架构是Web兴起后主流的网络架构设计模式。Web浏览器是目前最重要的客户端应用软件之一。该模式形成了一个统一的客户端,将系统功能的所有核心部分集中在服务器上实现。简化系统开发和维护。只要客户端安装了浏览器就可以操作,服务器端安装了Oracle、MySQL、Sybase等数据库。浏览器通过Web Server和数据库获取数据。简化客户端计算机的负载,降低系统维护和升级的成本和工作量,降低用户的成本。
4.2系统层次架构
系统根据以上的逻辑结构,分为3层结构。
系统按照处理层次从上至下依次划分为
(1)展现层:
它处理与用户的交互界面、数据传输,信息收集等。
(2)应用层:
它是系统功能逻辑处理层,主要处理展现层发出的请求,并将处理结果返回展现层。
(3)核心层:
它是系统运行核心及应用层的基础,提供应用层权限控制、数据读取等。
4.3系统功能详情设计
系统主要设计采用Java语言开发、采用springboot和vue前后端分离的模式、java为后台框架、数据库框架采用mybatis、前端采用vue、elemeent ui、jquery、layui框架等
主要模块设计如下:
1.用户模块管理:用户登录、用户注册、用户的查询、删除操作、用户分为不同权限、可以通过角色来灵活控制。
2.首页介绍:登录后进入首页查看系统设计的基本宣传信息。
3.党建数据分析展示:查看党建数据的树状图信息
4.党建用户管理:用户添加、修改、删除、和权限修改。
5.党建职位管理:党建职位的添加、修改、删除和查看以及权限分配。
6.党建菜单管理:党建菜单的添加、修改、删除和查看以及权限分配。
7.系统SQL监控:查看系统的运行情况以及SQL数据的情况、运行状态、时间
8.系统组织架构:添加党建组织架构、修改、查看以及删除和分配权限等。
9.通知公告管理:添加党建通知公告信息、修改、查看以及删除等。
10.党建要闻管理:添加党建要闻信息、修改、查看以及删除等。
11.组织风采管理:添加组织风采信息、修改、查看以及删除等。
12.党建资料管理:添加上传党建资料信息、修改、查看以及删除等。
13.组织发展学习:添加组织发展信息、修改、查看以及删除等
14.组织发展考试:添加组织发展考试信息、修改、查看以及删除等
15.修改密码和退出等:
4.4主流程描述
- 5项目架构方案图
五、系统实现
5.1系统主要功能主要设计
5.1.1 用户登录
用户输入登录地址:http://localhost:8001/#/login进入到登录页面、输入账号密码进行登录验证、
<h3 class="login-title">党建系统登录</h3>
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" status-icon>
<el-form-item prop="userName">
<el-input v-model="dataForm.userName" placeholder="帐号"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input>
</el-form-item>
<el-form-item prop="captcha">
<el-row :gutter="20">
<el-col :span="14">
<el-input v-model="dataForm.captcha" placeholder="验证码">
</el-input>
</el-col>
<el-col :span="10" class="login-captcha">
<img :src="captchaPath" @click="getCaptcha()" alt="">
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-button class="login-btn-submit" type="danger" @click="dataFormSubmit()">登录</el-button>
</el-form-item>
</el-form>
后台登录代码实现:
验证登录信息是否正确、获取账号密码校验、返回前端对应信息。
/**
* 登录
*/
@PostMapping("/sys/login")
public Map<String, Object> login(@RequestBody SysLoginForm form)throws IOException {
boolean captcha = sysCaptchaService.validate(form.getUuid(), form.getCaptcha());
// if(!captcha){
// return R.error("验证码不正确");
// }
//用户信息
SysUserEntity user = sysUserService.queryByUserName(form.getUsername());
//账号不存在、密码错误
if(user == null || !user.getPassword().equals(new Sha256Hash(form.getPassword(), user.getSalt()).toHex())) {
return R.error("账号或密码不正确");
}
//账号锁定
if(user.getStatus() == 0){
return R.error("账号已被锁定,请联系管理员");
}
//生成token,并保存到数据库
R r = sysUserTokenService.createToken(user.getUserId());
return r;
}
5.1.2 党建信息管理首页
党建党员信息管理后台代码实现:
/**
* 前台分页查询文章
*
* @param article
* @param publishDates
* @param page
* @param pageSize
* @return
*/
@RequestMapping("/list")
public Map<String, Object> list(Article article,
@RequestParam(value = "publishDates", required = false) String publishDates,
@RequestParam(value = "p", required = false) Integer p,
@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "pageSize", required = false) Integer pageSize, HttpServletRequest request) {
Map<String, Object> resultMap = new HashMap<String, Object>();
User user = (User) request.getSession().getAttribute("user");
List<Article> retArt = new ArrayList<>();
String s_bPublishDate = null; // 开始时间
String s_ePublishDate = null; // 结束时间
if (StringUtil.isNotEmpty(publishDates)) {
String[] strs = publishDates.split(" - "); // 拆分时间段
s_bPublishDate = strs[0];
s_ePublishDate = strs[1];
}
if (p != null && p == 1) {
User u = userService.findById(user.getUserId());
article.setUserId(u.getUserId());
} else if (p != null && p == 2) {
User u = userService.findById(user.getUserId());
String artIds = u.getArticleIds();
List<String> result = new ArrayList<>();
if (StringUtils.isNotBlank(artIds)) {
result = Arrays.asList(StringUtils.split(artIds, ","));
}
List<Integer> retIds = new ArrayList<>();
for (String temp : result) {
retIds.add(Integer.valueOf(temp).intValue());
}
retArt = articleService.findByListId(retIds);
}
Long total = articleService.getCount(article, s_bPublishDate, s_ePublishDate);
if (p != null && p == 2) {
total = (long) retArt.size();
}
int totalPage = (int) (total % pageSize == 0 ? total / pageSize : total / pageSize + 1); // 总页数
resultMap.put("totalPage", totalPage);
resultMap.put("errorNo", 0);
if (p != null && p == 2) {
resultMap.put("data", retArt);
} else {
resultMap.put("data", articleService.list(article, s_bPublishDate, s_ePublishDate, page - 1, pageSize));
}
resultMap.put("total", total);
return resultMap;
}
5.1.3 党建信息用户列表
用户添加:
后台主要代码实现:
/**
* 保存用户
*/
@SysLog("保存用户")
@PostMapping("/save")
@RequiresPermissions("sys:user:save")
public R save(@RequestBody SysUserEntity user){
ValidatorUtils.validateEntity(user, AddGroup.class);
user.setCreateUserId(getUserId());
sysUserService.saveUser(user);
return R.ok();
} }
5.2.4 党建信息管理发布
点击添加党建新闻输入相关信息完成添加。
前端主要代码样式:
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="id" header-align="center" align="center" width="60" label="ID"></el-table-column>
<el-table-column prop="ty" header-align="center" align="center" label="要闻分类" width="120"></el-table-column>
<el-table-column prop="unit" header-align="center" align="center" label="发布单位" width="140"></el-table-column>
<el-table-column prop="title" header-align="center" align="center" label="党建要闻标题" width="400"></el-table-column>
<el-table-column prop="num" header-align="center" align="center" label="发布编号" width="120"></el-table-column>
<el-table-column prop="createBy" header-align="center" align="center" label="发布人" ></el-table-column>
<el-table-column prop="createTime" header-align="center" align="center" label="发布时间" ></el-table-column>
<el-table-column fixed="right" header-align="center" align="center" label="操作">
后台代码实现:
/**
* 添加党建新闻信息 */
@PostMapping("/save")
@RequiresPermissions("sys:news:save")
public R save(@RequestBody News news){
news.setCreateBy(getUser().getUsername());
news.setCreateTime(new Date());
newsService.saveOrUpdate(news);
return R.ok();
}
}
5.2.5 党建信息组织架构
后台代码实现:
/**
* 导航党建菜单
*/
@GetMapping("/nav")
public R nav(){
List<SysMenuEntity> menuList = sysMenuService.getUserMenuList(getUserId());
Set<String> permissions = shiroService.getUserPermissions(getUserId());
return R.ok().put("menuList", menuList).put("permissions", permissions);
}
/**
* 所有党建组织菜单列表
*/
@GetMapping("/list")
@RequiresPermissions("sys:menu:list")
public List<SysMenuEntity> list(){
List<SysMenuEntity> menuList = sysMenuService.list();
HashMap<Long, SysMenuEntity> menuMap = new HashMap<>(12);
for (SysMenuEntity s : menuList) {
menuMap.put(s.getMenuId(), s);
}
for (SysMenuEntity s : menuList) {
SysMenuEntity parent = menuMap.get(s.getParentId());
if (Objects.nonNull(parent)) {
s.setParentName(parent.getName());
}
}
return menuList;
}
5.2.6 添加党建组织架构
添加/**
* /**
* 选择菜单(添加、修改菜单)
*/
@GetMapping("/select")
@RequiresPermissions("sys:menu:select")
public R select(){
//查询党建列表数据
List<SysMenuEntity> menuList = sysMenuService.queryNotButtonList();
//添加党建顶级菜单
SysMenuEntity root = new SysMenuEntity();
root.setMenuId(0L);
root.setName("一级菜单");
root.setParentId(-1L);
root.setOpen(true);
menuList.add(root);
return R.ok().put("menuList", menuList);
}
}
5.2.7 党建组织风采列表
/**
* 前端列表数据渲染 * @Title: add
*/
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="id" header-align="center" align="center" width="60" label="ID"></el-table-column>
<el-table-column prop="ty" header-align="center" align="center" label="风采分类" width="120"></el-table-column>
<el-table-column prop="unit" header-align="center" align="center" label="发布单位" width="140"></el-table-column>
<el-table-column align="center" prop="img" label="图片">
<template slot-scope="scope">
<el-popover
placement="right"
title=""
trigger="hover">
<img :src="scope.row.img" style="width: 800px;height: 600px"/>
<img slot="reference" :src="scope.row.img" :alt="scope.row.img" style="max-height: 50px;max-width: 60px">
</el-popover>
</template>
</el-table-column>
<el-table-column prop="title" header-align="center" align="center" label="组织风采标题" width="360"></el-table-column>
<el-table-column prop="num" header-align="center" align="center" label="发布编号" width="120"></el-table-column>
<el-table-column prop="createBy" header-align="center" align="center" label="发布人" ></el-table-column>
<el-table-column prop="createTime" header-align="center" align="center" label="发布时间" ></el-table-column>
<el-table-column fixed="right" header-align="center" align="center" label="操作">
}
5.2.8修改组织风采信息
* 修改
*/
@SysLog("修改组织风采菜单")
@PostMapping("/update")
@RequiresPermissions("sys:menu:update")
public R update(@RequestBody SysMenuEntity menu){
//数据校验
verifyForm(menu);
sysMenuService.updateById(menu);
return R.ok();
}
5.2.9 上传党建资料文档
前端代码样式:
<el-form-item label="资料类型" prop="classify">
<el-input v-model="dataForm.classify" placeholder="资料类型"></el-input>
</el-form-item>
<el-form-item label="上传文件" style="margin-left: 7%;" prop="File">
<el-upload
class="avatar-uploader"
ref="upload"
:action="url"
:on-preview="handlePreview"
:auto-upload="false"
:before-upload="onBeforeUpload"
:on-change="handleChange"
:data="dataForm"
>
<el-button size="small" type="primary">点击上传</el-button> <img src="{{d.headPortrait}}" class="layui-nav-img" />{{d.nickname}}
</script>
5.2.10 查看党建资料文档
后台代码:
/**
//查看附件信息
// @RequiresPermissions("sys:file:info")
@RequestMapping("file/getFileDetail")
public R getFileDetail(HttpServletRequest request) {
File file = fileServiceImpl.getById(request.getParameter("id"));
return R.ok().put("url",file.getPath());
}
5.2.11 修改密码
后台代码:
/**
* 修改登录用户密码
*/
@SysLog("修改密码")
@PostMapping("/password")
public R password(@RequestBody PasswordForm form){
Assert.isBlank(form.getNewPassword(), "新密码不为能空");
//sha256加密
String password = new Sha256Hash(form.getPassword(), getUser().getSalt()).toHex();
//sha256加密
String newPassword = new Sha256Hash(form.getNewPassword(), getUser().getSalt()).toHex();
//更新密码
boolean flag = sysUserService.updatePassword(getUserId(), password, newPassword);
if(!flag){
return R.error("原密码不正确");
}
return R.ok();
}
}
- 数据库主表设计
6.1数据库表设计
数据库采用mysql5版本、满足数据库设计三范式。
编码采用utf8 -- UTF-8 Unicode
排序规则采用utf8_general_ci
6.2数据库三范式要求:
一、第一范式
1NF是对属性的原子性,要求属性具有原子性,不可再分解;
二、第二范式
2NF是对记录的唯一性,要求记录有唯一标识,即实体的唯一性,即不存在部分依赖;
三、第三范式
3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;
6.3数据库表ER图
6.4用户表设计
文档版本:V1.0.0
文档描述:数据库表设计描述
表dj_news(党建新闻表)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | int | 10 | 0 | N | Y | ||
2 | title | varchar | 255 | 0 | Y | N | 标题 | |
3 | ty | varchar | 255 | 0 | Y | N | 类型 | |
4 | create_time | datetime | 19 | 0 | Y | N | 发布时间 | |
5 | unit | varchar | 255 | 0 | Y | N | 发布单位 | |
6 | num | varchar | 255 | 0 | Y | N | 发布编号 | |
7 | content | mediumtext | 16777215 | 0 | Y | N | 主要内容 | |
8 | create_by | varchar | 255 | 0 | Y | N | 发布人 | |
9 | bz | varchar | 255 | 0 | Y | N | 备注信息 | |
10 | kind | varchar | 255 | 0 | Y | N | 种类(党建要闻 组织风采 ) | |
11 | img | varchar | 255 | 0 | Y | N | 图片地址 |
表exam(党建组织发展考试表)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | int | 10 | 0 | N | Y | Id | |
2 | title | varchar | 255 | 0 | Y | N | 标题 | |
3 | answ | varchar | 255 | 0 | Y | N | 答案 | |
4 | user_name | varchar | 255 | 0 | Y | N | 用户姓名 | |
5 | exam_time | datetime | 19 | 0 | Y | N | 考试时间 | |
6 | user_score | varchar | 255 | 0 | Y | N | 用户分数 | |
7 | is_qualified | varchar | 255 | 0 | Y | N | 是否合格 | |
8 | ty | varchar | 255 | 0 | Y | N | 类型 | |
9 | p_name | varchar | 255 | 0 | Y | N | 父级菜单 | |
10 | mobile | varchar | 255 | 0 | Y | N | 手机号 |
表file(党建文件资料表)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | int | 10 | 0 | N | Y | Id | |
2 | path | varchar | 255 | 0 | Y | N | 路径 | |
3 | file_name | varchar | 255 | 0 | Y | N | 附件名称 | |
4 | file_type | varchar | 255 | 0 | Y | N | 类型 | |
5 | classify | varchar | 255 | 0 | Y | N | 分类 | |
6 | create_time | datetime | 19 | 0 | Y | N | 创建时间 | |
7 | create_by | varchar | 255 | 0 | Y | N | 创建人 |
表inform(党建通知公告表)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | int | 10 | 0 | N | Y | Id | |
2 | title | varchar | 255 | 0 | Y | N | 标题 | |
3 | content | text | 65535 | 0 | Y | N | 内容 | |
4 | create_time | timestamp | 19 | 0 | Y | N | CURRENT_TIMESTAMP | 创建时间 |
5 | create_by | varchar | 255 | 0 | Y | N | 创建人 | |
6 | bz | varchar | 255 | 0 | Y | N | 备注信息 |
表sys_captcha (系统验证码)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | uuid | char | 36 | 0 | N | Y | uuid | |
2 | code | varchar | 6 | 0 | N | N | 验证码 | |
3 | expire_time | datetime | 19 | 0 | Y | N | 过期时间 |
表sys_config (系统配置信息表)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | bigint | 20 | 0 | N | Y | ||
2 | param_key | varchar | 50 | 0 | Y | N | key | |
3 | param_value | varchar | 2000 | 0 | Y | N | value | |
4 | status | tinyint | 4 | 0 | Y | N | 1 | 状态 0:隐藏 1:显示 |
5 | remark | varchar | 500 | 0 | Y | N | 备注 |
表sys_dept (部门管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | dept_id | bigint | 20 | 0 | N | Y | ||
2 | parent_id | bigint | 20 | 0 | Y | N | 上级部门ID,一级部门为0 | |
3 | name | varchar | 50 | 0 | Y | N | 部门名称 | |
4 | order_num | int | 10 | 0 | Y | N | 排序 | |
5 | del_flag | tinyint | 4 | 0 | Y | N | 0 | 是否删除 -1:已删除 0:正常 |
6 | remark | varchar | 255 | 0 | Y | N |
表sys_log (系统日志)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | bigint | 20 | 0 | N | Y | ||
2 | username | varchar | 50 | 0 | Y | N | 用户名 | |
3 | operation | varchar | 50 | 0 | Y | N | 用户操作 | |
4 | method | varchar | 200 | 0 | Y | N | 请求方法 | |
5 | params | varchar | 5000 | 0 | Y | N | 请求参数 | |
6 | time | bigint | 20 | 0 | N | N | 执行时长(毫秒) | |
7 | ip | varchar | 64 | 0 | Y | N | IP地址 | |
8 | create_date | datetime | 19 | 0 | Y | N | 创建时间 |
表sys_menu (菜单管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | menu_id | bigint | 20 | 0 | N | Y | ||
2 | parent_id | bigint | 20 | 0 | Y | N | 父菜单ID,一级菜单为0 | |
3 | name | varchar | 50 | 0 | Y | N | 菜单名称 | |
4 | url | varchar | 200 | 0 | Y | N | 菜单URL | |
5 | perms | varchar | 500 | 0 | Y | N | 授权(多个用逗号分隔,如:user:list,user:create) | |
6 | type | int | 10 | 0 | Y | N | 类型 0:目录 1:菜单 2:按钮 | |
7 | icon | varchar | 50 | 0 | Y | N | 菜单图标 | |
8 | order_num | int | 10 | 0 | Y | N | 排序 |
表sys_oss (文件上传)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | bigint | 20 | 0 | N | Y | ||
2 | url | varchar | 200 | 0 | Y | N | URL地址 | |
3 | create_date | datetime | 19 | 0 | Y | N | 创建时间 |
表sys_role (角色)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | role_id | bigint | 20 | 0 | N | Y | ||
2 | role_name | varchar | 100 | 0 | Y | N | 角色名称 | |
3 | remark | varchar | 100 | 0 | Y | N | 备注 | |
4 | create_user_id | bigint | 20 | 0 | Y | N | 创建者ID | |
5 | create_time | datetime | 19 | 0 | Y | N | 创建时间 | |
6 | dept_id | int | 10 | 0 | Y | N |
表sys_role_dept (角色与部门对应关系)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | bigint | 20 | 0 | N | Y | ||
2 | role_id | bigint | 20 | 0 | Y | N | 角色ID | |
3 | dept_id | bigint | 20 | 0 | Y | N | 部门ID |
表sys_role_menu (角色与菜单对应关系)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | bigint | 20 | 0 | N | Y | ||
2 | role_id | bigint | 20 | 0 | Y | N | 角色ID | |
3 | menu_id | bigint | 20 | 0 | Y | N | 菜单ID |
表sys_user (系统用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | bigint | 20 | 0 | N | Y | ||
2 | username | varchar | 50 | 0 | N | N | 用户名 | |
3 | password | varchar | 100 | 0 | Y | N | 密码 | |
4 | salt | varchar | 20 | 0 | Y | N | 盐 | |
5 | | varchar | 100 | 0 | Y | N | 邮箱 | |
6 | mobile | varchar | 100 | 0 | Y | N | 手机号 | |
7 | status | tinyint | 4 | 0 | Y | N | 状态 0:禁用 1:正常 | |
8 | create_user_id | bigint | 20 | 0 | Y | N | 创建者ID | |
9 | create_time | datetime | 19 | 0 | Y | N | 创建时间 | |
10 | dept_id | int | 10 | 0 | Y | N | ||
11 | stage | varchar | 255 | 0 | Y | N | ||
12 | parent_name | varchar | 255 | 0 | Y | N | 部门名称 |
表sys_user_role (用户与角色对应关系)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | id | bigint | 20 | 0 | N | Y | ||
2 | user_id | bigint | 20 | 0 | Y | N | 用户ID | |
3 | role_id | bigint | 20 | 0 | Y | N | 角色ID |
表sys_user_token (系统用户Token)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | bigint | 20 | 0 | N | Y | ||
2 | token | varchar | 100 | 0 | N | N | token | |
3 | expire_time | datetime | 19 | 0 | Y | N | 过期时间 | |
4 | update_time | datetime | 19 | 0 | Y | N | 更新时间 |
七、开发心得体会
经过近期对 java 面向对象程序设计、前端知识以及JAVA 框架的掌握和学习,以及这段时间本教育教学系统的开发,让我更加了解到 java 学习的重要性。在开发这个系统是哪个,我完成了多个实验以及党建信息管理平台的功能测试,阶段的系统开发学习当中,我从认识到熟悉java,而后到能够自主运用相关技术,我发现了它确实有很多方便之处,比如java集抽象性和封装性以及继承性和多态性于一体,实现了对代码重用和代码扩充功能,提高了整体软件开发的速度和效率。比如管理员添加用户的时候报java.lang.NullPointException、解决的方法:查看控制台打印信息、发现添加的时候未填写相关信息、报java.lang.NullPointException、通过断电调试发现用户信息为空的数据项、在前端保存的时候必须填写用户完整相关信息或者数据库设置字段可以为空都可以解决、 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术。