基于Springboot的项目管理系统的设计与实现_第1页
基于Springboot的项目管理系统的设计与实现_第2页
基于Springboot的项目管理系统的设计与实现_第3页
基于Springboot的项目管理系统的设计与实现_第4页
基于Springboot的项目管理系统的设计与实现_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录TOC\o"1-3"\h\u1前言 前言1.1项目开发背景近年来,各家公司对各项目的管理趋向于信息智能化,科技公司更为突出,多个项目往往都是并行由多个团队在负责的,而项目如何管理才能使团队的交流和协作更为便捷和信息化,规范软件项目开发流程的严谨性。目前虽有一些优秀的项目管理协作工具,比如Teambition这种软件,不过这种工具免费版只开放一些功能而已,而且限制团队成员人数,只有用收费版才能有更多的功能及使用权。为了使公司更加方便地对项目进行有效管理,同时也减少公司的成本开销,此课题的背景是开发一个定制属于公司的项目管理系统,从实际出发,打造轻量型的项目管理系统,方便项目成员对项目有一个整体参与以及项目负责人对项目的整体把控。1.2项目开发的意义设计并实现一个项目管理系统,使项目负责人和项目成员可以更加快捷、方便完成项目,同时也规范化整个项目管理流程。本系统的设计目标是立足于中小型科技公司的内部项目管理协作方面的实际需要,面向公司内项目的所有成员,建立一个使用便捷、可靠的项目管理系统,从而更方便地对项目的研发过程进行规范化管理以及对项目进度进行把控。

2可行性分析2.1技术可行性本系统对技术的要求不算太难,但要求开发人员有一点项目经验。主要软件有IntellijIDEA2017,MySQL5.7,技术上后端架构使用当前主流的JavaWeb框架Springboot,整合了权限安全框架Shiro,还有持久层框架Mybatis,前端架构则使用了bootstrap、jQuery、Thymeleaf、CSS、JavaScript、ajax+json等前端技术。2.2经济可行性整体上此系统比较简便,需要一台装有浏览器的win10系统的PC电脑就够了。然后安装好MySQL5.7数据库,IntellijIDEA2017编程开发工具即可,而tomcat应用服务器在springboot框架已经内嵌了一个tomcat9版本,稍作配置即可使用。2.3操作可行性本系统整体上比较简便,本系统一旦部署好,就只需要打开Web浏览器即可访问本系统。2.4社会可行性在企业中,都会有大大小小的各个项目,而如何有效及规范的管理这些项目,使得在项目管理和协作中达到敏捷开发管理,这是很有必要的,项目管理系统符合现实企业实际场景。

3需求分析此系统的受众是科技公司内部的项目管理过程中的所有项目负责人、开发人员、测试人员、以及系统后台管理员。整个项目管理流程分为需求创建,指派需求任务、处理开发任务、处理测试任务、需求审核验收,不同的角色会有相应不同的权限操作,项目负责人在登录进系统后是可以进行立项操作的,然后由后台管理员去审批是否通过立项,然后可对已立项通过项目进行创建需求任务并指派给对应项目成员进行处理,而当是项目成员登录进系统只能查看参与项目的任务,同时不能对需求任务进行编辑,只可查看。系统还建立了一个文档中心,可支持用户上传下载项目文件资料共享,方便管理。后台管理员可对系统的项目模块、文档中心、用户模块、角色模块进行维护操作,还支持站内搜索功能和导入导出功能。同时,该系统主要分为十三个功能模块,有首页信息计算统计模块、管理员分配用户角色权限模块、项目信息总览模块、任务信息总览模块、管理员维护角色模块。项目进度管理模块、管理员维护项目模块、任务创建指派流程模块、文档中心模块、项目负责人立项模块、项目成员管理模块、用户管理员登录模块、管理员维护用户模块。此外,通过对角色权限的分配,从而实现对不同用户的不用粒度的权限控制,主要体现在三类角色上,项目负责人,项目成员,管理员。3.1系统参与者分析所得,本系统有后台管理员,项目负责人,开发人员,测试人员四个类角色,分别有不同的操作权限。3.1.1后台管理员后台管理员是个很特殊的角色,只有管理员才可以进入项目管理系统的管理端,其他角色均不可。管理员可以在后台系统中审核正在立项的项目,对项目的增加、删除、修改、查询,对用户和角色信息的导入和批量导入,对文档中心共享的资料进行维护,还有最重要的是对用户角色进行分配授权操作,最后还可以把各模块的信息批量导出到Excel表格。3.1.2项目负责人 项目负责人是系统的主要用户,他们相比起普通的项目成员多了一些更高的权限,比如项目负责人是可以立项操作的,也可以创建需求任务并指派需求,而这些操作对于普通的项目成员是没法编辑的,只能查看。还有一些与项目成员一样的功能,支持站内搜索文档资料以及上传下载文档资料在项目内共享。3.1.3开发人员开发人员就相当于普通的项目成员,可对所参与项目的需求进行查看,但不能编辑,同时可以对自身的开发任务进行移交操作和处理完任务执行下一步操作,使任务流程指向测试阶段。3.1.4测试人员测试人员也相当于普通的项目成员,一样可以对参与项目的需求进行查看,但不能编辑,同时对开发人员开发出来的功能进行测试,找出隐藏的bug。3.2功能需求分析本系统为了实现项目管理的一体化,提高项目管理工作的效率。共拆分出十三个功能模块,即首页信息计算统计模块、管理员分配用户角色权限模块、项目信息总览模块、任务信息总览模块、管理员维护角色模块。项目进度管理模块、管理员维护项目模块、任务创建指派流程模块、文档中心模块、项目负责人立项模块、项目成员管理模块、用户管理员登录模块、管理员维护用户模块。用户管理员登录模块:用户登录系统和管理员登录系统。项目信息总览模块:显示与当前登录用户相关的项目信息情况,查看项目详情首页信息计算统计模块:统计当前登录用户参与的任务数与项目数任务信息总览模块:显示与当前登录用户相关的任务信息情况项目成员管理模块:项目负责人维护着项目成员的变动项目进度管理模块:根据任务数和已完成的任务数对项目进度进行计算并显示任务创建指派流程模块:项目负责人创建系统需求任务,然后指派需求任务给开发人员,当开发人员登录系统用户端即可看到任务并处理开发任务,之后测试人员登录系统就可看到开发人员处理好的功能任务,开始处理测试任务,最后项目负责人审核验收需求文档中心模块:建立起一个文档中心,所有项目用户和管理员都可以上传和下载文档资料到各个参与的项目,后台管理员还可知道文档的存放路径项目负责人立项模块:当是项目负责人的身份进入系统时,才能发起添加项目申请,待后台管理员通过审核后才能执行项目管理员维护项目模块:后台管理员在后台审核项目负责人发起的立项申请,同时也对已审核项目进行维护管理,支持站内搜索、插入、导入、导出、修改等操作管理员维护用户模块:后台管理员在后台对用户进行管理维护,支持站内搜索、插入、导入、导出、修改等操作管理员维护角色模块:后台管理员对角色信息进行增加、修改、删除、查询、支持批量导入导出角色管理员分配用户角色权限模块:管理员在添加用户后,给用户分配角色权限3.3性能需求分析性能需求指的是保证系统安全稳定有效运行的基本要求。本系统至少需要符合以下的软件硬件要求:服务器端基本要求:CPU:Intel(R)Core(TM)i5-6200U内存:8.00GB操作系统:Windows10Pro数据库:MySQL5.7Web服务器:Tomcat9开发平台:IntellijIDEA2017,JDK1.8开发语言:JAVA开发框架:Springboot+Mybatis+Shrio系统架构:B/S(browser/server)客户端基本要求:PC:带有游览器的PC即可浏览器:GoogleChrome、Firefox、3.4系统业务用例3.4.1前台用户系统总用例图此用例是前台用户系统主要用例,除了有登录、还有上传文档资料、下载文档资料、删除文档资料、站内搜索文档、处理任务、显示参与任务数、查看项目进度共8个用例,涵盖了用户从登录系统到退出的整个项目参与流程,此外,项目负责人还特有创建需求任务、立项、维护项目成员变动、审核需求任务、指派需求任务、删除需求任务共6个用例。图3.1前台用户系统总用例图3.4.2后台管理系统总用例图此用例是后台管理系统主要用例,除了有登录、还有审核立项的项目、维护已通过审核项目的信息、维护用户信息、维护角色信息、维护文档资料、站内搜索文档、分配用户角色权限、批量导入数据、批量导出数据Excel总成绩导出等。图3.2管理员端总用例图3.4.3用户管理员登录模块图3.3用户管理员登录模块用例图用例1:用户进入系统参与者:项目经理或项目成员范围:项目管理系统用户端前置条件:操作者账号信息已录入数据库后置条件:用户网络正常主要步骤:用户输入自己的用户ID和密码。点击登录按钮。登录成功,页面自动跳转至用户端主页。替代步骤:2a.密码或用户名有误:登录失败,页面自动返回到登录页面。用例2:管理员进入系统参与者:管理员范围:项目管理系统管理员端前置条件:操作者账号信息已录入数据库后置条件:网络正常主要步骤:管理员输入自己的管理员ID和密码。点击登录按钮。登录成功,页面自动跳转至管理员主页。替代步骤:2a.密码或用户名有误:登录失败,页面自动返回到登录页面。3.4.4项目管理模块图3.3项目管理模块用例图用例3:项目负责人立项项目参与者:项目经理范围:项目管理系统用户端前置条件:项目经理已经成功登录项目管理系统用户端后置条件:用户网络正常主要步骤:项目负责人点击项目面板中的添加项目按钮系统进入添加项目页面,显示需要填写的信息表单项目负责人填写对应项目的信息点击确定提交按钮系统自动保存项目负责人所填写的内容用例4:维护项目成员变动参与者:项目经理范围:项目管理系统用户端前置条件:用户已经成功登录项目管理系统用户端后置条件:用户网络正常主要步骤:项目负责人点击项目面板的各项目模块系统进入项目详情页面项目负责人点击项目成员处修改框重新输入项目成员,用、分隔之后点击保存,系统自动会保存项目负责人对项目成员的维护变动用例5:查看项目参与者:项目经理或项目成员范围:项目管理系统用户端前置条件:用户已经成功登录项目管理系统用户端后置条件:用户网络正常主要步骤:项目负责人或项目成员点击项目面板的各项目模块系统进入项目详情页面用例6:查看项目参与者:管理员范围:项目管理系统管理端前置条件:管理员已经成功登录项目管理系统管理端后置条件:管理员网络正常主要步骤:管理员点击项目中心菜单点击管理已审核项目子菜单系统进入已审核项目信息总览页面用例7:删除项目参与者:管理员范围:项目管理系统管理端前置条件:管理员已经成功登录项目管理系统管理端后置条件:管理员网络正常主要流程管理员点击项目中心菜单点击管理已审核项目子菜单系统进入已审核项目信息总览界面鼠标选择到要想删除的那个项目的条目点击那条目的删除按钮系统自动弹出删除确认框,点击确认按钮系统删除项目信息用例8:审核立项项目参与者:管理员范围:项目管理系统管理端前置条件:管理员已经成功登录项目管理系统管理端后置条件:管理员网络正常主要步骤1.管理员单击项目中心菜单进入后再单击审核项目子菜单2.系统进入未审核项目信息总览界面3.鼠标选择到要想审核的那个项目的条目并点击那条目的审核按钮4.系统进入立项项目的项目详情信息5.选择下拉选框,选择状态为通过审核或者拒绝通过审核并提交替代步骤:7a.选择通过审核系统返回审核项目列表审核项目列表中当前审核通过的项目已不存在7b.选择拒绝通过审核系统返回审核项目列表审核项目列表中当前审核通过的项目仍然存在可以选择一件清空立项的所有项目管理员重复1-7步,重新审核用例9:站内搜索项目参与者:管理员范围:项目管理系统管理端前置条件:管理员已经成功登录项目管理系统管理端后置条件:管理员网络正常主要步骤1.管理员点击项目中心菜单2.点击管理已审核项目子菜单3.系统进入已审核项目信息总览界面4.鼠标移动到搜索框5.输入关键字并点击搜索按钮用例10:批量导出项目参与者:管理员范围:项目管理系统管理端前置条件:管理员已经成功登录项目管理系统管理端后置条件:管理员网络正常主要步骤1.管理员点击项目中心菜单2.点击管理已审核项目子菜单3.系统进入已审核项目信息总览界面4.点击批量导出详细项目信息Excel表按钮5.选择要保存的本地路径6.系统自动下载Excel表格数据3.4.5任务管理模块图3.4任务管理模块用例图用例11:项目负责人创建需求任务参与者:项目经理范围:项目管理系统用户端前置条件:项目负责人已经成功登录项目管理系统用户端后置条件:用户网络正常主要流程项目负责人点击任务面板模块点击添加,系统进入添加任务的页面输入相关任务信息后,点击添加按钮添加成功或失败的提示框弹出随后跳转到任务面板页面用例12:项目负责人删除需求任务参与者:项目经理范围:项目管理系统用户端前置条件:项目负责人已经成功登录项目管理系统用户端后置条件:用户网络正常主要步骤项目负责人点击任务面板模块选中要删除的需求任务块点击任务块中的删除按钮系统弹出删除确认框点击确认后立即删除任务用例13:项目负责人指派需求任务参与者:项目经理范围:项目管理系统用户端前置条件:项目负责人已经成功登录项目管理系统用户端后置条件:用户网络正常主要步骤项目负责人点击任务面板模块选中要指派的需求任务块点击任务块中的指派按钮系统弹出指派项目成员名单模态框在下拉选项中选择要指派的项目成员点击确认后此需求任务就挂在了被指派者的任务下用例14:项目成员处理任务参与者:项目成员范围:项目管理系统用户端前置条件:项目成员已经成功登录项目管理系统用户端后置条件:用户网络正常主要步骤项目负责人点击任务面板模块选中要指派的需求任务块点击任务块中的指派按钮系统弹出指派项目成员名单模态框在下拉选项中选择要指派的项目成员点击确认后此需求任务就挂在了被指派者的任务下用例15:项目成员查看任务详情参与者:项目成员范围:项目管理系统用户端前置条件:项目成员已经成功登录项目管理系统用户端后置条件:用户网络正常主要步骤项目负责人点击任务面板模块选中要查看的需求任务块点击任务块中的查看详情按钮系统进入任务详情页面3.4.6文档中心模块图3.5文档中心模块用例图用例16:上传文档资料参与者:项目成员或项目经理范围:项目管理系统用户端前置条件:用户已成功登录项目管理系统用户端后置条件:用户网络连接正常主要步骤用户点击文档中心模块系统进入文档资料展示页面点击上传文档资料按钮选择文档所属项目的项目ID选择本地要上传的文件最后点击添加按钮用例17:下载文档资料参与者:项目成员或项目经理范围:项目管理系统用户端前置条件:用户已成功登录项目管理系统用户端后置条件:用户网络连接正常主要步骤:1.用户点击文档中心模块2.系统进入文档资料展示页面3.选中要下载的文档资料条目4.点击下载图标按钮5.选择本地要保存的路径用例18:站内搜索文档参与者:项目成员或项目经理范围:项目管理系统用户端前置条件:用户已成功登录项目管理系统用户端后置条件:用户网络连接正常主要步骤用户点击文档中心模块系统进入文档资料展示页面在搜索框中输入要搜索的关键字点击搜索按钮用例19:删除文档资料参与者:项目成员或项目经理范围:项目管理系统用户端前置条件:用户已成功登录项目管理系统用户端后置条件:用户网络连接正常主要步骤用户点击文档中心模块系统进入文档资料展示页面选中要删除的文档资料条目单击删除按钮,系统弹出删除确认框单击确认按钮立即删除3.4.7用户管理模块图3.6用户管理模块用例图用例20:添加用户参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤:单击管理用户菜单下的维护用户信息子菜单单击添加用户按钮系统跳转到添加用户界面输入用户必填信息点击添加按钮,系统立即保存用户数据用例21:站内搜索用户参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤管理员点击管理用户菜单下的维护用户信息子菜单在搜索框中输入搜索关键字点击搜索按钮系统自动匹配搜索出对应的用户数据并进行展示用例22:修改用户信息参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤管理员点击管理用户菜单下的维护用户信息子菜单选中要修改用户的条目点击编辑按钮系统自动跳转到用户数据编辑页面修改完后点击更新按钮系统自动保存用户最新数据用例23:删除用户信息参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤管理员点击管理用户菜单下的维护用户信息子菜单选中要删除的条目,点击删除按钮系统弹出删除确认框点击确认按钮,系统立即删除用户数据用例24:批量导入用户信息参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤管理员点击管理用户菜单下的维护用户信息子菜单先点击下载Excel模块按钮本地按照模块的格式填写好对应用户数据点击批量导入用户按钮弹出导入用户Excel模态框选择刚才编辑好的用户Excel上传到系统点击提交按钮后系统自动进行批量导入操作用例25:批量导出用户信息参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤管理员点击管理用户菜单下的维护用户信息子菜单点击批量导出用户按钮选择本地保存的导出路径点击确认,系统自动导出用户数据Excel表3.4.8角色管理模块图3.7角色管理模块用例图用例26:批量导出用户信息参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤管理员点击管理角色菜单下的维护角色信息子菜单点击批量导出角色按钮选择本地保存的导出路径点击确认,系统自动导出用户数据Excel表3.4.9分配用户角色权限模块图3.8分配用户角色权限模块用例图用例27:分配用户角色权限参与者:管理员范围:项目管理系统管理端前置条件:管理员已成功登录项目管理系统管理端后置条件:网络连接正常主要步骤管理员点击分配用户角色菜单系统进入用户角色分配页面在搜索框输入用户ID或者用户名点击搜索按钮之后在下拉选框中选择目前系统所分配的角色岗位最后点击确认分配角色按钮3.4.10个人统计模块图3.9个人统计模块用例图用例28:查看个人处理任务数参与者:项目经理或者项目成员范围:项目管理系统用户端前置条件:系统自动统计好个人处理任务数,用户已成功登录项目管理系统用户端后置条件:网络连接正常主要步骤用户点击首页模块进入首页任务数据统计展示页面用例29:查看个人参与项目数参与者:项目经理或者项目成员范围:项目管理系统用户端前置条件:系统自动统计好个人参与项目数,用户已成功登录项目管理系统用户端后置条件:网络连接正常主要步骤用户点击首页模块进入首页项目数据统计展示页面

4概要设计4.1系统整体流程图图4.1系统整体流程图上图为系统整体流程图,直观简洁地描述了系统整体执行流程,第一步是登录系统,判断用户ID与密码是否相符,同时判断登录者身份,如果是项目负责人,可以进行项目需求任务的创建和指派需求给对应的项目成员以及最后项目需求任务的审核,如果是开发人员,可根据被指派的需求任务处理自身的开发任务,如果是测试人员,可根据被指派的需求任务处理自身的测试任务。如果登录身份是管理员,则进入管理员后台页面,对所有项目进行维护管理,若有正在立项的项目也可以对其进行审核,同时管理员负责在后台添加和删除用户信息,也可通过导入导出功能实现批量添加用户,还要对用户的角色权限进行分配。4.2领域模型领域模型从业务出发,专注于分析问题领域,下图是我做出的管理员、项目成员、项目、任务等概念的领域模型分析。图4.2领域模型图4.3模块结构本系统共拆分出十三个功能模块,即首页信息计算统计模块、管理员分配用户角色权限模块、项目信息总览模块、任务信息总览模块、管理员维护角色模块。项目进度管理模块、管理员维护项目模块、任务创建指派流程模块、文档中心模块、项目负责人立项模块、项目成员管理模块、用户管理员登录模块、管理员维护用户模块。此外,通过对角色权限的分配,从而实现对不同用户的不用粒度的权限控制。4.3.1模块结构图图4.3系统整体流程图4.3.2模块结构表表4.1模块结构表模块名模块子功能功能细化用户管理员登录模块登录用户和管理员登录系统项目信息总览模块显示项目情况显示仅与当前登录用户相关的项目信息情况,查看项目详情首页信息模块计算统计当前登录用户参与任务数与项目数统计当前登录用户参与任务数与项目数项目成员管理模块维护人员变动项目负责人维护项目成员的变动项目进度管理模块计算并显示进度根据任务数和已完成的任务数对项目进度进行计算并显示任务创建指派流程模块1、创建需求任务2、指派任务3、审核验收需求任务项目负责人开始创建需求任务,并指派需求任务给对应开发人员,开发人员处理开发任务,之后测试人员测试功能处理测试任务,最后项目负责人审核验收需求文档中心模块1、上传文档资料2、下载文档资料3、查看文档资料存放路径在项目内,开辟一个专门存放文档的地方,供项目内成员下载和上传,后台管理员端还可知道文档的存放路径项目负责人立项模块项目负责人立项项目负责人对项目进行立项,待后台管理员通过审核后才能进行执行项目管理员管理项目模块1、管理员审核项目2、管理员维护已审核项目3、审核项目信息4、批量导入导出项目后台管理员对正在立项的项目进行审核,决定是否通过,对已审核项目信息进行维护,支持批量导入导出项目管理员管理用户模块1、维护角色信息2、批量导入导出用户后台管理员对用户信息进行维护,支持批量导入导出用户管理员分配用户角色权限模块分配用户角色权限管理员在添加用户后对用户角色权限进行分配管理员管理角色模块1、维护角色信息2、批量导入导出角色后台管理员对角色信息进行维护,支持批量导入导出角色4.4数据库设计4.4.1系统数据库E-R图E-R图叫做实体-联系图,下方E-R图描述了项目管理系统的现实概念结构模型。图4.4系统数据库E-R图4.4.2系统数据库总表表4.2系统数据库总表表名中文描述表名功能说明users用户表存储用户信息roles角色权限表存储角色信息projects项目表存储项目信息表tasks项目任务表存储项目任务信息documents项目文档表存储项目文档资料members项目人员表存储项目成员信息(解决项目与项目人员的多对多关联)execute任务执行表存储任务处理者信息(解决任务与处理人的多对多关联)auditing立项审核表存储待审核项目表4.4.3数据字典表4.3users数据字典表名users列名数据类型非空约束条件中文描述userIdvarchar(20)true主键主键标识,用户账号IDuserNamevarchar(50)true用户名passwordvarchar(50)true密码sexchar(2)true性别addressvarchar(100)false住址phonevarchar(20)false联系手机号roleIdinttrue角色ID表4.4roles数据字典表名roles列名数据类型非空约束条件中文描述roleIdinttrue主键主键标识,角色IDroleTypevarchar(50)true角色类型roleNamevarchar(50)true角色名rolePowervarchar(50)true角色拥有的权限,如增加、删除、修改、查询表4.5projects数据字典表名projects表列名数据类型非空约束条件中文描述projectIdvarchar(30)true主键主键标识,项目IDprojectNamevarchar(50)false项目名称projectContentvarchar(255)false项目简要介绍time_startdatefalse项目开始时间time_enddatefalse项目结束时间leadervarchar(20)false项目负责人phonevarchar(20)false联系手机号inputMoneyfloatfalse项目投入资金outputMoneyfloatfalse项目创收资金costfloatfalse项目成本costDetailfloatfalse项目资金消费明细西processfloatfalse项目总进度(已完成任务数/总共任务数)表4.6tasks数据字典表名tasks表列名数据类型非空约束条件中文描述taskIdvarchar(20)true主键主键标识,任务IDtaskNamevarchar(50)false任务名称taskContentvarchar(255)false任务内容createTimedatefalse创建时间finishTimedatefalse截止完成时间taskStatusvarchar(20)true任务状态,如已完成、正在进行taskTypevarchar(20)true任务类型,如需求任务、开发任务taskLevelvarchar(10)true任务优先级projectIdvarchar(30)true外键,关联Projects表关联项目表的项目ID表4.7documents数据字典表名documents表列名数据类型非空约束条件中文描述documentIdinttrue主键主键标识,文档IDdocumentNamevarchar(100)false文档名uploadTimedatefalse文档上传时间authorvarchar(50)false文档作者savePathvarchar(255)false文档存储路径projectIdvarchar(30)true外键,关联Projects表关联项目表的项目ID表4.8members数据字典表名members表列名数据类型非空约束条件中文描述memberIdinttrue主键主键标识,项目人员IDuserIdvarchar(20)true外键,关联Users表用户ID,项目人员projectIdvarchar(30)true外键,关联Projects表项目ID表4.9execute数据字典表名execute表列名数据类型非空约束条件中文描述executeIdinttrue主键主键标识,任务处理IDuserIdvarcahr(20)true外键,关联Users表用户ID,任务处理者taskIdvarchar(20)true外键,关联Tasks表任务ID表4.10auditing数据字典表名auditing表列名数据类型非空约束条件中文描述auditingIdvarchar(30)true主键主键标识,审核IDprojectName_tmpvarchar(50)false项目名称projectContent_tmpvarchar(255)false项目简要介绍time_start_tmpdatefalse项目开始时间time_end_tmpdatefalse项目结束时间leader_tmpvarchar(20)false项目负责人phone_tmpvarchar(20)false联系手机号inputMoney_tmpfloatfalse项目投入资金outputMoney_tmpfloatfalse项目创收资金cost_tmpfloatfalse项目成本costDetail_tmpvarchar(300)false项目资金消费明细auditingStatusinttrue立项审核状态0未审核通过1审核通过4.5项目api接口设计项目api设计采用当前规范的restful风格API接口设计,本项目中具体应用而设计出的RESTful风格api大概有以下这些:表4.11项目API接口表功能请求方式请求资源api后台管理端restfulAPI跳转到登录页面/toLogin执行登录请求/login执行登出请求/auth/logout跳转到前台用户首页/user-sys/index跳转到后台管理员首页/admin-sys/index查询所有角色信息GET/admin-sys/roles跳转到添加角色界面GET/admin-sys/role添加role对象POST/admin-sys/role跳转到修改角色界面GET/admin-sys/role/{roleId}修改role对象PUT/admin-sys/role删除role对象DELETE/admin-sys/role/{roleId}查询所有用户信息GET/admin-sys/users跳转到添加用户界面GET/admin-sys/user添加user对象POST/admin-sys/user跳转到修改用户界面GET/admin-sys/user/{userId}修改user对象PUT/admin-sys/user删除user对象DELETE/admin-sys/user/{userId}跳转到分配用户角色界面GET/admin-sys/user/role分配用户角色PUT/admin-sys/user/role/{userId},{roleName}跳转到当前登录管理员信息界面GET/admin-sys/admin/{userId}批量导出用户信息EXCELGET/admin-sys/users-export下载用户信息EXCEL模板GET/admin-sys/users-template批量导入用户信息EXCELPOST/admin-sys/users-import批量导出角色信息EXCELGET/admin-sys/roles-export下载角色信息EXCEL模板GET/admin-sys/roles-template批量导入角色信息EXCELPOST/admin-sys/roles-import查询所有项目信息GET/admin-sys/projects跳转到修改项目界面GET/admin-sys/project/{projectId}修改project对象PUT/admin-sys/project删除project对象DELETE/admin-sys/project/{projectId}批量导出项目信息EXCELGET/admin-sys/projects-export查询所有文档信息GET/admin-sys/documents添加文档资料POST/admin-sys/document删除文档资料DELETE/admin-sys/document查询所有未审核项目列表GET/admin-sys/auditings审核未通过的项目PUT/admin-sys/auditing一键清空未审核项目列表DELETE/admin-sys/auditing按关键字站内搜索用户GET/admin-sys/user-search/{keyword}按关键字站内搜索文档GET/admin-sys/document-search/{keyword}按关键字站内搜索项目GET/admin-sys/project-search/{keyword}按关键字站内搜索用户角色分配GET/admin-sys/user/role-search/{keyword}前台用户端restfulAPI跳转到当前登录用户信息界面GET/user-sys/user/{userId}根据当前用户查询参与的项目GET/user-sys/projects/{userId}跳转到当前登录用户的所有任务列表界面GET/user-sys/tasks/{userId}跳转到添加任务界面GET/user-sys/task添加任务POST/user-sys/task删除任务DELETE/user-sys/task/{taskId}跳转到查看指定任务详情界面GET/user-sys/task/{taskId}跳转到文档中心GET/user-sys/documents/{userId}删除文档资料DELETE/admin-sys/document/{documentId}站内搜索文档资料GET/user-sys/docuemnt-search/{keyword}上传文档资料POST/user-sys/document查找当前任务的可指派项目成员GET/user-sys/task-apport/{taskId}指派任务给项目成员PUT/user-sys/task-apport/{taskId}项目负责人添加项目成员POST/user-sys/member项目负责人删除项目成员DELETE/user-sys/member项目负责人修改项目信息PUT/user-sys/project项目负责人进入到立项界面GET/user-sys/project项目负责人立项操作POST/user-sys/project5详细设计5.1程序开发视图 本系统的开发使用主流的JavaWeb开发框架Springboot+持久层框架Mybatis+轻量级的权限安全框架Shiro,按照功能的不同进行分层的结构进行开发,分层结构总共5层:View视图层、Controller控制层、Service实现层、Dao持久层、Model模型层。各层之间逐层交互调用关系和详细开发视图如图5.1所示。图5.1程序开发视图5.2系统类关系图图5.2用户登录类图登录总共分为两类大角色登录,用户与管理员共同使用LoginController类,LoginController类根据不同的标识,登录跳转到不同的View。图5.3用户管理类图使用UserController类来进行请求的控制转发,调用UserService接口来进行请求的逻辑处理,再调用UserMapper接口通过User持久化对象的交互把用户数据持久化进数据库DB中,完成一系列用户管理操作,比如查看所有用户信息列表,是通过UserController类中的userList方法-->UserService接口中的findAllUser方法-->UserMapper接口中的findAllUser方法从而实现此功能,返回页面请求到的数据,在页面再进行数据渲染展示;比如批量导入用户信息功能,原理其实是通过UserController类的importExcel方法-->ExcelService接口中的importUserExcel方法,利用poi的jar包程序对上传的excel文件进行解析读取表格数据,最后循环调用UserService接口中的saveUser方法对数据进行批量读入。图5.4文档中心类图关于文档资料的维护管理都在这个文档中心类中,不管是用户还是管理员,都是通过这个DocumentController类来对请求进行控制处理的,项目负责人要上传文档资料时是将上传文件资料存到项目中指定的文件夹路径下,在获取这个路径,把这个文件存储路径通过调用DocumentMapper接口与Document对象持久化到数据库DB中,然后返回给页面的下载图标超链接中就嵌入了这个文件路径,当项目部署启动后同时就可以对上传的文件进行下载操作了。5.3系统详细设计项目管理系统,主要是服务于企业的团队成员。所以,该系统设计需要简便,方便操作,界面直观,同时确保系统稳定、稳固。下面是项目管理系统的主要界面。5.3.1登录页面用户登录系统是进行项目协同或管理员管理的前提条件,项目成员对项目的操作是有区分对象和权限的,所以对整个项目流程的把控和参与,以及所有操作前都需要先登录系统。图5.5登录页面5.3.2用户端项目面板页面 前台用户系统的项目面板最主要的就是项目信息的总览,界面简洁,各项目采用项目块的方式排列成一行一行,可以直接点击对应项目块而进入查看项目详情,让项目负责人和项目成员登录进前台系统后,可以方便进行操作,这里有权限方面的控制,如项目负责人进入此面板,才会有立项这个功能按钮。点击进入项目详情中同样也只有项目负责人才有权限可以维护项目成员变动的模块。图5.6用户端的项目面板5.3.3用户端维护项目成员变动 项目负责人进入对应的项目块,进行维护项目成员变动的操作,这个模块放置在了项目详情页面,在下拉选框中可以搜索到在后台导入的所有用户,选中后点击确定加入成员即可增加当前项目成员。图5.7项目负责人维护项目成员变动模块5.3.4用户端任务面板页面任务面板页面是项目成员操作得最多的一个板块,项目成员可以在这个页面下查看参与项目下的所有需求,还可以查看当前挂在自己名下的所有任务,项目负责人在这个板块下还可以添加需求任务和指派需求任务。图5.8项目负责人任务面板页面5.3.5用户端上传文档资料页面 用户点击导航栏进入文档中心,在文档中心里,可以看到当前登录用户所参与项目的所有文档资料,可以模糊搜索关键字匹配到想要查看的文档资料,在文档中心里项目成员还可以上传文档资料以供查阅使用。图5.9上传文档资料5.3.6用户端指派需求任务 项目负责人在任务面板中可以对需求任务进行指派操作。图5.10项目负责人指派需求5.3.7用户端处理任务 当项目成员登录进系统后,进入任务面板,可以看到被项目负责人指派到自己名下的任务,从而根据任务详情处理任务,按流程进行。图5.11项目成员处理需求5.3.8管理端管理用户信息整个系统的用户信息是不会凭空而来,只有通过管理员在管理端录入用户信息,这些用户才可以在用户端进行相应的权限操作,体现了系统的安全性。针对用户数据若比较多的情况,考虑便捷性,我加入了站内搜索的功能。使得管理员在管理用户信息是方便快捷。图5.12管理员管理用户信息5.3.9管理端导入Excel数据表格总是只能单条记录的添加,会显得系统比较繁琐,所以我加入了批量导入数据的功能,即先点击下载Excel模板,按照模板的格式规范填写好准备好用户数据,之后在系统内通过上传Excel数据表格让系统自动解析出用户信息并批量录入数据库。图5.13管理员下载用户Excel模板数据表格图5.14管理员上传用户Excel数据表格5.3.10管理端分配用户权限录入完用户信息时,需要给用户分配好角色权限,项目管理系统最主要的就是权限的准确性,各个权限都有对应的可操作范围,再次体现系统的安全性。图5.15管理员分配用户权限页面图5.16管理员分配用户权限成功提示5.3.11管理端管理已审核项目项目管理系统,最主要的对象就是项目,所以对项目的管理也是很不可或缺,项目管理模块中,管理员可以对项目进行编辑,删除,批量导出,站内搜索等一系列功能。图5.17管理员管理已审核项目页面5.3.12管理端审核项目这是审核立项项目的功能,主要是为了增强系统的审批功能,当项目负责人在用户端立项后,项目不能立即就被创建,立项后需要管理员在后台对立项项目进行审核,然后选择是否通过审核允许立项。图5.18管理员审核项目负责人立项项目的页面

6软件测试6.1测试环境6.1.1服务器端环境CPU:Intel(R)Core(TM)i5-6200U内存:8.00GB操作系统:Windows10Pro数据库:MySQL5.7Web服务器:Tomcat96.1.2客户端测试环境浏览器:GoogleChrome操作系统:Windows10ProCPU:Intel(R)Core(TM)i5-6200U6.2测试计划对于这个系统,我的测试计划是把测试重点放在一些核心功能的测试上,比如前台用户端的项目负责人指派需求功能,管理员批量导入用户数据功能,导出Excel表格功能等,而每开发好一个功能模块就先安排一次独立功能模块的测试,后续多个模块开发好就再进行多模块联合测试。6.2.1总体描述本系统在win10电脑,tomcat9.0服务器作为部署环境,用Firefox火狐浏览器+Chrome谷歌浏览器,模拟项目管理系统在实际运行中各功能操作的正确性。 项目管理系统前台用户端整体测试和后台管理端的整体测试,用户端测试中,首先使用用户ID和密码登录系统用户端,成功登录后进入首页,点击项目面板进行参与项目查看和操作,主要针对不同用户进行登录,因为此系统对角色权限的把控是重点,项目负责人角色登录用户端和项目成员角色登录用户端,有几项区别:项目负责人在项目面板中是拥有立项功能按钮,还有指派需求功能按钮,进入项目信息中项目负责人还拥有维护项目成员变动的功能模块,这几项功能对于项目成员登录进系统是不会有显示出来的。这就是前台用户端基于角色的细粒度权限管理,前台用户端主要测试重点在这里,经一系列切换登录流程操作下来,系统根据用户角色正常显示功能按钮。点击文档中心模块进入查看文档列表,用户是可以上传文档资料到对应项目里的,点击上传文档按钮,选择本地要上传的文件,勾选上参与项目ID,点击添加按钮,一系列测试操作后均正常。 项目管理系统后台管理端有多个模块,首先登录管理员端,管理员端的菜单栏在首页左侧,可以看到项目中心、文档中心、管理用户、管理角色等模块,逐个菜单功能点击测试。在管理员端管理用户菜单中点击维护用户信息子菜单,点击下载用户Excel模板按钮下载模板文件,然后点击批量导入用户按钮,在系统弹出的导入模态框中上传本地Excel用户数据表格,系统就开始自动批量录入用户数据了。同时系统也支持了批量导出用户信息Excel功能,点击批量导出用户按钮,经过一系列操作功能正常。6.2.2测试原则我们人工是不可能做到穷举测试,用有限的良好测试用例发现更多的缺陷。对系统的测试是早测试早有利,减少项目时间成本。6.2.3测试方法单元测试:通过对代码中独立功能进行调试,一般由开发人员执行。黑盒测试:通过输入不符合规范的数据或操作,和预期输出结果比对从而发现缺陷。集成测试:通过对系统的按模块区分单独做测试,最后将这些模块整合起来再一起做测试。6.3测试用例6.3.1用户登录测试用例表6.1用户登录测试用例用例IDT001用例名称用户登录用例描述用户通过用户ID和密码登录项目管理系统用户端测试步骤编号场景测试步骤预期结果实际结果Step1进入登录页面输入登录页面地址进入进入登录页面与预期结果一致Step2进行登录输入用户ID及密码系统跳转至用户端首页与预期结果一致6.3.2管理员登录测试用例表6.2管理员登录测试用例用例IDT002用例名称管理员登录用例描述管理员通过输入管理员ID和密码登录系统测试步骤编号场景测试步骤预期结果实际结果Step1进入登录页面输入登录页面地址进入登录页面成功进入登录页面与预期结果一致Step2进行登录输入管理员ID与密码系统跳转至管理员端首页与预期结果一致6.3.3项目负责人创建需求任务测试用例表6.3项目负责人创建需求测试用例用例IDT003用例名称项目负责人创建需求用例描述项目负责人在立项页面输入数据,并提交保存。测试步骤编号场景测试步骤预期结果实际结果Step1进入立项页面项目负责人角色登录用户端后点击项目面板,单击立项功能按钮项目面板中有对应的立项按钮,点击后进入立项页面与预期结果一致Step2在表单中输入数据并保存在输入框内输入数据,然后点击添加按钮系统跳转到项目面板页面与预期结果一致6.3.4项目负责人指派需求测试用例表6.4项目负责人指派需求测试用例用例IDT004用例名称项目负责人指派需求用例描述项目负责人点击对应任务块的指派按钮,选择用户并确认指派。测试步骤编号场景测试步骤预期结果实际结果Step1进入任务面板页面项目负责人登录进系统用户端后点击任务面板页面进入并展示用户参与项目的任务与预期结果一致Step2选择要指派的任务找到要指派的需求任务,单击任务块的指派功能按钮系统自动弹出指派模态框,让我们选择用户与预期结果一致Step3选择用户,并确认指派项目负责人在下拉选框中找到要指派的项目成员,并点击确认弹出指派成功的提示框,返回任务面板页面与预期结果一致6.3.5用户上传文档资料测试用例表6.5用户上传文档资料测试用例用例编号T005用例名称用户上传文档资料用例描述用户点击文档中心的上传文档功能按钮,上传后点击添加。测试步骤编号场景测试步骤预期结果实际结果Step1用户进入文档中心显示页面用户点击导航栏中的文档中心菜单进入文档资料显示列表与预期结果一致Step2上传文档资料用户点击上传文档功能按钮,选择上传文件,点击添加页面返回到文档中心显示文档资料列表与预期结果一致6.3.6管理员管理用户测试用例表6.6管理员管理用户测试用例用例编号T006用例名称管理员管理用户信息用例描述管理员修改、增加、删除用户信息测试步骤编号场景测试步骤预期结果实际结果Step1管理员进入用户列表管理页面管理员在管理员端点击管理用户菜单,再点击维护用户信息子菜单页面跳转到用户信息管理页面,显示用户信息与预期结果一致Step2管理员编辑用户信息管理员点击需要修改的条目的编辑按钮,跳转到编辑页面后输入修改数据,再点击更新按钮修改用户信息成功,并跳转到用户信息列表与预期结果一致Step3管理员增加新的用户管理员点击添加用户按钮,调整到添加页面后输入用户数据,再点击添加按钮进入添加用户页面,输入用户信息,添加成功返回用户列表与预期结果一致Step4管理员删除用户管理员点击需要删除的用户,系统弹出删除确认框,再点击确认按钮系统弹出删除提示框删除成功,再刷新用户列表与预期结果一致6.3.7管理员导入用户Excel表格测试用例表6.7管理员导入用户Excel数据表格测试用例用例编号T007用例名称管理员导入用户Excel数据表格用例描述管理员批量导入用户数据测试步骤编号场景测试步骤预期结果实际结果Step1下载用户Excel数据表格模板管理员在进入用户列表后,点击下载用户信息Excel模板功能按钮系统弹出Excel数据表格的保存路径选框与预期结果一致Step2上传修改好的用户Excel数据表格管理员点击批量导入用户功能按钮系统弹出导入提示框与预期结果一致Step3批量录入用户信息管理员在导入提示框点击确认系统弹出导入结果框,然后刷新用户列表与预期结果一致6.3.8管理员分配用户权限测试用例表6.8管理员分配用户权限测试用例用例编号T008用例名称管理员分配用户权限用例描述管理员分配用户角色权限测试步骤编号场景测试步骤预期结果实际结果Step1管理员进入用户角色分配页面管理员点击管理员端的分配用户角色菜单页面跳转到分配用户角色页面与预期结果一致Step2管理员分配用户角色管理员选择要分配的用户角色,再点击确认分配角色功能按钮下拉框关闭,弹出分配成功提示框,刷新页面与预期结果一致6.3.9管理员管理已审核项目测试用例表6.9管理员管理已审核项目测试用例用例编号T009用例名称管理员管理已审核项目用例描述管理员修改、删除已审核项目测试步骤编号场景测试步骤预期结果实际结果Step1管理员进入已审核项目列表页面管理员点击项目中心菜单下的管理已审核项目子菜单页面跳转到已审核项目列表与预期结果一致Step2管理员修改项目信息管理员点击项目列表中项目的编辑功能按钮页面跳转到编辑项目信息页面与预期结果一致Step3管理员输入修改数据并提交管理员数据修改数据,并点击更新按钮提交表单系统到跳转到项目列表展示页面与预期结果一致Step4管理员删除已审核项目管理员点击项目的删除功能按钮,再点击确认系统弹出删除确认框,点击确认后则刷新项目列表与预期结果一致6.3.10管理员审核立项项目测试用例表6.10管理员审核立项项目测试用例用例编号T010用例名称管理员审核立项项目用例描述管理员审核立项项目测试步骤编号场景测试步骤预期结果实际结果Step1管理员进入审核立项界面管理员在管理员端的项目中心菜单点击审核项目子菜单页面跳转到立项项目列表页与预期结果一致Step2管理员审核项目信息管理员点击审核功能按钮页面跳转到立项项目详情页与预期结果一致Step3管理员通过立项审核管理员审核完项目信息,下拉框选择通过审核,并点击更新按钮页面返回立项项目列表页,同时清除此立项记录与预期结果一致6.4测试总结图6.1系统测试出的bug分布图整体系统的测试中,测试出的bug数总共有25个,其中前端界面显示出现问题的bug有6个,占比24%,后端接口数据功能bug有4个,占比16%,而前后端联调数据交互bug有15个,占比60%。经过多次对用户端和管理端进行整体测试,整体核心流程都可以正常完成,各模块工作正常,测试出来的都是小bug,且已修复完毕。目前来看,整个系统可稳定投入使用。

7总结这次毕业设计,是对自己编程技能的一次挑战。在大三下学期的框架实训课,组织其他2位同学跟着赵卓君老师完成了“国际交流管理系统”,对一个系统的开发已经有大概的认识和一些个人的见解,这一次独立完成的项目管理系统选用了互联网主流的框架技术,是对自己能力的进一步挑战,我也希望可以完美地完成这么一个系统,真正把大学学到的技能用到实处。刚开始确定课题后,经常与指导老师赵卓君老师商讨,了解需求,而这个期间,对项目管理需求的不清晰,导致经历了很多次更改需求,重构数据库设计,对系统的改造,好在最后赵老师都能给到我一些建议,让我能从中明白该怎么做下去以及项目管理过程中的实际意义。因为第一次接触新技术,所以在代码编写过程中吃过很多亏,最印象深刻的是Ajax前端技术的使用,平时主要都是在学习后台框架技术,对前端技术不是很精通,对异步请求后台获取数据并渲染这个实现过程遭遇卡点,我使用的是Thymeleaf模板引擎开发界面,当删除数据请求时并不是执行后就跳转到其他页面,于是跟添加请求不一样的做法,我采用了Ajax异步请求技术来实现前后台交互,在当前页面删除数据后局部刷新页面,可是一直请求报错405,这个bug纠结了我许久,经过很多思考和尝试查阅许多资料,最后明白是要在传递data数据时改变请求方式,把_method:DELETE参数封装进data数据里一同传送才解决的。还有一次就是使用poi技术去解析Excel表时也遭遇卡点,因为上传的Excel数据格式总是不匹配,最后经过思考考虑,我加多了一个功能,就是提供下载导入前的Excel模板,管理员在导入Excel先下载模板,在模板里规范的格式填写数据Excel,之后再上传就好了,其实做导入导出Excel功能的时候遇到了许多困难,还好之前大三实训课时做的系统实现过导入导出Excel功能,当时我花了2天研究并实现了导入导出功能,主要用到了poi和jxl这两种技术解析处理Excel数据,当时还总结写了一篇博文记录分享了实现和排查解决bug过程。参考文献[1]张工厂MySQL5.7从入门到精通北京:清华大学出版社,2019[2]杨恩雄SpringBoot2+Thymeleaf企业应用实战北京:电子工业出版社,2018[3]李刚疯狂软件著SpringBoot2企业应用实战北京:电子工业出版社,2018[4]刘增辉著MyBatis从入门到精通北京:电子工业出版社,2017[5]杨开振等,JavaEE互联网轻量级框架整合开发北京:电子工业出版社,2017[6]韩万江,姜立新.软件项目管理案例教程(第3版)[M].北京:清华大学出版社,2013[7]万常选,廖国琼,吴京慧,刘喜平等编著,数据库系统原理与设计(第2版)[M].北京:清华大学出版社,2012[8]赵卓君等.Java程序设计高级教程[M].北京:北京交通大学出版社、清华大学出版社,2011[9]赵卓君等.Java程序设计基础教程[M].北京:北京交通大学出版社、清华大学出版社,2010[10]BruceEckel编著,Java编程思想(第4版)北京:机械工业出版社,2007

谢辞时光飞逝,不知不觉中,为时一个学期的毕业设计即将结束了,这也同时代表着大学生活已近尾声。四年的努力与付出,都将随着这个毕业设计的完成,将要划下句号。在这四年中经历太多的事情,学会了许多东西,独立能力能提升不少。还记得刚刚进入大学,我还只是以为我的软件是修电脑的,还有些心浮气躁,随着时间的流逝,在这过程中不断锻炼自我,让我变得更加的稳重。在这四年,学到了很多,经常泡图书馆自学的我,学习成绩一向很好,获得了很多次奖学金,也积极参加专业相关的竞赛,在此十分感谢那些教给我知识的老师们和朝夕相处的室友同学们。在这里,我特别感谢下我的毕业设计指导老师赵卓君副教授,还记得第一次见到赵卓君老师是在大二上Java基础课还有一门数据库基础课,而那会我也很好学,经过有问题请教赵卓君老师,赵老师每次都会十分负责认真帮我解答问题。有时候下课时间太短暂不够解答,老师会同意课后让我到办公室去找她详细答疑,那时我就十分感谢并敬重赵老师,而且给我的感觉,老师是一个十分自律和有教学责任感的好老师。在大三下学期,我随着实训课的作业要求组织另外2位同学跟着赵老师做国际交流管理系统项目,这也是我第一次真实参与做完整的项目系统。在这里感谢赵老师给了我一次机会尝试接触实战系统。在这次毕业设计中,无论是前期的需求分析,还是到中期检查暴露出的一些问题,赵老师都会十分耐心的与我讨论并给我建议,对我这个毕业设计帮助很大。所以,在这大学四年遇到赵卓君老师,并且作为赵老师学生,我感到十分幸运。最后,感谢我的舍友和我的同学朋友。这次特别感谢下健哥,每当我在宿舍写代码遇到bug卡住思考无解时,我都会请教健哥,健哥是我们宿舍里学习成绩最好的一个,他也很乐意帮助解决编程问题。用他自己的话讲,就是别人遇到的bug可能我之前遇到过或者我以后也会遇到过,所以有时间多讨论学习对大家都有好处。同时也感谢自己,感谢自己在这四年和在这个毕业设计中从来没有放弃,并希望在接下来的工作中我可以好好发展,迈入社会,更多一份担当。附录程序源代码用户信息批量导入//Controller层核心代码/**

*@Author小江[com.zhbit]

*@Date2020/1/2922:42

*Description批量导入用户信息到数据库

*/

@PostMapping("/admin-sys/users-import")

@ResponseBody

publicStringimportExcel(@RequestParam(value="uploadFile")MultipartFileuploadFile,HttpServletRequestreq,HttpServletResponseresp){

("测试是否获取到上传的文件:"+uploadFile);

("文件名:"+uploadFile.getOriginalFilename());

intsum=0;//导入数据条数

List<User>userList=excelService.importUserExcel(uploadFile,req,resp);

("打印userList对象:"+userList);

if(userList.isEmpty()){

return"批量导入数据失败,角色信息表为空或者所有角色信息均已存在数据库";

}

for(inti=0;i<userList.size();i++){

userService.saveUser(userList.get(i));

sum++;

}

return"批量导入"+sum+"条数据成功";

}//Service层核心代码@Override

publicList<User>importUserExcel(MultipartFileuploadFile,HttpServletRequestreq,HttpServletResponseresp){

introwNum=0;//用来循环的行数

intrealRowCount=0;//真正有数据的行数,总数据数

Workbookworkbook=null;

//获取excel工作簿

try{

workbook=getWorkbookByInputStream(uploadFile.getInputStream(),uploadFile.getOriginalFilename());

if(workbook==null){

returnnull;

}

}catch(IOExceptione){

e.printStackTrace();

}

Sheetsheet=workbook.getSheetAt(0);

//获取excel工作表

if(null==sheet){

workbook.createSheet();

}

//获取excel总数据数

realRowCount=sheet.getPhysicalNumberOfRows();

List<User>userList=newArrayList<>();

Useruser=null;

for(Rowrow:sheet){

if(realRowCount==rowNum){

break;

}

if(this.isBlankRow(row)){//空行跳过

("第"+row.getRowNum()+"行存在空数据");

continue;

}

if(row.getRowNum()==-1){

continue;

}else{

if(row.getRowNum()==0){//第一行表头跳过

continue;

}

}

rowNum++;

user=newUser();

if(row.getCell(0)!=null&&row.getCell(0).toString()!=""){

user.setUserId(row.getCell(0).getStringCellValue());

}

if(row.getCell(1)!=null&&row.getCell(1).toString()!=""){

user.setUserName(row.getCell(1).getStringCellValue());

}

if(row.getCell(2)!=null){

//设置类型为字符型,否则导入密码时报错

row.getCell(2).setCellType(CellType.STRING);

user.setPassword(row.getCell(2).getStringCellValue());

}

if(row.getCell(3)!=null&&row.getCell(3).toString()!=""){

user.setSex(row.getCell(3).getStringCellValue());

}

if(row.getCell(4)!=null&&row.getCell(4).toString()!=""){

user.setAddress(row.getCell(4).getStringCellValue());

}

if(row.getCell(5)!=null){

//设置类型为字符型,否则导入手机号时报错

row.getCell(5).setCellType(CellType.STRING);

user.setPhone(row.getCell(5).getStringCellValue());

}

if(userMapper.findByUserId(user.getUserId())==null){

(user.getUserId());

userList.add(user);

}else{

("此用户对象已存在");

continue;

}

}

returnuserList;

}@Override

publicWorkbookgetWorkbookByInputStream(InputStreamiStream,StringfileName){

Workbookworkbook=null;

try{

if(null==fileName){

returnnull;

}

if(fileName.endsWith(".xls")){

workbook=newHSSFWorkbook(iStream);

}elseif(fileName.endsWith(".xlsx")){

workbook=newXSSFWorkbook(iStream);

}else{

("仅支持excel文件");

returnnull;

}

}catch(Exceptione){

e.printStackTrace();

}finally{

if(iStream!=null){

try{

iStream.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

returnworkbook;

}

@Override

publicbooleanisBlankRow(Rowrow){

if(row==null){

returntrue;

}

Iterator<Cell>iter=row.cellIterator();

while(iter.hasNext()){

Cellcell=iter.next();

if(cell==null){

continue;

}

Stringvalue=cell.getStringCellValue();

if(value!=null&&!"".equals(value.toString())){

returnfalse;

}

}

returntrue;

}//Mapper层核心代码<insertid="saveUser"parameterType="User"keyProperty="userId"useGeneratedKeys="true">

insertintousers(userId,userName,password,sex,address,phone)

values(

#{userId,jdbcType=VARCHAR},

#{userName,jdbcType=VARCHAR},

#{password,jdbcType=VARCHAR},

#{sex,jdbcType=VARCHAR},

#{address,jdbcType=VARCHAR},

#{phone,jdbcType=VARCHAR}

)

</insert>//Model层核心代码/**

*FileName:User

*Author:小江

*Date:2019/12/2621:07

*History:

*/

packagecom.zhbit.xiaojiang.entity;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论