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 b0ae9caa8..e9853631b 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 @@ -45,8 +45,12 @@ public interface VariableConstants { String PRINT_VAR_PROCESS_INITIATOR_POSITION_DESC = "发起人岗位"; String PRINT_VAR_PROCESS_INITIATOR_PHONE = "initiatorPhone"; String PRINT_VAR_PROCESS_INITIATOR_PHONE_DESC = "发起人联系方式"; + String PRINT_VAR_PROCESS_INITIATOR_UNIT = "initiatorUnit"; + String PRINT_VAR_PROCESS_INITIATOR_UNIT_DESC = "发起人单位"; String PRINT_VAR_PROCESS_LOGS = "processLogs"; String PRINT_VAR_PROCESS_LOGS_DESC = "审批日志"; + String PRINT_VAR_PROCESS_LOG_ACTIVITY_NODE_TYPE = "activityNodeType"; + String PRINT_VAR_PROCESS_LOG_ACTIVITY_NODE_TYPE_DESC = "节点类型"; String PRINT_VAR_PROCESS_LOG_ACTIVITY_NAME = "activityName"; String PRINT_VAR_PROCESS_LOG_ACTIVITY_NAME_DESC = "节点名称"; String PRINT_VAR_PROCESS_LOG_APPROVER_NAME = "approverName"; @@ -61,4 +65,8 @@ public interface VariableConstants { String PRINT_VAR_PROCESS_LOG_OPERATION_TIME_DESC = "审批时间"; String PRINT_VAR_PROCESS_LOG_SIGNATURE = "signature"; String PRINT_VAR_PROCESS_LOG_SIGNATURE_DESC = "电子签名"; + String PRINT_VAR_PROCESS_LOG_ACTIVITY_RESULT = "activityResult"; + String PRINT_VAR_PROCESS_LOG_ACTIVITY_RESULT_DESC = "节点状态"; + String PRINT_VAR_PROCESS_LOG_OPERATION = "operationDesc"; + String PRINT_VAR_PROCESS_LOG_OPERATION_DESC = "操作描述"; } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/PrintFieldQueryDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/PrintFieldQueryDTO.java index 3775f63e5..3c6deb6df 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/PrintFieldQueryDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/print/PrintFieldQueryDTO.java @@ -35,6 +35,11 @@ public class PrintFieldQueryDTO { @ApiModelProperty(value = "租户 ID") private String tenantId; + /** + * 是否过滤仅支持打印字段 + */ + @ApiModelProperty(value = "是否过滤仅支持打印字段") + private Boolean filterEnablePrint; /** * 是否抛出内部异常 */ diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java index 731913a0a..61b1a17bf 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java @@ -16,6 +16,7 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.util.List; +import java.util.Map; /** * 审批任务节点的入参模型 @@ -103,4 +104,9 @@ public class BpmnTaskAuditDTO { */ @Deprecated private String operationDesc; + + /** + * 更新或新增流程变量 + */ + private Map variables; } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java index 3829b5c25..30bcbcdc9 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java @@ -83,6 +83,7 @@ public class CustomApproveTaskCmd extends AbstractCommand implements Seria * 指定节点类型 */ private List nodeTypes; + private Map variables; @Override public String paramToJsonString() { @@ -94,6 +95,7 @@ public class CustomApproveTaskCmd extends AbstractCommand implements Seria params.put("approver", JSON.toJSONString(approver)); params.put("nextApprover", JSON.toJSONString(nextApprover)); params.put("nodeTypes", JSON.toJSONString(nodeTypes)); + params.put("variables", JSON.toJSONString(variables)); return JSON.toJSONString(params); } @@ -117,6 +119,7 @@ public class CustomApproveTaskCmd extends AbstractCommand implements Seria } else { this.operationDesc = "已同意"; } + this.variables = dto.getVariables(); } @Override @@ -158,6 +161,7 @@ public class CustomApproveTaskCmd extends AbstractCommand implements Seria } task.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + taskId, APPROVED.getStatus()); + runtimeService.setVariables(task.getProcessInstanceId(), variables); // 记录电子签名的图片 recordSignature(task, runtimeService); diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskWithFormCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskWithFormCmd.java index 81df46654..050ee28fc 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskWithFormCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskWithFormCmd.java @@ -97,6 +97,10 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand implemen * 表单数据 */ private final Map formVariables; + /** + * 更新或新增的流程变量 + */ + private final Map variables; @Override public String paramToJsonString() { @@ -109,6 +113,7 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand implemen params.put("nextApprover", JSON.toJSONString(nextApprover)); params.put("nodeTypes", JSON.toJSONString(nodeTypes)); params.put("formVariables", JSON.toJSONString(formVariables)); + params.put("variables", JSON.toJSONString(variables)); return JSON.toJSONString(params); } @@ -133,6 +138,7 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand implemen } else { this.operationDesc = "已同意"; } + this.variables = dto.getVariables(); } @Override @@ -174,7 +180,7 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand implemen nextApprover); } task.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + taskId, APPROVED.getStatus()); - + runtimeService.setVariables(task.getProcessInstanceId(), variables); // 记录电子签名的图片 recordSignature(task, runtimeService); 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 00cdd9200..0dd28f209 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 @@ -79,16 +79,20 @@ import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCE import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_PHONE_DESC; 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_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; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOGS_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_ACTIVITY_NAME; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_ACTIVITY_NAME_DESC; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_ACTIVITY_NODE_TYPE; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_ACTIVITY_RESULT; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_ADVICE; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_ADVICE_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_APPROVER_NAME; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_APPROVER_NAME_DESC; +import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_OPERATION; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_OPERATION_TIME; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_OPERATION_TIME_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_LOG_POSITION; @@ -162,6 +166,7 @@ public class PrintAdminController implements PrintAdminApi { bpmnProcessModelService.printTemplateConfig(dto); return success(); } + /** * 获取打印模板中可打印的字段, 或者是 WPS 模板中可配置的变量字段 * @@ -180,17 +185,29 @@ public class PrintAdminController implements PrintAdminApi { List formFields = ((SimpleFormModel) formModel.getFormModel()).getFields(); formFields.forEach(formField -> { FormContainer formContainer = (FormContainer) formField; - printFields.addAll(formContainer.getFields().get(0).stream().map(field -> { - PrintFieldDTO printFieldDTO = new PrintFieldDTO() - .setName(field.getName()) - .setCode(field.getId()) - .setFieldCategoryType(form) - .setFieldFormType(field.getType()); - switchAmount(field, printFieldDTO); - switchFormContainer(field, printFieldDTO); - return printFieldDTO; - } - ).collect(Collectors.toList())); + printFields.addAll(formContainer.getFields().get(0).stream() + .filter(field -> { + if (Objects.equals(Boolean.TRUE, dto.getFilterEnablePrint())) { + if (!CollectionUtils.isEmpty(field.getParams())) { + Optional optEnablePrint = Optional.ofNullable(field.getParam("enablePrint")); + return optEnablePrint.map(obj -> Boolean.parseBoolean(obj.toString())).orElse(Boolean.TRUE); + } + return true; + } else { + return false; + } + }) + .map(field -> { + PrintFieldDTO printFieldDTO = new PrintFieldDTO() + .setName(field.getName()) + .setCode(field.getId()) + .setFieldCategoryType(form) + .setFieldFormType(field.getType()); + switchAmount(field, printFieldDTO); + switchFormContainer(field, printFieldDTO); + return printFieldDTO; + } + ).collect(Collectors.toList())); }); } catch (FlowableObjectNotFoundException e) { log.warn("can't found form model"); @@ -368,6 +385,7 @@ public class PrintAdminController implements PrintAdminApi { variables.put(PRINT_VAR_PROCESS_INITIATOR_NAME, user.isPresent() ? user.get().getRealName() : ""); variables.put(PRINT_VAR_PROCESS_INITIATOR_POSITION, user.isPresent() && Objects.nonNull(user.get().getJob()) ? user.get().getJob().getName() : ""); variables.put(PRINT_VAR_PROCESS_INITIATOR_PHONE, user.isPresent() ? user.get().getProfile().getPhone() : ""); + variables.put(PRINT_VAR_PROCESS_INITIATOR_UNIT, user.isPresent() ? user.get().getOrganizationalUnitName() : ""); variables.remove(PRINT_VAR_PROCESS_INITIATOR); } // 填充审批日志 @@ -383,11 +401,14 @@ public class PrintAdminController implements PrintAdminApi { .forEach(taskLog -> { Map taskLogMap = new HashMap<>(); taskLogMap.put(PRINT_VAR_PROCESS_LOG_ACTIVITY_NAME, taskLog.getName()); + taskLogMap.put(PRINT_VAR_PROCESS_LOG_ACTIVITY_NODE_TYPE, taskLog.getNodeType().getType()); Optional user = getUserInfo(taskLog.getAssigneeSnapshot()); taskLogMap.put(PRINT_VAR_PROCESS_LOG_APPROVER_NAME, user.isPresent() ? user.get().getRealName() : ""); taskLogMap.put(PRINT_VAR_PROCESS_LOG_UNIT, user.isPresent() ? user.get().getOrganizationalUnitName() : ""); taskLogMap.put(PRINT_VAR_PROCESS_LOG_POSITION, user.isPresent() && Objects.nonNull(user.get().getJob()) ? user.get().getJob().getName() : ""); taskLogMap.put(PRINT_VAR_PROCESS_LOG_ADVICE, taskLog.getAdvice()); + taskLogMap.put(PRINT_VAR_PROCESS_LOG_OPERATION, taskLog.getOperationDesc()); + taskLogMap.put(PRINT_VAR_PROCESS_LOG_ACTIVITY_RESULT, taskLog.getResult().getStatus()); taskLogMap.put(PRINT_VAR_PROCESS_LOG_OPERATION_TIME, sdf.format(taskLog.getCreateTime())); taskLogMap.put(PRINT_VAR_PROCESS_LOG_SIGNATURE, taskLog.getSignatureUrl()); taskLogs.add(taskLogMap);