package com.ots.project.exam.restcontroller;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.ots.common.constant.Constants;
|
import com.ots.common.exception.user.UserException;
|
import com.ots.common.utils.MessageUtils;
|
import com.ots.common.utils.StringUtils;
|
import com.ots.common.utils.Threads;
|
import com.ots.framework.manager.AsyncManager;
|
import com.ots.framework.manager.factory.AsyncFactory;
|
import com.ots.project.common.BaseApiController;
|
import com.ots.project.exam.domain.TExamPaper;
|
import com.ots.project.exam.domain.TExamReport;
|
import com.ots.project.exam.dto.ExamPaperTitleItem;
|
import com.ots.project.exam.dto.QuestionPart;
|
import com.ots.project.exam.dto.RelatedParty;
|
import com.ots.project.exam.dto.RestResponse;
|
import com.ots.project.exam.dto.SignalObject;
|
import com.ots.project.exam.service.IExamPaperService;
|
import com.ots.project.exam.service.ITExamReportService;
|
import com.ots.project.exam.service.MemberService;
|
import com.ots.project.exam.service.impl.TExamPaperServiceImpl;
|
import com.ots.project.exam.viewmodel.ExamItemOrderAndContent;
|
import com.ots.project.exam.viewmodel.ExamPaperEditRequestVM;
|
import com.ots.project.exam.viewmodel.ExamResultRequestVM;
|
import com.ots.project.tool.exam.ExamUtil;
|
import com.ots.project.tool.exam.JsonUtil;
|
import com.ots.project.tool.report.reportCalculation.response.ReportAPIResult;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.HashMap;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.Set;
|
|
@RestController("StudentExamPaperController")
|
@RequestMapping(value = "/api/exam/paper")
|
@AllArgsConstructor
|
@Slf4j
|
public class ExamPaperController extends BaseApiController {
|
|
@Autowired
|
private IExamPaperService examPaperService;
|
|
@Autowired
|
private TExamPaperServiceImpl itExamPaperService;
|
|
@Autowired
|
private ITExamReportService examReportService;
|
|
@Autowired
|
MemberService memberService;
|
|
private static final Logger logger = LoggerFactory.getLogger(Threads.class);
|
|
@RequestMapping(value = "/select/{tokenId}/{langType}", method = RequestMethod.POST)
|
public RestResponse<ExamPaperEditRequestVM> select(@PathVariable String tokenId, @PathVariable String langType) {
|
RelatedParty relatedParty = memberService.queryProdidByToken(tokenId);
|
ExamPaperEditRequestVM vm = examPaperService.examPaperToVM(relatedParty, tokenId, langType);
|
return RestResponse.ok(vm);
|
}
|
|
|
@RequestMapping(value = "/selectTokenId/{selectTokenId}", method = RequestMethod.POST)
|
public RestResponse<ExamResultRequestVM> selectTokenId(@PathVariable String selectTokenId) {
|
try {
|
TExamReport tExamReport = new TExamReport();
|
TExamReport tExamReportTemp = null;
|
tExamReport.setTokenId(selectTokenId);
|
List<TExamReport> tExamReportList = examReportService.selectTExamReportList(tExamReport);
|
ExamResultRequestVM examResultRequestVM = new ExamResultRequestVM();
|
|
TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(memberService.queryProdidByToken(selectTokenId).getProdId());
|
|
examResultRequestVM.setDoUrl(tExamPaper.getQuestionTemplateId());
|
examResultRequestVM.setReportTemplateId(tExamPaper.getReportTemplateId());
|
|
RelatedParty relatedParty = memberService.queryProdidByToken(selectTokenId);
|
examResultRequestVM.setStatus(relatedParty.getStatus());
|
|
TExamReport tExamReportResult = null;
|
if (tExamReportList.size() > 0) {
|
tExamReportResult = tExamReportList.get(0);
|
// 目前只查询一个产品包给用户
|
tExamReportTemp = tExamReportResult;
|
examResultRequestVM.setDoTime(tExamReportTemp.getDoTime());
|
examResultRequestVM.setFinish(tExamReportTemp.getFinish());
|
// 获取最后一个剩余时间。比如现在有2段,获取第2段
|
Integer remainTimeResult = getRemainTimeResult(tExamReportTemp);
|
examResultRequestVM.setRemainTime(remainTimeResult);
|
} else {
|
return RestResponse.ok(examResultRequestVM);
|
}
|
|
LinkedHashMap<String, String> answerMap = JSON.parseObject(tExamReportTemp.getChoice(), LinkedHashMap.class);
|
|
examResultRequestVM.setExamItemOrderAndContentList(new ArrayList<>());
|
|
if (!Objects.isNull(answerMap)) {
|
answerMap.forEach((k, v) -> {
|
ExamItemOrderAndContent examItemOrderAndContent = new ExamItemOrderAndContent();
|
examItemOrderAndContent.setItemOrder(k);
|
examItemOrderAndContent.setContent(v);
|
examResultRequestVM.getExamItemOrderAndContentList().add(examItemOrderAndContent);
|
});
|
}
|
|
// 返回给前台指导语
|
getSignalObject(examResultRequestVM, tExamPaper, tExamReportResult);
|
return RestResponse.ok(examResultRequestVM);
|
} catch (Exception e) {
|
logger.error("{}", e.getMessage(), e);
|
return RestResponse.fail(new UserException("jsp.exam.product.noProduct", new String[]{}));
|
}
|
}
|
|
private Integer getRemainTimeResult(TExamReport tExamReportTemp) {
|
Map<Integer, Integer> remainPartTimeMap = JsonUtil.parseObject(tExamReportTemp.getRemainPartTime(), HashMap.class);
|
if (Objects.isNull(remainPartTimeMap)) {
|
return 999999;
|
}
|
Set<Integer> remainPartTimeKeySet = remainPartTimeMap.keySet();
|
Object[] remainPartTimeKeys = remainPartTimeKeySet.toArray();
|
Arrays.sort(remainPartTimeKeys);
|
return remainPartTimeMap.get(remainPartTimeKeys[remainPartTimeKeys.length - 1]);
|
}
|
|
private void getSignalObject(ExamResultRequestVM examResultRequestVM, TExamPaper tExamPaper, TExamReport tExamReportResult) {
|
List<ExamPaperTitleItem> examPaperTitleItemList = JsonUtil.parseArray(tExamPaper.getContent(), ExamPaperTitleItem.class);
|
List<QuestionPart> parts = examPaperTitleItemList.get(0).getParts();
|
if (CollUtil.isEmpty(parts)) {
|
return;
|
}
|
QuestionPart questionPart = parts.get(0); // 先写死
|
List<SignalObject> signals = questionPart.getSignals();
|
List<ReportAPIResult> reportAPIResultList = JsonUtil.parseArray(tExamReportResult.getInterfaceContent(), ReportAPIResult.class);
|
if (Objects.isNull(reportAPIResultList)) {
|
return;
|
}
|
|
for (SignalObject signalObject : signals) {
|
if (Objects.equals(reportAPIResultList.get(0).getSignal(), signalObject.getSignal())) {
|
signalObject.setSignalDescription(ExamUtil.getLangString(tExamReportResult.getLangType(), signalObject.getSignalDescription()));
|
String name = examReportService.getDemographicName(tExamReportResult);
|
signalObject.setSignalDescription(signalObject.getSignalDescription().replaceAll("%%fullName%%", StringUtils.isNotEmpty(name) ? name : tExamReportResult.getMemberName()));
|
signalObject.setCode(reportAPIResultList.get(0).getCode());
|
signalObject.setMessage(reportAPIResultList.get(0).getMessage());
|
examResultRequestVM.setSignalObject(signalObject);
|
break;
|
}
|
}
|
}
|
|
// 记录登陆日志
|
@RequestMapping(value = "/recordLogininfor/{selectTokenId}", method = RequestMethod.POST)
|
public RestResponse<ExamResultRequestVM> recordLogininfor(@PathVariable String selectTokenId) {
|
AsyncManager.me().execute(AsyncFactory.recordLogininfor(memberService.queryProdidByToken(selectTokenId).getMemberId().toString(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
|
return RestResponse.ok();
|
}
|
}
|