package com.ots.project.exam.service.impl; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ots.common.enums.SenderCode; import com.ots.common.enums.UserTypeEnum; import com.ots.common.utils.DateUtils; import com.ots.common.utils.MessageUtils; import com.ots.common.utils.StringUtils; import com.ots.common.utils.Threads; import com.ots.common.utils.bean.BeanUtils; import com.ots.common.utils.poi.WordUtil; import com.ots.common.utils.security.ShiroUtils; import com.ots.common.utils.text.Convert; import com.ots.framework.web.domain.Ztree; import com.ots.framework.web.service.DictService; import com.ots.project.exam.domain.*; import com.ots.project.exam.dto.*; import com.ots.project.exam.mapper.*; import com.ots.project.exam.service.*; import com.ots.project.exam.viewmodel.ExamPaperSubmitVM; import com.ots.project.system.dict.domain.DictData; import com.ots.project.system.dict.service.IDictDataService; import com.ots.project.system.user.domain.User; import com.ots.project.tool.email.EmailMessage; import com.ots.project.tool.email.RushMailResult; import com.ots.project.tool.exam.ExamUtil; import com.ots.project.tool.exam.JsonUtil; import com.ots.project.tool.exam.ModelMapperSingle; import com.ots.project.tool.gen.service.IExamUtilService; import com.ots.project.tool.report.reportCalculation.request.*; import com.ots.project.tool.report.reportCalculation.response.ReportAPIResult; import lombok.extern.slf4j.Slf4j; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; import static com.ots.project.tool.report.reportCalculation.request.CalculationTypeEnum.*; import static com.ots.project.tool.report.reportCalculation.request.ReportTypeEnum.firstPath; import static com.ots.project.tool.report.reportCalculation.request.ReportTypeEnum.secondPath; /** * 产品包列表Service业务层处理 * * @author ots * @date 2019-11-20 */ @Service("examPaper") @Slf4j public class TExamPaperServiceImpl implements ITExamPaperService { @Autowired private TExamPaperMapper tExamPaperMapper; @Autowired private TTextContentMapper tTextContentMapper; @Autowired private TExamLevelMapper tExamLevelMapper; @Autowired private TQuestionMapper questionMapper; @Autowired private ITQuestionService tQuestionService; @Autowired private IDictDataService dictDataService; @Autowired private DictService dictService; @Autowired private ITTextContentService tTextContentService; @Autowired private TExamPaperQuestionMapper tExamPaperQuestionMapper; @Autowired private ITExamPaperService tExamPaperService; @Autowired private ISysUserPaperService userPaperService; @Autowired private IExamUtilService examUtilService; protected final static ModelMapper modelMapper = ModelMapperSingle.Instance(); @Autowired private ITReportTemplateService itReportTemplateService; @Autowired private ITExamReportService examReportService; @Autowired private EntTestMemberMapper entTestMemberMapper; @Autowired EmailMessage emailMessage; @Autowired ReportCalculationServices calculationServices; private static final Logger logger = LoggerFactory.getLogger(Threads.class); /** * 查询产品包列表 * * @param id 产品包列表ID * @return 产品包列表 */ @Override public TExamPaper selectTExamPaperById(Long id) { return tExamPaperMapper.selectTExamPaperById(id); } /** * 查询产品包列表列表 * * @param tExamPaper 产品包列表 * @return 产品包列表 */ @Override public List selectTExamPaperList(TExamPaper tExamPaper) { List tExamPaperList = tExamPaperMapper.selectTExamPaperList(tExamPaper); List tExamPaperResultList = new ArrayList<>(); // 遍历出各种语言 for (TExamPaper tExamPaperTemp : tExamPaperList) { Map nameMap = JsonUtil.toJsonObject(tExamPaperTemp.getName(), HashMap.class); if (Objects.isNull(nameMap)) { TExamPaper tExamPaperResult = new TExamPaper(); BeanUtils.copyProperties(tExamPaperTemp, tExamPaperResult); tExamPaperResult.setLangType(tExamPaper.getLangType()); tExamPaperResultList.add(tExamPaperResult); } else { nameMap.forEach((key, value) -> { TExamPaper tExamPaperResult = new TExamPaper(); BeanUtils.copyProperties(tExamPaperTemp, tExamPaperResult); tExamPaperResult.setLangType(key); tExamPaperResult.setName(value); if (nameMap.size() == 1) { tExamPaperResultList.add(tExamPaperResult); } else if (Objects.nonNull(tExamPaper.getUuid()) || (Objects.isNull(tExamPaper.getUuid()) && Objects.equals(dictService.getLangType(LocaleContextHolder.getLocale().toString()), key))) { tExamPaperResultList.add(tExamPaperResult); } }); } } // 这样才能翻页 tExamPaperList.clear(); tExamPaperList.addAll(tExamPaperResultList); return tExamPaperList; } /** * 新增产品包列表 * * @param tExamPaper 产品包列表 * @return 结果 */ @Override @Transactional public int insertTExamPaper(TExamPaper tExamPaper) { // 添加版本号 if (Objects.nonNull(tExamPaper.getVersionId())) { String maxVersion = tExamPaperMapper.selectEPaperMaxVBypermanentId(tExamPaper); if (StringUtils.isEmpty(maxVersion) && StringUtils.isNotEmpty(tExamPaper.getVersionId())) { int vNum = Integer.parseInt(tExamPaper.getVersion().substring(1)) + 1; tExamPaper.setVersion("V" + vNum); } else if (StringUtils.isNotEmpty(maxVersion)) { int vNum = Integer.parseInt(maxVersion.substring(1)) + 1; tExamPaper.setVersion("V" + vNum); } else { setVersion(tExamPaper); } } else { setVersion(tExamPaper); } // 控制语言 tExamPaper.setLangType(examUtilService.getLocalLangType(tExamPaper.getLangType())); tExamPaper.setCreateTime(DateUtils.getNowDate()); //拼装t_text_content,tQuestion参数的属性也是会在此方法内部修改 TTextContent textContent = new TTextContent(); // 设置产品包名称和指导语 setInserPerperNameAndGuide(tExamPaper); // 设置产品包的content的内容,入t_exam_paper_question表 setInsertPaperContent(tExamPaper, textContent); //入库t_text_content tTextContentMapper.insertTTextContent(textContent); tExamPaper.setFrameTextContentId(textContent.getId()); //计算试卷总分 // SetExamPaperAttribute(tExamPaper); setQuestionContentJson(tExamPaper); tExamPaperMapper.insertTExamPaper(tExamPaper); // 最后入t_exam_paper_question表 return setExamPaperQuestion(tExamPaper); } private void setVersion(TExamPaper tExamPaper) { tExamPaper.setVersionId(UUID.randomUUID().toString().replaceAll("-", "")); tExamPaper.setVersion("V1"); } private void setInsertPaperContent(TExamPaper tExamPaper, TTextContent textContent) { // 多语言2、content表里面的,Multilingual不为空表示已经做了多语言 if (StringUtils.isNotEmpty(tExamPaper.getMultilingual())) { String content = tExamPaper.getQuestions(); content = setPartsContent(tExamPaper, content); textContent.setContent(content); } else { List examPaperTitleItemList = JsonUtil.parseArray(tExamPaper.getQuestions(), ExamPaperTitleItem.class); for (ExamPaperTitleItem examPaperTitleItem : examPaperTitleItemList) { examPaperTitleItem.setName(examUtilService.getLangOrLocalLangString(tExamPaper.getLangType(), examPaperTitleItem.getName())); examPaperTitleItem.setDescription(examUtilService.getLangOrLocalLangString(tExamPaper.getLangType(), examPaperTitleItem.getDescription())); examPaperTitleItem.setGuide(examUtilService.getLangOrLocalLangString(tExamPaper.getLangType(), examPaperTitleItem.getGuide())); setPartLangsData(tExamPaper, examPaperTitleItem.getParts()); } textContent.setContent(JsonUtil.toJSONString(examPaperTitleItemList)); } } private String setPartsContent(TExamPaper tExamPaper, String content) { List examPaperTitleItemList = JsonUtil.parseArray(content, ExamPaperTitleItem.class); List parts = examPaperTitleItemList.get(0).getParts(); setPartLangsData(tExamPaper, parts); content = JsonUtil.toJSONString(examPaperTitleItemList); return content; } // 多语言 private void setPartLangsData(TExamPaper tExamPaper, List parts) { if (ExamUtil.isListNotEmpty(parts)) { for (QuestionPart questionPart : parts) { List signals = questionPart.getSignals(); signals.stream().forEach(signalObject -> { signalObject.setSignalDescription(ExamUtil.getStringMapJson(tExamPaper.getLangType(), signalObject.getSignalDescription(), new HashMap<>())); }); } } } private int setExamPaperQuestion(TExamPaper tExamPaper) { List examPaperTitleItemList = JsonUtil.toJsonListObject(tExamPaper.getQuestions(), ExamPaperTitleItem.class); int size = examPaperTitleItemList.size(); tExamPaperQuestionMapper.deleteTExamPaperQuestionById(tExamPaper.getId()); for (ExamPaperTitleItem examPaperTitleItem : examPaperTitleItemList) { List questionItems = examPaperTitleItem.getQuestionItems(); questionItems.stream().forEach(questionItem -> { TExamPaperQuestion tExamPaperQuestion = new TExamPaperQuestion(); tExamPaperQuestion.setPaperId(tExamPaper.getId()); tExamPaperQuestion.setQuestionId(questionItem.getId()); tExamPaperQuestion.setPermanentId(size > 1 ? examPaperTitleItem.getPermanentId() : questionItem.getPermanentId()); tExamPaperQuestionMapper.insertTExamPaperQuestion(tExamPaperQuestion); }); } return 1; } private void setInserPerperNameAndGuide(TExamPaper tExamPaper) { // 多语言 // 多语言1、 题目转化为多语言,批量导入的不转化 Map nameMap = new HashMap<>(); Map guideMap = new HashMap<>(); if (StringUtils.isNotEmpty(tExamPaper.getMultilingual())) { // 批量导入 setInserPerperBatch(tExamPaper, nameMap, guideMap); // 名称和指导语 setProductNameAndGuide(tExamPaper, nameMap, guideMap); } else { // 非批量导入 // 如果是插入的覆盖 if (tExamPaper.isCreate() && Objects.nonNull(tExamPaper.getId())) { TExamPaper tExamPaperLast = tExamPaperMapper.selectTExamPaperById(tExamPaper.getId()); String nameMapJson = ExamUtil.getStringMapJson(tExamPaper.getLangType(), tExamPaper.getName(), tExamPaperLast.getName()); String guideMapJson = ExamUtil.getStringMapJson(tExamPaper.getLangType(), tExamPaper.getGuide(), tExamPaperLast.getGuide()); nameMap = JsonUtil.toJsonObject(nameMapJson, HashMap.class); guideMap = JsonUtil.toJsonObject(guideMapJson, HashMap.class); } else if (Objects.equals(tExamPaper.getLangType(), "ALL")) { nameMap.put(dictService.getLangType(LocaleContextHolder.getLocale().toString()), tExamPaper.getName()); guideMap.put(dictService.getLangType(LocaleContextHolder.getLocale().toString()), tExamPaper.getGuide()); } else { nameMap.put(tExamPaper.getLangType(), tExamPaper.getName()); guideMap.put(tExamPaper.getLangType(), tExamPaper.getGuide()); } // 名称和指导语 setProductNameAndGuide(tExamPaper, nameMap, guideMap); } } // 批量导入插入 private void setInserPerperBatch(TExamPaper tExamPaper, Map nameMap, Map guideMap) { List multilingualList = JsonUtil.toJsonListObject(tExamPaper.getMultilingual(), String.class); for (int i = 0; i < multilingualList.size(); i++) { // 如果选择了多语言而导入的不是本地国际化的那种语言 if (StringUtils.equals(tExamPaper.getLangType(), "ALL") && !multilingualList.contains(dictService.getLangType(LocaleContextHolder.getLocale().toString()))) { nameMap.put(multilingualList.get(i), tExamPaper.getName()); guideMap.put(multilingualList.get(i), tExamPaper.getGuide()); } else if (!Objects.equals(dictService.getLangType(LocaleContextHolder.getLocale().toString()), multilingualList.get(i))) { nameMap.put(multilingualList.get(i), ""); guideMap.put(multilingualList.get(i), ""); } else { nameMap.put(multilingualList.get(i), tExamPaper.getName()); guideMap.put(multilingualList.get(i), tExamPaper.getGuide()); } } } // 设置产品包的名称和指导语 private void setProductNameAndGuide(TExamPaper tExamPaper, Map nameMap, Map guideMap) { tExamPaper.setName(JsonUtil.toJsonStr(nameMap)); tExamPaper.setGuide(JsonUtil.toJsonStr(guideMap)); } // 添加到quesitonContent字段,专门为题目搜索,空间换时间,记录小题,不是大题 private void setQuestionContentJson(TExamPaper tExamPaper) { String langType = tExamPaper.getLangType(); tExamPaper.setLangType(""); List ExamPaperTitleItemList = getExamPaperTitleContent(tExamPaper); List questionContentList = new ArrayList<>(); for (ExamPaperTitleItem examPaperTitleItem : ExamPaperTitleItemList) { List questionItemList = examPaperTitleItem.getQuestionItems(); questionItemList.stream().forEach(questionItem -> { QuestionContent quesitonContent = new QuestionContent(); quesitonContent.setPermanentId(questionItem.getPermanentId()); quesitonContent.setQuestionTitle(questionItem.getTitle()); questionContentList.add(quesitonContent); }); } tExamPaper.setQuestionContent(JsonUtil.toJsonStr(questionContentList)); tExamPaper.setLangType(langType); } private void SetExamPaperAttribute(TExamPaper tExamPaper) { // begin 计算整个产品包的分数 List examPaperTitleItemObjectList = JSONArray.parseArray(tExamPaper.getQuestions(), ExamPaperTitleItemObject.class); //将数据打横再转list[(1,2,3),(4,5,6)] ->(1,2,3,4,5,6) ->[(1),(2),(3),(4),(5),(6)] List questionIds = examPaperTitleItemObjectList.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList()); Integer[] ids = questionIds.toArray(new Integer[questionIds.size()]); List tQuestionList = questionMapper.selectTQuestionScore(ids); //sql语句是sum(),都是1条 //tExamPaper.setScore(tQuestionList.get(0).getScore()); tExamPaper.setScore(0l); // end 计算整个产品包的分数 //题目总数 tExamPaper.setQuestionCount(Long.valueOf(questionIds.size())); } /** * 修改产品包列表 * * @param tExamPaper 产品包列表 * @return 结果 */ @Override @Transactional public int updateTExamPaper(TExamPaper tExamPaper) { // 多语言的情况 if (StringUtils.isEmpty(tExamPaper.getVersion())) { setVersion(tExamPaper); updateTExamPaperVersion(tExamPaper); } if (tExamPaper.isCreate()) { insertTExamPaper(tExamPaper); } updateLangProduct(tExamPaper); return setExamPaperQuestion(tExamPaper); } // 更新产品包的版本 public int updateTExamPaperVersion(TExamPaper tExamPaper) { return tExamPaperMapper.updateTExamPaperVersion(tExamPaper); } private int updateLangProduct(TExamPaper tExamPaper) { // 产品包名称多语言 TExamPaper tExamPaperForUpdate = selectTExamPaperById(tExamPaper.getId()); // 更新产品包的内容 setExamPaperInfor(tExamPaper, tExamPaperForUpdate); // 处理content里面的,旧的content拼新的content TTextContent textContent = tTextContentMapper.selectTTextContentById(tExamPaperForUpdate.getFrameTextContentId()); textContent.setContent(tExamPaper.getQuestions()); textContent.setUpdateTime(DateUtils.getNowDate()); tTextContentMapper.updateTTextContent(textContent); tExamPaperForUpdate.setUpdateTime(DateUtils.getNowDate()); return tExamPaperMapper.updateTExamPaper(tExamPaperForUpdate); } private void setExamPaperInfor(TExamPaper tExamPaper, TExamPaper tExamPaperForUpdate) { tExamPaperForUpdate.setName(ExamUtil.getStringMapJson(tExamPaper.getLangType(), tExamPaper.getName(), tExamPaperForUpdate.getName())); // 指导语多语言 tExamPaperForUpdate.setGuide(ExamUtil.getStringMapJson(tExamPaper.getLangType(), tExamPaper.getGuide(), tExamPaperForUpdate.getGuide())); tExamPaperForUpdate.setSuggestTime(tExamPaper.getSuggestTime()); tExamPaperForUpdate.setReportTemplateId(tExamPaper.getReportTemplateId()); // 设置分段的多语言 setLangsPart(tExamPaper, tExamPaperForUpdate); } private void setLangsPart(TExamPaper tExamPaper, TExamPaper tExamPaperForUpdate) { try { List examPaperTitleItemListNew = JsonUtil.parseArray(tExamPaper.getQuestions(), ExamPaperTitleItem.class); List examPaperTitleItemListOld = JsonUtil.parseArray(tExamPaperForUpdate.getContent(), ExamPaperTitleItem.class); List partsNew = examPaperTitleItemListNew.get(0).getParts(); List partsOld = examPaperTitleItemListOld.get(0).getParts(); for (int i = 0; i < partsNew.size(); i++) { List signalsNew = partsNew.get(i).getSignals(); List signalsOld = partsOld.get(i).getSignals(); for (int j = 0; j < signalsNew.size(); j++) { Map signalDescriptionMap = JsonUtil.parseObject(signalsOld.get(j).getSignalDescription(), HashMap.class); signalsNew.get(j).setSignalDescription(ExamUtil.getStringMapJson(tExamPaper.getLangType(), signalsNew.get(j).getSignalDescription(), signalDescriptionMap)); } } tExamPaper.setQuestions(JsonUtil.toJSONString(examPaperTitleItemListNew)); } catch (Exception e) { } } @Override public int deleteProductContent(TExamPaper tExamPaper) { // 产品包名称多语言 TExamPaper tExamPaperForUpdate = selectTExamPaperById(tExamPaper.getId()); tExamPaperForUpdate.setName(ExamUtil.deleteLangString(tExamPaper.getLangType(), tExamPaperForUpdate.getName())); // 指导语多语言 tExamPaperForUpdate.setGuide(ExamUtil.deleteLangString(tExamPaper.getLangType(), tExamPaperForUpdate.getGuide())); // 处理content里面的,旧的content拼新的content TTextContent textContent = tTextContentMapper.selectTTextContentById(tExamPaperForUpdate.getFrameTextContentId()); List examPaperTitleItemUpdateList = JsonUtil.toJsonListObject(textContent.getContent(), ExamPaperTitleItem.class); int questionNum = 0; for (ExamPaperTitleItem examPaperTitleItem : examPaperTitleItemUpdateList) { // 为问题的每一项添加多语言 examPaperTitleItem.setName(ExamUtil.deleteLangString(tExamPaper.getLangType(), examPaperTitleItem.getName())); examPaperTitleItem.setGuide(ExamUtil.deleteLangString(tExamPaper.getLangType(), examPaperTitleItem.getGuide())); examPaperTitleItem.setDescription(ExamUtil.deleteLangString(tExamPaper.getLangType(), examPaperTitleItem.getDescription())); } textContent.setContent(JsonUtil.toJsonStr(examPaperTitleItemUpdateList)); textContent.setUpdateTime(DateUtils.getNowDate()); // 删除分段的多语言 deleteLangParts(tExamPaper, textContent); tTextContentMapper.updateTTextContent(textContent); tExamPaperForUpdate.setUpdateTime(DateUtils.getNowDate()); return tExamPaperMapper.updateTExamPaper(tExamPaperForUpdate); } private void deleteLangParts(TExamPaper tExamPaper, TTextContent textContent) { try { List examPaperTitleItemForPartList = JsonUtil.parseArray(textContent.getContent(), ExamPaperTitleItem.class); List parts = examPaperTitleItemForPartList.get(0).getParts(); if (ExamUtil.isListNotEmpty(parts)) { for (QuestionPart questionPart : parts) { questionPart.getSignals().stream().forEach(signalObject -> { signalObject.setSignalDescription(ExamUtil.deleteLangString(tExamPaper.getLangType(), signalObject.getSignalDescription())); }); } textContent.setContent(JsonUtil.toJSONString(examPaperTitleItemForPartList)); } } catch (Exception e) { } } /** * 删除产品包列表对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteTExamPaperByIds(String ids) { // 删除索引的表 tExamPaperQuestionMapper.deleteTExamPaperQuestionByIds(Convert.toStrArray(ids)); // 删除content表,省空间 return tExamPaperMapper.updateByDelete(Convert.toStrArray(ids)); } /** * 删除产品包列表信息 * * @param id 产品包列表ID * @return 结果 */ public int deleteTExamPaperById(Long id) { return tExamPaperMapper.deleteTExamPaperById(id); } @Override public List selectProdByDeleteList(List deletes) { Map map = new HashMap<>(); map.put("deleteds", deletes); return tExamPaperMapper.selectProdByDeleteList(map); } /** * 所有可选产品包 * * @return 所有可选产品包 */ public List selectProdTree(String testType) { List ztrees = new ArrayList<>(); List dictList = getUserPapers(); for (TExamPaper dict : dictList) { TExamPaper tExamPaper = tExamPaperMapper.selectTExamPaperById(dict.getId()); if (Objects.isNull(tExamPaper)) { continue; } Long levelId = tExamPaper.getLevelId(); TExamLevel tExamLevel = tExamLevelMapper.selectTExamLevelById(levelId); if (Objects.isNull(tExamLevel)) { continue; } String questionTemplateId = tExamLevel.getQuestionTemplateId(); if (!Objects.equals(testType, questionTemplateId)) { if (Objects.equals("questionnaire",testType) && Objects.equals("job",questionTemplateId)) { } else { continue; } } Ztree ztree = new Ztree(); ztree.setId(dict.getId()); ztree.setName(dict.getName()); ztree.setTitle(String.valueOf(dict.getId())); ztrees.add(ztree); } return ztrees; } public List getUserPapers() { User sysUser = ShiroUtils.getSysUser(); List dictList; if (Objects.equals(UserTypeEnum.SYS_USER.getUserType(), sysUser.getUserType())) { TExamPaper tExamPaper = new TExamPaper(); dictList = tExamPaperService.selectTExamPaperList(tExamPaper); }//其他用户展示sys_user_paper分配的产品包 else { SysUserPaper sysUserPaper = new SysUserPaper(); sysUserPaper.setUserId(sysUser.getUserId()); List sysUserPapers = userPaperService.selectSysUserPaperList(sysUserPaper); dictList = sysUserPapers.stream().map(p -> { TExamPaper paper = new TExamPaper(); paper.setName(p.getProdName()); paper.setId(p.getProdId()); return paper; }).collect(Collectors.toList()); } //取真实名称 dictList.stream().forEach(p -> { p.setName(ExamUtil.getStringByLang(p.getLangType(), p.getName())); }); return dictList; } @Override public int updateDeleted(TExamPaper tExamPaper) { return tExamPaperMapper.updateTExamPaper(tExamPaper); } @Transactional @Override public List updateInsertQuestion(List questionList, String multilingual) { questionList.stream().forEach(question -> { // 更新旧的 question.setMultilingual(multilingual); tQuestionService.updateTQuestion(question); }); return questionList; } // 如果本题目已经有了该种语言,就不要展示,edit-*.html使用 @Override public List getType(Long id) { // 查询字典先 List dictDataList = dictDataService.selectDictDataByType("lang_type"); // 查看已经存在的题目 if (Objects.nonNull(id)) { TExamPaper tExamPaper = selectTExamPaperById(id); Map titleMap = JsonUtil.toJsonObject(tExamPaper.getName(), HashMap.class); if (Objects.isNull(titleMap)) { return dictDataList; } List dictDataListResult = new ArrayList<>(); for (DictData dictData : dictDataList) { if (StringUtils.isEmpty(titleMap.get(dictData.getDictValue()))) { dictDataListResult.add(dictData); } } return dictDataListResult; } else { return dictDataList; } } @Override public void recallThaiInterface(TExamReport tExamReportResult, String reportType) { TExamReport tExamReportUpdate = new TExamReport(); tExamReportUpdate.setId(tExamReportResult.getId()); tExamReportUpdate.setTokenId(tExamReportResult.getTokenId()); // 去掉原来的那些内容 tExamReportResult.setInterfaceContent(""); // Maq和SAQ重新掉 recallMaqAndSaqThaiInterface(tExamReportResult, reportType, tExamReportUpdate); recallCaqThaiInterface(tExamReportResult, reportType, tExamReportUpdate); } private void recallCaqThaiInterface(TExamReport tExamReportResult, String reportType, TExamReport tExamReportUpdate) { if (Objects.equals("CAQ", reportType)) { ExamPaperSubmitVM examPaperSubmitVM = new ExamPaperSubmitVM(); // 是否是重新调用泰国团队 examPaperSubmitVM.setRecallThaiInterface(true); // 走手动提交的方式赋值 examPaperSubmitVM.setSubmitClick(true); if (!recallThaiInterfaceForMAQAndCAQ(tExamReportResult, tExamReportUpdate, examPaperSubmitVM, 2)) { return; } } } private void recallMaqAndSaqThaiInterface(TExamReport tExamReportResult, String reportType, TExamReport tExamReportUpdate) { List questionReports = JsonUtil.parseArray(tExamReportResult.getQuestionReport(), QuestionReport.class); if (Objects.equals("MAQ", reportType) || Objects.equals("SAQ", reportType)) { Set partOrderSet = questionReports.stream().map(QuestionReport::getPartOrder).collect(Collectors.toSet()); partOrderSet.stream().sorted(Comparator.naturalOrder()); for (Integer partOrder : partOrderSet) { ExamPaperSubmitVM examPaperSubmitVM = new ExamPaperSubmitVM(); examPaperSubmitVM.setPartOrder(partOrder); // 是否是重新调用泰国团队 examPaperSubmitVM.setRecallThaiInterface(true); if (!recallThaiInterfaceForMAQAndCAQ(tExamReportResult, tExamReportUpdate, examPaperSubmitVM, examPaperSubmitVM.getPartOrder())) { return; } } } } private boolean recallThaiInterfaceForMAQAndCAQ(TExamReport tExamReportResult, TExamReport tExamReportUpdate, ExamPaperSubmitVM examPaperSubmitVM, Integer partOrder2) { ReportAPIResult reportAPIResult = getTaiInterface(examPaperSubmitVM, tExamReportResult, tExamReportUpdate); if (Objects.equals(reportAPIResult.getCode(), "fail")) { tExamReportUpdate.setRemark(tExamReportResult.getRemark() + ";" + reportAPIResult.getMessage()); examReportService.updateTExamReportByTokenId(tExamReportUpdate); return false; } // 更新泰国接口数据,保存泰国接口数据 updateTaiInterfaceContent(tExamReportUpdate, tExamReportResult, reportAPIResult, partOrder2); tExamReportResult.setInterfaceContent(tExamReportUpdate.getInterfaceContent()); return true; } @Override public List getExamPaperTitleContent(TExamPaper tExamPaper) { //表示还没有添加题目 if (Objects.isNull(tExamPaper.getFrameTextContentId())) { return null; } TTextContent tTextContent = tTextContentService.selectTTextContentById(tExamPaper.getFrameTextContentId()); //大标题,第一段查t_exam_paper的t_text_content List examPaperTitleItemObjectList = JSONArray.parseArray(tTextContent.getContent(), ExamPaperTitleItemObject.class); // 工作分析问卷去去question的题目作为展示 examUtilService.setTitleName(tExamPaper, examPaperTitleItemObjectList); //标题、题干=>选项 名字:name,题目:questionItems,大标题 List examPaperTitleItemList = new ArrayList<>(); // 设置question的值 setPaperQuestion(tExamPaper, examPaperTitleItemObjectList, examPaperTitleItemList); // 分片的返回 examPaperTitleItemList.get(0).setParts(examPaperTitleItemObjectList.get(0).getParts()); // 处理分片多语言 getPartsmultiLanguage(tExamPaper, examPaperTitleItemList); return examPaperTitleItemList; } private void getPartsmultiLanguage(TExamPaper tExamPaper, List examPaperTitleItemList) { List parts = examPaperTitleItemList.get(0).getParts(); if (CollUtil.isEmpty(parts)) { return; } for (QuestionPart questionPart : parts) { List signals = questionPart.getSignals(); signals.stream().forEach(signalObject -> { signalObject.setSignalDescription(ExamUtil.getLangString(tExamPaper.getLangType(), signalObject.getSignalDescription())); }); } } private void setPaperQuestion(TExamPaper tExamPaper, List examPaperTitleItemObjectList, List examPaperTitleItemList) { //ExamPaperTitleItem->QuestionItem->QuestionEditItem->(A,B,C) for (ExamPaperTitleItemObject examPaperTitleItemObject : examPaperTitleItemObjectList) { //标题、题干=>选项(单个) ExamPaperTitleItem examPaperTitleItem = new ExamPaperTitleItem(); examPaperTitleItem.setName(ExamUtil.getLangString(tExamPaper.getLangType(), examPaperTitleItemObject.getName())); //大标题下面有多少个题,查t_question List examPaperQuestionList = examPaperTitleItemObject.getQuestionItems(); //map保存题目的顺序 Map questionOrder = new HashMap<>(); List ids = new ArrayList(); for (ExamPaperQuestionItemObject examPaperQuestionItemObject : examPaperQuestionList) { ids.add(examPaperQuestionItemObject.getId().toString()); questionOrder.put(examPaperQuestionItemObject.getId(), examPaperQuestionItemObject); } if (ExamUtil.isListEmpty(ids)) { continue; } //begin 查询出每一个标题的题目{"analyze":"这个是解析","correct":"C","questionItemObjects":[{"content":"

B选项

","prefix":"B","score":500},{"content":"A选项","prefix":"A","score":500},{"content":"C选项","prefix":"C","score":500},{"content":"D选项的答案","prefix":"D","score":500}],"titleContent":"请问海洋最多的是什么"} List tTextContents = tTextContentService.selectTextContentAndQuestion(ids.toArray(new String[ids.size()])); List questionItemList = tTextContents.stream().map(i -> { QuestionItem questionItem = new QuestionItem(); //begin 获取题干内容 QuestionObject questionObject = JSONObject.parseObject(i.getContent(), QuestionObject.class); // 多语言 questionItem.setTitle(ExamUtil.getLangString(tExamPaper.getLangType(), questionObject.getTitleContent())); questionItem.setId(i.getId().intValue()); questionItem.setQuestionId(i.getQuestionId().intValue()); questionItem.setItemOrder(questionOrder.get(i.getQuestionId().intValue()).getItemOrder()); questionItem.setPermanentId(i.getPermanentId()); questionItem.setPartOrder(questionOrder.get(i.getQuestionId().intValue()).getPartOrder()); //end 获取题干内容 //begin 获取里面的选项,如果选项为空,就给一个默认值,否则智力题会报错 if (Objects.nonNull(questionObject.getQuestionItemObjects())) { List items = questionObject.getQuestionItemObjects().stream().map(val -> { QuestionEditItem questionEditItem = modelMapper.map(val, QuestionEditItem.class); questionEditItem.setContent(ExamUtil.getLangString(tExamPaper.getLangType(), questionEditItem.getContent())); return questionEditItem; }).collect(Collectors.toList()); questionItem.setItems(items); } else { List items = new ArrayList<>(); QuestionEditItem questionEditItem = new QuestionEditItem(); questionEditItem.setPrefix("1"); questionEditItem.setContent("1"); questionEditItem.setScore(0); items.add(questionEditItem); questionItem.setItems(items); } //end 获取里面的选项 return questionItem; }).collect(Collectors.toList()); //end 查询出每一个标题的题目 //大标题里面的题目 examPaperTitleItem.setQuestionItems(questionItemList); examPaperTitleItem.setDescription(ExamUtil.getLangString(tExamPaper.getLangType(), examPaperTitleItemObject.getDescription())); examPaperTitleItem.setGuide(ExamUtil.getLangString(tExamPaper.getLangType(), examPaperTitleItemObject.getGuide())); examPaperTitleItem.setPermanentId(examPaperTitleItemObject.getPermanentId()); examPaperTitleItem.setQuestionId(examPaperTitleItemObject.getQuestionId()); examPaperTitleItemList.add(examPaperTitleItem); } } public RestResponse getSignalObjectRestResponse(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReport, List tExamReportList, String langType) { // 查询结果 TExamReport tExamReportResult = tExamReportList.get(0); // 调用泰国接口 ReportAPIResult reportAPIResult = getTaiInterface(examPaperSubmitVM, tExamReportResult, tExamReport); // 更新泰国接口数据,保存泰国接口数据 updateTaiInterfaceContent(tExamReport, tExamReportResult, reportAPIResult, examPaperSubmitVM.getPartOrder()); // 发送邮件个用户和HR sendHRAndMemberEmail(tExamReport, true, true); // 返回提示给前台 return getSignalObject(examPaperSubmitVM.getPartOrder(), tExamReportResult, reportAPIResult, langType); } private RestResponse getSignalObject(int partOrder, TExamReport tExamReportResult, ReportAPIResult reportAPIResult, String langType) { TExamPaper tExamPaper = selectTExamPaperById(tExamReportResult.getProductId()); List examPaperTitleItemList = JsonUtil.parseArray(tExamPaper.getContent(), ExamPaperTitleItem.class); List parts = examPaperTitleItemList.get(0).getParts(); QuestionPart questionPart = parts.get(partOrder - 1); List signals = questionPart.getSignals(); for (SignalObject signalObject : signals) { if (Objects.equals(reportAPIResult.getSignal(), signalObject.getSignal())) { signalObject.setSignalDescription(ExamUtil.getLangString(langType, signalObject.getSignalDescription())); String name = examReportService.getDemographicName(tExamReportResult); signalObject.setSignalDescription(signalObject.getSignalDescription().replaceAll("%%fullName%%", StringUtils.isNotEmpty(name) ? name : tExamReportResult.getMemberName())); signalObject.setCode(reportAPIResult.getCode()); signalObject.setMessage(reportAPIResult.getMessage()); return RestResponse.ok(signalObject); } } SignalObject signalObject = new SignalObject(); signalObject.setCode(reportAPIResult.getCode()); signalObject.setMessage(reportAPIResult.getMessage()); return RestResponse.ok(signalObject); } // 发送附件给HR public void sendHRAndMemberEmail(TExamReport tExamReport, boolean justHr, boolean justMember) { // 附件的位置,具体邮件附件的位置 List fileNameResult = new ArrayList<>(); // 要删除的文件 List deleteStrList = new ArrayList<>(); TExamReport tExamReportResult = examReportService.getReportFromTemplate(tExamReport, fileNameResult, deleteStrList); if (tExamReportResult == null) { return; } // 调用发送程序发给用户 String title = tExamReportResult.getMemberName() + MessageUtils.message("jsp.exam.quesiton.reportTilte"); String content = tExamReportResult.getMailContent(); StringBuilder remark = new StringBuilder(); remark.append("失败邮箱:"); if (justMember) { // 用户发邮件 sendMemberEmail(tExamReport, fileNameResult, tExamReportResult, title, content, remark); } if (justHr) { // 发送给Hr,但取testEmail sendHrEmail(tExamReport, fileNameResult, tExamReportResult, title, content, remark); } // 更新发送状态,历史邮件地址 tExamReport.setReportAddress(JsonUtil.toJSONString(fileNameResult)); // 放一个当前邮件的地址 tExamReport.setReportAddressNew(JsonUtil.toJSONString(fileNameResult)); examReportService.updateTExamReportByTokenId(tExamReport); // 节省空间删除文件 // deleteStrList.addAll(fileNameResult); WordUtil wordUtil = new WordUtil(); wordUtil.deleteFileByStr(deleteStrList); } public void sendHrEmail(TExamReport tExamReport, List fileNameResult, TExamReport tExamReportResult, String title, String content, StringBuilder remark) { // 如果创建测试包的时候没有填邮箱,那么就用集团的取HR邮箱邮箱 List hrEmailList = null; try { hrEmailList = Arrays.asList(tExamReportResult.getTestEmail().split(",")); } catch (Exception ex) { } if (ExamUtil.isListEmpty(hrEmailList)) { try { hrEmailList = Arrays.asList(tExamReportResult.getHrEmail().split(",")); } catch (Exception ex) { } } if (Objects.isNull(hrEmailList)) { throw new RuntimeException("Hr Email Is Not Configured"); } //替换公司名称 String userName = ExamUtil.getLangString(tExamReportResult.getLangType(), tExamReportResult.getUserName()); //替换用户名称 String fullName = ExamUtil.getLangString(tExamReportResult.getLangType(), tExamReportResult.getMemberName()); String productName = ExamUtil.getLangString(tExamReportResult.getLangType(), tExamReportResult.getProductName()); if (StringUtils.isEmpty(content)) { content = loadReportHrDefaultTemplate(fullName, userName, productName); } content = content.replace("{Company}", StringUtils.isNotEmpty(userName) ? userName : ""); content = content.replace("{fullName}", StringUtils.isNotEmpty(fullName) ? fullName : ""); content = content.replace("{prodName}", StringUtils.isNotEmpty(productName) ? productName : ""); for (String email : hrEmailList) { String hrEmailStatus = "1"; RushMailResult rushMailResult = emailMessage.sendEmailwithAttachment(email, title, content, fileNameResult.stream().toArray(String[]::new)); if (rushMailResult.isResult()) { tExamReport.setSendHrStatus(SenderCode.success.getCode()); } else { // 发送成功,发送失败处理 remark.append(tExamReportResult.getMemberEmail() + ","); tExamReport.setSendHrStatus(SenderCode.fail.getCode()); hrEmailStatus = "2"; } tExamReport.setHrReportEmail(email); tExamReport.setHrTitle(title); tExamReport.setHrSendTime(new Date()); tExamReport.setHrUpdateTime(new Date()); try { //更新用户表发送HR邮件状态 EntTestMember entTestMember = entTestMemberMapper.selectEntTestMemberById(Long.valueOf(tExamReportResult.getMemberId())); entTestMember.setHrEmailStatus(hrEmailStatus); entTestMember.setHrEmailTime(new Date()); entTestMemberMapper.updateEntTestMember(entTestMember); } catch (Exception ex) { log.error("update HrEmailStatus error:{}", ex.getMessage(), ex); } } tExamReport.setRemark(remark.toString()); } private String loadReportHrDefaultTemplate(String fullName, String userName, String productName) { StringBuilder builder = new StringBuilder(); builder.append("亲爱的{Company}人力资源部,").append("
"); builder.append("Dear HR Staff at {Company},").append("

"); builder.append("附件是{fullName}最近完成的{prodName}测评报告。").append("
"); builder.append("Attached please find the assessment report on ({prodName}) of ({fullName}).").append("

"); builder.append("如有疑问,请与客服联系,邮箱是:support@tai-online.com。").append("
"); builder.append("Should you have questions, please contact our customer service at support@tai-online.com. ").append("


"); builder.append("谢谢!").append("
"); builder.append("All the best,").append("


"); builder.append("TAI公司客户服务部").append("
"); builder.append("Customer Service Dept., TAI, LLC").append("


"); return builder.toString(); } private String loadReportMemberDefaultTemplate(String fullName, String userName, String productName) { StringBuilder builder = new StringBuilder(); builder.append("Subject Line: Your assessment report is attached (您的测评报告附上了)"); builder.append("

"); builder.append("Dear " + fullName + ","); builder.append("

"); builder.append(userName + " has recently asked you to complete an assessment (" + productName + "). Attached please find your assessment report. "); builder.append("

"); builder.append("Should you have questions, please contact our customer service at support@tai-online.com. "); builder.append("

"); builder.append("All the best,"); builder.append("

"); builder.append(userName); builder.append("


"); builder.append("亲爱的" + fullName + ","); builder.append("

"); builder.append("最近" + userName + " 邀请您完成了一份测试 (" + productName + ")。现将您的测试报告发给您。"); builder.append("

"); builder.append("如有疑问,请与客服联系,邮箱是:support@tai-online.com。"); builder.append("

"); builder.append("谢谢!"); builder.append("

"); builder.append(userName); return builder.toString(); } private void sendMemberEmail(TExamReport tExamReport, List fileNameResult, TExamReport tExamReportResult, String title, String content, StringBuilder remark) { if (StringUtils.isEmpty(content)) { //替换公司名称 String userName = tExamReportResult.getUserName(); //替换用户名称 String fullName = tExamReportResult.getMemberName(); String productName = ExamUtil.getLangString(tExamReportResult.getLangType(), tExamReportResult.getProductName()); content = loadReportMemberDefaultTemplate(fullName, userName, productName); } if (Objects.nonNull(tExamReportResult.getAutoSendReport()) && tExamReportResult.getAutoSendReport() == 1) { boolean result = emailMessage.sendEmailwithAttachment(tExamReportResult.getMemberEmail(), title, content, fileNameResult.stream().toArray(String[]::new)).isResult(); if (result) { tExamReport.setSendTesterStatus(SenderCode.success.getCode()); } else { // 发送成功,发送失败处理 remark.append(tExamReportResult.getMemberEmail() + ","); tExamReport.setSendTesterStatus(SenderCode.fail.getCode()); } } else { tExamReport.setSendTesterStatus(SenderCode.noSend.getCode()); } tExamReport.setRemark(remark.toString()); } private void updateTaiInterfaceContent(TExamReport tExamReportUpdate, TExamReport tExamReportResult, ReportAPIResult reportAPIResult, int partOrder) { List reportAPIResultList = JsonUtil.parseArray(tExamReportResult.getInterfaceContent(), ReportAPIResult.class); if (CollUtil.isNotEmpty(reportAPIResultList)) { ReportAPIResult reportAPIResultLast = reportAPIResultList.get(reportAPIResultList.size() - 1); if (Objects.equals(reportAPIResultLast.getCode(), "fail")) { reportAPIResultList.remove(reportAPIResultList.size() - 1); } } if (ExamUtil.isListEmpty(reportAPIResultList)) { reportAPIResultList = new ArrayList<>(); } else { int size = reportAPIResultList.size(); int deletNum = size - (partOrder - 1); // 如果前台可以跳到上一题,则要删除原来入库的 for (int i = size - 1; i >= 0 && deletNum > 0; i--, deletNum--) { reportAPIResultList.remove(i); } logger.info("reportAPIResultList:的个数" + reportAPIResultList.size()); } reportAPIResultList.add(reportAPIResult); tExamReportUpdate.setInterfaceContent(JsonUtil.toJSONString(reportAPIResultList)); examReportService.updateTExamReportByTokenId(tExamReportUpdate); } private ReportAPIResult getTaiInterface(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReportResult, TExamReport tExamReportUpdate) { Map reportTypeEnumMap = new HashMap<>(); reportTypeEnumMap.put(1, firstPath); reportTypeEnumMap.put(2, secondPath); List tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamReportResult.getReportTemplateId()); CalculationTypeEnum calculationTypeEnum = MAQ; for (TReportTemplate tReportTemplate : tReportTemplateList) { if ("SAQ".equals(tReportTemplate.getTemplateType()) || Objects.equals("SAQ", tReportTemplate.getReportType())) { calculationTypeEnum = SAQ; } if ("RuiLin".equals(tReportTemplate.getReportType())) { calculationTypeEnum = RUILIN; } if ("CAQ".equals(tReportTemplate.getReportType())) { calculationTypeEnum = CAQ; } } HolderInfo info = new HolderInfo(); info.setAccessCode(tExamReportResult.getTokenId()); info.setFullName(tExamReportResult.getMemberName()); info.setCalculationType(calculationTypeEnum); if (calculationTypeEnum == CAQ) { return getReportAPICAQResult(examPaperSubmitVM, tExamReportResult, tExamReportUpdate, info); } else if (calculationTypeEnum == SAQ) { return getReportAPISAQResult(examPaperSubmitVM, tExamReportResult, tExamReportUpdate, reportTypeEnumMap, info); } else { return getReportAPIMAQResult(examPaperSubmitVM, tExamReportResult, tExamReportUpdate, reportTypeEnumMap, info); } } private ReportAPIResult getReportAPICAQResult(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReportResult, TExamReport tExamReport, HolderInfo info) { Map data = new HashMap(); // 造数据 // createMAQAndCAQData(examPaperSubmitVM, CAQ, data); getWaitTaiData(examPaperSubmitVM, tExamReportResult, data); CaqRequest request = new CaqRequest(); request.setInfo(info); request.setData(data); ReportAPIResult reportAPIResult = calculationServices.stageCalculation(request); reportAPIResult.setAnswerData(data); if (Objects.equals(reportAPIResult.getCode(), "fail") && !examPaperSubmitVM.isRecallThaiInterface()) { updateChoice(examPaperSubmitVM, tExamReport, tExamReportResult); } return reportAPIResult; } public SignalObject callTaiData(String tokenId, String langType, ExamPaperSubmitVM examPaperSubmitVM) { // 查找当前的答题记录 TExamReport tExamReport = new TExamReport(); tExamReport.setTokenId(tokenId); List tExamReportList = examReportService.selectTExamReportList(tExamReport); TExamReport tExamReportOldResult = tExamReportList.get(0); if (ExamUtil.isListEmpty(tExamReportList)) { return getEmptySignalObjectResult(); } List questionReportList = JsonUtil.toJsonListObject(tExamReportOldResult.getQuestionReport(), QuestionReport.class); if (ExamUtil.isListEmpty(questionReportList)) { return getEmptySignalObjectResult(); } try { // 调用泰国团队之后更新报表记录,发送给HR邮件 RestResponse signalObject = getSignalObjectRestResponse(examPaperSubmitVM, tExamReport, tExamReportList, langType); if (Objects.nonNull(signalObject)) { return signalObject.getResponse(); } } catch (Exception e) { updateChoice(examPaperSubmitVM, tExamReport, tExamReportOldResult); throw e; } return getEmptySignalObjectResult(); } private SignalObject getEmptySignalObjectResult() { SignalObject signalObject = new SignalObject(); signalObject.setSignalDescription(""); return signalObject; } private void updateChoice(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReport, TExamReport tExamReportOldResult) { tExamReport.setFinish(0); if (StringUtils.isEmpty(tExamReport.getTokenId()) || StringUtils.isEmpty(examPaperSubmitVM.getItemOrder())) { examReportService.updateTExamReportByTokenId(tExamReport); return; } String choice = tExamReportOldResult.getChoice(); LinkedHashMap linkedHashMap = JsonUtil.parseObject(choice, LinkedHashMap.class); Iterator iterator = linkedHashMap.keySet().iterator(); String lastKeyElement = null; while (iterator.hasNext()) { lastKeyElement = iterator.next(); } if (StringUtils.isEmpty(lastKeyElement)) { return; } linkedHashMap.remove(lastKeyElement); tExamReport.setChoice(JsonUtil.toJSONString(linkedHashMap)); tExamReport.setRemark(tExamReport.getRemark() + ",itemOrder:" + examPaperSubmitVM.getItemOrder()); examReportService.updateTExamReportByTokenId(tExamReport); } // 造数据函数入口 private void createMAQAndCAQData(ExamPaperSubmitVM examPaperSubmitVM, CalculationTypeEnum calculationTypeEnum, Map data) { if (calculationTypeEnum == CAQ) { // 造CAQ的数据 simulationCAQTaiData(examPaperSubmitVM.getPartOrder(), data); } else { // 造数据,MAQ,不需要,上线的时候要注释掉 simulationTaiData(examPaperSubmitVM.getPartOrder(), data); } } // 模拟泰国团队 private void simulationTaiData(int partOrder, Map data) { String topics = "MAQ0001,MAQ0003,MAQ0006,MAQ0009,MAQ0013,MAQ0020,MAQ0041,MAQ0048,MAQ0088,MAQ0094,MAQ0098,MAQ0112,MAQ0117,MAQ0133,MAQ0145,MAQ0163,MAQ0172,MAQ0174,MAQ0175,MAQ0183,MAQ0194,MAQ0203,MAQ0209,MAQ0212,MAQ0224,MAQ0232,MAQ0233,MAQ0235,MAQ0236,MAQ0241,MAQ0244,MAQ0249,MAQ0250,MAQ0251,MAQ0004,MAQ0005,MAQ0007,MAQ0010,MAQ0011,MAQ0014,MAQ0015,MAQ0019,MAQ0021,MAQ0024,MAQ0025,MAQ0026,MAQ0027,MAQ0028,MAQ0029,MAQ0030,MAQ0034,MAQ0035,MAQ0036,MAQ0038,MAQ0039,MAQ0040,MAQ0042,MAQ0044,MAQ0045,MAQ0046,MAQ0047,MAQ0049,MAQ0051,MAQ0053,MAQ0055,MAQ0058,MAQ0059,MAQ0060,MAQ0061,MAQ0062,MAQ0064,MAQ0065,MAQ0067,MAQ0069,MAQ0070,MAQ0071,MAQ0072,MAQ0073,MAQ0074,MAQ0076,MAQ0077,MAQ0078,MAQ0079,MAQ0080,MAQ0081,MAQ0082,MAQ0084,MAQ0085,MAQ0086,MAQ0087,MAQ0089,MAQ0090,MAQ0091,MAQ0092,MAQ0095,MAQ0097,MAQ0099,MAQ0100,MAQ0101,MAQ0103,MAQ0104,MAQ0106,MAQ0107,MAQ0110,MAQ0111,MAQ0113,MAQ0115,MAQ0118,MAQ0119,MAQ0120,MAQ0124,MAQ0126,MAQ0127,MAQ0129,MAQ0130,MAQ0131,MAQ0132,MAQ0134,MAQ0135,MAQ0136,MAQ0138,MAQ0140,MAQ0141,MAQ0142,MAQ0143,MAQ0144,MAQ0146,MAQ0147,MAQ0149,MAQ0150,MAQ0151,MAQ0152,MAQ0156,MAQ0157,MAQ0158,MAQ0159,MAQ0160,MAQ0161,MAQ0162,MAQ0164,MAQ0165,MAQ0166,MAQ0167,MAQ0168,MAQ0169,MAQ0170,MAQ0171,MAQ0173,MAQ0176,MAQ0178,MAQ0179,MAQ0180,MAQ0181,MAQ0182,MAQ0184,MAQ0185,MAQ0187,MAQ0190,MAQ0191,MAQ0192,MAQ0193,MAQ0195,MAQ0197,MAQ0199,MAQ0200,MAQ0201,MAQ0202,MAQ0204,MAQ0205,MAQ0206,MAQ0207,MAQ0208,MAQ0210,MAQ0211,MAQ0213,MAQ0214,MAQ0216,MAQ0218,MAQ0219,MAQ0220,MAQ0221,MAQ0223,MAQ0225,MAQ0226,MAQ0227,MAQ0228,MAQ0229,MAQ0230,MAQ0231,MAQ0234,MAQ0237,MAQ0240,MAQ0242,MAQ0243,MAQ0245,MAQ0247,MAQ0248,MAQ0253,MAQ0254,MAQ0255"; if (partOrder == 1) { topics = "MAQ0001,MAQ0002,MAQ0003,MAQ0006,MAQ0009,MAQ0013,MAQ0020,MAQ0041,MAQ0048,MAQ0088,MAQ0094,MAQ0098,MAQ0112,MAQ0117,MAQ0133,MAQ0145,MAQ0163,MAQ0172,MAQ0174,MAQ0175,MAQ0183,MAQ0194,MAQ0203,MAQ0209,MAQ0212,MAQ0224,MAQ0232,MAQ0233,MAQ0235,MAQ0236,MAQ0241,MAQ0244,MAQ0249,MAQ0250,MAQ0251,MAQ0252"; } String[] split = topics.split(","); Arrays.asList(split).stream().forEach(item -> { data.put(item, "5"); }); } // 模拟CAQ的数据 private void simulationCAQTaiData(int partOrder, Map data) { String topics = "CAQ1010,CAQ1020,CAQ1030,CAQ1040,CAQ1050,CAQ1060,CAQ1070,CAQ1080,CAQ1090,CAQ1100,CAQ1110,CAQ1120,CAQ1130,CAQ1140,CAQ1150,CAQ2010,CAQ2020,CAQ2030,CAQ2040,CAQ2050,CAQ2060,CAQ2070,CAQ2080,CAQ2090,CAQ2100,CAQ2110,CAQ2120,CAQ2130,CAQ2140,CAQ2150,CAQ2160,CAQ2170,CAQ2180,CAQ2190,CAQ2200"; if (partOrder == 1) { topics = "CAQ1010,CAQ1020,CAQ1030,CAQ1040,CAQ1050,CAQ1060,CAQ1070,CAQ1080,CAQ1090,CAQ1100,CAQ1110,CAQ1120,CAQ1130,CAQ1140,CAQ1150,CAQ2010,CAQ2020,CAQ2030,CAQ2040,CAQ2050,CAQ2060,CAQ2070,CAQ2080,CAQ2090,CAQ2100,CAQ2110,CAQ2120,CAQ2130,CAQ2140,CAQ2150,CAQ2160,CAQ2170,CAQ2180,CAQ2190,CAQ2200"; } String[] split = topics.split(","); Arrays.asList(split).stream().forEach(item -> { data.put(item, "5"); }); } private void setNormalSubmit(ExamPaperSubmitVM examPaperSubmitVM, Map data, List questionReportList) { for (QuestionReport questionReport : questionReportList) { // PermanentId 等于0是智力题的大题,问答题,顺便判断为空 if (questionReport.getPartOrder() > examPaperSubmitVM.getPartOrder() || Objects.isNull(questionReport.getPermanentId()) || Objects.equals(questionReport.getPermanentId(), "0")) { continue; } data.put(questionReport.getPermanentId(), questionReport.getAnswer()); } } private void setManSubmit(Map data, List questionReportList) { for (QuestionReport questionReport : questionReportList) { // PermanentId 等于0是智力题的大题,问答题,顺便判断为空 if (StringUtils.isNotEmpty(questionReport.getPermanentId()) && !Objects.equals(questionReport.getPermanentId(), "0")) { data.put(questionReport.getPermanentId(), questionReport.getAnswer()); } } } private ReportAPIResult getReportAPISAQResult(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReportResult, TExamReport tExamReport, Map reportTypeEnumMap, HolderInfo info) { return getReportAPIMAQResult(examPaperSubmitVM, tExamReportResult, tExamReport, reportTypeEnumMap, info); } private ReportAPIResult getReportAPIMAQResult(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReportResult, TExamReport tExamReport, Map reportTypeEnumMap, HolderInfo info) { Map data = new HashMap(); // 造数据 // createMAQAndCAQData(examPaperSubmitVM, MAQ, data); getWaitTaiData(examPaperSubmitVM, tExamReportResult, data); MaqRequest request = new MaqRequest(); request.setInfo(info); request.setType(reportTypeEnumMap.get(examPaperSubmitVM.getPartOrder())); request.setData(data); ReportAPIResult reportAPIResult = calculationServices.stageCalculation(request); reportAPIResult.setAnswerData(data); // 重新调用泰国团队的接口的话,不需要更新题目了 if (Objects.equals(reportAPIResult.getCode(), "fail") && !examPaperSubmitVM.isRecallThaiInterface()) { updateChoice(examPaperSubmitVM, tExamReport, tExamReportResult); } return reportAPIResult; } private void getWaitTaiData(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReportResult, Map data) { List questionReportList = JsonUtil.parseArray(tExamReportResult.getQuestionReport(), QuestionReport.class); if (examPaperSubmitVM.isSubmitClick()) { // 自己提交的那种,如智力题 setManSubmit(data, questionReportList); } else { setNormalSubmit(examPaperSubmitVM, data, questionReportList); } } }