linzhijie
2021-03-11 93af1c6ffb9ae0e894689ad3a37b548e57d54cff
src/main/java/com/ots/project/exam/restcontroller/ExamPaperController.java
@@ -1,4 +1,6 @@
package com.ots.project.exam.restcontroller;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.ots.common.constant.Constants;
@@ -35,6 +37,7 @@
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;
@@ -43,26 +46,35 @@
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 {
@@ -71,26 +83,33 @@
            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();
@@ -100,6 +119,7 @@
                });
            }
            
            // 返回给前台指导语
            getSignalObject(examResultRequestVM, tExamPaper, tExamReportResult);
            return RestResponse.ok(examResultRequestVM);
        } catch (Exception e) {
@@ -107,6 +127,7 @@
            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)) {
@@ -117,18 +138,20 @@
        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);
        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()));
@@ -142,6 +165,7 @@
        }
    }
    
    // 记录登陆日志
    @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")));