Merge branch 'feature/RDMP-3845' into dev

This commit is contained in:
wangli 2025-11-20 13:58:48 +08:00
commit cf118d42f6
2 changed files with 42 additions and 1 deletions

View File

@ -1,15 +1,19 @@
package cn.axzo.workflow.form.service.converter;
import cn.axzo.workflow.common.model.request.form.definition.FormFieldDTO;
import cn.axzo.workflow.common.model.request.form.definition.OptionDTO;
import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO;
import cn.axzo.workflow.common.model.response.form.model.FormModelVO;
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.Option;
import org.flowable.form.model.OptionFormField;
import org.flowable.form.model.SimpleFormModel;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.List;
@ -64,6 +68,10 @@ public interface FormInstanceConverter extends EntityConverter<FormInstanceVO, F
formFieldDTO.setValue(ConversionUtils.convertObject(formField.getValue()));
formFieldDTO.setPlaceholder(formField.getPlaceholder());
formFieldDTO.setParams(formField.getParams());
if (formField instanceof OptionFormField) {
OptionFormField optionFormField = (OptionFormField) formField;
formFieldDTO.setOptions(optionsToOptionDTOs(optionFormField.getOptions()));
}
if (formField instanceof FormContainer) {
FormContainer formContainer = (FormContainer) formField;
formFieldDTO.setFieldType(formContainer.getClass().getSimpleName());
@ -72,6 +80,19 @@ public interface FormInstanceConverter extends EntityConverter<FormInstanceVO, F
return formFieldDTO;
}
default List<OptionDTO> optionsToOptionDTOs(List<Option> options) {
if (CollectionUtils.isEmpty(options)) {
return null;
}
return options.stream()
.map(option -> {
OptionDTO optionDTO = new OptionDTO();
optionDTO.setId(option.getId());
optionDTO.setName(option.getName());
return optionDTO;
})
.collect(Collectors.toList());
}
// 辅助方法用于处理List<FormContainer>到List<FormFieldDTO>的转换调用上面自定义的转换方法
default List<FormFieldDTO> formContainersToFormFieldDTOs(List<FormField> formContainers) {

View File

@ -69,6 +69,8 @@ import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.model.FormContainer;
import org.flowable.form.model.FormField;
import org.flowable.form.model.FormFieldTypes;
import org.flowable.form.model.Option;
import org.flowable.form.model.OptionFormField;
import org.flowable.form.model.SimpleFormModel;
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.slf4j.Logger;
@ -422,7 +424,15 @@ public class PrintAdminController implements PrintAdminApi {
if (!(value instanceof String)) {
return;
}
if (((String) value).startsWith("[")) {
if (stringFormFieldMap.containsKey(key) && stringFormFieldMap.get(key) instanceof OptionFormField) {
OptionFormField optionFormField = (OptionFormField) stringFormFieldMap.get(key);
if (Objects.equals("checkbox", optionFormField.getType())) {
result.put(key, buildOptionFieldValue(optionFormField, JSONObject.parseArray((String) value, String.class)));
} else if (Objects.equals("radio", optionFormField.getType())) {
result.put(key, buildOptionFieldValue(optionFormField, Lists.newArrayList((String) value)));
}
} else if (((String) value).startsWith("[")) {
result.put(key, JSONArray.parseArray((String) value));
} else if (((String) value).startsWith("{")) {
result.put(key, JSONObject.parseObject((String) value));
@ -430,6 +440,16 @@ public class PrintAdminController implements PrintAdminApi {
});
}
private String buildOptionFieldValue(OptionFormField optionFormField, List<String> selectedValues) {
if (CollectionUtils.isEmpty(optionFormField.getOptions())) {
return "";
}
return optionFormField.getOptions().stream()
.filter(i -> selectedValues.contains(i.getId()))
.map(Option::getName)
.collect(Collectors.joining(","));
}
private void generateSystemFieldVariables(String processInstanceId, Map<String, Object> result) {
CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();
Map<String, Object> variables = commandExecutor.execute(new CustomGetProcessInstanceVariablesCmd(processInstanceId));