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<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) {
|
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<TExamReport> tExamReports = tExamReportService.selectTExamReportList(tExamReport);
|
return getDataTable(tExamReports);
|
}
|
|
@RequiresPermissions("exam:report:list")
|
@PostMapping("/list")
|
@ResponseBody
|
public TableDataInfo list(TExamReport tExamReport) {
|
startPage();
|
List<TExamReport> 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<String, String> filed = JSON.parseObject(list.get(0).getContent(), LinkedHashMap.class);
|
Map<String, String> 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<String, String> 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<Map<String, String>> filedList = new ArrayList<>();
|
filedList.add(title);
|
return getDataTable(filedList);
|
}
|
|
@RequiresPermissions("exam:report:list")
|
@PostMapping("/listData")
|
@ResponseBody
|
public TableDataInfo listData(TExamReport tExamReport) {
|
List<TExamReport> 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<TExamReport> list = tExamReportService.selectTExamReportList(tExamReport);
|
ExcelUtil<TExamReport> util = new ExcelUtil<TExamReport>(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<TExamReport> 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<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<String, Map<String, Map<String, String>>> 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<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);
|
}
|
|
ReportAPIResult reportAPIResult = getThaiJAQData(tExamReports);
|
|
|
Map<String, String> thaiData = reportAPIResult.getData();
|
Map<String, Map<String, String>> excelOutPutMap = new HashMap<>();
|
excelOutPutMap.put("JAQ", thaiData);
|
sheetExcelMap.put("JAQ Output Data", excelOutPutMap);
|
|
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);
|
}
|
|
sheetExcelMap.put("JAQ Input Data", excelInputMap);
|
} else {
|
Map<String, Map<String, String>> excelMap = new HashMap<>();
|
tExamReportService.dealTaiData(tExamReportList, excelMap);
|
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")) {
|
systemEnglisMap.put(demographyDataReportDto.getParamId(), demographyDto.getLangCode());
|
}
|
}
|
}
|
}
|
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++) {
|
if (StringUtils.isNotEmpty(systemEnglisMap.get(headSystem.get(i)))) {
|
Collections.replaceAll(headSystem, headSystem.get(i), systemEnglisMap.get(headSystem.get(i)));
|
}
|
}
|
}
|
}
|
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")));
|
setReportResultList(reportResultMap.get(sheetEntry.getKey()).get(0), reportResultMap.get(sheetEntry.getKey()), textMap);
|
}
|
}
|
}
|
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());
|
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<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("%", ""));
|
if (Objects.nonNull(value)) {
|
reportValue.add(value);
|
} else {
|
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()) {
|
langTypeEnumMap.put(langTypeEnumTemp.getCode(), langTypeEnumTemp);
|
}
|
return langTypeEnumMap;
|
}
|
private String getReportType(TExamReport tExamReport) {
|
String reportType = ReportTypeEnum.RuiLin.getCode();
|
TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(tExamReport.getProductId());
|
List<TReportTemplate> 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<String, List<List<Object>>> 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<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();
|
for (String sheetName : sheetNames) {
|
ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "MAQHead.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());
|
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<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();
|
for (String sheetName : sheetNames) {
|
ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "SAQHead.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());
|
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<String, List<List<Object>>> reportResultMap) {
|
ExcelReader reader = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "JAQHead.xlsx"));
|
List<String> sheetNames = reader.getSheetNames();
|
|
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);
|
|
String[] heads = {"Name", "AccessCode", "Phone", "Department"};
|
List<Object> 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<List<Object>> reportResultList = new ArrayList<>();
|
reportResultMap.put(sheetName, reportResultList);
|
int i = 0;
|
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());
|
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<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();
|
for (String sheetName : sheetNames) {
|
ExcelReader readerSheet = cn.hutool.poi.excel.ExcelUtil.getReader(FileUtil.file(EssConfig.getReportTemplates() + "RuiLinHead.xlsx"), sheetName);
|
List<List<Object>> readList = readerSheet.read();
|
int i = 0;
|
List<List<Object>> 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<List<Object>> readList, int i) {
|
if (!isRight) {
|
|
|
Set<Object> rightSet = new HashSet();
|
for (; i < readList.size(); i++) {
|
List<Object> 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<Object> rightSet, List<Object> headSystem) {
|
if (CollUtil.isEmpty(headSystem)) {
|
return;
|
}
|
Iterator<Object> iterator = headSystem.iterator();
|
while (iterator.hasNext()) {
|
if (rightSet.contains(iterator.next())) {
|
iterator.remove();
|
}
|
}
|
}
|
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);
|
findLandCode(dataReportHead.getHeadChinese(), demographyDtoList, "Chinese");
|
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)) {
|
demographyHeadLang.add(demographyDto.getLangCode());
|
isLang = true;
|
}
|
}
|
if (!isLang) {
|
demographyHeadLang.add("");
|
}
|
}
|
private void setExtracHead(DataMap<Integer, Object[]> dataMap, Object[] keys, List<Object[]> 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<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", "导出后变量名(英文)");
|
langTypeChineseMap.put("Chinese", "导出后变量名(中文)");
|
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);
|
|
List<String> rowList = reportLocalMap.getKeys();
|
List<String> rowValues = new ArrayList<>();
|
|
rowValues.add(systemVariable);
|
for (String row : rowList) {
|
|
String rows = mapPara.get(row);
|
|
List<Map<String, String>> langMapList = JsonUtil.parseObject(rows, ArrayList.class);
|
String langCode = "";
|
for (Map<String, String> langMap : langMapList) {
|
if (StringUtils.equals(langMap.get("langType"), langType)) {
|
langCode = langMap.get("langCode");
|
}
|
}
|
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);
|
for (Map<String, String> langMap : langMapList) {
|
langTypeSet.add(langMap.get("langType"));
|
}
|
}
|
}
|
private List<DemographyDataReportDto> setLocalDataReportByParamId(TExamReport it) {
|
EntDemographyInfo entDemographyInfoAsParam = new EntDemographyInfo();
|
entDemographyInfoAsParam.setMemberId(it.getMemberId().longValue());
|
List<DemographyDataReportDto> demographyDataReportDtoList = new ArrayList<>();
|
List<EntDemographyInfo> 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<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);
|
|
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;
|
}
|
List<String> keepPartOrderList = new ArrayList<>();
|
keepPartOrderList.addAll(Arrays.asList("INC1,INC2,INC3,INC4,INC5,INC6,INC7,INC8".split(",")));
|
Map<String, String> 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<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_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<String, String> taiDataMap = reportAPIResultList.get(1).getData();
|
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(1).getAnswerData();
|
answerDataNoOrder.entrySet().stream().sorted(Map.Entry.comparingByKey())
|
.forEachOrdered(x -> answerDataMap.put(x.getKey(), x.getValue()));
|
for (Map.Entry<String, String> entry : answerDataMap.entrySet()) {
|
dataReportTai.setField(entry.getKey());
|
dataReportTai.setValue(entry.getValue());
|
setDataReportValueMap(dataReportMap, dataReportTai);
|
setDataReportValueMap(dataReportTaiMap, dataReportTai);
|
}
|
}
|
}
|
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(",")));
|
Map<String, String> 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<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(
|
new Comparator<Map.Entry<String, String>>() {
|
@Override
|
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;
|
}
|
}
|
).forEachOrdered(x -> answerDataMap.put(x.getKey(), x.getValue()));
|
for (Map.Entry<String, String> entry : answerDataMap.entrySet()) {
|
dataReportTai.setField(entry.getKey());
|
dataReportTai.setValue(entry.getValue());
|
setDataReportValueMap(dataReportMap, dataReportTai);
|
setDataReportValueMap(dataReportTaiMap, dataReportTai);
|
}
|
}
|
}
|
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 = "";
|
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<String> deleteFileStrList = new ArrayList<>();
|
List<String> deleteStrList = new ArrayList<>();
|
List<String> 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<TExamReport> tExamReportList = new ArrayList<>();
|
for (String id : ids) {
|
TExamReport tExamReport = new TExamReport();
|
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 {
|
|
dealReprotFile(tExamReportList, fileNameResult, deleteStrList, exportFileList, reportType);
|
}
|
WordUtil wordUtil = new WordUtil();
|
return wordUtil.exportBaseOrDetailReport("DataReport", deleteStrList, exportFileList);
|
}
|
|
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();
|
|
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);
|
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<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()))));
|
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<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);
|
Map<String, String> jaqMap = new HashMap<>();
|
for (QuestionReport questionReport : questionReports) {
|
jaqMap.put(questionReport.getPermanentId(), questionReport.getQuestionTitle());
|
}
|
|
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();
|
Map<String, String> tagMap = new HashMap<>();
|
Map<String, String> 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<String, Object> textMap, TReportTemplate tReportTemplate, Map<String, String> thaiData) {
|
Map<String, String> 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<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);
|
|
|
List<QuestionReport> questionReportList = JsonUtil.parseArray(tExamReport.getQuestionReport(), QuestionReport.class);
|
for (QuestionReport questionReport : questionReportList) {
|
List<QuestionEditRequestVM> questionItems = questionReport.getQuestionItems();
|
for (QuestionEditRequestVM questionEditRequestVM : questionItems) {
|
personPoints.put(questionEditRequestVM.getPermanentId(), questionEditRequestVM.getContent());
|
}
|
}
|
persons.add(person);
|
personCout++;
|
}
|
Map<String, List<JAQPersons>> 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<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(",");
|
Arrays.asList(split).stream().forEach(item -> {
|
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();
|
|
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<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")
|
@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<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) {
|
if ("Chinese".equals(dictData.getDictValue())) {
|
List<DictData> 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<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) {
|
try {
|
WordUtil wordUtil = new WordUtil();
|
List<TExamReport> tExamReportList = tExamReportService.selectTExamReportByIds(ids);
|
List<String> fileNameList = new ArrayList<>();
|
for (TExamReport tExamReportDownLoad : tExamReportList) {
|
List<String> 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<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> 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"));
|
}
|
}
|