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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

六、资产安全—数据管理(CISSP)

目录 1.学习目标 2.数据管理最佳参考实践 3.数据质量维度:DAMA 4.数据生命周期控制 5.数据净化方式 6.生命周期安全控制 7.EOL、EOS、EOSL 1.学习目标 2.数据管理最佳参考实践 数据策略: 角色与责任: 数据所有权:

数据分析必备:一步步教你如何用matplotlib做数据可视化(10)

1、Matplotlib 二维箭头图 箭头图将速度矢量显示为箭头&#xff0c;其中分量(u&#xff0c;v)位于点(x&#xff0c;y)。 quiver(x,y,u,v)上述命令将矢量绘制为在x和y中每个对应元素对中指定的坐标处的箭头。 参数 下表列出了quiver()函数的参数 - x - 1D或2D阵列&#xff0c;…

C语言中的进制转换

基础概念 进制又称数制&#xff0c;是指用一组固定的符号和统一的规则来表示数值的方法&#xff0c;在C语言中&#xff0c;可以使用不同的前缀来表示不同的进制&#xff1a; 二进制&#xff1a;以0b或0B为前缀&#xff08;部分编译器可能不支持&#xff09;八进制&#xff1a…

Go日常分享 - error类型是指针类型吗?

背景 这个问题的产生来源于小泉在开发rpc接口时返回error遇到的问题&#xff0c;开发时想在defer里对err进行最终的统一处理赋值&#xff0c;发现外层接收一直都未生效。问题可以简化为成下面的小demo。 func returnError() error {var err errordefer func() {//err errors…

物联网系统运维——数据库部署

一.MySQL 1.概要 MySQL是一种关联数据库管理系统&#xff0c;关联数据:而不是将所有数据放在一个大仓库内&#xff0c;这样就增加了速度并提高了灵活性库将数据保存在不同的表中。性能高、成本低、可靠性好&#xff0c;已经成为最流行的开源数据库。 二.MySQL安装与配置 1. …

38.MessageToMessageCodec线程安全可被共享Handler

handler被注解@Sharable修饰的。 这样的handler,创建一个实例就够了。例如: ByteToMessageCodec的子类不能被@Sharable修饰 如果自定义类是MessageToMessageCodec的子类就是线程共享的,可以被@Sharable修饰的 package com.xkj.protocol;import com.xkj.message.Message; i…

浙大宁波理工学院2024年成人高等继续教育招生简章

浙大宁波理工学院&#xff0c;这所承载着深厚学术底蕴和卓越教育理念的学府&#xff0c;正热烈开启2024年成人高等继续教育的招生之门。这里&#xff0c;是知识的殿堂&#xff0c;是智慧的摇篮&#xff0c;更是您实现个人梦想、追求更高境界的起点。 ​浙大宁波理工学院始终坚…

[最全]设计模式实战(一)UML六大原则

UML类图 UML类图是学习设计模式的基础,学习设计模式,主要关注六种关系。即:继承、实现、组合、聚合、依赖和关联。 UML类图基本用法 继承关系用空心三角形+实线来表示。实现接口用空心三角形+虚线来表示。eg:大雁是最能飞的,它实现了飞翔接口。 关联关系用实线箭头来表示…

基础算法---滑动窗口

文章目录 什么是滑动窗口1.长度最小的子数组2.无重复字符的最长子串3.最大连续1的个数4.将x减到0的最小操作数5.最小覆盖子串总结 什么是滑动窗口 滑动窗口&#xff08;Sliding Window&#xff09;是一种在计算机科学中用于解决各种子数组或子字符串问题的技术。滑动窗口技术通…

在 Mac 上恢复已删除的文件夹

“嗨&#xff0c;我刚刚运行了重复文件查找器应用程序 Gemini 来扫描我的 Mac 以清除重复文件。它找到了很多重复的文件和文件夹&#xff0c;只需单击一下&#xff0c;它就可以帮助我删除重复的文件/文件夹。但我认为它可能会删除一些有用的重复文件。我打开垃圾箱&#xff0c;…

主数据驱动的数据治理:技术解析与实践探索

数字化转型行业小伙伴可以加入我的星球&#xff0c;初衷成为各位数字化转型参考库&#xff0c;星球内容每周更新 个人工作经验资料全部放在这里&#xff0c;包含数据治理、数据要素、数据质量、数据安全、元数据、主数据、企业架构、DCMM、DSMM、CDGA、CDGP等各种数据相关材料 …

AOP应用之系统操作日志

本文演示下如何使用AOP&#xff0c;去实现系统操作日志功能。 实现步骤 引入AOP包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.6.6</version></de…

AI大眼萌探索 AI 新世界:Ollama 使用指南【1】

在人工智能的浪潮中&#xff0c;Ollama 的出现无疑为 Windows 用户带来了一场革命。这款工具平台以其开创性的功能&#xff0c;简化了 AI 模型的开发与应用&#xff0c;让每一位爱好者都能轻松驾驭 AI 的强大力量。大家好&#xff0c;我是AI大眼萌&#xff0c;今天我们将带大家…

颠覆多跳事实验证!Causal Walk 前门调整技术引领去偏新纪元

Causal Walk: Debiasing Multi-Hop Fact Verifcation with Front-Door Adjustment 论文地址: Causal Walk: Debiasing Multi-Hop Fact Verification with Front-Door Adjustment| Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.p…

基于Vue-cli脚手架搭建项目使用ElementUI组件

项目结构 node_modules 项目依赖的外部组件文件放在此处,例如vue public index.html是对外提供的唯一的html文件 src assets 存放静态文件 例如图片 css js等文件 components 里面存放的是组件 App.vue是组件 main.js是项目配置文件 package.json存放的是项目依赖的…

C# Onnx Yolov5 水果识别,人员识别,物品识别 人工智能

目录 先上效果 来电废话&#xff0c;但实用 网络成功案例实践易失败的原因 万物检测涉及技术 下载合集 关键代码 全部代码 实操vs2022安装关键 YOLO V5核心库编译 编写自己识别软件 更新相关依赖 标注字库文件 测试效果 名词解释YOLO 名词解释ONNX 源码 直播教…

基于Java的火车订票管理系统【附源码】

火车订票管理登录 摘要&#xff1a;随着我国铁路交通的不断发展&#xff0c;简单的窗口售票模式已经不能满足方便人们出行的目的。采用先进的网络技术开发出方便快捷的火车票订票系统是现代客运业务发展的必然需求。本次设计的火车票订票系统通过访问主页&#xff0c;可以实现…

Linux PXE高效批量装机

部署PXE远程安装服务 在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢?传统的USB光驱、移动硬盘等安装方法显然已经难以满足需…

VC++支持断点续下或续传的功能

VC使用多线程和Socket实现断点续下 一、断点续下的基本原理&#xff1a; 1.断点续传的理解可以分为两部分&#xff1a;一部分是断点&#xff0c;一部分是续传。断点的由来是在下载过程中&#xff0c;将一个下载文件分成了多个部分&#xff0c;同时进行多个部分一起的下载&…

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现(六十四)

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现&#xff08;六十四&#xff09; 漏洞环境搭建 这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装&#xff0c;我们进入 ThinkPHP漏洞环境&#xff0c;可以 cd ThinkPHP&#xff0c;然…