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/controller/TExamReportController.java |  701 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 520 insertions(+), 181 deletions(-)

diff --git a/src/main/java/com/ots/project/exam/controller/TExamReportController.java b/src/main/java/com/ots/project/exam/controller/TExamReportController.java
index ce1df23..764dafe 100644
--- a/src/main/java/com/ots/project/exam/controller/TExamReportController.java
+++ b/src/main/java/com/ots/project/exam/controller/TExamReportController.java
@@ -1,4 +1,5 @@
 package com.ots.project.exam.controller;
+
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ArrayUtil;
@@ -39,6 +40,7 @@
 import com.ots.project.exam.dto.QuestionObject;
 import com.ots.project.exam.dto.QuestionReport;
 import com.ots.project.exam.dto.RelatedParty;
+import com.ots.project.exam.mapper.TExamPaperQuestionMapper;
 import com.ots.project.exam.service.IEntDemographyInfoService;
 import com.ots.project.exam.service.IEntTestPackageService;
 import com.ots.project.exam.service.ISysUserExtendService;
@@ -77,6 +79,7 @@
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -93,8 +96,15 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
+
 import static com.ots.project.tool.report.reportCalculation.request.CalculationTypeEnum.JAQ;
 
+/**
+ * 璇勬祴鎶ュ憡Controller
+ *
+ * @author ots
+ * @date 2019-12-26
+ */
 @Controller
 @RequestMapping("/exam/report")
 public class TExamReportController extends BaseController {
@@ -114,46 +124,63 @@
     private IExamUtilService iExamUtilService;
     @Autowired
     private IEntTestPackageService entTestPackageService;
+
     @Autowired
     private ITExamPaperService itExamPaperService;
+
     @Autowired
     private IEntDemographyInfoService entDemographyInfoService;
+
     @Autowired
     ReportCalculationServices calculationServices;
+
     @Autowired
     MemberService memberService;
+
     @Autowired
     ITQuestionService itQuestionService;
+
     @Autowired
     private TExamPaperServiceImpl examPaperService;
+
     @Autowired
     private ISysUserExtendService sysUserExtendService;
-    
+    /**
+     * 浼佷笟鎶ュ憡鎺堟潈锛屽鎵规姤琛�
+     *
+     * @return
+     */
     @RequiresPermissions("exam:report:viewVerify")
     @GetMapping("/viewVerify")
     public String reportVerify() {
         return prefix + "/verifyReport";
     }
-    
+
+    /**
+     * 鏌ヨ璇勬祴鎶ュ憡鍒楄〃
+     */
     @RequiresPermissions("exam:report:viewVerify")
     @PostMapping("/verifyList")
     @ResponseBody
     public TableDataInfo verifyList(TExamReport tExamReport) {
         startPage();
-        tExamReport.setStatus("1");
+        tExamReport.setStatus("1");//娴嬭瘯鍖呯姸鎬�
         List<TExamReport> list = tExamReportService.selectTExamReportList(tExamReport);
-        
+        // 澶氳瑷�
         String langType = dictService.getLangType(LocaleContextHolder.getLocale().toString());
         for (TExamReport tExamReportTemp : list) {
             tExamReportTemp.setProductName(ExamUtil.getLangString(langType, tExamReportTemp.getProductName()));
         }
         return getDataTable(list);
     }
+
+
     @RequiresPermissions("exam:report:view")
     @GetMapping()
     public String report() {
         return prefix + "/report";
     }
+
     @RequiresPermissions("exam:test_package:testreport")
     @GetMapping("/reportView/{testId}/{prodId}")
     public String reportView(@PathVariable String testId, @PathVariable String prodId, ModelMap mmap) {
@@ -161,6 +188,7 @@
         mmap.put("testId", testId);
         return prefix + "/report";
     }
+
     @RequiresPermissions("exam:test_package:testreport")
     @GetMapping("/member/reportView/{testId}/{memberId}")
     public String memberReportView(@PathVariable Long testId, @PathVariable String memberId, ModelMap mmap) {
@@ -170,7 +198,23 @@
         mmap.put("memberId", memberId);
         return prefix + "/report";
     }
-    
+
+    /**
+     * 娴嬭瘎鍒楄〃
+     * @return
+     */
+    @RequiresPermissions("exam:evaluation_report:view")
+    @GetMapping("/reportView/evaluationReport")
+    public String evaluationReport(ModelMap mmap) {
+        //杩斿洖鎵�鏈変骇鍝�
+        List<TExamPaper> dictList = itExamPaperService.getUserPapers();
+        mmap.put("dictList",dictList);
+        return prefix + "/evaluationReport";
+    }
+
+    /**
+     * 鏌ヨ璇勬祴鎶ュ憡鍒楄〃(澶撮儴)
+     */
     @RequiresPermissions("exam:hrEmailReport:view")
     @PostMapping("/hrLog")
     @ResponseBody
@@ -179,7 +223,10 @@
         List<TExamReport> tExamReports = tExamReportService.selectTExamReportList(tExamReport);
         return getDataTable(tExamReports);
     }
-    
+
+    /**
+     * 鏌ヨ璇勬祴鎶ュ憡鍒楄〃(澶撮儴)
+     */
     @RequiresPermissions("exam:report:list")
     @PostMapping("/list")
     @ResponseBody
@@ -189,12 +236,15 @@
         if (Objects.isNull(tExamReport.getProductId())) {
             return getDataTable(list);
         }
-        
+
+        // 澶氳瑷�鍙栨湰鍦伴偅绉�
         String langType = dictService.getLangType(LocaleContextHolder.getLocale().toString());
         list = tExamReportService.selectTExamReportList(tExamReport);
+
         if (Objects.isNull(list) || list.isEmpty()) {
             return getDataTable(list);
         }
+
         Map<String, String> filed = JSON.parseObject(list.get(0).getContent(), LinkedHashMap.class);
         Map<String, String> title = new LinkedHashMap<>();
         int i = 0;
@@ -213,11 +263,57 @@
         }
         title.put("娴嬭瘯鍖呯紪鐮�", String.valueOf(i++));
         title.put("绛斿嵎缂栫爜", String.valueOf(i++));
+
         List<Map<String, String>> filedList = new ArrayList<>();
         filedList.add(title);
         return getDataTable(filedList);
     }
-    
+
+    /**
+     * 鏌ヨ璇勬祴鎶ュ憡鍒楄〃(鏁版嵁鍒�)
+     * 鏍规嵁鐢ㄦ埛瑙掕壊鏄剧ず涓嶅悓鍒楄〃
+     * @param tExamReport
+     * @return
+     */
+    @RequiresPermissions("exam:report:list")
+    @PostMapping("/newListData")
+    @ResponseBody
+    public TableDataInfo newListData(TExamReport tExamReport) {
+        startPage();
+        List<TExamReport> list = new ArrayList<>();
+        // 瀹屾垚鐨�
+        tExamReport.setFinish(1);
+        //鏍规嵁鏉冮檺杩斿洖涓嶅悓娴嬭瘎浜哄憳鍒楄〃
+        User sysUser = ShiroUtils.getSysUser();
+        String userType = sysUser.getUserType();
+        if (UserTypeEnum.ENT_USER.getUserType().equals(userType)) {
+            tExamReport.setUserId(sysUser.getUserId());
+        }
+        //鍒嗛攢鍟嗗彲浠ョ湅鍒板垎閿�鍟嗕笅鐨勪紒涓氫俊鎭�
+        if (UserTypeEnum.DIS_USER.getUserType().equals(userType)) {
+            SysUserExtend sysUserExtend = new SysUserExtend();
+            sysUserExtend.setParentUserId(sysUser.getUserId());
+            List<SysUserExtend> sysUserExtends = sysUserExtendService.selectSysUserExtendList(sysUserExtend);
+            List<Long> collect = sysUserExtends.stream().map(extend -> extend.getUserId()).collect(Collectors.toList());
+            collect.add(sysUser.getUserId());
+            tExamReport.setUserIds(collect);
+        }
+
+        list = tExamReportService.selectViewReportList(tExamReport);
+        // 澶氳瑷�缈昏瘧
+        for (TExamReport tExamReportTemp : list) {
+            tExamReportTemp.setProductName(examUtilService.getLangOrLocalLangString("", tExamReportTemp.getProductName()));
+        }
+
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏌ヨ璇勬祴鎶ュ憡鍒楄〃(鏁版嵁鍒�)
+     *
+     * @param tExamReport
+     * @return
+     */
     @RequiresPermissions("exam:report:list")
     @PostMapping("/listData")
     @ResponseBody
@@ -227,16 +323,20 @@
             return getDataTable(list);
         }
         startPage();
-        
+        // 瀹屾垚鐨�
         tExamReport.setFinish(1);
         list = tExamReportService.selectViewReportList(tExamReport);
-        
+        // 澶氳瑷�缈昏瘧
         for (TExamReport tExamReportTemp : list) {
             tExamReportTemp.setProductName(examUtilService.getLangOrLocalLangString("", tExamReportTemp.getProductName()));
         }
+
         return getDataTable(list);
     }
-    
+
+    /**
+     * 瀵煎嚭璇勬祴鎶ュ憡鍒楄〃
+     */
     @RequiresPermissions("exam:report:export")
     @PostMapping("/export")
     @ResponseBody
@@ -245,148 +345,241 @@
         ExcelUtil<TExamReport> util = new ExcelUtil<TExamReport>(TExamReport.class);
         return util.exportExcel(list, "report");
     }
-    
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    /**
+     * 瀵煎嚭璇勬祴浜哄憳鐢ㄦ埛绛旈璁板綍
+     *
+     * @param tExamReport
+     * @return
+     */
+//    @RequiresPermissions("exam:report:export")
+//    @PostMapping("/exportReport")
+//    @ResponseBody
+//    public AjaxResult exportReport(TExamReport tExamReport) {
+//        DataMap<Integer, Object[]> dataMap = new DataMap<>();
+//        List<TExamReport> list = tExamReportService.selectTExamReportList(tExamReport);
+//
+//        // 鎷兼帴鐢熸垚report鐨勯敭鍊煎
+//        User sysUser = ShiroUtils.getSysUser();
+//        boolean isRight = Objects.equals(UserTypeEnum.SYS_USER.getUserType(), sysUser.getUserType());
+//
+//        int keyPosition = -1;
+//        int keySize = 0;
+//        List<DataMap> reportList = new ArrayList<>();
+//        List<DataMap> reportTaiList = new ArrayList<>();
+//        List<DataMap> reportLocalList = new ArrayList<>();
+//        Map<String, String> mapPara = new HashedMap();
+//        Set<String> langTypeSet = new HashSet<>();
+//        for (TExamReport it : list) {
+//            List<DataReport> dataReportList = new ArrayList<>();
+//
+//            // 璇诲嚭浜哄彛瀛﹀彉閲�
+//            setLocalDataReportByParamId(mapPara, it, dataReportList);
+//
+//            // 寰楀埌浜哄彛瀛︽湁澶氬皯绉嶈瑷�
+//            setDataReportLangSet(mapPara, langTypeSet);
+//
+//            // 鍙栨渶澶氬�奸偅涓�
+//            if (dataReportList.size() > keySize) {
+//                keySize = dataReportList.size();
+//                keyPosition++;
+//            }
+//
+//            DataMap<String, String> dataReportMap = new DataMap<>();
+//
+//            // 闈炴嘲鍥藉洟闃熺殑鍐呭
+//            setContentMap(it, dataReportList, dataReportMap, reportLocalList);
+//
+//            // 娉板浗鍥㈤槦鐨勫唴瀹�
+//            setTaiInterfaceContentMap(it, dataReportMap, isRight, reportTaiList);
+//
+//            reportList.add(dataReportMap);
+//        }
+//
+//        // 鍙杒ey鏈�澶氱殑锛岄槻姝㈡墦涔�
+//        Object[] keys = reportTaiList.get(keyPosition).getKeys().toArray();
+//
+//        Object[] keysAll = reportList.get(keyPosition).getKeys().toArray();
+//
+//        List<Object[]> keyDemography = new ArrayList<>();
+//
+//        // 3琛岋紝3绉嶈瑷�
+//        setAllLangLocalDataValue(keyPosition, reportLocalList, mapPara, langTypeSet, keyDemography);
+//
+//        int position = 0;
+//        for (;position < keyDemography.size(); position++) {
+//            // 琛ㄥご鍙﹀鐨勪笢瑗匡紝绛旈涓嶄竴鑷寸瓑绛夛紝濡備腑鏂囪嚜澶竉T1
+//            setExtracHead(dataMap, keys, keyDemography, position);
+//        }
+//
+//        for (int i = 0; i < reportList.size(); i++) {
+//            DataMap<String,String> valueDataMap = reportList.get(i);
+//            List<String> valueList = new ArrayList<>();
+//            for (Object key : keysAll) {
+//                valueList.add(valueDataMap.get(key.toString()));
+//            }
+//            dataMap.put(i + position, valueList.toArray());
+//        }
+//
+//        ExcelUtil<DataMap> util = new ExcelUtil<DataMap>(DataMap.class);
+//        // 瀵煎嚭鏁版嵁鎶ュ憡鍙�変竴涓祴璇曞寘
+//        return util.exportExcelByDataMap(dataMap, examUtilService.getLangOrLocalLangString("", list.get(0).getProductName()) + "_DateReport");
+//    }
 
-    
+    // 瀵煎嚭鏁版嵁鎶ュ憡
     @RequiresPermissions("exam:report:export")
     @PostMapping("/exportDataReport/{ids}")
     @ResponseBody
     public AjaxResult exportReport(TExamReport tExamReport, @PathVariable("ids") String[] ids) throws IOException {
         List<TExamReport> tExamReportList = tExamReportService.selectTExamReportByIds(ids);
-        
+
+        // 鎷兼帴鐢熸垚report鐨勯敭鍊煎
         User sysUser = ShiroUtils.getSysUser();
         boolean isRight = Objects.equals(UserTypeEnum.SYS_USER.getUserType(), sysUser.getUserType());
-        
-        
+        // 浜哄彛瀛﹀彉閲�
+        // 涓夎
         DataReportHead dataReportHead = new DataReportHead();
         String fileNameResult = EssConfig.getDownloadPath() + examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx";
-        
+
+        // 鎶妔heet鏀惧湪map閲岄潰
         Map<String, List<List<Object>>> reportResultMap = new HashMap<>();
+
         Map<String, Map<String, String>> demograpyMap = new HashMap<>();
-        
+
+        // 浜哄彛瀛�
         setDemograyMap(tExamReportList, dataReportHead, demograpyMap);
-        
+
+        // 鎶ュ憡绫诲瀷
         String reportType = getReportType(tExamReport);
-        
+
+        // 妯$増鐨勫唴瀹�
         setDataReportHeader(dataReportHead, reportResultMap, reportType, isRight);
-        
+
+        // Map<sheet鍚�, Map<濮撳悕, Map<key, value>>> 鏁版嵁
         Map<String, Map<String, Map<String, String>>> sheetExcelMap = new HashMap<>();
-        
+
+        // 濡傛灉鏄疛AQ瑕佽皟鐢ㄦ嘲鍥藉洟闃熺殑鎺ュ彛锛屽鏋滀笉鏄紝鍘昏〃閲岄潰鎵�
         setDealTaiData(ids, tExamReportList, reportType, sheetExcelMap);
-        
+
+        // 鏋勯�犲��
         setRportListValue(reportResultMap, demograpyMap, sheetExcelMap, reportType);
-        
+
+        // 寮勬垚鍜屼粬浠師鏉ヤ竴鏍�
         setSysHeadToEnglish(tExamReportList, reportResultMap, reportType);
-        
-        
-        writeMutiFile(fileNameResult, reportResultMap);
-        
+
+        // 鍐欐枃浠�
+        writeFile(fileNameResult, reportResultMap);
+
+        // 杩斿洖涓嬭浇
         return AjaxResult.success(examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx");
     }
+
+    // 瀵煎嚭鏁版嵁鎶ュ憡
+    @RequiresPermissions("exam:report:export")
+    @PostMapping("/exportEvaluationReport")
+    @ResponseBody
+    public AjaxResult exportReport(TExamReport tExamReport) throws IOException {
+        // 瀹屾垚鐨�
+        tExamReport.setFinish(1);
+        //鏍规嵁鏉冮檺杩斿洖涓嶅悓娴嬭瘎浜哄憳鍒楄〃
+        User sysUser = ShiroUtils.getSysUser();
+        String userType = sysUser.getUserType();
+        if (UserTypeEnum.ENT_USER.getUserType().equals(userType)) {
+            tExamReport.setUserId(sysUser.getUserId());
+        }
+        //鍒嗛攢鍟嗗彲浠ョ湅鍒板垎閿�鍟嗕笅鐨勪紒涓氫俊鎭�
+        if (UserTypeEnum.DIS_USER.getUserType().equals(userType)) {
+            SysUserExtend sysUserExtend = new SysUserExtend();
+            sysUserExtend.setParentUserId(sysUser.getUserId());
+            List<SysUserExtend> sysUserExtends = sysUserExtendService.selectSysUserExtendList(sysUserExtend);
+            List<Long> collect = sysUserExtends.stream().map(extend -> extend.getUserId()).collect(Collectors.toList());
+            collect.add(sysUser.getUserId());
+            tExamReport.setUserIds(collect);
+        }
+        //鏌ヨ褰撳墠绛涢�夌粨鏋滈泦
+        List<TExamReport> tExamReportList = tExamReportService.selectViewReportList(tExamReport);
+        //List<Long> getIds = tExamReportList.stream().map(TExamReport::getId).collect(Collectors.toList());
+        List<String> getIds = tExamReportList.stream().map(t -> t.getId().toString()).collect(Collectors.toList());
+        String[] ids = getIds.stream().toArray(String[]::new);
+
+        // 鎷兼帴鐢熸垚report鐨勯敭鍊煎
+        //User sysUser = ShiroUtils.getSysUser();
+        boolean isRight = Objects.equals(UserTypeEnum.SYS_USER.getUserType(), sysUser.getUserType());
+        // 浜哄彛瀛﹀彉閲�
+        // 涓夎
+        DataReportHead dataReportHead = new DataReportHead();
+        String fileNameResult = EssConfig.getDownloadPath() + examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx";
+
+        // 鎶妔heet鏀惧湪map閲岄潰
+        Map<String, List<List<Object>>> reportResultMap = new HashMap<>();
+
+        Map<String, Map<String, String>> demograpyMap = new HashMap<>();
+
+        // 浜哄彛瀛�
+        setDemograyMap(tExamReportList, dataReportHead, demograpyMap);
+
+        // 鎶ュ憡绫诲瀷
+        String reportType = getReportType(tExamReport);
+
+        // 妯$増鐨勫唴瀹�
+        setDataReportHeader(dataReportHead, reportResultMap, reportType, isRight);
+
+        // Map<sheet鍚�, Map<濮撳悕, Map<key, value>>> 鏁版嵁
+        Map<String, Map<String, Map<String, String>>> sheetExcelMap = new HashMap<>();
+
+        // 濡傛灉鏄疛AQ瑕佽皟鐢ㄦ嘲鍥藉洟闃熺殑鎺ュ彛锛屽鏋滀笉鏄紝鍘昏〃閲岄潰鎵�
+        setDealTaiData(ids, tExamReportList, reportType, sheetExcelMap);
+
+        // 鏋勯�犲��
+        setRportListValue(reportResultMap, demograpyMap, sheetExcelMap, reportType);
+
+        // 寮勬垚鍜屼粬浠師鏉ヤ竴鏍�
+        setSysHeadToEnglish(tExamReportList, reportResultMap, reportType);
+
+        // 鍐欐枃浠�
+        writeMutiFile(fileNameResult, reportResultMap);
+
+        // 杩斿洖涓嬭浇
+        return AjaxResult.success(examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx");
+    }
+
     private void setDealTaiData(@PathVariable("ids") String[] ids, List<TExamReport> tExamReportList, String reportType, Map<String, Map<String, Map<String, String>>> sheetExcelMap) throws IOException {
         if (Objects.equals(reportType, ReportTypeEnum.JAQ.getCode())) {
-            
+            // 瑕佸垹闄ょ殑鏂囦欢
             List<TExamReport> tExamReports = tExamReportService.selectTExamReportByIds(ids);
             Map<String, TExamReport> tokenReportMap = new HashMap<>();
             for (TExamReport tExamReport : tExamReports) {
                 tokenReportMap.put(tExamReport.getTokenId(), tExamReport);
             }
-            
+
+            // JAQ 璋冪敤娉板浗鍥㈤槦鏁版嵁
             ReportAPIResult reportAPIResult = getThaiJAQData(tExamReports);
-            
-            
+
+            // 娉板浗鏁版嵁
+            // JAQ Output Data
             Map<String, String> thaiData = reportAPIResult.getData();
             Map<String, Map<String, String>> excelOutPutMap = new HashMap<>();
             excelOutPutMap.put("JAQ", thaiData);
             sheetExcelMap.put("JAQ Output Data", excelOutPutMap);
-            
+
+            // JAQ Input Data
             Map<String, Map<String, String>> excelInputMap = new HashMap<>();
             List<JAQPersons> persons = (List<JAQPersons>) reportAPIResult.getAnswerData().get("persons");
             for (JAQPersons jaqPersons : persons) {
                 Map<String, String> personInfo = jaqPersons.getPersonInfo();
                 Map<String, String> personPoints = jaqPersons.getPersonPoints();
                 String name = personInfo.get("fullName");
+
                 Map<String, String> excelValueMap = new HashMap<>();
                 excelValueMap.putAll(personInfo);
                 excelValueMap.putAll(personPoints);
                 excelValueMap.put("Name", name);
                 excelInputMap.put(name, excelValueMap);
                 tExamReportService.setExcelMapextraValue(tokenReportMap.get(excelValueMap.get("accessCode")), excelValueMap);
-                tExamReportService.setExcelMapextraValue(tokenReportMap.get(excelValueMap.get("accessCode")), thaiData); 
+                tExamReportService.setExcelMapextraValue(tokenReportMap.get(excelValueMap.get("accessCode")), thaiData); // 涓烘柟渚垮紑鍙戯紝涓嶇鎬ц兘
             }
-            
+
+            // 杈撳嚭sheet鐨勯澶栧��
             sheetExcelMap.put("JAQ Input Data", excelInputMap);
         } else {
             Map<String, Map<String, String>> excelMap = new HashMap<>();
@@ -394,19 +587,21 @@
             sheetExcelMap.put("Sheet1", excelMap);
         }
     }
+
     private void setSysHeadToEnglish(List<TExamReport> tExamReportList, Map<String, List<List<Object>>> reportResultMap, String reportType) {
         Set<String> heavyDischargeDemography = new HashSet<>();
         Map<String, String> systemEnglisMap = new HashMap<>();
         for (TExamReport tExamReportIt : tExamReportList) {
-            
+            // 璇诲嚭浜哄彛瀛﹀彉閲�,闄嶇淮
             List<DemographyDataReportDto> demographyDataReportDtoList = setLocalDataReportByParamId(tExamReportIt);
             for (DemographyDataReportDto demographyDataReportDto : demographyDataReportDtoList) {
-                
+                // 鎺掗噸鐢�
                 if (heavyDischargeDemography.contains(demographyDataReportDto.getParamId())) {
                     continue;
                 } else {
                     heavyDischargeDemography.add(demographyDataReportDto.getParamId());
                 }
+
                 List<DemographyDto> demographyDtoList = JsonUtil.parseArray(demographyDataReportDto.getLangCode(), DemographyDto.class);
                 for (DemographyDto demographyDto : demographyDtoList) {
                     if (Objects.equals(demographyDto.getLangType(), "English")) {
@@ -415,6 +610,7 @@
                 }
             }
         }
+
         for (Map.Entry<String, List<List<Object>>> entryReport : reportResultMap.entrySet()) {
             List<Object> headSystem = entryReport.getValue().get(0);
             for (int i = 0; i < headSystem.size(); i++) {
@@ -424,11 +620,13 @@
             }
         }
     }
+
     private void setRportListValue(Map<String, List<List<Object>>> reportResultMap, Map<String, Map<String, String>> demograpyMap, Map<String, Map<String, Map<String, String>>> sheetExcelMap, String reportType) {
         for (Map.Entry<String, Map<String, Map<String, String>>> sheetEntry : sheetExcelMap.entrySet()) {
             for (Map.Entry<String, Map<String, String>> entry : sheetEntry.getValue().entrySet()) {
-                
+                // 鎺ュ彛
                 ReportResultData resultData = getReportResultData(reportType, entry);
+
                 Map<String, Object> textMap = new HashMap<>();
                 textMap.putAll(resultData.getTextMap());
                 textMap.putAll(demograpyMap.get(textMap.get("reportId")));
@@ -436,6 +634,7 @@
             }
         }
     }
+
     private void writeFile(String fileNameResult, Map<String, List<List<Object>>> reportResultMap) {
         for (Map.Entry<String, List<List<Object>>> entryReport : reportResultMap.entrySet()) {
             ExcelWriter writer = cn.hutool.poi.excel.ExcelUtil.getBigWriter(fileNameResult, entryReport.getKey());
@@ -464,8 +663,9 @@
         }
         writer.close();
     }
+
     private void setReportResultList(List<Object> demographyHeadSystem, List<List<Object>> reportResultList, Map<String, Object> textMap) {
-        
+        // 寮�濮嬪彇鍊�
         List<Object> reportValue = new ArrayList<>();
         for (Object key : demographyHeadSystem) {
             Object value = textMap.get(key.toString().trim().replace("%", ""));
@@ -475,14 +675,17 @@
                 reportValue.add("");
             }
         }
+
         reportResultList.add(reportValue);
     }
+
     private ReportResultData getReportResultData(String reportType, Map.Entry<String, Map<String, String>> entry) {
         TExamReport tExamQueryReport = new TExamReport();
         String langType = examUtilService.getLocalLangType("");
         ReportResultData resultData = tExamReportService.getReportResultData(reportType, langType, entry, tExamQueryReport);
         return resultData;
     }
+
     private Map<String, LangTypeEnum> getStringLangTypeEnumMap() {
         Map<String, LangTypeEnum> langTypeEnumMap = new HashMap<>();
         for (LangTypeEnum langTypeEnumTemp : LangTypeEnum.values()) {
@@ -490,6 +693,7 @@
         }
         return langTypeEnumMap;
     }
+
     private String getReportType(TExamReport tExamReport) {
         String reportType = ReportTypeEnum.RuiLin.getCode();
         TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(tExamReport.getProductId());
@@ -502,16 +706,21 @@
             if (Objects.isNull(tReportTemplate.getReportType())) {
                 continue;
             }
-            
+
+            // 鍙栫涓�涓ā鐗堢殑閰嶇疆
             reportType = ReportTypeEnum.valueOf(tReportTemplate.getReportType()).getCode();
-            
+
+            // 濡傛灉鏄疭AQ璧癝AQ鐨勬ā鐗�
             if (Objects.equals(tReportTemplate.getTemplateType(), "SAQ")) {
                 reportType = ReportTypeEnum.valueOf(tReportTemplate.getTemplateType()).getCode();
             }
+
             break;
+
         }
         return reportType;
     }
+
     private void setDataReportHeader(DataReportHead dataReportHead, Map<String, List<List<Object>>> reportResultMap, String reportType, boolean isRight) {
         if (Objects.equals(reportType, ReportTypeEnum.RuiLin.getCode())) {
             setDataReportHeaderRuilin(dataReportHead, reportResultMap, isRight);
@@ -525,6 +734,7 @@
             setDataReportHeadMaq(dataReportHead, reportResultMap, isRight);
         }
     }
+
     private void setDataReportHeadMaq(DataReportHead dataReportHead, Map<String, List<List<Object>>> reportResultMap, boolean isRight) {
         ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "MAQHead.xlsx"));
         List<String> sheetNames = reader.getSheetNames();
@@ -545,6 +755,7 @@
             deleteNoRightKeys(dataReportHead, isRight, readList, i);
         }
     }
+
     private void setDataReportHeadSaq(DataReportHead dataReportHead, Map<String, List<List<Object>>> reportResultMap, boolean isRight) {
         ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "SAQHead.xlsx"));
         List<String> sheetNames = reader.getSheetNames();
@@ -565,18 +776,20 @@
             deleteNoRightKeys(dataReportHead, isRight, readList, i);
         }
     }
+
     private void setDataReportHeadJaq(DataReportHead dataReportHead, Map<String, List<List<Object>>> reportResultMap) {
         ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "JAQHead.xlsx"));
         List<String> sheetNames = reader.getSheetNames();
-        
+        // JAQ涓嶈浜哄彛瀛︼紝鎵�浠ヨclear
         List<Object> headSystem = dataReportHead.getHeadSystem();
         List<Object> headEnglish = dataReportHead.getHeadEnglish();
         for (String sheetName : sheetNames) {
             ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "JAQHead.xlsx"), sheetName);
             List<List<Object>> readList = readerSheet.read();
             if (Objects.equals("JAQ Input Data", sheetName)) {
+
                 List<Object> head = readList.get(0);
-                
+                // Name	AccessCode	Phone	Department + 浜哄彛瀛�
                 String[] heads = {"Name", "AccessCode", "Phone", "Department"};
                 List<Object> headList = CollUtil.toList(heads);
                 Set headExtends = new HashSet(headList);
@@ -585,6 +798,7 @@
                         headList.add(headSystem.get(i));
                     }
                 }
+
                 head.addAll(0, headList);
             }
             List<List<Object>> reportResultList = new ArrayList<>();
@@ -593,14 +807,17 @@
             reportResultList.add(readList.get(i++));
         }
     }
+
     private void setDataReportHeadCaq(DataReportHead dataReportHead, Map<String, List<List<Object>>> reportResultMap, boolean isRight) {
         ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "CAQHead.xlsx"));
+
         List<String> sheetNames = reader.getSheetNames();
         for (String sheetName : sheetNames) {
             ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "CAQHead.xlsx"), sheetName);
             List<List<Object>> readList = readerSheet.read();
             List<List<Object>> reportResultList = new ArrayList<>();
             reportResultMap.put(sheetName, reportResultList);
+
             int i = 0;
             dataReportHead.getHeadSystem().addAll(readList.get(i++));
             reportResultList.add(dataReportHead.getHeadSystem());
@@ -611,6 +828,7 @@
             deleteNoRightKeys(dataReportHead, isRight, readList, i);
         }
     }
+
     private void setDataReportHeaderRuilin(DataReportHead dataReportHead, Map<String, List<List<Object>>> reportResultMap, boolean isRight) {
         ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "RuiLinHead.xlsx"));
         List<String> sheetNames = reader.getSheetNames();
@@ -626,11 +844,14 @@
             deleteNoRightKeys(dataReportHead, isRight, readList, i);
             reportResultMap.put(sheetName, reportResultList);
         }
+
+
     }
+
     private void deleteNoRightKeys(DataReportHead dataReportHead, boolean isRight, List<List<Object>> readList, int i) {
         if (!isRight) {
-
-            
+//        if (true) {
+            // 闇�瑕佸墧闄ょ殑琛�
             Set<Object> rightSet = new HashSet();
             for (; i < readList.size(); i++) {
                 List<Object> objects = readList.get(i);
@@ -644,6 +865,7 @@
             deleteNoRight(rightSet, dataReportHead.getHeadThai());
         }
     }
+
     private void deleteNoRight(Set<Object> rightSet, List<Object> headSystem) {
         if (CollUtil.isEmpty(headSystem)) {
             return;
@@ -655,27 +877,32 @@
             }
         }
     }
+
     private void setDemograyMap(List<TExamReport> tExamReportList, DataReportHead dataReportHead, Map<String, Map<String, String>> demograpyMap) {
         Set<String> heavyDischargeDemography = new HashSet<>();
         for (TExamReport tExamReportIt : tExamReportList) {
-            
+            // 璇诲嚭浜哄彛瀛﹀彉閲�,闄嶇淮
             List<DemographyDataReportDto> demographyDataReportDtoList = setLocalDataReportByParamId(tExamReportIt);
             Map<String, String> demograpyValueMap = new HashMap<>();
             for (DemographyDataReportDto demographyDataReportDto : demographyDataReportDtoList) {
                 demograpyValueMap.put(demographyDataReportDto.getParamId(), demographyDataReportDto.getParamValue());
-                
+
+                // 鎺掗噸鐢�
                 if (heavyDischargeDemography.contains(demographyDataReportDto.getParamId())) {
                     continue;
                 } else {
                     heavyDischargeDemography.add(demographyDataReportDto.getParamId());
                 }
-                
+
+                // 娣诲姞鍚勭璇█鐨勮〃澶�
                 setDataReportDemography(dataReportHead, demographyDataReportDto);
             }
-            
+
+            // 浜哄彛瀛﹂敭鍜屽��
             demograpyMap.put(tExamReportIt.getId().toString(), demograpyValueMap);
         }
     }
+
     private void setDataReportDemography(DataReportHead dataReportHead, DemographyDataReportDto demographyDataReportDto) {
         dataReportHead.getHeadSystem().add(demographyDataReportDto.getParamId());
         List<DemographyDto> demographyDtoList = JsonUtil.parseArray(demographyDataReportDto.getLangCode(), DemographyDto.class);
@@ -683,8 +910,9 @@
         findLandCode(dataReportHead.getHeadEnglish(), demographyDtoList, "English");
         findLandCode(dataReportHead.getHeadThai(), demographyDtoList, "Thai");
     }
+
     private void findLandCode(List<Object> demographyHeadLang, List<DemographyDto> demographyDtoList, String lang) {
-        
+        // 鎵惧嚭涓枃鐨�
         boolean isLang = false;
         for (DemographyDto demographyDto : demographyDtoList) {
             if (Objects.equals(demographyDto.getLangType(), lang)) {
@@ -692,17 +920,20 @@
                 isLang = true;
             }
         }
+
         if (!isLang) {
             demographyHeadLang.add("");
         }
     }
+
     private void setExtracHead(DataMap<Integer, Object[]> dataMap, Object[] keys, List<Object[]> keyDemography, int position) {
-        
+        // ISP_T1	IM_T1	Inconsistency_T1
         if (position == 1) {
             keys[0] = "ISP_T1";
             keys[1] = "IM_T1";
             keys[2] = "Inconsistency_T1";
         }
+
         if (position == 2) {
             keys[0] = "鑷じ_T1";
             keys[1] = "鍗拌薄绠$悊_T1";
@@ -711,15 +942,18 @@
         }
         dataMap.put(position, ArrayUtil.addAll(keyDemography.get(position), keys));
     }
+
     private void setAllLangLocalDataValue(int keyPosition, List<DataMap> reportLocalList, Map<String, String> mapPara, Set<String> langTypeSet, List<Object[]> keyDemography) {
-        
+        // 绯荤粺鍙橀噺鍚嶅摢涓�琛�,绗竴琛�
         setAllLangLocalRowValue(keyPosition, reportLocalList, mapPara, keyDemography, langTypeSet.iterator().next(), "绯荤粺鍐呭彉閲忓悕");
+
         Map<String, Map<String, String>> multiLanguageMap = new HashedMap();
         setLangSystemV(multiLanguageMap);
         for (String langType : langTypeSet) {
             setAllLangLocalRowValue(keyPosition, reportLocalList, mapPara, keyDemography, langType, multiLanguageMap.get("Chinese").get(langType));
         }
     }
+
     private void setLangSystemV(Map<String, Map<String, String>> multiLanguageMap) {
         Map<String, String> langTypeChineseMap = new HashedMap();
         langTypeChineseMap.put("English", "瀵煎嚭鍚庡彉閲忓悕锛堣嫳鏂囷級");
@@ -727,22 +961,25 @@
         langTypeChineseMap.put("Thai", "瀵煎嚭鍚庡彉閲忓悕锛堟嘲鏂囷級");
         multiLanguageMap.put("Chinese", langTypeChineseMap);
     }
+
     private void setClientV(Map<String, String> langTypeChineseMap) {
         langTypeChineseMap.put("English", "Client");
         langTypeChineseMap.put("Chinese", "浼佷笟瀹㈡埛鍚嶇О");
         langTypeChineseMap.put("Thai", "Client");
     }
+
     private void setAllLangLocalRowValue(int keyPosition, List<DataMap> reportLocalList, Map<String, String> mapPara, List<Object[]> keyDemography, String langType, String systemVariable) {
         DataMap<String, String> reportLocalMap = reportLocalList.get(keyPosition);
-        
+        // 涓�琛�,琛岀殑paramid
         List<String> rowList = reportLocalMap.getKeys();
         List<String> rowValues = new ArrayList<>();
-        
+        // rowValues.add("绯荤粺鍙橀噺");
         rowValues.add(systemVariable);
+
         for (String row : rowList) {
-            
+            // json涓�
             String rows = mapPara.get(row);
-            
+            // 鍋氭垚map
             List<Map<String, String>> langMapList = JsonUtil.parseObject(rows, ArrayList.class);
             String langCode = "";
             for (Map<String, String> langMap : langMapList) {
@@ -752,12 +989,14 @@
             }
             rowValues.add(langCode);
         }
-        
+
+        // 浼佷笟鐢ㄦ埛
         Map<String, String> clientLangMap = new HashedMap();
         setClientV(clientLangMap);
         rowValues.add(clientLangMap.get(langType));
         keyDemography.add(rowValues.toArray());
     }
+
     private void setDataReportLangSet(Map<String, String> mapPara, Set<String> langTypeSet) {
         for (Map.Entry<String, String> entry : mapPara.entrySet()) {
             List<Map<String, String>> langMapList = JsonUtil.parseObject(entry.getValue(), ArrayList.class);
@@ -766,6 +1005,7 @@
             }
         }
     }
+
     private List<DemographyDataReportDto> setLocalDataReportByParamId(TExamReport it) {
         EntDemographyInfo entDemographyInfoAsParam = new EntDemographyInfo();
         entDemographyInfoAsParam.setMemberId(it.getMemberId().longValue());
@@ -781,25 +1021,32 @@
         }
         return demographyDataReportDtoList;
     }
+
     private void setTaiInterfaceContentMap(TExamReport it, DataMap<String, String> dataReportMap, boolean isRight, List<DataMap> reportTaiList) {
         try {
             DataMap<String, String> dataReportTaiMap = new DataMap<>();
             List<ReportAPIResult> reportAPIResultList = JsonUtil.parseArray(it.getInterfaceContent(), ReportAPIResult.class);
             DataReport dataReportTai = new DataReport();
-            
+
+            // 绗竴娈�
             set1PartDataReport(dataReportMap, dataReportTaiMap, isRight, reportAPIResultList, dataReportTai);
-            
+
+            // 绗簩娈�,涓嶈鏉冮檺,
             setNoRightPart(dataReportMap, dataReportTaiMap, reportAPIResultList, dataReportTai);
-            
+
+            // 绗簩娈�,瑕佹潈闄�
             set2PartDataReport(dataReportMap, dataReportTaiMap, isRight, reportAPIResultList, dataReportTai);
-            
+
+            // 瑕佹潈闄�,鏈�鍚庨偅涓�鐐筊eport
             setEndPartDataReport(dataReportMap, dataReportTaiMap, reportAPIResultList, dataReportTai, isRight);
-            
+
+            // 娉板浗鍥㈤槦鐨勬暟鎹�
             reportTaiList.add(dataReportTaiMap);
         } catch (Exception e) {
             logger.error("  id:" + it.getId() + "  memberName" + it.getMemberName() + "  " + it.getInterfaceContent());
         }
     }
+
     private void setEndPartDataReport(DataMap<String, String> dataReportMap, DataMap<String, String> dataReportTaiMap, List<ReportAPIResult> reportAPIResultList, DataReport dataReportTai, boolean isRight) {
         if (!isRight) {
             return;
@@ -814,6 +1061,7 @@
             setDataReportValueMap(dataReportTaiMap, dataReportTai);
         }
     }
+
     private void set2PartDataReport(DataMap<String, String> dataReportMap, DataMap<String, String> dataReportTaiMap, boolean isRight, List<ReportAPIResult> reportAPIResultList, DataReport dataReportTai) {
         if (isRight) {
             List<String> keepPartOrderList = new ArrayList<>();
@@ -825,7 +1073,7 @@
                 setDataReportValueMap(dataReportMap, dataReportTai);
                 setDataReportValueMap(dataReportTaiMap, dataReportTai);
             }
-            
+            // 鐒跺悗棰樼洰
             Map<String, String> answerDataMap = new LinkedHashMap<>();
             Map<String, String> answerDataNoOrder = reportAPIResultList.get(1).getAnswerData();
             answerDataNoOrder.entrySet().stream().sorted(Map.Entry.comparingByKey())
@@ -838,6 +1086,7 @@
             }
         }
     }
+
     private void setNoRightPart(DataMap<String, String> dataReportMap, DataMap<String, String> dataReportTaiMap, List<ReportAPIResult> reportAPIResultList, DataReport dataReportTai) {
         List<String> keepPartOrderList = new ArrayList<>();
         keepPartOrderList.addAll(Arrays.asList("P_Flex01,P_Creat02,P_Analyt03,P_Indep04,P_Achiev05,P_Initi06,P_Persis07,P_Thorou08,P_Depend09,P_Plan10,P_Integr11,P_Energy12,P_Social13,P_Lead14,P_Influ15,P_Team16,P_Empath17,P_Polite18,P_Regula19,P_ManStr,P_Confid21,P_Mind22,P_SDE23,P_IM24,P_INCON25,P_Open26,P_Consci27,P_Extro28,P_Agree29,P_EmSt30,P_Task31,P_People32,P_Judg33,STDA,DA,SLDA,SLAG,AG,STAG".split(",")));
@@ -849,20 +1098,22 @@
             setDataReportValueMap(dataReportTaiMap, dataReportTai);
         }
     }
+
     private void set1PartDataReport(DataMap<String, String> dataReportMap, DataMap<String, String> dataReportTaiMap, boolean isRight, List<ReportAPIResult> reportAPIResultList, DataReport dataReportTai) {
         if (isRight) {
-            
+            // 瑕佹潈闄愶紝绗竴娈�
             List<String> keepPartOrderList = new ArrayList<>();
             keepPartOrderList.addAll(Arrays.asList("P_SDE_T1,P_IM_T1,P_INCON_T1,Signal,INC1T1,INC2T1,INC3T1,INC4T1,INC5T1,INC6T1,INC7T1,INC8T1".split(",")));
             Map<String, String> taiDataMap = reportAPIResultList.get(0).getData();
             taiDataMap.put("Signal", reportAPIResultList.get(0).getSignal());
-            
+            // 绗竴娈电殑娉板浗杩斿洖
             for (String keepPartOrder : keepPartOrderList) {
                 dataReportTai.setField(keepPartOrder);
                 dataReportTai.setValue(taiDataMap.get(keepPartOrder));
                 setDataReportValueMap(dataReportMap, dataReportTai);
                 setDataReportValueMap(dataReportTaiMap, dataReportTai);
             }
+
             Map<String, String> answerDataMap = new LinkedHashMap<>();
             Map<String, String> answerDataNoOrder = reportAPIResultList.get(0).getAnswerData();
             answerDataNoOrder.entrySet().stream().sorted(
@@ -871,10 +1122,11 @@
                         public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                             int key1 = Integer.valueOf(o1.getKey().substring(3));
                             int key2 = Integer.valueOf(o2.getKey().substring(3));
-                            return key1 - key2;  
+                            return key1 - key2;  // 闄嶅簭鎺掑簭锛屽鏋滄兂鍗囧簭灏卞弽杩囨潵
                         }
                     }
             ).forEachOrdered(x -> answerDataMap.put(x.getKey(), x.getValue()));
+
             for (Map.Entry<String, String> entry : answerDataMap.entrySet()) {
                 dataReportTai.setField(entry.getKey());
                 dataReportTai.setValue(entry.getValue());
@@ -883,43 +1135,52 @@
             }
         }
     }
+
     private void setContentMap(TExamReport it, List<DataReport> dataReportList, DataMap<String, String> dataReportMap, List<DataMap> reportLocalList) {
         DataMap<String, String> dataReportLocalMap = new DataMap<>();
-        
+        // 绯荤粺鍙橀噺
         dataReportMap.put("variableNamesInTheSystem", "");
         dataReportList.stream().forEach(dataReport -> {
-            
+            // 鍒ゆ柇鏉冮檺
             if (StringUtils.isNotEmpty(dataReport.getRight())) {
                 if (StringUtils.equals((UserTypeEnum.SYS_USER.getUserType()), dataReport.getRight())) {
                     setDataReportMap(dataReportMap, dataReport);
                     setDataReportMap(dataReportLocalMap, dataReport);
+
                 }
             } else {
                 setDataReportMap(dataReportMap, dataReport);
                 setDataReportMap(dataReportLocalMap, dataReport);
             }
         });
+
         dataReportMap.put("Client", it.getUserName());
         reportLocalList.add(dataReportLocalMap);
     }
+
     private void setDataReportMap(DataMap<String, String> filed, DataReport dataReport) {
         filed.put(dataReport.getField(), iExamUtilService.getLangOrLocalLangString(dataReport.getLangType(), dataReport.getValue()));
     }
+
     private void setDataReportValueMap(DataMap<String, String> filed, DataReport dataReport) {
         filed.put(dataReport.getField(), dataReport.getValue());
     }
-    
+
+    // 绠�鍗曟姤鍛�
     @RequiresPermissions("exam:report:basisExport")
     @PostMapping("/exportBasisReport/{ids}/{langType}")
     @ResponseBody
     public AjaxResult exportBasisReport(@PathVariable("ids") String[] ids, @PathVariable("langType") String langType) {
         List<TExamReport> tExamReportList = tExamReportService.selectTExamReportByIds(ids);
+
         List<TReportTemplate> tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamReportList.get(0).getReportTemplateId());
+
         Map<String, ReportTypeEnum> reportTypeEnumMap = new HashMap<>();
         for (com.ots.common.enums.ReportTypeEnum reportTypeEnumTemp : ReportTypeEnum.values()) {
             reportTypeEnumMap.put(reportTypeEnumTemp.getCode(), reportTypeEnumTemp);
         }
-        
+
+        // 瀵煎嚭鍩虹鐗堟湰
         String questionTemplateId = tExamReportList.get(0).getQuestionTemplateId();
         String templateType = "Brief";
         String reportType = "";
@@ -927,7 +1188,7 @@
         String fileName = "";
         TReportTemplate tReportTemplate = tExamReportService.getReportTemplate(questionTemplateId, langType, templateType);
         try {
-            
+            // 澶勭悊鐫块偦
             for (TReportTemplate tReportTemplateTemp : tReportTemplateList) {
                 if (Objects.equals(tReportTemplateTemp.getReportType(), "RuiLin")) {
                     tReportTemplate = tReportTemplateTemp;
@@ -936,6 +1197,7 @@
                     break;
                 }
             }
+
             reportType = tReportTemplate.getReportType();
             path = itReportTemplateService.selectTReportTemplateFilePath(tReportTemplate);
             if (StringUtils.isEmpty(path)) {
@@ -945,6 +1207,7 @@
             e.printStackTrace();
             return AjaxResult.error(MessageUtils.message("jsp.exam.report.noTemplate"));
         }
+
         List<String> deleteFileStrList = new ArrayList<>();
         List<String> deleteStrList = new ArrayList<>();
         List<String> fileNameList = new ArrayList<>();
@@ -952,7 +1215,8 @@
         tExamReportService.setExportBaseOrDetailReportData(tExamReportList, deleteStrList, fileNameList, tReportTemplate);
         return wordUtil.exportBaseOrDetailReport(path, deleteFileStrList, fileNameList);
     }
-    
+
+    // 璇︾粏鎶ュ憡
     @RequiresPermissions("exam:report:detailReportexport")
     @PostMapping("/exportDetailedReport/{ids}/{langType}")
     @ResponseBody
@@ -963,39 +1227,47 @@
             tExamReport.setId(Long.valueOf(id));
             tExamReportList.add(tExamReport);
         }
-        
+
+
+        // 闄勪欢鐨勪綅缃�,鍏蜂綋閭欢闄勪欢鐨勪綅缃�
         List<String> fileNameResult = new ArrayList<>();
-        
+        // 瑕佸垹闄ょ殑鏂囦欢
         List<String> deleteStrList = new ArrayList<>();
+
         List<String> exportFileList = new ArrayList<>();
+
         List<TExamReport> tExamReports = tExamReportService.selectTExamReportByIds(ids);
         TExamReport tExamReport = tExamReports.get(0);
         String reportType = getReportType(tExamReport);
         if (Objects.equals("JAQ", reportType)) {
             dealJAQReport(deleteStrList, exportFileList, tExamReports);
         } else {
-            
+            // MAQ,SAQ,CAQ
             dealReprotFile(tExamReportList, fileNameResult, deleteStrList, exportFileList, reportType);
         }
+
         WordUtil wordUtil = new WordUtil();
         return wordUtil.exportBaseOrDetailReport("DataReport", deleteStrList, exportFileList);
     }
-    
+
+    // jaq鎶ュ憡 dealJAQReport
     private void dealJAQReport(List<String> deleteStrList, List<String> exportFileList, List<TExamReport> tExamReports) throws IOException {
         TExamReport tExamReport = tExamReports.get(0);
         ReportAPIResult reportAPIResult = getThaiJAQData(tExamReports);
-        
+        // 娉板浗鏁版嵁
         Map<String, String> thaiData = reportAPIResult.getData();
-        
+
+        // 鐢熸垚JAQ鎶ュ憡
         List<TReportTemplate> tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamReport.getReportTemplateId());
         Map<String, Object> textMap = new HashMap<>();
-        
+
+        // 鏋勯�犺〃
         textMap.putAll(thaiData);
         WordUtil wordUtil = new WordUtil();
         textMap.put("sendEmailFileName", "JAQ");
         RelatedParty relatedParty = memberService.queryProdidByToken(tExamReport.getTokenId());
         for (TReportTemplate tReportTemplate : tReportTemplateList) {
-            
+            // 瀵圭涓�寮犺〃鐨勬枃瀛楄繘琛岀炕璇�
             Map<String, String> jaqMap = getJaqQuestionByPermanentIdMap(tReportTemplate, tExamReport);
             changTable1(textMap, tReportTemplate, thaiData);
             changTable2(textMap, tReportTemplate, thaiData);
@@ -1008,12 +1280,14 @@
             textMap.put("superiorPosition", relatedParty.getSuperiorPosition());
             String zipFileName = wordUtil.makeReportFile(tReportTemplate.getLocation(), tReportTemplate, textMap, null, deleteStrList);
             exportFileList.add(zipFileName);
-            
+
+            // 鍒犻櫎瑕佸垹鐨�
             wordUtil.deleteFileByStr(deleteStrList);
         }
     }
+
     private void changTable4(Map<String, Object> textMap, TReportTemplate tReportTemplate, Map<String, String> jaqMap, Map<String, String> thaiData) {
-        
+        // 鏇挎崲鍊�
         for (Integer i = 1; i <= 3; i++) {
             textMap.put("T4com1item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com1item" + i.toString()))));
             textMap.put("T4com2item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com2item" + i.toString()))));
@@ -1024,25 +1298,32 @@
             textMap.put("T4com7item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com7item" + i.toString()))));
             textMap.put("T4com8item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com8item" + i.toString()))));
         }
+
         Map<String, String> tagMap = getTranslationCapability();
-        
+
+        // 鏇挎崲鍊�
         for (Integer i = 1; i <= 12; i++) {
             textMap.put("T4com" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), tagMap.get(thaiData.get("T4com" + i.toString()))));
         }
     }
+
     private void changTable3(Map<String, Object> textMap, TReportTemplate tReportTemplate, Map<String, String> jaqMap, Map<String, String> thaiData) {
-        
+
+        // 鏇挎崲鍊�
         for (Integer i = 1; i <= 25; i++) {
             textMap.put("T3item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T3item" + i.toString()))));
         }
+
         WordUtil.changeJAQStyle(textMap, 2, 25, "T3Line");
-        
+
+        // 鑳滀换鍔涢偅涓�鍒楁浛鎹�
         Map<String, String> tagMap = getTranslationCapability();
-        
+        // 鏇挎崲鍊�
         for (Integer i = 1; i <= 25; i++) {
             textMap.put("T3com" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), tagMap.get(thaiData.get("T3com" + i.toString()))));
         }
     }
+
     @NotNull
     private Map<String, String> getJaqQuestionByPermanentIdMap(TReportTemplate tReportTemplate, TExamReport tExamReport) {
         List<QuestionReport> questionReports = JsonUtil.toJsonListObject(tExamReport.getQuestionReport(), QuestionReport.class);
@@ -1050,22 +1331,27 @@
         for (QuestionReport questionReport : questionReports) {
             jaqMap.put(questionReport.getPermanentId(), questionReport.getQuestionTitle());
         }
-        
+
+        // 鍙栫壒瀹氱殑閭g璇█鐢熸垚鎶ュ憡
         List<TQuestion> tQuestions = itQuestionService.selectTQuestionByPermanentIds(new ArrayList<>(jaqMap.keySet()));
+
         for (TQuestion tQuestion : tQuestions) {
             QuestionObject questionObject = JsonUtil.parseObject(tQuestion.getContent(), QuestionObject.class);
             jaqMap.put(tQuestion.getPermanentId(), ExamUtil.getLangString(tReportTemplate.getLangType(), questionObject.getTitleContent()));
         }
         return jaqMap;
     }
+
     private void changTable1(Map<String, Object> textMap, TReportTemplate tReportTemplate, Map<String, String> thaiData) {
         Map<String, String> tagMap = getTranslationCapability();
-        
+
+        // 鏇挎崲鍊�
         for (Integer i = 1; i <= 12; i++) {
             String textValue = thaiData.get("T1com" + i.toString());
             textMap.put("T1com" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), tagMap.get(textValue)));
         }
     }
+
     private Map<String, String> getTranslationCapability() {
         ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "JAQTable1Tag.xlsx"));
         List<List<Object>> readList = reader.read();
@@ -1080,30 +1366,37 @@
         }
         return tagMap;
     }
+
     private void changTable2(Map<String, Object> textMap, TReportTemplate tReportTemplate, Map<String, String> thaiData) {
         Map<String, String> tagMap = getTranslationCapability();
-        
+
+        //JAQ涓婇鑹�
         WordUtil.changeJAQStyle(textMap, 1, 12, "T2Line");
-        
+
+        // 鏇挎崲鍊�
         for (Integer i = 1; i <= 12; i++) {
             textMap.put("T2com" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), tagMap.get(thaiData.get("T2com" + i.toString()))));
         }
     }
+
     private ReportAPIResult getThaiJAQData(List<TExamReport> tExamReports) {
         List<JAQPersons> persons = new ArrayList<>();
         Integer personCout = 0;
         for (TExamReport tExamReport : tExamReports) {
-            
+            // 浜虹殑淇℃伅
             Map<String, String> personInfo = new LinkedHashMap<>();
             personInfo.put("accessCode", tExamReport.getTokenId());
             personInfo.put("fullName", tExamReport.getMemberName());
-            
+            // 绛旈鐨勪汉
             JAQPersons person = new JAQPersons();
             person.setPersonInfo(personInfo);
-            
+
+            // 绛旈鐨勯�夐」
             Map<String, String> personPoints = new LinkedHashMap<>();
             person.setPersonPoints(personPoints);
-            
+
+            // 閫犳暟鎹�,璁板緱灞忚斀锛岄�爅aq鏁版嵁
+//            makeJAQData(personPoints);
 
             List<QuestionReport> questionReportList = JsonUtil.parseArray(tExamReport.getQuestionReport(), QuestionReport.class);
             for (QuestionReport questionReport : questionReportList) {
@@ -1115,6 +1408,7 @@
             persons.add(person);
             personCout++;
         }
+
         Map<String, List<JAQPersons>> data = new LinkedHashMap<>();
         data.put("persons", persons);
         HolderInfo info = new HolderInfo();
@@ -1134,6 +1428,7 @@
         reportAPIResult.setAnswerData(data);
         return reportAPIResult;
     }
+
     private void makeJAQData(Map<String, String> personPoints) {
         String topics = "JAQ0001a,JAQ0001b,JAQ0002a,JAQ0002b,JAQ0003a,JAQ0003b,JAQ0004a,JAQ0004b,JAQ0005a,JAQ0005b,JAQ0006a,JAQ0006b,JAQ0007a,JAQ0007b,JAQ0008a,JAQ0008b,JAQ0009a,JAQ0009b,JAQ0010a,JAQ0010b,JAQ0011a,JAQ0011b,JAQ0012a,JAQ0012b,JAQ0013a,JAQ0013b,JAQ0014a,JAQ0014b,JAQ0015a,JAQ0015b,JAQ0016a,JAQ0016b,JAQ0017a,JAQ0017b,JAQ0018a,JAQ0018b,JAQ0019a,JAQ0019b,JAQ0020a,JAQ0020b,JAQ0021a,JAQ0021b,JAQ0022a,JAQ0022b,JAQ0023a,JAQ0023b,JAQ0024a,JAQ0024b,JAQ0025a,JAQ0025b,JAQ0026a,JAQ0026b,JAQ0027a,JAQ0027b,JAQ0028a,JAQ0028b,JAQ0029a,JAQ0029b,JAQ0030a,JAQ0030b,JAQ0031a,JAQ0031b,JAQ0032a,JAQ0032b,JAQ0033a,JAQ0033b,JAQ0034a,JAQ0034b,JAQ0035a,JAQ0035b,JAQ0036a,JAQ0036b,JAQ0037a,JAQ0037b,JAQ0038a,JAQ0038b,JAQ0039a,JAQ0039b,JAQ0040a,JAQ0040b,JAQ0041a,JAQ0041b,JAQ0042a,JAQ0042b,JAQ0043a,JAQ0043b,JAQ0044a,JAQ0044b,JAQ0045a,JAQ0045b,JAQ0046a,JAQ0046b,JAQ0047a,JAQ0047b,JAQ0048a,JAQ0048b,JAQ0049a,JAQ0049b,JAQ0050a,JAQ0050b,JAQ0051a,JAQ0051b,JAQ0052a,JAQ0052b,JAQ0053a,JAQ0053b,JAQ0054a,JAQ0054b,JAQ0055a,JAQ0055b,JAQ0056a,JAQ0056b,JAQ0057a,JAQ0057b,JAQ0058a,JAQ0058b,JAQ0059a,JAQ0059b,JAQ0060a,JAQ0060b,JAQ0061a,JAQ0061b,JAQ0062a,JAQ0062b,JAQ0063a,JAQ0063b,JAQ0064a,JAQ0064b,JAQ0065a,JAQ0065b,JAQ0066a,JAQ0066b,JAQ0067a,JAQ0067b,JAQ0068a,JAQ0068b,JAQ0069a,JAQ0069b,JAQ0070a,JAQ0070b,JAQ0071a,JAQ0071b,JAQ0072a,JAQ0072b,JAQ0073a,JAQ0073b,JAQ0074a,JAQ0074b,JAQ0075a,JAQ0075b,JAQ0076a,JAQ0076b,JAQ0077a,JAQ0077b,JAQ0078a,JAQ0078b,JAQ0079a,JAQ0079b,JAQ0080a,JAQ0080b,JAQ0081a,JAQ0081b,JAQ0082a,JAQ0082b,JAQ0083a,JAQ0083b,JAQ0084a,JAQ0084b,JAQ0085a,JAQ0085b,JAQ0086a,JAQ0086b,JAQ0087a,JAQ0087b,JAQ0088a,JAQ0088b,JAQ0089a,JAQ0089b,JAQ0090a,JAQ0090b,JAQ0091a,JAQ0091b,JAQ0092a,JAQ0092b,JAQ0093a,JAQ0093b,JAQ0094a,JAQ0094b,JAQ0095a,JAQ0095b,JAQ0096a,JAQ0096b,JAQ0097a,JAQ0097b,JAQ0098a,JAQ0098b,JAQ0099a,JAQ0099b,JAQ0100a,JAQ0100b,JAQ0101a,JAQ0101b,JAQ0102a,JAQ0102b,JAQ0103a,JAQ0103b,JAQ0104a,JAQ0104b,JAQ0105a,JAQ0105b,JAQ0106a,JAQ0106b,JAQ0107a,JAQ0107b,JAQ0108a,JAQ0108b,JAQ0109a,JAQ0109b,JAQ0110a,JAQ0110b,JAQ0111a,JAQ0111b,JAQ0112a,JAQ0112b,JAQ0113a,JAQ0113b,JAQ0114a,JAQ0114b,JAQ0115a,JAQ0115b,JAQ0116a,JAQ0116b,JAQ0117a,JAQ0117b,JAQ0118a,JAQ0118b,JAQ0119a,JAQ0119b,JAQ0120a,JAQ0120b,JAQ0121a,JAQ0121b,JAQ0122a,JAQ0122b,JAQ0123a,JAQ0123b,JAQ0124a,JAQ0124b,JAQ0125a,JAQ0125b,JAQ0126a,JAQ0126b,JAQ0127a,JAQ0127b,JAQ0128a,JAQ0128b,JAQ0129a,JAQ0129b,JAQ0130a,JAQ0130b,JAQ0131a,JAQ0131b,JAQ0132a,JAQ0132b,JAQ0133a,JAQ0133b,JAQ0134a,JAQ0134b,JAQ0135a,JAQ0135b";
         String[] split = topics.split(",");
@@ -1141,14 +1436,17 @@
             personPoints.put(item, "2");
         });
     }
+
     private void dealReprotFile(List<TExamReport> tExamReportList, List<String> fileNameResult, List<String> deleteStrList, List<String> exportFileList, String reportType) {
         for (TExamReport tExamReport : tExamReportList) {
             fileNameResult.clear();
-            
+            // 閲嶆柊璋冪敤娉板浗鍥㈤槦鐨勬帴鍙o紝閲岄潰浼氭洿鏂版暟鎹簱
             TExamReport tExamReportComplete = tExamReportService.selectTExamReportById(tExamReport.getId());
             itExamPaperService.recallThaiInterface(tExamReportComplete, reportType);
-            
+
+            // 寮�濮嬬敓鎴愭姤鍛�
             TExamReport tExamReportResult = tExamReportService.getReportFromTemplate(tExamReport, fileNameResult, deleteStrList);
+
             if (tExamReportResult == null) {
                 continue;
             }
@@ -1156,31 +1454,41 @@
                 String[] exportFiles = exportFile.split("/");
                 exportFileList.add(exportFiles[exportFiles.length - 1]);
             }
-            
+
+            // 鏇存柊鍘嗗彶鍦板潃
             updateHisReportAddress(fileNameResult, deleteStrList, tExamReportResult);
         }
     }
+
     private void updateHisReportAddress(List<String> fileNameResult, List<String> deleteStrList, TExamReport tExamReportResult) {
-        
+        // 涓嬭浇鍘嗗彶鏂囦欢
         if (StringUtils.isEmpty(tExamReportResult.getReportAddress())) {
             return;
         }
+
         TExamReport tExamReportUpdate = new TExamReport();
         tExamReportUpdate.setId(tExamReportResult.getId());
         tExamReportUpdate.setReportAddress(JsonUtil.toJSONString(fileNameResult));
         tExamReportUpdate.setReportAddressNew(JsonUtil.toJSONString(fileNameResult));
         tExamReportService.updateTExamReport(tExamReportUpdate);
     }
+
     private Map<String, Map<String, String>> getDataFromExcel() {
         ExcelUtil<String> excelUtil = new ExcelUtil<>(String.class);
         return excelUtil.getMAQFromExcel();
     }
-    
+
+    /**
+     * 鏂板璇勬祴鎶ュ憡
+     */
     @GetMapping("/add")
     public String add() {
         return prefix + "/add";
     }
-    
+
+    /**
+     * 鏂板淇濆瓨璇勬祴鎶ュ憡
+     */
     @RequiresPermissions("exam:report:add")
     @Log(title = "璇勬祴鎶ュ憡", businessType = BusinessType.INSERT)
     @PostMapping("/add")
@@ -1188,14 +1496,20 @@
     public AjaxResult addSave(TExamReport tExamReport) {
         return toAjax(tExamReportService.insertTExamReport(tExamReport));
     }
-    
+
+    /**
+     * 淇敼璇勬祴鎶ュ憡
+     */
     @GetMapping("/edit/{id}")
     public String edit(@PathVariable("id") Long id, ModelMap mmap) {
         TExamReport tExamReport = tExamReportService.selectTExamReportById(id);
         mmap.put("tExamReport", tExamReport);
         return prefix + "/edit";
     }
-    
+
+    /**
+     * 淇敼淇濆瓨璇勬祴鎶ュ憡
+     */
     @RequiresPermissions("exam:report:edit")
     @Log(title = "璇勬祴鎶ュ憡", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
@@ -1203,7 +1517,10 @@
     public AjaxResult editSave(TExamReport tExamReport) {
         return toAjax(tExamReportService.updateTExamReport(tExamReport));
     }
-    
+
+    /**
+     * 鍒犻櫎璇勬祴鎶ュ憡
+     */
     @RequiresPermissions("exam:report:remove")
     @Log(title = "璇勬祴鎶ュ憡", businessType = BusinessType.DELETE)
     @PostMapping("/remove")
@@ -1211,7 +1528,10 @@
     public AjaxResult remove(String ids) {
         return toAjax(tExamReportService.deleteTExamReportByIds(ids));
     }
-    
+
+    /**
+     * 瀹℃壒鐘舵�佷慨鏀�
+     */
     @Log(title = "浼佷笟鐢ㄦ埛瀹℃壒", businessType = BusinessType.UPDATE)
     @RequiresPermissions("exam:report:edit")
     @PostMapping("/changeStatus")
@@ -1219,7 +1539,10 @@
     public AjaxResult changeStatus(TExamReport tExamReport) {
         return toAjax(tExamReportService.changeStatus(tExamReport));
     }
-    
+
+    /**
+     * 鎵归噺鏇存柊瀹℃壒鐘舵��
+     */
     @RequiresPermissions("exam:report:edit")
     @Log(title = "鎵归噺鏇存柊瀹℃壒鐘舵��", businessType = BusinessType.DELETE)
     @PostMapping("/batchVerify")
@@ -1227,13 +1550,14 @@
     public AjaxResult batchVerify(String ids) {
         return toAjax(tExamReportService.updateTexamReportByIds(ids, "1"));
     }
+
     @GetMapping("/langType/{userIds}/{productId}")
     public String getLangType(@PathVariable("userIds") Long[] userIds, @PathVariable("productId") Long productId, ModelMap mmap) {
         List<DictData> dictDataList = tExamReportService.getType(userIds[0]);
         try {
             TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(productId);
             List<TReportTemplate> tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamPaper.getReportTemplateId());
-            
+            // 鐫块偦鐨勫彧鏈変腑鏂�
             for (TReportTemplate tReportTemplate : tReportTemplateList) {
                 if ("RuiLin".equals(tReportTemplate.getReportType())) {
                     for (DictData dictData : dictDataList) {
@@ -1247,31 +1571,39 @@
                 }
             }
         } catch (Exception e) {
+
         }
+
         mmap.put("dictDatas", dictDataList);
         return prefix + "/report::langTypeDiv";
     }
+
     @PostMapping("/testerReport/{memberId}")
     @ResponseBody
     public AjaxResult getTesterReport(@PathVariable Integer memberId) {
         TExamReport tExamReport = new TExamReport();
         tExamReport.setMemberId(memberId);
-        
+        // 闄勪欢鐨勪綅缃�,鍏蜂綋閭欢闄勪欢鐨勪綅缃�
         List<String> fileNameResult = new ArrayList<>();
-        
+        // 瑕佸垹闄ょ殑鏂囦欢
         List<String> deleteStrList = new ArrayList<>();
+
         WordUtil wordUtil = new WordUtil();
+
         TExamReport tExamReportResult = tExamReportService.getReportFromTemplate(tExamReport, fileNameResult, deleteStrList);
         if (tExamReportResult == null) {
             return AjaxResult.success("绛旈鏈畬鎴愶紒");
         }
+
         List<String> exportFileList = new ArrayList<>();
         for (String exportFile : fileNameResult) {
             String[] exportFiles = exportFile.split("/");
             exportFileList.add(exportFiles[exportFiles.length - 1]);
         }
+
         return wordUtil.exportBaseOrDetailReport(tExamReportResult.getMemberName(), deleteStrList, exportFileList);
     }
+
     @PostMapping("/exportSendedReport/{ids}")
     @ResponseBody
     public AjaxResult getTesterReport(@PathVariable String[] ids) {
@@ -1286,6 +1618,7 @@
                     fileNameList.add(addresses[addresses.length - 1]);
                 }
             }
+
             return wordUtil.exportZipKeepFiles(MessageUtils.message("jsp.exam.report.sendedReport"), new ArrayList<>(), fileNameList);
         } catch (FileNotFoundException e) {
             e.printStackTrace();
@@ -1294,7 +1627,10 @@
         }
         return AjaxResult.error(MessageUtils.message("jsp.exam.report.noHisReport"));
     }
-    
+
+    /**
+     * 鏌ヨ璇勬祴閭�璇峰彂閫佷换鍔″垪琛�
+     */
     @RequiresPermissions("exam:hrEmailReport:view")
     @PostMapping("/hrSendlogList")
     @ResponseBody
@@ -1302,12 +1638,13 @@
         startPage();
         tExamReport.setFinish(1);
         tExamReport.setSendHrStatusList(Arrays.asList(1, 3));
+
         User sysUser = ShiroUtils.getSysUser();
         String userType = sysUser.getUserType();
         if (UserTypeEnum.ENT_USER.getUserType().equals(userType)) {
             tExamReport.setUserId(sysUser.getUserId());
         }
-        
+        //鍒嗛攢鍟嗗彲浠ョ湅鍒板垎閿�鍟嗕笅鐨勪紒涓氫俊鎭�
         if (UserTypeEnum.DIS_USER.getUserType().equals(userType)) {
             SysUserExtend sysUserExtend = new SysUserExtend();
             sysUserExtend.setParentUserId(sysUser.getUserId());
@@ -1319,12 +1656,14 @@
         List<TExamReport> list = tExamReportService.selectTExamReportList(tExamReport);
         return getDataTable(list);
     }
+
     @RequiresPermissions("exam:hrEmailReport:view")
     @GetMapping("/hrSendlog/{testId}")
     public String hrSendlog(@PathVariable Long testId,ModelMap mmap) {
         mmap.put("testId",testId);
         return "exam/hrSendlog/hrSendlog";
     }
+
     @RequiresPermissions("exam:hremail:reissue")
     @GetMapping("/sendEmail/{id}")
     @ResponseBody

--
Gitblit v1.9.1