Merge branch 'feature/REQ-5965' into dev
This commit is contained in:
commit
f117062124
@ -1,6 +1,5 @@
|
|||||||
package cn.axzo.workflow.common.model.dto;
|
package cn.axzo.workflow.common.model.dto;
|
||||||
|
|
||||||
import cn.axzo.workflow.common.enums.BpmnProcessTaskResultEnum;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -41,9 +40,11 @@ public class SignatureDTO implements Serializable {
|
|||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
public static class SignDetail implements Serializable {
|
public static class SignDetail implements Serializable {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
//审批人姓名
|
||||||
|
private String approverName;
|
||||||
private String signature;
|
private String signature;
|
||||||
private String advice;
|
private String advice;
|
||||||
private BpmnProcessTaskResultEnum result;
|
private String result;
|
||||||
private Date operationTime;
|
private Date operationTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -164,7 +164,7 @@ public class CustomApproveTaskCmd extends AbstractCommand<Void> implements Seria
|
|||||||
// 更新流程内的变量
|
// 更新流程内的变量
|
||||||
runtimeService.setVariables(task.getProcessInstanceId(), variables);
|
runtimeService.setVariables(task.getProcessInstanceId(), variables);
|
||||||
// 记录电子签名的图片
|
// 记录电子签名的图片
|
||||||
recordSignature(task, runtimeService);
|
recordSignature(task, runtimeService, attachmentList, advice, approver);
|
||||||
|
|
||||||
resetApproverNode(task.getProcessInstanceId());
|
resetApproverNode(task.getProcessInstanceId());
|
||||||
|
|
||||||
@ -192,7 +192,11 @@ public class CustomApproveTaskCmd extends AbstractCommand<Void> implements Seria
|
|||||||
approver.setNodeId(logs.get(0).getAssigneeFull().get(0).getNodeId());
|
approver.setNodeId(logs.get(0).getAssigneeFull().get(0).getNodeId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void recordSignature(TaskEntity task, RuntimeService runtimeService) {
|
public static void recordSignature(TaskEntity task,
|
||||||
|
RuntimeService runtimeService,
|
||||||
|
List<AttachmentDTO> attachmentList,
|
||||||
|
String advice,
|
||||||
|
BpmnTaskDelegateAssigner approver) {
|
||||||
List<SignatureDTO> signatures = runtimeService.getVariable(task.getProcessInstanceId(), SIGNATURE_COLLECTION, List.class);
|
List<SignatureDTO> signatures = runtimeService.getVariable(task.getProcessInstanceId(), SIGNATURE_COLLECTION, List.class);
|
||||||
if (Objects.isNull(signatures)) {
|
if (Objects.isNull(signatures)) {
|
||||||
signatures = new ArrayList<>();
|
signatures = new ArrayList<>();
|
||||||
@ -208,9 +212,10 @@ public class CustomApproveTaskCmd extends AbstractCommand<Void> implements Seria
|
|||||||
.findFirst()
|
.findFirst()
|
||||||
.ifPresent(attachment -> dto.getSignatures().add(0,
|
.ifPresent(attachment -> dto.getSignatures().add(0,
|
||||||
new SignatureDTO.SignDetail()
|
new SignatureDTO.SignDetail()
|
||||||
|
.setApproverName(approver.getAssignerName())
|
||||||
.setSignature(attachment.getUrl())
|
.setSignature(attachment.getUrl())
|
||||||
.setAdvice(advice)
|
.setAdvice(advice)
|
||||||
.setResult(BpmnProcessTaskResultEnum.APPROVED)
|
.setResult(BpmnProcessTaskResultEnum.APPROVED.getDesc())
|
||||||
.setOperationTime(new Date())));
|
.setOperationTime(new Date())));
|
||||||
if (!any.isPresent()) {
|
if (!any.isPresent()) {
|
||||||
signatures.add(dto);
|
signatures.add(dto);
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
package cn.axzo.workflow.core.engine.cmd;
|
package cn.axzo.workflow.core.engine.cmd;
|
||||||
|
|
||||||
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
|
|
||||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
|
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
|
||||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||||
import cn.axzo.workflow.common.model.dto.SignatureDTO;
|
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
@ -14,7 +12,6 @@ import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;
|
|||||||
import cn.axzo.workflow.core.service.ExtAxBpmnFormRelationService;
|
import cn.axzo.workflow.core.service.ExtAxBpmnFormRelationService;
|
||||||
import cn.axzo.workflow.core.service.ExtAxProcessLogService;
|
import cn.axzo.workflow.core.service.ExtAxProcessLogService;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import org.apache.commons.collections4.ListUtils;
|
|
||||||
import org.flowable.common.engine.impl.identity.Authentication;
|
import org.flowable.common.engine.impl.identity.Authentication;
|
||||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||||
import org.flowable.engine.RuntimeService;
|
import org.flowable.engine.RuntimeService;
|
||||||
@ -34,12 +31,10 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -48,10 +43,10 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.CLOSE_PROCESS_ASSIG
|
|||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_ADVICE;
|
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_ADVICE;
|
||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
|
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
|
||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_SPECIFY_NEXT_APPROVER;
|
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_SPECIFY_NEXT_APPROVER;
|
||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.SIGNATURE_COLLECTION;
|
|
||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
|
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
|
||||||
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_SUBMIT_FORM_VARIABLE;
|
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_SUBMIT_FORM_VARIABLE;
|
||||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED;
|
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED;
|
||||||
|
import static cn.axzo.workflow.core.engine.cmd.CustomApproveTaskCmd.recordSignature;
|
||||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.addComment;
|
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.addComment;
|
||||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.batchAddAttachment;
|
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.batchAddAttachment;
|
||||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.validTask;
|
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.validTask;
|
||||||
@ -183,7 +178,7 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand<Void> implemen
|
|||||||
// 更新流程实例变量
|
// 更新流程实例变量
|
||||||
runtimeService.setVariables(task.getProcessInstanceId(), variables);
|
runtimeService.setVariables(task.getProcessInstanceId(), variables);
|
||||||
// 记录电子签名的图片
|
// 记录电子签名的图片
|
||||||
recordSignature(task, runtimeService);
|
recordSignature(task, runtimeService, attachmentList, advice, approver);
|
||||||
|
|
||||||
resetApproverNode(task.getProcessInstanceId());
|
resetApproverNode(task.getProcessInstanceId());
|
||||||
|
|
||||||
@ -262,30 +257,4 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand<Void> implemen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void recordSignature(TaskEntity task, RuntimeService runtimeService) {
|
|
||||||
List<SignatureDTO> signatures = runtimeService.getVariable(task.getProcessInstanceId(), SIGNATURE_COLLECTION, List.class);
|
|
||||||
if (Objects.isNull(signatures)) {
|
|
||||||
signatures = new ArrayList<>();
|
|
||||||
}
|
|
||||||
Optional<SignatureDTO> any = signatures.stream()
|
|
||||||
.filter(i -> Objects.equals(i.getActivityId(), task.getTaskDefinitionKey())).findAny();
|
|
||||||
SignatureDTO dto = any.orElse(new SignatureDTO()
|
|
||||||
.setActivityId(task.getTaskDefinitionKey())
|
|
||||||
.setActivityName(task.getName())
|
|
||||||
.setSignatures(new ArrayList<>()));
|
|
||||||
ListUtils.emptyIfNull(attachmentList).stream()
|
|
||||||
.filter(i -> Objects.equals(i.getType(), AttachmentTypeEnum.signature))
|
|
||||||
.findFirst()
|
|
||||||
.ifPresent(attachment -> dto.getSignatures().add(0,
|
|
||||||
new SignatureDTO.SignDetail()
|
|
||||||
.setSignature(attachment.getUrl())
|
|
||||||
.setAdvice(advice)));
|
|
||||||
if (!any.isPresent()) {
|
|
||||||
signatures.add(dto);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!CollectionUtils.isEmpty(signatures)) {
|
|
||||||
runtimeService.setVariable(task.getProcessInstanceId(), SIGNATURE_COLLECTION, signatures);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,10 +52,9 @@ public class EngineActivityCallbackEventListener extends AbstractFlowableEventLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<BpmnActivityEventListener> getOrderedListeners() {
|
private List<BpmnActivityEventListener> getOrderedListeners() {
|
||||||
ActivityOperationContext context = new ActivityOperationContext();
|
|
||||||
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
||||||
activityListeners.ifAvailable(orderListeners::addAll);
|
activityListeners.ifAvailable(orderListeners::addAll);
|
||||||
orderListeners.forEach(i -> i.setContext(context));
|
orderListeners.forEach(i -> i.setContext(new ActivityOperationContext()));
|
||||||
return orderListeners;
|
return orderListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,10 +38,9 @@ public class EngineActivityEndEventListener implements ExecutionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<BpmnActivityEventListener> getOrderedListeners() {
|
private List<BpmnActivityEventListener> getOrderedListeners() {
|
||||||
ActivityOperationContext context = new ActivityOperationContext();
|
|
||||||
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
||||||
activityListeners.ifAvailable(orderListeners::addAll);
|
activityListeners.ifAvailable(orderListeners::addAll);
|
||||||
orderListeners.forEach(i -> i.setContext(context));
|
orderListeners.forEach(i -> i.setContext(new ActivityOperationContext()));
|
||||||
return orderListeners;
|
return orderListeners;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,10 +61,9 @@ public class EngineActivityExtEventListener extends AbstractFlowableEventListene
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<BpmnActivityEventListener> getOrderedListeners() {
|
private List<BpmnActivityEventListener> getOrderedListeners() {
|
||||||
ActivityOperationContext context = new ActivityOperationContext();
|
|
||||||
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
||||||
activityListeners.ifAvailable(orderListeners::addAll);
|
activityListeners.ifAvailable(orderListeners::addAll);
|
||||||
orderListeners.forEach(i -> i.setContext(context));
|
orderListeners.forEach(i -> i.setContext(new ActivityOperationContext()));
|
||||||
return orderListeners;
|
return orderListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,10 +38,9 @@ public class EngineActivityStartEventListener implements ExecutionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<BpmnActivityEventListener> getOrderedListeners() {
|
private List<BpmnActivityEventListener> getOrderedListeners() {
|
||||||
ActivityOperationContext context = new ActivityOperationContext();
|
|
||||||
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
||||||
activityListeners.ifAvailable(orderListeners::addAll);
|
activityListeners.ifAvailable(orderListeners::addAll);
|
||||||
orderListeners.forEach(i -> i.setContext(context));
|
orderListeners.forEach(i -> i.setContext(new ActivityOperationContext()));
|
||||||
return orderListeners;
|
return orderListeners;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -116,10 +116,9 @@ public class EngineNoticeEventListener extends AbstractFlowableEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<BpmnMessagePushEventListener> getOrderedListeners() {
|
private List<BpmnMessagePushEventListener> getOrderedListeners() {
|
||||||
NoticeOperationContext context = new NoticeOperationContext();
|
|
||||||
List<BpmnMessagePushEventListener> orderListeners = new ArrayList<>();
|
List<BpmnMessagePushEventListener> orderListeners = new ArrayList<>();
|
||||||
processEventListeners.ifAvailable(orderListeners::addAll);
|
processEventListeners.ifAvailable(orderListeners::addAll);
|
||||||
orderListeners.forEach(i -> i.setContext(context));
|
orderListeners.forEach(i -> i.setContext(new NoticeOperationContext()));
|
||||||
return orderListeners;
|
return orderListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -167,10 +167,9 @@ public class EngineProcessInstanceEventListener extends AbstractFlowableEngineEv
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<BpmnProcessEventListener> getOrderedListeners() {
|
private List<BpmnProcessEventListener> getOrderedListeners() {
|
||||||
ProcessOperationContext context = new ProcessOperationContext();
|
|
||||||
List<BpmnProcessEventListener> orderListeners = new ArrayList<>();
|
List<BpmnProcessEventListener> orderListeners = new ArrayList<>();
|
||||||
processEventListeners.ifAvailable(orderListeners::addAll);
|
processEventListeners.ifAvailable(orderListeners::addAll);
|
||||||
orderListeners.forEach(i -> i.setContext(context));
|
orderListeners.forEach(i -> i.setContext(new ProcessOperationContext()));
|
||||||
return orderListeners;
|
return orderListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -77,10 +77,9 @@ public class EngineTaskEventListener implements TaskListener {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private List<BpmnTaskEventListener> getOrderedListeners() {
|
private List<BpmnTaskEventListener> getOrderedListeners() {
|
||||||
TaskOperationContext context = new TaskOperationContext();
|
|
||||||
List<BpmnTaskEventListener> orderListeners = new ArrayList<>();
|
List<BpmnTaskEventListener> orderListeners = new ArrayList<>();
|
||||||
taskEventListeners.ifAvailable(orderListeners::addAll);
|
taskEventListeners.ifAvailable(orderListeners::addAll);
|
||||||
orderListeners.forEach(i -> i.setContext(context));
|
orderListeners.forEach(i -> i.setContext(new TaskOperationContext()));
|
||||||
return orderListeners;
|
return orderListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -157,10 +157,9 @@ import java.util.Objects;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import static cn.axzo.workflow.client.config.WorkflowRequestInterceptor.HEADER_SERVER_NAME;
|
import static cn.axzo.workflow.client.config.WorkflowRequestInterceptor.HEADER_SERVER_NAME;
|
||||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CREATE_PARAM_ERROR;
|
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CREATE_PARAM_ERROR;
|
||||||
@ -1916,46 +1915,45 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<DocBaseVO> getAndAddBizCustomDocs(String processInstanceId, List<DocBaseVO> docs) {
|
private List<DocBaseVO> getAndAddBizCustomDocs(String processInstanceId, List<DocBaseVO> docs) {
|
||||||
HistoricProcessInstance processInstance = null;
|
String tenantId;
|
||||||
if (CollectionUtils.isEmpty(docs)) {
|
if (CollectionUtils.isEmpty(docs)) {
|
||||||
processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
||||||
|
tenantId = Objects.nonNull(processInstance) ? processInstance.getTenantId() : "";
|
||||||
|
} else {
|
||||||
|
tenantId = docs.get(0).getTenantId();
|
||||||
}
|
}
|
||||||
List<CustomDocDTO> bizCustomDocs = Optional.ofNullable(
|
List<CustomDocDTO> bizCustomDocs = Optional.ofNullable(
|
||||||
runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOCS, List.class))
|
runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOCS, List.class))
|
||||||
.orElse(Collections.emptyList());
|
.orElse(Collections.emptyList());
|
||||||
String customAddType = runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOC_ADD_ORDER_TYPE, String.class);
|
|
||||||
|
|
||||||
boolean appendLast = "last".equals(customAddType);
|
// 业务自定义文档
|
||||||
Comparator<DocBaseVO> orderComparator = Comparator.comparing(
|
List<DocBaseVO> customBizDocs = BeanMapper.copyList(bizCustomDocs, DocBaseVO.class, (s, t) -> {
|
||||||
DocBaseVO::getOrder, Comparator.nullsFirst(Comparator.naturalOrder()));
|
|
||||||
|
|
||||||
Optional<DocBaseVO> baseOpt;
|
|
||||||
Stream<DocBaseVO> filtered = docs.stream().filter(Objects::nonNull);
|
|
||||||
if (appendLast) {
|
|
||||||
baseOpt = filtered.max(orderComparator);
|
|
||||||
} else {
|
|
||||||
baseOpt = filtered.min(orderComparator);
|
|
||||||
}
|
|
||||||
|
|
||||||
int baseOrder = baseOpt.map(DocBaseVO::getOrder).orElse(0);
|
|
||||||
String tenantId = baseOpt.map(DocBaseVO::getTenantId).orElse(Objects.nonNull(processInstance) ? processInstance.getTenantId() : null);
|
|
||||||
|
|
||||||
AtomicInteger orderCounter = new AtomicInteger(baseOrder);
|
|
||||||
int delta = appendLast ? 1 : -1;
|
|
||||||
|
|
||||||
List<DocBaseVO> docBaseVOS = BeanMapper.copyList(bizCustomDocs, DocBaseVO.class, (s, t) -> {
|
|
||||||
t.setStatus(true);
|
t.setStatus(true);
|
||||||
t.setTempFile(false);
|
t.setTempFile(false);
|
||||||
t.setTemplateName(s.getFileName());
|
t.setTemplateName(s.getFileName());
|
||||||
t.setOrder(orderCounter.addAndGet(delta));
|
t.setTag(s.getFileTag());
|
||||||
t.setTenantId(tenantId);
|
t.setTenantId(tenantId);
|
||||||
t.setFileRelationId(s.getFileKey());
|
t.setFileRelationId(s.getFileKey());
|
||||||
});
|
});
|
||||||
|
|
||||||
if (appendLast) {
|
List<String> basedFileTagOrder = runtimeService.getVariable(processInstanceId, SIGN_BIZ_BASED_FILE_TAG_ORDER, List.class);
|
||||||
docs.addAll(docBaseVOS);
|
if (!CollectionUtils.isEmpty(basedFileTagOrder)) {
|
||||||
|
docs.addAll(customBizDocs);
|
||||||
|
// 基于 fileTag 排序
|
||||||
|
Map<String, Integer> fileTagOrderMap = IntStream.range(0, basedFileTagOrder.size())
|
||||||
|
.boxed()
|
||||||
|
.collect(Collectors.toMap(basedFileTagOrder::get, i -> i, (a, b) -> a));
|
||||||
|
|
||||||
|
docs.sort(Comparator.comparing(d -> fileTagOrderMap.getOrDefault(d.getTag(), Integer.MAX_VALUE)));
|
||||||
|
docs = docs.stream().sorted(Comparator.comparingInt(d -> fileTagOrderMap.getOrDefault(d.getTag(), Integer.MAX_VALUE)))
|
||||||
|
.collect(Collectors.toList());
|
||||||
} else {
|
} else {
|
||||||
docs.addAll(0, docBaseVOS);
|
String customAddType = runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOC_ADD_ORDER_TYPE, String.class);
|
||||||
|
if ("last".equals(customAddType)) {
|
||||||
|
docs.addAll(customBizDocs);
|
||||||
|
} else {
|
||||||
|
docs.addAll(0, customBizDocs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return docs;
|
return docs;
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
|||||||
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
|
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import cn.axzo.workflow.core.engine.cmd.CustomGetProcessInstanceVariablesToObjectCmd;
|
import cn.axzo.workflow.core.engine.cmd.CustomGetProcessInstanceVariablesToObjectCmd;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONException;
|
import com.alibaba.fastjson.JSONException;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
@ -113,6 +114,18 @@ public class WpsUtil {
|
|||||||
List<SignatureDTO.SignDetail> signDetails = (List<SignatureDTO.SignDetail>) variableObjectDTO.getValue();
|
List<SignatureDTO.SignDetail> signDetails = (List<SignatureDTO.SignDetail>) variableObjectDTO.getValue();
|
||||||
if (!CollectionUtils.isEmpty(signDetails)) {
|
if (!CollectionUtils.isEmpty(signDetails)) {
|
||||||
SignatureDTO.SignDetail signDetail = signDetails.get(0);
|
SignatureDTO.SignDetail signDetail = signDetails.get(0);
|
||||||
|
signatureAndAdvices.add(VariableObjectDTO.builder()
|
||||||
|
.key(variableObjectDTO.getKey() + "_approverName")
|
||||||
|
.desc(variableObjectDTO.getDesc() + "姓名")
|
||||||
|
.value(signDetail.getApproverName())
|
||||||
|
.type(VariableObjectDTO.Type.text)
|
||||||
|
.build());
|
||||||
|
signatureAndAdvices.add(VariableObjectDTO.builder()
|
||||||
|
.key(variableObjectDTO.getKey() + "_activityResult")
|
||||||
|
.desc(variableObjectDTO.getDesc() + "审批结果")
|
||||||
|
.value(signDetail.getResult())
|
||||||
|
.type(VariableObjectDTO.Type.text)
|
||||||
|
.build());
|
||||||
ApiSignUrlDownloadRequest request = ApiSignUrlDownloadRequest.builder()
|
ApiSignUrlDownloadRequest request = ApiSignUrlDownloadRequest.builder()
|
||||||
.fileKeys(Lists.newArrayList(signDetail.getSignature())).build();
|
.fileKeys(Lists.newArrayList(signDetail.getSignature())).build();
|
||||||
List<ApiSignUrlDownloadResponse> signUrl = RpcExternalUtil.rpcProcessor(() -> serverFileServiceApi.signUrlFetchDownload(request), "获取手写签图片地址", request);
|
List<ApiSignUrlDownloadResponse> signUrl = RpcExternalUtil.rpcProcessor(() -> serverFileServiceApi.signUrlFetchDownload(request), "获取手写签图片地址", request);
|
||||||
@ -128,6 +141,12 @@ public class WpsUtil {
|
|||||||
.value(signDetail.getAdvice())
|
.value(signDetail.getAdvice())
|
||||||
.type(VariableObjectDTO.Type.text)
|
.type(VariableObjectDTO.Type.text)
|
||||||
.build());
|
.build());
|
||||||
|
signatureAndAdvices.add(VariableObjectDTO.builder()
|
||||||
|
.key(variableObjectDTO.getKey() + "_activityOperationTime")
|
||||||
|
.desc(variableObjectDTO.getDesc() + "日期")
|
||||||
|
.value(DateUtil.format(signDetail.getOperationTime(), "yyyy.MM.dd"))
|
||||||
|
.type(VariableObjectDTO.Type.text)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
wpsVariables.addAll(signatureAndAdvices);
|
wpsVariables.addAll(signatureAndAdvices);
|
||||||
|
|||||||
@ -125,6 +125,7 @@ public class FirstCopyTemplateFileTaskEvent_105_Listener extends AbstractBpmnEve
|
|||||||
}
|
}
|
||||||
List<String> basedFileTagOrder = runtimeService.getVariable(processInstanceId, SIGN_BIZ_BASED_FILE_TAG_ORDER, List.class);
|
List<String> basedFileTagOrder = runtimeService.getVariable(processInstanceId, SIGN_BIZ_BASED_FILE_TAG_ORDER, List.class);
|
||||||
if (Objects.nonNull(basedFileTagOrder)) {
|
if (Objects.nonNull(basedFileTagOrder)) {
|
||||||
|
docTemplates.addAll(customDocTemplates);
|
||||||
// 基于 fileTag 排序
|
// 基于 fileTag 排序
|
||||||
Map<String, Integer> fileTagOrderMap = IntStream.range(0, basedFileTagOrder.size())
|
Map<String, Integer> fileTagOrderMap = IntStream.range(0, basedFileTagOrder.size())
|
||||||
.boxed()
|
.boxed()
|
||||||
|
|||||||
@ -36,6 +36,7 @@ import com.alibaba.fastjson.JSON;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.ListUtils;
|
import org.apache.commons.collections4.ListUtils;
|
||||||
|
import org.apache.commons.collections4.MapUtils;
|
||||||
import org.flowable.form.api.FormInfo;
|
import org.flowable.form.api.FormInfo;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@ -115,7 +116,7 @@ public class BpmnProcessTaskController extends BasicPopulateAvatarController imp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 移除 variable 中 value 为 null 的 key
|
// 移除 variable 中 value 为 null 的 key
|
||||||
dto.getVariables().entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
MapUtils.emptyIfNull(dto.getVariables()).entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
||||||
|
|
||||||
List<AttachmentDTO> tempAttachments = ListUtils.defaultIfNull(dto.getAttachmentList(), new ArrayList<>());
|
List<AttachmentDTO> tempAttachments = ListUtils.defaultIfNull(dto.getAttachmentList(), new ArrayList<>());
|
||||||
if (StringUtils.hasText(dto.getSignatureUrl())) {
|
if (StringUtils.hasText(dto.getSignatureUrl())) {
|
||||||
@ -145,7 +146,7 @@ public class BpmnProcessTaskController extends BasicPopulateAvatarController imp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 移除 variable 中 value 为 null 的 key
|
// 移除 variable 中 value 为 null 的 key
|
||||||
dto.getVariables().entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
MapUtils.emptyIfNull(dto.getVariables()).entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
||||||
|
|
||||||
List<AttachmentDTO> tempAttachments = ListUtils.defaultIfNull(dto.getAttachmentList(), new ArrayList<>());
|
List<AttachmentDTO> tempAttachments = ListUtils.defaultIfNull(dto.getAttachmentList(), new ArrayList<>());
|
||||||
if (StringUtils.hasText(dto.getSignatureUrl())) {
|
if (StringUtils.hasText(dto.getSignatureUrl())) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user