提交试卷+智能生成评价

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

相关文章

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

详解Java中如何使用JFreeChart生成甘特图

《详解Java中如何使用JFreeChart生成甘特图》甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配,在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图... 目录引言一、JFreeChart简介二、准备工作三、创建甘特图1. 定义数据集2. 创建甘特图3.