feat(REQ-3004) - 集成表单引擎,测试使用
This commit is contained in:
parent
1677058381
commit
afacb6aa98
@ -38,7 +38,7 @@ public interface FormInstanceApi {
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<FormDefinitionVO> getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto);
|
||||
|
||||
@PostMapping("/api/form/instance/get")
|
||||
@PostMapping("/api/form/instance/render")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<FormInstanceVO> getFormInstance(@Validated @RequestBody FormDetailDTO dto);
|
||||
}
|
||||
|
||||
@ -49,8 +49,8 @@ public class FormPermissionMetaInfo implements Serializable {
|
||||
// 将对象的属性转换为对应的整数表示
|
||||
public int toBinary() {
|
||||
int binaryValue = 0;
|
||||
binaryValue |= (editable? 1 : 0) << 3;
|
||||
binaryValue |= (required? 1 : 0) << 2;
|
||||
binaryValue |= (required? 1 : 0) << 3;
|
||||
binaryValue |= (editable? 1 : 0) << 2;
|
||||
binaryValue |= (readonly? 1 : 0) << 1;
|
||||
binaryValue |= (hidden? 1 : 0);
|
||||
return binaryValue;
|
||||
@ -58,11 +58,19 @@ public class FormPermissionMetaInfo implements Serializable {
|
||||
|
||||
// 从整数表示还原出对象
|
||||
public static FormPermissionMetaInfo fromBinary(String fieldId, int binaryValue) {
|
||||
boolean editable = ((binaryValue >> 3) & 1) == 1;
|
||||
boolean required = ((binaryValue >> 2) & 1) == 1;
|
||||
boolean required = ((binaryValue >> 3) & 1) == 1;
|
||||
boolean editable = ((binaryValue >> 2) & 1) == 1;
|
||||
boolean readonly = ((binaryValue >> 1) & 1) == 1;
|
||||
boolean hidden = (binaryValue & 1) == 1;
|
||||
return new FormPermissionMetaInfo(fieldId, editable, required, readonly, hidden);
|
||||
return new FormPermissionMetaInfo(fieldId, required, editable, readonly, hidden);
|
||||
}
|
||||
public FormPermissionMetaInfo toReadonly() {
|
||||
if(required || editable || readonly) {
|
||||
setRequired(false);
|
||||
setEditable(false);
|
||||
setReadonly(true);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public String toBinaryString() {
|
||||
|
||||
@ -27,5 +27,12 @@ public class StartFormSearchDTO {
|
||||
/**
|
||||
* 租户 ID
|
||||
*/
|
||||
@ApiModelProperty(value = "租户 ID")
|
||||
private String tenantId = NO_TENANT_ID;
|
||||
|
||||
/**
|
||||
* 显示原始默认值的变量
|
||||
*/
|
||||
@ApiModelProperty(value = "是否显示原始的默认值", hidden = true, notes = "如果为 true 则将默认值中的 ${} 变量不进行替换")
|
||||
private Boolean showOriginDefaultValue = false;
|
||||
}
|
||||
|
||||
@ -36,4 +36,10 @@ public class FormDetailDTO {
|
||||
*/
|
||||
@ApiModelProperty(value = "访问表单的人")
|
||||
private BpmnTaskDelegateAssigner assigner;
|
||||
|
||||
/**
|
||||
* 显示原始默认值的变量
|
||||
*/
|
||||
@ApiModelProperty(value = "是否显示原始的默认值", notes = "如果为 true 则将默认值中的 ${} 变量不进行替换")
|
||||
private Boolean showOriginDefaultValue = false;
|
||||
}
|
||||
|
||||
@ -20,18 +20,18 @@ public abstract class ExpressionUtil {
|
||||
throw new RuntimeException("Instantiation not supported");
|
||||
}
|
||||
|
||||
public static String parseString(String exp, Map<String, String> variables) {
|
||||
public static String parseString(String exp, Map<String, ? extends Object> variables) {
|
||||
return parseString(null, null, exp, variables);
|
||||
}
|
||||
|
||||
public static String parseString(String prefix, String suffix, String exp, Map<String, String> variables) {
|
||||
public static String parseString(String prefix, String suffix, String exp, Map<String, ? extends Object> variables) {
|
||||
if (!StringUtils.hasText(prefix) && !StringUtils.hasText(suffix)) {
|
||||
prefix = PREFIX;
|
||||
suffix = SUFFIX;
|
||||
}
|
||||
PropertyPlaceholderHelper propertyPlaceholderHelper = new PropertyPlaceholderHelper(prefix, suffix);
|
||||
Properties properties = new Properties();
|
||||
variables.forEach(properties::setProperty);
|
||||
variables.forEach((k, v) -> properties.setProperty(k, String.valueOf(v)));
|
||||
|
||||
// 自定义PlaceholderResolver实现类,用于处理占位符找不到对应值时返回空字符串
|
||||
PropertyPlaceholderHelper.PlaceholderResolver resolver = placeholder -> properties.getProperty(placeholder, "");
|
||||
|
||||
@ -451,10 +451,14 @@ public final class BpmnMetaParserHelper {
|
||||
return Optional.of(result);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<FormPermissionMetaInfo> mergeAllPermission(List<FormPermissionMetaInfo>... permissions) {
|
||||
if (permissions.length == 0) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
if(permissions.length == 1) {
|
||||
return permissions[0];
|
||||
}
|
||||
List<Map<String, Integer>> combinedMap = new ArrayList<>();
|
||||
for (List<FormPermissionMetaInfo> permission : permissions) {
|
||||
combinedMap.add(getFormFieldPermissionForModel(permission).orElse(new HashMap<>()));
|
||||
|
||||
@ -101,15 +101,9 @@ public class UserTaskJsonConverter extends AbstractBpmnJsonConverter<UserTask> {
|
||||
userTask.addExtensionElement(pendingMessageElement);
|
||||
}
|
||||
|
||||
private static void setEmptyAssigneeAutoPassed(BpmnJsonNode node, UserTask userTask) {
|
||||
if (Objects.nonNull(node.getProperty()) &&
|
||||
Objects.equals(node.getProperty().getApproverEmptyHandleType(), autoPassed)) {
|
||||
userTask.setSkipExpression("${" + BPM_ALLOW_SKIP_USER_TASK + userTask.getId() + "}");
|
||||
}
|
||||
}
|
||||
|
||||
private static void setMultiInstance(BpmnJsonNode node, UserTask userTask) {
|
||||
if (Objects.isNull(node.getProperty()) || Objects.equals(Boolean.FALSE, node.getProperty().getIsMultiTask())) {
|
||||
if (Objects.isNull(node.getProperty()) || Objects.equals(NODE_STARTER.getType(), userTask.getId())
|
||||
||Objects.equals(Boolean.FALSE, node.getProperty().getIsMultiTask())) {
|
||||
return;
|
||||
}
|
||||
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics =
|
||||
|
||||
@ -3,15 +3,14 @@ package cn.axzo.workflow.core.engine.cmd;
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.common.model.request.form.FormPermissionMetaInfo;
|
||||
import cn.axzo.workflow.common.util.ExpressionUtil;
|
||||
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxBpmnFormRelation;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessTaskForEsService;
|
||||
import cn.axzo.workflow.core.service.ExtAxBpmnFormRelationService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.common.engine.api.delegate.Expression;
|
||||
import org.flowable.common.engine.impl.el.ExpressionManager;
|
||||
import org.flowable.common.engine.impl.el.VariableContainerWrapper;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.flowable.common.engine.impl.interceptor.Command;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||
import org.flowable.engine.HistoryService;
|
||||
@ -62,6 +61,7 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
|
||||
private final BpmnTaskDelegateAssigner assigner;
|
||||
private String processInstanceId;
|
||||
private String taskId;
|
||||
private Boolean showOriginDefaultValue = false;
|
||||
|
||||
/**
|
||||
* 全权通过实例查询一切
|
||||
@ -88,12 +88,14 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
|
||||
BpmnProcessTaskForEsService bpmnProcessTaskForEsService,
|
||||
BpmnTaskDelegateAssigner assigner,
|
||||
String processInstanceId,
|
||||
String taskId) {
|
||||
String taskId,
|
||||
Boolean showOriginDefaultValue) {
|
||||
this.bpmnFormRelationService = bpmnFormRelationService;
|
||||
this.bpmnProcessTaskForEsService = bpmnProcessTaskForEsService;
|
||||
this.assigner = assigner;
|
||||
this.processInstanceId = processInstanceId;
|
||||
this.taskId = taskId;
|
||||
this.showOriginDefaultValue = showOriginDefaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -116,13 +118,11 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
|
||||
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
HistoryService historyService = processEngineConfiguration.getHistoryService();
|
||||
ExpressionManager expressionManager = processEngineConfiguration.getExpressionManager();
|
||||
HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.includeProcessVariables()
|
||||
.singleResult();
|
||||
Map<String, Object> processVariables = instance.getProcessVariables();
|
||||
VariableContainerWrapper variableContainerWrapper = new VariableContainerWrapper(processVariables);
|
||||
|
||||
flatField.forEach((fieldId, formField) -> {
|
||||
Map<String, Object> oldParams = CollectionUtils.isEmpty(formField.getParams()) ? new HashMap<>() : formField.getParams();
|
||||
@ -132,10 +132,13 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
|
||||
oldParams.put(FIELD_PROPERTY_READONLY, defaultPermission.getReadonly());
|
||||
oldParams.put(FIELD_PROPERTY_HIDDEN, defaultPermission.getHidden());
|
||||
if (oldParams.containsKey(FIELD_PROPERTY_DEFAULT_VALUE)) {
|
||||
Expression expression = expressionManager.createExpression(String.valueOf(oldParams.getOrDefault(FIELD_PROPERTY_DEFAULT_VALUE, "")));
|
||||
Object value = expression.getValue(variableContainerWrapper);
|
||||
oldParams.put(FIELD_PROPERTY_DEFAULT_VALUE, Objects.nonNull(value) ? String.valueOf(value) : null);
|
||||
String defaultValue = oldParams.getOrDefault(FIELD_PROPERTY_DEFAULT_VALUE, "").toString();
|
||||
if (!showOriginDefaultValue) {
|
||||
defaultValue = ExpressionUtil.parseString(String.valueOf(oldParams.get(FIELD_PROPERTY_DEFAULT_VALUE)), processVariables);
|
||||
}
|
||||
oldParams.put(FIELD_PROPERTY_DEFAULT_VALUE, defaultValue);
|
||||
}
|
||||
formField.setParams(oldParams);
|
||||
});
|
||||
return formInstanceInfo;
|
||||
}
|
||||
@ -148,7 +151,7 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
|
||||
|
||||
// 待审批的节点
|
||||
List<ExtAxProcessLog> processingLogs = logs.stream()
|
||||
.filter(e -> Objects.equals(PROCESSING.getStatus(), e.getStatus()) && Objects.isNull(e.getEndTime()))
|
||||
.filter(e -> (Objects.equals(PROCESSING.getStatus(), e.getStatus()) && Objects.isNull(e.getEndTime())))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<FormPermissionMetaInfo> list = binaryMerge(processingLogs, activityMap);
|
||||
@ -163,15 +166,18 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
|
||||
|
||||
list = binaryMerge(finishLogs, activityMap);
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
// 这里都是非审批的,统一将所有可见,必填的节点转成只读. [完全忽略隐藏属性]
|
||||
list.forEach(FormPermissionMetaInfo::toReadonly);
|
||||
return list;
|
||||
}
|
||||
|
||||
// 默认全字段都是隐藏
|
||||
ExtAxProcessLog starterLog = logs.stream().filter(e -> Objects.equals(NODE_STARTER.getType(), e.getActivityId()))
|
||||
.findFirst().orElseThrow(() -> new WorkflowEngineException(FORM_FIELD_NOT_FOUND));
|
||||
.findFirst().orElse(new ExtAxProcessLog());
|
||||
return CollectionUtils.isEmpty(starterLog.getFormFieldPermissionConf()) ? new ArrayList<>() : starterLog.getFormFieldPermissionConf();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private List<FormPermissionMetaInfo> binaryMerge(List<ExtAxProcessLog> logs, Map<String, ExtAxProcessLog> activityMap) {
|
||||
List<List<FormPermissionMetaInfo>> permissions = new ArrayList<>();
|
||||
collectActivityIds(logs).forEach(id -> {
|
||||
@ -205,7 +211,7 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
|
||||
if (assignerMap.containsKey(e.getActivityId())) {
|
||||
assignerMap.get(e.getActivityId()).addAll(e.getAssigneeFull());
|
||||
} else {
|
||||
assignerMap.put(e.getActivityId(), new ArrayList<>());
|
||||
assignerMap.put(e.getActivityId(), new ArrayList<>(ListUtils.emptyIfNull(e.getAssigneeFull())));
|
||||
}
|
||||
});
|
||||
return assignerMap;
|
||||
|
||||
@ -60,7 +60,6 @@ import cn.axzo.workflow.core.service.converter.BpmnProcessInstanceConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnProcessInstancePageItemConverter;
|
||||
import cn.axzo.workflow.core.service.support.FlowNodeForecastService;
|
||||
import cn.axzo.workflow.core.service.support.ProcessGraphicService;
|
||||
import cn.azxo.framework.common.utils.StringUtils;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
@ -102,6 +101,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
@ -110,6 +110,7 @@ import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
@ -237,19 +238,19 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
public BpmPageResult<BpmnProcessInstancePageItemVO> getMyProcessInstancePage(@Valid BpmnProcessInstanceMyPageReqVO dto) {
|
||||
HistoricProcessInstanceQuery query =
|
||||
historyService.createHistoricProcessInstanceQuery().processInstanceTenantId(dto.getTenantId());
|
||||
if (StringUtils.isNotBlank(dto.getName())) {
|
||||
if (StringUtils.hasText(dto.getName())) {
|
||||
query.processInstanceName(dto.getName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getProcessDefinitionId())) {
|
||||
if (StringUtils.hasText(dto.getProcessDefinitionId())) {
|
||||
query.processDefinitionId(dto.getProcessDefinitionId());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getCategory())) {
|
||||
if (StringUtils.hasText(dto.getCategory())) {
|
||||
query.processDefinitionCategory(dto.getCategory());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getBusinessKey())) {
|
||||
if (StringUtils.hasText(dto.getBusinessKey())) {
|
||||
query.processInstanceBusinessKey(dto.getBusinessKey());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getUserId())) {
|
||||
if (StringUtils.hasText(dto.getUserId())) {
|
||||
query.startedBy(dto.getUserId());
|
||||
}
|
||||
if (Objects.nonNull(dto.getBeginCreateTime())) {
|
||||
@ -328,7 +329,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
@Override
|
||||
public String createProcessInstance(BpmnProcessInstanceCreateDTO dto) {
|
||||
BpmnProcessDefinitionVO definition = null;
|
||||
if (StringUtils.isBlank(dto.getProcessDefinitionId())) {
|
||||
if (!StringUtils.hasText(dto.getProcessDefinitionId())) {
|
||||
definition = processDefinitionService.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey(), dto.getTenantId());
|
||||
} else {
|
||||
definition = processDefinitionService.getProcessDefinition(dto.getProcessDefinitionId());
|
||||
@ -343,7 +344,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
Optional<CategoryItemVO> categoryItemVO = categoryService.get(BPM_MODEL_CATEGORY, definition.getCategory());
|
||||
//政务只能使用代运营的流程定义
|
||||
if (categoryItemVO.isPresent() && categoryItemVO.get().getWorkspaceTypeCode().equals(String.valueOf(GOVERNMENT.getCode()))) {
|
||||
if (StringUtils.isBlank(definition.getTenantId())) {
|
||||
if (!StringUtils.hasText(definition.getTenantId())) {
|
||||
throw new WorkflowEngineException(PROCESS_DEFINITION_IS_INVALID, dto.getProcessDefinitionKey());
|
||||
}
|
||||
}
|
||||
@ -353,7 +354,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
dto.getVariables().put(BIZ_ORG_RELATION, dto.getCooperationOrg());
|
||||
dto.getVariables().put(WORKFLOW_ENGINE_VERSION, serviceVersion);
|
||||
dto.getVariables().put(PENDING_TEMPLATE_VARIABLE, dto.getPendingVariables());
|
||||
dto.getVariables().put(INTERNAL_PROCESS_AGENT, StringUtils.isNotBlank(definition.getTenantId()));
|
||||
dto.getVariables().put(INTERNAL_PROCESS_AGENT, StringUtils.hasText(definition.getTenantId()));
|
||||
dto.getVariables().put(CREATE_INSTANCE_PARAMS, JSONUtil.toJsonStr(dto));
|
||||
|
||||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
||||
@ -362,7 +363,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
// 创建流程实例
|
||||
// 设置流程实例的开始人,参考 https://wenku.baidu.com/view/5538062e7a563c1ec5da50e2524de518964bd3f9.html
|
||||
Authentication.setAuthenticatedUserId(dto.getInitiator().buildAssigneeId());
|
||||
String name = StringUtils.isNotBlank(dto.getCustomProcessInstanceName()) ? dto.getCustomProcessInstanceName() : definition.getName();
|
||||
String name = StringUtils.hasText(dto.getCustomProcessInstanceName()) ? dto.getCustomProcessInstanceName() : definition.getName();
|
||||
|
||||
// 设置流程名字
|
||||
ProcessInstanceBuilder instanceBuilder = runtimeService.createProcessInstanceBuilder()
|
||||
@ -377,6 +378,11 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
// 如果模型没有绑定表单,则强制情况表单相关属性,避免报错
|
||||
instanceBuilder.startFormVariables(null).outcome(null);
|
||||
} else {
|
||||
dto.getStartFormVariables().entrySet().forEach(e-> {
|
||||
if(e.getValue() instanceof Collection) {
|
||||
e.setValue(StringUtils.collectionToCommaDelimitedString((Collection) e.getValue()));
|
||||
}
|
||||
});
|
||||
instanceBuilder.startFormVariables(dto.getStartFormVariables())
|
||||
.outcome(dto.getOutcome());
|
||||
}
|
||||
@ -458,7 +464,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
@Override
|
||||
public BpmPageResult<BpmnProcessInstanceAdminPageItemVO> getAdminProcessInstancePage(BpmnProcessInstanceAdminPageReqVO dto) {
|
||||
List<String> dictValues = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(dto.getCategory())) {
|
||||
if (StringUtils.hasText(dto.getCategory())) {
|
||||
CategorySearchDTO searchDTO = new CategorySearchDTO();
|
||||
searchDTO.setDictType(BpmnConstants.BPM_MODEL_CATEGORY);
|
||||
searchDTO.setLabel(dto.getCategory());
|
||||
@ -474,7 +480,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
.append(" FROM ").append(tableName)
|
||||
.append(" RES LEFT OUTER JOIN ACT_RE_PROCDEF DEF ON RES.PROC_DEF_ID_ = DEF.ID_")
|
||||
.append(" WHERE 1 = 1");
|
||||
if (StringUtils.isNotBlank(dto.getProcessInstanceId())) {
|
||||
if (StringUtils.hasText(dto.getProcessInstanceId())) {
|
||||
List<String> ids = Lists.newArrayList(dto.getProcessInstanceId().replaceAll(" ", "").split(","));
|
||||
baseQuerySql.append(" AND RES.PROC_INST_ID_ IN (");
|
||||
for (int i = 0; i < ids.size(); i++) {
|
||||
@ -486,7 +492,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
}
|
||||
baseQuerySql.append(")");
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getName())) {
|
||||
if (StringUtils.hasText(dto.getName())) {
|
||||
baseQuerySql.append(" AND RES.NAME_ LIKE #{name}");
|
||||
query.parameter("name", "%" + dto.getName() + "%");
|
||||
}
|
||||
@ -512,7 +518,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
}
|
||||
baseQuerySql.append(")");
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getBusinessStatus())) {
|
||||
if (StringUtils.hasText(dto.getBusinessStatus())) {
|
||||
baseQuerySql.append(" AND RES.BUSINESS_STATUS_ = #{businessStatus}");
|
||||
query.parameter("businessStatus", dto.getBusinessStatus());
|
||||
}
|
||||
@ -598,7 +604,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
@Override
|
||||
public HistoricProcessInstance getHistoricProcessInstance(String id, String tenantId) {
|
||||
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().processInstanceId(id);
|
||||
if (StringUtils.isNotBlank(tenantId)) {
|
||||
if (StringUtils.hasText(tenantId)) {
|
||||
query.processInstanceTenantId(tenantId);
|
||||
}
|
||||
return query.singleResult();
|
||||
@ -608,7 +614,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
public HistoricProcessInstance getHistoricProcessInstanceByBusinessKey(String businessKey, String tenantId) {
|
||||
HistoricProcessInstanceQuery query =
|
||||
historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey);
|
||||
if (StringUtils.isNotBlank(tenantId)) {
|
||||
if (StringUtils.hasText(tenantId)) {
|
||||
query.processInstanceTenantId(tenantId);
|
||||
}
|
||||
return query.singleResult();
|
||||
@ -617,9 +623,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
@Override
|
||||
public BpmnProcessInstanceVO getProcessInstanceVO(BpmnProcessInstanceQueryDTO dto) {
|
||||
HistoricProcessInstance processInstance = null;
|
||||
if (StringUtils.isNotBlank(dto.getProcessInstanceId())) {
|
||||
if (StringUtils.hasText(dto.getProcessInstanceId())) {
|
||||
processInstance = getProcessInstance(dto.getProcessInstanceId(), dto.getTenantId(), dto.getHasVariable());
|
||||
} else if (StringUtils.isNotBlank(dto.getBusinessKey())) {
|
||||
} else if (StringUtils.hasText(dto.getBusinessKey())) {
|
||||
processInstance = getProcessInstanceByBusinessKey(dto.getBusinessKey(), dto.getTenantId(),
|
||||
dto.getHasVariable());
|
||||
}
|
||||
@ -710,7 +716,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
public ObjectNode getProcessInstanceGraphical(String processInstanceId, @Nullable String tenantId) {
|
||||
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId);
|
||||
if (StringUtils.isNotBlank(tenantId)) {
|
||||
if (StringUtils.hasText(tenantId)) {
|
||||
query.processInstanceTenantId(tenantId);
|
||||
}
|
||||
HistoricProcessInstance processInstance = query.singleResult();
|
||||
@ -770,20 +776,20 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
NativeHistoricProcessInstanceQuery query = historyService.createNativeHistoricProcessInstanceQuery();
|
||||
String tableName = managementService.getTableName(HistoricProcessInstance.class);
|
||||
StringBuilder baseQuerySql = new StringBuilder("SELECT a.* FROM ").append(tableName).append(" a");
|
||||
if (StringUtils.isNotBlank(dto.getCategory())) {
|
||||
if (StringUtils.hasText(dto.getCategory())) {
|
||||
baseQuerySql.append(" LEFT JOIN ACT_RE_PROCDEF b ON a.PROC_DEF_ID_ = b.ID_ ")
|
||||
.append(sqlConnectors(baseQuerySql))
|
||||
.append(" b.CATEGORY_ = #{category}");
|
||||
query.parameter("category", dto.getCategory());
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getSearchKey())) {
|
||||
if (StringUtils.hasText(dto.getSearchKey())) {
|
||||
baseQuerySql.append(sqlConnectors(baseQuerySql))
|
||||
.append(" (a.BUSINESS_KEY_ LIKE #{searchKey}")
|
||||
.append(" or")
|
||||
.append(" a.NAME_ LIKE #{searchKey})");
|
||||
query.parameter("searchKey", "%" + dto.getSearchKey() + "%");
|
||||
}
|
||||
if (StringUtils.isNotBlank(dto.getResult())) {
|
||||
if (StringUtils.hasText(dto.getResult())) {
|
||||
baseQuerySql.append(sqlConnectors(baseQuerySql))
|
||||
.append(" a.BUSINESS_STATUS_ = #{result}");
|
||||
query.parameter("result", dto.getResult());
|
||||
@ -826,7 +832,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
}
|
||||
|
||||
NativeHistoricProcessInstanceQuery countSqlQuery = query.sql(countSql(baseQuerySql));
|
||||
if (StringUtils.isNotBlank(dto.getCategory())) {
|
||||
if (StringUtils.hasText(dto.getCategory())) {
|
||||
return new BpmPageResult(historicProcessInstanceConverter.toVos(instances, dto.getCategory()),
|
||||
countSqlQuery.count());
|
||||
} else {
|
||||
@ -878,7 +884,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
public List<ProcessNodeDetailVO> getProcessInstanceNodeFilterForecast(String processInstanceId, String tenantId, List<String> nodeDefinitionKeys) {
|
||||
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId);
|
||||
if (StringUtils.isNotBlank(tenantId)) {
|
||||
if (StringUtils.hasText(tenantId)) {
|
||||
query.processInstanceTenantId(tenantId);
|
||||
}
|
||||
ProcessInstance instance = query.singleResult();
|
||||
|
||||
@ -119,7 +119,11 @@ public class FormCoreServiceImpl implements FormCoreService {
|
||||
params.put(FIELD_PROPERTY_READONLY, meta.getReadonly());
|
||||
params.put(FIELD_PROPERTY_HIDDEN, meta.getHidden());
|
||||
if (params.containsKey(FIELD_PROPERTY_DEFAULT_VALUE)) {
|
||||
params.put(FIELD_PROPERTY_DEFAULT_VALUE, ExpressionUtil.parseString(String.valueOf(params.get(FIELD_PROPERTY_DEFAULT_VALUE)), new HashMap<>()));
|
||||
String defaultValue = params.getOrDefault(FIELD_PROPERTY_DEFAULT_VALUE, "").toString();
|
||||
if(!dto.getShowOriginDefaultValue()) {
|
||||
defaultValue = ExpressionUtil.parseString(String.valueOf(params.get(FIELD_PROPERTY_DEFAULT_VALUE)), new HashMap<>());
|
||||
}
|
||||
params.put(FIELD_PROPERTY_DEFAULT_VALUE, defaultValue);
|
||||
}
|
||||
field.setParams(params);
|
||||
});
|
||||
@ -140,7 +144,7 @@ public class FormCoreServiceImpl implements FormCoreService {
|
||||
public FormInstanceVO getFormInstance(FormDetailDTO dto) {
|
||||
CommandExecutor commandExecutor = springProcessEngineConfiguration.getCommandExecutor();
|
||||
FormInstanceInfo formInstanceInfo = commandExecutor.execute(new GetFormInstanceAndPermissionCmd(bpmnFormRelationService,
|
||||
bpmnProcessTaskForEsService, dto.getAssigner(), dto.getProcessInstanceId(), dto.getTaskId()));
|
||||
bpmnProcessTaskForEsService, dto.getAssigner(), dto.getProcessInstanceId(), dto.getTaskId(), dto.getShowOriginDefaultValue()));
|
||||
return formInstanceConverter.toVo(formInstanceInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,6 +13,7 @@ import org.mapstruct.Mapping;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
@ -78,6 +79,9 @@ public interface FormInstanceConverter extends EntityConverter<FormInstanceVO, F
|
||||
if (Objects.isNull(value)) {
|
||||
return (List<String>) value;
|
||||
}
|
||||
if(value instanceof Collection){
|
||||
return (List<String>) value;
|
||||
}
|
||||
List<String> values = new ArrayList<>();
|
||||
if (value instanceof String) {
|
||||
values.add((String) value);
|
||||
|
||||
@ -14,7 +14,7 @@ import org.springframework.context.annotation.Configuration;
|
||||
* @author wangli
|
||||
* @since 2024/4/28 14:02
|
||||
*/
|
||||
@OnlyPodsEnvironment
|
||||
//@OnlyPodsEnvironment
|
||||
@Configuration
|
||||
public class XxlJobConfiguration {
|
||||
Logger logger = LoggerFactory.getLogger(XxlJobConfiguration.class);
|
||||
|
||||
@ -118,6 +118,7 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
log.info("发起审核createProcessInstance===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
// 填充头像
|
||||
populateUsersAvatar(dto.getInitiator());
|
||||
dto.setAsync(false);
|
||||
return success(bpmnProcessInstanceService.createProcessInstance(dto));
|
||||
}
|
||||
|
||||
|
||||
@ -467,7 +467,7 @@ public interface WorkflowManageService {
|
||||
@InvokeMode(SYNC)
|
||||
FormDefinitionVO getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto);
|
||||
|
||||
@PostMapping("/api/form/instance/get")
|
||||
@PostMapping("/api/form/instance/render")
|
||||
@InvokeMode(SYNC)
|
||||
FormInstanceVO getFormInstance(@Validated @RequestBody FormDetailDTO dto);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user