package com.ots.project.exam.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelWriter; import cn.hutool.poi.excel.StyleSet; import com.alibaba.fastjson.JSON; import com.ots.common.enums.LangTypeEnum; import com.ots.common.enums.ReportTypeEnum; import com.ots.common.enums.UserTypeEnum; import com.ots.common.utils.DateUtils; import com.ots.common.utils.MessageUtils; import com.ots.common.utils.StringUtils; import com.ots.common.utils.Threads; import com.ots.common.utils.poi.ExcelUtil; import com.ots.common.utils.poi.WordUtil; import com.ots.common.utils.security.ShiroUtils; import com.ots.framework.aspectj.lang.annotation.Log; import com.ots.framework.aspectj.lang.enums.BusinessType; import com.ots.framework.config.EssConfig; import com.ots.framework.web.controller.BaseController; import com.ots.framework.web.domain.AjaxResult; import com.ots.framework.web.page.TableDataInfo; import com.ots.framework.web.service.DictService; import com.ots.project.exam.domain.EntDemographyInfo; import com.ots.project.exam.domain.EntTestPackage; import com.ots.project.exam.domain.SysUserExtend; import com.ots.project.exam.domain.TExamPaper; import com.ots.project.exam.domain.TExamReport; import com.ots.project.exam.domain.TQuestion; import com.ots.project.exam.domain.TReportTemplate; import com.ots.project.exam.dto.DataMap; import com.ots.project.exam.dto.DataReport; import com.ots.project.exam.dto.DataReportHead; import com.ots.project.exam.dto.DemographyDataReportDto; import com.ots.project.exam.dto.DemographyDto; import com.ots.project.exam.dto.JAQPersons; 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.service.IEntDemographyInfoService; import com.ots.project.exam.service.IEntTestPackageService; import com.ots.project.exam.service.ISysUserExtendService; import com.ots.project.exam.service.ITExamPaperService; import com.ots.project.exam.service.ITExamReportService; import com.ots.project.exam.service.ITQuestionService; import com.ots.project.exam.service.ITReportTemplateService; import com.ots.project.exam.service.MemberService; import com.ots.project.exam.service.ReportCalculationServices; import com.ots.project.exam.service.impl.TExamPaperServiceImpl; import com.ots.project.exam.viewmodel.QuestionEditRequestVM; import com.ots.project.system.dict.domain.DictData; import com.ots.project.system.user.domain.User; import com.ots.project.tool.BarChart; import com.ots.project.tool.exam.ExamUtil; import com.ots.project.tool.exam.JsonUtil; import com.ots.project.tool.gen.service.IExamUtilService; import com.ots.project.tool.report.ReportResultData; import com.ots.project.tool.report.reportCalculation.request.CaqRequest; import com.ots.project.tool.report.reportCalculation.request.HolderInfo; import com.ots.project.tool.report.reportCalculation.response.ReportAPIResult; import org.apache.commons.collections.map.HashedMap; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; 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; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; 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 @RequestMapping("/exam/report") public class TExamReportController extends BaseController { private static final Logger logger = LoggerFactory.getLogger(Threads.class); @Autowired BarChart barChart; private String prefix = "exam/report"; @Autowired private ITExamReportService tExamReportService; @Autowired private DictService dictService; @Autowired private IExamUtilService examUtilService; @Autowired private ITReportTemplateService itReportTemplateService; @Autowired 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; @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"); List 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) { mmap.put("prodId", prodId); 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) { EntTestPackage entTestPackage = entTestPackageService.selectEntTestPackageById(testId); mmap.put("prodId", entTestPackage.getProdId()); mmap.put("testId", testId); mmap.put("memberId", memberId); return prefix + "/report"; } @RequiresPermissions("exam:hrEmailReport:view") @PostMapping("/hrLog") @ResponseBody public TableDataInfo hrLog(TExamReport tExamReport) { startPage(); List tExamReports = tExamReportService.selectTExamReportList(tExamReport); return getDataTable(tExamReports); } @RequiresPermissions("exam:report:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(TExamReport tExamReport) { startPage(); List list = new ArrayList<>(); 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 filed = JSON.parseObject(list.get(0).getContent(), LinkedHashMap.class); Map title = new LinkedHashMap<>(); int i = 0; title.put("ID", String.valueOf(i++)); title.put("下载权限", String.valueOf(i++)); title.put("答题状态", String.valueOf(i++)); title.put("产品包名称", String.valueOf(i++)); for (Map.Entry entry : filed.entrySet()) { String[] keys = entry.getKey().split("\\."); if (keys.length > 1) { String key = ExamUtil.getLangString(langType, keys[1]); title.put(keys[0] + "." + key, String.valueOf(i++)); } else { title.put(entry.getKey(), String.valueOf(i++)); } } title.put("测试包编码", String.valueOf(i++)); title.put("答卷编码", String.valueOf(i++)); List> filedList = new ArrayList<>(); filedList.add(title); return getDataTable(filedList); } @RequiresPermissions("exam:report:list") @PostMapping("/listData") @ResponseBody public TableDataInfo listData(TExamReport tExamReport) { List list = new ArrayList<>(); if (Objects.isNull(tExamReport.getProductId())) { 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 public AjaxResult export(TExamReport tExamReport) { List list = tExamReportService.selectTExamReportList(tExamReport); ExcelUtil util = new ExcelUtil(TExamReport.class); return util.exportExcel(list, "report"); } @RequiresPermissions("exam:report:export") @PostMapping("/exportDataReport/{ids}") @ResponseBody public AjaxResult exportReport(TExamReport tExamReport, @PathVariable("ids") String[] ids) throws IOException { List tExamReportList = tExamReportService.selectTExamReportByIds(ids); 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"; Map>> reportResultMap = new HashMap<>(); Map> demograpyMap = new HashMap<>(); setDemograyMap(tExamReportList, dataReportHead, demograpyMap); String reportType = getReportType(tExamReport); setDataReportHeader(dataReportHead, reportResultMap, reportType, isRight); Map>> sheetExcelMap = new HashMap<>(); setDealTaiData(ids, tExamReportList, reportType, sheetExcelMap); setRportListValue(reportResultMap, demograpyMap, sheetExcelMap, reportType); setSysHeadToEnglish(tExamReportList, reportResultMap, reportType); writeFile(fileNameResult, reportResultMap); return AjaxResult.success(examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx"); } private void setDealTaiData(@PathVariable("ids") String[] ids, List tExamReportList, String reportType, Map>> sheetExcelMap) throws IOException { if (Objects.equals(reportType, ReportTypeEnum.JAQ.getCode())) { List tExamReports = tExamReportService.selectTExamReportByIds(ids); Map tokenReportMap = new HashMap<>(); for (TExamReport tExamReport : tExamReports) { tokenReportMap.put(tExamReport.getTokenId(), tExamReport); } ReportAPIResult reportAPIResult = getThaiJAQData(tExamReports); Map thaiData = reportAPIResult.getData(); Map> excelOutPutMap = new HashMap<>(); excelOutPutMap.put("JAQ", thaiData); sheetExcelMap.put("JAQ Output Data", excelOutPutMap); Map> excelInputMap = new HashMap<>(); List persons = (List) reportAPIResult.getAnswerData().get("persons"); for (JAQPersons jaqPersons : persons) { Map personInfo = jaqPersons.getPersonInfo(); Map personPoints = jaqPersons.getPersonPoints(); String name = personInfo.get("fullName"); Map 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); } sheetExcelMap.put("JAQ Input Data", excelInputMap); } else { Map> excelMap = new HashMap<>(); tExamReportService.dealTaiData(tExamReportList, excelMap); sheetExcelMap.put("Sheet1", excelMap); } } private void setSysHeadToEnglish(List tExamReportList, Map>> reportResultMap, String reportType) { Set heavyDischargeDemography = new HashSet<>(); Map systemEnglisMap = new HashMap<>(); for (TExamReport tExamReportIt : tExamReportList) { List demographyDataReportDtoList = setLocalDataReportByParamId(tExamReportIt); for (DemographyDataReportDto demographyDataReportDto : demographyDataReportDtoList) { if (heavyDischargeDemography.contains(demographyDataReportDto.getParamId())) { continue; } else { heavyDischargeDemography.add(demographyDataReportDto.getParamId()); } List demographyDtoList = JsonUtil.parseArray(demographyDataReportDto.getLangCode(), DemographyDto.class); for (DemographyDto demographyDto : demographyDtoList) { if (Objects.equals(demographyDto.getLangType(), "English")) { systemEnglisMap.put(demographyDataReportDto.getParamId(), demographyDto.getLangCode()); } } } } for (Map.Entry>> entryReport : reportResultMap.entrySet()) { List headSystem = entryReport.getValue().get(0); for (int i = 0; i < headSystem.size(); i++) { if (StringUtils.isNotEmpty(systemEnglisMap.get(headSystem.get(i)))) { Collections.replaceAll(headSystem, headSystem.get(i), systemEnglisMap.get(headSystem.get(i))); } } } } private void setRportListValue(Map>> reportResultMap, Map> demograpyMap, Map>> sheetExcelMap, String reportType) { for (Map.Entry>> sheetEntry : sheetExcelMap.entrySet()) { for (Map.Entry> entry : sheetEntry.getValue().entrySet()) { ReportResultData resultData = getReportResultData(reportType, entry); Map textMap = new HashMap<>(); textMap.putAll(resultData.getTextMap()); textMap.putAll(demograpyMap.get(textMap.get("reportId"))); setReportResultList(reportResultMap.get(sheetEntry.getKey()).get(0), reportResultMap.get(sheetEntry.getKey()), textMap); } } } private void writeFile(String fileNameResult, Map>> reportResultMap) { for (Map.Entry>> entryReport : reportResultMap.entrySet()) { ExcelWriter writer = cn.hutool.poi.excel.ExcelUtil.getBigWriter(fileNameResult, entryReport.getKey()); StyleSet styleSet = writer.getStyleSet(); styleSet.setBorder(BorderStyle.NONE, IndexedColors.OLIVE_GREEN); writer.write(entryReport.getValue(), true); SXSSFSheet sheet = (SXSSFSheet) writer.getSheet(); sheet.trackAllColumnsForAutoSizing(); writer.autoSizeColumnAll(); writer.close(); } } private void setReportResultList(List demographyHeadSystem, List> reportResultList, Map textMap) { List reportValue = new ArrayList<>(); for (Object key : demographyHeadSystem) { Object value = textMap.get(key.toString().trim().replace("%", "")); if (Objects.nonNull(value)) { reportValue.add(value); } else { reportValue.add(""); } } reportResultList.add(reportValue); } private ReportResultData getReportResultData(String reportType, Map.Entry> entry) { TExamReport tExamQueryReport = new TExamReport(); String langType = examUtilService.getLocalLangType(""); ReportResultData resultData = tExamReportService.getReportResultData(reportType, langType, entry, tExamQueryReport); return resultData; } private Map getStringLangTypeEnumMap() { Map langTypeEnumMap = new HashMap<>(); for (LangTypeEnum langTypeEnumTemp : LangTypeEnum.values()) { langTypeEnumMap.put(langTypeEnumTemp.getCode(), langTypeEnumTemp); } return langTypeEnumMap; } private String getReportType(TExamReport tExamReport) { String reportType = ReportTypeEnum.RuiLin.getCode(); TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(tExamReport.getProductId()); List tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamPaper.getReportTemplateId()); for (TReportTemplate tReportTemplate : tReportTemplateList) { if (Objects.isNull(tReportTemplate.getReportType())) { continue; } reportType = ReportTypeEnum.valueOf(tReportTemplate.getReportType()).getCode(); if (Objects.equals(tReportTemplate.getTemplateType(), "SAQ")) { reportType = ReportTypeEnum.valueOf(tReportTemplate.getTemplateType()).getCode(); } break; } return reportType; } private void setDataReportHeader(DataReportHead dataReportHead, Map>> reportResultMap, String reportType, boolean isRight) { if (Objects.equals(reportType, ReportTypeEnum.RuiLin.getCode())) { setDataReportHeaderRuilin(dataReportHead, reportResultMap, isRight); } else if (Objects.equals(reportType, ReportTypeEnum.CAQ.getCode())) { setDataReportHeadCaq(dataReportHead, reportResultMap, isRight); } else if (Objects.equals(reportType, ReportTypeEnum.JAQ.getCode())) { setDataReportHeadJaq(dataReportHead, reportResultMap); } else if (Objects.equals(reportType, ReportTypeEnum.SAQ.getCode())) { setDataReportHeadSaq(dataReportHead, reportResultMap, isRight); } else { setDataReportHeadMaq(dataReportHead, reportResultMap, isRight); } } private void setDataReportHeadMaq(DataReportHead dataReportHead, Map>> reportResultMap, boolean isRight) { ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "MAQHead.xlsx")); List sheetNames = reader.getSheetNames(); for (String sheetName : sheetNames) { ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "MAQHead.xlsx"), sheetName); List> readList = readerSheet.read(); List> reportResultList = new ArrayList<>(); reportResultMap.put(sheetName, reportResultList); int i = 0; dataReportHead.getHeadSystem().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadSystem()); dataReportHead.getHeadEnglish().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadEnglish()); dataReportHead.getHeadChinese().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadChinese()); dataReportHead.getHeadThai().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadThai()); deleteNoRightKeys(dataReportHead, isRight, readList, i); } } private void setDataReportHeadSaq(DataReportHead dataReportHead, Map>> reportResultMap, boolean isRight) { ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "SAQHead.xlsx")); List sheetNames = reader.getSheetNames(); for (String sheetName : sheetNames) { ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "SAQHead.xlsx"), sheetName); List> readList = readerSheet.read(); List> reportResultList = new ArrayList<>(); reportResultMap.put(sheetName, reportResultList); int i = 0; dataReportHead.getHeadSystem().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadSystem()); dataReportHead.getHeadEnglish().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadEnglish()); dataReportHead.getHeadChinese().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadChinese()); dataReportHead.getHeadThai().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadThai()); deleteNoRightKeys(dataReportHead, isRight, readList, i); } } private void setDataReportHeadJaq(DataReportHead dataReportHead, Map>> reportResultMap) { ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "JAQHead.xlsx")); List sheetNames = reader.getSheetNames(); List headSystem = dataReportHead.getHeadSystem(); List headEnglish = dataReportHead.getHeadEnglish(); for (String sheetName : sheetNames) { ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "JAQHead.xlsx"), sheetName); List> readList = readerSheet.read(); if (Objects.equals("JAQ Input Data", sheetName)) { List head = readList.get(0); String[] heads = {"Name", "AccessCode", "Phone", "Department"}; List headList = CollUtil.toList(heads); Set headExtends = new HashSet(headList); for (int i = 1; i < headEnglish.size(); i++) { if (!headExtends.contains(headEnglish.get(i))) { headList.add(headSystem.get(i)); } } head.addAll(0, headList); } List> reportResultList = new ArrayList<>(); reportResultMap.put(sheetName, reportResultList); int i = 0; reportResultList.add(readList.get(i++)); } } private void setDataReportHeadCaq(DataReportHead dataReportHead, Map>> reportResultMap, boolean isRight) { ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "CAQHead.xlsx")); List sheetNames = reader.getSheetNames(); for (String sheetName : sheetNames) { ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "CAQHead.xlsx"), sheetName); List> readList = readerSheet.read(); List> reportResultList = new ArrayList<>(); reportResultMap.put(sheetName, reportResultList); int i = 0; dataReportHead.getHeadSystem().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadSystem()); dataReportHead.getHeadEnglish().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadEnglish()); dataReportHead.getHeadChinese().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadChinese()); deleteNoRightKeys(dataReportHead, isRight, readList, i); } } private void setDataReportHeaderRuilin(DataReportHead dataReportHead, Map>> reportResultMap, boolean isRight) { ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "RuiLinHead.xlsx")); List sheetNames = reader.getSheetNames(); for (String sheetName : sheetNames) { ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "RuiLinHead.xlsx"), sheetName); List> readList = readerSheet.read(); int i = 0; List> reportResultList = new ArrayList<>(); dataReportHead.getHeadSystem().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadSystem()); dataReportHead.getHeadChinese().addAll(readList.get(i++)); reportResultList.add(dataReportHead.getHeadChinese()); deleteNoRightKeys(dataReportHead, isRight, readList, i); reportResultMap.put(sheetName, reportResultList); } } private void deleteNoRightKeys(DataReportHead dataReportHead, boolean isRight, List> readList, int i) { if (!isRight) { Set rightSet = new HashSet(); for (; i < readList.size(); i++) { List objects = readList.get(i); for (Object object : objects) { rightSet.add(object); } } deleteNoRight(rightSet, dataReportHead.getHeadSystem()); deleteNoRight(rightSet, dataReportHead.getHeadEnglish()); deleteNoRight(rightSet, dataReportHead.getHeadChinese()); deleteNoRight(rightSet, dataReportHead.getHeadThai()); } } private void deleteNoRight(Set rightSet, List headSystem) { if (CollUtil.isEmpty(headSystem)) { return; } Iterator iterator = headSystem.iterator(); while (iterator.hasNext()) { if (rightSet.contains(iterator.next())) { iterator.remove(); } } } private void setDemograyMap(List tExamReportList, DataReportHead dataReportHead, Map> demograpyMap) { Set heavyDischargeDemography = new HashSet<>(); for (TExamReport tExamReportIt : tExamReportList) { List demographyDataReportDtoList = setLocalDataReportByParamId(tExamReportIt); Map 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 demographyDtoList = JsonUtil.parseArray(demographyDataReportDto.getLangCode(), DemographyDto.class); findLandCode(dataReportHead.getHeadChinese(), demographyDtoList, "Chinese"); findLandCode(dataReportHead.getHeadEnglish(), demographyDtoList, "English"); findLandCode(dataReportHead.getHeadThai(), demographyDtoList, "Thai"); } private void findLandCode(List demographyHeadLang, List demographyDtoList, String lang) { boolean isLang = false; for (DemographyDto demographyDto : demographyDtoList) { if (Objects.equals(demographyDto.getLangType(), lang)) { demographyHeadLang.add(demographyDto.getLangCode()); isLang = true; } } if (!isLang) { demographyHeadLang.add(""); } } private void setExtracHead(DataMap dataMap, Object[] keys, List keyDemography, int position) { if (position == 1) { keys[0] = "ISP_T1"; keys[1] = "IM_T1"; keys[2] = "Inconsistency_T1"; } if (position == 2) { keys[0] = "自夸_T1"; keys[1] = "印象管理_T1"; keys[2] = "答题不一致性_T1"; keys[3] = "事中信息类别"; } dataMap.put(position, ArrayUtil.addAll(keyDemography.get(position), keys)); } private void setAllLangLocalDataValue(int keyPosition, List reportLocalList, Map mapPara, Set langTypeSet, List keyDemography) { setAllLangLocalRowValue(keyPosition, reportLocalList, mapPara, keyDemography, langTypeSet.iterator().next(), "系统内变量名"); Map> multiLanguageMap = new HashedMap(); setLangSystemV(multiLanguageMap); for (String langType : langTypeSet) { setAllLangLocalRowValue(keyPosition, reportLocalList, mapPara, keyDemography, langType, multiLanguageMap.get("Chinese").get(langType)); } } private void setLangSystemV(Map> multiLanguageMap) { Map langTypeChineseMap = new HashedMap(); langTypeChineseMap.put("English", "导出后变量名(英文)"); langTypeChineseMap.put("Chinese", "导出后变量名(中文)"); langTypeChineseMap.put("Thai", "导出后变量名(泰文)"); multiLanguageMap.put("Chinese", langTypeChineseMap); } private void setClientV(Map langTypeChineseMap) { langTypeChineseMap.put("English", "Client"); langTypeChineseMap.put("Chinese", "企业客户名称"); langTypeChineseMap.put("Thai", "Client"); } private void setAllLangLocalRowValue(int keyPosition, List reportLocalList, Map mapPara, List keyDemography, String langType, String systemVariable) { DataMap reportLocalMap = reportLocalList.get(keyPosition); List rowList = reportLocalMap.getKeys(); List rowValues = new ArrayList<>(); rowValues.add(systemVariable); for (String row : rowList) { String rows = mapPara.get(row); List> langMapList = JsonUtil.parseObject(rows, ArrayList.class); String langCode = ""; for (Map langMap : langMapList) { if (StringUtils.equals(langMap.get("langType"), langType)) { langCode = langMap.get("langCode"); } } rowValues.add(langCode); } Map clientLangMap = new HashedMap(); setClientV(clientLangMap); rowValues.add(clientLangMap.get(langType)); keyDemography.add(rowValues.toArray()); } private void setDataReportLangSet(Map mapPara, Set langTypeSet) { for (Map.Entry entry : mapPara.entrySet()) { List> langMapList = JsonUtil.parseObject(entry.getValue(), ArrayList.class); for (Map langMap : langMapList) { langTypeSet.add(langMap.get("langType")); } } } private List setLocalDataReportByParamId(TExamReport it) { EntDemographyInfo entDemographyInfoAsParam = new EntDemographyInfo(); entDemographyInfoAsParam.setMemberId(it.getMemberId().longValue()); List demographyDataReportDtoList = new ArrayList<>(); List entDemographyInfoList = entDemographyInfoService.selectEntDemographyAndParamList(entDemographyInfoAsParam); for (EntDemographyInfo entDemographyInfo : entDemographyInfoList) { DemographyDataReportDto demographyDataReportDto = new DemographyDataReportDto(); demographyDataReportDto.setParamId(entDemographyInfo.getParamId()); demographyDataReportDto.setLangCode(entDemographyInfo.getLangCodes()); demographyDataReportDto.setLangType(entDemographyInfo.getLangType()); demographyDataReportDto.setParamValue(entDemographyInfo.getParamValue()); demographyDataReportDtoList.add(demographyDataReportDto); } return demographyDataReportDtoList; } private void setTaiInterfaceContentMap(TExamReport it, DataMap dataReportMap, boolean isRight, List reportTaiList) { try { DataMap dataReportTaiMap = new DataMap<>(); List 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); 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 dataReportMap, DataMap dataReportTaiMap, List reportAPIResultList, DataReport dataReportTai, boolean isRight) { if (!isRight) { return; } List keepPartOrderList = new ArrayList<>(); keepPartOrderList.addAll(Arrays.asList("INC1,INC2,INC3,INC4,INC5,INC6,INC7,INC8".split(","))); Map taiDataMap = reportAPIResultList.get(1).getData(); for (String keepPartOrder : keepPartOrderList) { dataReportTai.setField(keepPartOrder); dataReportTai.setValue(taiDataMap.get(keepPartOrder)); setDataReportValueMap(dataReportMap, dataReportTai); setDataReportValueMap(dataReportTaiMap, dataReportTai); } } private void set2PartDataReport(DataMap dataReportMap, DataMap dataReportTaiMap, boolean isRight, List reportAPIResultList, DataReport dataReportTai) { if (isRight) { List keepPartOrderList = new ArrayList<>(); keepPartOrderList.addAll(Arrays.asList("P_EQ01,P_EQ02,P_EQ03,P_EQ04,P_EQ05,P_EQ06,P_EQ07,P_EQ08,P_EQ09,P_EQ10,P_EQ11,P_EQ12,P_EQ13,P_EQ14,P_EQ15,P_EQ16,P_EQ17,P_EQ18,P_EQ19".split(","))); Map taiDataMap = reportAPIResultList.get(1).getData(); for (String keepPartOrder : keepPartOrderList) { dataReportTai.setField(keepPartOrder); dataReportTai.setValue(taiDataMap.get(keepPartOrder)); setDataReportValueMap(dataReportMap, dataReportTai); setDataReportValueMap(dataReportTaiMap, dataReportTai); } Map answerDataMap = new LinkedHashMap<>(); Map answerDataNoOrder = reportAPIResultList.get(1).getAnswerData(); answerDataNoOrder.entrySet().stream().sorted(Map.Entry.comparingByKey()) .forEachOrdered(x -> answerDataMap.put(x.getKey(), x.getValue())); for (Map.Entry entry : answerDataMap.entrySet()) { dataReportTai.setField(entry.getKey()); dataReportTai.setValue(entry.getValue()); setDataReportValueMap(dataReportMap, dataReportTai); setDataReportValueMap(dataReportTaiMap, dataReportTai); } } } private void setNoRightPart(DataMap dataReportMap, DataMap dataReportTaiMap, List reportAPIResultList, DataReport dataReportTai) { List 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(","))); Map taiDataMap = reportAPIResultList.get(1).getData(); for (String keepPartOrder : keepPartOrderList) { dataReportTai.setField(keepPartOrder); dataReportTai.setValue(taiDataMap.get(keepPartOrder)); setDataReportValueMap(dataReportMap, dataReportTai); setDataReportValueMap(dataReportTaiMap, dataReportTai); } } private void set1PartDataReport(DataMap dataReportMap, DataMap dataReportTaiMap, boolean isRight, List reportAPIResultList, DataReport dataReportTai) { if (isRight) { List 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 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 answerDataMap = new LinkedHashMap<>(); Map answerDataNoOrder = reportAPIResultList.get(0).getAnswerData(); answerDataNoOrder.entrySet().stream().sorted( new Comparator>() { @Override public int compare(Map.Entry o1, Map.Entry o2) { int key1 = Integer.valueOf(o1.getKey().substring(3)); int key2 = Integer.valueOf(o2.getKey().substring(3)); return key1 - key2; } } ).forEachOrdered(x -> answerDataMap.put(x.getKey(), x.getValue())); for (Map.Entry entry : answerDataMap.entrySet()) { dataReportTai.setField(entry.getKey()); dataReportTai.setValue(entry.getValue()); setDataReportValueMap(dataReportMap, dataReportTai); setDataReportValueMap(dataReportTaiMap, dataReportTai); } } } private void setContentMap(TExamReport it, List dataReportList, DataMap dataReportMap, List reportLocalList) { DataMap 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 filed, DataReport dataReport) { filed.put(dataReport.getField(), iExamUtilService.getLangOrLocalLangString(dataReport.getLangType(), dataReport.getValue())); } private void setDataReportValueMap(DataMap 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 tExamReportList = tExamReportService.selectTExamReportByIds(ids); List tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamReportList.get(0).getReportTemplateId()); Map 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 = ""; String path = ""; String fileName = ""; TReportTemplate tReportTemplate = tExamReportService.getReportTemplate(questionTemplateId, langType, templateType); try { for (TReportTemplate tReportTemplateTemp : tReportTemplateList) { if (Objects.equals(tReportTemplateTemp.getReportType(), "RuiLin")) { tReportTemplate = tReportTemplateTemp; templateType = tReportTemplate.getTemplateType(); langType = "Chinese"; break; } } reportType = tReportTemplate.getReportType(); path = itReportTemplateService.selectTReportTemplateFilePath(tReportTemplate); if (StringUtils.isEmpty(path)) { return AjaxResult.error(MessageUtils.message("jsp.exam.report.noTemplate")); } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(MessageUtils.message("jsp.exam.report.noTemplate")); } List deleteFileStrList = new ArrayList<>(); List deleteStrList = new ArrayList<>(); List fileNameList = new ArrayList<>(); WordUtil wordUtil = new WordUtil(); tExamReportService.setExportBaseOrDetailReportData(tExamReportList, deleteStrList, fileNameList, tReportTemplate); return wordUtil.exportBaseOrDetailReport(path, deleteFileStrList, fileNameList); } @RequiresPermissions("exam:report:detailReportexport") @PostMapping("/exportDetailedReport/{ids}/{langType}") @ResponseBody public AjaxResult exportDetailedReport(@PathVariable("ids") String[] ids, @PathVariable("langType") String langType) throws IOException { List tExamReportList = new ArrayList<>(); for (String id : ids) { TExamReport tExamReport = new TExamReport(); tExamReport.setId(Long.valueOf(id)); tExamReportList.add(tExamReport); } List fileNameResult = new ArrayList<>(); List deleteStrList = new ArrayList<>(); List exportFileList = new ArrayList<>(); List tExamReports = tExamReportService.selectTExamReportByIds(ids); TExamReport tExamReport = tExamReports.get(0); String reportType = getReportType(tExamReport); if (Objects.equals("JAQ", reportType)) { dealJAQReport(deleteStrList, exportFileList, tExamReports); } else { dealReprotFile(tExamReportList, fileNameResult, deleteStrList, exportFileList, reportType); } WordUtil wordUtil = new WordUtil(); return wordUtil.exportBaseOrDetailReport("DataReport", deleteStrList, exportFileList); } private void dealJAQReport(List deleteStrList, List exportFileList, List tExamReports) throws IOException { TExamReport tExamReport = tExamReports.get(0); ReportAPIResult reportAPIResult = getThaiJAQData(tExamReports); Map thaiData = reportAPIResult.getData(); List tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamReport.getReportTemplateId()); Map 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 jaqMap = getJaqQuestionByPermanentIdMap(tReportTemplate, tExamReport); changTable1(textMap, tReportTemplate, thaiData); changTable2(textMap, tReportTemplate, thaiData); changTable3(textMap, tReportTemplate, jaqMap, thaiData); changTable4(textMap, tReportTemplate, jaqMap, thaiData); textMap.put("position", relatedParty.getPosition()); textMap.put("reportGenerationDate", DateUtils.getDate()); textMap.put("userName", relatedParty.getUserName()); textMap.put("professionalCategory", relatedParty.getProfessionalCategory()); 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 textMap, TReportTemplate tReportTemplate, Map jaqMap, Map 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())))); textMap.put("T4com3item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com3item" + i.toString())))); textMap.put("T4com4item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com4item" + i.toString())))); textMap.put("T4com5item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com5item" + i.toString())))); textMap.put("T4com6item" + i.toString(), ExamUtil.getLangString(tReportTemplate.getLangType(), jaqMap.get(thaiData.get("T4com6item" + i.toString())))); 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 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 textMap, TReportTemplate tReportTemplate, Map jaqMap, Map 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 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 getJaqQuestionByPermanentIdMap(TReportTemplate tReportTemplate, TExamReport tExamReport) { List questionReports = JsonUtil.toJsonListObject(tExamReport.getQuestionReport(), QuestionReport.class); Map jaqMap = new HashMap<>(); for (QuestionReport questionReport : questionReports) { jaqMap.put(questionReport.getPermanentId(), questionReport.getQuestionTitle()); } List 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 textMap, TReportTemplate tReportTemplate, Map thaiData) { Map 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 getTranslationCapability() { ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "JAQTable1Tag.xlsx")); List> readList = reader.read(); Map tagMap = new HashMap<>(); Map contentMap = new HashMap<>(); for (Integer i = 1; i < readList.size(); i++) { contentMap.clear(); for (Integer j = 1; j < readList.get(0).size(); j++) { contentMap.put(readList.get(0).get(j).toString(), readList.get(i).get(j).toString()); } tagMap.put(i.toString(), JsonUtil.toJSONString(contentMap)); } return tagMap; } private void changTable2(Map textMap, TReportTemplate tReportTemplate, Map thaiData) { Map tagMap = getTranslationCapability(); 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 tExamReports) { List persons = new ArrayList<>(); Integer personCout = 0; for (TExamReport tExamReport : tExamReports) { Map personInfo = new LinkedHashMap<>(); personInfo.put("accessCode", tExamReport.getTokenId()); personInfo.put("fullName", tExamReport.getMemberName()); JAQPersons person = new JAQPersons(); person.setPersonInfo(personInfo); Map personPoints = new LinkedHashMap<>(); person.setPersonPoints(personPoints); List questionReportList = JsonUtil.parseArray(tExamReport.getQuestionReport(), QuestionReport.class); for (QuestionReport questionReport : questionReportList) { List questionItems = questionReport.getQuestionItems(); for (QuestionEditRequestVM questionEditRequestVM : questionItems) { personPoints.put(questionEditRequestVM.getPermanentId(), questionEditRequestVM.getContent()); } } persons.add(person); personCout++; } Map> data = new LinkedHashMap<>(); data.put("persons", persons); HolderInfo info = new HolderInfo(); info.setTestTakerNo(personCout.toString()); info.setCalculationType(JAQ); CaqRequest request = new CaqRequest(); request.setModel("1.0"); request.setInfo(info); request.setData(data); logger.info("===调用泰国接口 begin==="); logger.info(JsonUtil.toJSONString(request)); logger.info("===调用泰国接口 end==="); ReportAPIResult reportAPIResult = calculationServices.stageCalculation(request); logger.info("===泰国返回的数据 begin==="); logger.info(JsonUtil.toJSONString(reportAPIResult)); logger.info("===泰国返回的数据 end==="); reportAPIResult.setAnswerData(data); return reportAPIResult; } private void makeJAQData(Map 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(","); Arrays.asList(split).stream().forEach(item -> { personPoints.put(item, "2"); }); } private void dealReprotFile(List tExamReportList, List fileNameResult, List deleteStrList, List exportFileList, String reportType) { for (TExamReport tExamReport : tExamReportList) { fileNameResult.clear(); TExamReport tExamReportComplete = tExamReportService.selectTExamReportById(tExamReport.getId()); itExamPaperService.recallThaiInterface(tExamReportComplete, reportType); TExamReport tExamReportResult = tExamReportService.getReportFromTemplate(tExamReport, fileNameResult, deleteStrList); if (tExamReportResult == null) { continue; } for (String exportFile : fileNameResult) { String[] exportFiles = exportFile.split("/"); exportFileList.add(exportFiles[exportFiles.length - 1]); } updateHisReportAddress(fileNameResult, deleteStrList, tExamReportResult); } } private void updateHisReportAddress(List fileNameResult, List 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> getDataFromExcel() { ExcelUtil 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") @ResponseBody 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") @ResponseBody public AjaxResult editSave(TExamReport tExamReport) { return toAjax(tExamReportService.updateTExamReport(tExamReport)); } @RequiresPermissions("exam:report:remove") @Log(title = "评测报告", businessType = BusinessType.DELETE) @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { return toAjax(tExamReportService.deleteTExamReportByIds(ids)); } @Log(title = "企业用户审批", businessType = BusinessType.UPDATE) @RequiresPermissions("exam:report:edit") @PostMapping("/changeStatus") @ResponseBody public AjaxResult changeStatus(TExamReport tExamReport) { return toAjax(tExamReportService.changeStatus(tExamReport)); } @RequiresPermissions("exam:report:edit") @Log(title = "批量更新审批状态", businessType = BusinessType.DELETE) @PostMapping("/batchVerify") @ResponseBody 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 dictDataList = tExamReportService.getType(userIds[0]); try { TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(productId); List tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamPaper.getReportTemplateId()); for (TReportTemplate tReportTemplate : tReportTemplateList) { if ("RuiLin".equals(tReportTemplate.getReportType())) { for (DictData dictData : dictDataList) { if ("Chinese".equals(dictData.getDictValue())) { List dictDataRuiLinList = new ArrayList<>(); dictDataRuiLinList.add(dictData); mmap.put("dictDatas", dictDataRuiLinList); return prefix + "/report::langTypeDiv"; } } } } } 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 fileNameResult = new ArrayList<>(); List deleteStrList = new ArrayList<>(); WordUtil wordUtil = new WordUtil(); TExamReport tExamReportResult = tExamReportService.getReportFromTemplate(tExamReport, fileNameResult, deleteStrList); if (tExamReportResult == null) { return AjaxResult.success("答题未完成!"); } List 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) { try { WordUtil wordUtil = new WordUtil(); List tExamReportList = tExamReportService.selectTExamReportByIds(ids); List fileNameList = new ArrayList<>(); for (TExamReport tExamReportDownLoad : tExamReportList) { List addressList = JsonUtil.parseArray(tExamReportDownLoad.getReportAddress(), String.class); for (String address : addressList) { String[] addresses = address.split("/"); fileNameList.add(addresses[addresses.length - 1]); } } return wordUtil.exportZipKeepFiles(MessageUtils.message("jsp.exam.report.sendedReport"), new ArrayList<>(), fileNameList); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return AjaxResult.error(MessageUtils.message("jsp.exam.report.noHisReport")); } @RequiresPermissions("exam:hrEmailReport:view") @PostMapping("/hrSendlogList") @ResponseBody public TableDataInfo hrSendlogList(TExamReport tExamReport) { 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()); List sysUserExtends = sysUserExtendService.selectSysUserExtendList(sysUserExtend); List collect = sysUserExtends.stream().map(extend -> extend.getUserId()).collect(Collectors.toList()); collect.add(sysUser.getUserId()); tExamReport.setUserIds(collect); } List 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 public AjaxResult sendEmail(@PathVariable Long id) { TExamReport tExamReport = tExamReportService.selectTExamReportById(id); Integer retriesTime = tExamReport.getRetriesTime(); Integer integer = Optional.ofNullable(retriesTime).orElse(0); tExamReport.setRetriesTime(++integer); examPaperService.sendHRAndMemberEmail(tExamReport, true, false); return AjaxResult.error(MessageUtils.message("sent.successfully")); } }