学历学籍系统-Web服务开发实验(REST API)

目录

1 项目简介

1.1 分工

2 开发环境

2.1 框架搭建

2.2 数据库建表(Resuorce)

2.2.1 用户信息user表

2.2.2 学生学历/学籍信息student_graduate表

2.2.3 学生成绩student_grade表

 3 接口总览

 3.1 对StudentGraduate类的操作接口

 3.1.1 查询入学/毕业信息(GET)

 3.1.2 入学信息录入(POST)

 3.1.3 入学信息修改(PUT)

 3.1.4 学籍信息删除(DELETE)

 3.1.5 返回某一学生的所有学籍学历信息(GET)

 3.1.6 学校对毕业信息签名(GET) 

 3.1.7 学生对毕业信息签名(POST) 

 3.1.8 企业核实学历(GET) 

 3.2 对StudentGrade类的操作接口

 3.2.1 上传成绩信息(POST)

 3.2.1 获取成绩信息(GET) 

3.3 对User类的操作接口

 3.3.1 用户登陆(POST)

 3.3.2 用户注册(POST)

代码:第三次作业实验代码.zip-网页制作文档类资源-CSDN下载


1 项目简介

项目需求可以参考之前的博客,学历学籍管理系统-UML建模_m0_47308595的博客-CSDN博客

在具体实现中,为了减少数据冗余,我们将StudentDocument(学籍类)和StudentCertificate(证书类)合成为StudentGraduate类,通过属性signStatus区分,0为学校未为其签名,即可以当作StudentDocument(学籍类),为1时表示学校已签名,可以表示StudentCertificate(证书类),为2时表示学生也完成了签名。

这里我们主要完成了用户登陆与注册,成绩上传与获取,学籍学历信息的增删改查与验证。

同时我们在开发之余,自己用java搭建了一个小型的区块链数据结构,可以将完成双重签名的学历信息存储在区块链上,实现数据的不可篡改。

1.1 分工

阁承越:整体设计、开发(40%)

胡斐:文档撰写、部分开发(30%)

杨一帆:文档撰写、测试记录(30%)

2 开发环境

主体使用Springboot整合了Tomcat、Spring MVC、Spring、Mybatis-plus等,进行Web服务的开发。数据持久层使用MySql存储,并通过Mybatis-plus进行持久层与业务层的数据交互。同时,这里涉及了学校和学生的公私钥管理,这里我们以键值对的形式存储在redis上,方便快速的存取。

2.1 框架搭建

首先使用IDEA创建一个Spring工程,在pom.xml中已经自动引入Springboot的相关依赖,还需要我们自行引入mybatis-plus的依赖。

然后我们在application.properties中需要设置端口号,数据库的地址、用户名、密码,mybatis-plus的扫面范围等,具体如下:

server.port=8432
# MySQL config
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxxx:3306/ccb?serverTimezone=GMT%2B8
spring.datasource.username=xxxx
spring.datasource.password=xxxxx

# mybatis-plus config
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=com.example.ccb.entity

然后点击运行,该项目就已经启动了,可以对localhost:8432进行访问。在本次试验中,我们将项目部署在了服务器上,因此接口的统一访问形式是http://47.93.99.237:8432/xxx。

2.2 数据库建表(Resuorce)

这里我们主要建造了三个表,也代表了REST风格中的资源部分。

2.2.1 用户信息user表

主要用于账号的注册和登录。

user表

 2.2.2 学生学历/学籍信息student_graduate表

包括学生的个人信息以及毕业时需要的学历证书编号、签名状态等, 用于生成、获取学生的个人信息,对其sign_status的改变则代表的学生毕业时的签名状态。

student_graduate表

student_graduate表的属性

  2.2.3 学生成绩student_grade表

    存储所有学生的成绩,用于获取学生的成绩。

student_grade表

 3 接口总览

这里使用swagger自动生成了项目的接口文档。由于篇幅原因,这里重点对StudentGraduate的GET、POST、PUT、DELETE接口及其实现方式做重点介绍,其余则会通过前端演示的方式来简略介绍。

接口文档:

Swagger UI

接口总览

 3.1 对StudentGraduate类的操作接口

对于StudentGraduate类的接口编写全部都包含在StudentGraduateController中,该类用@RequestMapping("/studentGraduate")修饰,表面访问该接口的统一形式是http://47.93.99.237:8432/studentGraduate。

3.1.1 查询入学/毕业信息(GET)

该接口的形式为"http://47.93.99.237:8432/studentGraduate",这里需要前端传入学历层次、学号、入学年份(如果不传入则显示全部的学历学籍信息),后台接受到前端传来的数据后,会使用mybatis-plus中封装的QueryWrapper类对数据库进行查找,最后以json字符串的形式返回,这里我们封装了BaseResult类用于返回请求的成功/异常。

@GetMapping("")
    @ApiOperation("查询入学/毕业信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "education", value = "学历层次"),
            @ApiImplicitParam(name = "studentNum", value = "学号"),
            @ApiImplicitParam(name = "admission", value = "入学年份")
    })
    public BaseResult findStudentGraduate(@RequestParam(value = "education", required = false) String education,
                                          @RequestParam(value = "studentNum", required = false) String studentNum,
                                          @RequestParam(value = "admission", required = false) String admission) {
        QueryWrapper<StudentGraduate> queryWrapper = new QueryWrapper<>();
        if (education != null) {
            queryWrapper.eq("education", education);
        }
        if (studentNum != null) {
            queryWrapper.eq("student_num", studentNum);
        }
        if (admission != null) {
            queryWrapper.eq("admission", admission);
        }
        List<StudentGraduate> list = studentGraduateService.list(queryWrapper);
        return BaseResult.successWithData(list);
    }

接口测试:

查询入学/毕业信息(GET)接口测试

 前端调用:

这里我们在前端通过javascript对于返回的数据进行处理,当signStatus为0时表示的是入学的学籍信息,当signStatus为1时表示是已经通过毕业审核且学校签名的学历信息,当signStatus为2时为学生已经确认的信息。 

这里是的调取了入学年份为2018,学历层次为本科的所有学籍记录。

这里是在毕业确认时调取了入学年份为2018,学历层次为本科的所有学籍记录。

这里返回的是已经完成学校+学生双重签名的学籍记录 ,即只显示signStatus为2的学历信息。

3.1.2 入学信息录入(POST)

该接口的形式为"http://47.93.99.237:8432/studentGraduate",方式为POST,这里需要前端传入StudentGraduate类中所需要的数据,表单里的id和证书编号不用填,是因为id在mysql中设置的自增长,证书编号则在下面的处理中自动生成,然后我们调用了业务层的StudentGraduateService接口中的save方法(该方法extends自mybatis-plus的IService接口,用于做数据的插入),将一条数据插入数据库中,如果成功返回证书编号,否则返回错误代码。

    @PostMapping("")
    @ApiOperation("入学信息录入, 表单里的id和证书编号不用填")
    public BaseResult addStudentGraduate(@RequestBody StudentGraduate studentGraduate) {
        String certificateId = UUID.randomUUID().toString();
        studentGraduate.setCertificateNum(certificateId);

        if (studentGraduateService.save(studentGraduate)) {
            return BaseResult.successWithData(certificateId);
        } else {
            return BaseResult.failWithErrorCode(ErrorCode.INNER_ERROR);
        }
    }

接口测试:

前端调用:

 

 3.1.3 入学信息修改(PUT)

该接口的形式为"http://47.93.99.237:8432/studentGraduate",方式为PUT,通过传入的StudentGraduate信息中的id,在数据库里查找,只有在signStatus为0即学校未确认时才允许修改。

    @PutMapping("")
    @ApiOperation("修改录入的信息,修改入学录入信息和毕业录入信息都用该接口。学校未确认才允许修改")
    public BaseResult updateStudentGraduate(@RequestBody StudentGraduate studentGraduate) {
        //现根据id查db里的毕业信息
        StudentGraduate dbInfo = studentGraduateService.getById(studentGraduate.getId());

        if (dbInfo != null && dbInfo.getSignStatus() == SignStatus.UN_SIGN && studentGraduateService.updateById(studentGraduate)) {
            return BaseResult.success();
        } else {
            return BaseResult.failWithErrorCode(ErrorCode.INSERT_FAILED);
        }
    }

接口测试:

前端调用:

在信息总览中,点击详情,即可进入修改界面,点击保存即可完成修改。

 3.1.4 学籍信息删除(DELETE)

该接口的形式为"http://47.93.99.237:8432/studentGraduate/{graduateId}",方式为PUT,通过传入studentgraduate的id,指定删除哪一条信息,如果未找到或者该条记录已经经过双重签名(即已经是确定的学历信息),返回错误代码,否则返回成功信息。

    @DeleteMapping("/{graduateId}")
    @ApiOperation("入学信息删除,传入入学信息id")
    public BaseResult deleteStudentGraduate(@PathVariable("graduateId") Integer graduateId) {
        StudentGraduate graduateInfo = studentGraduateService.getById(graduateId);
        if (graduateInfo == null || graduateInfo.getSignStatus() != SignStatus.UN_SIGN) {
            return BaseResult.failWithErrorCode(ErrorCode.DELETE_FAILED);
        }
        if (studentGraduateService.removeById(graduateId)) {
            return BaseResult.success();
        } else {
            return BaseResult.failWithErrorCode(ErrorCode.DELETE_FAILED);
        }
    }

接口测试:

前端调用:

点击撤销按钮,即可完成删除。

  

 3.1.5 返回某一学生的所有学籍学历信息(GET)

该接口的形式为"http://47.93.99.237:8432/studentGraduate/graduateInfo/{identityNum}",方式为GET,即获取某一用户的所有学籍学历信息。

前端调用:

在学生端的界面,通过调用该接口,将signStatus为0的信息归类为我的学籍,signStatus为1或2的信息归为我的学历。

 3.1.6 学校对毕业信息签名(GET) 

该接口的形式为"http://47.93.99.237:8432/studentGraduate/student/{graduateId}",方式为GET,点击确认按钮后,将会在后台根据graduateId调取该生的学籍信息和成绩信息,如果有成绩挂科,则无法毕业,返回错误,如果可以毕业,则用学校的私钥进行签名,并将签名信息暂时保存在redis上,修改signStatus为1,返回成功代码。

前端调用:

 3.1.7 学生对毕业信息签名(POST) 

该接口的形式为"http://47.93.99.237:8432/studentGraduate/student",方式为POST,需要上传该条信息的ID和学生的身份证号,这里用POST是为了隐式传输数据,防止通过url暴露学生的身份证号,学生在确认信息无误后,点击待确认,即可完成对学历的签名。随后该条学历的信息在加密处理后,上传至我们自己搭的区块链,signStatus变为2。

 3.1.8 企业核实学历(GET) 

该接口的形式为"http://47.93.99.237:8432/studentGraduate/enterprise",方式为GET,需要传入学历证书编号,学校,身份证号,通过在redis中寻找对应学生、对应学校的公钥,来验证存储在区块链上的密文,若能得到返回值,说明该生确实毕业于该学习,可以进一步核实专业等信息。

 3.2 对StudentGrade类的操作接口

 这里所有的接口都写在StudentGradeController中。

 3.2.1 上传成绩信息(POST)

接口调用形式为:"http://47.93.99.237:8432/studentGrade",方式为POST,输入studentGrade所有信息,即可上传。这里我们在前端没有做展示,因为考虑到我们是学历学籍管理系统,而不是教务系统,所以我们只暴露了一个上传成绩的接口,可以将成绩信息上传至我们的后台,供后续的调用。

    @PostMapping("")
    @ApiOperation("成绩录入, 表单里的id不用填")
    public BaseResult addGrade(@RequestBody StudentGrade studentGrade) {
        studentGradeService.save(studentGrade);
        log.info("成绩录入成功");
        return BaseResult.success();
    }

 3.2.1 获取成绩信息(GET) 

接口调用形式为:"http://47.93.99.237:8432/studentGrade",方式为GET,输入学年、课程号、学号、学历层次(当输入为空时返回所有成绩信息),在后台通过mybatis-plus获取相对应的数据。

前端调用:

这里我们获取了张三本科期间的所有成绩。 

3.3 对User类的操作接口

这里所有的接口都写在UserController中。

3.3.1 用户登陆(POST)

接口调用形式为:"http://47.93.99.237:8432/user/login",方式为POST,输入用户名和密码,在后台比对数据库中的信息,如果正确则可以进入,否则返回失败。

3.3.2 用户注册(POST)

接口调用形式为:"http://47.93.99.237:8432/user/register",方式为POST,输入用户名、身份证号、密码,完成注册。密码读取后,在后台进行md5摘要后再存入数据库。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值