基于Javaweb的项目申报系统的设计与实现--论文pf

2024-08-20 18:44

本文主要是介绍基于Javaweb的项目申报系统的设计与实现--论文pf,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

@TOC

springboot528基于Javaweb的项目申报系统的设计与实现--论文pf

第1章 绪论

1.1 研究背景

互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新的时代,各行各业都充分考虑互联网是否能与本行业进行结合,是否能解决本行业或者本行业中某些方面的自古以来的痛点。长期以来,数据内容,数据传播,数据储存等都是一门门专业的内容,因为需要记住的内容很多,造成古人的言简意赅,如今互联网的到来让数据更加的清晰好认不复杂,一目了然不出错,毕竟在整个历史上数据的丢失,传承的断代,都是因为数据不能好好的保存,不能好好的流传。当年的年代用互联网思维和互联网技术,对大量数据的录入更新,存储汇总,备份分析方面,使得远远的超过传统的数据管理技术。在这样的时代潮流下,采用新技术开发新软件,对传统行业进行革命性的改造成为了当今的主流。本次开发项目申报系统,解决了项目信息管理关于数据方面的管理分析,存储传输的痛点,不仅仅对管理员提供了便利,还能提高用户的满意度。

1.2目的和意义

此次项目申报系统的开发,需要用到的知识不仅涉及到界面设计与功能设计方面的知识,还需要涉及到数据库与编程语言上面的知识,这些知识点对于一个即将毕业的学生来说,一是为了巩固在校所学相关专业知识;二是为了让学生学会如何将专业理论知识运用于现实软件的开发过程;三是让学生明白知识是无穷无尽的,要时刻明白活到老学到老的真正含义,让学生要养成时刻学习的习惯,同时也要相信通过此次程序的开发,会让学生对于专业知识的理解与软件开发水平的提高有着极大的帮助。

1.3 论文研究内容

论文设计的结构也是依照程序开发的流程进展的,也涉及到功能需求分析,功能设计与实现,程序测试等流程。

绪论:讲解课题的背景与意义,展示论文结构。

程序开发技术:讲解程序运用到的工具与技术知识。

系统分析:讲解程序的功能需求与开发可行性问题。

系统设计:讲解程序的功能与数据库的设计。

系统实现:讲解程序功能与界面实现。

系统测试:讲解程序的功能测试。

第2章 程序开发技术

2.1 Mysql数据库

开发的程序面向用户的只是程序的功能界面,让用户操作程序界面的各个功能,那么很多人就会问,用户使用程序功能生成的数据信息放在哪里的?这个就需要涉及到数据库的知识了,一般来说,程序开发通常就会对常用数据存储工具的特点进行分析比对,比如Mysql数据库的特点与优势,Access数据库的特点与优势,Sqlserver数据库的特点与优势等,最终看哪个数据库与需要开发的程序比较匹配,也符合程序功能运行需要的数据存储要求,比如,需要开发商业级别的程序,存储的数据对数据库要求较高,可以选用Oracle,如果只是比较简单的程序,对数据存储没有过多要求,可以选用微软旗下的Access,当开发程序要求数据库占用空间小,并能满足程序数据存储要求时,就可以考虑Oracle公司从瑞典MySQL AB公司在很早之前就收购过一个关系型数据库,它是现在的Mysql数据库。

为了更容易理解Mysql数据库,接下来就对其具备的主要特征进行描述。

(1)首选Mysql数据库也是为了节省开发资金,因为网络上对Mysql的源码都已进行了公开展示,开发者根据程序开发需要可以进行下载,并做一些改动就可以使用在程序中,可以推动开发者开发此程序的开发进度。

(2)SQL数据语言在Mysql里面也同样适用

(3)Mysql不仅可以支持多种编程语言,比如在校期间学到的C语言,Java语言,以及课后接触的PHP语言,C++语言等编程语言,它都能很好的支持,而且Mysql的安装与使用还不挑剔使用平台。

(4)Mysql可以支持具有千万条数据记录的数据库,电脑操作系统在进行首次安装或者是重装时,可以根据需要选择安装32位或64位操作系统,这两种操作系统对表文件的支持力度不一样,32位的操作系统最多可以存放4GB的表文件,64位操作系统最多可以存放8TB的表文件。

(5)Mysql数据库可以通过GPL协议进行个性化定制,需要开发者自己对数据库的源代码进行修改,以此开发出属于自己的Mysql。

2.2 Java语言

程序开发语言有很多,但是截至目前,Java语言在IT领域内,仍然是最被认可,以及被广泛运用的编写语言之一,因此在选择此程序的编写语言上,果断选择这门编程语言进行程序开发。可以说经过了这么多年的发展,Java语言不仅在Web开发领域有了突出性贡献,而且在大数据开发领域以及Android开发领域都得到了广泛运用。由于Java语言拥有较强的扩展性能,并且表现出的稳定性能,让其成为大型后端系统开发语言首选,现如今,Java语言也成为了一种常用的互联网平台的解决方案。

作为一种源码在网络上开源的面向对象的程序开发Java语言,由它开发完成的程序是不可能直接运行在各大平台的,Java程序的运行,需要在操作平台上配置其运行的环境,包括数据库软件与Java程序开发软件等工具的安装与配置。在Win7,Win10或其它操作平台上配置Java程序运行环境,只要环境配置成功,Java程序都可以运行起来。

第3章 系统分析

在进行系统分析之前,需要从网络上或者是图书馆的开发类书籍中收集大量的资料,因为这个环节也是帮助即将开发的程序软件制定一套最优的方案,一旦确定了程序软件需要具备的功能,就意味着接下来的工作和任务都是围绕着这个方案执行的,所以系统分析需要对程序功能反复进行思考和研究。

3.1可行性分析

开发一款系统软件之前,用户都会思考这个软件程序值不值得去开发,把开发软件过程中可能涉及到的问题罗列出来,并一个个分析解决,以此来确定开发这款程序软件是否有必要,这样的分析方法也能帮助用户降低损失,不至于开发者开发进度进行到一半之后,突然遇到问题就放弃对软件的开发,到那时,资金损失,人力投入等方面就损耗太大了。

3.1.1技术可行性分析

此次开发程序使用到的开发工具有:Eclipse,Mysql等工具,使用的开发语言是Java,选择的开发工具和开发语言都是在大学课堂接触并学习过,后期因为自己也比较感兴趣,所以也通过网络渠道,或借助图书馆的开发类书籍进行过软件开发知识的系统学习,让自己有了一定的知识积累,加上自己在校期间也独立开发过一些软件作品,也积累了一定的开发经验,所以这次毕设作品的制作在技术上无须担忧过多。

3.1.2经济可行性分析

目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。

3.1.3操作可行性分析

程序软件的操作界面是符合大众审美的需求,功能模块的布局也是类似于社会上同种类型的软件,因此使用者操作该软件可以无需培训就上手。加上现在计算机入驻各家各户,大部分人的计算机操作水平都比较高,这样的局面也表明开发出来的程序在操作性问题上也是不用担心的。

综合上面的可行性论证,基本可以确定程序开发完全可行。

3.2系统运行环境

程序经过编码可以实现对程序设计的功能。但是编码实现时需要一定的配置环境,包括了电脑上的硬件环境,也包括在电脑操作系统上安装的软件环境。

硬件环境:一台可以正常使用并能够上网的笔记本或者是电脑,电脑内存最低要求4个G,电脑的中央处理器可以配置i5CPU。

软件环境:运用的微软操作系统是比较稳定的win7旗舰版系统,采用比较熟练360安全浏览器,并在此系统上通过浏览器下载安装好Eclipse软件,下载安装好MYSQL软件等。

3.3系统流程分析

分析程序的流程,涉及到程序的整体操作流程,通过分析与设计,绘制的程序操作流程图见下图。此程序为了确保安全,会让使用者通过登录模块验证信息,符合要求的使用者才有权限操作程序。

图3-1 程序操作流程图

程序处理数据会涉及到数据的录入环节,绘制的添加流程见下图。程序录入数据过程中,始终与数据库保持同步。

图3-2 信息添加流程图

程序里面的数据也会出现错误,因此就有相应的修改数据的功能,绘制的程序修改流程见下图。此过程也是跟后台数据库进行数据同步显示。

图3-3信息修改流程图

程序数据存放于数据仓库,有时也会涉及到数据删除,此过程对应的流程图见下图。数据信息被删除之后,数据库里面也就没有了该数据信息了。

图3-4 信息删除流程图

第4章 系统设计

4.1 系统设计的原则

在系统设计过程中,也需要遵循相应的设计原则,这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性,安全性,可定制化,可扩展性,可维护性,可升级性以及客户体验等原则。下面就对这些原则进行简要阐述。

可靠性:一个软件是否可靠决定了其是否被用户使用,设计不可靠的软件,用户很容易就遗弃;

安全性:程序软件承担了信息的保存与管理等事务,安全性不足的软件会导致使用者承担巨大的损失;所以系统安全也是需要考虑进入的;

可定制化:市场环境从来都不是一直固定不变,面对客户群体的改变,以及使用环境的改变,市场需求的改变等因素,程序软件也要易于调整以适应各种变化;

可扩展性:程序软件在运行使用期间,也需要及时引进当下的新技术来进行系统优化,主要就是在系统功能层面,系统性能层面上进行相应的扩展,只有这样才能让系统在实际生活中继续占有市场;

可维护性:程序软件的维护需要一定量的资金,不管是排除现有程序错误,还是变更软件的现有需求,都需要在软件技术上投入一定资金,所以易于维护的软件程序就可以降低技术层面的资金消耗;

可升级性:程序软件的投入使用,会面临用户数量增多的情况,用户对软件的使用率也会提升,所以系统面临这种情况,仍然需要通过升级保持性能的合理,这样才能够适应市场;

客户体验:设计出来的程序软件在界面上不能够太复杂,要遵循界面设计的原理设计出简单,方便操作的功能操作界面,让用户易于接受软件,并乐于使用软件提供的功能。

4.2 系统结构设计

在系统结构设计上,经综合考虑还是选择比js更加简洁的vue框架,现如今浏览器已经实现了普及,并在技术上逐渐完善和成熟,它在节约软件开发成本的基础上,还能实现原本用专业软件操作才能实现的强大功能。总之,小程序架构是当下全新的,认可度高的系统构造技术。系统结构设计图通过绘制,效果展示如下:

图4-1 系统结构设计图

4.3功能结构设计

在管理员功能模块确定下来的基础上,对管理员各个功能进行设计,确定管理员功能的详细模块。绘制的管理员功能结构见下图。

结构设计图

图4.3 管理员功能结构图

4.4数据库设计

与功能结构设计一样,数据库设计也是程序开发不可避免的设计环节,数据库设计最主要的目的就是帮助运行程序存储相应的数据信息。数据库设计包含的内容有数据表结构的设计,也包含了数据库E-R图的设计。

4.4.1 数据库E-R图

在绘制E-R图之前,先要找出数据库的实体,明确各个实体具有的属性,比如用户信息这个实体,它具备的属性包括了用户的姓名属性,用户的密码属性,用户的创建时间属性等,所以明确了用户这个实体,以及用户实体具备的属性之后,就需要根据这些信息绘制用户实体对应的实体属性图了。绘制软件选用当下认可度高,使用范围广,操作便利的微软旗下的Visio工具。

(1)下图是留言板实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\9.2\____img\留言板.jpg

留言板实体属性图

(2)下图是用户实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\9.2\____img\用户.jpg

用户实体属性图

(3)下图是公告实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\9.2\____img\公告.jpg

公告实体属性图

(4)下图是资讯信息实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\9.2\____img\资讯信息.jpg

资讯信息实体属性图

(5)下图是项目实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\9.2\____img\项目.jpg

项目实体属性图

(6)下图是操作日志实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\9.2\____img\操作日志.jpg

操作日志实体属性图

(7)下图是专家实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\9.2\____img\专家.jpg

专家实体属性图

4.4.2 数据库表结构

在进行这部分设计之前,需要明白和掌握数据类型以及各个数据类型的长度范围等知识,因为在一张具体的数据表中,为了方便理解,这里就举个简单的例子。比如用户信息表,这个表格的字段就是用户这个实体具备的属性,这时就需要对字段进行数据类型,以及字段长度的设置,也要设置一个主键来作为用户信息表的唯一标识。这些都是数据库表结构设计需要完成的内容。根据项目申报系统的功能设计以及数据库设计要求,展示该系统的数据表结构。

表4.1操作日志表

序号列名数据类型说明允许空
1IdIntid
2caozuorizhi_this_biaoString操作人所在表
3caozuorizhi_caozuobiaoString操作表
4caozuorizhi_caozuozhanghuString操作账户
5caozuorizhi_caozuoleixingString操作类型
6caozuorizhi_textString操作内容
7insert_timeDate操作时间
8create_timeDate创建时间

表4.2字典表

序号列名数据类型说明允许空
1IdIntid
2dic_codeString字段
3dic_nameString字段名
4code_indexInteger编码
5index_nameString编码名字
6super_idInteger父字段id
7beizhuString备注
8create_timeDate创建时间

表4.3公告表

序号列名数据类型说明允许空
1IdIntid
2gonggao_nameString公告名称
3gonggao_photoString公告图片
4gonggao_typesInteger公告类型
5insert_timeDate公告发布时间
6gonggao_contentString公告详情
7create_timeDate创建时间

表4.4留言板表

序号列名数据类型说明允许空
1IdIntid
2yonghu_idInteger用户
3liuyan_nameString留言标题
4liuyan_textString留言内容
5insert_timeDate留言时间
6reply_textString回复内容
7update_timeDate回复时间
8create_timeDate创建时间

表4.5资讯信息表

序号列名数据类型说明允许空
1IdIntid
2news_nameString资讯名称
3news_photoString资讯图片
4news_typesInteger资讯类型
5insert_timeDate资讯发布时间
6news_contentString资讯详情
7create_timeDate创建时间

表4.6项目表

序号列名数据类型说明允许空
1IdIntid
2yonghu_idInteger用户
3zhuanjia_idInteger专家
4xiangmu_uuid_numberString项目编号
5xiangmu_nameString项目名称
6xiangmu_photoString项目照片
7xiangmu_addressString项目地点
8xiangmu_kaishi_timeDate项目开始时间
9xiangmu_jieshu_timeDate项目结束时间
10xiangmu_typesInteger项目类型
11xiangmu_dengji_typesInteger项目等级
12xiangmu_contentString项目介绍
13insert_timeDate录入时间
14xiangmu_yesno_typesInteger审核状态
15xiangmu_yesno_textString审核意见
16xiangmu_shenhe_timeDate审核时间
17create_timeDate创建时间

表4.7用户表

序号列名数据类型说明允许空
1IdIntid
2yonghu_nameString用户姓名
3yonghu_phoneString用户手机号
4yonghu_id_numberString用户身份证号
5yonghu_photoString用户头像
6yonghu_emailString用户邮箱
7jinyong_typesInteger账户状态
8create_timeDate创建时间

表4.8专家表

序号列名数据类型说明允许空
1IdIntid
2zhuanjia_nameString专家姓名
3zhuanjia_phoneString专家手机号
4zhuanjia_id_numberString专家身份证号
5zhuanjia_photoString专家头像
6zhuanjia_emailString专家邮箱
7jinyong_typesInteger账户状态
8create_timeDate创建时间

表4.9管理员表

序号列名数据类型说明允许空
1IdIntid
2usernameString老师名
3passwordString密码
4roleString角色
5addtimeDate新增时间
  1. 系统实现

系统实现这个章节的内容主要还是展示系统的功能界面设计效果,在实现系统基本功能,比如修改,比如添加,比如删除等管理功能的同时,也显示出系统各个功能的界面实现效果,该部分内容一方面与前面提到的系统分析,系统设计的内容相呼应,另一方面也是一个实际成果的展示。

5.1管理员功能实现

5.1.1 项目管理

此页面让管理员管理项目的数据,项目管理页面见下图。此页面主要实现项目的增加、修改、删除、查看的功能。

图5-1 项目管理页面

5.1.2 公告信息管理

公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。下图就是公告信息管理页面。

图5.3 公告信息管理页面

5.1.3公告类型管理

公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。下图就是公告类型管理页面。

图5.4 公告类型列表页面

5.1.4 资讯信息管理

如图5.4显示的就是资讯信息管理页面,此页面提供给管理员的功能有:新增资讯信息,修改资讯信息,删除资讯信息。

图5.4资讯信息管理页面

5.1.5 资讯信息类型管理

如图5.5显示的就是资讯信息类型管理页面,此页面提供给管理员的功能有:新增资讯信息类型,修改资讯信息类型,删除资讯信息类型。

图5.5 资讯信息类型管理页面

第6章 系统测试

程序软件的开发阶段也包括了系统测试,这个部分就是程序质量评定的一个重要环节,如果说程序通过编码实现功能之后,不通过测试检查程序中出现的错误,那么程序一旦投入生活中运行使用时,就会产生许多大大小小的错误,这个时候去解决问题已经晚了,所以一个程序在被交付给使用者使用之前,开发者就需要使用多种测试方法反复进行测试,也是对程序的一个负责表现。程序进入系统测试阶段,在讲究策略进行测试时,也需要对时效性进行把控。当开发者测试完程序,并解决完测试期间程序产生的各种错误时,就需要程序的验收方来对程序进行验收测试,这也是程序测试的最后一个操作步骤。验收测试也是对程序的质量以及可交付性方面起到关键的作用。

ZhuanjiaServiceImpl.java
package com.service.impl;import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.ZhuanjiaDao;
import com.entity.ZhuanjiaEntity;
import com.service.ZhuanjiaService;
import com.entity.view.ZhuanjiaView;/*** 专家 服务实现类*/
@Service("zhuanjiaService")
@Transactional
public class ZhuanjiaServiceImpl extends ServiceImpl<ZhuanjiaDao, ZhuanjiaEntity> implements ZhuanjiaService {@Overridepublic PageUtils queryPage(Map<String,Object> params) {Page<ZhuanjiaView> page =new Query<ZhuanjiaView>(params).getPage();page.setRecords(baseMapper.selectListView(page,params));return new PageUtils(page);}}
FileController.java
package com.controller;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;/*** 上传文件映射表*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{@Autowiredprivate ConfigService configService;/*** 上传文件*/@RequestMapping("/upload")public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {if (file.isEmpty()) {throw new EIException("上传文件不能为空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}String fileName = new Date().getTime()+"."+fileExt;File dest = new File(upload.getAbsolutePath()+"/"+fileName);file.transferTo(dest);if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}/*** 下载文件*/@IgnoreAuth@RequestMapping("/download")public ResponseEntity<byte[]> download(@RequestParam String fileName) {try {File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}File file = new File(upload.getAbsolutePath()+"/"+fileName);if(file.exists()){/*if(!fileService.canRead(file, SessionManager.getSessionUser())){getResponse().sendError(403);}*/HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    headers.setContentDispositionFormData("attachment", fileName);    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}} catch (IOException e) {e.printStackTrace();}return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);}}
DictionaryServiceImpl.java
package com.service.impl;import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.DictionaryDao;
import com.entity.DictionaryEntity;
import com.service.DictionaryService;
import com.entity.view.DictionaryView;/*** 字典 服务实现类*/
@Service("dictionaryService")
@Transactional
public class DictionaryServiceImpl extends ServiceImpl<DictionaryDao, DictionaryEntity> implements DictionaryService {@Overridepublic PageUtils queryPage(Map<String,Object> params) {Page<DictionaryView> page =new Query<DictionaryView>(params).getPage();page.setRecords(baseMapper.selectListView(page,params));return new PageUtils(page);}/*** 赋值给字典表* @param obj view对象*/public void dictionaryConvert(Object obj, HttpServletRequest request) {try {if (obj == null) return;//当前view和entity中的所有types的字段List<String> fieldNameList = new ArrayList<>();Class tempClass = obj.getClass();while (tempClass !=null) {Field[] declaredFields = tempClass.getDeclaredFields();for (Field f : declaredFields) {f.setAccessible(true);if (f.getType().getName().equals("java.lang.Integer") && f.getName().contains("Types")) {fieldNameList.add(f.getName());}}tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己}// 获取监听器中的字典表
//            ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();ServletContext servletContext = request.getServletContext();Map<String, Map<Integer, String>> dictionaryMap= (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");//通过Types的值给Value字段赋值for (String s : fieldNameList) {Field types = null;if(hasField(obj.getClass(),s)){//判断view中有没有这个字段,有就通过反射取出字段types= obj.getClass().getDeclaredField(s);//获取Types私有字段}else{//本表中没有这个字段,说明它是父表中的字段,也就是entity中的字段,从entity中取值types=obj.getClass().getSuperclass().getDeclaredField(s);}Field value = obj.getClass().getDeclaredField(s.replace("Types", "Value"));//获取value私有字段//设置权限types.setAccessible(true);value.setAccessible(true);//赋值if (StringUtil.isNotEmpty(String.valueOf(types.get(obj)))) { //types的值不为空int i = Integer.parseInt(String.valueOf(types.get(obj)));//type//把s1字符中的所有大写转小写,并在前面加 _char[] chars = s.toCharArray();StringBuffer sbf = new StringBuffer();for(int  b=0; b< chars.length; b++){char ch = chars[b];if(ch <= 90 && ch >= 65){sbf.append("_");ch += 32;}sbf.append(ch);}String s2 = dictionaryMap.get(sbf.toString()).get(i);value.set(obj, s2);} else {new Exception("字典表赋值出现问题::::"+value.getName());value.set(obj, "");}}} catch (IllegalAccessException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 判断本实体有没有这个字段* @param c* @param fieldName* @return*/public boolean hasField(Class c, String fieldName){Field[] fields = c.getDeclaredFields();for (Field f : fields) {if (fieldName.equals(f.getName())) {return true;}}return false;}}
beifen.vue
<template><div class="addEdit-block"><el-form label-position="top" class="detail-form-content" ref="ruleForm" :model="ruleForm" :rules="rules"><el-form-item class="input" label="MySQL安装目录" prop="mysqlUrl"><el-input clearable placeholder="MySQL安装目录" v-model="ruleForm.mysqlUrl"></el-input></el-form-item><el-form-item class="input" label="MySQL数据库所在服务器地址IP" prop="hostIP"><el-input clearable placeholder="MySQL数据库所在服务器地址IP" v-model="ruleForm.hostIP"></el-input></el-form-item><el-form-item class="input" label="进入数据库所需要的用户名" prop="userName"><el-input clearable placeholder="进入数据库所需要的用户名" v-model="ruleForm.userName"></el-input></el-form-item><el-form-item class="input" label="数据库端口" prop="hostPort"><el-input clearable placeholder="数据库端口" v-model="ruleForm.hostPort"></el-input></el-form-item><el-form-item class="input" label="进入数据库所需要的密码" prop="password"><el-input clearable placeholder="进入数据库所需要的密码" v-model="ruleForm.password"></el-input></el-form-item><el-form-item class="input" label="数据库文件保存路径" prop="savePath"><el-input clearable placeholder="数据库文件保存路径" v-model="ruleForm.savePath"></el-input></el-form-item><el-form-item class="input" label="数据库导出文件文件名(.sql结尾)" prop="fileName"><el-input clearable placeholder="数据库导出文件文件名" v-model="ruleForm.fileName"></el-input></el-form-item><el-form-item class="input" label="要导出的数据库名" prop="databaseName"><el-input clearable placeholder="要导出的数据库名" v-model="ruleForm.databaseName"></el-input></el-form-item><el-form-item class="btn"><el-button type="primary" class="btn-success" @click="beifen">确定</el-button></el-form-item></el-form></div>
</template>
<script>// 数字,邮件,手机,url,身份证校验import styleJs from "../../../utils/style.js";import utilsJs, {getYearFormat,getMonthFormat,getDateFormat,getDatetimeFormat} from "../../../utils/utils.js";export default {data() {return {ruleForm: {mysqlUrl: "C:/Program Files/MySQL/MySQL Server 5.7/bin/", //MySQL安装目录hostIP: '127.0.0.1', //MySQL数据库所在服务器地址IPuserName: '', //进入数据库所需要的用户名hostPort: '3306', //数据库端口password: '', //进入数据库所需要的密码savePath: '', //数据库导出文件保存路径fileName: "", //数据库导出文件文件名databaseName: "", //要导出的数据库名},rules: {mysqlUrl: [{required: true,message: 'MySQL安装目录不能为空',trigger: 'blur'}, ],hostIP: [{required: true,message: 'MySQL数据库所在服务器地址IP不能为空',trigger: 'blur'}, ],userName: [{required: true,message: '进入数据库所需要的用户名不能为空',trigger: 'blur'}, ],hostPort: [{required: true,message: '数据库端口不能为空',trigger: 'blur'}, ],password: [{required: true,message: '进入数据库所需要的密码不能为空',trigger: 'blur'}, ],savePath: [{required: true,message: '数据库导出文件保存路径不能为空',trigger: 'blur'}, ],fileName: [{required: true,message: '数据库导出文件文件名不能为空',trigger: 'blur'}, ],databaseName: [{required: true,message: '要导出的数据库名不能为空',trigger: 'blur'}, ],}};},props: ["parent"],computed: {},created() {this.addEditForm = styleJs.addStyle();this.addEditStyleChange()this.addEditUploadStyleChange()},methods: {beifen() {let _this = this_this.ruleForm.hostIP = _this.ruleForm.hostIP.replaceAll("\\", "/")_this.ruleForm.savePath = _this.ruleForm.savePath.replaceAll("\\", "/")_this.$refs["ruleForm"].validate(valid => {if (valid) {_this.$http({url: '/beifen?hostIP=' + _this.ruleForm.hostIP +"&userName=" + _this.ruleForm.userName +"&hostPort=" + _this.ruleForm.hostPort +"&password=" + _this.ruleForm.password +"&savePath=" + _this.ruleForm.savePath +"&fileName=" + _this.ruleForm.fileName +"&databaseName=" + _this.ruleForm.databaseName +"&mysqlUrl=" + _this.ruleForm.mysqlUrl,method: "get",}).then(({data}) => {if (data && data.code === 0) {this.$message({message: "操作成功",type: "success",duration: 1500,onClose: () => {}});} else {this.$message.error(data.msg);}_this.ruleForm = {mysqlUrl: 'C:/Program Files/MySQL/MySQL Server 5.7/bin/', //MySQL数据库所在服务器地址IPhostIP: '127.0.0.1', //MySQL数据库所在服务器地址IPuserName: null, //进入数据库所需要的用户名hostPort: '3306', //数据库端口password: null, //进入数据库所需要的密码savePath: null, //数据库导出文件保存路径fileName: null, //数据库导出文件文件名databaseName: null, //要导出的数据库名}});}})},addEditStyleChange() {this.$nextTick(() => {// inputdocument.querySelectorAll('.addEdit-block .input .el-input__inner').forEach(el => {el.style.height = this.addEditForm.inputHeightel.style.color = this.addEditForm.inputFontColorel.style.fontSize = this.addEditForm.inputFontSizeel.style.borderWidth = this.addEditForm.inputBorderWidthel.style.borderStyle = this.addEditForm.inputBorderStyleel.style.borderColor = this.addEditForm.inputBorderColorel.style.borderRadius = this.addEditForm.inputBorderRadiusel.style.backgroundColor = this.addEditForm.inputBgColor})document.querySelectorAll('.addEdit-block .input .el-form-item__label').forEach(el => {el.style.lineHeight = this.addEditForm.inputHeightel.style.color = this.addEditForm.inputLableColorel.style.fontSize = this.addEditForm.inputLableFontSize})// selectdocument.querySelectorAll('.addEdit-block .select .el-input__inner').forEach(el => {el.style.height = this.addEditForm.selectHeightel.style.color = this.addEditForm.selectFontColorel.style.fontSize = this.addEditForm.selectFontSizeel.style.borderWidth = this.addEditForm.selectBorderWidthel.style.borderStyle = this.addEditForm.selectBorderStyleel.style.borderColor = this.addEditForm.selectBorderColorel.style.borderRadius = this.addEditForm.selectBorderRadiusel.style.backgroundColor = this.addEditForm.selectBgColor})document.querySelectorAll('.addEdit-block .select .el-form-item__label').forEach(el => {el.style.lineHeight = this.addEditForm.selectHeightel.style.color = this.addEditForm.selectLableColorel.style.fontSize = this.addEditForm.selectLableFontSize})document.querySelectorAll('.addEdit-block .select .el-select__caret').forEach(el => {el.style.color = this.addEditForm.selectIconFontColorel.style.fontSize = this.addEditForm.selectIconFontSize})// datedocument.querySelectorAll('.addEdit-block .date .el-input__inner').forEach(el => {el.style.height = this.addEditForm.dateHeightel.style.color = this.addEditForm.dateFontColorel.style.fontSize = this.addEditForm.dateFontSizeel.style.borderWidth = this.addEditForm.dateBorderWidthel.style.borderStyle = this.addEditForm.dateBorderStyleel.style.borderColor = this.addEditForm.dateBorderColorel.style.borderRadius = this.addEditForm.dateBorderRadiusel.style.backgroundColor = this.addEditForm.dateBgColor})document.querySelectorAll('.addEdit-block .date .el-form-item__label').forEach(el => {el.style.lineHeight = this.addEditForm.dateHeightel.style.color = this.addEditForm.dateLableColorel.style.fontSize = this.addEditForm.dateLableFontSize})document.querySelectorAll('.addEdit-block .date .el-input__icon').forEach(el => {el.style.color = this.addEditForm.dateIconFontColorel.style.fontSize = this.addEditForm.dateIconFontSizeel.style.lineHeight = this.addEditForm.dateHeight})// uploadlet iconLineHeight = parseInt(this.addEditForm.uploadHeight) - parseInt(this.addEditForm.uploadBorderWidth) * 2 + 'px'document.querySelectorAll('.addEdit-block .upload .el-upload--picture-card').forEach(el => {el.style.width = this.addEditForm.uploadHeightel.style.height = this.addEditForm.uploadHeightel.style.borderWidth = this.addEditForm.uploadBorderWidthel.style.borderStyle = this.addEditForm.uploadBorderStyleel.style.borderColor = this.addEditForm.uploadBorderColorel.style.borderRadius = this.addEditForm.uploadBorderRadiusel.style.backgroundColor = this.addEditForm.uploadBgColor})document.querySelectorAll('.addEdit-block .upload .el-form-item__label').forEach(el => {el.style.lineHeight = this.addEditForm.uploadHeightel.style.color = this.addEditForm.uploadLableColorel.style.fontSize = this.addEditForm.uploadLableFontSize})document.querySelectorAll('.addEdit-block .upload .el-icon-plus').forEach(el => {el.style.color = this.addEditForm.uploadIconFontColorel.style.fontSize = this.addEditForm.uploadIconFontSizeel.style.lineHeight = iconLineHeightel.style.display = 'block'})// 多文本输入框document.querySelectorAll('.addEdit-block .textarea .el-textarea__inner').forEach(el => {el.style.height = this.addEditForm.textareaHeightel.style.color = this.addEditForm.textareaFontColorel.style.fontSize = this.addEditForm.textareaFontSizeel.style.borderWidth = this.addEditForm.textareaBorderWidthel.style.borderStyle = this.addEditForm.textareaBorderStyleel.style.borderColor = this.addEditForm.textareaBorderColorel.style.borderRadius = this.addEditForm.textareaBorderRadiusel.style.backgroundColor = this.addEditForm.textareaBgColor})document.querySelectorAll('.addEdit-block .textarea .el-form-item__label').forEach(el => {// el.style.lineHeight = this.addEditForm.textareaHeightel.style.color = this.addEditForm.textareaLableColorel.style.fontSize = this.addEditForm.textareaLableFontSize})// 保存document.querySelectorAll('.addEdit-block .btn .btn-success').forEach(el => {el.style.width = this.addEditForm.btnSaveWidthel.style.height = this.addEditForm.btnSaveHeightel.style.color = this.addEditForm.btnSaveFontColorel.style.fontSize = this.addEditForm.btnSaveFontSizeel.style.borderWidth = this.addEditForm.btnSaveBorderWidthel.style.borderStyle = this.addEditForm.btnSaveBorderStyleel.style.borderColor = this.addEditForm.btnSaveBorderColorel.style.borderRadius = this.addEditForm.btnSaveBorderRadiusel.style.backgroundColor = this.addEditForm.btnSaveBgColor})// 返回document.querySelectorAll('.addEdit-block .btn .btn-close').forEach(el => {el.style.width = this.addEditForm.btnCancelWidthel.style.height = this.addEditForm.btnCancelHeightel.style.color = this.addEditForm.btnCancelFontColorel.style.fontSize = this.addEditForm.btnCancelFontSizeel.style.borderWidth = this.addEditForm.btnCancelBorderWidthel.style.borderStyle = this.addEditForm.btnCancelBorderStyleel.style.borderColor = this.addEditForm.btnCancelBorderColorel.style.borderRadius = this.addEditForm.btnCancelBorderRadiusel.style.backgroundColor = this.addEditForm.btnCancelBgColor})})},addEditUploadStyleChange() {this.$nextTick(() => {document.querySelectorAll('.addEdit-block .upload .el-upload-list--picture-card .el-upload-list__item').forEach(el => {el.style.width = this.addEditForm.uploadHeightel.style.height = this.addEditForm.uploadHeightel.style.borderWidth = this.addEditForm.uploadBorderWidthel.style.borderStyle = this.addEditForm.uploadBorderStyleel.style.borderColor = this.addEditForm.uploadBorderColorel.style.borderRadius = this.addEditForm.uploadBorderRadiusel.style.backgroundColor = this.addEditForm.uploadBgColor})})},}};
</script>
<style lang="scss">.slt {margin: 0 !important;display: flex;}.ad {margin: 0 !important;display: flex;}.pages {& /deep/ el-pagination__sizes{& /deep/ el-input__inner {height: 22px;line-height: 22px;}}}.el-button+.el-button {margin:0;} .tables {& /deep/ .el-button--success {height: 40px;color: rgba(0, 0, 0, 1);font-size: 14px;border-width: 5px;border-style: double;border-color: rgba(255, 255, 255, 1);border-radius: 5px;background-color: var(--publicSubColor);}& /deep/ .el-button--primary {height: 40px;color: rgba(0, 0, 0, 1);font-size: 14px;border-width: 5px;border-style: double;border-color: rgba(255, 255, 255, 1);border-radius: 5px;background-color: var(--publicSubColor);}& /deep/ .el-button--danger {height: 40px;color: rgba(0, 0, 0, 1);font-size: 14px;border-width: 5px;border-style: double;border-color: rgba(255, 255, 255, 1);border-radius: 5px;background-color: var(--publicSubColor);}& /deep/ .el-button {margin: 4px;}}.form-content {background: transparent;}.table-content {background: transparent;}.tables /deep/ .el-table__body tr {background-color: rgba(255, 255, 255, 1) !important;color: rgba(0, 0, 0, 1) !important;}.tables /deep/ .el-table__body tr.el-table__row--striped td {background: transparent;}.tables /deep/ .el-table__body tr.el-table__row--striped {background-color: var(--publicMainColor) !important;color: rgba(0, 0, 0, 1) !important;}.tables /deep/ .el-table__body tr:hover>td {background-color: var(--publicMainColor) !important;color: #333 !important;}</style>

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

这篇关于基于Javaweb的项目申报系统的设计与实现--论文pf的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090878

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境