Skip to content

Commit 139be36

Browse files
committed
update FlowForm.java
1 parent 854f9ca commit 139be36

31 files changed

Lines changed: 392 additions & 189 deletions

File tree

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.codingapi.flow.form;
2+
3+
public enum DataType {
4+
STRING,
5+
NUMBER,
6+
DATE,
7+
BOOLEAN
8+
}

flow-engine-framework/src/main/java/com/codingapi/flow/form/FlowForm.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,11 @@ public static FlowForm fromMap(Map<String, Object> map) {
6666
fieldMeta.setId((String) field.get("id"));
6767
fieldMeta.setName((String) field.get("name"));
6868
fieldMeta.setCode((String) field.get("code"));
69-
fieldMeta.setType((String) field.get("type"));
69+
fieldMeta.setType(DataType.valueOf((String) field.get("type")));
7070
fieldMeta.setRequired(Boolean.TRUE.equals(field.get("required")));
7171
fieldMeta.setDefaultValue((String) field.get("defaultValue"));
72+
fieldMeta.setTooltip((String) field.get("tooltip"));
73+
fieldMeta.setHelp((String) field.get("help"));
7274
fieldList.add(fieldMeta);
7375
}
7476
}
@@ -104,10 +106,10 @@ public FormField getField(String fieldName) {
104106
return fields.stream().filter(field -> field.getName().equals(fieldName)).findFirst().orElse(null);
105107
}
106108

107-
private void initFormFieldTypes(FlowForm form, Map<String, String> types) {
109+
private void initFormFieldTypes(FlowForm form, Map<String, DataType> types) {
108110
for (FormField field : form.getFields()) {
109111
String key = form.getCode() + "." + field.getCode();
110-
String type = field.getType();
112+
DataType type = field.getType();
111113
types.put(key, type);
112114
}
113115
}
@@ -117,8 +119,8 @@ private void initFormFieldTypes(FlowForm form, Map<String, String> types) {
117119
*
118120
* @return 表单字段类型
119121
*/
120-
public Map<String, String> loadAllFieldTypeMaps() {
121-
Map<String, String> types = new HashMap<>();
122+
public Map<String, DataType> loadAllFieldTypeMaps() {
123+
Map<String, DataType> types = new HashMap<>();
122124
List<FlowForm> forms = this.getSubForms();
123125
if (forms == null) {
124126
forms = new ArrayList<>();
@@ -136,8 +138,8 @@ public Map<String, String> loadAllFieldTypeMaps() {
136138
*
137139
* @return 表单字段类型
138140
*/
139-
public Map<String, String> loadMainFieldTypeMaps() {
140-
Map<String, String> types = new HashMap<>();
141+
public Map<String, DataType> loadMainFieldTypeMaps() {
142+
Map<String, DataType> types = new HashMap<>();
141143
List<FlowForm> forms = new ArrayList<>();
142144
forms.add(this);
143145
for (FlowForm subForm : forms) {

flow-engine-framework/src/main/java/com/codingapi/flow/form/FlowFormBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public FlowFormBuilder code(String code) {
2323
return this;
2424
}
2525

26-
public FlowFormBuilder addField(String name, String code, String type) {
26+
public FlowFormBuilder addField(String name, String code, DataType type) {
2727
FormField field = new FormField();
2828
field.setName(name);
2929
field.setCode(code);

flow-engine-framework/src/main/java/com/codingapi/flow/form/FormData.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codingapi.flow.form;
22

3+
import com.codingapi.flow.exception.FlowValidationException;
34
import lombok.Getter;
45

56
import java.util.*;
@@ -112,13 +113,53 @@ private FlowForm getSubFormMeta(String formCode) {
112113
return flowForm.getSubForm(formCode);
113114
}
114115

116+
/**
117+
* 校验formData
118+
*/
119+
public void verify() {
120+
for (FormField formField:flowForm.getFields()){
121+
Object value = this.dataBody.get(formField.getCode());
122+
Object defaultValue = formField.getDefaultValue();
123+
if(value==null && defaultValue!=null){
124+
this.dataBody.set(formField.getCode(),defaultValue);
125+
}
126+
if(formField.isRequired()){
127+
if(value==null && defaultValue==null){
128+
throw FlowValidationException.fieldNotFound(formField.getName());
129+
}
130+
}
131+
}
132+
133+
if(flowForm.getSubForms()!=null) {
134+
for (FlowForm subForm : flowForm.getSubForms()) {
135+
List<DataBody> subDataList = this.getSubDataBody(subForm.getCode());
136+
for (DataBody subData:subDataList) {
137+
for (FormField formField : subForm.getFields()) {
138+
Object value = subData.get(formField.getCode());
139+
Object defaultValue = formField.getDefaultValue();
140+
if(value==null && defaultValue!=null){
141+
subData.set(formField.getCode(),defaultValue);
142+
}
143+
if(formField.isRequired()){
144+
if(value==null && defaultValue==null){
145+
throw FlowValidationException.fieldNotFound(formField.getName());
146+
}
147+
}
148+
}
149+
}
150+
}
151+
}
152+
153+
154+
}
155+
115156
/**
116157
* 表单数据体
117158
*/
118159
public static class DataBody {
119160
private final FlowForm flowForm;
120161
private final Map<String, Object> data;
121-
private final Map<String, String> fieldTypes;
162+
private final Map<String, DataType> fieldTypes;
122163

123164
public DataBody(FlowForm flowForm) {
124165
this.flowForm = flowForm;
@@ -142,9 +183,9 @@ public void reset() {
142183
*/
143184
public DataBody set(String key, Object value) {
144185
String id = flowForm.getCode() + "." + key;
145-
String type = this.fieldTypes.get(id);
186+
DataType type = this.fieldTypes.get(id);
146187
if (type == null) {
147-
throw new RuntimeException("key:" + key + " not found");
188+
throw FlowValidationException.fieldNotFound(key);
148189
}
149190
this.data.put(id, value);
150191
return this;

flow-engine-framework/src/main/java/com/codingapi/flow/form/FormField.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,17 @@ public class FormField {
1616
// 字段编号
1717
private String code;
1818
// 字段类型
19-
private String type;
19+
private DataType type;
2020
// 是否必填
2121
private boolean required;
2222
// 默认值
2323
private String defaultValue;
24+
// 输入提示
25+
private String placeholder;
26+
// 提示信息
27+
private String tooltip;
28+
// 帮助提示
29+
private String help;
2430

2531
public FormField() {
2632
this.id = RandomUtils.generateStringId();

flow-engine-framework/src/main/java/com/codingapi/flow/manager/ActionManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ public void verifySession(FlowSession session) {
7272
return;
7373
}
7474

75+
// 保存操作,不做检查
76+
if (flowAction instanceof PassAction) {
77+
session.getFormData().verify();
78+
}
79+
7580
// 加签操作、转办操作、委托操作
7681
if (flowAction instanceof AddAuditAction || flowAction instanceof TransferAction || flowAction instanceof DelegateAction) {
7782
if (flowAdvice.getForwardOperators() == null || flowAdvice.getForwardOperators().isEmpty()) {

flow-engine-framework/src/main/java/com/codingapi/flow/strategy/node/FormFieldPermissionStrategy.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.codingapi.flow.builder.NodeMapBuilder;
44
import com.codingapi.flow.common.IMapConvertor;
55
import com.codingapi.flow.exception.FlowValidationException;
6+
import com.codingapi.flow.form.DataType;
67
import com.codingapi.flow.form.FlowForm;
78
import com.codingapi.flow.form.permission.FormFieldPermission;
89
import com.codingapi.flow.form.permission.PermissionType;
@@ -42,7 +43,7 @@ public FormFieldPermissionStrategy(List<FormFieldPermission> fieldPermissions) {
4243
*/
4344
@Override
4445
public void verifyNode(FlowForm form) {
45-
Map<String, String> fieldTypes = form.loadAllFieldTypeMaps();
46+
Map<String, DataType> fieldTypes = form.loadAllFieldTypeMaps();
4647
for (FormFieldPermission permission : fieldPermissions) {
4748
String key = permission.getFormCode() + "." + permission.getFieldCode();
4849
if (!fieldTypes.containsKey(key)) {

flow-engine-framework/src/test/java/com/codingapi/flow/form/FormDataTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ void dataTest() {
1717
FlowForm form = FlowFormBuilder.builder()
1818
.name("请假流程")
1919
.code("leave")
20-
.addField("请假人", "name", "string")
21-
.addField("请假天数", "days", "int")
22-
.addField("请假事由", "reason", "string")
20+
.addField("请假人", "name", DataType.STRING)
21+
.addField("请假天数", "days", DataType.NUMBER)
22+
.addField("请假事由", "reason", DataType.STRING)
2323
.addSubForm(FlowFormBuilder.builder()
2424
.name("审批记录")
2525
.code("record")
26-
.addField("审批人", "approver", "string")
27-
.addField("审批结果", "result", "string")
28-
.addField("审批时间", "time", "date")
26+
.addField("审批人", "approver", DataType.STRING)
27+
.addField("审批结果", "result", DataType.STRING)
28+
.addField("审批时间", "time", DataType.DATE)
2929
.build())
3030
.build();
3131
FormData data = new FormData(form);

flow-engine-framework/src/test/java/com/codingapi/flow/integration/NodeTitleIntegrationTest.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codingapi.flow.integration;
22

3+
import com.codingapi.flow.form.DataType;
34
import com.codingapi.flow.form.FormData;
45
import com.codingapi.flow.form.FlowForm;
56
import com.codingapi.flow.form.FlowFormBuilder;
@@ -43,7 +44,9 @@ void testTitleGenerationWithFormData() {
4344
FlowForm form = FlowFormBuilder.builder()
4445
.name("请假流程")
4546
.code("leave")
46-
.addField("请假天数", "days", "int")
47+
.addField("请假人", "name", DataType.STRING)
48+
.addField("请假天数", "days", DataType.NUMBER)
49+
.addField("请假事由", "reason", DataType.STRING)
4750
.build();
4851

4952
StartNode startNode = StartNode.builder().build();
@@ -76,7 +79,9 @@ void testTitleGenerationWithMultipleVariables() {
7679
FlowForm form = FlowFormBuilder.builder()
7780
.name("请假流程")
7881
.code("leave")
79-
.addField("请假天数", "days", "int")
82+
.addField("请假人", "name", DataType.STRING)
83+
.addField("请假天数", "days", DataType.NUMBER)
84+
.addField("请假事由", "reason", DataType.STRING)
8085
.build();
8186

8287
StartNode startNode = StartNode.builder().build();
@@ -122,7 +127,9 @@ void testTitleGenerationWithWorkflowTitle() {
122127
FlowForm form = FlowFormBuilder.builder()
123128
.name("请假流程")
124129
.code("leave")
125-
.addField("请假人", "name", "string")
130+
.addField("请假人", "name", DataType.STRING)
131+
.addField("请假天数", "days", DataType.NUMBER)
132+
.addField("请假事由", "reason", DataType.STRING)
126133
.build();
127134

128135
StartNode startNode = StartNode.builder().build();

flow-engine-framework/src/test/java/com/codingapi/flow/script/ErrorTriggerScriptTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.codingapi.flow.builder.FormFieldPermissionsBuilder;
44
import com.codingapi.flow.builder.NodeStrategyBuilder;
55
import com.codingapi.flow.error.ErrorThrow;
6+
import com.codingapi.flow.form.DataType;
67
import com.codingapi.flow.form.FlowForm;
78
import com.codingapi.flow.form.FormData;
89
import com.codingapi.flow.form.FlowFormBuilder;
@@ -30,9 +31,9 @@ void execute() {
3031
FlowForm form = FlowFormBuilder.builder()
3132
.name("请假流程")
3233
.code("leave")
33-
.addField("请假人", "name", "string")
34-
.addField("请假天数", "days", "int")
35-
.addField("请假事由", "reason", "string")
34+
.addField("请假人", "name", DataType.STRING)
35+
.addField("请假天数", "days", DataType.NUMBER)
36+
.addField("请假事由", "reason", DataType.STRING)
3637
.build();
3738

3839
StartNode startNode = StartNode.builder()

0 commit comments

Comments
 (0)