springboot 酒庄内部管理系统(源码+sql+论文)

 绪论

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用户需求分析

用户主要分为管理员和普通用户

  1. 管理员: 管理员可以对后台数据进行管理、拥有最高权限、具体权限有登录后进行用户管理、角色管理、菜单管理、邮件群发管理、红酒类型管理、红酒信息管理以及通知公告的发布和修改密码退出系统等操作。

普通用户普通用户只能联系系统管理员添加账户信息、可以查看酒品信息、接收管理员发送的邮件以及发送邮件给管理员和查看通知公告信息

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.2ER

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角色表设计

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QQ登录测试用例

QQ登录测试用例 常见测试方法&#xff08;可参考软件测试<用例篇>&#xff09; 等价类&#xff1a; 1、有效等价类 &#xff1a;满足需求的数据集合 2、无效等价类&#xff1a;不满足需求的数据集合 边界值错误猜测法场景法 QQ测试用例设计&#xff1a;xmind 需要完整…

开源项目推荐-vue2+element+axios 个人财务管理系统

文章目录 financialmanagement项目简介项目特色项目预览卫星的实现方式&#xff1a;首次进入卫星效果的实现方式&#xff1a;卫星跟随鼠标滑动的随机效果实现方式&#xff1a;环境准备项目启动项目部署项目地址 financialmanagement 项目简介 vue2elementaxios 个人财务管理系…

【Linux硬盘读取】Windows下读取Linux系统的文件解决方案:Linux Reader4.5 By DiskInternals

前言 相信做机器视觉相关的很多人都会安装 Windows 和 Linux 双系统。在 Linux 下&#xff0c;我们可以很方便的访问Windows的磁盘&#xff0c;反过来却不行。但是这又是必须的。通过亲身体验&#xff0c;向大家推荐这么一个工具&#xff0c;可以让 Windows 方便的访问 Ext 2/3…

毕业了校园卡怎么改套餐?

毕业了校园卡怎么改套餐&#xff1f; 毕业生校园卡99元套餐变更8元保号套餐教程 学弟学妹们恭喜毕业呀&#x1f393; 校园卡绑定了好多东西注销不掉又不想交高额月租的看过来。 今天一招教你更改校园卡套餐。 中国移动/电信/联通App 打开App&#xff0c;在首页右上角点击人工…

Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope

本文主要介绍如何在无需网关&#xff0c;无需配置 HttpClient 的情况下&#xff0c;使用 Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope 等 OpenAI 接口兼容的大模型服务。 1. 背景 一直以来&#xff0c;我们都在探索如何更好地利用大型语言模型&#xff08;LLM&…

Windows给右键菜单添加新建.htm和.html的选项,并使用不同名称

添加新建 .html 文件的右键菜单选项 运行regedit打开注册表编辑器给计算机\HKEY_CLASSES_ROOT\.html新增,名为: ShellNew 的项, 名称不区分大小写, 可以写成shellnew给 ShellNew项 新增字符串值 命名为FileName 或 ‘NullFile’, 名称不区分大小写, 可以写成filename或nullfil…

五、在Qt下加载QVTKWidget控件,生成Visual Studio项目,显示点云(C++)

前言&#xff1a;因为项目需要通过Qt进行显示点云&#xff0c;参考了很多博文&#xff0c;但是并没有全部正确的&#xff0c;东拼西凑算是实现了&#xff0c;花费了两天时间&#xff0c;时间有点久&#xff0c;能力还有有待提升~~ 为此写篇博文记录一下。感谢各位大佬&#xff…

一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案

大家好&#xff0c;今天给大家分享的是一款轻量、安全的问卷系统基座。 XIAOJUSURVEY是一套轻量、安全的问卷系统基座&#xff0c;提供面向个人和企业的一站式产品级解决方案&#xff0c;快速满足各类线上调研场景。 内部系统已沉淀 40种题型&#xff0c;累积精选模板 100&a…

Linux shell 重定向输入和输出

Linux shell 重定向输入和输出 1. Standard I/O streams2. Redirecting to and from the standard file handles (标准文件句柄的重定向)2.1. command > file2.2. command >> file2.3. command 2> file2.4. command 2>> file2.5. command < file2.6. comm…

小白也能看懂 大模型的6个评估指标_大模型生成质量评估标准

近年来&#xff0c;随着深度学习技术的飞速发展&#xff0c;大型神经网络模型如BERT、GPT-3等已经成为自然语言处理、计算机视觉、语音识别等领域的重要工具。这些模型之所以称为"大型"&#xff0c;是因为它们通常包含数十亿甚至数千亿的参数&#xff0c;比以往的模型…

Semantic Kernel 中的流式输出SSE与Vue3前端接收示例

本文将介绍如何在使用 Semantic Kernel 框架的 ASP.NET 项目中使用流式输出 SSE&#xff08;Server-Sent Events&#xff09;&#xff0c;并展示如何在Vue3前端应用中接收这些数据。并介绍了如何使用 microsoft/fetch-event-source 库使用 POST 方法来接收 SSE 数据。 1. 背景 …

ABAP开发:屏幕输入中,在多个选项卡中如何确定选择了哪个Tab Strips?

在ABAP开发中&#xff0c;使用了SELECTION-SCREEN来创建了一个带有多个选项卡&#xff08;Tab Strips&#xff09;的屏幕。每个选项卡对应一个不同的屏幕编号&#xff08;SCREEN 101, 102, 103&#xff09;&#xff0c;如下图&#xff1a; 屏幕中有Name、Age、City三个标签选择…

39、基于深度学习的(拼音)字符识别(matlab)

1、原理及流程 深度学习中常用的字符识别方法包括卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;。 数据准备&#xff1a;首先需要准备包含字符的数据集&#xff0c;通常是手写字符、印刷字符或者印刷字体数据集。 数据预处理&#xff1…

【网络安全】网络安全威胁及途径

1、网络安全威胁的种类及途径 &#xff08;1&#xff09;网络安全威胁的主要类型 网络安全面临的威胁和隐患种类繁多&#xff0c;主要包括人为因素、网络系统及数据资源和运行环境等影响。网络安全威胁主要表现为&#xff1a;黑客入侵、非授权访问、窃听、假冒合法用户、病毒…

18. 第十八章 继承

18. 继承 和面向对象编程最常相关的语言特性就是继承(inheritance). 继承值得是根据一个现有的类型, 定义一个修改版本的新类的能力. 本章中我会使用几个类来表达扑克牌, 牌组以及扑克牌性, 用于展示继承特性.如果你不玩扑克, 可以在http://wikipedia.org/wiki/Poker里阅读相关…

概率论拾遗

条件期望的性质 1.看成f(Y)即可 条件期望仅限于形式化公式&#xff0c;用于解决多个随机变量存在时的期望问题求解&#xff0c;即 E(?)E(E(?|Y))#直接应用此公式条件住一个随机变量&#xff0c;进行接下来的计算即可 定义随机变量之间的距离为&#xff0c;即均方距离 随机…

Redis分布式锁的实现、优化与Redlock算法探讨

Redis分布式锁最简单的实现 要实现分布式锁,首先需要Redis具备“互斥”能力,这可以通过SETNX命令实现。SETNX表示SET if Not Exists,即如果key不存在,才会设置它的值,否则什么也不做。利用这一点,不同客户端就能实现互斥,从而实现一个分布式锁。 举例: 客户端1申请加…

(科学:某天是星期几)泽勒一致性是由克里斯汀·泽勒开发的用于计算某天是星期几的算法。

(科学:某天是星期几)泽勒一致性是由克里斯汀泽勒开发的用于计算某天是星期几的算法。这个公式是: 其中: h是一个星期中的某一天(0 为星期六;1 为星期天;2 为星期一;3 为星期二;4 为 星期三;5 为星期四;6为星期五)。 q 是某月的第几天。 m 是月份(3 为三月&#xff0c;4 为四月,…

朴素贝叶斯分类器 #数据挖掘 #Python

朴素贝叶斯分类器是一种基于概率统计的简单但强大的机器学习算法。它假设特征之间是相互独立的&#xff08;“朴素”&#xff09;&#xff0c;尽管在现实世界中这通常不成立&#xff0c;但在许多情况下这种简化假设仍能提供良好的性能。 基本原理&#xff1a;朴素贝叶斯分类器…

笔记本开机原理

从按下开机键开始&#xff0c;机器是如何开到OS的呢&#xff1f;今天这篇文章和大家极少EC-BIOS-OS的整个开机流程。首先大家要对笔记本的基本架构有所了解&#xff0c;基本架构如下图所示&#xff08;主要组成部分为大写黑体内容&#xff09;。 一、按下PowerButton按钮&#…