提交试卷+智能生成评价

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

相关文章

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五