提交试卷+智能生成评价

2024-08-23 21:20

本文主要是介绍提交试卷+智能生成评价,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.提交试卷
        • 1.req和vo
          • 1.InterviewSubmitReq.java
          • 2.InterviewResultVO.java
        • 2.InterviewController.java
        • 3.service
          • 1.InterviewHistoryService.java
          • 2.InterviewHistoryServiceImpl.java
          • 3.InterviewEngine.java
          • 4.JiChiInterviewEngine.java
          • 5.EvaluateUtils.java
        • 4.测试
    • 2.将信息存到history表中
        • 1.InterviewHistoryService.java
        • 2.InterviewHistoryServiceImpl.java
        • 2.测试
          • 1.apipost
          • 2.debug
          • 3.db
            • 1.interview_history
            • 2.interview_question_history

1.提交试卷

1.req和vo
1.InterviewSubmitReq.java
package com.sunxiansheng.interview.api.req;import com.sunxiansheng.interview.api.enums.EngineEnum;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;import java.io.Serializable;
import java.util.List;@Getter
@Setter
public class InterviewSubmitReq implements Serializable {/*** 引擎*/private String engine = EngineEnum.JI_CHI.name();/*** pdf的url*/private String interviewUrl;/*** 问题列表*/private List<Submit> questionList;@Datapublic static class Submit {/*** 标签名*/private String labelName;/*** 题目名*/private String subjectName;/*** 题目答案*/private String subjectAnswer;/*** 用户答案*/private String userAnswer;/*** 用户分数*/private Double userScore;}}
2.InterviewResultVO.java
package com.sunxiansheng.interview.api.vo;import lombok.Getter;
import lombok.Setter;import java.io.Serializable;@Getter
@Setter
public class InterviewResultVO implements Serializable {/*** 平均分*/private Double avgScore;/*** 评价*/private String tips;/*** 平均评价*/private String avgTips;}
2.InterviewController.java
    /*** 面试提交答案*/@PostMapping(value = "/submit")public Result<InterviewResultVO> submit(@RequestBody InterviewSubmitReq req) {try {if (log.isInfoEnabled()) {log.info("面试提交入参{}", JSON.toJSON(req));}Preconditions.checkArgument(!Objects.isNull(req), "参数不能为空!");// 提交试卷:计算平均分之类的InterviewResultVO submit = interviewHistoryService.submit(req);// 智能生成评价// interviewHistoryService.logInterview(req, submit);return Result.ok(submit);} catch (IllegalArgumentException e) {log.error("参数异常!错误原因{}", e.getMessage(), e);return Result.fail(e.getMessage());} catch (Exception e) {log.error("分析简历异常!错误原因{}", e.getMessage(), e);return Result.fail("分析简历异常!");}}
3.service
1.InterviewHistoryService.java
    /*** 提交试卷,计算信息** @param req* @return*/InterviewResultVO submit(InterviewSubmitReq req);
2.InterviewHistoryServiceImpl.java
    /*** 提交试卷** @param req* @return*/@Overridepublic InterviewResultVO submit(InterviewSubmitReq req) {// 获取引擎String engine = req.getEngine();InterviewEngine interviewEngine = engineMap.get(engine);Preconditions.checkArgument(!Objects.isNull(interviewEngine), "引擎不能为空!");// 交给具体的引擎return interviewEngine.submit(req);}
3.InterviewEngine.java
    /*** 提交试卷*/InterviewResultVO submit(InterviewSubmitReq req);
4.JiChiInterviewEngine.java
@Override
public InterviewResultVO submit(InterviewSubmitReq req) {InterviewResultVO interviewResultVO = new InterviewResultVO();// 获取问题列表的信息List<InterviewSubmitReq.Submit> submits = req.getQuestionList();// 计算平均分double total = submits.stream().mapToDouble(InterviewSubmitReq.Submit::getUserScore).sum();double avg = total / submits.size();interviewResultVO.setAvgScore(avg);// 生成tipsString tips = submits.stream().map(item -> {String keyWord = item.getLabelName();String evaluate = EvaluateUtils.evaluate(item.getUserScore());return String.format(evaluate, keyWord);}).distinct().collect(Collectors.joining(";"));interviewResultVO.setTips(tips);// 生成平均tipsString avgTips = EvaluateUtils.avgEvaluate(avg);interviewResultVO.setAvgTips(avgTips);return interviewResultVO;
}
5.EvaluateUtils.java
package com.sunxiansheng.interview.server.util;import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.commons.lang3.RandomUtils;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class EvaluateUtils {private static final List<Evaluate> evaluates = build();private static List<Evaluate> build() {List<Evaluate> list = new ArrayList<>();list.add(new Evaluate(0, 3, "%s掌握较差,要加把劲"));list.add(new Evaluate(0, 3, "%s掌握不大行,还要努努力"));list.add(new Evaluate(0, 3, "%s掌握有点差,要加把劲"));list.add(new Evaluate(0, 3, "%s掌握有点离谱,多想群友讨教讨教"));list.add(new Evaluate(3, 4, "%s掌握还ok,努力再上一层楼"));list.add(new Evaluate(3, 4, "%s掌握还不错,带飞下群友吧"));list.add(new Evaluate(3, 4, "%s掌握好挺好的,分享下学习心得呗"));list.add(new Evaluate(3, 4, "%s掌握的不赖,不能太飘"));list.add(new Evaluate(4, Integer.MAX_VALUE, "%s掌握的很好,以后就看你的了"));list.add(new Evaluate(4, Integer.MAX_VALUE, "%s掌握的很6,是个天才"));list.add(new Evaluate(4, Integer.MAX_VALUE, "%s掌握太熟了,未来可期"));list.add(new Evaluate(4, Integer.MAX_VALUE, "%s掌握太猛,不愧是顶级程序员"));return list;}@Data@AllArgsConstructorprivate static class Evaluate {private double min;private double max;private String desc;}public static String avgEvaluate(double score) {if (score >= 0 && score < 3) {return "掌握较差";} else if (score >= 3 && score < 4) {return "掌握程度 ok";}return "掌握程度很好";}public static String evaluate(double score) {List<Evaluate> list = evaluates.stream().filter(item -> score >= item.getMin() && score < item.getMax()).collect(Collectors.toList());return list.get(RandomUtils.nextInt(0, list.size())).getDesc();}}
4.测试

CleanShot 2024-07-23 at 15.33.26@2x

CleanShot 2024-07-23 at 15.33.19@2x

2.将信息存到history表中

1.InterviewHistoryService.java
    /*** 将信息存到history表中** @param req* @param submit*/void logInterview(InterviewSubmitReq req, InterviewResultVO submit);
2.InterviewHistoryServiceImpl.java
    /*** 将信息存到interview_history表中** @param req* @param submit*/@Override@Transactional(rollbackFor = Exception.class)public void logInterview(InterviewSubmitReq req, InterviewResultVO submit) {// 获取信息Double avgScore = submit.getAvgScore();String avgTips = submit.getAvgTips();String interviewUrl = req.getInterviewUrl();List<Submit> questionList = req.getQuestionList();// 插入InterviewHistoryInterviewHistoryPo interviewHistoryPo = new InterviewHistoryPo();interviewHistoryPo.setAvgScore(avgScore);String keyWords = req.getQuestionList().stream().map(InterviewSubmitReq.Submit::getLabelName).distinct().collect(Collectors.joining("、"));interviewHistoryPo.setKeyWords(keyWords);interviewHistoryPo.setTip(avgTips);interviewHistoryPo.setInterviewUrl(interviewUrl);interviewHistoryPo.setCreatedBy(LoginUtil.getLoginId());interviewHistoryPo.setCreatedTime(new Date());interviewHistoryPo.setIsDeleted(0);// 这个插入会返回idthis.interviewHistoryMapper.insert(interviewHistoryPo);// 插入interview_question_history// 将questionList中的每一个元素map成interview_question_historyList<InterviewQuestionHistoryPo> interviewQuestionHistoryPoList = questionList.stream().map(question -> {InterviewQuestionHistoryPo interviewQuestionHistoryPo = new InterviewQuestionHistoryPo();interviewQuestionHistoryPo.setInterviewId(interviewHistoryPo.getId());interviewQuestionHistoryPo.setScore(question.getUserScore());interviewQuestionHistoryPo.setKeyWords(question.getLabelName());interviewQuestionHistoryPo.setQuestion(question.getSubjectName());interviewQuestionHistoryPo.setAnswer(question.getSubjectAnswer());interviewQuestionHistoryPo.setUserAnswer(question.getUserAnswer());interviewQuestionHistoryPo.setCreatedBy(LoginUtil.getLoginId());interviewQuestionHistoryPo.setCreatedTime(new Date());interviewQuestionHistoryPo.setIsDeleted(0);return interviewQuestionHistoryPo;}).collect(Collectors.toList());// 批量插入this.interviewQuestionHistoryMapper.insertBatch(interviewQuestionHistoryPoList);}
2.测试
1.apipost

CleanShot 2024-07-23 at 16.04.05@2x

2.debug

CleanShot 2024-07-23 at 16.02.15@2x

CleanShot 2024-07-23 at 16.03.43@2x

3.db
1.interview_history

CleanShot 2024-07-23 at 16.05.26@2x

2.interview_question_history

CleanShot 2024-07-23 at 16.05.51@2x

这篇关于提交试卷+智能生成评价的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre