From 3a8e1524dcf0eeb610d38123d5f0a3ef838379cd Mon Sep 17 00:00:00 2001
From: linzhijie <19970921lzj>
Date: 星期一, 12 四月 2021 15:44:53 +0800
Subject: [PATCH] Merge branch '20210406-maqv2' into 20210412-youhua

---
 src/main/java/com/ots/project/exam/service/impl/TExamPaperServiceImpl.java |  510 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 387 insertions(+), 123 deletions(-)

diff --git a/src/main/java/com/ots/project/exam/service/impl/TExamPaperServiceImpl.java b/src/main/java/com/ots/project/exam/service/impl/TExamPaperServiceImpl.java
index f3a50b1..db0c951 100644
--- a/src/main/java/com/ots/project/exam/service/impl/TExamPaperServiceImpl.java
+++ b/src/main/java/com/ots/project/exam/service/impl/TExamPaperServiceImpl.java
@@ -2,6 +2,8 @@
 import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.ots.common.enums.LangTypeEnum;
+import com.ots.common.enums.ReportTitle;
 import com.ots.common.enums.SenderCode;
 import com.ots.common.enums.UserTypeEnum;
 import com.ots.common.utils.DateUtils;
@@ -31,6 +33,7 @@
 import com.ots.project.tool.report.reportCalculation.request.*;
 import com.ots.project.tool.report.reportCalculation.response.ReportAPIResult;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.velocity.runtime.directive.Foreach;
 import org.modelmapper.ModelMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,56 +47,95 @@
 import static com.ots.project.tool.report.reportCalculation.request.ReportTypeEnum.firstPath;
 import static com.ots.project.tool.report.reportCalculation.request.ReportTypeEnum.secondPath;
 
+/**
+ * 浜у搧鍖呭垪琛⊿ervice涓氬姟灞傚鐞�
+ *
+ * @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 浜у搧鍖呭垪琛↖D
+     * @return 浜у搧鍖呭垪琛�
+     */
     @Override
     public TExamPaper selectTExamPaperById(Long id) {
         return tExamPaperMapper.selectTExamPaperById(id);
     }
-    
+
+    /**
+     * 鏌ヨ浜у搧鍖呭垪琛ㄥ垪琛�
+     *
+     * @param tExamPaper 浜у搧鍖呭垪琛�
+     * @return 浜у搧鍖呭垪琛�
+     */
     @Override
     public List<TExamPaper> selectTExamPaperList(TExamPaper tExamPaper) {
+
         List<TExamPaper> tExamPaperList = tExamPaperMapper.selectTExamPaperList(tExamPaper);
         List<TExamPaper> tExamPaperResultList = new ArrayList<>();
-        
+
+        // 閬嶅巻鍑哄悇绉嶈瑷�
         for (TExamPaper tExamPaperTemp : tExamPaperList) {
             Map<String, String> nameMap = JsonUtil.toJsonObject(tExamPaperTemp.getName(), HashMap.class);
             if (Objects.isNull(nameMap)) {
@@ -115,16 +157,24 @@
                 });
             }
         }
-        
+
+        // 杩欐牱鎵嶈兘缈婚〉
         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())) {
@@ -139,31 +189,40 @@
         } else {
             setVersion(tExamPaper);
         }
-        
+
+        // 鎺у埗璇█
         tExamPaper.setLangType(examUtilService.getLocalLangType(tExamPaper.getLangType()));
+
         tExamPaper.setCreateTime(DateUtils.getNowDate());
-        
+
+        //鎷艰t_text_content锛宼Question鍙傛暟鐨勫睘鎬т篃鏄細鍦ㄦ鏂规硶鍐呴儴淇敼
         TTextContent textContent = new TTextContent();
-        
+
+        // 璁剧疆浜у搧鍖呭悕绉板拰鎸囧璇�
         setInserPerperNameAndGuide(tExamPaper);
-        
+
+        // 璁剧疆浜у搧鍖呯殑content鐨勫唴瀹�,鍏_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銆乧ontent琛ㄩ噷闈㈢殑锛孧ultilingual涓嶄负绌鸿〃绀哄凡缁忓仛浜嗗璇█
         if (StringUtils.isNotEmpty(tExamPaper.getMultilingual())) {
             String content = tExamPaper.getQuestions();
             content = setPartsContent(tExamPaper, content);
@@ -179,6 +238,7 @@
             textContent.setContent(JsonUtil.toJSONString(examPaperTitleItemList));
         }
     }
+
     private String setPartsContent(TExamPaper tExamPaper, String content) {
         List<ExamPaperTitleItem> examPaperTitleItemList = JsonUtil.parseArray(content, ExamPaperTitleItem.class);
         List<QuestionPart> parts = examPaperTitleItemList.get(0).getParts();
@@ -186,7 +246,8 @@
         content = JsonUtil.toJSONString(examPaperTitleItemList);
         return content;
     }
-    
+
+    // 澶氳瑷�
     private void setPartLangsData(TExamPaper tExamPaper, List<QuestionPart> parts) {
         if (ExamUtil.isListNotEmpty(parts)) {
             for (QuestionPart questionPart : parts) {
@@ -197,6 +258,7 @@
             }
         }
     }
+
     private int setExamPaperQuestion(TExamPaper tExamPaper) {
         List<ExamPaperTitleItem> examPaperTitleItemList = JsonUtil.toJsonListObject(tExamPaper.getQuestions(), ExamPaperTitleItem.class);
         int size = examPaperTitleItemList.size();
@@ -211,20 +273,22 @@
                 tExamPaperQuestionMapper.insertTExamPaperQuestion(tExamPaperQuestion);
             });
         }
+
         return 1;
     }
+
     private void setInserPerperNameAndGuide(TExamPaper tExamPaper) {
-        
-        
+        // 澶氳瑷�
+        // 澶氳瑷�1銆� 棰樼洰杞寲涓哄璇█,鎵归噺瀵煎叆鐨勪笉杞寲
         Map<String, String> nameMap = new HashMap<>();
         Map<String, String> guideMap = new HashMap<>();
         if (StringUtils.isNotEmpty(tExamPaper.getMultilingual())) {
-            
+            // 鎵归噺瀵煎叆
             setInserPerperBatch(tExamPaper, nameMap, guideMap);
-            
+            // 鍚嶇О鍜屾寚瀵艰
             setProductNameAndGuide(tExamPaper, nameMap, guideMap);
-        } else { 
-            
+        } else { // 闈炴壒閲忓鍏�
+            // 濡傛灉鏄彃鍏ョ殑瑕嗙洊
             if (tExamPaper.isCreate() && Objects.nonNull(tExamPaper.getId())) {
                 TExamPaper tExamPaperLast = tExamPaperMapper.selectTExamPaperById(tExamPaper.getId());
                 String nameMapJson = ExamUtil.getStringMapJson(tExamPaper.getLangType(), tExamPaper.getName(), tExamPaperLast.getName());
@@ -238,15 +302,16 @@
                 nameMap.put(tExamPaper.getLangType(), tExamPaper.getName());
                 guideMap.put(tExamPaper.getLangType(), tExamPaper.getGuide());
             }
-            
+            // 鍚嶇О鍜屾寚瀵艰
             setProductNameAndGuide(tExamPaper, nameMap, guideMap);
         }
     }
-    
+
+    // 鎵归噺瀵煎叆鎻掑叆
     private void setInserPerperBatch(TExamPaper tExamPaper, Map<String, String> nameMap, Map<String, String> guideMap) {
         List<String> multilingualList = JsonUtil.toJsonListObject(tExamPaper.getMultilingual(), String.class);
         for (int i = 0; i < multilingualList.size(); i++) {
-            
+            // 濡傛灉閫夋嫨浜嗗璇█鑰屽鍏ョ殑涓嶆槸鏈湴鍥介檯鍖栫殑閭g璇█
             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());
@@ -259,12 +324,14 @@
             }
         }
     }
-    
+
+    // 璁剧疆浜у搧鍖呯殑鍚嶇О鍜屾寚瀵艰
     private void setProductNameAndGuide(TExamPaper tExamPaper, Map<String, String> nameMap, Map<String, String> guideMap) {
         tExamPaper.setName(JsonUtil.toJsonStr(nameMap));
         tExamPaper.setGuide(JsonUtil.toJsonStr(guideMap));
     }
-    
+
+    // 娣诲姞鍒皅uesitonContent瀛楁锛屼笓闂ㄤ负棰樼洰鎼滅储锛岀┖闂存崲鏃堕棿锛岃褰曞皬棰橈紝涓嶆槸澶ч
     private void setQuestionContentJson(TExamPaper tExamPaper) {
         String langType = tExamPaper.getLangType();
         tExamPaper.setLangType("");
@@ -282,61 +349,81 @@
         tExamPaper.setQuestionContent(JsonUtil.toJsonStr(questionContentList));
         tExamPaper.setLangType(langType);
     }
+
     private void SetExamPaperAttribute(TExamPaper tExamPaper) {
-        
+        // begin 璁$畻鏁翠釜浜у搧鍖呯殑鍒嗘暟
         List<ExamPaperTitleItemObject> examPaperTitleItemObjectList = JSONArray.parseArray(tExamPaper.getQuestions(), ExamPaperTitleItemObject.class);
-        
+        //灏嗘暟鎹墦妯啀杞琹ist[(1,2,3),(4,5,6)] ->(1,2,3,4,5,6) ->[(1),(2),(3),(4),(5),(6)]
         List<Integer> questionIds = examPaperTitleItemObjectList.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList());
         Integer[] ids = questionIds.toArray(new Integer[questionIds.size()]);
         List<TQuestion> tQuestionList = questionMapper.selectTQuestionScore(ids);
-        
-        
+        //sql璇彞鏄痵um(),閮芥槸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鎷兼柊鐨刢ontent
         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<ExamPaperTitleItem> examPaperTitleItemListNew = JsonUtil.parseArray(tExamPaper.getQuestions(), ExamPaperTitleItem.class);
@@ -353,33 +440,39 @@
             }
             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鎷兼柊鐨刢ontent
         TTextContent textContent = tTextContentMapper.selectTTextContentById(tExamPaperForUpdate.getFrameTextContentId());
         List<ExamPaperTitleItem> 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<ExamPaperTitleItem> examPaperTitleItemForPartList = JsonUtil.parseArray(textContent.getContent(), ExamPaperTitleItem.class);
@@ -393,27 +486,46 @@
                 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 浜у搧鍖呭垪琛↖D
+     * @return 缁撴灉
+     */
     public int deleteTExamPaperById(Long id) {
         return tExamPaperMapper.deleteTExamPaperById(id);
     }
+
     @Override
     public List<TExamPaper> selectProdByDeleteList(List<Long> deletes) {
         Map map = new HashMap<>();
         map.put("deleteds", deletes);
         return tExamPaperMapper.selectProdByDeleteList(map);
     }
-    
+
+    /**
+     * 鎵�鏈夊彲閫変骇鍝佸寘
+     *
+     * @return 鎵�鏈夊彲閫変骇鍝佸寘
+     */
     public List<Ztree> selectProdTree(String testType) {
         List<Ztree> ztrees = new ArrayList<>();
         List<TExamPaper> dictList = getUserPapers();
@@ -428,8 +540,10 @@
                 continue;
             }
             String questionTemplateId = tExamLevel.getQuestionTemplateId();
+
             if (!Objects.equals(testType, questionTemplateId)) {
                 if (Objects.equals("questionnaire",testType) && Objects.equals("job",questionTemplateId)) {
+
                 } else {
                     continue;
                 }
@@ -442,13 +556,14 @@
         }
         return ztrees;
     }
+
     public List<TExamPaper> getUserPapers() {
         User sysUser = ShiroUtils.getSysUser();
         List<TExamPaper> 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());
@@ -460,38 +575,46 @@
                 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<TQuestion> updateInsertQuestion(List<TQuestion> questionList, String multilingual) {
         questionList.stream().forEach(question -> {
-            
+            // 鏇存柊鏃х殑
             question.setMultilingual(multilingual);
             tQuestionService.updateTQuestion(question);
         });
         return questionList;
     }
-    
+
+    // 濡傛灉鏈鐩凡缁忔湁浜嗚绉嶈瑷�锛屽氨涓嶈灞曠ず锛宔dit-*.html浣跨敤
     @Override
     public List<DictData> getType(Long id) {
-        
+
+        // 鏌ヨ瀛楀吀鍏�
         List<DictData> dictDataList = dictDataService.selectDictDataByType("lang_type");
-        
+
+        // 鏌ョ湅宸茬粡瀛樺湪鐨勯鐩�
         if (Objects.nonNull(id)) {
             TExamPaper tExamPaper = selectTExamPaperById(id);
             Map<String, String> titleMap = JsonUtil.toJsonObject(tExamPaper.getName(), HashMap.class);
             if (Objects.isNull(titleMap)) {
                 return dictDataList;
             }
+
             List<DictData> dictDataListResult = new ArrayList<>();
             for (DictData dictData : dictDataList) {
                 if (StringUtils.isEmpty(titleMap.get(dictData.getDictValue()))) {
@@ -503,29 +626,35 @@
             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鍜孲AQ閲嶆柊鎺�
         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<QuestionReport> questionReports = JsonUtil.parseArray(tExamReportResult.getQuestionReport(), QuestionReport.class);
         if (Objects.equals("MAQ", reportType) || Objects.equals("SAQ", reportType)) {
@@ -534,7 +663,7 @@
             for (Integer partOrder : partOrderSet) {
                 ExamPaperSubmitVM examPaperSubmitVM = new ExamPaperSubmitVM();
                 examPaperSubmitVM.setPartOrder(partOrder);
-                
+                // 鏄惁鏄噸鏂拌皟鐢ㄦ嘲鍥藉洟闃�
                 examPaperSubmitVM.setRecallThaiInterface(true);
                 if (!recallThaiInterfaceForMAQAndCAQ(tExamReportResult, tExamReportUpdate, examPaperSubmitVM, examPaperSubmitVM.getPartOrder())) {
                     return;
@@ -542,6 +671,7 @@
             }
         }
     }
+
     private boolean recallThaiInterfaceForMAQAndCAQ(TExamReport tExamReportResult, TExamReport tExamReportUpdate, ExamPaperSubmitVM examPaperSubmitVM, Integer partOrder2) {
         ReportAPIResult reportAPIResult = getTaiInterface(examPaperSubmitVM, tExamReportResult, tExamReportUpdate);
         if (Objects.equals(reportAPIResult.getCode(), "fail")) {
@@ -549,32 +679,43 @@
             examReportService.updateTExamReportByTokenId(tExamReportUpdate);
             return false;
         }
-        
+
+        // 鏇存柊娉板浗鎺ュ彛鏁版嵁锛屼繚瀛樻嘲鍥芥帴鍙f暟鎹�
         updateTaiInterfaceContent(tExamReportUpdate, tExamReportResult, reportAPIResult, partOrder2);
         tExamReportResult.setInterfaceContent(tExamReportUpdate.getInterfaceContent());
         return true;
     }
+
     @Override
     public List<ExamPaperTitleItem> getExamPaperTitleContent(TExamPaper tExamPaper) {
-        
+        //琛ㄧず杩樻病鏈夋坊鍔犻鐩�
         if (Objects.isNull(tExamPaper.getFrameTextContentId())) {
             return null;
         }
+
         TTextContent tTextContent = tTextContentService.selectTTextContentById(tExamPaper.getFrameTextContentId());
-        
+
+        //澶ф爣棰橈紝绗竴娈垫煡t_exam_paper鐨則_text_content
         List<ExamPaperTitleItemObject> examPaperTitleItemObjectList = JSONArray.parseArray(tTextContent.getContent(), ExamPaperTitleItemObject.class);
-        
+
+        // 宸ヤ綔鍒嗘瀽闂嵎鍘诲幓question鐨勯鐩綔涓哄睍绀�
         examUtilService.setTitleName(tExamPaper, examPaperTitleItemObjectList);
-        
+
+        //鏍囬銆侀骞�=>閫夐」 鍚嶅瓧锛歯ame,棰樼洰锛歲uestionItems锛屽ぇ鏍囬
         List<ExamPaperTitleItem> 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<ExamPaperTitleItem> examPaperTitleItemList) {
         List<QuestionPart> parts = examPaperTitleItemList.get(0).getParts();
         if (CollUtil.isEmpty(parts)) {
@@ -587,39 +728,47 @@
             });
         }
     }
+
     private void setPaperQuestion(TExamPaper tExamPaper, List<ExamPaperTitleItemObject> examPaperTitleItemObjectList, List<ExamPaperTitleItem> 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<ExamPaperQuestionItemObject> examPaperQuestionList = examPaperTitleItemObject.getQuestionItems();
-            
+
+            //map淇濆瓨棰樼洰鐨勯『搴�
             Map<Integer, ExamPaperQuestionItemObject> questionOrder = new HashMap<>();
             List<String> ids = new ArrayList<String>();
             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":"<p>B閫夐」</p>","prefix":"B","score":500},{"content":"A閫夐」","prefix":"A","score":500},{"content":"C閫夐」","prefix":"C","score":500},{"content":"D閫夐」鐨勭瓟妗�","prefix":"D","score":500}],"titleContent":"璇烽棶娴锋磱鏈�澶氱殑鏄粈涔�"}
             List<TTextContentAndQuestion> tTextContents = tTextContentService.selectTextContentAndQuestion(ids.toArray(new String[ids.size()]));
             List<QuestionItem> 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<QuestionEditItem> items = questionObject.getQuestionItemObjects().stream().map(val -> {
                         QuestionEditItem questionEditItem = modelMapper.map(val, QuestionEditItem.class);
@@ -635,32 +784,46 @@
                     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<SignalObject> getSignalObjectRestResponse(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReport, List<TExamReport> tExamReportList, String langType) {
-        
+        // 鏌ヨ缁撴灉
         TExamReport tExamReportResult = tExamReportList.get(0);
-        
+
+        // 璋冪敤娉板浗鎺ュ彛
         ReportAPIResult reportAPIResult = getTaiInterface(examPaperSubmitVM, tExamReportResult, tExamReport);
-        
+
+        // 鏇存柊娉板浗鎺ュ彛鏁版嵁锛屼繚瀛樻嘲鍥芥帴鍙f暟鎹�
         updateTaiInterfaceContent(tExamReport, tExamReportResult, reportAPIResult, examPaperSubmitVM.getPartOrder());
-        
+
+        // 鍙戦�侀偖浠朵釜鐢ㄦ埛鍜孒R
         sendHRAndMemberEmail(tExamReport, true, true);
-        
+
+        // 杩斿洖鎻愮ず缁欏墠鍙�
         return getSignalObject(examPaperSubmitVM.getPartOrder(), tExamReportResult, reportAPIResult, langType);
     }
+
     private RestResponse<SignalObject> getSignalObject(int partOrder, TExamReport tExamReportResult, ReportAPIResult reportAPIResult, String langType) {
         TExamPaper tExamPaper = selectTExamPaperById(tExamReportResult.getProductId());
         List<ExamPaperTitleItem> examPaperTitleItemList = JsonUtil.parseArray(tExamPaper.getContent(), ExamPaperTitleItem.class);
@@ -682,72 +845,95 @@
         signalObject.setMessage(reportAPIResult.getMessage());
         return RestResponse.ok(signalObject);
     }
-    
+
+    // 鍙戦�侀檮浠剁粰HR
     public void sendHRAndMemberEmail(TExamReport tExamReport, boolean justHr, boolean justMember) {
-        
+        // 闄勪欢鐨勪綅缃�,鍏蜂綋閭欢闄勪欢鐨勪綅缃�
         List<String> fileNameResult = new ArrayList<>();
-        
+        // 瑕佸垹闄ょ殑鏂囦欢
         List<String> 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 title = tExamReportResult.getMemberName() + MessageUtils.message("jsp.exam.quesiton.reportTilte");
+        String title = getTitle(tExamReportResult);
+
+        log.error("鎶ュ憡鏍囬:{}",title);
+
         String content = tExamReportResult.getMailContent();
+        //娴嬭瘯鑰呮帴鏀舵姤鍛婃ā鏉夸紭鍏堜娇鐢ㄦ祴璇曞寘淇濆瓨鐨勬姤鍛婃ā鏉�
+        String memberContent = tExamReportResult.getMemberTemplate();
+
         StringBuilder remark = new StringBuilder();
         remark.append("澶辫触閭锛�");
+
         if (justMember) {
-            
-            sendMemberEmail(tExamReport, fileNameResult, tExamReportResult, title, content, remark);
+            // 鐢ㄦ埛鍙戦偖浠�
+            sendMemberEmail(tExamReport, fileNameResult, tExamReportResult, title, memberContent, 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<String> fileNameResult, TExamReport tExamReportResult, String title, String content, StringBuilder remark) {
-        
+        // 濡傛灉鍒涘缓娴嬭瘯鍖呯殑鏃跺�欐病鏈夊~閭锛岄偅涔堝氨鐢ㄩ泦鍥㈢殑鍙朒R閭閭
         List<String> 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 { 
+            } else { // 鍙戦�佹垚鍔燂紝鍙戦�佸け璐ュ鐞�
                 remark.append(tExamReportResult.getMemberEmail() + ",");
                 tExamReport.setSendHrStatus(SenderCode.fail.getCode());
                 hrEmailStatus = "2";
@@ -757,7 +943,7 @@
             tExamReport.setHrSendTime(new Date());
             tExamReport.setHrUpdateTime(new Date());
             try {
-                
+                //鏇存柊鐢ㄦ埛琛ㄥ彂閫丠R閭欢鐘舵��
                 EntTestMember entTestMember = entTestMemberMapper.selectEntTestMemberById(Long.valueOf(tExamReportResult.getMemberId()));
                 entTestMember.setHrEmailStatus(hrEmailStatus);
                 entTestMember.setHrEmailTime(new Date());
@@ -765,23 +951,33 @@
             } 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("<br>");
         builder.append("Dear HR Staff at {Company},").append("<br><br>");
+
         builder.append("闄勪欢鏄瘂fullName}鏈�杩戝畬鎴愮殑{prodName}娴嬭瘎鎶ュ憡銆�").append("<br>");
         builder.append("Attached please find the assessment report on ({prodName}) of ({fullName}).").append("<br><br>");
+
         builder.append("濡傛湁鐤戦棶锛岃涓庡鏈嶈仈绯伙紝閭鏄細support@tai-online.com銆�").append("<br>");
         builder.append("Should you have questions, please contact our customer service at support@tai-online.com. ").append("<br><br><br>");
+
         builder.append("璋㈣阿锛�").append("<br>");
         builder.append("All the best,").append("<br><br><br>");
+
         builder.append("TAI鍏徃瀹㈡埛鏈嶅姟閮�").append("<br>");
         builder.append("Customer Service Dept., TAI, LLC").append("<br><br><br>");
+
         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 (鎮ㄧ殑娴嬭瘎鎶ュ憡闄勪笂浜�)");
@@ -807,28 +1003,35 @@
         builder.append(userName);
         return builder.toString();
     }
+
+
     private void sendMemberEmail(TExamReport tExamReport, List<String> 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 { 
+            } 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<ReportAPIResult> reportAPIResultList = JsonUtil.parseArray(tExamReportResult.getInterfaceContent(), ReportAPIResult.class);
         if (CollUtil.isNotEmpty(reportAPIResultList)) {
@@ -837,21 +1040,25 @@
                 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<Integer, ReportTypeEnum> reportTypeEnumMap = new HashMap<>();
         reportTypeEnumMap.put(1, firstPath);
@@ -862,13 +1069,16 @@
             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());
@@ -881,10 +1091,11 @@
             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);
@@ -896,8 +1107,9 @@
         }
         return reportAPIResult;
     }
+
     public SignalObject callTaiData(String tokenId, String langType, ExamPaperSubmitVM examPaperSubmitVM) {
-        
+        // 鏌ユ壘褰撳墠鐨勭瓟棰樿褰�
         TExamReport tExamReport = new TExamReport();
         tExamReport.setTokenId(tokenId);
         List<TExamReport> tExamReportList = examReportService.selectTExamReportList(tExamReport);
@@ -909,9 +1121,11 @@
         if (ExamUtil.isListEmpty(questionReportList)) {
             return getEmptySignalObjectResult();
         }
+
         try {
-            
+            // 璋冪敤娉板浗鍥㈤槦涔嬪悗鏇存柊鎶ヨ〃璁板綍,鍙戦�佺粰HR閭欢
             RestResponse<SignalObject> signalObject = getSignalObjectRestResponse(examPaperSubmitVM, tExamReport, tExamReportList, langType);
+
             if (Objects.nonNull(signalObject)) {
                 return signalObject.getResponse();
             }
@@ -919,19 +1133,23 @@
             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<String, String> linkedHashMap = JsonUtil.parseObject(choice, LinkedHashMap.class);
         Iterator<String> iterator = linkedHashMap.keySet().iterator();
@@ -947,17 +1165,19 @@
         tExamReport.setRemark(tExamReport.getRemark() + ",itemOrder:" + examPaperSubmitVM.getItemOrder());
         examReportService.updateTExamReportByTokenId(tExamReport);
     }
-    
+
+    // 閫犳暟鎹嚱鏁板叆鍙�
     private void createMAQAndCAQData(ExamPaperSubmitVM examPaperSubmitVM, CalculationTypeEnum calculationTypeEnum, Map data) {
         if (calculationTypeEnum == CAQ) {
-            
+            // 閫燙AQ鐨勬暟鎹�
             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) {
@@ -968,7 +1188,8 @@
             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) {
@@ -979,30 +1200,34 @@
             data.put(item, "5");
         });
     }
+
     private void setNormalSubmit(ExamPaperSubmitVM examPaperSubmitVM, Map data, List<QuestionReport> 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<QuestionReport> 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<Integer, ReportTypeEnum> reportTypeEnumMap, HolderInfo info) {
         return getReportAPIMAQResult(examPaperSubmitVM, tExamReportResult, tExamReport, reportTypeEnumMap, info);
     }
+
     private ReportAPIResult getReportAPIMAQResult(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReportResult, TExamReport tExamReport, Map<Integer, ReportTypeEnum> reportTypeEnumMap, HolderInfo info) {
         Map data = new HashMap();
-        
-
+        // 閫犳暟鎹�
+//        createMAQAndCAQData(examPaperSubmitVM, MAQ, data);
         getWaitTaiData(examPaperSubmitVM, tExamReportResult, data);
         MaqRequest request = new MaqRequest();
         request.setInfo(info);
@@ -1010,19 +1235,58 @@
         request.setData(data);
         ReportAPIResult reportAPIResult = calculationServices.stageCalculation(request);
         reportAPIResult.setAnswerData(data);
-        
+        // 閲嶆柊璋冪敤娉板浗鍥㈤槦鐨勬帴鍙g殑璇濓紝涓嶉渶瑕佹洿鏂伴鐩簡
         if (Objects.equals(reportAPIResult.getCode(), "fail") && !examPaperSubmitVM.isRecallThaiInterface()) {
             updateChoice(examPaperSubmitVM, tExamReport, tExamReportResult);
         }
         return reportAPIResult;
     }
+
     private void getWaitTaiData(ExamPaperSubmitVM examPaperSubmitVM, TExamReport tExamReportResult, Map data) {
         List<QuestionReport> questionReportList = JsonUtil.parseArray(tExamReportResult.getQuestionReport(), QuestionReport.class);
         if (examPaperSubmitVM.isSubmitClick()) {
-            
+            // 鑷繁鎻愪氦鐨勯偅绉嶏紝濡傛櫤鍔涢
             setManSubmit(data, questionReportList);
         } else {
             setNormalSubmit(examPaperSubmitVM, data, questionReportList);
         }
     }
+
+
+    /***
+     * 鑾峰彇鎶ュ憡濉啓璇█,杩斿洖鏍囬
+     */
+    private String getTitle(TExamReport tExamReportResult){
+        String title = tExamReportResult.getMemberName() + MessageUtils.message("jsp.exam.quesiton.reportTilte");
+        //鎶ュ憡鍐呭璺熸祴璇曚骇鍝佸悕绉颁笉涓虹┖
+        if(StringUtils.isNotEmpty(tExamReportResult.getContent()) && StringUtils.isNotEmpty(tExamReportResult.getProductName())){
+            JSONArray content = JSONObject.parseArray(tExamReportResult.getContent());
+            //鑾峰彇璇█
+            String langType = content.getJSONObject(0).getString("langType");
+            String field = ReportTitle.getField(langType);
+            String name = "";
+            for (int i = 0; i < content.size(); i++) {
+                JSONObject jsonObject = content.getJSONObject(i);
+                if(StringUtils.isNotEmpty(field) && field.equals(jsonObject.getString("field"))){
+                    name = jsonObject.getString("value");
+                    break;
+                }
+            }
+
+            //鑾峰彇浜у搧鍚嶇О
+            JSONObject productNameObj = JSONObject.parseObject(tExamReportResult.getProductName());
+            String productName = productNameObj.getString(langType);
+
+            if(StringUtils.isNotEmpty(name) && StringUtils.isNotEmpty(productName) && StringUtils.isNotEmpty(langType)){
+                //娉版枃鏄厛鎶ュ憡鍚嶇О鍚庡鍚� 鍏朵粬鐩稿弽
+                if(langType.equals(LangTypeEnum.Thai.getCode())){
+                    title = String.format(ReportTitle.getReportTitle(langType),productName,name);
+                }else{
+                    title = String.format(ReportTitle.getReportTitle(langType),name,productName);
+                }
+            }
+        }
+        return title;
+    }
+
 }

--
Gitblit v1.9.1