From aa9f73abcf4b730aa04afcdee94dd31358e4cde6 Mon Sep 17 00:00:00 2001 From: lijiarao Date: Mon, 8 Jan 2024 18:01:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=2080250=20=E8=BD=A6=E5=9E=8B=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=BA=93=E8=AF=A6=E6=83=85-=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E8=AF=84=E4=BC=B0=E7=BB=93=E6=9E=9C=E6=8F=90=E7=A4=BA=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LawsAssessResultsServiceImpl.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/laws-modules/src/main/java/com/jero/modules/projectLibrary/service/impl/LawsAssessResultsServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/projectLibrary/service/impl/LawsAssessResultsServiceImpl.java index 7206efc7..167e787c 100644 --- a/laws-modules/src/main/java/com/jero/modules/projectLibrary/service/impl/LawsAssessResultsServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/projectLibrary/service/impl/LawsAssessResultsServiceImpl.java @@ -195,6 +195,18 @@ public class LawsAssessResultsServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(LawsAssessResults::getProjectId,assess.getProjectId()) + .eq(LawsAssessResults::getStandardId,assess.getStandardId()) + .groupBy(LawsAssessResults::getTermNumber) + .groupBy(LawsAssessResults::getAssessorId); + wrapper.orderByDesc(LawsAssessResults::getCreateTime); + wrapper.last("limit 1"); + assessResults = this.getOne(wrapper); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper .eq(LawsAssessResults::getProjectId,assessResults.getProjectId()) From 6ba681aca2dde3597244f56456ef344487c9949b Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 8 Jan 2024 18:02:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E4=BC=81=E6=A0=87=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E6=B5=81=E7=A8=8B-=E6=B5=81=E7=A8=8B=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E7=94=9F=E6=88=90=E4=BF=AE=E6=94=B9=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ESChangeController.java | 29 +- .../entity/EsChangeTaskNameConstant.java | 15 + .../listener/ProcessESChangeEndListener.java | 303 +++++++++++++++++- .../wordTemplate/企标更改单模板.docx | Bin 0 -> 25111 bytes pom.xml | 3 +- 5 files changed, 337 insertions(+), 13 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/entity/EsChangeTaskNameConstant.java create mode 100644 laws-modules/src/main/resources/wordTemplate/企标更改单模板.docx diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/controller/ESChangeController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/controller/ESChangeController.java index 4704be35..76280eb8 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/controller/ESChangeController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/controller/ESChangeController.java @@ -8,7 +8,9 @@ import com.jero.modules.activiti.process.common.entity.ProcessDraft; import com.jero.modules.activiti.process.common.entity.TransferVO; import com.jero.modules.activiti.process.common.service.ActFlowCommonService; import com.jero.modules.activiti.process.esArchive.entity.vo.ESArchiveDataVO; +import com.jero.modules.activiti.process.esChange.entity.ProcessEsChange; import com.jero.modules.activiti.process.esChange.entity.vo.ESChangeDataVO; +import com.jero.modules.activiti.process.esChange.listener.ProcessESChangeEndListener; import com.jero.modules.activiti.process.esChange.service.ProcessEsChangeService; import com.jero.modules.activiti.process.fb.service.IProcessHandleService; import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; @@ -20,6 +22,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; /** @@ -47,7 +50,7 @@ public class ESChangeController { * @param changeData */ @AutoLog(value = "企标更改流程-发起流程") - @ApiOperation(value="企标更改流程-发起流程", notes="企标更改流程-发起流程") + @ApiOperation(value = "企标更改流程-发起流程", notes = "企标更改流程-发起流程") @PostMapping("/start") public Result startProcess(@RequestBody ESChangeDataVO changeData) { changeService.startProcess(changeData); @@ -56,10 +59,11 @@ public class ESChangeController { /** * 保存到待办 + * * @param processInfoVO */ @AutoLog(value = "企标更改流程-保存") - @ApiOperation(value="企标更改流程-保存", notes="企标更改流程-保存") + @ApiOperation(value = "企标更改流程-保存", notes = "企标更改流程-保存") @PostMapping("/save") public Result save(@Validated @RequestBody ProcessInfoVO processInfoVO) { changeService.saveToDraft(processInfoVO); @@ -68,10 +72,11 @@ public class ESChangeController { /** * 保存到待办 + * * @param taskId */ @AutoLog(value = "企标更改流程-办理") - @ApiOperation(value="企标更改流程-办理", notes="企标更改流程-办理") + @ApiOperation(value = "企标更改流程-办理", notes = "企标更改流程-办理") @GetMapping("/handle/{taskId}") @Translation public Result handle(@PathVariable("taskId") String taskId) { @@ -88,20 +93,28 @@ public class ESChangeController { * @param changeData */ @AutoLog(value = "企标更改流程-同意") - @ApiOperation(value="企标更改流程-同意", notes="企标更改流程-同意") + @ApiOperation(value = "企标更改流程-同意", notes = "企标更改流程-同意") @PostMapping("/agree") public Result agree(@RequestBody ESChangeDataVO changeData) { changeService.approval(changeData, true); return Result.OK(); } + @AutoLog(value = "企标更改流程-测试修改单生成") + @ApiOperation(value = "企标更改流程-测试修改单生成", notes = "企标更改流程-测试修改单生成", produces = "application/octet-stream") + @PostMapping("/test") + public Result testModifyGen(HttpServletResponse response) throws Exception { +// processESChangeEndListener.genModificationOrder(new ProcessEsChange(), response); + return Result.OK(); + } + /** * 驳回 * * @param changeData */ @AutoLog(value = "企标更改流程-驳回") - @ApiOperation(value="企标更改流程-驳回", notes="企标更改流程-驳回") + @ApiOperation(value = "企标更改流程-驳回", notes = "企标更改流程-驳回") @PostMapping("/reject") public Result reject(@RequestBody ESChangeDataVO changeData) { changeService.approval(changeData, false); @@ -110,10 +123,9 @@ public class ESChangeController { /** * 转办 - * */ @AutoLog(value = "企标更改流程-转办") - @ApiOperation(value="企标更改流程-转办", notes="企标更改流程-转办") + @ApiOperation(value = "企标更改流程-转办", notes = "企标更改流程-转办") @PostMapping(value = "/transfer") public Result transfer(@RequestBody TransferVO transferVO) { processHandleService.transfer(transferVO.getTaskId(), transferVO.getUserId()); @@ -122,11 +134,12 @@ public class ESChangeController { /** * 草稿办理 + * * @param draftId * @param projectId */ @AutoLog(value = "企标更改流程-草稿办理") - @ApiOperation(value="企标更改流程-草稿办理", notes="企标更改流程-草稿办理") + @ApiOperation(value = "企标更改流程-草稿办理", notes = "企标更改流程-草稿办理") @GetMapping("/draftHandle") @Translation public Result draftHandle(@RequestParam("draftId") @ApiParam("草稿Id") String draftId) { diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/entity/EsChangeTaskNameConstant.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/entity/EsChangeTaskNameConstant.java new file mode 100644 index 00000000..31fac64b --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/entity/EsChangeTaskNameConstant.java @@ -0,0 +1,15 @@ +package com.jero.modules.activiti.process.esChange.entity; + +/** + * @author: Mzaxd + * @Date: 2023/10/27 7:32 + */ +public class EsChangeTaskNameConstant { + + public static final String MAIN_DRAFTER_INIT = "主起草人发起"; + public static final String RELATED_USER_CHECK = "相关人员校对"; + public static final String MAIN_DRAFTER_LEADER_APPROVAL = "主起草人主管级领导审批"; + public static final String STANDARDIZATION_APPROVAL = "标准化审批"; + public static final String MAIN_DRAFTER_LEADER_LEADER_APPROVAL = "起草人主管级上一级领导审批"; + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java index 13b36687..b9c0e74e 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java @@ -1,24 +1,51 @@ package com.jero.modules.activiti.process.esChange.listener; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.api.vo.Result; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.DictModel; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.enums.CommitFlagEnum; import com.jero.modules.activiti.process.common.enums.StandardStateEnum; +import com.jero.modules.activiti.process.esChange.entity.EsChangeOpinion; +import com.jero.modules.activiti.process.esChange.entity.EsChangeTaskNameConstant; import com.jero.modules.activiti.process.esChange.entity.ProcessEsChange; +import com.jero.modules.activiti.process.esChange.service.EsChangeOpinionService; import com.jero.modules.activiti.process.esChange.service.ProcessEsChangeService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.common.service.ILawsCommonService; import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.system.controller.CommonController; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.*; import com.jero.modules.tag.enums.TableNameEnum; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.ExecutionListener; +import org.apache.poi.xwpf.usermodel.*; +import org.springframework.core.io.ClassPathResource; +import org.springframework.mock.web.MockHttpServletResponse; +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 javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.file.Files; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author: Mzaxd @@ -42,6 +69,30 @@ public class ProcessESChangeEndListener implements ExecutionListener { @Resource private ILawsCommonService commonService; + @Resource + private ISysUserService sysUserService; + + @Resource + private ISysUserDepartService sysUserDepartService; + + @Resource + private ISysDepartService sysDepartService; + + @Resource + private ISysDictService dictService; + + @Resource + private ProcessApprovalRecordService approvalRecordService; + + @Resource + private CommonController commonController; + + @Resource + private IOSSFileService ossFileService; + + @Resource + private EsChangeOpinionService changeOpinionService; + @Override public void notify(DelegateExecution delegateExecution) { log.info("企标更改流程结束 监听执行器开始执行"); @@ -55,27 +106,271 @@ public class ProcessESChangeEndListener implements ExecutionListener { // 根据标准编号找到标准Id LawsEnterpriseStandard es = esService.getOne(new LambdaQueryWrapper() .eq(LawsEnterpriseStandard::getStandardNumber, standNo)); - change.setId(es.getId()); // 转换成Map 然后走commonEdit接口 Map parameterMap = new HashMap<>(); this.buildMap(parameterMap, change); commonService.commonEdit(parameterMap); + // 生成修改单号 + this.genModificationOrderNumber(change); + esChangeService.updateById(change); // 生成修改单 - this.genModificationOrder(change); + try { + this.genModificationOrder(change); + } catch (Exception e) { + log.error("生成企标编号为{}的更改单失败", es.getStandardNumber()); + log.error(e.getMessage()); + throw new JeroBootException("生成企标编号为" + es.getStandardNumber() + "的更改单失败"); + } log.info("企标更改流程监听执行器执行结束"); } - private void genModificationOrder(ProcessEsChange change) { + public void genModificationOrder(ProcessEsChange change) throws Exception { String esNo = change.getStandardNumber(); + ClassPathResource resource = new ClassPathResource("wordTemplate/企标更改单模板.docx"); + // 使用ClassPathResource来读取模板文件 + try (InputStream fis = resource.getInputStream()) { + XWPFDocument document = new XWPFDocument(fis); + // 获取并修改文档中的表格 + List tables = document.getTables(); + if (!tables.isEmpty()) { + XWPFTable firstTable = tables.get(0); + setFirstTableContents(firstTable, change); + } + // 循环遍历所有页脚 + for (XWPFFooter footer : document.getFooterList()) { + // 获取页脚中的所有表格 + List footerTables = footer.getTables(); + // 假设您想要修改第一个表格 + if (!footerTables.isEmpty()) { + XWPFTable footerTable = footerTables.get(0); + // 在这里调用您的方法来修改页脚中的表格 + setSecondTableContents(footerTable, change); + } + } + // 创建临时文件 + String fileName = change.getModifyOrderNum() + "-" + esNo + "标准更改单"; + 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"); // 添加其他表单字段 + + // 调用上传接口 + Result result = commonController.upload(mockRequest, new MockHttpServletResponse()); + OSSFile file = result.getResult(); + file.setStandardFileType(FieldCommon.FILE_MODIFICATION_LIST); + file.setStandardNumber(esNo); + file.setStandardId(change.getStandardId()); + file.setFileName(fileName.substring(0, fileName.lastIndexOf("标准更改单") + 5) + ".docx"); + ossFileService.updateById(file); + // 删除临时文件 + boolean delete = tempFile.delete(); + } + } + + private void writeToResponse(HttpServletResponse response, File file) throws IOException { + response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); + + try (OutputStream out = response.getOutputStream(); FileInputStream fis = new FileInputStream(file)) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = fis.read(buffer)) != -1) { + out.write(buffer, 0, bytesRead); + } + } + } + + private void setFirstTableContents(XWPFTable table, ProcessEsChange change) { + List opinions = changeOpinionService.list(new LambdaQueryWrapper() + .eq(EsChangeOpinion::getBusinessId, change.getId())); + + List changeReasonList = opinions.stream().map(EsChangeOpinion::getUpdateReason).collect(Collectors.toList()); + List beforeUpdateList = opinions.stream().map(EsChangeOpinion::getBeforeUpdate).collect(Collectors.toList()); + List afterUpdateList = opinions.stream().map(EsChangeOpinion::getAfterUpdate).collect(Collectors.toList()); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + // 获取表格的行列表 + List rows = table.getRows(); + if (!rows.isEmpty()) { + // 图样文件代号 + setContent(rows, 1, 0, change.getStandardNumber(), false, false, false); + // 图样(文件)更改通知单号 + setContent(rows, 1, 1, change.getModifyOrderNum(), false, false, false); + // 名称 + setContent(rows, 2, 0, change.getStandardName(), false, false, false); + // 更改级别代号 + setContent(rows, 2, 1, change.getLevelCode(), false, false, false); + // 有无二维或三维图 + setContent(rows, 3, 1, change.getHas2d3dGraph(), false, false, false); + // 更改理由(依据) + setContentList(rows, 4, 0, changeReasonList); + // 更改前 + setContentList(rows, 5, 0, beforeUpdateList); + // 更改后 + setContentList(rows, 5, 1, afterUpdateList); + // 顾客确认(适用军品) + setContent(rows, 6, 0, change.getCustomerConfirmation(), true, false, false); + // 刷新文件号(三维) + setContent(rows, 6, 1, change.getRefreshFileNumber(), true, false, false); + // 关联更改项 + setContent(rows, 7, 1, change.getRelatedChanges(), true, false, false); + // 库存 + setContent(rows, 8, 1, change.getInventory(), false, true, true); + // 在制品 + setContent(rows, 9, 1, change.getWorkInProgress(), false, true, true); + // 备件 + setContent(rows, 10, 1, change.getSpareParts(), false, true, true); + // 更改标记 + setContent(rows, 11, 1, change.getChangeTag(), false, true, true); + // 处数 + setContent(rows, 11, 3, change.getTreatmentCount(), false, true, true); + // 生效日期 + setContent(rows, 11, 5, formatter.format(change.getEffectiveDate()), false, true, true); + } + } + + private void setContentList(List rows, int rowNum, int cellNum, List contentList) { + for (String content : contentList) { + setContent(rows, rowNum, cellNum, content, true, false, false); + } + } + + private void genModificationOrderNumber(ProcessEsChange change) { + String deptCode = "U"; + // 找到单位代号 + String createBy = change.getCreateBy(); + SysUser createUser = sysUserService.getUserByName(createBy); + String deptId = sysUserDepartService.getFirstDeptIdByUserId(createUser.getId()); + SysDepart dept = sysDepartService.getById(deptId); + if (dept != null) { + String deptName = dept.getDepartName(); + List dictItems = dictService.getDictItems("es_modify_order_dept_code"); + for (DictModel dictItem : dictItems) { + if (dictItem.getText().equals(deptName)) { + deptCode = dictItem.getValue(); + break; + } + } + } + // 找到年份 + Date effectiveDate = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy"); + String year = formatter.format(effectiveDate); + // 找到月份 + formatter = new SimpleDateFormat("MM"); + String month = formatter.format(effectiveDate); + // 获取顺序号 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(ProcessEsChange::getModifyOrderNum, "B" + deptCode + year + month); + queryWrapper.orderByDesc(ProcessEsChange::getModifyOrderNum); + List changes = esChangeService.list(queryWrapper); + String modifyOrderNum; + if (changes.isEmpty()) { + modifyOrderNum = "B" + deptCode + year + month + "001"; + change.setModifyOrderNum(modifyOrderNum); + return; + } + String lastModifyOrderNum = changes.get(0).getModifyOrderNum().substring(9); + String newModifyOrderNum = String.format("%03d", Integer.parseInt(lastModifyOrderNum) + 1); + modifyOrderNum = "B" + deptCode + year + month + newModifyOrderNum; + change.setModifyOrderNum(modifyOrderNum); + } + + private void setSecondTableContents(XWPFTable table, ProcessEsChange change) { + // 找到所有节点审批记录 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, change.getProcessInstanceId()); + queryWrapper.eq(ProcessApprovalRecord::getCommitFlag, CommitFlagEnum.PASS.getValue()); + queryWrapper.orderByAsc(ProcessApprovalRecord::getCreateTime); + List records = approvalRecordService.list(queryWrapper); + Map userMap = records.stream() + .collect(Collectors.toMap(ProcessApprovalRecord::getTaskName, e -> { + SysUser user; + if (StrUtil.isNotBlank(e.getTransferBy())) { + user = sysUserService.getById(e.getTransferBy()); + } else { + user = sysUserService.getById(e.getUserId()); + } + e.setUserId(user.getRealname()); + return e; + })); + // 获取表格的行列表 + List rows = table.getRows(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + if (!rows.isEmpty()) { + ProcessApprovalRecord recordOne = userMap.get(EsChangeTaskNameConstant.MAIN_DRAFTER_INIT); + ProcessApprovalRecord recordTwo = userMap.get(EsChangeTaskNameConstant.RELATED_USER_CHECK); + ProcessApprovalRecord recordThree = userMap.get(EsChangeTaskNameConstant.MAIN_DRAFTER_LEADER_APPROVAL); + ProcessApprovalRecord recordFour = userMap.get(EsChangeTaskNameConstant.STANDARDIZATION_APPROVAL); + ProcessApprovalRecord recordFive = userMap.get(EsChangeTaskNameConstant.MAIN_DRAFTER_LEADER_LEADER_APPROVAL); + + // 设计 + setContent(rows, 0, 1, recordOne.getUserId(), false, true, true); + setContent(rows, 1, 1, formatter.format(recordOne.getEndTime()), false, true, true); + // 校对 + setContent(rows, 0, 3, recordTwo.getUserId(), false, true, true); + setContent(rows, 1, 3, formatter.format(recordTwo.getEndTime()), false, true, true); + // 审核 + setContent(rows, 0, 5, recordThree.getUserId(), false, true, true); + setContent(rows, 1, 5, formatter.format(recordThree.getEndTime()), false, true, true); + // 标准化 + setContent(rows, 0, 7, recordFour.getUserId(), false, true, true); + setContent(rows, 1, 7, formatter.format(recordFour.getEndTime()), false, true, true); + // 批准 + setContent(rows, 0, 11, recordFive.getUserId(), false, true, true); + setContent(rows, 1, 11, formatter.format(recordFive.getEndTime()), false, true, true); + } + } + + private void setContent(List rows, int rowNum, int cellNum, String content, + boolean newLine, boolean alignCenter, boolean verCenter) { + XWPFTableRow row = rows.get(rowNum); + List 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); + } + } } private void buildMap(Map parameterMap, ProcessEsChange change) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); parameterMap.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue()); - parameterMap.put(FieldCommon.ID, change.getId()); + parameterMap.put(FieldCommon.ID, change.getStandardId()); parameterMap.put(FieldCommon.STANDARD_NUMBER, change.getStandardNumber()); parameterMap.put(FieldCommon.STANDARD_NAME, change.getStandardName()); parameterMap.put(FieldCommon.GRADE_CLASSIFICATION, change.getGradeClassification()); diff --git a/laws-modules/src/main/resources/wordTemplate/企标更改单模板.docx b/laws-modules/src/main/resources/wordTemplate/企标更改单模板.docx new file mode 100644 index 0000000000000000000000000000000000000000..28ab4d88b9a249a599f643e8e6b6b373c998341a GIT binary patch literal 25111 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 T{r%DfCC(;34i2%-_pSc}43{LS literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index d27f82a2..bdf485bc 100644 --- a/pom.xml +++ b/pom.xml @@ -355,6 +355,8 @@ svg xlsx xls + docx + doc @@ -362,7 +364,6 @@ src/main/resources - true src/main/java