Commit df093341 authored by 陈立彬's avatar 陈立彬

任务调度

parent 2433d18b
......@@ -7,8 +7,10 @@ import cn.breeze.elleai.application.dto.request.*;
import cn.breeze.elleai.application.dto.response.*;
import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.*;
import cn.breeze.elleai.domain.sparring.service.CommonService;
import cn.breeze.elleai.domain.sparring.service.ExamineService;
import cn.breeze.elleai.exception.InternalException;
import cn.breeze.elleai.util.Codes;
import cn.breeze.elleai.util.UserPrincipal;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
......@@ -29,8 +31,7 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.*;
/**
......@@ -53,6 +54,8 @@ public class AppExamineService {
private final AiPlatformExtensionService extensionService;
private final CommonService commonService;
/************************************************** 场景分类 **************************************************/
......@@ -1166,14 +1169,28 @@ public class AppExamineService {
detailSaveModel.setAnswer(answer);
// AI 点评
AiSingleEvaluateResultDto evaluateResultDto = extensionService.run4SingleEvaluate(businessNo, userId, examineQaDto.getQuestion(), examineQaDto.getAnswer(), answer);
if(Objects.nonNull(evaluateResultDto)) {
detailSaveModel.setScore(evaluateResultDto.getScore());
detailSaveModel.setEvaluation(evaluateResultDto.getEvaluation());
}
// AiSingleEvaluateResultDto evaluateResultDto = extensionService.run4SingleEvaluate(businessNo, userId, examineQaDto.getQuestion(), examineQaDto.getAnswer(), answer);
// if(Objects.nonNull(evaluateResultDto)) {
// detailSaveModel.setScore(evaluateResultDto.getScore());
// detailSaveModel.setEvaluation(evaluateResultDto.getEvaluation());
// }
examineService.saveExamineRecordDetail(detailSaveModel);
// 定时任务
ExamineEvaluateJobResponseModel evaluateJob = commonService.getEvaluateJob(0, detailSaveModel.getId());
if(Objects.isNull(evaluateJob)) {
ExamineEvaluateJobSaveModel model = new ExamineEvaluateJobSaveModel();
model.setBusinessId(detailSaveModel.getId());
model.setBusinessNo(businessNo);
model.setType(0);
model.setStatus(0);
model.setCreateTime(new Date());
commonService.saveEvaluateJob(model);
String redisKey = String.format(Codes.SINGLE_AI_EVALUATE_JOB_STATUS, businessNo);
redisTemplate.opsForValue().set(redisKey, "0", 7, TimeUnit.DAYS);
}
// 更新缓存
businessCache.setRecordId(recordId);
redisTemplate.opsForValue().set(examBusinessKey, JSONObject.toJSONString(businessCache), 1, TimeUnit.DAYS);
......@@ -1202,40 +1219,51 @@ public class AppExamineService {
}
Integer recordId = businessCache.getRecordId();
// 获取答题结果
ExamineDetailRecordRequestModel requestModel = new ExamineDetailRecordRequestModel();
requestModel.setRecordId(recordId);
List<ExamineDetailRecordResponseModel> detailRecordList = examineService.examineDetailRecordList(requestModel);
if(CollectionUtil.isNotEmpty(detailRecordList)) {
// 计算综合评分
double totalScore = detailRecordList.stream().filter(v -> Objects.nonNull(v.getScore())).mapToDouble(ExamineDetailRecordResponseModel::getScore).sum();
Double avgScore = totalScore / detailRecordList.size();
List<Integer> qaIdList = detailRecordList.stream().map(ExamineDetailRecordResponseModel::getQaId).collect(Collectors.toList());
List<ExamineQaResponseModel> examineQaList = examineService.examineQaList(qaIdList);
Map<Integer, ExamineQaResponseModel> qaMap = examineQaList.stream().collect(toMap(ExamineQaResponseModel::getId, Function.identity()));
String qaResultStr = "";
for(int i = 0; i < detailRecordList.size(); i++) {
ExamineDetailRecordResponseModel detail = detailRecordList.get(i);
ExamineQaResponseModel qa = qaMap.get(detail.getQaId());
qaResultStr += "问题 " + (i + 1) + ": " + qa.getQuestion() + "\n";
qaResultStr += "得分:" + detail.getScore() + "\n";
qaResultStr += "评分说明:" + detail.getEvaluation() + "\n";
qaResultStr += "----------------------------------------\n";
}
// 执行综合点评
String overallEvaluation = extensionService.run4TotalEvaluate(businessNo, userId, avgScore.floatValue(), qaResultStr);
// 更新答题数量
ExamineRecordSaveModel saveModel = new ExamineRecordSaveModel();
saveModel.setId(recordId);
saveModel.setOverallEvaluation(overallEvaluation);
saveModel.setOverallScore(avgScore.floatValue());
examineService.saveExamineRecord(saveModel);
ExamineEvaluateJobResponseModel evaluateJob = commonService.getEvaluateJob(1, recordId);
if(Objects.isNull(evaluateJob)) {
ExamineEvaluateJobSaveModel model = new ExamineEvaluateJobSaveModel();
model.setBusinessId(recordId);
model.setBusinessNo(businessNo);
model.setType(1);
model.setStatus(0);
model.setCreateTime(new Date());
commonService.saveEvaluateJob(model);
}
// 获取答题结果
// ExamineDetailRecordRequestModel requestModel = new ExamineDetailRecordRequestModel();
// requestModel.setRecordId(recordId);
// List<ExamineDetailRecordResponseModel> detailRecordList = examineService.examineDetailRecordList(requestModel);
// if(CollectionUtil.isNotEmpty(detailRecordList)) {
// // 计算综合评分
// double totalScore = detailRecordList.stream().filter(v -> Objects.nonNull(v.getScore())).mapToDouble(ExamineDetailRecordResponseModel::getScore).sum();
// Double avgScore = totalScore / detailRecordList.size();
//
// List<Integer> qaIdList = detailRecordList.stream().map(ExamineDetailRecordResponseModel::getQaId).collect(Collectors.toList());
// List<ExamineQaResponseModel> examineQaList = examineService.examineQaList(qaIdList);
// Map<Integer, ExamineQaResponseModel> qaMap = examineQaList.stream().collect(toMap(ExamineQaResponseModel::getId, Function.identity()));
//
// String qaResultStr = "";
// for(int i = 0; i < detailRecordList.size(); i++) {
// ExamineDetailRecordResponseModel detail = detailRecordList.get(i);
// ExamineQaResponseModel qa = qaMap.get(detail.getQaId());
//
// qaResultStr += "问题 " + (i + 1) + ": " + qa.getQuestion() + "\n";
// qaResultStr += "得分:" + detail.getScore() + "\n";
// qaResultStr += "评分说明:" + detail.getEvaluation() + "\n";
// qaResultStr += "----------------------------------------\n";
// }
//
// // 执行综合点评
// String overallEvaluation = extensionService.run4TotalEvaluate(businessNo, userId, avgScore.floatValue(), qaResultStr);
// // 更新答题数量
// ExamineRecordSaveModel saveModel = new ExamineRecordSaveModel();
// saveModel.setId(recordId);
// saveModel.setOverallEvaluation(overallEvaluation);
// saveModel.setOverallScore(avgScore.floatValue());
//
// examineService.saveExamineRecord(saveModel);
// }
}
......@@ -1248,10 +1276,14 @@ public class AppExamineService {
*/
public ExamineRecordMobileDto getExamineFinalResult(UserPrincipal userPrincipal, Integer examineId, String businessNo) {
// 获取考试记录信息
ExamineRecordResponseModel recordModel = examineService.examineRecordDetail(businessNo);
if(Objects.nonNull(recordModel)) {
Integer recordId = recordModel.getId();
return this.examineRecordMobileDetail(recordId);
String totalJobKey = String.format(Codes.TOTAL_AI_EVALUATE_JOB_STATUS, businessNo);
String totalJobStatus = redisTemplate.opsForValue().get(totalJobKey);
if(Objects.equals(totalJobStatus, "1")) {
ExamineRecordResponseModel recordModel = examineService.examineRecordDetail(businessNo);
if(Objects.nonNull(recordModel)) {
Integer recordId = recordModel.getId();
return this.examineRecordMobileDetail(recordId);
}
}
return null;
}
......
......@@ -25,5 +25,7 @@ public interface CommonService {
void saveEvaluateJob(ExamineEvaluateJobSaveModel dto);
ExamineEvaluateJobResponseModel getEvaluateJob(Integer type, Integer businessId);
List<ExamineEvaluateJobResponseModel> pendingEvaluateJobList();
}
......@@ -109,6 +109,14 @@ public class CommonServiceImpl implements CommonService{
evaluateJobMapper.insertOrUpdateSelective(entity);
}
@Override
public ExamineEvaluateJobResponseModel getEvaluateJob(Integer type, Integer businessId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_EVALUATE_JOB_ENTITY.TYPE.eq(type)
.and(EXAMINE_EVALUATE_JOB_ENTITY.BUSINESS_ID.eq(businessId)));
return evaluateJobMapper.selectOneByQueryAs(queryWrapper, ExamineEvaluateJobResponseModel.class);
}
@Override
public List<ExamineEvaluateJobResponseModel> pendingEvaluateJobList() {
......
......@@ -486,6 +486,7 @@ public class ExamineServiceImpl implements ExamineService {
UserExamineDetailRecordEntity entity = BeanUtil.toBean(dto, UserExamineDetailRecordEntity.class);
entity.setUpdateTime(new Date());
userExamineDetailRecordMapper.insertOrUpdateSelective(entity);
dto.setId(entity.getId());
}
@Override
......
......@@ -13,6 +13,7 @@ import cn.breeze.elleai.domain.sparring.model.response.ExamineQaResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.ExamineRecordDetailResponseModel;
import cn.breeze.elleai.domain.sparring.service.CommonService;
import cn.breeze.elleai.domain.sparring.service.ExamineService;
import cn.breeze.elleai.util.Codes;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
......@@ -27,6 +28,7 @@ import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -94,56 +96,61 @@ public class SingleJob extends QuartzJobBean {
update.setStatus(1);
commonService.saveEvaluateJob(update);
//TODO 更新任务缓存信息
// 更新任务缓存信息
String redisKey = String.format(Codes.SINGLE_AI_EVALUATE_JOB_STATUS, businessNo);
redisTemplate.opsForValue().set(redisKey, "1", 7, TimeUnit.DAYS);
}
} else {
//TODO 判断所有题目是否已经单题点评完毕
// 获取答题结果
ExamineDetailRecordRequestModel requestModel = new ExamineDetailRecordRequestModel();
requestModel.setRecordId(businessId);
List<ExamineDetailRecordResponseModel> detailRecordList = examineService.examineDetailRecordList(requestModel);
if(CollectionUtil.isNotEmpty(detailRecordList)) {
// 计算综合评分
double totalScore = detailRecordList.stream().filter(v -> Objects.nonNull(v.getScore())).mapToDouble(ExamineDetailRecordResponseModel::getScore).sum();
Double avgScore = totalScore / detailRecordList.size();
List<Integer> qaIdList = detailRecordList.stream().map(ExamineDetailRecordResponseModel::getQaId).collect(Collectors.toList());
List<ExamineQaResponseModel> examineQaList = examineService.examineQaList(qaIdList);
Map<Integer, ExamineQaResponseModel> qaMap = examineQaList.stream().collect(toMap(ExamineQaResponseModel::getId, Function.identity()));
String qaResultStr = "";
for(int i = 0; i < detailRecordList.size(); i++) {
ExamineDetailRecordResponseModel detail = detailRecordList.get(i);
ExamineQaResponseModel qa = qaMap.get(detail.getQaId());
qaResultStr += "问题 " + (i + 1) + ": " + qa.getQuestion() + "\n";
qaResultStr += "得分:" + detail.getScore() + "\n";
qaResultStr += "评分说明:" + detail.getEvaluation() + "\n";
qaResultStr += "----------------------------------------\n";
}
// 执行综合点评
String overallEvaluation = extensionService.run4TotalEvaluate(businessNo, job.getUserId(), avgScore.floatValue(), qaResultStr);
if(StrUtil.isNotEmpty(overallEvaluation)) {
// 更新
ExamineRecordSaveModel saveModel = new ExamineRecordSaveModel();
saveModel.setId(businessId);
saveModel.setOverallEvaluation(overallEvaluation);
saveModel.setOverallScore(avgScore.floatValue());
examineService.saveExamineRecord(saveModel);
// 更新任务执行状态
ExamineEvaluateJobSaveModel update = new ExamineEvaluateJobSaveModel();
update.setId(job.getId());
update.setStatus(1);
commonService.saveEvaluateJob(update);
//TODO 更新任务缓存信息
String redisKey = String.format(Codes.SINGLE_AI_EVALUATE_JOB_STATUS, businessNo);
String jobStatus = redisTemplate.opsForValue().get(redisKey);
if(Objects.equals(jobStatus, "1")) {
// 获取答题结果
ExamineDetailRecordRequestModel requestModel = new ExamineDetailRecordRequestModel();
requestModel.setRecordId(businessId);
List<ExamineDetailRecordResponseModel> detailRecordList = examineService.examineDetailRecordList(requestModel);
if(CollectionUtil.isNotEmpty(detailRecordList)) {
// 计算综合评分
double totalScore = detailRecordList.stream().filter(v -> Objects.nonNull(v.getScore())).mapToDouble(ExamineDetailRecordResponseModel::getScore).sum();
Double avgScore = totalScore / detailRecordList.size();
List<Integer> qaIdList = detailRecordList.stream().map(ExamineDetailRecordResponseModel::getQaId).collect(Collectors.toList());
List<ExamineQaResponseModel> examineQaList = examineService.examineQaList(qaIdList);
Map<Integer, ExamineQaResponseModel> qaMap = examineQaList.stream().collect(toMap(ExamineQaResponseModel::getId, Function.identity()));
String qaResultStr = "";
for(int i = 0; i < detailRecordList.size(); i++) {
ExamineDetailRecordResponseModel detail = detailRecordList.get(i);
ExamineQaResponseModel qa = qaMap.get(detail.getQaId());
qaResultStr += "问题 " + (i + 1) + ": " + qa.getQuestion() + "\n";
qaResultStr += "得分:" + detail.getScore() + "\n";
qaResultStr += "评分说明:" + detail.getEvaluation() + "\n";
qaResultStr += "----------------------------------------\n";
}
// 执行综合点评
String overallEvaluation = extensionService.run4TotalEvaluate(businessNo, job.getUserId(), avgScore.floatValue(), qaResultStr);
if(StrUtil.isNotEmpty(overallEvaluation)) {
// 更新
ExamineRecordSaveModel saveModel = new ExamineRecordSaveModel();
saveModel.setId(businessId);
saveModel.setOverallEvaluation(overallEvaluation);
saveModel.setOverallScore(avgScore.floatValue());
examineService.saveExamineRecord(saveModel);
// 更新任务执行状态
ExamineEvaluateJobSaveModel update = new ExamineEvaluateJobSaveModel();
update.setId(job.getId());
update.setStatus(1);
commonService.saveEvaluateJob(update);
// 更新任务缓存信息
String totalJobStatus = String.format(Codes.TOTAL_AI_EVALUATE_JOB_STATUS, businessNo);
redisTemplate.opsForValue().set(totalJobStatus, "1", 7, TimeUnit.DAYS);
}
}
}
}
......
......@@ -61,4 +61,7 @@ public abstract class Codes {
public static final String SINGLE_AI_EVALUATE_JOB_STATUS = "ai:single_evaluate_job:%s";
public static final String TOTAL_AI_EVALUATE_JOB_STATUS = "ai:total_evaluate_job:%s";
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment