Giter VIP home page Giter VIP logo

turbo's Issues

1.1.1 engine demo项目 测试用例缺少ei_flow_instance_mapping表定义

1.1.1版的engine 新增了一个ei_flow_instance_mapping 表, 不过在demo项目的test/resources/script/turbo-mysql-h2-ddl.sql 中缺少这个表定义, 导致运行DemoTest用例时失败.
微信图片_20230629193628
微信图片_20230629193632

同时希望在有表变化的版本中加上表变化声明, 方便用户从旧版本迁移到新版本

[功能需求] 常见**式审批流/工作流需求

希望能支撑以下能力。作为流程引擎底层之外的,业务扩展包。

1、审批人驳回时能选择驳回到指定环节(activity/node),
场景:具体业务会驳回到对应环节,后面还会出报表统计岗位差错率
2、定义流程时可定义驳回不重走流程/重走流程
场景:一非常严格的场景会要求重走流程,一般不重走流程,毕竟不能麻烦领导审批2次。所以领导前是重走流程,领导后的不重走流程。驳回后再提交或审批会直接到领导这里来
3、审批人驳回时可选择驳回不重走流程/重走流程
场景:业务太灵活时再流程定义时指定的不准确,审批人自己去考虑,反正他的岗位职责就是审批这些因素
4、定义流程时可定义指定环节(activity/node)同一审批人自动审批
场景:领导可不虚幻审批两次。一般科室下面的人提交后第一个审批的就是科室经理,但是科室经理本身又是后面某个环节的负责人,那就会触发审批两次,因此第二次需要自动审批。

其他的什么发送模版消息,限定环节(activity/node)的审批人来源之类的简单的好实现,上面那种涉及流程驱动的不熟悉turbo不好整。

流程回滚

看介绍是可以回滚至开始节点和上一节点。支持回滚至中间的其他节点吗?

子流程的实现方案

看了下有subprocess的对象,但是没有相关的实现方案和单测,请问有子流程的实现方案吗

请教性能

我看整体架构依赖数据库,有点担心性能是否能应对高并发?我理解应该设计为分层架构,分不同模块,按需引入。底层的执行引擎不依赖数据库,上层的应用层按需引入状态模块。

是否支持节点自动执行

目前看都是又外部触发流程流转,请问是否支持用户任务自动执行业务逻辑,然后流转到下一节点

有流程设计器吗

有在线体验版吗
有配套的在线流程设计器吗
还是说 基于标准的 bpmn 格式

JDK17不兼容报错

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make private static java.lang.invoke.MethodHandles$Lookup jdk.proxy2.$Proxy118.proxyClassLookup(java.lang.invoke.MethodHandles$Lookup) throws java.lang.IllegalAccessException accessible: module jdk.proxy2 does not "opens jdk.proxy2" to unnamed module @1afd44cb
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[na:na]
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[na:na]
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:200) ~[na:na]
at java.base/java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:130) ~[na:na]
at org.codehaus.groovy.reflection.CachedClass$3$1.run(CachedClass.java:86) ~[groovy-all-2.3.7.jar:2.3.7]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) ~[na:na]
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:81) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:79) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:250) ~[groovy-all-2.3.7.jar:2.3.7]
at groovy.lang.MetaClassImpl.populateMethods(MetaClassImpl.java:361) ~[groovy-all-2.3.7.jar:2.3.7]
at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:340) ~[groovy-all-2.3.7.jar:2.3.7]
at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3225) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:210) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:241) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:251) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:259) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:855) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:122) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:163) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.findASTTranformationClass(ASTTransformationCustomizer.groovy:202) ~[groovy-all-2.3.7.jar:2.3.7]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:148) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:99) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:53) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:157) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:169) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.findPhase(ASTTransformationCustomizer.groovy:224) ~[groovy-all-2.3.7.jar:2.3.7]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:148) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:99) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:53) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:157) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:169) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.(ASTTransformationCustomizer.groovy:178) ~[groovy-all-2.3.7.jar:2.3.7]
at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.(ASTTransformationCustomizer.groovy:186) ~[groovy-all-2.3.7.jar:2.3.7]
at groovy.text.markup.MarkupTemplateEngine.(MarkupTemplateEngine.java:84) ~[groovy-all-2.3.7.jar:2.3.7]
at org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer.createTemplateEngine(GroovyMarkupConfigurer.java:160) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer.afterPropertiesSet(GroovyMarkupConfigurer.java:153) ~[spring-webmvc-5.3.23.jar:5.3.23]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.23.jar:5.3.23]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.23.jar:5.3.23]
... 16 common frames omitted

如何扩展并行网关

看了流程执行逻辑里,不管是getUniqueNextNode方法还是calculateNextNode方法,都是需要明确走到下一个确定的节点,那如何扩展并行网关

并行网关怎么实现?

看了源代码,发现getExecuteExecutor方法返回值是单个的,不符合并行网关的需求。是否有考虑到这个场景或者提供个解决思路?

如何在turbo中插入业务的处理逻辑

看了turbo的设计,很赞!但有个疑惑,turbo注重在流程的定义和执行,但是看了源代码,貌似框架本身也没有提供用于流程节点去绑定业务处理逻辑的扩展点?那如果这种没有可以统一的入口定义了,后续拖拉拽来编排业务逻辑,如何实现标准化的管理呢?l可能的话,能否公布下turbo后续要支持的特性和预期时间呢?

请求支持JDK 17,或者提供在JDK 17中运行的替代方案,谢谢~

近期我浏览了许多工作流框架,发现Trubo因其轻量级特性、最小依赖以及能够直接嵌入运行而给我留下了深刻的印象,这让它能够非常好地与LogicFlow配合使用。然而,遗憾的是,它目前不支持JDK 17,这对我当前的设置是一个明显的限制。

请问在不久的将来有没有可能使Trubo兼容JDK 17?或者是否有其他方法或思路,我可以在本地拉取代码后进行适配?期待您的回复,谢谢!

turbo-client启动报错,能帮忙解决下吗

TypeError: Cannot read properties of undefined (reading 'configure')
at D:\ideaworkspace\turbo-client\node_modules\vite\dist\node\chunks\dep-971d9e33.js:51435:18
at Array.forEach ()
at proxyMiddleware (D:\ideaworkspace\turbo-client\node_modules\vite\dist\node\chunks\dep-971d9e33.js:51423:26)
at createServer (D:\ideaworkspace\turbo-client\node_modules\vite\dist\node\chunks\dep-971d9e33.js:56584:25)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async CAC. (D:\ideaworkspace\turbo-client\node_modules\vite\dist\node\cli.js:688:24)

Question: 关于流程的执行逻辑

感谢开源,代码逻辑非常清晰,让我这个不写 java 的人也能完整的看完整个逻辑。但是不太清楚怎么和具体的业务关联起来。

比如下面这个点我非常疑惑:
流程直到用户节点挂起或者结束节点完成 就会停下,如果说 审批人请求 commitTask 之后,后面要经过很长的节点才会到达下一个挂起的节点,那这个审批人岂不是要一直等?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.