包头bug修改

This commit is contained in:
guoshengxiong 2025-01-07 18:48:03 +08:00
parent b303c80eee
commit ebdbbb3f13
11 changed files with 122 additions and 79 deletions

View File

@ -3,7 +3,6 @@ package com.zhgd.xmgl.modules.baotou.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -18,7 +17,6 @@ import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService;
import com.zhgd.xmgl.util.EasyPoiUtil;
import com.zhgd.xmgl.util.Fileutils;
import com.zhgd.xmgl.util.FlowUtil;
import com.zhgd.xmgl.util.PathUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@ -322,7 +320,7 @@ public class CivilEngineeringQualityInspectionOrderController {
}
}
File tempFile = File.createTempFile(IdUtil.simpleUUID(), ".docx");
EasyPoiUtil.exportWord(map, url, tempFile);
EasyPoiUtil.exportNewLineWord(map, url, tempFile);
EasyPoiUtil.wordToPdfExport(response, tempFile);
}

View File

@ -245,7 +245,7 @@ public class ConfinedSpaceOperationController {
}
}
File tempFile = File.createTempFile(IdUtil.simpleUUID(), ".docx");
EasyPoiUtil.exportWord(map, url, tempFile);
EasyPoiUtil.exportNewLineWord(map, url, tempFile);
EasyPoiUtil.wordToPdfExport(response, tempFile);
}

View File

@ -324,7 +324,7 @@ public class FirstOrderFireController {
}
}
File tempFile = File.createTempFile(IdUtil.simpleUUID(), ".docx");
EasyPoiUtil.exportWord(map, url, tempFile);
EasyPoiUtil.exportNewLineWord(map, url, tempFile);
EasyPoiUtil.wordToPdfExport(response, tempFile);
}

View File

@ -240,7 +240,7 @@ public class HeightPermitController {
}
}
File tempFile = File.createTempFile(IdUtil.simpleUUID(), ".docx");
EasyPoiUtil.exportWord(map, url, tempFile);
EasyPoiUtil.exportNewLineWord(map, url, tempFile);
EasyPoiUtil.wordToPdfExport(response, tempFile);
}

View File

@ -265,7 +265,7 @@ public class LiftingOperationController {
}
File tempFile = File.createTempFile(IdUtil.simpleUUID(), ".docx");
EasyPoiUtil.exportWord(map, url, tempFile);
EasyPoiUtil.exportNewLineWord(map, url, tempFile);
EasyPoiUtil.wordToPdfExport(response, tempFile);
}

View File

@ -337,7 +337,7 @@ public class NondestructiveTestOrderTicketController {
}
}
File tempFile = File.createTempFile(IdUtil.simpleUUID(), ".docx");
EasyPoiUtil.exportWord(map, url, tempFile);
EasyPoiUtil.exportNewLineWord(map, url, tempFile);
EasyPoiUtil.wordToPdfExport(response, tempFile);
}

View File

@ -183,7 +183,7 @@ public class WitnessSamplingRecordController {
url = Fileutils.getExportTemplateFile("excel/work/见证取样记录模板.docx").getAbsolutePath();
File tempFile = File.createTempFile(IdUtil.simpleUUID(), ".docx");
EasyPoiUtil.exportWord(map, url, tempFile);
EasyPoiUtil.exportNewLineWord(map, url, tempFile);
EasyPoiUtil.wordToPdfExport(response, tempFile);
}

View File

@ -363,7 +363,7 @@ public class ExamQuestionBankController {
List<ExamQuestionOption> examQuestionOptionList = new ArrayList<>();
int index = 0;
for (Map<String, String> examQuestionBankImport : examQuestionBankImports) {
if (StringUtils.isNotBlank(examQuestionBankImport.get("*科目名称").trim())) {
if (examQuestionBankImport.get("*科目名称") != null && StringUtils.isNotBlank(examQuestionBankImport.get("*科目名称").trim())) {
index++;
List<ExamSubject> subjects = subList.stream().filter(s -> s.getName().equals(examQuestionBankImport.get("*科目名称").trim())).collect(Collectors.toList());
if (subjects == null || subjects.size() == 0) {
@ -395,7 +395,7 @@ public class ExamQuestionBankController {
examQuestionBank.setUpdateBy(systemUser.getUserId().toString());
examQuestionBank.setUpdateTime(examQuestionBank.getCreateTime());
examQuestionBankList.add(examQuestionBank);
} else if (StringUtils.isNotBlank(examQuestionBankImport.get("*选项代码").trim())) {
} else if (examQuestionBankImport.get("*选项代码") != null && StringUtils.isNotBlank(examQuestionBankImport.get("*选项代码").trim())) {
ExamQuestionOption examQuestionOption = new ExamQuestionOption();
examQuestionOption.setQuestionId((long) index);
examQuestionOption.setOptionCode(examQuestionBankImport.get("*选项代码").trim());
@ -416,7 +416,7 @@ public class ExamQuestionBankController {
}
return Result.ok("文件导入成功!数据行数:" + examQuestionBankImports.size());
} catch (Exception e) {
log.error(e.getMessage());
log.error("通过excel导入题目管理信息", e);
return Result.error(e.getMessage());
} finally {
try {

View File

@ -1,9 +1,11 @@
package com.zhgd.xmgl.modules.exam.controller;
import cn.afterturn.easypoi.word.WordExportUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.annotation.OperLog;
@ -15,24 +17,21 @@ import com.zhgd.xmgl.modules.exam.service.IExamTrainRecordService;
import com.zhgd.xmgl.modules.exam.service.IExamTrainService;
import com.zhgd.xmgl.modules.exam.vo.ExamQuestionBankVo;
import com.zhgd.xmgl.modules.exam.vo.ExamTrainRecordVo;
import com.zhgd.xmgl.util.EasyPoiUtil;
import com.zhgd.xmgl.util.Fileutils;
import com.zhgd.xmgl.util.WordUtils;
import com.zhgd.xmgl.util.PathUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -175,11 +174,12 @@ public class ExamWorkerController {
String recordId = MapUtils.getString(param, "recordId");
List<ExamQuestionBankVo> questionBankVos = examTrainRecordService.getAnswerDetail(param);
Map<Integer, List<ExamQuestionBankVo>> typeMap = questionBankVos.stream().collect(Collectors.groupingBy(ExamQuestionBankVo::getType));
HashMap<String, Object> imageMap = new HashMap<>();
//封装数据
Map<String, Object> params = new HashMap<String, Object>();
for (Map.Entry<Integer, List<ExamQuestionBankVo>> entry : typeMap.entrySet()) {
Integer key = entry.getKey();
int i = 1;
int[] i = {1};
List<ExamQuestionBankVo> list = entry.getValue();
if (CollUtil.isNotEmpty(list)) {
ExamQuestionBankVo one = list.get(0);
@ -188,83 +188,68 @@ public class ExamWorkerController {
BigDecimal total = NumberUtil.mul(list.size(), score);
if (key == 1) {
params.put("t1", "一、单选题:(每题" + score + "分,共计" + total + "分)");
//遍历题目
for (ExamQuestionBankVo question : list) {
content.append(" ").append(i++).append("").append(question.getQuestionName()).append("\n").append(" ");
List<ExamQuestionOption> optionList = question.getOptionList();
//遍历选项
for (ExamQuestionOption option : optionList) {
content.append(option.getOptionCode()).append("").append(option.getOptionDesc()).append(" ");
}
content.append("\n");
}
addOption(list, content, i, imageMap);
params.put("c1", content.toString());
} else if (key == 2) {
params.put("t2", "二、多选题:(每题" + one.getScore() + "分,共计" + total + "分、漏选少选得" + NumberUtil.div(one.getScore(), 2, 2) + "分,错选不得分。)");
//遍历题目
for (ExamQuestionBankVo question : list) {
content.append(" ").append(i++).append("").append(question.getQuestionName()).append("\n").append(" ");
List<ExamQuestionOption> optionList = question.getOptionList();
//遍历选项
for (ExamQuestionOption option : optionList) {
content.append(option.getOptionCode()).append("").append(option.getOptionDesc()).append(" ");
}
content.append("\n");
}
addOption(list, content, i, imageMap);
params.put("c2", content.toString());
} else {
params.put("t3", "三、判断题(每题" + one.getScore() + "分,共" + total + "分,正确:打√,错误:打×)");
//遍历题目
for (ExamQuestionBankVo question : list) {
content.append(" ").append(i++).append("").append(question.getQuestionName()).append("\n").append(" ");
List<ExamQuestionOption> optionList = question.getOptionList();
//遍历选项
for (ExamQuestionOption option : optionList) {
content.append(option.getOptionCode()).append("").append(option.getOptionDesc()).append(" ");
}
content.append("\n");
}
addOption(list, content, i, imageMap);
params.put("c3", content.toString());
}
}
}
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> obj;
for (int i = 0; i < 5; i++) {
obj = new HashMap<String, Object>();
obj.put("name", "abc-" + i);
obj.put("age", i);
obj.put("sex", "男-" + i);
list.add(obj);
}
params.put("objs", list);
String url;
// url = "C:\\Users\\Administrator\\Desktop\\下载试卷模板.docx";
url = Fileutils.getExportTemplateFile("template/下载试卷模板.docx").getAbsolutePath();
//
//jar包获取不到文件路径
//URLDecoder.decode() 解决获取中文名称文件路径乱码
String templatePath = URLDecoder.decode(FileUtil.file(url).getPath(), "UTF-8");
String tempUrl = Fileutils.getExportTemplateFile("template/下载试卷模板.docx").getAbsolutePath();
// String tempUrl = "C:\\Users\\Administrator\\Desktop\\下载试卷模板.docx";
//生成word文档流
XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
//文本换行
WordUtils.addBreakInCell(doc.getParagraphs());
//设置响应体内容类型
response.setContentType("application/octet-stream");
//添加响应头
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("下载试卷.docx", "UTF-8"));
//暴露新添加的响应头
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
//将word文档流输出到输出流中
doc.write(response.getOutputStream());
//关闭流
doc.close();
EasyPoiUtil.exportNewLineWord(response, params, FileUtil.file(tempUrl));
} catch (Exception e) {
log.error("导出试卷出现异常", e);
}
}
/**
* 导出word添加题目和选项
*
* @param list
* @param content
* @param i
* @param imageMap
*/
private void addOption(List<ExamQuestionBankVo> list, StringBuilder content, int[] i, HashMap<String, Object> imageMap) {
//遍历题目
for (ExamQuestionBankVo question : list) {
content.append(" ").append(i[0]).append("");
i[0] += 1;
if (StrUtil.isNotBlank(question.getPic())) {
JSONArray ja = JSON.parseArray(question.getPic());
if (CollUtil.isNotEmpty(ja)) {
//保存图片占位符
/*try {
String imageKey = "image" + i[0];
imageMap.put(imageKey, EasyPoiUtil.imgFormatting(PathUtil.getBasePath() + "/" + ja.getJSONObject(0).getString("url"), 18, 18));
content.append("{{" + imageKey + "}}");
} catch (Exception e) {
log.error("导出word添加题目和选项错误", e);
}*/
}
}
content.append(question.getQuestionName()).append("\n").append(" ");
List<ExamQuestionOption> optionList = question.getOptionList();
//遍历选项
for (ExamQuestionOption option : optionList) {
content.append(option.getOptionCode()).append("").append(option.getOptionDesc()).append(" ");
}
content.append("\n");
}
}
}

View File

@ -7,13 +7,43 @@ import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Map;
@Slf4j
public class EasyPoiUtil {
/**
* 导出word
*
* @param response
* @param params
* @param file
* @throws Exception
*/
public static void exportNewLineWord(HttpServletResponse response, Map<String, Object> params, File file) throws Exception {
try {
XWPFDocument doc = WordExportUtil.exportWord07(URLDecoder.decode(file.getPath(), "UTF-8"), params);
WordUtils.addBreakInCell(doc.getParagraphs());
//设置响应体内容类型
response.setContentType("application/octet-stream");
//添加响应头
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("下载试卷.docx", "UTF-8"));
//暴露新添加的响应头
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
//将word文档流输出到输出流中
doc.write(response.getOutputStream());
//关闭流
doc.close();
} catch (Exception e) {
log.error("exportNewLineWord", e);
}
}
/**
* 根据模板导出word
@ -29,7 +59,27 @@ public class EasyPoiUtil {
doc.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
log.error("exportWord", e);
}
}
/**
* 根据模板导出word会换行的
*
* @param map
* @param url
* @param tempFile
*/
public static void exportNewLineWord(Map<String, Object> map, String url, File tempFile) {
try {
XWPFDocument doc = WordExportUtil.exportWord07(url, map);
//文本换行
WordUtils.addBreakInCell(doc.getParagraphs());
FileOutputStream fos = new FileOutputStream(tempFile);
doc.write(fos);
fos.close();
} catch (Exception e) {
log.error("exportNewLineWord", e);
}
}
@ -84,10 +134,20 @@ public class EasyPoiUtil {
return image;
}
/**
* 导出项目子账号签名图片
*
* @param u
* @param width
* @param height
* @return
*/
public static Object getImgFromUser(SystemUser u, int width, int height) {
if (u != null && StrUtil.isNotBlank(u.getElectronicSignature())) {
return EasyPoiUtil.imgFormatting(PathUtil.getBasePath() + "/" + u.getElectronicSignature(), width, height);
}
return null;
}
}