包头bug修改
This commit is contained in:
parent
b303c80eee
commit
ebdbbb3f13
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user