Skip to content
Merged

Dev #110

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion flow-engine-example/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-parent</artifactId>
<version>0.0.10</version>
<version>0.0.11</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion flow-engine-framework/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-parent</artifactId>
<version>0.0.10</version>
<version>0.0.11</version>
</parent>

<name>flow-engine-framework</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,8 @@ public static FormFieldPermission fromMap(Map<String, Object> map) {
permission.setType(PermissionType.valueOf((String) map.get("type")));
return permission;
}

public boolean isField(String formCode, String fieldCode) {
return this.getFormCode().equalsIgnoreCase(formCode) && this.getFieldCode().equalsIgnoreCase(fieldCode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class WorkflowService {
* @param currentVersion 当前版本
* @param creatable 是否创建新的版本
*/
public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatable) {
public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatable,boolean enable) {
List<WorkflowVersion> updateList = new ArrayList<>();

currentVersion.enableVersion();
Expand All @@ -57,10 +57,14 @@ public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatabl

workflowVersionRepository.saveAll(updateList);
Workflow workflow = currentVersion.toWorkflow();
try {
workflow.enable();
}catch (Exception ignore){
workflow.disable();
workflow.filterPermissions();

if(enable) {
try {
workflow.enable();
} catch (Exception ignore) {
workflow.disable();
}
}
workflowRepository.save(workflow);
}
Expand Down Expand Up @@ -118,7 +122,9 @@ public void changeVersion(long versionId) {
}
}
workflowVersionRepository.saveAll(versionList);
workflowRepository.save(currentVersion.toWorkflow());
Workflow workflow = currentVersion.toWorkflow();
workflow.filterPermissions();
workflowRepository.save(workflow);

}

Expand Down Expand Up @@ -148,9 +154,9 @@ public void delete(String workId) {
* 保存流程
* @param workflow 流程对象
*/
public void saveWorkflow(Workflow workflow) {
public void saveWorkflow(Workflow workflow,boolean enable) {
WorkflowVersion workflowVersion = new WorkflowVersion(workflow);
this.saveWorkflowVersion(workflowVersion, false);
this.saveWorkflowVersion(workflowVersion, false,enable);
}

/**
Expand Down Expand Up @@ -181,7 +187,7 @@ public String importWorkflow(String body, IFlowOperator createOperator) {
String json = Base64Utils.toJson(body);
Workflow workflow = Workflow.formJson(json);
workflow.resetWorkflow(createOperator);
this.saveWorkflow(workflow);
this.saveWorkflow(workflow,false);
return workflow.getId();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public FormFieldPermissionStrategy(List<FormFieldPermission> fieldPermissions) {
@Override
public void verifyNode(FlowForm form) {
Map<String, DataType> fieldTypes = form.loadAllFieldDataTypeMaps();
if(fieldPermissions!=null) {
if (fieldPermissions != null) {
for (FormFieldPermission permission : fieldPermissions) {
String key = permission.getFormCode() + "." + permission.getFieldCode();
if (!fieldTypes.containsKey(key)) {
Expand All @@ -61,9 +61,9 @@ public void verifySession(FlowSession session) {
FlowForm flowForm = session.getFormData().getFlowForm();
Map<String, Object> currentData = session.getCurrentRecord().getFormData();
Map<String, Object> latestData = session.getFormData().toMapData();
if(fieldPermissions!=null) {
if (fieldPermissions != null) {
for (FormFieldPermission permission : fieldPermissions) {
FormField formField = flowForm.getField(permission.getFormCode(),permission.getFieldCode());
FormField formField = flowForm.getField(permission.getFormCode(), permission.getFieldCode());
// 子表
if (flowForm.isSubForm(permission.getFormCode())) {
if (permission.getType() == PermissionType.READ) {
Expand Down Expand Up @@ -92,7 +92,7 @@ public void verifySession(FlowSession session) {
if (formField.isRequired() && permission.getType() == PermissionType.READ) {
Object currentValue = currentData.get(permission.getFieldCode());
Object latestValue = latestData.get(permission.getFieldCode());
if (latestValue!=null && currentValue!=null && !currentValue.equals(latestValue)) {
if (latestValue != null && currentValue != null && !currentValue.equals(latestValue)) {
throw FlowValidationException.fieldReadOnly(permission.getFieldCode());
}
}
Expand Down Expand Up @@ -125,4 +125,56 @@ public static FormFieldPermissionStrategy defaultStrategy() {
}


private FormFieldPermission getFormFieldPermission(String formCode,String fieldCode){
if(this.fieldPermissions!=null) {
for (FormFieldPermission fieldPermission:this.fieldPermissions){
if(fieldPermission.isField(formCode,fieldCode)){
return fieldPermission;
}
}
}
return null;
}

public void filterPermissions(FlowForm meta) {
Map<String,DataType> fieldMap = meta.loadAllFieldDataTypeMaps();

if (this.fieldPermissions == null || this.getFieldPermissions().isEmpty()) {
// init fieldPermissions
this.fieldPermissions = new ArrayList<>();
for (String formField:fieldMap.keySet()){
String formCode = formField.split("\\.")[0];
String fieldCode = formField.split("\\.")[1];

FormFieldPermission fieldPermission = new FormFieldPermission();
fieldPermission.setFormCode(formCode);
fieldPermission.setFieldCode(fieldCode);
fieldPermission.setType(PermissionType.WRITE);

this.fieldPermissions.add(fieldPermission);
}

} else {
// filter fieldPermissions
System.out.println("filter fieldPermissions meta:" + meta);

List<FormFieldPermission> fieldPermissions = new ArrayList<>();
for (String formField:fieldMap.keySet()){
String formCode = formField.split("\\.")[0];
String fieldCode = formField.split("\\.")[1];

FormFieldPermission fieldPermission = this.getFormFieldPermission(formCode,fieldCode);
if(fieldPermission==null) {
fieldPermission = new FormFieldPermission();
fieldPermission.setFormCode(formCode);
fieldPermission.setFieldCode(fieldCode);
fieldPermission.setType(PermissionType.WRITE);
}
fieldPermissions.add(fieldPermission);
}

this.fieldPermissions = fieldPermissions;
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.codingapi.flow.node.nodes.StartNode;
import com.codingapi.flow.operator.IFlowOperator;
import com.codingapi.flow.script.node.OperatorMatchScript;
import com.codingapi.flow.strategy.node.FormFieldPermissionStrategy;
import com.codingapi.flow.strategy.workflow.IWorkflowStrategy;
import com.codingapi.flow.strategy.workflow.InterfereStrategy;
import com.codingapi.flow.strategy.workflow.UrgeStrategy;
Expand Down Expand Up @@ -89,7 +90,7 @@ public class Workflow {
private boolean enable;


public boolean isDisable(){
public boolean isDisable() {
return !enable;
}

Expand Down Expand Up @@ -212,7 +213,7 @@ public static Workflow formJson(String json) {
IFlowNode flowNode = NodeFactory.getInstance().createNode(node);
nodeList.add(flowNode);
}
workflow.setNodes(nodeList);
workflow.setNodes(nodeList);
}

List<Map<String, Object>> strategies = (List<Map<String, Object>>) data.get("strategies");
Expand Down Expand Up @@ -255,7 +256,7 @@ public void verify() {
/**
* 启动流程
*/
public void enable(){
public void enable() {
this.verify();
this.enable = true;
this.updateTime();
Expand All @@ -265,7 +266,7 @@ public void enable(){
/**
* 禁用流程
*/
public void disable(){
public void disable() {
this.enable = false;
this.updateTime();
}
Expand All @@ -291,7 +292,7 @@ private void verifyFields() {
throw FlowValidationException.workflowRequired("createdOperator");
}
if (nodes == null || nodes.isEmpty()) {
throw FlowValidationException.workflowRequired( "nodes");
throw FlowValidationException.workflowRequired("nodes");
}
}

Expand All @@ -317,9 +318,9 @@ private void verifyNodes() {
}
}
if (start != 1 || end != 1) {
if(start!=1) {
if (start != 1) {
throw FlowValidationException.nodeRequired("startNode");
}else {
} else {
throw FlowValidationException.nodeRequired("endNode");
}
}
Expand Down Expand Up @@ -381,4 +382,16 @@ public void resetWorkflow(IFlowOperator createdOperator) {
this.createdOperator = createdOperator;
this.updateTime();
}

public void filterPermissions() {
FlowForm meta = this.form;

for (IFlowNode node : this.nodes) {
FormFieldPermissionStrategy formFieldPermissionStrategy = node.strategyManager().getStrategy(FormFieldPermissionStrategy.class);
if (formFieldPermissionStrategy != null) {
formFieldPermissionStrategy.filterPermissions(meta);
}
}

}
}
2 changes: 1 addition & 1 deletion flow-engine-starter-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-parent</artifactId>
<version>0.0.10</version>
<version>0.0.11</version>
</parent>

<name>flow-engine-starter-api</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public Response changeState(@RequestBody IdRequest request) {
} else {
workflow.disable();
}
workflowService.saveWorkflow(workflow);
workflowService.saveWorkflow(workflow,false);
return Response.buildSuccess();
}

Expand Down Expand Up @@ -163,9 +163,9 @@ public Response save(@RequestBody JSONObject request) {
if (StringUtils.hasText(versionName)) {
WorkflowVersion workflowVersion = new WorkflowVersion(workflow);
workflowVersion.setVersionName(versionName);
workflowService.saveWorkflowVersion(workflowVersion, true);
workflowService.saveWorkflowVersion(workflowVersion, true,true);
} else {
workflowService.saveWorkflow(workflow);
workflowService.saveWorkflow(workflow,true);
}
return Response.buildSuccess();
}
Expand Down
2 changes: 1 addition & 1 deletion flow-engine-starter-infra/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-parent</artifactId>
<version>0.0.10</version>
<version>0.0.11</version>
</parent>

<name>flow-engine-starter-infra</name>
Expand Down
2 changes: 1 addition & 1 deletion flow-engine-starter-query/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-parent</artifactId>
<version>0.0.10</version>
<version>0.0.11</version>
</parent>

<name>flow-engine-starter-query</name>
Expand Down
2 changes: 1 addition & 1 deletion flow-engine-starter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-parent</artifactId>
<version>0.0.10</version>
<version>0.0.11</version>
</parent>

<name>flow-engine-starter</name>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</parent>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-parent</artifactId>
<version>0.0.10</version>
<version>0.0.11</version>
<packaging>pom</packaging>

<url>https://github.com/codingapi/flow-engine</url>
Expand Down