绪论
1.1 系统研究目的意义
随着信息技术的不断发展,我们现在已经步入了信息化的时代了,而信息时代的代表便是网络技术的日渐成熟,而现在网络已经和我们的生活紧密的联系起来了,我们不敢想象没有网络我们的生活会像怎么样,信息化时代的到来成为不可抗拒的潮流,人类文明正在进入一个崭新的时代。因此,一个好的酒庄信息内部管理系统也以方便、快捷、费用低、绿色环保的优点正慢慢地进入这个行业和领域,将传统的酒庄员工管理方式和酒庄信息的管理彻底的解脱出来,提高效率,减轻工人人员以往繁忙的工作,加速信息的更新速度,使酒庄管理员或企业管理层第一时间了解到酒庄的具体的信息, 从而进一步的进行对酒庄用户、信息、以及酒品信息进行调度等。本次针对这问题设计了这个系统,本着科学化、规范化、系统化的原则,设计和开发了酒庄内部信息管理系统。
1.2研究的主要内容
该酒庄内部信息管理系统主要研究内容是实现各级人员对系统各项模块功能的管理、用户信息管理、菜单信息管理、角色信息管理、红酒类型管理、红酒信息管理审核、管理员群发邮件和普通用户发送邮件给管理员以及接受邮件和一些通知公告信息的查看浏览以及发布等。
二、相关技术介绍分析
2.1 spring技术
Spring 框架是Java技术平台上的一种常见开源应用框架,提具有控制反转IOC的容器。尽管长时间以来Spring框架自身对编程没有限制,但是其在Java应用中的频繁使用让它很受青睐,所有后来让它作为EJB(EnterpriseJavaBeans)模型信息补充,java Spring框架为开发提供了一系列技术解决方案,比如:利用控制反转IOC的特性,通过实现依赖注入来实现管理整个对象生命周期容器化,利用java面向切面编程技术进行声明式事务管理,整合各种持久化技术管理数据的访问,提供了很多优秀的Web框架方便开发、JAVA Spring框架具有控制反转IOC特性,IOC主要在方便项目维护和测试时期,它提供了一种通过Java反射机制对Java对象进行统一配置与各种管理的方法。JAVA Spring框架通过容器管理对象的整个生命周期,spring容器通过扫描XML配置文件来配置对象,java开发者通过依赖注入查来获得对象或查找对象。java Spring框架具有面向切面编程(AOP)框架的功能。SpringAOP框架基于经典的java设计模式--代理模式,可以同时运行时可配置;java AOP框架主要技术针对模块之间得交叉关注点进行模块化管理。Spring框架的AOP功能仅提供基本的AOP特性功能,虽然无法与AspectJ框架相比较,但是通过与AspectJ框架的集成,也可以满足基本功能需求。Spring框架下的事务管理、远程访问等功能均可以通过使用Spring-AOP技术来实现。Spring事务管理为Java平台开发者带来了一种抽象的机制,使本地事物和全局事务、嵌套事务能够与保存点在一起工作,而且可以在Java平台的任何环境中工作、Spring集成 了多种事务,系统可以通过事务、XML以及Java注解进行事务配置,而且事务框架集成了消息传递和功能和缓存的功能。Spring的数据访问解决了开发者在应用程序中使用数据库时遇见的常见困难。它不仅对Java:JDBC、iBATS、MyBATIs框架、Hibernate框架、Java数据对象(JDO)、和ApacheCayne等流行的数据访问框架中提供技术支持。并且可以与Spring事务管理一起来使用,提供数据访问抽象。java Spring框架最开始是没有打算构建一个自己的WebMVC的框架,但是开发人员在开发设计过程中认为现有的Struts框架的表现层和请求处理层之间、请求处理层和模型之间的分离还不够彻底,所有创建了经典的SpringMVC框架。
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 JSP技术技术
JSP(全称JavaServer-Pages)是由Sun领导并创建的一种动态Web页面JAVA技术。JSP部署在Web服务器上,动态生成HTML、XML和其他JAVA Web页面,以响应客户端发送的特定请求。并将数据返回给请求者根据发送的内容request.JSP技术是基于JAVA语言的脚本语言,为用户的HTTP、HTTPS请求提供服务,并能处理复杂的业务数据和请求与其他JAVA相关程序在服务器上。
JSP是将JAVA相关代码和特定内容更改嵌入到静态页面中,以静态页面为模板,动态生成部分内容。JSP引入XML标记,用于JSP动作调用函数。您还可以创建JSP动态标记库,并像使用标准HTML或XML标记那样使用它们。动态标记库可以增强功能和服务器性能,而不受跨平台问题的限制。Java JSP文件在运行时被编译器转换为更多原始的Servlet底层代码。JSP编译器可以将JSP文件编译为用Java代码编写的Servlet低级代码。然后编译成计算机二进制代码,可以由Java编译器统一快速执行,或直接编译成二进制代码数据。
2.5 jQuery技术
JQuery框架是一个快速、经典和简单的JavaScript前端框架计划。它是继Prototype之后的又一个优秀的JavaScript代码基础框架。jQuery设计的目的是写的少,做的多,也就是说写的代码少。它做的事情越多,就封装了常见的JavaScript功能和代码,并提供了一个简单的JavaScript设计相关的模式,用于优化HTML文档操作、事件处理、CSS样式化、动画设计和Ajax请求交互。
jQuery的核心特性包括:独特的链接语法、简短清晰的多功能对接接口、高效灵活的CSS选择器以及对各种CSS选择器的扩展和扩展能力、方便的插件扩展机制和丰富的插件管理功能。JQuery兼容IE 8.0+、Firefox、谷歌等主流浏览器。
2.6 Mysql技术
MySQL数据库是与PHP、Java、c++ / c#等主流编程语言技术紧密结合的安全、跨平台、高效的轻量级数据库系统。MySQL数据库系统是由瑞典公司MySQL AB开发、发布和支持的。它于1995年由MySQL的最初开发者David Axmark和Michael Monty Wdenius创建。
目前,MySQL数据库在互联网网站上被广泛使用。由于MySQL数据库体积小、速度快、整体拥有成本很低,尤其是在开源的特点上,很多互联网公司都采用了MySQL数据库来降低开发系统的成本。
MySQL数据库是世界上最快的SQL数据库之一。因为它有许多其他数据库没有的特性,MySQL数据库也是免费和开源的。用户可以通过网络直接从网站上下载MySQL数据库并使用,无需支付任何费用。
MySQL的特点
下面是对MySQL特性的概述。
1)强大的
MySQL提供了多种数据库存储引擎,每个引擎都有自己的优势,适合不同的应用,用户可以选择最合适的引擎来获得最高的性能,可以处理每天访问数亿次以上的高强度搜索网站。MySQL5支持事务、视图、存储过程、触发器等。
2)跨平台支持
MySQL支持至少20个开发平台,包括Linux、Windows、FreeBSD、IBMAx、AIX、FreeBSD等。这允许在任何平台上编写的程序无需对程序进行任何更改就可以进行移植。
3)运行速度快
速度是MySQL的一个显著特征。在MySQL中,使用了极快的b树磁盘表(MyISAM)和索引压缩;通过使用优化的单扫描多个连接,可以极快地实现连接;SQL函数使用高度优化的类库实现,运行速度极快。
4)支持面向对象
PHP支持混合编程。编程方法可分为三种:纯面向对象、纯面向过程、面向面对象和面向过程混合。
5)高安全
灵活和安全的权限与密码系统,允许基本的主机身份验证。连接服务器时,所有的密码传输都是加密的,以保证密码的安全性。
6)成本低
MySQL数据库是一个完全免费的产品,用户可以直接通过网络下载。
支持多种开发语言
MySQL支持多种流行的编程语言,包括PHP, ASP。NET, Java, Eiffel, Python, Ruby, Tcl, C, c++, Perl,等等。
8)数据库存储容量大
MySQL数据库的最大有效表大小通常是由操作系统对文件大小的限制决定的,而不是由MySQL的内部限制。InnoDB存储引擎将InnoDB表保存在一个可以从多个文件创建的表空间中。表空间的最大大小是64TB,它可以轻松处理拥有数千万条记录的大型数据库。
9)支持强大的内置功能
PHP提供了大量内置函数,这些函数几乎涵盖了Web应用程序开发的每个方面。它具有内置的数据库连接操作、文件上传和下载功能,MySQL数据库支持大量的扩展库和插件,MySQLI等,可以为JavaWeb应用程序的快速开发提供很好的便利。
MySQL数据库的应用
MySQL数据库是专门用于管理系统数据资源的计算机系统。数据可以以多种形式呈现,如符号、图形、图像、文字、数字和声音等。数据是所有计算机系统的对象。我们熟悉的方式处理是使一个文件,这个过程被编译成一个程序文件,将参与程序的数据根据需求数据文件,然后使用程序调用、数据文件和程序文件保持一定的关系。
随着计算机应用的迅速发展,这种档案管理方法也暴露出其不足之处。例如,它使数据大众化,不易迁移,在不同的网络文件中存储大量重复信息,浪费存储空间,更新不便等。
而数据库系统可以解决上述基本问题。MySQL数据库系统并不是从具体应用出发,是基于数据本身进行管理,它将数据保存在数据库中,组织科学的管理,并借助数据库管理系统进行管理。以它为桥梁,与各种应用程序和应用系统接口,方便快捷地使用数据库中的数据。
其实总体说来简单,数据库其实就是一组计算机语言指令整理后的数据,存储在一个或多个文件域内,而管理数据库的软件就叫做数据库管理系统软件。一个数据库系统
它可以分为数据库、数据库管理系统和数据库管理系统。主流数据库软件包括Oracle、Informix、Sybase、SQL Server、PostgreSQL、MySQL、Foxpro、Teradata等。
数据库在Web开发中的重要地位
归根结底,动态网站是数据的操作,我们平时浏览网页的时候,会发现网页的内容会经常变化,而页面的主体结构却没有变化,新闻是典型的。这是因为我们将新闻存储在数据库中。当用户浏览时,程序会根据用户请求的新闻号从数据库中读取相应的新闻,然后以特定的格式响应用户。
Web系统的开发基本上离不开数据库,因为一切都必须存储在数据库中。所谓动态网站就是基于数据库开发的系统,最重要的是数据管理,或者是我们在数据库的开发过程中围绕编写的程序。因此,作为一名Web程序员,只有掌握了数据库,才能开发软件。
三、需求分析和可行性分析
3.1 系统运行环境
开发系统:Windows7。
JDK版本:Java JDK1.8
开发工具:springboot
数据库版本: mysql5
数据库可视化工具: navicat for mysql
服务器:apache tomcat 7
其他工具:谷歌浏览器控制台调整网页布局
Postman接口工具进行接口测试
3.2 总体技术设计
此系统需要java面向对象编程基础,数据库知识和功能分析。根据目前阶段所掌握的相关专业知识,以及这学期和之前学习掌握的java编程知识和数据库应用知识以及前端知识做出一个这样的基于、springmvc轻量级框架网页版的酒庄内部信息管理系统平台。
3.3 社会可行性分析
在互联网技术高速发展的今天,通过互联网的传播会让企业更容易的创造更多的经济效益以及对红酒信息需求的更好掌控以便及时求援,通过网页版红酒庄内部信息管理平台的实现 ,有了更大的市场和信息,在这样一个大环境下把资源统筹规化起来,就会获得高效的信息和效益。
3.4 安全性可行性分析
人们在使用网络的时候越来越重视信息的安全性,这也促进了加密技术的发展,同时应用加密技术能够有效提升网络信息的安全性。红酒庄内部信息管理平台平台采用了加密保护、页面发送请求获取数据采用关键部分采用post请求对数据传输的保护机制、避免请求数据暴露在浏览器上面、以及不同用户具有不同权限操作通过这些安全性操作,保证系统的稳定性以及可靠性。
3.5 经济可行性分析
服务器端的安装简洁明了,客户机无需再装任何软件,通过浏览器就可以直接访问,可以直接接入 Internet ,无论您身在何处只要您可以访问 Internet 都可以使用本系统。本系统对计算机配置的要求不高,企业机房更换下来的低配置电脑都可以完全满足需要、所以在经济上具有完全的可行性。
3.6 法律可行性分析
本系统是自行研究开发的网络版红酒庄内部信息管理平台,它是很有实际意义操作的系统,java开发环境软件和使用的mysql数据库都是开源代码, 开发这个红酒庄内部信息管理平台不同于开发普通的系统软件,不存在侵权等问题,所有在法律上是允许可行的。
四、系统设计分析
4.1 系统模式架构
本系统经典的采用B/S架构(浏览器、服务器),是采用浏览器和服务器架构模式设计的架构,随着Internet技术的兴起,对C/S架构模式的一种改变升级或改进。目前,在该架构的应用下,用户通过WWW.xxx.com浏览器实现数据访问和操作。一小部分事务逻辑在前端页面实现,主要业务事务逻辑在服务器端实现,形成三层结构MVC。B/S架构是Web兴起后主流的网络架构设计模式。Web浏览器是目前最重要的客户端应用软件之一。该模式形成了一个统一的客户端,将系统功能的所有核心部分集中在服务器上实现。简化系统开发和维护。只要客户端安装了浏览器就可以操作,服务器端安装了Oracle、MySQL、Sybase等数据库。浏览器通过Web Server和数据库获取数据。简化客户端计算机的负载,降低系统维护和升级的成本和工作量,降低用户的成本。
4.2系统层次架构
根据上述逻辑结构,系统大致可分为三层。
根据处理过程的层次,将系统依次分为
(1)显示层:处理用户界面、数据传输、信息采集等数据显示。
(2)应用层:系统功能的逻辑处理层。它主要处理表示层发送的请求,在后台进行处理,并将处理结果返回给表示层。
(3)核心层:是系统运行核心层和应用层的基础,提供应用层权限控制、拦截器和数据读取等功能。
4.3用户需求分析
用户主要分为管理员和普通用户
- 管理员: 管理员可以对后台数据进行管理、拥有最高权限、具体权限有登录后进行用户管理、角色管理、菜单管理、邮件群发管理、红酒类型管理、红酒信息管理以及通知公告的发布和修改密码退出系统等操作。
普通用户:普通用户只能联系系统管理员添加账户信息、可以查看酒品信息、接收管理员发送的邮件以及发送邮件给管理员和查看通知公告信息
4.3系统功能详情设计
本系统主要设计采用Java语言开发教务系统、采用springmvc、spring为后台框架、数据库框架采用mybatis框架、前端采用jsp、jquery、js、css等技术
主要模块设计如下:
用户登录管理模块:
用户输入账号和密码或手机号登录按钮进行登录、根据输入的账号和密码以及角色来判断是否登录成功以及给出对应提示信息
角色管理模块:
管理员可以对角色进行添加、修改、删除和浏览、配置用户角色和权限菜单显示。
部门管理模块:
管理员登录后可以对部门进行管理、添加、输入对应的部门名称等数据点击完成添加、修改以及删除操作。
红酒类型管理模块:
管理员登录后可以对红酒类型进行管理、添加、输入对应的红酒类型名称和备注说明完成添加、修改以及删除红酒类型等操作。
红酒信息管理模块:
管理员登录后可以对红酒信息进行管理、添加、输入对应的红酒类型、名称、存放时间、温度、湿度、光线等完成添加、修改以及删除红酒信息等操作。
邮件管理模块:
管理员登录后可以对邮件信息进行管理、管理员可以群发邮件信息、可以接收平台用户发送的邮件、普通用户可以接收管理员群发的邮件以及发送邮件给管理员
通知公告模块:
管理员和登录后可以对抗通知公告进行查看、修改、添加、输入、公告标题以及内容等具体数据点击添加完成申请、以及修改和删除通知公告数据等操作、普通用户可以查看通知公告。
修改密码和退出管理模块:
管理员登录后可以对自己的账号密码进行修改、输入原密码验证成功后连续2次数据相同新密码就可以修改成功。管理员点击注销退出跳转到登录页面重新登陆。
4.4数据整体流程分析
4.5源码主要架构
五、程序设计和实现
5.1 程序主要类
4.1.1用户管理员类
/** * 用户ID*/
@TableId
private Long userId;
/** * 用户名*/
@NotBlank(message="用户名不能为空", groups = {AddGroup.class, UpdateGroup.class})
private String username;
/*** 密码*/
@NotBlank(message="密码不能为空", groups = AddGroup.class)
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
/*** 盐*/
private String salt;
/*** 邮箱*/
@NotBlank(message="邮箱不能为空", groups = {AddGroup.class, UpdateGroup.class})
@Email(message="邮箱格式不正确", groups = {AddGroup.class, UpdateGroup.class})
private String email;
/*** 手机号*/
private String mobile;
/*** 状态 0:禁用 1:正常*/
private Integer status;
/*** 角色ID列表*/
@TableField(exist=false)
private List<Long> roleIdList;
/** * 创建时间*/
private Date createTime;
/*** 部门ID*/
@NotNull(message="部门不能为空", groups = {AddGroup.class, UpdateGroup.class})
private Long deptId;;
4.1.2菜单路径类
/*** 菜单ID*/
@TableId
private Long menuId;
/*** 父菜单ID,一级菜单为0*/
private Long parentId;
/*** 父菜单名称*/
@TableField(exist=false)
private String parentName;
/*** 菜单名称*/
private String name;
/*** 菜单URL*/
private String url;
/*** 授权(多个用逗号分隔,如:user:list,user:create)*/
private String perms;
/*** 类型 0:目录 1:菜单 2:按钮*/
private Integer type;
/*** 菜单图标*/
private String icon;
/*** 排序*/
private Integer orderNum;
/*** ztree属性*/
@TableField(exist=false)
private Boolean open;
@TableField(exist=false)
private List<?> list;;
4.1.3菜单角色类
/** * 角色ID*/
@TableId
private Long roleId;
/*** 角色名称*/
@NotBlank(message="角色名称不能为空")
private String roleName;
/*** 备注*/
private String remark;
/** * 部门ID*/
@NotNull(message="部门不能为空")
private Long deptId;
/*** 部门名称*/
@TableField(exist=false)
private String deptName;
@TableField(exist=false)
private List<Long> menuIdList;
@TableField(exist=false)
private List<Long> deptIdList;
/*** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;;
4.1.4红酒类型类
@TableId
private static final long serialVersionUID = 1L;
@TableId
private Integer id;
private String name;
private String bz;
4.1.5红酒信息类
@TableId
private Integer id;
private String matterType;
private String name;
private String ytu;
private int num;
private String zyss;
private String scTime;
private String sccj;
4.1.6邮件详情类
@TableId
private Integer id;
private String sendUsername;
private Integer sendUserid;
private Integer receiptUserid;
private String receiptUsername;
private Date sendTime;
private String sendTitle;
private String content;
private String ty;
5.2主要功能设计实现
5.2.登录模块和系统首页:
用户输入网址http://localhost:8080/renren-admin/login.html跳转到登录页面、输入登录账号和密码以及验证码
前端js登录布局输入框和代码编写。发送login ajax请求跳转到后台
<p class="login-box-msg">用户登录</p>
<div v-if="error" class="alert alert-danger alert-dismissible">
<h4 style="margin-bottom: 0px;"><i class="fa fa-exclamation-triangle"></i> {{errorMsg}}</h4>
</div> <div class="form-group has-feedback"> <input type="text" class="form-control" v-model="username" placeholder="账号"><span class="glyphicon glyphicon-user form-control-feedback"></span></div>
<div class="form-group has-feedback">
<input type="password" class="form-control" v-model="password" placeholder="密码">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
<div class="form-group has-feedback">
<input type="text" class="form-control" v-model="captcha" @keyup.enter="login" placeholder="验证码">
<span class="glyphicon glyphicon-warning-sign form-control-feedback"></span>
<div class="form-group has-feedback">
<img alt="如果看不清楚,请单击图片刷新!" class="pointer" :src="src" @click="refreshCode">
后台主要代码实现:
/**
* 登录
*/
@ResponseBody
@RequestMapping(value = "/sys/login", method = RequestMethod.POST)
public R login(String username, String password, String captcha) {
String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
if(!captcha.equalsIgnoreCase(kaptcha)){
return R.error("验证码不正确");
}
try{
Subject subject = ShiroUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);//md5+Jiayan
subject.login(token);
}catch (UnknownAccountException e) {
return R.error(e.getMessage());
}catch (IncorrectCredentialsException e) {
return R.error("账号或密码不正确");
}catch (LockedAccountException e) {
return R.error("账号已被锁定,请联系管理员");
}catch (AuthenticationException e) {
return R.error("账户验证失败");
}
return R.ok();
登录完成之后跳转到系统首页
5.3用户添加:
点击系统管理》》用户添加。点击添加按钮执行添加。录入选择添加的相关信息
前端页面主要样式代码设计:
后台代码设计:
/**
* 保存用户
*/
@SysLog("保存用户")
@RequestMapping("/save")
@RequiresPermissions("sys:user:save")
public R save(@RequestBody SysUserEntity user){
ValidatorUtils.validateEntity(user, AddGroup.class);
sysUserService.saveUser(user);
return R.ok();
}
5.4红酒信息列表展示:
前段主要设计代码:
colModel: [
{ label: 'id', name: 'id', index: 'id', width: 30 },
{ label: '红酒类型', name: 'matterType', index: 'matterType', width: 100 },
{ label: '红酒名称', name: 'name', index: 'name', width: 180 },
{ label: '存放时间', name: 'ytu', index: 'ytu',width: 100},
{ label: '库存数量', name: 'num', index: 'num',width: 80 },
{ label: '温度', name: 'zyss', index: 'zyss',width: 120},
{ label: '湿度', name: 'scTime', index: 'scTime',width: 120},
{ label: '光线', name: 'sccj', index: 'sccj'},
5.5添加红酒详情:
后台主要代码设计:
@RequestMapping("/save")
public R save(@RequestBody Matter matter){
MatterService.save(matter);
return R.ok();
}
5.6邮件列表展示:
前段代码分析:
datatype: "json",
colModel: [
{ label: 'id', name: 'id', index: 'id', width: 30 },
{ label: '邮件标题', name: 'sendTitle', index: 'sendTitle', width: 100 },
{ label: '邮件内容', name: 'content', index: 'content', width: 100 },
{ label: '发送人', name: 'sendUsername', index: 'sendUsername',width: 80 },
{ label: '发送时间', name: 'sendTime', index: 'sendTime',width: 80 },
], }
5.7邮件发送:
前端主要样式:
<div class="form-group">
<div class="col-sm-2 control-label">id</div>
<div class="col-sm-10">
<input type="text" class="form-control" v-model="matterApply.id" placeholder="id"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-2 control-label">请选择申请区域</div>
<div class="col-sm-10">
<select class="form-control" name ="applyArea" id="applyArea">
<option>请选择</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-2 control-label">请选择红酒类型</div>
<div class="col-sm-10">
<select class="form-control" name ="name" id="name">
<option>请选择</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-2 control-label">红酒名称</div>
<div class="col-sm-10">
<input type="text" class="form-control" v-model="matterApply.matterName" placeholder="红酒名称"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-2 control-label">申请数量</div>
<div class="col-sm-10">
<input type="text" class=
5.8红酒类型列表
@Autowired
MatterTypeServiceImpl MatterTypeServiceImpe;
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = MatterTypeService.queryPage(params);
return R.ok().put("page", page);
}
5.9红酒类型添加
后台代码实现:
@RequestMapping("/list_purchaseApply")
public R list_purchaseApply(@RequestParam Map<String, Object> params){
params.put("ty","2");
PageUtils page = MatterApplyService.queryPage(params);
return R.ok().put("page", page);
}
5.8红酒类型添加
后台代码实现:
@RequestMapping("/save")
public R save(@RequestBody MatterType matterType){
MatterTypeService.save(matterType);
return R.ok();
}
5.8通知公告列表
后台代码实现:
@Override
@Autowired
private InformmService informmService;
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = informmService.queryPage(params);
return R.ok().put("page", page);
}
return new PageUtils(page);
}
5.9修改密码
/**
* 修改登录用户密码
*/
@SysLog("修改密码")
@RequestMapping("/password")
public R password(String password, String newPassword){
Assert.isBlank(newPassword, "新密码不为能空");
//原密码
password = ShiroUtils.sha256(password, getUser().getSalt());
//新密码
newPassword = ShiroUtils.sha256(newPassword, getUser().getSalt());
//更新密码
boolean flag = sysUserService.updatePassword(getUserId(), password, newPassword);
if(!flag){
return R.error("原密码不正确");
}
return R.ok();
}
5.10数据库连接配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/renren_kywz?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
#Oracle需要打开注释
#validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
stat-view-servlet:
enabled: true
url-pattern: /druid/*
#login-username: admin
#login-password: admin
filter:
stat:
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
wall:
config:
multi-statement-allow: true
六、数据库设计
6.1数据三范式:
一、第一范式
1NF是对属性的原子性,要求属性具有原子性,不可再分解;
二、第二范式
2NF是对记录的唯一性,要求记录有唯一标识,即实体的唯一性,
三、第三范式
3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,
数据库采用mysql5版本、满足数据库设计三范式。
编码采用utf8 -- UTF-8 Unicode
排序规则采用utf8_general_ci
6.2表ER图
6.3用户表设计
名称 | 字段名 | 数据类型 | 长度 | 可否为空 | 是否主键 |
用户id | user_id | int | 8 | 否 | 是 |
用户名称 | username | varchar | 50 | 否 | 否 |
密码 | password | varchar | 500 | 否 | 否 |
密码加盐 | salt | varchar | 500 | 否 | 否 |
手机号 | mobile | blob | 500 | 否 | 否 |
部门id | dept_id | int | 500 | 否 | 否 |
6.4菜单表设计
名称 | 字段名 | 数据类型 | 长度 | 可否为空 | 是否主键 |
菜单id | menu_id | int | 11 | 否 | 是 |
父级id | parent_id | int | 50 | 否 | 否 |
菜单名称 | name | varchar | 255 | 否 | 否 |
菜单路径 | url | varchar | 255 | 否 | 否 |
权限 | perms | blob | 255 | 否 | 否 |
类型 | type | int | 11 | 否 | 否 |
排序 | order | int | 11 | 否 | 否 |
6.5角色表设计