当前位置: 首页 > news >正文

提交试卷+智能生成评价

文章目录

    • 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • wpf DataTemplate 和 ControlTemplate 区别,应用举例
  • iPhone13手机照片被误删,有什么方法可以恢复吗?
  • 基于ssm+vue+uniapp的跑腿平台小程序
  • Java之迭代器的使用
  • Qt QTableWidgetItem.setFlags()
  • [M双指针] lc209. 长度最小的子数组(双指针+好题)
  • 开发一个免费的图表网站 Free Charts
  • 《机器学习》—— AUC评估指标
  • 多线程中常见问题
  • 《第二十四章 多线程与异步任务 - AsyncTask 异步任务》
  • Spring笔记(二)
  • qtsql连接达梦数据库
  • 【CANoe使用大全】——cdd导入CANoe流程详解
  • 使用PowerShell自动化Windows系统管理任务
  • JavaEE从入门到起飞(九) ~Activiti 工作流
  • 3.7、@ResponseBody 和 @RestController
  • Angular 响应式表单 基础例子
  • angular2开源库收集
  • angular学习第一篇-----环境搭建
  • CSS居中完全指南——构建CSS居中决策树
  • CSS相对定位
  • export和import的用法总结
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • mysql 数据库四种事务隔离级别
  • nginx 配置多 域名 + 多 https
  • React组件设计模式(一)
  • Spark学习笔记之相关记录
  • uni-app项目数字滚动
  • vue2.0项目引入element-ui
  • Vue2.x学习三:事件处理生命周期钩子
  • 记一次和乔布斯合作最难忘的经历
  • 前端性能优化--懒加载和预加载
  • 如何用vue打造一个移动端音乐播放器
  • 设计模式(12)迭代器模式(讲解+应用)
  • 思考 CSS 架构
  • Nginx实现动静分离
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​插件化DPI在商用WIFI中的价值
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​业务双活的数据切换思路设计(下)
  • # Redis 入门到精通(七)-- redis 删除策略
  • # 计算机视觉入门
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #QT(串口助手-界面)
  • $L^p$ 调和函数恒为零
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (理论篇)httpmoudle和httphandler一览
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试