feat(REQ-3004) - 调整使用表单发起流程时,需要对附件类型做额外处理

This commit is contained in:
wangli 2024-11-22 16:45:13 +08:00
parent d214e80e31
commit 50db7c9e3f
3 changed files with 81 additions and 3 deletions

View File

@ -0,0 +1,58 @@
package cn.axzo.workflow.common.model.dto;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 上传附件字段类型
*
* @author wangli
* @since 2024-11-22 14:48
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UploadFieldDTO {
/**
* 文件名称
*/
private String fileName;
/**
* 文件类型
*/
private String fileType;
/**
* 文件 oss key
*/
private String fileKey;
public String toString() {
return JSON.toJSONString(this);
}
public String toSpecString() {
return this.toString().replaceAll(",", "|");
}
public static UploadFieldDTO toObject(String str) {
str = str.trim().replaceAll("\\|",",");
return JSON.parseObject(str, UploadFieldDTO.class);
}
public static void main(String[] args) {
UploadFieldDTO dto = new UploadFieldDTO();
dto.setFileName("文件 1");
dto.setFileType(".xlxs");
dto.setFileKey("123456");
String string = dto.toSpecString();
System.out.println("string = " + string);
UploadFieldDTO dto2 = UploadFieldDTO.toObject(string);
System.out.println("dto2 = " + dto2);
}
}

View File

@ -8,6 +8,7 @@ import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.common.enums.WorkspaceType;
import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
import cn.axzo.workflow.common.model.request.BpmnApproveConf;
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
@ -61,6 +62,7 @@ import cn.axzo.workflow.core.service.converter.BpmnProcessInstancePageItemConver
import cn.axzo.workflow.core.service.support.FlowNodeForecastService;
import cn.axzo.workflow.core.service.support.ProcessGraphicService;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
@ -96,6 +98,7 @@ import org.flowable.form.api.FormInfo;
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.flowable.task.api.Task;
import org.flowable.variable.api.history.HistoricVariableInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -219,6 +222,8 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
private ExtAxProcessLogService processLogService;
@Resource
private ExtAxBpmnFormRelationService bpmnFormRelationService;
@Autowired
private ObjectMapper objectMapper;
@Override
public HistoricProcessInstance getProcessInstanceByBusinessKey(String businessKey, @Nullable String tenantId,
@ -380,7 +385,14 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
} else {
dto.getStartFormVariables().entrySet().forEach(e-> {
if(e.getValue() instanceof Collection) {
e.setValue(StringUtils.collectionToCommaDelimitedString((Collection) e.getValue()));
List<String> convertUploads = ((Collection<?>) e.getValue()).stream().map(i -> {
if(i instanceof String) {
return UploadFieldDTO.toObject(String.valueOf(i)).toSpecString();
}else {
return objectMapper.convertValue(i, UploadFieldDTO.class).toSpecString();
}
}).collect(Collectors.toList());
e.setValue(StringUtils.collectionToCommaDelimitedString(convertUploads));
}
});
instanceBuilder.startFormVariables(dto.getStartFormVariables())

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.form.service.converter;
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
import cn.axzo.workflow.common.model.request.form.definition.FormFieldDTO;
import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO;
import cn.axzo.workflow.common.model.response.form.model.FormModelVO;
@ -7,6 +8,7 @@ import org.flowable.form.api.FormInstanceInfo;
import org.flowable.form.api.FormModel;
import org.flowable.form.model.FormContainer;
import org.flowable.form.model.FormField;
import org.flowable.form.model.FormFieldTypes;
import org.flowable.form.model.SimpleFormModel;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@ -64,7 +66,7 @@ public interface FormInstanceConverter extends EntityConverter<FormInstanceVO, F
formFieldDTO.setType(formField.getType());
formFieldDTO.setId(formField.getId());
formFieldDTO.setName(formField.getName());
formFieldDTO.setValue(castList(formField.getValue()));
formFieldDTO.setValue(castList(formField));
formFieldDTO.setPlaceholder(formField.getPlaceholder());
formFieldDTO.setParams(formField.getParams());
if (formField instanceof FormContainer) {
@ -75,7 +77,13 @@ public interface FormInstanceConverter extends EntityConverter<FormInstanceVO, F
return formFieldDTO;
}
default List<String> castList(Object value) {
default List<String> castList(FormField field) {
if (Objects.equals(field.getType(), FormFieldTypes.UPLOAD)) {
return ((Collection<String>) field.getValue()).stream()
.map(i -> UploadFieldDTO.toObject(i).toString())
.collect(Collectors.toList());
}
Object value = field.getValue();
if (Objects.isNull(value) || value instanceof Collection) {
return (List<String>) value;
}