顶岗实习校企生三方管理平台后端设计与实现

无锡科技职业学院 崔凯洋

互联网求职已经不再新鲜,市面上的招聘平台广泛却不精准,如何为校园学生精准对接优质的企业资源、为提升学生的就业优势已成为师生间讨论的焦点话题。应届毕业生的实习问题涉及到学校、企业,在求职和招聘问题上,如何让学校、企业和学生都满意是我们项目的初衷。顶岗实习校企生三方管理平台是面向校园、权威领先的校园招聘平台。为学生提供求职、实训和准确的企业招聘信息,为企业提供学校官方认可的人才招聘渠道,可提前发布校招信息,抢得获取优秀人才的先机,学校可以动态的查看学生求职的意向,为其提供更加优质的就业计划。同时,学校也可以审核企业信息,保证招聘企业、信息的安全可靠及时与企业协商人才输送方案等。总而言之,顶岗实习校企生三方管理平台可为学校、企业、学生提供全方位的人力资源服务。

顶岗实习三方管理平台后端采用SpringBoot、Mybatis、EasyPoi、Maven、MySQL、Java8、Git等主流技术栈;
前端采用渐进式JavaScript框架Vue和UI设计语言AntDesign。顶岗实习平台的设计与实现的过程中主要完成了以下八个业务的设计:针对学生、教师、企业、学校用户的管理、权限管理、角色管理、职位管理、投递管理,资质管理、招聘企业管理、展台管理。平台上线后,能够进一步帮助学生提高社会实践能力。

1.1 项目背景

顶岗实习在很多院校都是一门必修课。无锡科技职业学院以顶岗实习作为一门课程并注重学生实践能力的培养,建校以来与众多优秀的企业合作,为新吴区企业提供专业人才输送。时至今日,越来越多的学生选择无锡科技职业学院,每个班的班主任通过Excel表格汇总各班的就业情况并将其汇总至每个系,再由每个系汇集到每个学院中,最终将所有学院的就业信息汇集起来,才能统一的分析这一年的学生的就业率、就业偏好,然后再制定下一年的招生计划,整个过程需要众多人员的参与。有教师反映Excel表格的信息填写十分耗时,不但加重了班主任、年级主任和院长的工作量,而且使得教师本应该专注在教学任务上的时间、精力减少。学校与学生就业的矛盾日渐突出,为此,校领导集中开会研讨,本项目的雏形应运而生。

1.2 市场需求

在现有的市场中,不乏优秀的招聘就业平台,并且已经取得了卓越的市场表现。这些招聘就业平台大多数都是面向全国,招聘领域也是五花八门,有的甚至功能臃肿,广告也随处可见,最让人触目惊心的是一些虚假招聘信息充斥在互联网上,让人难辨真假。在公民信息纳入法制正规的今天,依然能够看到有些企业不顾人民利益,赚取不义之财。2021年央视《3·15晚会》上,招聘平台泄露求职者简历的现象,已经形成了“黑色产业链”。我们团队为无锡科技职业学院设计一款能够在线上运营的顶岗实习平台,在精准的面向本校应届毕业生和有效的保护本校学生的信息安全、保障企业信息的真实性上做到了兼顾。校园市场上也迫切的需要一个学校、企业、学生三方互惠互利的顶岗实习平台。

1.3 技术可行性

后端技术发展到今天已经非常成熟,Java更是擅长平台软件的开发。顶岗实习平台以Java为主要的开发语言。

SpringBoot为Java开发人员提供了一个很好的平台来开发一个可以独立运行和生产级别的B/S应用程序[1]。

另外,得益于JVM的帮助,以Java作为主要的开发语言会大大降低平台适配性的难度,这也为我们后期考虑上线移动端提供了可能。

1.4 经济可行性

顶岗实习平台数据库使用的是开源的MySQL,我们团队成员都是在校学生,充分利用JetBrains公司的教育优惠政策下载并使用教育版的集成开发环境IntelliJ IDEA,免费空间的远程代码仓库Gitee,一台8GB教师优惠云服务器。尽量用最低的经济成本开发一个高效的能实际上线的项目。

1.5 组织可行性

在顶岗实习项目刚刚启动不久后,我们就着重制定了合理的项目实施进度计划表,以及团队成员的分工与合作。由于本项目是在疫情防控期间制作完成的,我们团队成员很少能够聚集在一起讨论技术难题,非常感谢腾讯会议能够提供一个使我们团队成员互相交流的机会。

1.6 风险因素控制可行性

我们团队尽量避免由于经验不足过度使用某项新技术,以确保项目在出现问题后能够及时的查找出错原因,严格按照三层架构编程,通过软件测试来保障顶岗实习平台的正确性和健壮性。

2.1 整体架构分析

如图1所示,不同权限的用户通过域名访问登录界面,用户输入账号密码后会发送一个请求,该请求经过Nginx反向代理到存放Java应用程序的Tomcat容器中,接着会访问服务器内部的地址:http://localhost:8090,该请求在Tomcat容器的Java程序中拿到账号、密码还有一些必要信息返回给前端浏览器并与用户输入的账号密码进行比对。如果账号密码与Java程序查到的账号密码一致,则登录成功;
不一致则返回错误信息。用户登录后任何的请求都会经过应用服务,比如用户通过搜索框搜索职位信息是通过原生SQL完成的,学生上传简历存储在服务器中的简历文件夹。浏览器中大部分都是动态的数据存放在MySQL数据库中,用户的操作被有序的记录下来,存放在日志文件中。前后端分离后,需要由前后端工程师共同定义接口,使用Swagger在线生成接口文档之后,大家都根据这个接口文档进行开发。由于是团队项目,我们使用云托管平台码云,并在阿里云部署上线。

图1 顶岗实习平台架构图Fig.1 Structure diagram of post practice platform

2.2 角色与权限模块

角色是一种特殊的权限。企业通过审核后操作权限将得到提升,在实际的使用中,给账号赋予某项操作的权限,有可能因为考虑不周到,赋予了该用户不该有的权限或者少赋予了某个权限。这就要求我们为多个权限设置一种角色,通过某个角色来管理某些权限,这将优化繁琐的赋权过程。

2.3 招聘信息管理与投递记录

企业用户通过发布招聘信息,发布在学生、企业和学校的首页上,学生看到心仪的岗位可以投递简历。学生投递后企业可以阅读简历,如果企业认为该简历不符合企业的招聘需求,企业可以直接拒绝该简历,此时学生将会收到简历被某某公司拒绝的消息提示;
如果企业认为该学生的简历符合企业的招聘需求,则可直接通过简历中的联系方式联系学生,可以电话视频面试、也可以线下面试,面试后再由企业决定该学生的去与留。

学生的每一次投递都会被记录,学校管理员、教师都可以查看每个班级的投递统计、录取统计、简历被拒绝的统计等。

3.1 数据库设计

顶岗实习平台使用的数据库是MySQL 8.0,设计数据首先就要考虑到字MySQL字段约束,所有的数据表中使用主键约束。在顶岗实习平台项目中,外键约束、联合主键是禁止被使用的,当然也是禁止外键的联级操作。如果设置外键约束,每次进行插入、删除和更新操作的时候,都必须考虑外键约束,我们应该尽可能的用Java逻辑代码判断,这样可以避免一些不必要的查询某条数据是否存在。在设计数据库的时候要充分考虑一对一关联、一对多关联、多对一关联和多对多关联用于维护数据与数据之间的关系。在整个数据库的查询中,只使用主键与主键相关联。如果两个表有关系表的时候,尽量添加拓展字段组成新的数据表。设计User、Role、Permision表以及他们的关系表,在如图2所示顶岗实习顶岗数据表逆向图中可以清晰的看到学校信息表、班级表、学院表、学校表、企业资质表等。顶岗实习平台数据表的设计整体原则是可以对数据表字段增加,但是绝对不允许修改,不要使用MySQL 8.0的关键字,这就要求在设计数据表字段时要充分考虑字段的合法性。

图2 顶岗实习平台数据库逆向图Fig.2 Reverse diagram of post practice platform database

3.2 脚手架搭建

为了方便叙述,这里采用在线方式创建SpringBoot项目的脚手架,在如图3所示中右侧可以先添加必要的依赖,在启动IDEA后,可以在pom.xml添加项目完整的Maven依赖。

图3 顶岗实习平台在线环境搭建Fig.3 Construction of on-the-job practice platform and online environment

3.3 核心代码实现

在顶岗实习平台并不需要单独地对照数据表写实体类,可以借助MybatisX 插件生成实体类。

在顶岗实习平台统一使用POJO包存放实体类。定义出接收前端传来的VO类和返回结构的DTO类,这个类相当于是实体类的拓展,为了统一风格,所有的接收参数与返回结构都需要单独编写。

3.3.1 异常处理与跨域处理

值得注意的是项目当中有一些异常,编写统一同异常处理类可以使我们的代码更加简洁可读性高,不需要再每个方法后面抛出异常,这时我们需要统一的处理[2]。例如,在进行逻辑删除的时候先检查数据库中是否存在这条数据,如果存在,则进行逻辑删除。一般项目数据库和Java程序并不是在一台服务器上,此时还有可能因为服务器宕机、停电导致数据库停止运行,这时需要检测在数据删除的过程中有没有异常的出现,这都是我们应该考虑到的。

跨域问题是前后端开发人员必须经历的过程,可以完全由前端处理,也可以由后端完全处理,也可以采用前后端混合处理,顶岗实习项目中采用的方式是完全由后端人员处理。

3.3.2 拦截器、Token如图4所示,一个请求在拦截器中经过Filter到Controller层,再由Controller抛出响应,因此所有的请求最先进入Filter,最后离开Filter。

图4 拦截器原理图Fig.4 Schematic diagram of interceptor

Token是没有状态的,用户的每一次请求都要求携带Token。在传统的方式中,我们使用Session存储用户的登录状态,一旦用户在同一时间大量访问,存储这些用户Session信息的服务器将会面临巨大的带宽压力,甚至会造成网络堵塞,影响用户体验。Token的无状态可以完美解决此问题。此外Token还可以防止跨站请求伪造攻击,顶岗实习平台在一周后Token自动过期,每次重新登录后也会更新Token,极大的提高了用户信息的安全。

在核心代码实现章节中,控制层要充分考虑每一个接口是否要使用Token。除登录不需要用户携带Token外,其他的任何操作都需要Token的支持。

3.3.3 业务处理

作为后端程序的开发人员,我们应更加注重,具体的业务的实现过程,具体的业务实现过程依赖于持久层(Mapper)、业务层(Service)、控制层(Controller)。

(1)Mapper层即数据持久层,也被称为DAO层,Mapper层作用为访问数据库,向数据库发送SQL语句,完成数据的增删改查任务。(2)Service层即业务逻辑层,作用是完成功能设计,Service层调用Mapper层接口,接收Mapper层返回的数据,完成项目的基本功能设计。(3)Controller层即控制层,功能为请求和响应控制。Controller层负责前后端交互,接受前端请求,调用Service层,接收Service层返回的数据,最后返回具体的页面和数据到客户端。

第一步就是规划我们的SQL语句,这一步非常重要,一个具体的业务最终都是落实在SQL语句上;
第二步是设计接口和抽象方法,选择合适的返回值类型与接口名;
第三步编写Mapper映射文件。如图5所示可以看到本次查询职位信息的持久层部分代码。

图5 持久层代码片段Fig.5 Persistence layer code snippet

一般,一个接口会调用业务逻辑层的一个方法,来实现该接口的具体业务逻辑和功能。如图6所示,业务逻辑层通常需要3个步骤完成:(1)对异常机制的利用;
(2)设计接口和抽象接口实现类;
(3)对编写业务层单元测试。

图6 业务层代码片段Fig.6 Business layer code snippet

完成了对持久层和业务层的开发后,可以着手编写控制层。在这一层中通过DTO返回结构,可以给用户具体的接口与返回报文了。控制层片代码片段如图7所示,同样需要三个步骤。

图7 控制层代码片段Fig.7 Control layer code snippet

第一步是创建响应,将状态码、状态描述信息、返回数据。除异常信息需要我们返回自定义的状态码,状态码为200统一使用默认HTTP CODE码返回给浏览器;
第二步是依据当前业务功能模块设计请求,请求一般包括请求路径、参数类型和响应结果;
第三步是处理请求,在业务层中我们处理了来自持久层的异常,在控制层中我们也应当处理异常,并且这个异常时来自业务层的。控制层会有非常多的接口返回,这时候我们也应当抽离一个BaseController父类,在这个父类中统一的处理异常。

至此,我们已经完成了一个功能的设计,持久层、业务层、控制层三者相辅相成。

3.4 单元测试

一个好的习惯就是在编写完核心业务代码的时候每一层都要做单元测试,借助Junit依赖完成单元测试。在Test目录下编写一个无返回值类型的方法并使用@Test注解,尽量可以使用断言用于覆盖所有的测试路径,使每一个分支都能执行。例如,持久层程序写单元测试以确保我们的操作已经与MySQL数据库进行了交互;
业务层编写单元测试为了确保从持久层拿到的数据经业务层处理可以做增删改查的处理;
控制层的单元测试可以确保返回的结构是符合预期的。

3.5 接口的检验

接口的检验是尤为重要的,在控制层添加合理的、易于理解的注解,可以减少前后端人员的沟通成本。在pom.xml中引入Swagger依赖,如图8所示,可以通过浏览器访问自动生成的接口文档,接口规范尽量使用Restful风格,用于减少前后端开发人员的沟通成本。

图8 Swagger接口文档Fig.8 Swagger interface documentation

程序设计应该遵循逐步求精、自顶向下和模块化的原则。考虑到项目周期比较短,我们团队在设计需求的时候,并没有过度的设计,过度设计反而会使我们在编程的过程中考虑不足。JDK8的新特性通过函数式编程创建一个Stream流,然后使用Filter对流中元素进行过滤,通过Map得到需要的元素,使用Collect(Collectors.toList())转化为List集合,最后还是要通过递归找到子菜单[3]。最大的体会是函数式编程会使我们团队更加专注于业务逻辑上的处理,也解决了代码繁琐的问题和业务逻辑间的耦合。整个项目从0到1的过程已经实现了,顶岗实习平台还需在线上运营一段时间,我们可以分析大量的日志不断地修复Bug、迭代版本才可以实现从1到n。

引用

[1] [美]克雷格·沃斯.Spring Boot实战[M].北京:人民邮电出版社, 2016:3-6.

[2] 王松.Spring Boot+Vue全栈开发实战[M].北京:清华大学出版社, 2018:46-47.

[3] [美]凯S.霍斯特曼.Java核心技术卷Ⅰ:基础知识(原书第11版)[M]. 北京:机械工业出版社,2019:372-373.

猜你喜欢 顶岗数据库用户 基于用户和电路的攻击识别方法电子乐园·上旬刊(2022年5期)2022-04-092021少儿出版用户触达能力指数出版人(2022年3期)2022-03-23高职学生顶岗实习教学质量监管体系研究现代职业教育·中职中专(2018年5期)2018-05-14信用卡资深用户瞭望东方周刊(2017年35期)2017-09-22数据库财经(2017年2期)2017-03-10教育部要求保障顶岗学生实习安全江西教育A(2016年10期)2016-12-03数据库财经(2016年15期)2016-06-03数据库财经(2016年3期)2016-03-07数据库财经(2016年6期)2016-02-24高职煤炭类顶岗实习“421”运行机制学园(2015年5期)2015-10-21

推荐访问:管理平台 三方 后端