受我国教诲理念的影响,每个家庭都非常看重学生的学习,学生学习的课程影响到今后所要从事的行业。我国人口浩瀚,竞争压力也越来越大,随着国民经济水平的提升,越来越多的家庭都认识到专业的主要性。我国的教诲水平还处在根本阶段,学生得到知识的紧张路子是通过老师在学校里传授,这种办法就造成学生在选择课程时非常谨慎,但目前学生想要理解不同课程的详细内容只能通过老师讲述或者网上自己搜索辨别。老师讲述常日不详细,自己网上辨别不愿定性大,学生选课后老师的整理事情也非常繁芜,老师想要为学生打分也须要手动整理、发布。 ## 1.2课题研究现状 目前学生选课的紧张路子还是通过传统办法,也便是采取在学校由老师在教室传达学生选课后上报的办法,这种办法对课程少、学生少的学校来说非常适宜,但对课程种类多、学生多来说非常困难。对今后老师成绩的发布也须要大量韶光的合营,信息不足及时,这种方法已非常掉队。
我国线上学生信息管理系统发展已形成一定的规模,在浩瀚管理系统里紧张针对的是学生的各种资料管理。也会涉及到学生的选课和学生的成绩管理,但都不足专业,不能实现更深层次的功能,知足不了用户的需求。 ## 1.3课题开拓的目的和意义 本系统的实现目的在于帮助学生的选课。和干系的管理系统比较,本系统针对性更强,向利用用户展示最为详细的课程信息帮助学生理解课程并进行在线选课。本系统为免费的选课系统,为学校的学生选课供应赞助。本系统的核心在于内容,以丰富的课程种类取胜,去繁留简,使本系统的用户更随意马虎捉住重点,找到核心内容,减少用户烦躁生理。本系统的实现拥有更大的意义:
本系统功能大略、针对性强,使系统用户更为直不雅观,操作也更为大略,只要有上网履历的用户都可以轻松节制;本系统采取多种课程种类,学生可以根据自己的喜好选择更适宜自己的课程进行学习;本系统中的课程信息都是由管理员发布,可以做到及时、精准;本系统中设有成绩管理功能,老师可以根据学生的表现随时给学生打分,学生也可以随时查询成绩。 ## 1.4课题开拓内容 本基于SpringMVC网上选课系统采取管理员、老师、学生界面进行设计。老师的账号和密码必须由管理员分配,管理员的账号和密码可由系统开拓者在数据库中设置,学生的账号和密码可以由注册得到。管理员的紧张功能为学生资料、老师资料的添加、修正,班级信息的添加和查询、课程信息的详细阐明和添加还可以查询学生的选课成绩以及管理传授教化资源、传授教化操持等。老师的功能为个人资料管理和自己卖力学生的成绩设置,并管理传授教化资源,设置传授教化操持。学生的紧张功能为浏览课程和在线选课以及查询课程成绩、传授教化资源。 ## 1.5论文构造安排 本篇论文分为择要、目录、绪论、系统开拓关键技能先容、系统剖析、系统设计和系统实现、系统测试、总结、致谢、参考文献。本篇论文的核心集中在系统设计和系统实现部分。绪论部分为根本调研,在系统剖析中阐述系统的需求剖析、可行性剖析和数据流程图、用例图等。第2章 系统开拓关键技能先容2.1系统开拓利用的关键技能本系统在开拓中选择B/S框架进行设计,措辞采取JAVA,数据库采取MySQL,并在设计中加入Vue技能,本系统的运行环境为Idea。 ## 2.2 Vue技能先容 Vue是一个用来开拓前台界面的JAVA框架技能,体积非常的小,以是运行效率非常的高,可以直接通过虚拟设定的 DOM进行各种JAVA打算,由于操作过程中相称于是一个预处理,以是并没有真实的DOM,也可以称作为一个虚拟的DOM。Vue还可以进行双向的数据绑定,这样操作起来更加的大略,利用户可以不用管DOM工具,直接去操作业务逻辑就可以了,可以运用的场景非常的多,而且开拓本钱也非常的低。目前的市场后已经有很多成熟稳定的框架组件,可以直接拿来利用,对付初学者来说非常的方便。 ## 2.3 Idea先容 Idea是公认的最好用JAVA开拓工具之一,常见最多的都是用来跟Eclipse进行比较,Eclipse可以说是最大略的,但是在兼容方面,代码设计方面明显不敷。而Idea便是在Eclipse根本上进行了整合升级,更加智能。Idea最大的创新便是有智能代码助手,可以实当代码提示,还能进行代码重构,代码审查,非常适宜新手的利用。Idea的宗旨便是实现智能编码,使编码更加的大略,以是在Idea上有很多其他软件所没有的特色功能,比如进行智能选取,不须要开拓者在手动操作,还有各种丰富的导航模式可供选择,可以直接导入就能利用,不须要开拓者在重新建立,还有历史记录功能,在误删误操作的情形下,通过这个功能就可以直接规复。而且Idea比较Eclipse调试也更大略,通过Eclipse调试的时候须要选定表达式,否则就没办法查看它的值,而通过Idea则不须要进行任何操作,Idea会自动理解你所须要的表达式,然后给你建议参考值。而且在编码方面更加智能,会自动跳出须要的变量和参数,然后建议你最优选择。以是说比较Eclipse来说,用Idea开拓更加的大略方便,更适宜新用户的开拓利用。 ## 2.4 MySQL数据库先容 数据库紧张便是用来存储和管理系统数据的,按照数据构造来进行组织和存储的,数据库都有自己独立的接口来进行创建,访问,管理等,也可以直接用文件的形式进行数据存储,但是读写速率比较慢,效率不高,以是一样平常都是采取专门的数据库软件来进行数据库存储和管理,这样可以更加科学有效的实现数据的存储,也更加的安全。而MySQL便是一个关系型数据库管理系统,可以把各种不同的数据库存储到不同的表构造中 ,这样可以提高查找效率。
第3章 系统剖析3.1系统需求剖析
目前学校组织学生选课时都选择由学校先安排不同课程的授课老师,再由各班的班主任在教室给学生传达,讲述课程的大略内容和所卖力的老师等信息,然后由学生选择后上报给老师,老师整理好信息后再上报给学校,学校再给卖力的授课老师传达学生资料。这种办法步骤多,一旦中间有一步出错会给学生的选择造成问题,而且学生想要理解更详细的课程内容非常不随意马虎。而本基于SpringMVC网上选课系统供应课程详情,由学生自己理解,然后进行选择,选择后可由老师卖力管理,老师也可以利用本系统设置传授教化操持,利用本系统也可以帮助老师发布成绩,本基于SpringMVC网上选课系统前景非常好。 ## 3.2系统可行性剖析 可行性剖析紧张是前辈行初步调查,然后从各个方面进行系统可行性研究,比如系统须要做什么,采取什么技能,进行各种剖析研究,然后得到一个可行性的方案。然后在对方案进行各个功能模块的设计,进行系统设计剖析,研究系统设计可行性。以是要从多方面进行考虑,而本文紧张从技能上,经济上,操作上,法律上进行研究剖析。
3.2.1技能可行性
随着技能的快速发展,各种软件开拓技能也在一直的更新,不断的发展,大家都在选择适宜自己水平的,能达到开拓需求的软件技能和开拓环境。以是根据我的开拓需求,然后决定开拓本系统采取JAVA措辞SpringMVC框架来完成,开拓出来的系统可以知足功能需求,而且操作界面都雅,符合目前的审美,最主要的是开拓相对大略,可以自动天生所须要的框架构造。前端框架采取Vue,数据库MySQL,体积更小,存储速率快,可以知足本次开拓的需求。 ### 3.2.2经济可行性 经济可行性剖析紧张是对前期投资进行剖析,对系统掩护用度剖析,对开拓完成后取得的经济收益进行剖析。由于本系统完备是自己开拓的,作为毕业设计用场的,只须要根本的举动步伐就行,须要电脑硬件,开拓软件等,不须要额外的投入,完备知足开拓需求。而系统开拓完成后可以方便用户利用,还能带来一定的经济效益,以是开拓本系统在经济上是可行的。 ### 3.2.3运行可行性剖析 开拓本系统过程中已经充分考虑了利用者的感想熏染,界面都雅,而且有功能导航栏,方便用户很好的节制,而且还有各种提示符,哪怕对打算机操作不闇练的也能利用本系统。以是综合考虑,本系统在运行方面是可行的。 ### 3.2.4法律可行性 开拓本系统过程中参阅的干系资料都是在学校图书馆参阅的,均为正规渠道,而且开拓均是本人独立开拓的,均是自己的知识储备,全是自己原创的,不存在知识产权,以是才法律上是可行的。 ## 3.3系统功能剖析 本系统采取功能针对性强、笔墨描述精确的办法进行设计。本基于SpringMVC网上选课系统是关于课程管理的系统,在设计功能时只取用最根本的功能,目的是供应最精准的做事。本系统包括老师、管理员和学生三部分。
学生可以浏览课程在线选课和查看课程的成绩以及查看自己所选择的所有课程,还可以查看学校的传授教化资源等。管理员可以管理班级信息、操持类型信息、课程性子、传授教化操持信息、成绩信息、学生的选课信息以及管理学生信息、教室信息、老师信息、院系信息等。老师可以管理传授教化操持、学生选课和传授教化资源信息等。
管理员用例图如下图3.1所示:
图3.1管理员用例图
学生用例图如下图3.2所示:
图3.2学生用例图
老师用例图如下图3.3所示:
图3.3老师用例图 ## 3.4系统性能剖析 系统性能方面包括系统的框架、系统的开拓理念、系统的开拓界面原则、系统开拓标准、系统开拓流程、系统开拓安全性、系统运行稳定性等。详细性能剖析如下:
本系统是面向所有人群而开拓的管理平台,以是采取的框架模式为B/s,B/s模式是借助浏览器进行系统访问的平台,所有信息可以共享;系统在设计中采取构造化办法,首先将功能分为大的方面,再由大方面分为小方面,末了分为小细节再整合成完全的系统;系统在界面设计时采取Vue技能,可以使界面更丰富,元素更多;系统的操作流程采取大略的思路,使利用用户可以快速节制本系统;系统的运行速率要快,所有操作可以快速反响;在系统开拓时要把稳系统的资源占用,以最少占用为标准进行设计;采取发展的眼力看待问题,把系统的生命周期延长到最大;调查所有利用用户的需求尽可能的知足。 ## 3.5业务流程剖析业务流程涉及到系统的每个部分,调查系统在运行中数据会流动的每个环节,以用户登录开始到学生选课进行业务流程剖析。确保所有信息的流入、流出以及数据的完全性和处理问题的方法。本系统的流程为学生首先进行登录,登录后可以浏览课程信息,在课程详情里可以选课和查看所有已选择的课程以及课程的成绩。管理员卖力添加课程信息和班级信息、管理用户信息等。老师卖力管理学生的成绩和传授教化操持的制订。系统中的所有数据都须要管理员审核。本系统的业务流程图如下图3.4所示:图3.4系统业务流程图
第4章 系统设计4.1系统功能构造设计本系统的功能界面设计为三个,学生中央界面和管理员中央界面、老师中央界面。根据不同用户的不同需求分开设计功能。学生中央界面的功能为个人资料、选课功能、成绩功能、传授教化资源功能等,管理员中央界面的功能为系统用户、课程、班级、系统信息等,老师中央界面的功能为选课成绩、个人资料等。本系统的功能构造图如下图4.1所示:
图4.1系统功能构造图 ## 4.2系统数据库设计 数据库便是数据的存储仓库,按照打算机的格式进行数据存入。为了使数据库具有独立性,防止由于系统崩溃而数据有损的问题在数据库建立时都采取单独的数据库。数据库具有共享性和单独性,在系统运行时会自动和相对应的数据进行通讯连接。本基于SpringMVC网上选课系统采取MySQL数据库设计,身份验证为Root,密码为123456。 ### 4.2.1数据库ER图设计 根据剖析所得本系统中紧张的数据为管理员、学生、课程信息、成绩信息、班级信息等。以是本节针对这些数据画出数据ER图。
(1)管理员实体的属性为用户名和密码。管理员实体ER图如下图4.2所示:
图4.2管理员实体ER图
(2)学生实体的属性为编号、姓名、班级、专业等。学生实体ER图如下图4.3所示:
图4.3学生实体ER图
(3)老师信息实体的属性包括姓名、编号、职称等。老师信息实体ER图如下图4.4所示:
图4.4老师信息实体ER图
(4)课程实体的属性包括编号、名称、卖力老师、分数。课程实体的ER图如下图4.5所示:
图4.5课程实体ER图
(5)种别信息实体的属性包括编号和名称。种别信息实体ER图如下图4.6所示:
图4.6分类信息实体的ER图
(6)班级信息包括标题、编号等。班级ER图如下图4.7所示:
图4.7班级信息ER图
(7)成绩信息包括课程编号、课程名称等。成绩ER图如下图4.8所示:
图4.8成绩信息ER图
(8)本系统的关系ER图如下图4.9所示:
图4.9系统关系ER图 ### 4.2.2数据库表设计 本系统针对学校的在线选课而设计,以是本系统的数据库表环绕课程而建立。本系统的数据库表包括课程信息表、选课信息表、管理员信息表等。本系统的数据库表构造如下图4.1-4.11所示:
表4.1 chengji
表4.2 config
表4.3 dictionary
表4.4 jiaoshi
表4.5 jiaoxuejihua
表4.6 kecheng
表4.7 laoshi
表4.8 token
表4.9 users
表4.10 xuanke
表4.11 xuesheng
第5章 系统实现5.1管理员功能界面的实现
管理员是系统里的最高权限,卖力系统里的所有信息的管理、审核。包括学生信息、课程信息、成绩信息等。 ### 5.1.1用户登录界面的实现本功能设计的目的是帮助系统考验身份,担保系统的安全。在用户登录功能界面里的元素包括按钮、列表框、笔墨、图片等。用户输入框、密码输入框、权限列表框都居中展示。用户登录界面的实现界面如下图5.1所示:
图5.1用户登录界面的实现效果 ### 5.1.2个人中央管理功能的实现界面 在个人中央管理功能里,管理员可以设置新的管理员,可以查询已有的管理员和修合法前登录的登录密码。设置多个管理员可以让更多的事情职员参与进来。修正个人信息功能的实现界面如下图5.2所示:
图5.2修正个人信息功能的实现界面
修正密码的实现界面如下图5.3所示:
图5.3修正密码的实现界面 ### 5.1.3课程信息管理功能的实现界面 管理员登录后在课程信息管理功能里可以发布新的课程和删除不该用的课程以及修正缺点的课程,管理员查询课程信息的实现界面如下图5.4所示:
图5.4管理员查询课程信息的功能实现界面 ### 5.1.4老师信息管理功能的实现界面 管理员在本功能里可以添加老师资料,可以为老师分配账号和密码,帮助老师利用本系统,当老师辞职后管理员可以及时的删除老师信息防止系统内容的外泄。管理员查询老师信息功能的实现界面如下图5.5所示:
图5.5管理员查询老师信息功能的实现界面 ### 5.1.5班级管理功能的实现界面 班级管理功能里可以看到班级的编号和标题,点击添加班级信息可以进入添加界面里实现班级的更新。管理员查询班级信息功能的实现界面如下图5.6所示:
图5.6管理员查询班级信息功能的实现界面 ### 5.1.6学生信息管理功能的实现界面 管理员可以添加学生信息和查询学生信息,学生信息添加后,学生可以自己修正自己的资料。管理员查询学生信息功能的实现界面如下图5.7所示:
图5.7管理员查询学生信息功能的实现界面 ### 5.1.7成绩管理功能的实现界面 管理员也可以对学生的成绩进行修正和删除以此来审核老师给发布的学天生就。管理员查询成绩信息功能的实现界面如下图5.8所示:
图5.8管理员查询成绩信息功能的实现界面 ### 5.1.8传授教化操持管理功能的实现界面管理员可以查询老师制订的传授教化操持,并可以进行修正和添加、删除。管理员查询传授教化操持功能的实现界面如下图5.9所示:
图5.9管理员查询传授教化操持信息的实现界面 ### 5.1.9学生选课管理功能的实现界面管理员也可以查询学生的选课详情并进行修正和删除、查询。学生选课功能的实现界面如下图5.10所示:
图5.10管理员查询学生选课信息的实现界面 ### 5.1.10教室管理功能的实现界面 本功能属于传授教化资源管理的一部分,管理员可以设置教室和修正教室、删除教室。教室管理功能的实现界面如下图5.11所示:
图5.11管理员查询教室信息的实现界面 ### 5.1.11院系管理功能的实现界面本功能同样属于传授教化资源功能的一部分。管理员可以更新院系信息。实现界面如下图5.12所示:
图5.12院系信息的实现界面 ## 5.2学生功能的界面详细实现 ### 5.2.1个人资料管理功能的实现界面 学生可以修正自己的个人资料使其担保精确性。学生修正个人资料管理功能的实现界面如下图5.13所示:
图5.13学生修正个人资料管理功能的实现界面 ### 5.2.2在线选课功能的实现界面 在本功能里,学生可以查询课程信息,可以看到课程的所卖力老师和学分等信息,然后可以进行选择。选课管理功能的实现界面如下图5.14所示:
图5.14选课管理功能的实现界面 ### 5.2.3成绩查询功能的实现界面 学生可以查询课程的成绩。成绩查询功能的实现界面如下图5.15所示:
图5.15学生查询成绩的功能实现界面 ### 5.2.4选课管理功能的实现界面学生选课后可以查看自己选择的所有课程。实现界面如下图5.16所示:
图5.16选课管理功能的实现界面 ### 5.2.5传授教化资源管理功能的实现界面学生可以查看教室信息、老师信息和院系信息。实现界面如下图5.17所示:
图5.17传授教化资料管理功能的实现界面 ## 5.3老师功能的详细实现界面 老师的紧张功能为为学生打分,可以根据课程名称、类型、学号、姓名、班级进行学天生就的查询,并且可以发布传授教化操持。老师功能的实现界面如下图5.18所示:
图5.18老师角色功能的实现界面
第6章 系统测试 # 系统测试
JiaoxuejihuaController.javapackage com.controller;import com.alibaba.fastjson.JSONObject;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.baomidou.mybatisplus.mapper.Wrapper;import com.entity.JiaoxuejihuaEntity;import com.entity.KechengEntity;import com.entity.view.JiaoxuejihuaView;import com.service.;import com.utils.PageUtils;import com.utils.PoiUtil;import com.utils.R;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.BeanUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.;import javax.servlet.http.HttpServletRequest;import java.io.File;import java.net.URL;import java.text.SimpleDateFormat;import java.util.;/ 传授教化操持 后端接口 @author @email/@RestController@Controller@RequestMapping("/jiaoxuejihua")public class JiaoxuejihuaController { private static final Logger logger = LoggerFactory.getLogger(JiaoxuejihuaController.class); @Autowired private JiaoxuejihuaService jiaoxuejihuaService; @Autowired private TokenService tokenService; @Autowired private DictionaryService dictionaryService; //级联表service @Autowired private KechengService kechengService; @Autowired private XueshengService xueshengService; @Autowired private LaoshiService laoshiService; / 后端列表 / @RequestMapping("/page") public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){ logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params)); String role = String.valueOf(request.getSession().getAttribute("role")); if(false) return R.error(511,"永不会进入"); else if("学生".equals(role)) params.put("xueshengId",request.getSession().getAttribute("userId")); else if("老师".equals(role)) params.put("laoshiId",request.getSession().getAttribute("userId")); if(params.get("orderBy")==null || params.get("orderBy")==""){ params.put("orderBy","id"); } PageUtils page = jiaoxuejihuaService.queryPage(params); //字典表数据转换 List<JiaoxuejihuaView> list =(List<JiaoxuejihuaView>)page.getList(); for(JiaoxuejihuaView c:list){ //修正对应字典表字段 dictionaryService.dictionaryConvert(c, request); } return R.ok().put("data", page); } / 后端详情 / @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id, HttpServletRequest request){ logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id); JiaoxuejihuaEntity jiaoxuejihua = jiaoxuejihuaService.selectById(id); if(jiaoxuejihua !=null){ //entity转view JiaoxuejihuaView view = new JiaoxuejihuaView(); BeanUtils.copyProperties( jiaoxuejihua , view );//把实体数据重构到view中 //级联表 KechengEntity kecheng = kechengService.selectById(jiaoxuejihua.getKechengId()); if(kecheng != null){ BeanUtils.copyProperties( kecheng , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并打消id和创建韶光字段 view.setKechengId(kecheng.getId()); } //修正对应字典表字段 dictionaryService.dictionaryConvert(view, request); return R.ok().put("data", view); }else { return R.error(511,"查不到数据"); } } / 后端保存 / @RequestMapping("/save") public R save(@RequestBody JiaoxuejihuaEntity jiaoxuejihua, HttpServletRequest request){ logger.debug("save方法:,,Controller:{},,jiaoxuejihua:{}",this.getClass().getName(),jiaoxuejihua.toString()); String role = String.valueOf(request.getSession().getAttribute("role")); if(false) return R.error(511,"永久不会进入"); Wrapper<JiaoxuejihuaEntity> queryWrapper = new EntityWrapper<JiaoxuejihuaEntity>() .eq("kecheng_id", jiaoxuejihua.getKechengId()) .eq("jiaoxuejihua_uuid_number", jiaoxuejihua.getJiaoxuejihuaUuidNumber()) .eq("jiaoxuejihua_name", jiaoxuejihua.getJiaoxuejihuaName()) .eq("jiaoxuejihua_types", jiaoxuejihua.getJiaoxuejihuaTypes()) ; logger.info("sql语句:"+queryWrapper.getSqlSegment()); JiaoxuejihuaEntity jiaoxuejihuaEntity = jiaoxuejihuaService.selectOne(queryWrapper); if(jiaoxuejihuaEntity==null){ jiaoxuejihua.setInsertTime(new Date()); jiaoxuejihua.setCreateTime(new Date()); jiaoxuejihuaService.insert(jiaoxuejihua); return R.ok(); }else { return R.error(511,"表中有相同数据"); } } / 后端修正 / @RequestMapping("/update") public R update(@RequestBody JiaoxuejihuaEntity jiaoxuejihua, HttpServletRequest request){ logger.debug("update方法:,,Controller:{},,jiaoxuejihua:{}",this.getClass().getName(),jiaoxuejihua.toString()); String role = String.valueOf(request.getSession().getAttribute("role"));// if(false)// return R.error(511,"永久不会进入"); //根据字段查询是否有相同数据 Wrapper<JiaoxuejihuaEntity> queryWrapper = new EntityWrapper<JiaoxuejihuaEntity>() .notIn("id",jiaoxuejihua.getId()) .andNew() .eq("kecheng_id", jiaoxuejihua.getKechengId()) .eq("jiaoxuejihua_uuid_number", jiaoxuejihua.getJiaoxuejihuaUuidNumber()) .eq("jiaoxuejihua_name", jiaoxuejihua.getJiaoxuejihuaName()) .eq("jiaoxuejihua_types", jiaoxuejihua.getJiaoxuejihuaTypes()) ; logger.info("sql语句:"+queryWrapper.getSqlSegment()); JiaoxuejihuaEntity jiaoxuejihuaEntity = jiaoxuejihuaService.selectOne(queryWrapper); if(jiaoxuejihuaEntity==null){ jiaoxuejihuaService.updateById(jiaoxuejihua);//根据id更新 return R.ok(); }else { return R.error(511,"表中有相同数据"); } } / 删除 / @RequestMapping("/delete") public R delete(@RequestBody Integer[] ids){ logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString()); jiaoxuejihuaService.deleteBatchIds(Arrays.asList(ids)); return R.ok(); } / 批量上传 / @RequestMapping("/batchInsert") public R save(String fileName, HttpServletRequest request){ logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName); Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { List<JiaoxuejihuaEntity> jiaoxuejihuaList = new ArrayList<>();//上传的东西 Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段 Date date = new Date(); int lastIndexOf = fileName.lastIndexOf("."); if(lastIndexOf == -1){ return R.error(511,"该文件没有后缀"); }else{ String suffix = fileName.substring(lastIndexOf); if(!".xls".equals(suffix)){ return R.error(511,"只支持后缀为xls的excel文件"); }else{ URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径 File file = new File(resource.getFile()); if(!file.exists()){ return R.error(511,"找不到上传文件,请联系管理员"); }else{ List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件 dataList.remove(0);//删除第一行,由于第一行是提示 for(List<String> data:dataList){ //循环 JiaoxuejihuaEntity jiaoxuejihuaEntity = new JiaoxuejihuaEntity();// jiaoxuejihuaEntity.setKechengId(Integer.valueOf(data.get(0))); //课程 要改的// jiaoxuejihuaEntity.setJiaoxuejihuaUuidNumber(data.get(0)); //传授教化操持编号 要改的// jiaoxuejihuaEntity.setJiaoxuejihuaName(data.get(0)); //传授教化操持名称 要改的// jiaoxuejihuaEntity.setJiaoxuejihuaTypes(Integer.valueOf(data.get(0))); //操持类型 要改的// jiaoxuejihuaEntity.setJiaoxuejihuaContent("");//详情和图片// jiaoxuejihuaEntity.setInsertTime(date);//韶光// jiaoxuejihuaEntity.setCreateTime(date);//韶光 jiaoxuejihuaList.add(jiaoxuejihuaEntity); //把要查询是否重复的字段放入map中 //传授教化操持编号 if(seachFields.containsKey("jiaoxuejihuaUuidNumber")){ List<String> jiaoxuejihuaUuidNumber = seachFields.get("jiaoxuejihuaUuidNumber"); jiaoxuejihuaUuidNumber.add(data.get(0));//要改的 }else{ List<String> jiaoxuejihuaUuidNumber = new ArrayList<>(); jiaoxuejihuaUuidNumber.add(data.get(0));//要改的 seachFields.put("jiaoxuejihuaUuidNumber",jiaoxuejihuaUuidNumber); } } //查询是否重复 //传授教化操持编号 List<JiaoxuejihuaEntity> jiaoxuejihuaEntities_jiaoxuejihuaUuidNumber = jiaoxuejihuaService.selectList(new EntityWrapper<JiaoxuejihuaEntity>().in("jiaoxuejihua_uuid_number", seachFields.get("jiaoxuejihuaUuidNumber"))); if(jiaoxuejihuaEntities_jiaoxuejihuaUuidNumber.size() >0 ){ ArrayList<String> repeatFields = new ArrayList<>(); for(JiaoxuejihuaEntity s:jiaoxuejihuaEntities_jiaoxuejihuaUuidNumber){ repeatFields.add(s.getJiaoxuejihuaUuidNumber()); } return R.error(511,"数据库的该表中的 [传授教化操持编号] 字段已经存在 存在数据为:"+repeatFields.toString()); } jiaoxuejihuaService.insertBatch(jiaoxuejihuaList); return R.ok(); } } } }catch (Exception e){ e.printStackTrace(); return R.error(511,"批量插入数据非常,请联系管理员"); } }}
CommonServiceImpl.java
package com.service.impl;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.dao.CommonDao;import com.service.CommonService;/ 系统用户 @author @date /@Service("commonService")public class CommonServiceImpl implements CommonService { @Autowired private CommonDao commonDao; @Override public List<String> getOption(Map<String, Object> params) { return commonDao.getOption(params); } @Override public Map<String, Object> getFollowByOption(Map<String, Object> params) { return commonDao.getFollowByOption(params); } / tableName 查询表 condition1 条件1 condition1Value 条件1值 average 打算均匀评分 / public Map<String, Object> queryScore(Map<String, Object> params){ return commonDao.queryScore(params); } @Override public void sh(Map<String, Object> params) { commonDao.sh(params); } @Override public int remindCount(Map<String, Object> params) { return commonDao.remindCount(params); } @Override public Map<String, Object> selectCal(Map<String, Object> params) { return commonDao.selectCal(params); } @Override public List<Map<String, Object>> selectGroup(Map<String, Object> params) { return commonDao.selectGroup(params); } @Override public List<Map<String, Object>> selectValue(Map<String, Object> params) { return commonDao.selectValue(params); } @Override public List<Map<String, Object>> chartBoth(Map<String, Object> params) { return commonDao.chartBoth(params); } @Override public List<Map<String, Object>> chartOne(Map<String, Object> params) { return commonDao.chartOne(params); } / 新的级联字典表的 分组求和统计 @param params @return / @Override public List<Map<String, Object>> newSelectGroupSum(Map<String, Object> params) { return commonDao.newSelectGroupSum(params); } / 新的级联字典表的 分组条数统计 @param params @return / @Override public List<Map<String, Object>> newSelectGroupCount(Map<String, Object> params) { return commonDao.newSelectGroupCount(params); } / 当前表的日期分组求和 @param params @return / @Override public List<Map<String, Object>> newSelectDateGroupSum(Map<String, Object> params) { return commonDao.newSelectDateGroupSum(params); } / 查询字典表的分组统计总条数 @param params @return / @Override public List<Map<String, Object>> newSelectDateGroupCount(Map<String, Object> params) { return commonDao.newSelectDateGroupCount(params); } @Override public int plusCloumNumber(Map<String, Object> params) { return commonDao.plusCloumNumber(params); } @Override public int reduceCloumNumber(Map<String, Object> params) { return commonDao.reduceCloumNumber(params); } @Override public int updateCloumValue(Map<String, Object> params) { return commonDao.updateCloumValue(params); }/ 饼状图 -- 饼状图 查询当前表 -- 查询字典表【月】 -- 统计 -- 查询某个月的每个类型的订单发卖数量 -- 求和 -- 查询某个月的每个类型的订单发卖额 -- 查询某个字符串【月】 -- 统计 -- 查询某个月的每个员工的订单发卖数量 -- 求和 -- 查询某个月的每个员工的订单发卖额 -- 查询韶光【年】 -- 统计 -- 查询每个月的订单发卖数量 -- 求和 -- 查询每个月的订单发卖额 -- 饼状图 查询级联表 -- 查询字典表 -- 统计 -- 查询某个月的每个类型的订单发卖数量 -- 求和 -- 查询某个月的每个类型的订单发卖额 -- 查询某个字符串 -- 统计 -- 查询某个月的每个员工的订单发卖数量 -- 求和 -- 查询某个月的每个员工的订单发卖额 -- 查询韶光 -- 统计 -- 统计每个月的订单发卖数量 -- 求和 -- 查询每个月的订单发卖额 // 柱状图 -- 柱状图 查询当前表 -- 某个【年,月】 -- 当前表 2 级联表 1 -- 统计 -- 【日期,字符串,下拉框】 -- 求和 -- 【日期,字符串,下拉框】 -- 柱状图 查询级联表 -- 某个【年,月】 -- 统计 -- 【日期,字符串,下拉框】 -- 求和 -- 【日期,字符串,下拉框】 / / 柱状图求和 @param params @return / public List<Map<String, Object>> barSum(Map<String, Object> params){ return commonDao.barSum(params); } / 柱状图统计 @param params @return / public List<Map<String, Object>> barCount(Map<String, Object> params){ return commonDao.barCount(params); }}
KechengServiceImpl.java
package com.service.impl;import com.utils.StringUtil;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 com.dao.KechengDao;import com.entity.KechengEntity;import com.service.KechengService;import com.entity.view.KechengView;/ 课程 做事实现类 /@Service("kechengService")@Transactionalpublic class KechengServiceImpl extends ServiceImpl<KechengDao, KechengEntity> implements KechengService { @Override public PageUtils queryPage(Map<String,Object> params) { if(params != null && (params.get("limit") == null || params.get("page") == null)){ params.put("page","1"); params.put("limit","10"); } Page<KechengView> page =new Query<KechengView>(params).getPage(); page.setRecords(baseMapper.selectListView(page,params)); return new PageUtils(page); }}
声明
本博客适用于广泛的学术和教诲用场,包括但不限于个人学习、开拓设计,产品设计。仅供学习参考,旨在为读者供应深入理解和学术研究的材料。
java系统设计,毕设辅导