Merge remote-tracking branch 'origin/thirdStage' into thirdStage

This commit is contained in:
yjz
2024-01-08 18:09:46 +08:00
6 changed files with 349 additions and 13 deletions
@@ -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<ESChangeDataVO> 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) {
@@ -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 = "起草人主管级上一级领导审批";
}
@@ -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<LawsEnterpriseStandard>()
.eq(LawsEnterpriseStandard::getStandardNumber, standNo));
change.setId(es.getId());
// 转换成Map 然后走commonEdit接口
Map<String, Object> 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<XWPFTable> tables = document.getTables();
if (!tables.isEmpty()) {
XWPFTable firstTable = tables.get(0);
setFirstTableContents(firstTable, change);
}
// 循环遍历所有页脚
for (XWPFFooter footer : document.getFooterList()) {
// 获取页脚中的所有表格
List<XWPFTable> 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<OSSFile> 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<EsChangeOpinion> opinions = changeOpinionService.list(new LambdaQueryWrapper<EsChangeOpinion>()
.eq(EsChangeOpinion::getBusinessId, change.getId()));
List<String> changeReasonList = opinions.stream().map(EsChangeOpinion::getUpdateReason).collect(Collectors.toList());
List<String> beforeUpdateList = opinions.stream().map(EsChangeOpinion::getBeforeUpdate).collect(Collectors.toList());
List<String> afterUpdateList = opinions.stream().map(EsChangeOpinion::getAfterUpdate).collect(Collectors.toList());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// 获取表格的行列表
List<XWPFTableRow> 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<XWPFTableRow> rows, int rowNum, int cellNum, List<String> 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<DictModel> 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<ProcessEsChange> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(ProcessEsChange::getModifyOrderNum, "B" + deptCode + year + month);
queryWrapper.orderByDesc(ProcessEsChange::getModifyOrderNum);
List<ProcessEsChange> 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<ProcessApprovalRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, change.getProcessInstanceId());
queryWrapper.eq(ProcessApprovalRecord::getCommitFlag, CommitFlagEnum.PASS.getValue());
queryWrapper.orderByAsc(ProcessApprovalRecord::getCreateTime);
List<ProcessApprovalRecord> records = approvalRecordService.list(queryWrapper);
Map<String, ProcessApprovalRecord> 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<XWPFTableRow> 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<XWPFTableRow> rows, int rowNum, int cellNum, String content,
boolean newLine, boolean alignCenter, boolean verCenter) {
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);
}
}
}
private void buildMap(Map<String, Object> 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());
@@ -195,6 +195,18 @@ public class LawsAssessResultsServiceImpl extends ServiceImpl<LawsAssessResultsM
@Override
public MetNotMetVO getMetNotMetVOById(String id) {
LawsAssessResults assessResults = getById(id);
if (assessResults == null){
LawsAssess assess = lawsAssessService.getById(id);
LambdaQueryWrapper<LawsAssessResults> 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<LawsAssessResults> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(LawsAssessResults::getProjectId,assessResults.getProjectId())
+2 -1
View File
@@ -355,6 +355,8 @@
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
<nonFilteredFileExtension>doc</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
@@ -362,7 +364,6 @@
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>