From 388de9eb52d8c27d28f4104a2f0b410eceda4abf Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 30 Oct 2025 14:57:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-5965)=20-=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/feign/manage/PrintAdminApi.java | 16 +++- .../common/constant/VariableConstants.java | 6 ++ .../bpmn/print/Print4ProcessLogDTO.java | 32 +++++++ .../model/response/ProcessLogItemDTO.java | 60 +++++++++++++ .../common/model/response/TableItemDTO.java | 31 +++++++ .../bpmn/process/PrintData4LogVO.java | 50 +++++++++++ .../CustomGetProcessInstanceVariablesCmd.java | 8 ++ .../impl/BpmnProcessInstanceServiceImpl.java | 2 +- .../web/manage/PrintAdminController.java | 89 +++++++++++++++++++ 9 files changed, 292 insertions(+), 2 deletions(-) create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/Print4ProcessLogDTO.java create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/ProcessLogItemDTO.java create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/TableItemDTO.java create mode 100644 workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/PrintData4LogVO.java diff --git a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/manage/PrintAdminApi.java b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/manage/PrintAdminApi.java index 9dec9a0a9..a3b91683f 100644 --- a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/manage/PrintAdminApi.java +++ b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/manage/PrintAdminApi.java @@ -4,8 +4,10 @@ import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient; import cn.axzo.workflow.common.annotation.InvokeMode; import cn.axzo.workflow.common.annotation.Manageable; import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO; +import cn.axzo.workflow.common.model.request.bpmn.print.Print4ProcessLogDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO; +import cn.axzo.workflow.common.model.response.bpmn.process.PrintData4LogVO; import cn.azxo.framework.common.model.CommonResponse; import io.swagger.v3.oas.annotations.Operation; import org.springframework.validation.annotation.Validated; @@ -66,7 +68,7 @@ public interface PrintAdminApi { * 获取指定流程下用于替换打印的相关变量 * * @param processInstanceId - * @return + * @return 仅是 kv 集合, */ @Operation(summary = "获取指定流程下用于替换打印的相关变量") @GetMapping("/api/print/admin/field/variables") @@ -74,4 +76,16 @@ public interface PrintAdminApi { @InvokeMode(SYNC) CommonResponse> getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId, @RequestParam(required = false, defaultValue = "true") Boolean throwException); + + /** + * 获取用于打印审批日志公共模板的数据 + * + * @param dto + * @return + */ + @Operation(summary = "获取用于打印审批日志公共模板的数据") + @PostMapping("/api/print/admin/process/log/data/v2") + @Manageable + @InvokeMode(SYNC) + CommonResponse getPrintDataForProcessLog(@Validated @RequestBody Print4ProcessLogDTO dto); } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/VariableConstants.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/VariableConstants.java index c1d30d3b5..d8a6ed3ff 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/VariableConstants.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/VariableConstants.java @@ -29,14 +29,20 @@ public interface VariableConstants { //=============== 打印时的变量集合中 key 的命名 ================= String VAR_PREFIX = "业务变量"; + String PRINT_VAR_PROCESS_NAME = "processName"; + String PRINT_VAR_PROCESS_NAME_DESC = "审批名称"; String PRINT_VAR_PROCESS_DEFINITION_KEY = "processDefinitionKey"; String PRINT_VAR_PROCESS_DEFINITION_KEY_DESC = "业务名称"; + String PRINT_VAR_PROCESS_BELONG_TENANT_ID = "tenantId"; + String PRINT_VAR_PROCESS_BELONG_TENANT_ID_DESC = "所属租户"; String PRINT_VAR_PROCESS_INSTANCE_ID = "processInstanceId"; String PRINT_VAR_PROCESS_INSTANCE_ID_DESC = "审批编号"; String PRINT_VAR_PROCESS_START_TIME = "startTime"; String PRINT_VAR_PROCESS_START_TIME_DESC = "发起时间"; String PRINT_VAR_PROCESS_END_TIME = "endTime"; String PRINT_VAR_PROCESS_END_TIME_DESC = "审批结束时间"; + String PRINT_VAR_PROCESS_RESULT = "processResult"; + String PRINT_VAR_PROCESS_RESULT_DESC = "审批结果"; String PRINT_VAR_PROCESS_INITIATOR = "initiator"; String PRINT_VAR_PROCESS_INITIATOR_DESC = "发起者"; String PRINT_VAR_PROCESS_INITIATOR_NAME = "initiatorName"; diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/Print4ProcessLogDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/Print4ProcessLogDTO.java new file mode 100644 index 000000000..87dc3ae33 --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/Print4ProcessLogDTO.java @@ -0,0 +1,32 @@ +package cn.axzo.workflow.common.model.request.bpmn.print; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; + +/** + * 获取内置公共模板打印数据的入参模型 + * + * @author wangli + * @since 2025-10-30 10:43 + */ +@ApiModel("获取内置公共模板打印数据的入参模型") +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class Print4ProcessLogDTO { + + /** + * 流程实例 ID + */ + @ApiModelProperty(value = "流程实例 ID") + @NotBlank(message = "流程实例 ID 不能为空") + private String processInstanceId; + +} diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/ProcessLogItemDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/ProcessLogItemDTO.java new file mode 100644 index 000000000..cc556ce48 --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/ProcessLogItemDTO.java @@ -0,0 +1,60 @@ +package cn.axzo.workflow.common.model.response; + +import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +/** + * 审批日志项模型 + * + * @author wangli + * @since 2025-10-30 14:22 + */ +@Data +@Builder +public class ProcessLogItemDTO { + @Builder.Default + private String label = "审批流程"; + + /** + * 审批意见 + */ + private String advice; + + /** + * 节点名称 + */ + @ApiModelProperty(value = "节点名称") + private String activityName; + + /** + * 操作描述 + */ + @ApiModelProperty(value = "操作描述") + private String operationDesc; + + /** + * 图片列表 + */ + @ApiModelProperty(value = "图片列表") + private List imageList; + /** + * 附件列表 + */ + @ApiModelProperty(value = "附件列表") + private List fileList; + /** + * 手写签名地址 + */ + @ApiModelProperty(value = "手写签名地址") + private String signatureUrl; + + /** + * 操作时间 + */ + @ApiModelProperty(value = "操作时间") + private String operationTime; +} diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/TableItemDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/TableItemDTO.java new file mode 100644 index 000000000..c3ba57e8d --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/TableItemDTO.java @@ -0,0 +1,31 @@ +package cn.axzo.workflow.common.model.response; + +import lombok.Builder; +import lombok.Data; + +/** + * 审批日志公共打印模板的字段项模型 + * + * @author wangli + * @since 2025-10-30 10:38 + */ +@Data +@Builder +public class TableItemDTO { + /** + * 中文 + */ + private String label; + /** + * 字段 code + */ + private String code; + /** + * 字段类型 + */ + private String type; + /** + * 值 + */ + private Object value; +} diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/PrintData4LogVO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/PrintData4LogVO.java new file mode 100644 index 000000000..d71def5d9 --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/PrintData4LogVO.java @@ -0,0 +1,50 @@ +package cn.axzo.workflow.common.model.response.bpmn.process; + +import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; +import cn.axzo.workflow.common.model.response.ProcessLogItemDTO; +import cn.axzo.workflow.common.model.response.TableItemDTO; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 新版的审批日志公共模板的数据响应模型 + * + * @author wangli + * @since 2025-10-30 10:28 + */ +@ApiModel("新版的审批日志公共模板的数据响应模型") +@Data +@Accessors(chain = true) +public class PrintData4LogVO { + + /** + * 标题 + */ + private String processName; + /** + * 发起租户名称 + */ + private String tenantName; + /** + * 创建时间 + */ + private String createAt; + /** + * 审批状态 + */ + private BpmnProcessInstanceResultEnum result; + + /** + * 系统变量表格项 + */ + private List systemVarItems; + + /** + * 审批日志表格项 + */ + private List logItems; +} + diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java index bd84f4cf0..80ffb959a 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java @@ -1,5 +1,6 @@ package cn.axzo.workflow.core.engine.cmd; +import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; import cn.axzo.workflow.common.model.dto.SignatureDTO; import cn.axzo.workflow.core.common.utils.SpringContextUtils; import cn.axzo.workflow.core.service.CategoryService; @@ -22,10 +23,13 @@ import java.util.Objects; import static cn.axzo.workflow.common.constant.BpmnConstants.BPM_MODEL_CATEGORY; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.SIGNATURE_COLLECTION; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_BELONG_TENANT_ID; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_DEFINITION_KEY; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_END_TIME; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INSTANCE_ID; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_NAME; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_RESULT; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME; import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER; @@ -63,9 +67,13 @@ public class CustomGetProcessInstanceVariablesCmd extends AbstractCommand getAttachmentByType(Map> attachmentByTaskMap, String + public static List getAttachmentByType(Map> attachmentByTaskMap, String taskId, AttachmentTypeEnum type) { return ListUtils.emptyIfNull(attachmentByTaskMap.get(taskId)).stream() .filter(attachment -> Objects.equals(type.getType(), attachment.getType())) diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/manage/PrintAdminController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/manage/PrintAdminController.java index bc2d0fdf9..8b14a5521 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/manage/PrintAdminController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/manage/PrintAdminController.java @@ -4,29 +4,40 @@ import cn.axzo.maokai.api.client.OrganizationalNodeUserQueryApi; import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq; import cn.axzo.maokai.api.vo.response.OrgNodeUserBriefInfoResp; import cn.axzo.workflow.client.feign.manage.PrintAdminApi; +import cn.axzo.workflow.common.constant.VariableConstants; +import cn.axzo.workflow.common.enums.AttachmentTypeEnum; +import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; import cn.axzo.workflow.common.enums.VarTypeEnum; import cn.axzo.workflow.common.exception.WorkflowEngineException; import cn.axzo.workflow.common.model.dto.print.FieldAttributeDTO; import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO; +import cn.axzo.workflow.common.model.request.bpmn.print.Print4ProcessLogDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO; import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceLogQueryDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.common.model.request.category.CategoryGroupVarSearchDto; +import cn.axzo.workflow.common.model.response.ProcessLogItemDTO; +import cn.axzo.workflow.common.model.response.TableItemDTO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO; +import cn.axzo.workflow.common.model.response.bpmn.process.PrintData4LogVO; import cn.axzo.workflow.common.model.response.category.CategoryGroupVarItemVo; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; import cn.axzo.workflow.core.engine.cmd.CustomGetFormInstanceLatestValuesCmd; import cn.axzo.workflow.core.engine.cmd.CustomGetProcessInstanceVariablesCmd; +import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog; import cn.axzo.workflow.core.service.BpmnProcessDefinitionService; import cn.axzo.workflow.core.service.BpmnProcessInstanceService; import cn.axzo.workflow.core.service.BpmnProcessModelService; import cn.axzo.workflow.core.service.CategoryGroupService; +import cn.axzo.workflow.core.service.ExtAxProcessLogService; import cn.axzo.workflow.server.common.annotation.ErrorReporter; import cn.axzo.workflow.server.common.util.RpcExternalUtil; import cn.axzo.workflow.server.controller.web.bpmn.BpmnProcessInstanceController; import cn.azxo.framework.common.model.CommonResponse; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -35,6 +46,8 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.impl.interceptor.CommandExecutor; +import org.flowable.engine.TaskService; +import org.flowable.engine.task.Attachment; import org.flowable.form.api.FormInfo; import org.flowable.form.api.FormRepositoryService; import org.flowable.form.model.FormContainer; @@ -80,6 +93,7 @@ import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCE import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_POSITION; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_POSITION_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_UNIT; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_UNIT_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INSTANCE_ID; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INSTANCE_ID_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOGS; @@ -104,12 +118,15 @@ import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCE import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_SIGNATURE_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_UNIT; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_UNIT_DESC; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_NAME; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_RESULT; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME_DESC; import static cn.axzo.workflow.common.enums.PrintFieldCategoryEnum.form; import static cn.axzo.workflow.common.enums.PrintFieldCategoryEnum.sign; import static cn.axzo.workflow.common.enums.PrintFieldCategoryEnum.signature; import static cn.axzo.workflow.common.enums.PrintFieldCategoryEnum.system; +import static cn.axzo.workflow.core.service.impl.BpmnProcessInstanceServiceImpl.getAttachmentByType; import static cn.azxo.framework.common.model.CommonResponse.success; /** @@ -141,6 +158,10 @@ public class PrintAdminController implements PrintAdminApi { private CategoryGroupService categoryGroupService; @Resource private BpmnProcessModelService bpmnProcessModelService; + @Resource + private ExtAxProcessLogService processLogService; + @Resource + private TaskService taskService; /** * 查询指定流程实例是否能使用打印 @@ -456,4 +477,72 @@ public class PrintAdminController implements PrintAdminApi { return users.stream().sorted(Comparator.comparing(OrgNodeUserBriefInfoResp::getExited).reversed()) .collect(Collectors.toList()).stream().findFirst(); } + + @Operation(summary = "获取用于打印审批日志公共模板的数据") + @PostMapping("/process/log/data/v2") + @Override + public CommonResponse getPrintDataForProcessLog(@Validated @RequestBody Print4ProcessLogDTO dto) { + CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor(); + Map variables = commandExecutor.execute(new CustomGetProcessInstanceVariablesCmd(dto.getProcessInstanceId())); + + PrintData4LogVO vo = new PrintData4LogVO(); + vo.setProcessName((String) variables.getOrDefault(PRINT_VAR_PROCESS_NAME, "")); + vo.setTenantName(String.valueOf(variables.get(VariableConstants.PRINT_VAR_PROCESS_BELONG_TENANT_ID))); + vo.setCreateAt(String.valueOf(variables.get(VariableConstants.PRINT_VAR_PROCESS_START_TIME))); + vo.setResult((BpmnProcessInstanceResultEnum) variables.get(PRINT_VAR_PROCESS_RESULT)); + + List systemVarItems = new ArrayList<>(); + systemVarItems.add(TableItemDTO.builder() + .label(PRINT_VAR_PROCESS_INSTANCE_ID_DESC) + .code(PRINT_VAR_PROCESS_INSTANCE_ID) + .type(FORM_FIELD_TYPE_INPUT) + .value(variables.get(PRINT_VAR_PROCESS_INSTANCE_ID)) + .build()); + + // 解析发起人 + BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(variables.getOrDefault(PRINT_VAR_PROCESS_INITIATOR, null)); + if (Objects.nonNull(initiator)) { + Optional user = getUserInfo(initiator); + systemVarItems.add(TableItemDTO.builder() + .label(PRINT_VAR_PROCESS_INITIATOR_NAME_DESC) + .code(PRINT_VAR_PROCESS_INITIATOR_NAME) + .type(FORM_FIELD_TYPE_INPUT) + .value(user.isPresent() ? user.get().getRealName() : "") + .build()); + systemVarItems.add(TableItemDTO.builder() + .label(PRINT_VAR_PROCESS_INITIATOR_UNIT_DESC) + .code(PRINT_VAR_PROCESS_INITIATOR_UNIT_DESC) + .type(FORM_FIELD_TYPE_INPUT) + .value(user.isPresent() ? user.get().getOrganizationalUnitName() : "") + .build()); + } + + vo.setSystemVarItems(systemVarItems); + + // 审批日志 + List logItems = new ArrayList<>(); + Map> attachmentByTaskMap = + taskService.getProcessInstanceAttachments(dto.getProcessInstanceId()).stream() + .collect(Collectors.groupingBy(Attachment::getTaskId)); + ExtAxProcessLog query = new ExtAxProcessLog(); + query.setProcessInstanceId(dto.getProcessInstanceId()); + processLogService.genericQuery(query).stream() + .sorted(Comparator.comparing(ExtAxProcessLog::getEndTime, Comparator.nullsLast(Comparator.naturalOrder()))) + .collect(Collectors.toList()) + .forEach(log -> { + logItems.add(ProcessLogItemDTO.builder() + .advice(log.getAdvice()) + .activityName(log.getActivityName()) + .operationDesc(log.getOperationDesc()) + .imageList(getAttachmentByType(attachmentByTaskMap, log.getTaskId(), AttachmentTypeEnum.image)) + .fileList(getAttachmentByType(attachmentByTaskMap, log.getTaskId(), AttachmentTypeEnum.file)) + .signatureUrl(getAttachmentByType(attachmentByTaskMap, log.getTaskId(), AttachmentTypeEnum.signature).stream().findFirst().orElse(new AttachmentDTO()).getUrl()) + .operationTime(DateUtil.format(log.getEndTime(), "yyyy.MM.dd HH:mm:ss")) + .build()); + }); + vo.setLogItems(logItems); + + return success(vo); + } + }