Skip to content
Merged

Dev #156

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 docs/components/flow-engine-framework_FlowScriptContext.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ description: Groovy 脚本运行时的 $bind 上下文对象,为脚本提供
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion docs/components/flow-engine-framework_GatewayContext.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ GatewayContext 是框架内部获取流程操作人(IFlowOperator)数据的
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion docs/components/flow-engine-framework_GroovyScriptBind.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ GroovyScriptBind 是脚本编写者在流程 Groovy 脚本中通过 `$bind` 变
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ GroovyScriptRequest 是流程 Groovy 脚本中 `request` 参数的实际类型
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ GroovyWorkflowRequest 用于工作流级别(非会话级别)的脚本场景
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion docs/components/flow-engine-framework_IFlowOperator.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ IFlowOperator 是流程引擎中对参与流程的用户(审批人、创建者
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ RepositoryHolderContext 是流程引擎运行时的基础设施注册中心。
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ ScriptRegistryContext 是流程引擎中所有默认 Groovy 脚本的注册中
<dependency>
<groupId>com.codingapi.flow</groupId>
<artifactId>flow-engine-framework</artifactId>
<version>0.0.46</version>
<version>0.0.47</version>
</dependency>
```

Expand Down
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.46</version>
<version>0.0.47</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.codingapi.example.convertor;

import com.codingapi.example.entity.NodeViewJavaScriptEntity;
import com.codingapi.flow.javscript.NodeViewJavaScript;

public class NodeViewJavaScriptConvertor {

public static NodeViewJavaScript convert(NodeViewJavaScriptEntity entity){
if(entity==null){
return null;
}

return new NodeViewJavaScript(entity.getCode(),entity.getScript(),entity.getCreateTime(),entity.getUpdateTime());
}


public static NodeViewJavaScriptEntity convert(NodeViewJavaScript javaScript){
if(javaScript==null){
return null;
}

NodeViewJavaScriptEntity entity = new NodeViewJavaScriptEntity();
entity.setCode(javaScript.getCode());
entity.setScript(javaScript.getScript());
entity.setCreateTime(javaScript.getCreateTime());
entity.setUpdateTime(javaScript.getUpdateTime());
return entity;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.codingapi.example.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Lob;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
@Entity
@Table(name = "t_node_view_javascript")
public class NodeViewJavaScriptEntity {

/**
* 代码唯一标识
*/
@Id
private String code;
/**
* 代码内容
*/
@Lob
private String script;

/**
* 创建时间
*/
private Long createTime;

/**
* 更新时间
*/
private Long updateTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.codingapi.example.repository;

import com.codingapi.example.entity.NodeViewJavaScriptEntity;
import com.codingapi.springboot.fast.jpa.repository.FastRepository;

public interface NodeViewJavaScriptEntityRepository extends FastRepository<NodeViewJavaScriptEntity,String> {

NodeViewJavaScriptEntity getNodeViewJavaScriptEntityByCode(String code);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.codingapi.example.repository.impl;

import com.codingapi.example.convertor.NodeViewJavaScriptConvertor;
import com.codingapi.example.repository.NodeViewJavaScriptEntityRepository;
import com.codingapi.flow.javscript.NodeViewJavaScript;
import com.codingapi.flow.repository.NodeViewJavaScriptRepository;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Repository;

@Repository
@AllArgsConstructor
public class NodeViewJavaScriptRepositoryImpl implements NodeViewJavaScriptRepository {

private final NodeViewJavaScriptEntityRepository nodeViewJavaScriptEntityRepository;

@Override
public void save(NodeViewJavaScript javaScript) {
nodeViewJavaScriptEntityRepository.save(NodeViewJavaScriptConvertor.convert(javaScript));
}

@Override
public void delete(String code) {
nodeViewJavaScriptEntityRepository.deleteById(code);
}

@Override
public NodeViewJavaScript get(String code) {
return NodeViewJavaScriptConvertor.convert(nodeViewJavaScriptEntityRepository.getNodeViewJavaScriptEntityByCode(code));
}
}
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.46</version>
<version>0.0.47</version>
</parent>

<name>flow-engine-framework</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ public interface FlowIDGeneratorGateway {
*/
String generateActionId();

/**
* 构建视图代码
*/
String generateViewCode();

/**
* 构建节点id
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ public String generateActionId() {
return this.generateId(10);
}

@Override
public String generateViewCode() {
return this.generateId(18);
}

@Override
public String generateNodeId() {
return this.generateId(10);
Expand Down Expand Up @@ -106,6 +111,10 @@ public String generateActionId() {
return flowIDGeneratorGateway.generateActionId();
}

public String generateViewCode() {
return flowIDGeneratorGateway.generateViewCode();
}

public String generateNodeId() {
return flowIDGeneratorGateway.generateNodeId();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.codingapi.flow.javscript;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
* 视图代码
*/
@Data
@AllArgsConstructor
public class NodeViewJavaScript {

/**
* 代码唯一标识
*/
private String code;
/**
* 代码内容
*/
private String script;

/**
* 创建时间
*/
private long createTime;

/**
* 更新时间
*/
private long updateTime;

/**
* 保存数据
*/
public void save() {
NodeViewJavaScriptCacheContext.getInstance().save(this);
}

public NodeViewJavaScript copy(String code) {
return new NodeViewJavaScript(code, script,createTime,updateTime);
}

public void update(String script) {
this.script = script;
this.updateTime = System.currentTimeMillis();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.codingapi.flow.javscript;

import com.codingapi.flow.repository.NodeViewJavaScriptRepository;
import lombok.Getter;
import lombok.Setter;
import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

public class NodeViewJavaScriptCacheContext {

// 最大缓存时间15分钟
public static final long MAX_CACHE_TIME = 1000 * 60 * 15;

private final Map<String, NodeViewJavaScriptClearJob> cache;

@Setter
private NodeViewJavaScriptRepository nodeViewJavaScriptRepository;

@Getter
private final static NodeViewJavaScriptCacheContext instance = new NodeViewJavaScriptCacheContext();

private NodeViewJavaScriptCacheContext() {
this.cache = new HashMap<>();
}


public void cache(String code, String script) {
if (StringUtils.hasText(code) && StringUtils.hasText(script)) {
NodeViewJavaScript javaScript = this.get(code);
if (javaScript == null) {
javaScript = new NodeViewJavaScript(code, script, System.currentTimeMillis(), System.currentTimeMillis());
}
javaScript.update(script);
this.cache.put(code, new NodeViewJavaScriptClearJob(javaScript, System.currentTimeMillis() + MAX_CACHE_TIME));
}
}


public void save(NodeViewJavaScript javaScript) {
if (nodeViewJavaScriptRepository != null) {
nodeViewJavaScriptRepository.save(javaScript);
this.cache.remove(javaScript.getCode());
}
}

public NodeViewJavaScript get(String code) {
NodeViewJavaScriptClearJob job = this.cache.get(code);
if (job != null) {
return job.getJavaScript();
}
if (nodeViewJavaScriptRepository != null) {
return nodeViewJavaScriptRepository.get(code);
}
return null;
}


public void remove(String code) {
this.cache.remove(code);
}


public void delete(String code) {
this.cache.remove(code);
if (nodeViewJavaScriptRepository != null) {
nodeViewJavaScriptRepository.delete(code);
}
}


public static class NodeViewJavaScriptClearJob {

@Getter
private final NodeViewJavaScript javaScript;
private final long clearTime;
private final Timer timer;

public NodeViewJavaScriptClearJob(NodeViewJavaScript javaScript, long clearTime) {
this.javaScript = javaScript;
this.clearTime = clearTime;
this.timer = new Timer();

this.initTimer();
}


private void initTimer() {
this.timer.schedule(new TimerTask() {
@Override
public void run() {
NodeViewJavaScriptCacheContext.getInstance().remove(javaScript.getCode());
}
}, this.clearTime);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.codingapi.flow.javscript;

import com.codingapi.flow.javscript.annotation.NodeViewScript;
import com.codingapi.springboot.framework.reflect.ObjectAnnotationFieldUtils;

public class NodeViewScriptAnnotationScannerUtils {

public static NodeViewScriptFieldResult findNodeViewScriptFields(Object target) {
return new NodeViewScriptFieldResult(ObjectAnnotationFieldUtils.findFieldAnnotationValue(target, NodeViewScript.class, String.class));
}

}
Loading