feat: 征求意见流程结束后生成征求意见稿
This commit is contained in:
+164
-5
@@ -1,8 +1,10 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.listener;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.jero.common.util.CommonUtils;
|
||||
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
|
||||
@@ -10,16 +12,30 @@ import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdvi
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
|
||||
import com.jero.modules.laws.common.constant.FieldCommon;
|
||||
import com.jero.modules.laws.common.service.ILawsCommonService;
|
||||
import com.jero.modules.oss.entity.OSSFile;
|
||||
import com.jero.modules.oss.service.IOSSFileService;
|
||||
import com.jero.modules.tag.enums.TableNameEnum;
|
||||
import lombok.SneakyThrows;
|
||||
import org.activiti.engine.delegate.DelegateExecution;
|
||||
import org.activiti.engine.delegate.ExecutionListener;
|
||||
import org.apache.poi.xwpf.usermodel.*;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.mock.web.MockMultipartHttpServletRequest;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.jero.modules.laws.common.constant.FieldCommon.MAIN_DRAFT_USER;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
@@ -37,6 +53,16 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
|
||||
@Resource
|
||||
private ILawsCommonService lawsCommonService;
|
||||
|
||||
@Resource
|
||||
private IOSSFileService ossFileService;
|
||||
|
||||
@Resource
|
||||
private EsRevisionAdviceService revisionAdviceService;
|
||||
|
||||
@Value(value = "${jero.uploadType}")
|
||||
private String uploadType;
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void notify(DelegateExecution delegateExecution) {
|
||||
// 获取流程实例Id
|
||||
@@ -48,6 +74,12 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
|
||||
ProcessEsRevision data = esRevisionService.getOne(revisionWrapper);
|
||||
// 将数据转换为Map
|
||||
Map<String, Object> variables = transMap(data);
|
||||
Date adviceDeadline = data.getAdviceDeadline();
|
||||
if (adviceDeadline != null) {
|
||||
// 制作征求意见稿
|
||||
String draftFileId = this.makeDraftFile(data);
|
||||
variables.put(FieldCommon.FILE_DRAFT_FOR_COMMENT, draftFileId);
|
||||
}
|
||||
// 发布企标
|
||||
String esId = lawsCommonService.commonAdd(variables);
|
||||
// 所有意见设置标准Id
|
||||
@@ -58,14 +90,12 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
|
||||
list.forEach(item -> item.setStandardId(esId));
|
||||
esAdviceService.updateBatchById(list);
|
||||
}
|
||||
// 更改企标计划状态
|
||||
}
|
||||
|
||||
private Map<String, Object> transMap(ProcessEsRevision data) {
|
||||
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
|
||||
variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue());
|
||||
// 主起草人
|
||||
String mainDraftUser = (String) variables.get(MAIN_DRAFT_USER);
|
||||
variables.put(FieldCommon.MAIN_DRAFTING_USER, mainDraftUser);
|
||||
// 标准状态
|
||||
variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.SEEK_FOR_OPINIONS.getStateValue());
|
||||
String standardId = IdWorker.getIdStr();
|
||||
@@ -75,4 +105,133 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
|
||||
variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, onEditFile);
|
||||
return variables;
|
||||
}
|
||||
|
||||
private String makeDraftFile(ProcessEsRevision data) throws Exception {
|
||||
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
|
||||
String standardNo = (String) variables.get(FieldCommon.STANDARD_NUMBER);
|
||||
String standardName = (String) variables.get(FieldCommon.STANDARD_NAME);
|
||||
ClassPathResource resource = new ClassPathResource("wordTemplate/征求意见反馈单.docx");
|
||||
// 使用ClassPathResource来读取模板文件
|
||||
try (InputStream fis = resource.getInputStream()) {
|
||||
XWPFDocument document = new XWPFDocument(fis);
|
||||
|
||||
// Iterate through paragraphs to find "标准名称:"
|
||||
for (XWPFParagraph paragraph : document.getParagraphs()) {
|
||||
for (XWPFRun run : paragraph.getRuns()) {
|
||||
String text = run.getText(0);
|
||||
if (text != null && text.contains("标准名称:")) {
|
||||
// Append the new text right after "标准名称:"
|
||||
text = text + standardName;
|
||||
run.setText(text, 0); // Update the text in the current run
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取并修改文档中的表格
|
||||
List<XWPFTable> tables = document.getTables();
|
||||
if (!tables.isEmpty()) {
|
||||
XWPFTable firstTable = tables.get(0);
|
||||
setFirstTableContents(firstTable, data);
|
||||
}
|
||||
|
||||
// 创建临时文件
|
||||
String fileName = standardNo + "征求意见回函意见表";
|
||||
fileName = fileName.replaceAll("/", "");
|
||||
File tempFile = Files.createTempFile(fileName, ".docx").toFile();
|
||||
|
||||
// 将更改写入临时文件
|
||||
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
|
||||
document.write(fos);
|
||||
}
|
||||
|
||||
// 将文件作为MultipartFile封装
|
||||
MultipartFile multipartFile = new MockMultipartFile(
|
||||
"file", // 表单字段名称
|
||||
tempFile.getName(), // 文件名
|
||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document", // 内容类型
|
||||
Files.newInputStream(tempFile.toPath()) // 文件内容
|
||||
);
|
||||
|
||||
// 创建模拟的MultipartHttpServletRequest
|
||||
MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest();
|
||||
mockRequest.addFile(multipartFile); // 添加文件
|
||||
mockRequest.addParameter("biz", "temp"); // 添加其他表单字段
|
||||
|
||||
// 调用上传接口
|
||||
String bizPath = "esDraft";
|
||||
CommonUtils.upload(multipartFile, bizPath, uploadType);
|
||||
String savePath = CommonUtils.upload(multipartFile, bizPath, uploadType);
|
||||
|
||||
//上传成功 进行数据库存储
|
||||
OSSFile ossFile = new OSSFile();
|
||||
// 文件名
|
||||
ossFile.setStandardFileType(FieldCommon.FILE_DRAFT_FOR_COMMENT);
|
||||
ossFile.setStandardNumber(standardNo);
|
||||
ossFile.setFileName(fileName.substring(0, fileName.lastIndexOf("征求意见反馈单") + 7) + ".docx");
|
||||
ossFile.setUrl(savePath);
|
||||
ossFileService.save(ossFile);
|
||||
// 删除临时文件
|
||||
boolean delete = tempFile.delete();
|
||||
return ossFile.getId();
|
||||
}
|
||||
}
|
||||
|
||||
private void setFirstTableContents(XWPFTable table, ProcessEsRevision data) {
|
||||
List<EsRevisionAdvice> opinions = revisionAdviceService.list(new LambdaQueryWrapper<EsRevisionAdvice>()
|
||||
.eq(EsRevisionAdvice::getProcessInstanceId, data.getProcessInstanceId()));
|
||||
|
||||
List<String> termNo = opinions.stream().map(EsRevisionAdvice::getTermNum).collect(Collectors.toList());
|
||||
List<String> adviceList = opinions.stream().map(EsRevisionAdvice::getEditAdvice).collect(Collectors.toList());
|
||||
// 获取一个1-5的List
|
||||
List<String> noList = IntStream.rangeClosed(1, termNo.size()).mapToObj(String::valueOf).collect(Collectors.toList());
|
||||
// 获取表格的行列表
|
||||
List<XWPFTableRow> rows = table.getRows();
|
||||
if (!rows.isEmpty()) {
|
||||
// 序号
|
||||
setContentList(rows, 1, 0, noList);
|
||||
// 章节编号
|
||||
setContentList(rows, 1, 1, termNo);
|
||||
// 修改意见内容
|
||||
setContentList(rows, 1, 2, adviceList);
|
||||
}
|
||||
}
|
||||
|
||||
private void setContentList(List<XWPFTableRow> rows, int rowNum, int cellNum, List<String> contentList) {
|
||||
for (String content : contentList) {
|
||||
if (StrUtil.isBlank(content)) {
|
||||
continue;
|
||||
}
|
||||
setContent(rows, rowNum, cellNum, content, true, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void setContent(List<XWPFTableRow> rows, int rowNum, int cellNum, String content,
|
||||
boolean newLine, boolean alignCenter, boolean verCenter) {
|
||||
if (StrUtil.isBlank(content)) {
|
||||
return;
|
||||
}
|
||||
XWPFTableRow row = rows.get(rowNum);
|
||||
List<XWPFTableCell> cells = row.getTableCells();
|
||||
if (!cells.isEmpty()) {
|
||||
XWPFTableCell cell = cells.get(cellNum);
|
||||
XWPFParagraph paragraph;
|
||||
if (newLine) {
|
||||
paragraph = cell.addParagraph();
|
||||
} else {
|
||||
paragraph = cell.getParagraphs().get(0);
|
||||
}
|
||||
XWPFRun run = paragraph.createRun();
|
||||
// 设置段落居中(水平)
|
||||
if (alignCenter) {
|
||||
paragraph.setAlignment(ParagraphAlignment.CENTER);
|
||||
}
|
||||
run.setText(content);
|
||||
run.setFontSize(12);
|
||||
run.setFontFamily("新宋体");
|
||||
// 设置单元格垂直居中
|
||||
if (verCenter) {
|
||||
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user