linzhijie
2021-04-12 3a8e1524dcf0eeb610d38123d5f0a3ef838379cd
src/main/java/com/ots/project/exam/controller/TExamReportController.java
@@ -40,6 +40,7 @@
import com.ots.project.exam.dto.QuestionObject;
import com.ots.project.exam.dto.QuestionReport;
import com.ots.project.exam.dto.RelatedParty;
import com.ots.project.exam.mapper.TExamPaperQuestionMapper;
import com.ots.project.exam.service.IEntDemographyInfoService;
import com.ots.project.exam.service.IEntTestPackageService;
import com.ots.project.exam.service.ISysUserExtendService;
@@ -64,6 +65,7 @@
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;
@@ -198,6 +200,19 @@
    }
    /**
     * 测评列表
     * @return
     */
    @RequiresPermissions("exam:evaluation_report:view")
    @GetMapping("/reportView/evaluationReport")
    public String evaluationReport(ModelMap mmap) {
        //返回所有产品
        List<TExamPaper> dictList = itExamPaperService.getUserPapers();
        mmap.put("dictList",dictList);
        return prefix + "/evaluationReport";
    }
    /**
     * 查询评测报告列表(头部)
     */
    @RequiresPermissions("exam:hrEmailReport:view")
@@ -252,6 +267,45 @@
        List<Map<String, String>> filedList = new ArrayList<>();
        filedList.add(title);
        return getDataTable(filedList);
    }
    /**
     * 查询评测报告列表(数据列)
     * 根据用户角色显示不同列表
     * @param tExamReport
     * @return
     */
    @RequiresPermissions("exam:report:list")
    @PostMapping("/newListData")
    @ResponseBody
    public TableDataInfo newListData(TExamReport tExamReport) {
        startPage();
        List<TExamReport> list = new ArrayList<>();
        // 完成的
        tExamReport.setFinish(1);
        //根据权限返回不同测评人员列表
        User sysUser = ShiroUtils.getSysUser();
        String userType = sysUser.getUserType();
        if (UserTypeEnum.ENT_USER.getUserType().equals(userType)) {
            tExamReport.setUserId(sysUser.getUserId());
        }
        //分销商可以看到分销商下的企业信息
        if (UserTypeEnum.DIS_USER.getUserType().equals(userType)) {
            SysUserExtend sysUserExtend = new SysUserExtend();
            sysUserExtend.setParentUserId(sysUser.getUserId());
            List<SysUserExtend> sysUserExtends = sysUserExtendService.selectSysUserExtendList(sysUserExtend);
            List<Long> collect = sysUserExtends.stream().map(extend -> extend.getUserId()).collect(Collectors.toList());
            collect.add(sysUser.getUserId());
            tExamReport.setUserIds(collect);
        }
        list = tExamReportService.selectViewReportList(tExamReport);
        // 多语言翻译
        for (TExamReport tExamReportTemp : list) {
            tExamReportTemp.setProductName(examUtilService.getLangOrLocalLangString("", tExamReportTemp.getProductName()));
        }
        return getDataTable(list);
    }
    /**
@@ -420,6 +474,75 @@
        return AjaxResult.success(examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx");
    }
    // 导出数据报告
    @RequiresPermissions("exam:report:export")
    @PostMapping("/exportEvaluationReport")
    @ResponseBody
    public AjaxResult exportReport(TExamReport tExamReport) throws IOException {
        // 完成的
        tExamReport.setFinish(1);
        //根据权限返回不同测评人员列表
        User sysUser = ShiroUtils.getSysUser();
        String userType = sysUser.getUserType();
        if (UserTypeEnum.ENT_USER.getUserType().equals(userType)) {
            tExamReport.setUserId(sysUser.getUserId());
        }
        //分销商可以看到分销商下的企业信息
        if (UserTypeEnum.DIS_USER.getUserType().equals(userType)) {
            SysUserExtend sysUserExtend = new SysUserExtend();
            sysUserExtend.setParentUserId(sysUser.getUserId());
            List<SysUserExtend> sysUserExtends = sysUserExtendService.selectSysUserExtendList(sysUserExtend);
            List<Long> collect = sysUserExtends.stream().map(extend -> extend.getUserId()).collect(Collectors.toList());
            collect.add(sysUser.getUserId());
            tExamReport.setUserIds(collect);
        }
        //查询当前筛选结果集
        List<TExamReport> tExamReportList = tExamReportService.selectViewReportList(tExamReport);
        //List<Long> getIds = tExamReportList.stream().map(TExamReport::getId).collect(Collectors.toList());
        List<String> getIds = tExamReportList.stream().map(t -> t.getId().toString()).collect(Collectors.toList());
        String[] ids = getIds.stream().toArray(String[]::new);
        // 拼接生成report的键值对
        //User sysUser = ShiroUtils.getSysUser();
        boolean isRight = Objects.equals(UserTypeEnum.SYS_USER.getUserType(), sysUser.getUserType());
        // 人口学变量
        // 三行
        DataReportHead dataReportHead = new DataReportHead();
        String fileNameResult = EssConfig.getDownloadPath() + examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx";
        // 把sheet放在map里面
        Map<String, List<List<Object>>> reportResultMap = new HashMap<>();
        Map<String, Map<String, String>> demograpyMap = new HashMap<>();
        // 人口学
        setDemograyMap(tExamReportList, dataReportHead, demograpyMap);
        // 报告类型
        String reportType = getReportType(tExamReport);
        // 模版的内容
        setDataReportHeader(dataReportHead, reportResultMap, reportType, isRight);
        // Map<sheet名, Map<姓名, Map<key, value>>> 数据
        Map<String, Map<String, Map<String, String>>> sheetExcelMap = new HashMap<>();
        // 如果是JAQ要调用泰国团队的接口,如果不是,去表里面找
        setDealTaiData(ids, tExamReportList, reportType, sheetExcelMap);
        // 构造值
        setRportListValue(reportResultMap, demograpyMap, sheetExcelMap, reportType);
        // 弄成和他们原来一样
        setSysHeadToEnglish(tExamReportList, reportResultMap, reportType);
        // 写文件
        writeMutiFile(fileNameResult, reportResultMap);
        // 返回下载
        return AjaxResult.success(examUtilService.getLangOrLocalLangString("", tExamReportList.get(0).getProductName()) + "_DateReport.xlsx");
    }
    private void setDealTaiData(@PathVariable("ids") String[] ids, List<TExamReport> tExamReportList, String reportType, Map<String, Map<String, Map<String, String>>> sheetExcelMap) throws IOException {
        if (Objects.equals(reportType, ReportTypeEnum.JAQ.getCode())) {
            // 要删除的文件
@@ -514,13 +637,31 @@
    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.getWriter(fileNameResult, entryReport.getKey());
            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 writeMutiFile(String fileNameResult, Map<String, List<List<Object>>> reportResultMap) {
        FileUtil.del(fileNameResult);
        ExcelWriter writer = null;
        for (Map.Entry<String, List<List<Object>>> entryReport : reportResultMap.entrySet()) {
            if (Objects.isNull(writer)) {
                writer = new ExcelWriter(fileNameResult,entryReport.getKey());
            }
            writer.setSheet(entryReport.getKey());
            StyleSet styleSet = writer.getStyleSet();
            styleSet.setBorder(BorderStyle.NONE, IndexedColors.OLIVE_GREEN);
            writer.write(entryReport.getValue(), true);
            writer.autoSizeColumnAll();
            writer.setSheet(entryReport.getKey());
        }
        writer.close();
    }
    private void setReportResultList(List<Object> demographyHeadSystem, List<List<Object>> reportResultList, Map<String, Object> textMap) {
@@ -556,6 +697,10 @@
    private String getReportType(TExamReport tExamReport) {
        String reportType = ReportTypeEnum.RuiLin.getCode();
        TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(tExamReport.getProductId());
        tExamPaper.getName();
        if (tExamPaper.getName().indexOf("睿邻")>0 || tExamPaper.getName().indexOf("RuiLin")>0 ) {
            return reportType;
        }
        List<TReportTemplate> tReportTemplateList = itReportTemplateService.selectTReportTemplates(tExamPaper.getReportTemplateId());
        for (TReportTemplate tReportTemplate : tReportTemplateList) {
            if (Objects.isNull(tReportTemplate.getReportType())) {