├── .gitignore ├── README.md ├── document ├── README.md ├── SUMMARY.md ├── _book │ ├── arch │ │ ├── arch.html │ │ └── arch.md │ ├── client │ │ ├── clientNoSpring.html │ │ ├── clientNoSpring.md │ │ ├── clientSpring.html │ │ ├── clientSpring.md │ │ ├── nodeDevelop.html │ │ ├── nodeDevelop.md │ │ ├── runnerContext.html │ │ ├── runnerContext.md │ │ ├── runnerEngine.html │ │ └── runnerEngine.md │ ├── demo │ │ ├── mall │ │ │ ├── mallDemo.html │ │ │ ├── mallDemo.md │ │ │ └── mallDemoEngine.png │ │ └── market │ │ │ ├── marketDemo.html │ │ │ ├── marketDemo.md │ │ │ └── marketDemoEngine.png │ ├── gitbook │ │ ├── fonts │ │ │ └── fontawesome │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ ├── gitbook-plugin-fontsettings │ │ │ ├── fontsettings.js │ │ │ └── website.css │ │ ├── gitbook-plugin-highlight │ │ │ ├── ebook.css │ │ │ └── website.css │ │ ├── gitbook-plugin-livereload │ │ │ └── plugin.js │ │ ├── gitbook-plugin-lunr │ │ │ ├── lunr.min.js │ │ │ └── search-lunr.js │ │ ├── gitbook-plugin-search │ │ │ ├── lunr.min.js │ │ │ ├── search-engine.js │ │ │ ├── search.css │ │ │ └── search.js │ │ ├── gitbook-plugin-sharing │ │ │ └── buttons.js │ │ ├── gitbook.js │ │ ├── images │ │ │ ├── apple-touch-icon-precomposed-152.png │ │ │ └── favicon.ico │ │ ├── style.css │ │ └── theme.js │ ├── images │ │ ├── arch.jpg │ │ ├── bushu.png │ │ ├── code_weixin.jpg │ │ ├── demo.jpg │ │ └── nginxConfig.png │ ├── index.html │ ├── operationManual │ │ ├── img │ │ │ ├── _1.dat │ │ │ ├── app.png │ │ │ ├── engine.png │ │ │ ├── engineList.png │ │ │ ├── nodeConfig.png │ │ │ ├── nodeDeploy.png │ │ │ ├── nodeLink.png │ │ │ ├── nodeOperate.png │ │ │ └── notConfig.png │ │ ├── index.html │ │ └── index.md │ ├── search_index.json │ └── server │ │ ├── serverSummary.html │ │ └── serverSummary.md ├── arch │ └── arch.md ├── client │ ├── clientNoSpring.md │ ├── clientSpring.md │ ├── nodeDevelop.md │ ├── runnerContext.md │ └── runnerEngine.md ├── demo │ ├── mall │ │ ├── mallDemo.md │ │ ├── mallDemoEngine.png │ │ └── mallDemoExe.png │ └── market │ │ ├── marketDemo.md │ │ ├── marketDemoEngine.png │ │ └── marketDemoExe.png ├── images │ ├── arch.jpg │ ├── bushu.png │ ├── code_weixin.jpg │ ├── demo.jpg │ └── nginxConfig.png ├── operationManual │ ├── img │ │ ├── _1.dat │ │ ├── app.png │ │ ├── engine.png │ │ ├── engineList.png │ │ ├── nodeConfig.png │ │ ├── nodeDeploy.png │ │ ├── nodeLink.png │ │ ├── nodeOperate.png │ │ └── notConfig.png │ └── index.md └── server │ └── serverSummary.md ├── fiborule ├── .gitignore ├── fiborule-common │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── fibo │ │ └── rule │ │ └── common │ │ ├── constant │ │ └── EngineConstant.java │ │ ├── dto │ │ ├── EngineDto.java │ │ ├── EngineNodeDto.java │ │ ├── FiboBeanDto.java │ │ ├── FiboFieldDto.java │ │ └── FiboNioDto.java │ │ ├── enums │ │ ├── DelFlagEnum.java │ │ ├── FieldTypeEnum.java │ │ ├── NioOperationTypeEnum.java │ │ ├── NioTypeEnum.java │ │ ├── NodeTypeEnum.java │ │ └── StatusEnum.java │ │ ├── model │ │ ├── ChannelInfo.java │ │ └── NodeInfo.java │ │ └── utils │ │ ├── FiboNioUtils.java │ │ └── LOGOPrinter.java ├── fiborule-core │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── fibo │ │ └── rule │ │ └── core │ │ ├── annotation │ │ ├── FiboBean.java │ │ └── FiboField.java │ │ ├── client │ │ ├── FiboNioClient.java │ │ ├── FiboNioClientHandler.java │ │ ├── FiboNioClientService.java │ │ └── FiboNodeScanner.java │ │ ├── context │ │ ├── Contextmanager.java │ │ ├── DefaultParamBean.java │ │ └── FiboContext.java │ │ ├── engine │ │ ├── EngineBuilder.java │ │ ├── EngineManager.java │ │ ├── EngineResponse.java │ │ ├── condition │ │ │ ├── FiboAllCondition.java │ │ │ ├── FiboCondition.java │ │ │ ├── FiboIfCondition.java │ │ │ ├── FiboSerialCondition.java │ │ │ └── FiboSwitchCondition.java │ │ ├── element │ │ │ ├── FiboEngine.java │ │ │ ├── FiboEngineNode.java │ │ │ └── FiboRunnable.java │ │ ├── id │ │ │ └── IdGeneratorHolder.java │ │ └── step │ │ │ └── NodeStep.java │ │ ├── enums │ │ └── NodeTypeClazzEnum.java │ │ ├── exception │ │ ├── ContextNotFoundException.java │ │ ├── EngineBuildException.java │ │ ├── EngineNotFoundException.java │ │ ├── EngineSystemException.java │ │ ├── FiboApplicationNotInitException.java │ │ ├── FiboBeanNameRepeatException.java │ │ ├── FiboFieldNameRepeatException.java │ │ ├── MonitorManagerNotInitException.java │ │ ├── NoAvailableContextException.java │ │ ├── NodeAllExecuteException.java │ │ └── NullParamException.java │ │ ├── monitor │ │ ├── MonitorManager.java │ │ ├── MonitorTimerTask.java │ │ └── NodeStatistics.java │ │ ├── node │ │ ├── FiboIfNode.java │ │ ├── FiboNode.java │ │ └── FiboSwitchNode.java │ │ ├── property │ │ ├── FiboRuleConfig.java │ │ ├── FiboRuleConfigGetter.java │ │ └── FiboSceneConfig.java │ │ ├── runner │ │ ├── FiboApplication.java │ │ └── FiboApplicationHolder.java │ │ ├── thread │ │ └── ExecutorHelper.java │ │ └── util │ │ ├── BoundedPriorityBlockingQueue.java │ │ ├── CopyOnWriteHashMap.java │ │ ├── FiboAddressUtils.java │ │ └── FiboBeanUtils.java ├── fiborule-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── fibo.rule │ │ │ └── server │ │ │ ├── FiboruleServerApplication.java │ │ │ ├── config │ │ │ ├── ControllerException.java │ │ │ ├── DataSourceConfig.java │ │ │ ├── GlobalExceptionHandler.java │ │ │ ├── ServerProperties.java │ │ │ ├── SessionInterceptor.java │ │ │ ├── Swagger2Config.java │ │ │ └── WebMvcConfig.java │ │ │ ├── controller │ │ │ ├── AppController.java │ │ │ ├── EngineController.java │ │ │ └── EngineNodeController.java │ │ │ ├── dao │ │ │ ├── mapper │ │ │ │ ├── AppMapper.java │ │ │ │ ├── EngineMapper.java │ │ │ │ └── EngineNodeMapper.java │ │ │ └── model │ │ │ │ ├── entity │ │ │ │ ├── App.java │ │ │ │ ├── Engine.java │ │ │ │ └── EngineNode.java │ │ │ │ ├── param │ │ │ │ ├── AppEditParam.java │ │ │ │ ├── AppListParam.java │ │ │ │ ├── EngineDetailParam.java │ │ │ │ ├── EngineEditParam.java │ │ │ │ ├── EngineListParam.java │ │ │ │ ├── EngineReleaseParam.java │ │ │ │ ├── NodeConnectLineDetailParam.java │ │ │ │ ├── NodeConnectLineParam.java │ │ │ │ ├── NodeEditParam.java │ │ │ │ ├── NodeMoveLocationParam.java │ │ │ │ ├── NodeMoveLocationParams.java │ │ │ │ ├── NodeReConnectLineParam.java │ │ │ │ └── NodesListParam.java │ │ │ │ └── vo │ │ │ │ ├── EngineDetailVO.java │ │ │ │ └── EngineNodeDetailVO.java │ │ │ ├── enums │ │ │ ├── BootStatusEnum.java │ │ │ └── ErrorCodeEnum.java │ │ │ ├── exception │ │ │ ├── ApiException.java │ │ │ ├── ErrorCode.java │ │ │ ├── ErrorCodeException.java │ │ │ └── IErrorCode.java │ │ │ ├── model │ │ │ ├── ResponseEntityBuilder.java │ │ │ ├── ResponseEntityDto.java │ │ │ └── SimpleCommonPrimaryKeyParam.java │ │ │ ├── nio │ │ │ ├── NioClientManager.java │ │ │ ├── NioServer.java │ │ │ ├── NioServerHandler.java │ │ │ └── NioServerInit.java │ │ │ └── service │ │ │ ├── AppService.java │ │ │ ├── EngineNodeService.java │ │ │ ├── EngineService.java │ │ │ └── impl │ │ │ ├── AppServiceImpl.java │ │ │ ├── EngineNodeServiceImpl.java │ │ │ └── EngineServiceImpl.java │ │ └── resources │ │ ├── application-dev.yml │ │ ├── application-test.yml │ │ ├── application-yu.yml │ │ ├── application.yml │ │ ├── doc │ │ └── rule.sql │ │ ├── logback-spring.xml │ │ └── mybatis │ │ ├── AppMapper.xml │ │ └── EngineMapper.xml ├── fiborule-spring-boot-starter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── fibo │ │ │ └── rule │ │ │ └── springboot │ │ │ ├── FiboRuleMonitorProperty.java │ │ │ ├── FiboRuleProperty.java │ │ │ └── config │ │ │ ├── FiboRuleMainAutoConfiguration.java │ │ │ └── FiboRulePropertyAutoConfiguration.java │ │ └── resources │ │ └── META-INF │ │ ├── fiborule-default.properties │ │ └── spring.factories ├── fiborule-spring │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── fibo │ │ └── rule │ │ └── spring │ │ ├── FiboNioClientInit.java │ │ └── FiboSpringBeanFactory.java ├── fiborule-test-mall │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── fibo │ │ │ └── rule │ │ │ └── test │ │ │ └── mall │ │ │ ├── FiboRuleMallTestApplication.java │ │ │ ├── context │ │ │ └── PriceContext.java │ │ │ ├── controller │ │ │ └── MallExampleController.java │ │ │ ├── enums │ │ │ └── AmountTypeEnum.java │ │ │ ├── node │ │ │ ├── AbroadFreightNode.java │ │ │ ├── AddressJudgeNode.java │ │ │ ├── AmountStepPrintNode.java │ │ │ ├── CouponDiscountNode.java │ │ │ ├── DisCountCollectNode.java │ │ │ ├── FinalAmountNode.java │ │ │ ├── FullDecrementNode.java │ │ │ ├── FullDisCountNode.java │ │ │ ├── HomeFreightNode.java │ │ │ ├── MemberDisCountNode.java │ │ │ ├── MemberJudgeNode.java │ │ │ └── OrderInitNode.java │ │ │ ├── service │ │ │ └── SendService.java │ │ │ └── vo │ │ │ ├── AmountStepVo.java │ │ │ ├── DiscountVo.java │ │ │ ├── GoodsVo.java │ │ │ └── OrderVo.java │ │ └── resources │ │ ├── application-dev.properties │ │ ├── application-test.properties │ │ ├── application.properties │ │ └── logback-spring.xml ├── fiborule-test-market │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── fibo │ │ │ └── rule │ │ │ └── test │ │ │ └── market │ │ │ ├── FiboRuleMarketTestApplication.java │ │ │ ├── context │ │ │ └── MarketContext.java │ │ │ ├── controller │ │ │ └── MarketExampleController.java │ │ │ ├── node │ │ │ ├── CashBackNode.java │ │ │ ├── ConsumeAmountJudgeNode.java │ │ │ ├── ContextInitNode.java │ │ │ ├── DateJudgeNode.java │ │ │ ├── EnrollJudgeNode.java │ │ │ └── MerchantJudgeNode.java │ │ │ └── vo │ │ │ ├── CashBackVo.java │ │ │ ├── ResultVo.java │ │ │ └── TradeVo.java │ │ └── resources │ │ ├── application-dev.properties │ │ ├── application-test.properties │ │ ├── application.properties │ │ └── logback-spring.xml ├── fiborule-test-pay │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── fibo │ │ │ └── rule │ │ │ └── test │ │ │ └── pay │ │ │ ├── FiboRulePayTestApplication.java │ │ │ ├── context │ │ │ └── PayRequest.java │ │ │ ├── controller │ │ │ └── PayExampleController.java │ │ │ ├── node │ │ │ ├── MoneyAwardNode.java │ │ │ ├── PayIfNode.java │ │ │ ├── PointsAwardNode.java │ │ │ └── RandomAwardNode.java │ │ │ └── vo │ │ │ └── ResultVo.java │ │ └── resources │ │ ├── application-dev.properties │ │ ├── application-test.properties │ │ ├── application.properties │ │ └── logback-spring.xml ├── fiborule-test │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── fibo │ │ │ │ └── rule │ │ │ │ ├── JarTestApplication.java │ │ │ │ ├── alltest │ │ │ │ ├── context │ │ │ │ │ └── AllTestContext.java │ │ │ │ └── node │ │ │ │ │ ├── AllTestA.java │ │ │ │ │ ├── AllTestB.java │ │ │ │ │ ├── AllTestC.java │ │ │ │ │ ├── AllTestD.java │ │ │ │ │ └── AllTestE.java │ │ │ │ ├── complex │ │ │ │ ├── context │ │ │ │ │ └── ComplexContext.java │ │ │ │ ├── node │ │ │ │ │ ├── ComplexA.java │ │ │ │ │ ├── ComplexC.java │ │ │ │ │ ├── ComplexD.java │ │ │ │ │ ├── ComplexE.java │ │ │ │ │ ├── ComplexF.java │ │ │ │ │ ├── ComplexH.java │ │ │ │ │ ├── ComplexI.java │ │ │ │ │ ├── ComplexJ.java │ │ │ │ │ ├── ComplexK.java │ │ │ │ │ ├── ComplexL.java │ │ │ │ │ ├── ComplexM.java │ │ │ │ │ ├── ComplexN.java │ │ │ │ │ ├── ComplexO.java │ │ │ │ │ ├── ComplexP.java │ │ │ │ │ ├── ComplexR.java │ │ │ │ │ ├── ComplexS.java │ │ │ │ │ ├── ComplexT.java │ │ │ │ │ ├── ComplexU.java │ │ │ │ │ └── ComplexV.java │ │ │ │ └── request │ │ │ │ │ └── ComplexRequest.java │ │ │ │ ├── controller │ │ │ │ └── TestController.java │ │ │ │ ├── iftest │ │ │ │ ├── context │ │ │ │ │ └── IfTestContext.java │ │ │ │ └── node │ │ │ │ │ ├── IfTestA.java │ │ │ │ │ ├── IfTestB.java │ │ │ │ │ ├── IfTestC.java │ │ │ │ │ ├── IfTestD.java │ │ │ │ │ └── IfTestE.java │ │ │ │ ├── request │ │ │ │ └── TestRequest.java │ │ │ │ ├── switchtest │ │ │ │ ├── context │ │ │ │ │ └── SwitchTestContext.java │ │ │ │ └── node │ │ │ │ │ ├── SwitchTestA.java │ │ │ │ │ ├── SwitchTestB.java │ │ │ │ │ ├── SwitchTestC.java │ │ │ │ │ ├── SwitchTestD.java │ │ │ │ │ ├── SwitchTestE.java │ │ │ │ │ ├── SwitchTestF.java │ │ │ │ │ └── SwitchTestG.java │ │ │ │ └── test │ │ │ │ ├── context │ │ │ │ └── RewardContext.java │ │ │ │ ├── node │ │ │ │ ├── ContextInitNode.java │ │ │ │ ├── RechargeDateJudgeNode.java │ │ │ │ ├── RechargeJudgeNode.java │ │ │ │ ├── RewardIntegralNode.java │ │ │ │ └── RewardMoneyNode.java │ │ │ │ └── request │ │ │ │ └── RechargeRequestVo.java │ │ └── resources │ │ │ ├── application-dev.properties │ │ │ ├── application-test.properties │ │ │ ├── application.properties │ │ │ └── logback-spring.xml │ │ └── test │ │ └── java │ │ ├── EngineBuilderTest.java │ │ ├── FiboruleTest.java │ │ └── com │ │ └── fibo │ │ └── rule │ │ ├── alltest │ │ └── AllTest.java │ │ ├── complexTest │ │ └── ComplexTest.java │ │ ├── iftest │ │ └── IfTest.java │ │ ├── scannerTest │ │ └── ScannerTest.java │ │ └── switchtest │ │ └── SwitchTest.java └── pom.xml └── h5-fiborule-manager ├── .env.A ├── .env.B ├── .env.C ├── .env.D ├── .gitignore ├── README.md ├── babel.config.js ├── baseUrl.js ├── jsconfig.json ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── img │ ├── decisionBcg.jpg │ └── nodeimg │ │ ├── nodeType1.png │ │ ├── nodeType2.png │ │ ├── nodeType3.png │ │ ├── nodeType4.png │ │ ├── nodeType5.png │ │ ├── nodeType6.png │ │ └── nodeType7.png ├── index.html └── jtopo-1.0.5-min.js ├── src ├── App.vue ├── api │ └── index.js ├── assets │ ├── class.less │ └── logo.png ├── components │ ├── input.vue │ ├── pagination.vue │ ├── select.vue │ └── table.vue ├── main.js ├── router │ └── index.js ├── store │ └── index.js ├── utils │ ├── class.js │ └── request.js └── views │ ├── appList.vue │ ├── engine │ ├── index.vue │ ├── mixin │ │ ├── link.js │ │ ├── node.js │ │ ├── nodeConfig.js │ │ └── request.js │ ├── nodeConfig │ │ ├── NoConfig.vue │ │ ├── SwitchIfGeneral.vue │ │ └── nodeHome.vue │ └── nodeList.js │ ├── engineList.vue │ └── home.vue └── vue.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | .idea 7 | .Archive/ 8 | .vscode/ 9 | dist 10 | *.log 11 | target/ 12 | *.iml 13 | apidoc/ 14 | logs/ 15 | /*/target 16 | h5-fiborule-manager/baseUrl2.js 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | - - - 3 | FiboRule Lite - 轻量级规则引擎
4 | * 轻量级 - 会编程即可轻松上手、无需复杂的系统的操作 5 | * 阈值可配置 - 每个流程节点中的变量阈值可通过界面进行配置 6 | * 流程可配置 - 逻辑编排可通过拖拉拽节点来实现 7 | * 配置简单化 - 业务场景中,经常变动的是逻辑编排和阈值。核心支持逻辑编排配置和阈值配置 8 | * 场景化 - 各个业务场景提供示例代码,方便上手 9 | 10 | ### 代码结构 11 | * fiborule 后端核心代码 12 | `fiborule-common` 通用dto、枚举、model、util类等 13 | `fiborule-core` SDK核心代码类 14 | `fiborule-server` 服务器端代码 15 | `fiborule-spring` 客户端初始化 16 | `fiborule-spring-boot-starter` 全景配置参数 17 | `fiborule-test` 测试用例 18 | `fiborule-test-mall` 场景测试-商城用例 19 | `fiborule-test-market` 场景测试-营销用例 20 | `fiborule-test-pay` 场景测试-充值用例 21 | * h5-fiborule-manager 前端核心代码 22 | * document 详细的使用文档 23 | 24 | ### 架构图 25 | ![架构图](./document/images/arch.jpg) 26 | 27 | 高清大图地址: 28 | https://www.processon.com/view/link/63849862e0b34d37c4717942 29 | 30 | ### Demo图 31 | ![Demo图](./document/images/demo.jpg) 32 | 33 | ### Demo路径 34 | http://101.132.68.84 35 | 36 | ### 文档链接 37 | https://www.fibo.cn/fiborulelite/ 38 | 39 | ### 开源交流 40 | 可加微信号,进开源交流群 41 | ![二维码](./document/images/code_weixin.jpg) 42 | -------------------------------------------------------------------------------- /document/README.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | - - - 3 | FiboRule Lite - 轻量级规则引擎
4 | * 轻量级 - 会编程即可轻松上手、无需复杂的系统的操作 5 | * 阈值可配置 - 每个流程节点中的变量阈值可通过界面进行配置 6 | * 流程可配置 - 逻辑编排可通过拖拉拽节点来实现 7 | * 配置简单化 - 业务场景中,经常变动的是逻辑编排和阈值。核心支持逻辑编排配置和阈值配置 8 | * 场景化 - 各个业务场景提供示例代码,方便上手 9 | 10 | ### 代码结构 11 | * fiborule 后端核心代码 12 | `fiborule-common` 通用dto、枚举、model、util类等 13 | `fiborule-core` SDK核心代码类 14 | `fiborule-server` 服务器端代码 15 | `fiborule-spring` 客户端初始化 16 | `fiborule-spring-boot-starter` 全景配置参数 17 | `fiborule-test` 测试用例 18 | `fiborule-test-mall` 场景测试-电商用例 19 | `fiborule-test-market` 场景测试-营销用例 20 | `fiborule-test-pay` 场景测试-充值用例 21 | * h5-fiborule-manager 前端核心代码 22 | * document 详细的使用文档 23 | 24 | ### 架构图 25 | ![架构图](images/arch.jpg) 26 | 27 | 高清大图地址: 28 | https://www.processon.com/view/link/63849862e0b34d37c4717942 29 | 30 | ### Demo图 31 | ![Demo图](images/demo.jpg) 32 | 33 | ### Demo路径 34 | http://101.132.68.84 35 | 36 | ### 开源交流 37 | 可加微信号,进开源交流群 38 | ![二维码](images/code_weixin.jpg) -------------------------------------------------------------------------------- /document/SUMMARY.md: -------------------------------------------------------------------------------- 1 | # 目录 2 | * [前言](README.md) 3 | * [技术架构](arch/arch.md) 4 | * [服务端部署](server/serverSummary.md) 5 | * [服务端操作手册](operationManual/index.md) 6 | * 开发指南 7 | * [Client接入(Spring)](client/clientSpring.md) 8 | * [Client接入(非Spring)](client/clientNoSpring.md) 9 | * [组件开发](client/nodeDevelop.md) 10 | * [执行上下文](client/runnerContext.md) 11 | * [执行引擎](client/runnerEngine.md) 12 | * [电商案例](demo/mall/mallDemo.md) 13 | * [营销案例](demo/market/marketDemo.md) 14 | -------------------------------------------------------------------------------- /document/_book/arch/arch.md: -------------------------------------------------------------------------------- 1 | # 技术架构 2 | ## 结构图 3 | 架构图的地址如下: 4 | https://www.processon.com/view/link/63849862e0b34d37c4717942 5 | 主要分为以下几端: 6 | `应用端` 应用端使用SDK,按照业务场景,定一个场景节点的类型、节点的条件判断或者计算逻辑、节点的可配置变量。并定义App的一些基本信息。 7 | `SDK` SDK可以编译成一个独立Jar包,由应用端开发场景应用时进行依赖。主要进行基础类的定义、注解的定义以及扫描、逻辑流的执行、和服务器的信息交互等 8 | `服务器` 服务器主要节点配置信息的保存更新、和SDK进行节点信息的推送同步等。使用MySQL机型信息的存储,以及客户端列表的存储 9 | `H5端` H5端主要是后端管理系统,负责应用管理、引擎管理、流程的拖拉拽编辑等界面操作 10 | 11 | 这4端的交互关系详见流程图 12 | -------------------------------------------------------------------------------- /document/_book/client/clientNoSpring.md: -------------------------------------------------------------------------------- 1 | ## Client接入(非Spring) 2 | ### 增加pom依赖 3 | - - - 4 | 以1.0.0版本为例 5 | ```xml 6 | 7 | com.fibo.rule 8 | fiborule-core 9 | 1.0.0 10 | 11 | ``` 12 | ### 运行Client 13 | - - - 14 | ```Java 15 | //场景对应的包路径 16 | Map> scenePackages = new HashMap<>(); 17 | //传入app、server和场景对应的包路径 18 | FiboNioClient fiboNioClient = new FiboNioClient(1, "127.0.0.1:18121", scenePackages); 19 | //启动客户端应用,连接server 20 | fiboNioClient.start(); 21 | //客户端应用关闭后清理 22 | fiboNioClient.destroy(); 23 | ``` -------------------------------------------------------------------------------- /document/_book/client/clientSpring.md: -------------------------------------------------------------------------------- 1 | ## Client接入(Spring) 2 | ### 增加pom依赖 3 | - - - 4 | 以1.0.0版本为例 5 | ```xml 6 | 7 | com.fibo.rule 8 | fiborule-spring-boot-starter 9 | 1.0.0 10 | 11 | ``` 12 | ### 增加配置 13 | - - - 14 | ```Java 15 | //后台配置的appId 16 | fiborule.app=1 17 | //server地址:ip和端口 18 | fiborule.server=127.0.0.1:18121 19 | 20 | //场景配置:可以配置多个场景;没有配置的话,默认场景名称为default,扫描全包 21 | //场景名称 22 | fiborule.scene-list[0].name=mall-price 23 | //场景对应的包,可以配置多个包,逗号分隔 24 | fiborule.scene-list[0].path=com.fibo.rule.test.mall 25 | ``` -------------------------------------------------------------------------------- /document/_book/client/runnerContext.md: -------------------------------------------------------------------------------- 1 | ## 执行上下文 2 | ### 默认上下文 3 | - - - 4 | 默认的执行上下文:DefaultParamBean。默认上下文的实现就是一个Map。
5 | 可以通过DefaultParamBean中的setData方法放入数据,通过getData方法获得数据。 6 | ### 自定义上下文 7 | - - - 8 | 可以使用任意的Bean作为上下文进行传入,对Bean没有任何要求。
9 | 自定义的上下文是强类型,更加贴合实际的业务
10 | 传入方式: 11 | ```Java 12 | //单个上下文 13 | EngineResponse engineResponse = fiboApplication.runner(1L, 引擎参数, CustomBean.class); 14 | //多个上下文 15 | EngineResponse engineResponse = fiboApplication.runner(1L, 引擎参数, CustomBean.class, OrderBean.class); 16 | ``` 17 | 传入之后,会在调用时进行初始化,给上下文分配唯一的实例。在组件之中可以去获得这个上下文实例: 18 | ```Java 19 | @FiboBean(name = "计算节点", desc = "计算节点") 20 | public class CommonNode extends FiboNode { 21 | @Override 22 | public void runnerStep() { 23 | //获取context,多个上下文时按类型获取对应的上下文 24 | CustomBean customBean = this.getContextBean(CustomBean.class); 25 | OrderBean orderBean = this.getContextBean(OrderBean.class); 26 | //获取第一个上下文 27 | CustomBean customBean = this.getFirstContextBean(); 28 | } 29 | } 30 | ``` -------------------------------------------------------------------------------- /document/_book/client/runnerEngine.md: -------------------------------------------------------------------------------- 1 | ## 执行引擎 2 | ### 执行方法 3 | - - - 4 | 可以在Springboot/Spring体系中任何被Spring上下文管理的类中进行注入FiboApplication。
5 | FiboApplication有两个重载方法 6 | ```Java 7 | //默认上下文执行方法 8 | public EngineResponse runner(Long engineId, Object param) 9 | //传入自定义上下文执行方法 10 | public EngineResponse runner(Long engineId, Object param, Class... paramBeanClazzArray) 11 | ``` 12 | ### 执行参数 13 | - - - 14 | * engineId:后台配置的引擎id 15 | * param:引擎执行所需参数,节点执行时可以通过getRequestData方法直接获取 16 | ```Java 17 | @FiboBean(name = "计算节点", desc = "计算节点") 18 | public class CommonNode extends FiboNode { 19 | @Override 20 | public void runnerStep() { 21 | //获取请求参数,例如传入的是OrderVo 22 | OrderVo orderVo = this.getRequestData(); 23 | } 24 | } 25 | ``` 26 | * paramBeanClazzArray:执行上下文 27 | 28 | ### 执行结果 29 | - - - 30 | 执行返回结果类型为EngineResponse
31 | * success:执行是否成功 32 | * message:异常信息 33 | * cause:异常 34 | * fiboContext:包含执行上下文、过程参数、执行步骤 -------------------------------------------------------------------------------- /document/_book/demo/mall/mallDemoEngine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/demo/mall/mallDemoEngine.png -------------------------------------------------------------------------------- /document/_book/demo/market/marketDemoEngine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/demo/market/marketDemoEngine.png -------------------------------------------------------------------------------- /document/_book/gitbook/fonts/fontawesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/gitbook/fonts/fontawesome/FontAwesome.otf -------------------------------------------------------------------------------- /document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /document/_book/gitbook/gitbook-plugin-livereload/plugin.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var newEl = document.createElement('script'), 3 | firstScriptTag = document.getElementsByTagName('script')[0]; 4 | 5 | if (firstScriptTag) { 6 | newEl.async = 1; 7 | newEl.src = '//' + window.location.hostname + ':35729/livereload.js'; 8 | firstScriptTag.parentNode.insertBefore(newEl, firstScriptTag); 9 | } 10 | 11 | })(); 12 | -------------------------------------------------------------------------------- /document/_book/gitbook/gitbook-plugin-search/search-engine.js: -------------------------------------------------------------------------------- 1 | require([ 2 | 'gitbook', 3 | 'jquery' 4 | ], function(gitbook, $) { 5 | // Global search objects 6 | var engine = null; 7 | var initialized = false; 8 | 9 | // Set a new search engine 10 | function setEngine(Engine, config) { 11 | initialized = false; 12 | engine = new Engine(config); 13 | 14 | init(config); 15 | } 16 | 17 | // Initialize search engine with config 18 | function init(config) { 19 | if (!engine) throw new Error('No engine set for research. Set an engine using gitbook.research.setEngine(Engine).'); 20 | 21 | return engine.init(config) 22 | .then(function() { 23 | initialized = true; 24 | gitbook.events.trigger('search.ready'); 25 | }); 26 | } 27 | 28 | // Launch search for query q 29 | function query(q, offset, length) { 30 | if (!initialized) throw new Error('Search has not been initialized'); 31 | return engine.search(q, offset, length); 32 | } 33 | 34 | // Get stats about search 35 | function getEngine() { 36 | return engine? engine.name : null; 37 | } 38 | 39 | function isInitialized() { 40 | return initialized; 41 | } 42 | 43 | // Initialize gitbook.search 44 | gitbook.search = { 45 | setEngine: setEngine, 46 | getEngine: getEngine, 47 | query: query, 48 | isInitialized: isInitialized 49 | }; 50 | }); -------------------------------------------------------------------------------- /document/_book/gitbook/gitbook-plugin-search/search.css: -------------------------------------------------------------------------------- 1 | /* 2 | This CSS only styled the search results section, not the search input 3 | It defines the basic interraction to hide content when displaying results, etc 4 | */ 5 | #book-search-results .search-results { 6 | display: none; 7 | } 8 | #book-search-results .search-results ul.search-results-list { 9 | list-style-type: none; 10 | padding-left: 0; 11 | } 12 | #book-search-results .search-results ul.search-results-list li { 13 | margin-bottom: 1.5rem; 14 | padding-bottom: 0.5rem; 15 | /* Highlight results */ 16 | } 17 | #book-search-results .search-results ul.search-results-list li p em { 18 | background-color: rgba(255, 220, 0, 0.4); 19 | font-style: normal; 20 | } 21 | #book-search-results .search-results .no-results { 22 | display: none; 23 | } 24 | #book-search-results.open .search-results { 25 | display: block; 26 | } 27 | #book-search-results.open .search-noresults { 28 | display: none; 29 | } 30 | #book-search-results.no-results .search-results .has-results { 31 | display: none; 32 | } 33 | #book-search-results.no-results .search-results .no-results { 34 | display: block; 35 | } 36 | -------------------------------------------------------------------------------- /document/_book/gitbook/images/apple-touch-icon-precomposed-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/gitbook/images/apple-touch-icon-precomposed-152.png -------------------------------------------------------------------------------- /document/_book/gitbook/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/gitbook/images/favicon.ico -------------------------------------------------------------------------------- /document/_book/images/arch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/images/arch.jpg -------------------------------------------------------------------------------- /document/_book/images/bushu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/images/bushu.png -------------------------------------------------------------------------------- /document/_book/images/code_weixin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/images/code_weixin.jpg -------------------------------------------------------------------------------- /document/_book/images/demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/images/demo.jpg -------------------------------------------------------------------------------- /document/_book/images/nginxConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/images/nginxConfig.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/_1.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/_1.dat -------------------------------------------------------------------------------- /document/_book/operationManual/img/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/app.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/engine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/engine.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/engineList.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/engineList.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/nodeConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/nodeConfig.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/nodeDeploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/nodeDeploy.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/nodeLink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/nodeLink.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/nodeOperate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/nodeOperate.png -------------------------------------------------------------------------------- /document/_book/operationManual/img/notConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/_book/operationManual/img/notConfig.png -------------------------------------------------------------------------------- /document/arch/arch.md: -------------------------------------------------------------------------------- 1 | # 技术架构 2 | ## 结构图 3 | 架构图的地址如下: 4 | https://www.processon.com/view/link/63849862e0b34d37c4717942 5 | 主要分为以下几端: 6 | `应用端` 应用端使用SDK,按照业务场景,定一个场景节点的类型、节点的条件判断或者计算逻辑、节点的可配置变量。并定义App的一些基本信息。 7 | `SDK` SDK可以编译成一个独立Jar包,由应用端开发场景应用时进行依赖。主要进行基础类的定义、注解的定义以及扫描、逻辑流的执行、和服务器的信息交互等 8 | `服务器` 服务器主要节点配置信息的保存更新、和SDK进行节点信息的推送同步等。使用MySQL机型信息的存储,以及客户端列表的存储 9 | `H5端` H5端主要是后端管理系统,负责应用管理、引擎管理、流程的拖拉拽编辑等界面操作 10 | 11 | 这4端的交互关系详见流程图 12 | -------------------------------------------------------------------------------- /document/client/clientNoSpring.md: -------------------------------------------------------------------------------- 1 | ## Client接入(非Spring) 2 | ### 增加pom依赖 3 | - - - 4 | 以1.0.0版本为例 5 | ```xml 6 | 7 | com.fibo.rule 8 | fiborule-core 9 | 1.0.0 10 | 11 | ``` 12 | ### 运行Client 13 | - - - 14 | ```Java 15 | //场景对应的包路径 16 | Map> scenePackages = new HashMap<>(); 17 | //传入app、server和场景对应的包路径 18 | FiboNioClient fiboNioClient = new FiboNioClient(1, "127.0.0.1:18121", scenePackages); 19 | //启动客户端应用,连接server 20 | fiboNioClient.start(); 21 | //客户端应用关闭后清理 22 | fiboNioClient.destroy(); 23 | ``` -------------------------------------------------------------------------------- /document/client/clientSpring.md: -------------------------------------------------------------------------------- 1 | ## Client接入(Spring) 2 | ### 增加pom依赖 3 | - - - 4 | 以1.0.0版本为例 5 | ```xml 6 | 7 | com.fibo.rule 8 | fiborule-spring-boot-starter 9 | 1.0.0 10 | 11 | ``` 12 | ### 增加配置 13 | - - - 14 | ```Java 15 | //后台配置的appId 16 | fiborule.app=1 17 | //server地址:ip和端口 18 | fiborule.server=127.0.0.1:18121 19 | 20 | //场景配置:可以配置多个场景;没有配置的话,默认场景名称为default,扫描全包 21 | //场景名称 22 | fiborule.scene-list[0].name=mall-price 23 | //场景对应的包,可以配置多个包,逗号分隔 24 | fiborule.scene-list[0].path=com.fibo.rule.test.mall 25 | ``` -------------------------------------------------------------------------------- /document/client/runnerContext.md: -------------------------------------------------------------------------------- 1 | ## 执行上下文 2 | ### 默认上下文 3 | - - - 4 | 默认的执行上下文:DefaultParamBean。默认上下文的实现就是一个Map。
5 | 可以通过DefaultParamBean中的setData方法放入数据,通过getData方法获得数据。 6 | ### 自定义上下文 7 | - - - 8 | 可以使用任意的Bean作为上下文进行传入,对Bean没有任何要求。
9 | 自定义的上下文是强类型,更加贴合实际的业务
10 | 传入方式: 11 | ```Java 12 | //单个上下文 13 | EngineResponse engineResponse = fiboApplication.runner(1L, 引擎参数, CustomBean.class); 14 | //多个上下文 15 | EngineResponse engineResponse = fiboApplication.runner(1L, 引擎参数, CustomBean.class, OrderBean.class); 16 | ``` 17 | 传入之后,会在调用时进行初始化,给上下文分配唯一的实例。在组件之中可以去获得这个上下文实例: 18 | ```Java 19 | @FiboBean(name = "计算节点", desc = "计算节点") 20 | public class CommonNode extends FiboNode { 21 | @Override 22 | public void runnerStep() { 23 | //获取context,多个上下文时按类型获取对应的上下文 24 | CustomBean customBean = this.getContextBean(CustomBean.class); 25 | OrderBean orderBean = this.getContextBean(OrderBean.class); 26 | //获取第一个上下文 27 | CustomBean customBean = this.getFirstContextBean(); 28 | } 29 | } 30 | ``` -------------------------------------------------------------------------------- /document/client/runnerEngine.md: -------------------------------------------------------------------------------- 1 | ## 执行引擎 2 | ### 执行方法 3 | - - - 4 | 可以在Springboot/Spring体系中任何被Spring上下文管理的类中进行注入FiboApplication。
5 | FiboApplication有两个重载方法 6 | ```Java 7 | //默认上下文执行方法 8 | public EngineResponse runner(Long engineId, Object param) 9 | //传入自定义上下文执行方法 10 | public EngineResponse runner(Long engineId, Object param, Class... paramBeanClazzArray) 11 | ``` 12 | ### 执行参数 13 | - - - 14 | * engineId:后台配置的引擎id 15 | * param:引擎执行所需参数,节点执行时可以通过getRequestData方法直接获取 16 | ```Java 17 | @FiboBean(name = "计算节点", desc = "计算节点") 18 | public class CommonNode extends FiboNode { 19 | @Override 20 | public void runnerStep() { 21 | //获取请求参数,例如传入的是OrderVo 22 | OrderVo orderVo = this.getRequestData(); 23 | } 24 | } 25 | ``` 26 | * paramBeanClazzArray:执行上下文 27 | 28 | ### 执行结果 29 | - - - 30 | 执行返回结果类型为EngineResponse
31 | * success:执行是否成功 32 | * message:异常信息 33 | * cause:异常 34 | * fiboContext:包含执行上下文、过程参数、执行步骤 -------------------------------------------------------------------------------- /document/demo/mall/mallDemoEngine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/demo/mall/mallDemoEngine.png -------------------------------------------------------------------------------- /document/demo/mall/mallDemoExe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/demo/mall/mallDemoExe.png -------------------------------------------------------------------------------- /document/demo/market/marketDemoEngine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/demo/market/marketDemoEngine.png -------------------------------------------------------------------------------- /document/demo/market/marketDemoExe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/demo/market/marketDemoExe.png -------------------------------------------------------------------------------- /document/images/arch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/images/arch.jpg -------------------------------------------------------------------------------- /document/images/bushu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/images/bushu.png -------------------------------------------------------------------------------- /document/images/code_weixin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/images/code_weixin.jpg -------------------------------------------------------------------------------- /document/images/demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/images/demo.jpg -------------------------------------------------------------------------------- /document/images/nginxConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/images/nginxConfig.png -------------------------------------------------------------------------------- /document/operationManual/img/_1.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/_1.dat -------------------------------------------------------------------------------- /document/operationManual/img/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/app.png -------------------------------------------------------------------------------- /document/operationManual/img/engine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/engine.png -------------------------------------------------------------------------------- /document/operationManual/img/engineList.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/engineList.png -------------------------------------------------------------------------------- /document/operationManual/img/nodeConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/nodeConfig.png -------------------------------------------------------------------------------- /document/operationManual/img/nodeDeploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/nodeDeploy.png -------------------------------------------------------------------------------- /document/operationManual/img/nodeLink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/nodeLink.png -------------------------------------------------------------------------------- /document/operationManual/img/nodeOperate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/nodeOperate.png -------------------------------------------------------------------------------- /document/operationManual/img/notConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/document/operationManual/img/notConfig.png -------------------------------------------------------------------------------- /fiborule/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | .idea 7 | .Archive/ 8 | .vscode/ 9 | dist 10 | *.log 11 | target/ 12 | *.iml 13 | apidoc/ 14 | logs/ 15 | /*/target 16 | LOG_PATH_IS_UNDEFINED/ 17 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | fiborule 7 | com.fibo.rule 8 | 1.0-SNAPSHOT 9 | ../pom.xml 10 | 11 | 4.0.0 12 | 13 | fiborule-common 14 | 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | io.netty 23 | netty-codec 24 | ${netty.version} 25 | 26 | 27 | io.netty 28 | netty-transport 29 | ${netty.version} 30 | 31 | 32 | io.netty 33 | netty-handler 34 | ${netty.version} 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/constant/EngineConstant.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.constant; 2 | 3 | /** 4 | *

引擎常量

5 | * 6 | *@author JPX 7 | *@since 2022/11/28 9:55 8 | */ 9 | public interface EngineConstant { 10 | 11 | String LINE_VALUE = "lineValue"; 12 | 13 | String STR_Y = "Y"; 14 | 15 | String STR_N = "N"; 16 | 17 | String STR_Y_CN = "是"; 18 | 19 | String STR_N_CN = "否"; 20 | 21 | String DEFAULT = "default"; 22 | 23 | String STR_KEY = "key"; 24 | 25 | String STR_VALUE = "value"; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/dto/EngineDto.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | *

引擎配置传输对象

9 | * 10 | * @author JPX 11 | * @since 2022-11-18 14:14 12 | */ 13 | @Data 14 | public class EngineDto { 15 | 16 | private Long id; 17 | private String engineName; 18 | private List nodeList; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/dto/EngineNodeDto.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

节点传输对象

7 | * 8 | * @author JPX 9 | * @since 2022-11-18 14:14 10 | */ 11 | @Data 12 | public class EngineNodeDto { 13 | 14 | private Long id; 15 | private String nodeName; 16 | private String beanName; 17 | private String nodeCode; 18 | private Long engineId; 19 | private Integer nodeType; 20 | private String preNodes; 21 | private String nextNodes; 22 | private String nodeConfig; 23 | private String nodeClazz; 24 | //后续节点对应的分支值-[{"key":"Y",value:"node1"}] 25 | private String nextNodeValue; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/dto/FiboBeanDto.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.dto; 2 | 3 | import com.fibo.rule.common.enums.NodeTypeEnum; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | *

节点定义信息传输对象

11 | * 12 | * @author JPX 13 | * @since 2022-12-01 13:36 14 | */ 15 | @Data 16 | public class FiboBeanDto { 17 | 18 | /**节点类型*/ 19 | private NodeTypeEnum type; 20 | /**节点名称*/ 21 | private String name; 22 | /**节点描述*/ 23 | private String desc; 24 | /**节点类名,类名场景下不重复*/ 25 | private String clazzName; 26 | /**节点类全路径*/ 27 | private String nodeClazz; 28 | /**节点需要配置的属性*/ 29 | private List fiboFieldDtoList; 30 | /**if和switch的分支 例如:key-value》Y-是*/ 31 | private Map branchMap; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/dto/FiboFieldDto.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.dto; 2 | 3 | import com.fibo.rule.common.enums.FieldTypeEnum; 4 | import lombok.Data; 5 | 6 | /** 7 | *

节点配置属性

8 | * 9 | * @author JPX 10 | * @since 2022-12-01 13:40 11 | */ 12 | @Data 13 | public class FiboFieldDto { 14 | 15 | /**展示*/ 16 | private String name; 17 | /**存储*/ 18 | private String fieldName; 19 | /**描述*/ 20 | private String desc; 21 | /**类型-枚举*/ 22 | private FieldTypeEnum type; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/dto/FiboNioDto.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.dto; 2 | 3 | import com.fibo.rule.common.enums.NioOperationTypeEnum; 4 | import com.fibo.rule.common.enums.NioTypeEnum; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | /** 11 | *

nio数据传输

12 | * 13 | * @author JPX 14 | * @since 2022-12-01 13:52 15 | */ 16 | @Data 17 | public class FiboNioDto { 18 | 19 | /**请求唯一标识:发出request,返回的response的id需相同*/ 20 | private String id; 21 | /**Nio请求类型:request/response*/ 22 | private NioTypeEnum type; 23 | /**Nio操作类型:初始化、更新信息、心跳包*/ 24 | private NioOperationTypeEnum operationType; 25 | /**appId*/ 26 | private Long appId; 27 | /**app地址*/ 28 | private String address; 29 | /**场景对应的节点信息 key:场景名称 value:自定义组件*/ 30 | private Map> sceneBeansMap; 31 | /**引擎定义传输*/ 32 | private List engineDtoList; 33 | /**取消发布的引擎id*/ 34 | private Long unReleaseEngineId; 35 | /**发布引擎错误信息*/ 36 | private String releaseError; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/enums/DelFlagEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.enums; 2 | 3 | public enum DelFlagEnum { 4 | 5 | DEL_YES(1, "删除"), 6 | DEL_NO(0, "未删除"); 7 | public final Integer status; 8 | public final String content; 9 | 10 | DelFlagEnum(Integer status, String content) { 11 | this.status = status; 12 | this.content = content; 13 | } 14 | 15 | public Integer getStatus() { 16 | return status; 17 | } 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/enums/FieldTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.enums; 2 | 3 | import java.math.BigDecimal; 4 | import java.util.Arrays; 5 | import java.util.Date; 6 | import java.util.HashSet; 7 | import java.util.Set; 8 | 9 | /** 10 | *

节点字段类型枚举类

11 | * 12 | *@author JPX 13 | *@since 2022/11/18 14:21 14 | */ 15 | public enum FieldTypeEnum { 16 | 17 | /**默认类型*/ 18 | DEFAULT, 19 | /**数值型*/ 20 | NUMBER, 21 | /**字符型*/ 22 | STRING, 23 | /**时间型*/ 24 | DATE; 25 | 26 | private static Set numberSet = new HashSet<>(Arrays.asList( 27 | BigDecimal.class, Integer.class, int.class, Long.class, long.class, 28 | Double.class, double.class, Float.class, float.class)); 29 | 30 | public static FieldTypeEnum getFieldTypeByClazz(Class clazz) { 31 | if(String.class.equals(clazz)) { 32 | return STRING; 33 | } else if(Date.class.equals(clazz)) { 34 | return DATE; 35 | } else if(numberSet.contains(clazz)) { 36 | return NUMBER; 37 | } else { 38 | return STRING; 39 | } 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/enums/NioOperationTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.enums; 2 | 3 | /** 4 | *

5 | * 6 | *@author JPX 7 | *@since 2022/11/18 14:21 8 | */ 9 | public enum NioOperationTypeEnum { 10 | 11 | //client to server 12 | INIT, 13 | SLAP, 14 | //server to client 15 | CLAZZ_CHECK, 16 | RELEASE_ENGINE, 17 | UNRELEASE_ENGINE 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/enums/NioTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.enums; 2 | 3 | /** 4 | *

节点字段类型枚举类

5 | * 6 | *@author JPX 7 | *@since 2022/11/18 14:21 8 | */ 9 | public enum NioTypeEnum { 10 | 11 | //request 12 | REQ, 13 | //response 14 | RSP 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/enums/NodeTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.enums; 2 | 3 | import java.util.HashMap; 4 | import java.util.HashSet; 5 | import java.util.Map; 6 | import java.util.Set; 7 | 8 | /** 9 | *

节点类型枚举类

10 | * 11 | *@author JPX 12 | *@since 2022/11/18 14:21 13 | */ 14 | public enum NodeTypeEnum { 15 | 16 | /**开始节点*/ 17 | START(1), 18 | /**结束节点*/ 19 | END(2), 20 | /**普通节点*/ 21 | NORMAL(3), 22 | /**IF节点*/ 23 | IF(4), 24 | /**SWITCH节点*/ 25 | SWITCH(5), 26 | /**并行节点*/ 27 | ALL(6), 28 | /**聚合节点*/ 29 | POLY(7); 30 | 31 | private static final Map MAP = new HashMap<>(NodeTypeEnum.values().length); 32 | 33 | static { 34 | for (NodeTypeEnum enums : NodeTypeEnum.values()) { 35 | MAP.put(enums.getType(), enums); 36 | } 37 | } 38 | 39 | private final Integer type; 40 | 41 | NodeTypeEnum(Integer type) { 42 | this.type = type; 43 | } 44 | 45 | public static NodeTypeEnum getEnum(Integer type) { 46 | if (type == null) { 47 | return null; 48 | } 49 | return MAP.get(type); 50 | } 51 | 52 | public Integer getType() { 53 | return type; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/enums/StatusEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.enums; 2 | 3 | public enum StatusEnum { 4 | 5 | INVALID(0, "无效"), 6 | VALID(1, "有效"); 7 | public final Integer status; 8 | public final String content; 9 | 10 | StatusEnum(Integer status, String content) { 11 | this.status = status; 12 | this.content = content; 13 | } 14 | 15 | public Integer getStatus() { 16 | return status; 17 | } 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/model/ChannelInfo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public final class ChannelInfo { 7 | private Long app; 8 | private String address; 9 | private long lastUpdateTime; 10 | 11 | public ChannelInfo(Long app, String address, long lastUpdateTime) { 12 | this.app = app; 13 | this.address = address; 14 | this.lastUpdateTime = lastUpdateTime; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/model/NodeInfo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.model; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | 8 | @Data 9 | public final class NodeInfo { 10 | private Byte type; 11 | private String clazz; 12 | private String name; 13 | private String desc; 14 | private List iceFields; 15 | private List hideFields; 16 | 17 | @Data 18 | public static class IceFieldInfo { 19 | private String field; 20 | private String name; 21 | private String desc; 22 | private String type; 23 | private Object value; 24 | private Boolean valueNull; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/utils/FiboNioUtils.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.utils; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.fibo.rule.common.dto.FiboNioDto; 5 | import io.netty.buffer.ByteBuf; 6 | import io.netty.buffer.Unpooled; 7 | import io.netty.channel.Channel; 8 | import io.netty.channel.ChannelHandlerContext; 9 | import lombok.extern.slf4j.Slf4j; 10 | 11 | /** 12 | *

nio操作类

13 | * 14 | *@author JPX 15 | *@since 2022/12/5 15:42 16 | */ 17 | @Slf4j 18 | public final class FiboNioUtils { 19 | 20 | public static FiboNioDto readNioModel(ByteBuf buf) { 21 | try { 22 | return JSON.parseObject(getNioModelJsonBytes(buf), FiboNioDto.class); 23 | } catch (Exception e) { 24 | log.warn("nio解析数据失败", e); 25 | } 26 | return null; 27 | } 28 | 29 | public static void writeNioModel(ChannelHandlerContext ctx, FiboNioDto fiboNio) { 30 | //向服务端/客户端传输FiboNioDto 31 | writeNioModel(ctx.channel(), fiboNio); 32 | } 33 | 34 | public static void writeNioModel(Channel channel, FiboNioDto fiboNio) { 35 | //向服务端/客户端传输FiboNioDto 36 | byte[] bytes = JSON.toJSONBytes(fiboNio); 37 | if (bytes != null) { 38 | ByteBuf buf = Unpooled.buffer(bytes.length); 39 | buf.writeInt(bytes.length); 40 | buf.writeBytes(bytes); 41 | channel.writeAndFlush(buf); 42 | } 43 | } 44 | 45 | public static byte[] getNioModelJsonBytes(ByteBuf buf) { 46 | byte[] bytes = new byte[buf.readableBytes()]; 47 | buf.readBytes(bytes); 48 | return bytes; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /fiborule/fiborule-common/src/main/java/com/fibo/rule/common/utils/LOGOPrinter.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.common.utils; 2 | 3 | import java.util.Optional; 4 | 5 | /** 6 | *

logo打印器

7 | * 8 | *@author JPX 9 | *@since 2022/12/8 13:46 10 | */ 11 | public class LOGOPrinter { 12 | /** 13 | * 当前版本号 14 | */ 15 | private static final String VERSION_NO = getVersion(); 16 | 17 | public static void print() { 18 | StringBuilder str = new StringBuilder("\n"); 19 | str.append(" ______ _ _ _____ _ \n"); 20 | str.append(" | ____| (_) | | | __ \\ | | \n"); 21 | str.append(" | |__ _ | |__ ___ | |__) | _ _ | | ___ \n"); 22 | str.append(" | __| | | | '_ \\ / _ \\ | _ / | | | | | | / _ \\\n"); 23 | str.append(" | | | | | |_) | | (_) | | | \\ \\ | |_| | | | | __/\n"); 24 | str.append(" |_| |_| |_.__/ \\___/ |_| \\_\\ \\__,_| |_| \\___|\n"); 25 | str.append("\n Version: " + VERSION_NO + "\n"); 26 | System.out.println(str); 27 | } 28 | 29 | private static String getVersion(){ 30 | return Optional.ofNullable(LOGOPrinter.class.getPackage()) 31 | .map(Package::getImplementationVersion) 32 | .orElse("DEV"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | fiborule 7 | com.fibo.rule 8 | 1.0-SNAPSHOT 9 | ../pom.xml 10 | 11 | 4.0.0 12 | 13 | fiborule-core 14 | 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | com.fibo.rule 23 | fiborule-common 24 | ${fiborule.version} 25 | 26 | 27 | com.alibaba 28 | transmittable-thread-local 29 | ${transmittable.version} 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/annotation/FiboBean.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | *

组件注解

10 | * 11 | * name默认为实际类名,同一场景下不可重复 12 | * 13 | *@author JPX 14 | *@since 2022/11/22 15:25 15 | */ 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target({ElementType.TYPE}) 18 | public @interface FiboBean { 19 | 20 | String name() default ""; 21 | 22 | String desc() default ""; 23 | } 24 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/annotation/FiboField.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.annotation; 2 | 3 | import com.fibo.rule.common.enums.FieldTypeEnum; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | /** 11 | *

需配置属性注解

12 | * 13 | * name默认为实际字段名,同一类下不可重复
14 | * type默认为default,按照字段实际类型进行处理
15 | * 默认支持:
16 | * String-FieldTypeEnum.STRING
17 | * java.math.BigDecimal、Integer、Long、int、long、double、float、Double、Float-FieldTypeEnum.NUMBER
18 | * java.util.Date-FieldTypeEnum.DATE
19 | * 20 | *@author JPX 21 | *@since 2022/11/22 15:26 22 | */ 23 | @Retention(RetentionPolicy.RUNTIME) 24 | @Target({ElementType.FIELD}) 25 | public @interface FiboField { 26 | 27 | String name() default ""; 28 | 29 | String desc() default ""; 30 | 31 | FieldTypeEnum type() default FieldTypeEnum.DEFAULT; 32 | } 33 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/client/FiboNioClientService.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.client; 2 | 3 | import cn.hutool.core.collection.CollUtil; 4 | import cn.hutool.core.util.StrUtil; 5 | import com.fibo.rule.common.dto.EngineDto; 6 | import com.fibo.rule.core.engine.EngineManager; 7 | import lombok.extern.slf4j.Slf4j; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

客户端操作类

13 | * 14 | *@author JPX 15 | *@since 2022/12/6 10:46 16 | */ 17 | @Slf4j 18 | public final class FiboNioClientService { 19 | 20 | /** 21 | * 发布引擎 22 | * @param engineDtoList 23 | * @return 24 | */ 25 | public static String releaseEngine(List engineDtoList) { 26 | if(CollUtil.isEmpty(engineDtoList)) { 27 | return "引擎数据为空"; 28 | } 29 | try { 30 | EngineManager.buildEngine(engineDtoList.get(0)); 31 | } catch (Exception e) { 32 | return StrUtil.format("引擎发布失败,错误信息:{}", e.getMessage()); 33 | } 34 | return null; 35 | } 36 | 37 | /** 38 | * 取消发布引擎 39 | * @param engineId 40 | */ 41 | public static void unReleaseEngine(Long engineId) { 42 | EngineManager.removeEngine(engineId); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/context/DefaultParamBean.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.context; 2 | 3 | import java.util.concurrent.ConcurrentHashMap; 4 | 5 | /** 6 | *

引擎执行过程中默认参数

7 | * 8 | *@author JPX 9 | *@since 2022/11/18 13:22 10 | */ 11 | public class DefaultParamBean { 12 | 13 | private final ConcurrentHashMap dataMap = new ConcurrentHashMap<>(); 14 | 15 | private void putDataMap(String key, T t) { 16 | // if (ObjectUtil.isNull(t)) { 17 | // throw new NullParamException("data can't accept null param"); 18 | // } 19 | dataMap.put(key, t); 20 | } 21 | 22 | public boolean hasData(String key){ 23 | return dataMap.containsKey(key); 24 | } 25 | 26 | public T getData(String key){ 27 | return (T) dataMap.get(key); 28 | } 29 | 30 | public void setData(String key, T t){ 31 | putDataMap(key, t); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/engine/condition/FiboCondition.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.engine.condition; 2 | 3 | import com.fibo.rule.core.engine.element.FiboRunnable; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | *

引擎执行组件抽象类

10 | * 11 | * @author JPX 12 | * @since 2022-11-18 10:55 13 | */ 14 | public abstract class FiboCondition implements FiboRunnable { 15 | 16 | private Long id; 17 | 18 | private String name; 19 | 20 | /**可执行节点*/ 21 | private List runnableList = new ArrayList<>(); 22 | 23 | public List getRunnableList() { 24 | return runnableList; 25 | } 26 | 27 | public void setRunnableList(List runnableList) { 28 | this.runnableList = runnableList; 29 | } 30 | 31 | public void addRunnable(FiboRunnable runnable) { 32 | this.runnableList.add(runnable); 33 | } 34 | 35 | public Long getRunnableId() { 36 | return id; 37 | } 38 | 39 | public String getRunnableName() { 40 | return name; 41 | } 42 | 43 | public void setId(Long id) { 44 | this.id = id; 45 | } 46 | 47 | public void setName(String name) { 48 | this.name = name; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/engine/condition/FiboIfCondition.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.engine.condition; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | import com.fibo.rule.core.context.Contextmanager; 5 | import com.fibo.rule.core.context.FiboContext; 6 | import com.fibo.rule.core.engine.element.FiboEngineNode; 7 | import com.fibo.rule.core.engine.element.FiboRunnable; 8 | import lombok.Data; 9 | 10 | /** 11 | *

IF组件执行

12 | * 13 | * @author JPX 14 | * @since 2022-11-18 11:00 15 | */ 16 | @Data 17 | public class FiboIfCondition extends FiboCondition { 18 | 19 | private FiboSerialCondition trueBranch; 20 | private FiboSerialCondition falseBranch; 21 | 22 | @Override 23 | public void runner(Integer contextIndex) { 24 | this.getIfNode().runner(contextIndex); 25 | FiboContext context = Contextmanager.getContext(contextIndex); 26 | boolean result = context.getIfResult(this.getIfNode().getNodeCode()); 27 | if(result) { 28 | if(ObjectUtil.isNotNull(trueBranch)) { 29 | trueBranch.runner(contextIndex); 30 | } 31 | } else { 32 | if(ObjectUtil.isNotNull(falseBranch)) { 33 | falseBranch.runner(contextIndex); 34 | } 35 | } 36 | } 37 | 38 | private FiboEngineNode getIfNode() { 39 | return (FiboEngineNode) this.getRunnableList().get(0); 40 | } 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/engine/condition/FiboSerialCondition.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.engine.condition; 2 | 3 | import com.fibo.rule.core.engine.element.FiboRunnable; 4 | import lombok.extern.slf4j.Slf4j; 5 | 6 | /** 7 | *

串行执行

8 | * 9 | * @author JPX 10 | * @since 2022-11-18 11:00 11 | */ 12 | @Slf4j 13 | public class FiboSerialCondition extends FiboCondition { 14 | 15 | @Override 16 | public void runner(Integer contextIndex) { 17 | for (FiboRunnable runnable : this.getRunnableList()) { 18 | runnable.runner(contextIndex); 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/engine/condition/FiboSwitchCondition.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.engine.condition; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | import com.fibo.rule.core.context.Contextmanager; 5 | import com.fibo.rule.core.context.FiboContext; 6 | import com.fibo.rule.core.engine.element.FiboEngineNode; 7 | import com.fibo.rule.core.engine.element.FiboRunnable; 8 | 9 | import java.util.HashMap; 10 | import java.util.Map; 11 | 12 | /** 13 | *

switch组件执行

14 | * 15 | * @author JPX 16 | * @since 2022-11-18 11:00 17 | */ 18 | public class FiboSwitchCondition extends FiboCondition { 19 | 20 | private Map branchMap = new HashMap<>(); 21 | 22 | @Override 23 | public void runner(Integer contextIndex) { 24 | this.getSwitchNode().runner(contextIndex); 25 | FiboContext context = Contextmanager.getContext(contextIndex); 26 | String result = context.getSwitchResult(this.getSwitchNode().getNodeCode()); 27 | FiboRunnable switchBranch = branchMap.get(result); 28 | if(ObjectUtil.isNotNull(switchBranch)) { 29 | switchBranch.runner(contextIndex); 30 | } 31 | } 32 | 33 | private FiboEngineNode getSwitchNode() { 34 | return (FiboEngineNode) this.getRunnableList().get(0); 35 | } 36 | 37 | public void addSwitchRunnalbe(String caseValue, FiboSerialCondition serialCondition) { 38 | branchMap.put(caseValue, serialCondition); 39 | } 40 | 41 | public Map getSwitchRunnalbe() { 42 | return branchMap; 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/engine/element/FiboEngine.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.engine.element; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | import cn.hutool.core.util.StrUtil; 5 | import com.fibo.rule.core.context.Contextmanager; 6 | import com.fibo.rule.core.context.FiboContext; 7 | import com.fibo.rule.core.engine.condition.FiboCondition; 8 | import com.fibo.rule.core.engine.condition.FiboSerialCondition; 9 | import com.fibo.rule.core.exception.EngineSystemException; 10 | import lombok.Data; 11 | 12 | /** 13 | *

引擎可执行类

14 | * 15 | * @author JPX 16 | * @since 2022-11-18 10:47 17 | */ 18 | @Data 19 | public class FiboEngine implements FiboRunnable { 20 | 21 | private Long engineId; 22 | 23 | private String engineName; 24 | 25 | private FiboSerialCondition serialCondition; 26 | 27 | @Override 28 | public void runner(Integer contextIndex) { 29 | if(ObjectUtil.isNull(serialCondition)) { 30 | throw new EngineSystemException(StrUtil.format("引擎[{}]没有可执行节点", engineId)); 31 | } 32 | FiboContext context = Contextmanager.getContext(contextIndex); 33 | try { 34 | context.setEngineId(engineId); 35 | serialCondition.runner(contextIndex); 36 | } catch (Exception e) { 37 | context.setException(e); 38 | throw e; 39 | } 40 | } 41 | 42 | @Override 43 | public Long getRunnableId() { 44 | return engineId; 45 | } 46 | 47 | @Override 48 | public String getRunnableName() { 49 | return engineName; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/engine/element/FiboRunnable.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.engine.element; 2 | 3 | /** 4 | * 可执行接口 5 | */ 6 | public interface FiboRunnable { 7 | 8 | void runner(Integer contextIndex); 9 | 10 | Long getRunnableId(); 11 | 12 | String getRunnableName(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/engine/id/IdGeneratorHolder.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.engine.id; 2 | 3 | import cn.hutool.core.util.IdUtil; 4 | 5 | /** 6 | *

id生成器

7 | * 8 | *@author JPX 9 | *@since 2022/11/29 10:40 10 | */ 11 | public class IdGeneratorHolder { 12 | 13 | private static IdGeneratorHolder INSTANCE; 14 | 15 | public static void init(){ 16 | INSTANCE = new IdGeneratorHolder(); 17 | } 18 | 19 | public static IdGeneratorHolder getInstance() { 20 | return INSTANCE; 21 | } 22 | 23 | public String generate() { 24 | return IdUtil.fastSimpleUUID(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/ContextNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

没有context实体异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 13:52 8 | */ 9 | public class ContextNotFoundException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public ContextNotFoundException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/EngineBuildException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

引擎构建异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 14:24 8 | */ 9 | public class EngineBuildException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public EngineBuildException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/EngineNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

没有引擎异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 13:52 8 | */ 9 | public class EngineNotFoundException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public EngineNotFoundException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/EngineSystemException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

引擎执行异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 14:24 8 | */ 9 | public class EngineSystemException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public EngineSystemException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/FiboApplicationNotInitException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | public class FiboApplicationNotInitException extends RuntimeException { 4 | 5 | private static final long serialVersionUID = 1L; 6 | 7 | /** 异常信息 */ 8 | private String message; 9 | 10 | public FiboApplicationNotInitException(String message) { 11 | this.message = message; 12 | } 13 | 14 | @Override 15 | public String getMessage() { 16 | return message; 17 | } 18 | 19 | public void setMessage(String message) { 20 | this.message = message; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/FiboBeanNameRepeatException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

节点名称重复异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 14:24 8 | */ 9 | public class FiboBeanNameRepeatException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public FiboBeanNameRepeatException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/FiboFieldNameRepeatException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

节点属性名称重复异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 14:24 8 | */ 9 | public class FiboFieldNameRepeatException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public FiboFieldNameRepeatException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/MonitorManagerNotInitException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

监控类未初始化异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 18:04 8 | */ 9 | public class MonitorManagerNotInitException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public MonitorManagerNotInitException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/NoAvailableContextException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

没有可用context异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 10:19 8 | */ 9 | public class NoAvailableContextException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 14 | * 异常信息 15 | */ 16 | private String message; 17 | 18 | public NoAvailableContextException(String message) { 19 | this.message = message; 20 | } 21 | 22 | @Override 23 | public String getMessage() { 24 | return message; 25 | } 26 | 27 | public void setMessage(String message) { 28 | this.message = message; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/NodeAllExecuteException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | /** 4 | *

并行节点执行异常

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 14:24 8 | */ 9 | public class NodeAllExecuteException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | /** 异常信息 */ 14 | private String message; 15 | 16 | public NodeAllExecuteException(String message) { 17 | this.message = message; 18 | } 19 | 20 | @Override 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/exception/NullParamException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.exception; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | *

参数为空异常

7 | * 8 | *@author JPX 9 | *@since 2022/11/29 10:34 10 | */ 11 | public class NullParamException extends RuntimeException implements Serializable { 12 | 13 | private static final long serialVersionUID = -864259139568071245L; 14 | 15 | private String message; 16 | 17 | public NullParamException(String message) { 18 | this.message = message; 19 | } 20 | 21 | @Override 22 | public String getMessage() { 23 | return message; 24 | } 25 | 26 | public void setMessage(String message) { 27 | this.message = message; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/monitor/MonitorTimerTask.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.monitor; 2 | 3 | import java.util.TimerTask; 4 | 5 | /** 6 | *

监控器线程

7 | * 8 | *@author JPX 9 | *@since 2022/11/29 17:42 10 | */ 11 | public class MonitorTimerTask extends TimerTask { 12 | 13 | private MonitorManager monitorManager; 14 | 15 | public MonitorTimerTask(MonitorManager monitorManager) { 16 | this.monitorManager = monitorManager; 17 | } 18 | 19 | @Override 20 | public void run() { 21 | monitorManager.printStatistics(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/monitor/NodeStatistics.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.monitor; 2 | 3 | /** 4 | *

统计类

5 | * 6 | *@author JPX 7 | *@since 2022/11/29 17:41 8 | */ 9 | public class NodeStatistics implements Comparable{ 10 | 11 | private String nodeClazzName; 12 | 13 | private long timeSpent; 14 | 15 | private long memorySpent; 16 | 17 | private long recordTime; 18 | 19 | public NodeStatistics(String nodeClazzName, long timeSpent) { 20 | this.nodeClazzName = nodeClazzName; 21 | this.timeSpent = timeSpent; 22 | this.recordTime = System.currentTimeMillis(); 23 | } 24 | public String getNodeClazzName() { 25 | return nodeClazzName; 26 | } 27 | 28 | public void setNodeClazzName(String nodeClazzName) { 29 | this.nodeClazzName = nodeClazzName; 30 | } 31 | 32 | public long getTimeSpent() { 33 | return timeSpent; 34 | } 35 | 36 | public void setTimeSpent(long timeSpent) { 37 | this.timeSpent = timeSpent; 38 | } 39 | 40 | public long getMemorySpent() { 41 | return memorySpent; 42 | } 43 | 44 | public void setMemorySpent(long memorySpent) { 45 | this.memorySpent = memorySpent; 46 | } 47 | 48 | public long getRecordTime() { 49 | return recordTime; 50 | } 51 | 52 | @Override 53 | public int compareTo(NodeStatistics o) { 54 | if(o != null) { 55 | return this.recordTime >= o.getRecordTime() ? -1 : 1; 56 | } 57 | return 1; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/node/FiboIfNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.node; 2 | 3 | /** 4 | *

IF节点抽象类

5 | * 6 | * @author JPX 7 | * @since 2022-11-18 10:42 8 | */ 9 | public abstract class FiboIfNode extends FiboNode { 10 | 11 | /** 12 | * 需要用到nodeCode参数,重写带参数runnerStep方法 13 | * @param nodeCode 14 | */ 15 | @Override 16 | void runnerStep(String nodeCode) { 17 | boolean result = this.runnerStepIf(); 18 | //将结果放到参数池中 19 | this.getContext().setIfResult(nodeCode, result); 20 | } 21 | 22 | @Override 23 | public void runnerStep() {} 24 | 25 | public abstract boolean runnerStepIf(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/node/FiboSwitchNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.node; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | *

switch节点抽象类

7 | * 8 | * @author JPX 9 | * @since 2022-11-18 10:42 10 | */ 11 | public abstract class FiboSwitchNode extends FiboNode { 12 | 13 | /** 14 | * 需要用到nodeCode参数,重写带参数runnerStep方法 15 | * @param nodeCode 16 | */ 17 | @Override 18 | void runnerStep(String nodeCode) { 19 | String result = this.runnerStepSwitch(); 20 | //将结果放到参数池中 21 | this.getContext().setSwitchResult(nodeCode, result); 22 | } 23 | 24 | @Override 25 | public void runnerStep() {} 26 | 27 | public abstract String runnerStepSwitch(); 28 | 29 | public abstract Map switchBranchs(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/property/FiboRuleConfigGetter.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.property; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | 5 | /** 6 | *

Fiborule配置获取

7 | * 8 | *@author JPX 9 | *@since 2022/11/28 17:17 10 | */ 11 | public class FiboRuleConfigGetter { 12 | 13 | private static FiboRuleConfig fiboRuleConfig; 14 | 15 | public static FiboRuleConfig get(){ 16 | if (ObjectUtil.isNull(fiboRuleConfig)){ 17 | fiboRuleConfig = new FiboRuleConfig(); 18 | } 19 | return fiboRuleConfig; 20 | } 21 | 22 | public static void clean(){ 23 | fiboRuleConfig = null; 24 | } 25 | 26 | public static void setFiboRuleConfig(FiboRuleConfig fiboRuleConfig){ 27 | FiboRuleConfigGetter.fiboRuleConfig = fiboRuleConfig; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/property/FiboSceneConfig.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.property; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

场景配置信息

7 | * 8 | * @author JPX 9 | * @since 2022-11-28 16:57 10 | */ 11 | @Data 12 | public class FiboSceneConfig { 13 | 14 | /** 15 | * 场景名称 16 | */ 17 | private String name; 18 | /** 19 | * 场景路径 20 | */ 21 | private String path; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/runner/FiboApplicationHolder.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.runner; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | import com.fibo.rule.core.exception.FiboApplicationNotInitException; 5 | import com.fibo.rule.core.property.FiboRuleConfig; 6 | 7 | public class FiboApplicationHolder { 8 | 9 | private static FiboApplication application; 10 | 11 | public static FiboApplication loadInstance(FiboRuleConfig config){ 12 | if (ObjectUtil.isNull(application)){ 13 | application = new FiboApplication(config); 14 | } 15 | return application; 16 | } 17 | 18 | public static FiboApplication loadInstance(){ 19 | if (ObjectUtil.isNull(application)){ 20 | throw new FiboApplicationNotInitException("执行器未初始化"); 21 | } 22 | return application; 23 | } 24 | 25 | public static void setHolder(FiboApplication application){ 26 | FiboApplicationHolder.application = application; 27 | } 28 | 29 | public static void clean(){ 30 | application = null; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /fiborule/fiborule-core/src/main/java/com/fibo/rule/core/util/FiboBeanUtils.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.core.util; 2 | 3 | /** 4 | *

fibo bean 生成工具类

5 | * 6 | *@author JPX 7 | *@since 2022/12/16 10:31 8 | */ 9 | public final class FiboBeanUtils { 10 | 11 | private static FiboBeanFactory factory; 12 | 13 | private FiboBeanUtils() { 14 | } 15 | 16 | public static void autowireBean(Object existingBean) { 17 | if (factory == null) { 18 | return; 19 | } 20 | factory.autowireBean(existingBean); 21 | } 22 | 23 | public static boolean containsBean(String name) { 24 | if (factory == null) { 25 | return false; 26 | } 27 | return factory.containsBean(name); 28 | } 29 | 30 | public static Object getBean(String name) { 31 | if (factory == null) { 32 | return null; 33 | } 34 | return factory.getBean(name); 35 | } 36 | 37 | public static void setFactory(FiboBeanFactory factory) { 38 | FiboBeanUtils.factory = factory; 39 | } 40 | 41 | public interface FiboBeanFactory { 42 | 43 | void autowireBean(Object existingBean); 44 | 45 | boolean containsBean(String name); 46 | 47 | Object getBean(String name); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/FiboruleServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.context.annotation.ComponentScan; 7 | import org.springframework.scheduling.annotation.EnableAsync; 8 | import org.springframework.transaction.annotation.EnableTransactionManagement; 9 | 10 | 11 | @SpringBootApplication 12 | @EnableTransactionManagement 13 | @MapperScan({"com.fibo.rule.server.dao"}) 14 | @ComponentScan(basePackages = "com.fibo.rule.server.**") 15 | @EnableAsync 16 | public class FiboruleServerApplication { 17 | public static void main(String[] args) { 18 | SpringApplication.run(FiboruleServerApplication.class, args); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/config/ControllerException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.config; 2 | 3 | import com.fibo.rule.server.enums.ErrorCodeEnum; 4 | import com.fibo.rule.server.model.ResponseEntityBuilder; 5 | import org.springframework.web.bind.MethodArgumentNotValidException; 6 | import org.springframework.web.bind.annotation.ControllerAdvice; 7 | import org.springframework.web.bind.annotation.ExceptionHandler; 8 | import org.springframework.web.bind.annotation.ResponseBody; 9 | 10 | @ControllerAdvice 11 | public class ControllerException { 12 | 13 | @ResponseBody 14 | @ExceptionHandler(MethodArgumentNotValidException.class) 15 | public Object handleValidException(MethodArgumentNotValidException e) { 16 | //将错误信息返回给前台 17 | return ResponseEntityBuilder.buildErrorResponse(ErrorCodeEnum.PARAMS_EXCEPTION.getCode(), e.getBindingResult().getFieldError().getDefaultMessage()); 18 | } 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/config/ServerProperties.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Data 8 | @Component 9 | @ConfigurationProperties(prefix = "fibo") 10 | public class ServerProperties { 11 | 12 | private String host = "0.0.0.0"; 13 | //nio port 14 | private int port = 18121; 15 | //if there is no read request for readerIdleTime, close the client 16 | private int readerIdleTime; 17 | //default 16M, size bigger than this may dirty data 18 | private int maxFrameLength = 16 * 1024 * 1024; 19 | //timeout for client response 20 | private int clientRspTimeOut = 3000; 21 | //thread pool 22 | private ServerThreadPoolProperties pool = new ServerThreadPoolProperties(); 23 | 24 | private ServerHaProperties ha = new ServerHaProperties(); 25 | 26 | @Data 27 | public static class ServerThreadPoolProperties { 28 | private int coreSize = 4; 29 | private int maxSize = 4; 30 | private int keepAliveSeconds = 60; 31 | private int queueCapacity = 60000; 32 | } 33 | 34 | @Data 35 | public static class ServerHaProperties { 36 | private String address; 37 | private int baseSleepTimeMs = 1000; 38 | private int maxRetries = 3; 39 | private int maxSleepMs = 10000; 40 | private int connectionTimeoutMs = 5000; 41 | private String host; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/config/SessionInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.config; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | import javax.servlet.http.HttpServletResponse; 10 | 11 | /** 12 | * 会话拦截器 13 | */ 14 | @Component 15 | public class SessionInterceptor extends HandlerInterceptorAdapter { 16 | 17 | private Logger logger = LoggerFactory.getLogger(this.getClass()); 18 | 19 | @Override 20 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 21 | return true; 22 | } 23 | 24 | 25 | } -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/config/WebMvcConfig.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | import javax.annotation.Resource; 8 | 9 | @Configuration 10 | public class WebMvcConfig implements WebMvcConfigurer { 11 | 12 | @Resource 13 | private SessionInterceptor sessionInterceptor; 14 | 15 | @Override 16 | public void addInterceptors(InterceptorRegistry registry) { 17 | // 添加拦截器 18 | registry.addInterceptor(sessionInterceptor) 19 | .excludePathPatterns("") // 排除拦截器要拦截的路径 20 | .excludePathPatterns("/operations") 21 | .excludePathPatterns("/swagger") 22 | .excludePathPatterns("/swagger-ui.html") 23 | .excludePathPatterns("/configuration/ui") 24 | .excludePathPatterns("/swagger-resources") 25 | .excludePathPatterns("/configuration/security") 26 | .excludePathPatterns("/v2/api-docs") 27 | .excludePathPatterns("/error") 28 | .excludePathPatterns("/webjars/**") 29 | .excludePathPatterns("/swagger-resources/configuration/ui") 30 | .excludePathPatterns("/swagger-resources/configuration/security"); 31 | // .addPathPatterns("/**"); // 添加拦截器需要要拦截的路径 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/mapper/AppMapper.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.mapper; 2 | 3 | 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.fibo.rule.server.dao.model.entity.App; 6 | import com.fibo.rule.server.dao.model.param.AppListParam; 7 | 8 | import java.util.List; 9 | 10 | public interface AppMapper extends BaseMapper { 11 | 12 | 13 | List selectList(AppListParam param); 14 | } 15 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/mapper/EngineMapper.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.mapper; 2 | 3 | 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.fibo.rule.server.dao.model.entity.Engine; 6 | import com.fibo.rule.server.dao.model.param.EngineListParam; 7 | 8 | import java.util.List; 9 | 10 | public interface EngineMapper extends BaseMapper { 11 | 12 | 13 | List selectListByPage(EngineListParam param); 14 | } 15 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/mapper/EngineNodeMapper.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.mapper; 2 | 3 | 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.fibo.rule.server.dao.model.entity.EngineNode; 6 | 7 | public interface EngineNodeMapper extends BaseMapper { 8 | 9 | 10 | } 11 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/entity/App.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import lombok.Data; 8 | 9 | import java.time.LocalDateTime; 10 | import java.util.List; 11 | 12 | @Data 13 | @TableName("t_app") 14 | public class App { 15 | 16 | @TableId(value = "id", type = IdType.AUTO) 17 | private Long id; 18 | 19 | private String appName; 20 | 21 | private String appCode; 22 | 23 | private String descriptions; 24 | 25 | private Integer status; 26 | 27 | private LocalDateTime createTime; 28 | 29 | private Long createUser; 30 | 31 | private LocalDateTime updateTime; 32 | 33 | private Long updateUser; 34 | 35 | private Integer delFlag; 36 | 37 | @TableField(exist = false) 38 | private List clients; 39 | } 40 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/entity/Engine.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | 8 | import java.time.LocalDateTime; 9 | import java.util.Date; 10 | 11 | @Data 12 | @TableName("t_engine") 13 | public class Engine { 14 | 15 | @TableId(value = "id", type = IdType.AUTO) 16 | private Long id; 17 | 18 | private Long appId; 19 | 20 | private String engineName; 21 | 22 | private String engineCode; 23 | 24 | private String scene; 25 | 26 | private String descriptions; 27 | 28 | private Integer bootStatus; 29 | 30 | private Integer status; 31 | 32 | private LocalDateTime createTime; 33 | 34 | private Long createUser; 35 | 36 | private LocalDateTime updateTime; 37 | 38 | private Long updateUser; 39 | 40 | private Integer delFlag; 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/entity/EngineNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | 8 | import java.time.LocalDateTime; 9 | 10 | @Data 11 | @TableName("t_engine_node") 12 | public class EngineNode { 13 | 14 | @TableId(value = "id", type = IdType.AUTO) 15 | private Long id; 16 | 17 | private Long engineId; 18 | 19 | private String nodeName; 20 | 21 | private String beanName; 22 | 23 | private String nodeCode; 24 | 25 | private Integer nodeType; 26 | 27 | private String preNodes; 28 | 29 | private String nextNodes; 30 | 31 | private String nodeConfig; 32 | 33 | private String nodeX; 34 | 35 | private String nodeY; 36 | 37 | private String nodeClazz; 38 | 39 | private String clazzName; 40 | 41 | private String nodeGroup; 42 | 43 | //后续节点对应的分支值-[{"key":"Y",value:"node1"}] 44 | private String nextNodeValue; 45 | 46 | private Integer status; 47 | 48 | private LocalDateTime createTime; 49 | 50 | private Long createUser; 51 | 52 | private LocalDateTime updateTime; 53 | 54 | private Long updateUser; 55 | 56 | private Integer delFlag; 57 | } 58 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/AppEditParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("编辑app列表参数对象") 9 | public class AppEditParam { 10 | 11 | @ApiModelProperty("id") 12 | private Long id; 13 | 14 | @ApiModelProperty("名称") 15 | private String appName; 16 | 17 | @ApiModelProperty("code") 18 | private String appCode; 19 | 20 | @ApiModelProperty("描述") 21 | private String descriptions; 22 | 23 | @ApiModelProperty("状态:1有效,0无效") 24 | private Integer status; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/AppListParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("查询app列表参数对象") 9 | public class AppListParam { 10 | 11 | @ApiModelProperty("名称") 12 | private String appName; 13 | 14 | @ApiModelProperty("code") 15 | private String appCode; 16 | 17 | @ApiModelProperty("描述") 18 | private String descriptions; 19 | 20 | @ApiModelProperty("状态:1有效,0无效") 21 | private Integer status; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/EngineDetailParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("查询engine详情参数对象") 9 | public class EngineDetailParam { 10 | 11 | @ApiModelProperty("appId") 12 | private Long appId; 13 | 14 | @ApiModelProperty("engineId") 15 | private Long engineId; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/EngineEditParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("编辑engine参数对象") 9 | public class EngineEditParam { 10 | 11 | @ApiModelProperty("id") 12 | private Long id; 13 | 14 | @ApiModelProperty("appId") 15 | private Long appId; 16 | 17 | @ApiModelProperty("名称") 18 | private String engineName; 19 | 20 | @ApiModelProperty("code") 21 | private String engineCode; 22 | 23 | @ApiModelProperty("场景名称") 24 | private String scene; 25 | 26 | @ApiModelProperty("描述") 27 | private String descriptions; 28 | 29 | @ApiModelProperty("发布状态:0创建,1发布,2取消发布") 30 | private Integer bootStatus; 31 | 32 | @ApiModelProperty("状态:1有效,0无效") 33 | private Integer status; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/EngineListParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("查询engine列表参数对象") 9 | public class EngineListParam { 10 | 11 | @ApiModelProperty("appId") 12 | private Long appId; 13 | 14 | @ApiModelProperty("名称") 15 | private String engineName; 16 | 17 | @ApiModelProperty("code") 18 | private String engineCode; 19 | 20 | @ApiModelProperty("描述") 21 | private String descriptions; 22 | 23 | @ApiModelProperty("发布状态:0创建,1发布,2取消发布") 24 | private Integer bootStatus; 25 | 26 | @ApiModelProperty("状态:1有效,0无效") 27 | private Integer status; 28 | 29 | @ApiModelProperty("pageNum") 30 | private Integer pageNum = 1; 31 | 32 | @ApiModelProperty("pageSize") 33 | private Integer pageSize = 10; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/EngineReleaseParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("engine发布参数对象") 9 | public class EngineReleaseParam { 10 | 11 | @ApiModelProperty("appId") 12 | private Long appId; 13 | 14 | @ApiModelProperty("engineId") 15 | private Long engineId; 16 | 17 | @ApiModelProperty("发布状态:0创建,1发布,2取消发布") 18 | private Integer bootStatus; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/NodeConnectLineDetailParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("连线engineNode详细参数对象") 9 | public class NodeConnectLineDetailParam { 10 | 11 | @ApiModelProperty("id") 12 | private Long id; 13 | 14 | @ApiModelProperty("前置节点,多个节点以逗号分隔") 15 | private String preNodes; 16 | 17 | @ApiModelProperty("后置节点,多个节点以逗号分隔") 18 | private String nextNodes; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/NodeConnectLineParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @ApiModel("连线engineNode参数对象") 11 | public class NodeConnectLineParam { 12 | 13 | @ApiModelProperty("出入节点") 14 | private List nodes; 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/NodeMoveLocationParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("移动engineNode参数对象") 9 | public class NodeMoveLocationParam { 10 | 11 | @ApiModelProperty("nodeId") 12 | private Long nodeId; 13 | 14 | @ApiModelProperty("nodeX") 15 | private String nodeX; 16 | 17 | @ApiModelProperty("nodeY") 18 | private String nodeY; 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/NodeMoveLocationParams.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @ApiModel("批量移动engineNode参数对象") 11 | public class NodeMoveLocationParams { 12 | 13 | private List nodeMoveLocationParams; 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/NodeReConnectLineParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("重新连线engineNode参数对象") 9 | public class NodeReConnectLineParam { 10 | 11 | @ApiModelProperty("出节点") 12 | private NodeConnectLineDetailParam outNode; 13 | 14 | @ApiModelProperty("旧入节点") 15 | private NodeConnectLineDetailParam oldInNode; 16 | 17 | @ApiModelProperty("新入节点") 18 | private NodeConnectLineDetailParam newInNode; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/param/NodesListParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.param; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("查询engineNodes列表参数对象") 9 | public class NodesListParam { 10 | 11 | @ApiModelProperty("appId") 12 | private Long appId; 13 | 14 | @ApiModelProperty("引擎id") 15 | private Long engineId; 16 | 17 | @ApiModelProperty("场景名称") 18 | private String scene; 19 | 20 | @ApiModelProperty("节点类型") 21 | private Integer nodeType; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/vo/EngineDetailVO.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.vo; 2 | 3 | import com.fibo.rule.server.dao.model.entity.Engine; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | 8 | import java.util.List; 9 | 10 | @Data 11 | @ApiModel("引擎详情参数对象") 12 | public class EngineDetailVO { 13 | 14 | @ApiModelProperty("appId") 15 | private Long appId; 16 | 17 | @ApiModelProperty("engineId") 18 | private Engine engine; 19 | 20 | @ApiModelProperty("节点详细信息") 21 | private List nodesDetail; 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/dao/model/vo/EngineNodeDetailVO.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.dao.model.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | @Data 8 | @ApiModel("节点详细信息") 9 | public class EngineNodeDetailVO { 10 | 11 | @ApiModelProperty("id") 12 | private Long id; 13 | 14 | @ApiModelProperty("engineId") 15 | private Long engineId; 16 | 17 | @ApiModelProperty("nodeName") 18 | private String nodeName; 19 | 20 | @ApiModelProperty("beanName") 21 | private String beanName; 22 | 23 | @ApiModelProperty("nodeCode") 24 | private String nodeCode; 25 | 26 | @ApiModelProperty("节点类型:开始节点、结束节点、普通节点、IF节点、switch节点、并行节点、聚合节点") 27 | private Integer nodeType; 28 | 29 | @ApiModelProperty("前置节点,多个节点以逗号分隔") 30 | private String preNodes; 31 | 32 | @ApiModelProperty("后置节点,多个节点以逗号分隔") 33 | private String nextNodes; 34 | 35 | @ApiModelProperty("节点配置信息(json类型,if/switch有lineValue,其他节点需设置阈值)") 36 | private String nodeConfig; 37 | 38 | @ApiModelProperty("nodeX") 39 | private String nodeX; 40 | 41 | @ApiModelProperty("nodeY") 42 | private String nodeY; 43 | 44 | @ApiModelProperty("nodeClazz") 45 | private String nodeClazz; 46 | 47 | @ApiModelProperty("clazzName") 48 | private String clazzName; 49 | 50 | @ApiModelProperty("nodeGroup") 51 | private String nodeGroup; 52 | 53 | //后续节点对应的分支值-[{"key":"Y",value:"node1"}] 54 | private String nextNodeValue; 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/enums/BootStatusEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.enums; 2 | 3 | public enum BootStatusEnum { 4 | 5 | CREATE(0, "创建"), 6 | BOOT(1, "发布"), 7 | NOT_BOOT(2, "未发布"); 8 | public final Integer status; 9 | public final String content; 10 | 11 | BootStatusEnum(Integer status, String content) { 12 | this.status = status; 13 | this.content = content; 14 | } 15 | 16 | public Integer getStatus() { 17 | return status; 18 | } 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/exception/ErrorCode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.exception; 2 | 3 | import java.text.MessageFormat; 4 | 5 | public enum ErrorCode implements IErrorCode { 6 | INTERNAL_ERROR(-1, "Internal Error"), 7 | INPUT_ERROR(-2, "Input Error: {0}"), 8 | ID_NOT_EXIST(-3, "{0}:{1} not exist"), 9 | CAN_NOT_NULL(-4, "{0} can not be null"), 10 | ALREADY_EXIST(-5, "{0} already exist"), 11 | REMOTE_CONF_NOT_FOUND(-6, "app:{0} {1}:{2} remote conf not found remote {3}"), 12 | CONF_NOT_FOUND(-6, "app:{0} {1}:{2} conf not found"), 13 | REMOTE_ERROR(-7, "Remote Error app:{0} {1}"), 14 | NO_AVAILABLE_CLIENT(-8, "no available client app:{0}"), 15 | CLIENT_NOT_AVAILABLE(-9, "client not available app:{0} address:{1}"), 16 | REMOTE_RUN_ERROR(-10, "client run error app:{0} address:{1}"), 17 | CLIENT_CLOSED(-11, "client closed"), 18 | TIMEOUT(-12, "time out"), 19 | CLIENT_CLASS_NOT_FOUND(-13, "class:{0} type:{1} not found in any available client with app:{2}"), 20 | CUSTOM(-14, "{0}"); 21 | private final int code; 22 | private final String msgTemplate; 23 | 24 | ErrorCode(int code, String msgTemplate) { 25 | this.code = code; 26 | this.msgTemplate = msgTemplate; 27 | } 28 | 29 | public int getCode() { 30 | return this.code; 31 | } 32 | 33 | public String getFormatMsg(Object... params) { 34 | return (new MessageFormat(this.msgTemplate)).format(params); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/exception/ErrorCodeException.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.exception; 2 | 3 | public class ErrorCodeException extends RuntimeException { 4 | private final IErrorCode errorCode; 5 | 6 | public ErrorCodeException(IErrorCode errorCode, Object... params) { 7 | super(errorCode.getFormatMsg(params)); 8 | this.errorCode = errorCode; 9 | } 10 | 11 | public int getErrorCode() { 12 | return this.errorCode.getCode(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/exception/IErrorCode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.exception; 2 | 3 | public interface IErrorCode { 4 | int getCode(); 5 | 6 | String getFormatMsg(Object... params); 7 | } 8 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/model/SimpleCommonPrimaryKeyParam.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.model; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | import javax.validation.constraints.NotNull; 9 | import java.io.Serializable; 10 | 11 | 12 | @Data 13 | @EqualsAndHashCode(callSuper = false) 14 | @ApiModel(value = "公共的主键参数对象") 15 | public class SimpleCommonPrimaryKeyParam implements Serializable { 16 | 17 | @ApiModelProperty(value = "主键id") 18 | @NotNull(message = "id必传") 19 | private Long id; 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/nio/NioServerInit.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.nio; 2 | 3 | import com.fibo.rule.server.config.ServerProperties; 4 | import com.fibo.rule.server.service.EngineService; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.springframework.beans.factory.DisposableBean; 7 | import org.springframework.boot.CommandLineRunner; 8 | import org.springframework.stereotype.Component; 9 | 10 | import javax.annotation.Resource; 11 | 12 | 13 | @Slf4j 14 | @Component 15 | public class NioServerInit implements CommandLineRunner, DisposableBean { 16 | 17 | @Resource 18 | private ServerProperties properties; 19 | 20 | @Resource 21 | private EngineService engineService; 22 | 23 | private NioServer nioServer; 24 | 25 | public static volatile boolean ready = false; 26 | 27 | @Override 28 | public void destroy() throws Exception { 29 | if (nioServer != null) { 30 | nioServer.destroy(); 31 | } 32 | } 33 | 34 | @Override 35 | public void run(String... args) throws Exception { 36 | // serverService.refresh(); 37 | nioServer = new NioServer(properties, engineService); 38 | try { 39 | nioServer.start(); 40 | } catch (Throwable t) { 41 | nioServer.destroy(); 42 | throw new RuntimeException("nio server start error", t); 43 | } 44 | ready = true; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/service/AppService.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.fibo.rule.server.dao.model.entity.App; 6 | import com.fibo.rule.server.dao.model.param.AppEditParam; 7 | import com.fibo.rule.server.dao.model.param.AppListParam; 8 | import com.fibo.rule.server.model.SimpleCommonPrimaryKeyParam; 9 | import com.github.pagehelper.PageInfo; 10 | 11 | import java.util.List; 12 | 13 | public interface AppService extends IService { 14 | 15 | List appList(AppListParam param); 16 | 17 | App appEdit(AppEditParam param); 18 | 19 | void appDelete(SimpleCommonPrimaryKeyParam param); 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/service/EngineNodeService.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.fibo.rule.common.dto.FiboBeanDto; 6 | import com.fibo.rule.server.dao.model.entity.Engine; 7 | import com.fibo.rule.server.dao.model.entity.EngineNode; 8 | import com.fibo.rule.server.dao.model.param.*; 9 | import com.fibo.rule.server.dao.model.vo.EngineNodeDetailVO; 10 | import com.fibo.rule.server.model.SimpleCommonPrimaryKeyParam; 11 | 12 | import java.util.List; 13 | 14 | public interface EngineNodeService extends IService { 15 | 16 | List listNodesByType(NodesListParam param); 17 | 18 | EngineNode nodeEdit(NodeEditParam param); 19 | 20 | EngineNodeDetailVO nodeDetail(SimpleCommonPrimaryKeyParam param); 21 | 22 | void nodeDelete(SimpleCommonPrimaryKeyParam param); 23 | 24 | void moveLocation(NodeMoveLocationParam param); 25 | 26 | void moveLocations(NodeMoveLocationParams param); 27 | 28 | void connectLine(NodeConnectLineParam param); 29 | 30 | void reConnectLine(NodeConnectLineParam param); 31 | 32 | void breakLine(NodeConnectLineParam param); 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/java/com/fibo.rule/server/service/EngineService.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.server.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.fibo.rule.common.dto.EngineDto; 6 | import com.fibo.rule.server.dao.model.entity.App; 7 | import com.fibo.rule.server.dao.model.entity.Engine; 8 | import com.fibo.rule.server.dao.model.param.*; 9 | import com.fibo.rule.server.dao.model.vo.EngineDetailVO; 10 | import com.fibo.rule.server.model.SimpleCommonPrimaryKeyParam; 11 | import com.github.pagehelper.PageInfo; 12 | 13 | import java.util.List; 14 | 15 | public interface EngineService extends IService { 16 | 17 | PageInfo engineList(EngineListParam param); 18 | 19 | List getSceneList(SimpleCommonPrimaryKeyParam param); 20 | 21 | Engine engineEdit(EngineEditParam param); 22 | 23 | EngineDetailVO getEngineDetail(EngineDetailParam param); 24 | 25 | void engineRelease(EngineReleaseParam param); 26 | 27 | List getEngineDtoList(Long appId, Long engineId); 28 | 29 | void engineDelete(SimpleCommonPrimaryKeyParam param); 30 | 31 | EngineDetailVO engineExport(EngineDetailParam param); 32 | 33 | void engineImport(EngineDetailVO param); 34 | } 35 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | druid: 4 | url: jdbc:mysql://192.168.1.38:13306/fibo_rule?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai 5 | username: root 6 | password: 4paradigm_test -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | druid: 4 | url: jdbc:mysql://192.168.1.29:53306/fibo_rule?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai 5 | username: root 6 | password: 4paradigm_test -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/resources/application-yu.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | druid: 4 | url: jdbc:mysql://127.0.0.1:3306/fibo_rule?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai 5 | username: root 6 | password: 123456 -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8182 3 | servlet: 4 | context-path: /rule 5 | 6 | spring: 7 | profiles: 8 | active: dev 9 | 10 | datasource: 11 | druid: 12 | driver-class-name: com.mysql.cj.jdbc.Driver 13 | initialSize: 20 14 | minIdle: 20 15 | maxActive: 100 16 | maxWait: 60000 17 | timeBetweenEvictionRunsMillis: 60000 18 | minEvictableIdleTimeMillis: 300000 19 | testWhileIdle: true 20 | testOnBorrow: true 21 | testOnReturn: false 22 | poolPreparedStatements: true 23 | maxOpenPreparedStatements: 20 24 | validationQuery: SELECT 1 25 | validation-query-timeout: 500 26 | filters: stat 27 | jackson: 28 | default-property-inclusion: non_null 29 | 30 | #springBoot2.6.9 与swagger2兼容 31 | mvc: 32 | pathmatch: 33 | matching-strategy: ant_path_matcher -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/resources/mybatis/AppMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | id, app_name, app_code, descriptions, status 7 | 8 | 9 | 33 | 34 | -------------------------------------------------------------------------------- /fiborule/fiborule-server/src/main/resources/mybatis/EngineMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | id, app_id, engine_name, engine_code, scene, descriptions, boot_status, status 7 | 8 | 9 | 38 | 39 | -------------------------------------------------------------------------------- /fiborule/fiborule-spring-boot-starter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | fiborule 7 | com.fibo.rule 8 | 1.0-SNAPSHOT 9 | ../pom.xml 10 | 11 | 4.0.0 12 | 13 | fiborule-spring-boot-starter 14 | 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | com.fibo.rule 23 | fiborule-spring 24 | ${fiborule.version} 25 | 26 | 27 | org.springframework.boot 28 | spring-boot-autoconfigure 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-configuration-processor 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /fiborule/fiborule-spring-boot-starter/src/main/java/com/fibo/rule/springboot/FiboRuleMonitorProperty.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.springboot; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | /** 7 | *

参数配置

8 | * 9 | *@author JPX 10 | *@since 2022/11/28 16:45 11 | */ 12 | @Data 13 | @ConfigurationProperties(prefix = "fiborule.monitor", ignoreUnknownFields = true) 14 | public class FiboRuleMonitorProperty { 15 | 16 | /**是否打印监控log,默认false*/ 17 | private Boolean enableLog; 18 | /**监控存储信息最大队列数量,默认200*/ 19 | private Integer queueLimit; 20 | /**监控信息延迟多少秒打印,默认5分钟*/ 21 | private Long delay; 22 | /**监控信息每隔多少秒打印,默认5分钟*/ 23 | private Long period; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /fiborule/fiborule-spring-boot-starter/src/main/java/com/fibo/rule/springboot/FiboRuleProperty.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.springboot; 2 | 3 | import com.fibo.rule.core.property.FiboSceneConfig; 4 | import lombok.Data; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

参数配置

11 | * 12 | *@author JPX 13 | *@since 2022/11/28 16:45 14 | */ 15 | @Data 16 | @ConfigurationProperties(prefix = "fiborule", ignoreUnknownFields = true) 17 | public class FiboRuleProperty { 18 | 19 | /**appId*/ 20 | private Long app; 21 | /**服务端地址host:port*/ 22 | private String server; 23 | /**是否打印fiborule logo,默认true*/ 24 | private Boolean printBanner; 25 | /**context数量,默认1024*/ 26 | private Integer contextSize; 27 | /**场景列表,默认场景default,扫描全包*/ 28 | private List sceneList; 29 | /**并行节点线程池最大线程数,默认16*/ 30 | private Integer allMaxWorkers; 31 | /**并行节点线程池最大队列数量,默认512*/ 32 | private Integer allQueueLimit; 33 | /**是否打印执行过程中日志,默认true*/ 34 | private Boolean printExecuteLog; 35 | /**默认16M,大小大于此值可能会损坏数据*/ 36 | private Integer maxFrameLength; 37 | /**客户端初始化重试次数,默认3次*/ 38 | private Integer initRetryTimes; 39 | /**客户端初始化重试延迟时间,默认2s*/ 40 | private Integer initRetrySleepMs; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /fiborule/fiborule-spring-boot-starter/src/main/java/com/fibo/rule/springboot/config/FiboRuleMainAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.springboot.config; 2 | 3 | import com.fibo.rule.core.monitor.MonitorManager; 4 | import com.fibo.rule.core.property.FiboRuleConfig; 5 | import com.fibo.rule.core.runner.FiboApplication; 6 | import com.fibo.rule.spring.FiboNioClientInit; 7 | import com.fibo.rule.spring.FiboSpringBeanFactory; 8 | import org.springframework.boot.autoconfigure.AutoConfigureAfter; 9 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; 10 | import org.springframework.context.annotation.Bean; 11 | import org.springframework.context.annotation.Configuration; 12 | import org.springframework.context.annotation.Import; 13 | 14 | @Configuration 15 | @AutoConfigureAfter({FiboRulePropertyAutoConfiguration.class}) 16 | @ConditionalOnBean(FiboRuleConfig.class) 17 | @Import(value = {FiboSpringBeanFactory.class, FiboNioClientInit.class}) 18 | public class FiboRuleMainAutoConfiguration { 19 | 20 | @Bean 21 | public FiboApplication fiboApplication(FiboRuleConfig fiboRuleConfig) { 22 | FiboApplication fiboApplication = new FiboApplication(fiboRuleConfig); 23 | return fiboApplication; 24 | } 25 | 26 | @Bean 27 | public MonitorManager monitorManager(FiboRuleConfig fiboRuleConfig) { 28 | MonitorManager monitorManager = MonitorManager.loadInstance(fiboRuleConfig); 29 | return monitorManager; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /fiborule/fiborule-spring-boot-starter/src/main/resources/META-INF/fiborule-default.properties: -------------------------------------------------------------------------------- 1 | #fiborule.app=-1 2 | #fiborule.server=localhost:18121 3 | fiborule.print-banner=true 4 | fiborule.context-size=1024 5 | #fiborule.scene[0].name=test 6 | #fiborule.scene[0].path=com.fibo.rule.test 7 | fiborule.allMaxWorkers=16 8 | fiborule.allQueueLimit=512 9 | fiborule.printExecuteLog=true 10 | fiborule.monitor.enableLog=false 11 | fiborule.monitor.queueLimit=200 12 | fiborule.monitor.delay=300000 13 | fiborule.monitor.period=300000 14 | #fiborule.maxFrameLength=16,777,216 15 | fiborule.initRetryTimes=3 16 | fiborule.initRetrySleepMs=2000 17 | -------------------------------------------------------------------------------- /fiborule/fiborule-spring-boot-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.fibo.rule.springboot.config.FiboRuleMainAutoConfiguration,\ 3 | com.fibo.rule.springboot.config.FiboRulePropertyAutoConfiguration -------------------------------------------------------------------------------- /fiborule/fiborule-spring/src/main/java/com/fibo/rule/spring/FiboSpringBeanFactory.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.spring; 2 | 3 | import com.fibo.rule.core.util.FiboBeanUtils; 4 | import org.springframework.beans.factory.config.AutowireCapableBeanFactory; 5 | import org.springframework.context.ApplicationContext; 6 | import org.springframework.context.ApplicationContextAware; 7 | 8 | /** 9 | *

spring bean 工厂

10 | * 11 | *@author JPX 12 | *@since 2022/12/16 10:31 13 | */ 14 | public class FiboSpringBeanFactory implements FiboBeanUtils.FiboBeanFactory, ApplicationContextAware { 15 | 16 | private AutowireCapableBeanFactory beanFactory; 17 | 18 | @Override 19 | public void autowireBean(Object existingBean) { 20 | this.beanFactory.autowireBean(existingBean); 21 | } 22 | 23 | @Override 24 | public boolean containsBean(String name) { 25 | return this.beanFactory.containsBean(name); 26 | } 27 | 28 | @Override 29 | public Object getBean(String name) { 30 | return beanFactory.getBean(name); 31 | } 32 | 33 | @Override 34 | public void setApplicationContext(ApplicationContext applicationContext) { 35 | this.beanFactory = applicationContext.getAutowireCapableBeanFactory(); 36 | FiboBeanUtils.setFactory(this); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/FiboRuleMallTestApplication.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class FiboRuleMallTestApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(FiboRuleMallTestApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/context/PriceContext.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.context; 2 | 3 | import cn.hutool.core.collection.CollUtil; 4 | import com.fibo.rule.test.mall.vo.AmountStepVo; 5 | import com.fibo.rule.test.mall.vo.DiscountVo; 6 | import com.fibo.rule.test.mall.vo.GoodsVo; 7 | import lombok.Data; 8 | 9 | import java.math.BigDecimal; 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | import java.util.concurrent.CopyOnWriteArrayList; 13 | 14 | /** 15 | *

价格计算结果

16 | * 17 | *@author JPX 18 | *@since 2022/12/14 11:16 19 | */ 20 | @Data 21 | public class PriceContext { 22 | 23 | /**订单号*/ 24 | private String orderNo; 25 | /**是否境外*/ 26 | private boolean isAboard; 27 | /**是否会员*/ 28 | private boolean isVip; 29 | /**商品信息*/ 30 | private List goodesList; 31 | /**原始金额*/ 32 | private BigDecimal originalPrice; 33 | /**最终金额*/ 34 | private BigDecimal finalPrice; 35 | /**折扣列表*/ 36 | private List discountList = new CopyOnWriteArrayList<>(); 37 | /**金额计算步骤*/ 38 | private List amountStepList= new ArrayList<>(); 39 | /**计算步骤日志*/ 40 | private String printLog; 41 | 42 | /** 43 | * 获取最后一个金额计算步骤 44 | * @return 45 | */ 46 | public AmountStepVo getLastestAmountStep(){ 47 | if(CollUtil.isEmpty(amountStepList)){ 48 | return null; 49 | }else{ 50 | return amountStepList.get(amountStepList.size()-1); 51 | } 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/enums/AmountTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.enums; 2 | 3 | /** 4 | *

金额类型

5 | * 6 | *@author JPX 7 | *@since 2022/12/14 13:26 8 | */ 9 | public enum AmountTypeEnum { 10 | 11 | ORIGINAL(0, "原始价格"), 12 | COUPON_DISCOUNT(1, "抵扣券"), 13 | FULL_DECREMENT(2, "满减券"), 14 | FULL_DISCOUNT(3, "打折券"), 15 | MEMBER_DISCOUNT(4, "会员折扣"), 16 | POSTAGE(5, "国内运费"), 17 | OVERSEAS_POSTAGE(6, "海外运费"), 18 | POSTAGE_FREE(7, "运费减免"); 19 | 20 | private Integer code; 21 | 22 | private String name; 23 | 24 | AmountTypeEnum(Integer code, String name) { 25 | this.code = code; 26 | this.name = name; 27 | } 28 | 29 | public Integer getCode() { 30 | return code; 31 | } 32 | 33 | public String getName(){ 34 | return name; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/node/AbroadFreightNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.annotation.FiboField; 5 | import com.fibo.rule.core.node.FiboNode; 6 | import com.fibo.rule.test.mall.context.PriceContext; 7 | import com.fibo.rule.test.mall.enums.AmountTypeEnum; 8 | import com.fibo.rule.test.mall.vo.AmountStepVo; 9 | import lombok.Data; 10 | 11 | import java.math.BigDecimal; 12 | import java.util.List; 13 | 14 | /** 15 | *

海外运费计算

16 | * 17 | * @author JPX 18 | * @since 2022-12-14 14:15 19 | */ 20 | @Data 21 | @FiboBean(name = "海外运费计算", desc = "海外运费计算") 22 | public class AbroadFreightNode extends FiboNode { 23 | 24 | @FiboField(name = "海外运费", desc = "海外运费") 25 | private BigDecimal freightValue; 26 | 27 | @Override 28 | public void runnerStep() { 29 | //获取context 30 | PriceContext priceContext = this.getContextBean(PriceContext.class); 31 | 32 | BigDecimal prePrice = priceContext.getLastestAmountStep().getCurrPrice(); 33 | 34 | List amountStepList = priceContext.getAmountStepList(); 35 | amountStepList.add(new AmountStepVo(AmountTypeEnum.OVERSEAS_POSTAGE, 36 | prePrice, 37 | freightValue, 38 | prePrice.add(freightValue), 39 | AmountTypeEnum.OVERSEAS_POSTAGE.getName())); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/node/AddressJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.node; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.node.FiboIfNode; 6 | import com.fibo.rule.test.mall.context.PriceContext; 7 | import lombok.Data; 8 | 9 | /** 10 | *

是否海外地址

11 | * 12 | * @author JPX 13 | * @since 2022-12-14 14:15 14 | */ 15 | @Data 16 | @FiboBean(name = "是否海外地址", desc = "是否海外地址") 17 | public class AddressJudgeNode extends FiboIfNode { 18 | @Override 19 | public boolean runnerStepIf() { 20 | //获取context 21 | PriceContext priceContext = this.getContextBean(PriceContext.class); 22 | if(ObjectUtil.isNotNull(priceContext.isAboard())) { 23 | return priceContext.isAboard(); 24 | } 25 | return false; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/node/CouponDiscountNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.node; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboNode; 7 | import com.fibo.rule.test.mall.context.PriceContext; 8 | import com.fibo.rule.test.mall.enums.AmountTypeEnum; 9 | import com.fibo.rule.test.mall.vo.DiscountVo; 10 | import lombok.Data; 11 | 12 | import java.math.BigDecimal; 13 | import java.util.List; 14 | 15 | /** 16 | *

抵扣券计算

17 | * 18 | * @author JPX 19 | * @since 2022-12-14 14:15 20 | */ 21 | @Data 22 | @FiboBean(name = "抵扣券计算", desc = "抵扣劵计算") 23 | public class CouponDiscountNode extends FiboNode { 24 | 25 | @FiboField(name = "抵扣劵金额", desc = "抵扣劵金额") 26 | private BigDecimal couponValue; 27 | 28 | @Override 29 | public void runnerStep() { 30 | //获取context 31 | PriceContext priceContext = this.getContextBean(PriceContext.class); 32 | List discountList = priceContext.getDiscountList(); 33 | //添加折扣记录 34 | discountList.add(new DiscountVo(AmountTypeEnum.COUPON_DISCOUNT, 35 | BigDecimal.ZERO.subtract(couponValue), 36 | StrUtil.format( "{}(减{})", AmountTypeEnum.COUPON_DISCOUNT.getName(), couponValue))); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/node/FinalAmountNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.test.mall.context.PriceContext; 6 | import com.fibo.rule.test.mall.vo.AmountStepVo; 7 | 8 | import java.math.BigDecimal; 9 | 10 | /** 11 | *

最终金额计算

12 | * 13 | *@author JPX 14 | *@since 2022/12/14 15:30 15 | */ 16 | @FiboBean(name = "最终金额计算", desc = "最终金额计算") 17 | public class FinalAmountNode extends FiboNode { 18 | @Override 19 | public void runnerStep() { 20 | //获取context 21 | PriceContext priceContext = this.getContextBean(PriceContext.class); 22 | BigDecimal finalPrice = new BigDecimal(0); 23 | for (AmountStepVo amountStepVo : priceContext.getAmountStepList()) { 24 | finalPrice = finalPrice.add(amountStepVo.getPriceChange()); 25 | } 26 | priceContext.setFinalPrice(finalPrice); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/node/FullDecrementNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.node; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboNode; 7 | import com.fibo.rule.test.mall.context.PriceContext; 8 | import com.fibo.rule.test.mall.enums.AmountTypeEnum; 9 | import com.fibo.rule.test.mall.vo.DiscountVo; 10 | import lombok.Data; 11 | 12 | import java.math.BigDecimal; 13 | import java.util.List; 14 | 15 | /** 16 | *

满减券计算

17 | * 18 | * @author JPX 19 | * @since 2022-12-14 14:15 20 | */ 21 | @Data 22 | @FiboBean(name = "满减券计算", desc = "满减券计算") 23 | public class FullDecrementNode extends FiboNode { 24 | 25 | @FiboField(name = "满足金额", desc = "满足金额") 26 | private BigDecimal fullValue; 27 | @FiboField(name = "减免金额", desc = "减免金额") 28 | private BigDecimal decrementValue; 29 | 30 | @Override 31 | public void runnerStep() { 32 | //获取context 33 | PriceContext priceContext = this.getContextBean(PriceContext.class); 34 | //不满足条件 35 | if(priceContext.getOriginalPrice().compareTo(fullValue) < 0) { 36 | return; 37 | } 38 | List discountList = priceContext.getDiscountList(); 39 | //添加满减记录 40 | discountList.add(new DiscountVo(AmountTypeEnum.FULL_DECREMENT, 41 | BigDecimal.ZERO.subtract(decrementValue), 42 | StrUtil.format( "{}(满{}减{})", AmountTypeEnum.FULL_DECREMENT.getName(), fullValue, decrementValue))); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/node/MemberJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.node; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.node.FiboIfNode; 6 | import com.fibo.rule.test.mall.context.PriceContext; 7 | import lombok.Data; 8 | 9 | /** 10 | *

是否会员

11 | * 12 | * @author JPX 13 | * @since 2022-12-14 14:15 14 | */ 15 | @Data 16 | @FiboBean(name = "是否会员", desc = "是否会员") 17 | public class MemberJudgeNode extends FiboIfNode { 18 | @Override 19 | public boolean runnerStepIf() { 20 | //获取context 21 | PriceContext priceContext = this.getContextBean(PriceContext.class); 22 | if(ObjectUtil.isNotNull(priceContext.isVip())) { 23 | return priceContext.isVip(); 24 | } 25 | return false; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/service/SendService.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.service; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.stereotype.Service; 5 | 6 | import java.math.BigDecimal; 7 | 8 | /** 9 | *

发送消息

10 | * 11 | *@author JPX 12 | *@since 2022/12/16 14:03 13 | */ 14 | @Service 15 | @Slf4j 16 | public class SendService { 17 | 18 | public boolean sendOriginalPrice(String orderNo, BigDecimal value) { 19 | //do send amount 20 | log.info("=======send original Price orderNo:{}, value:{}", orderNo, value); 21 | return true; 22 | } 23 | 24 | public boolean sendFinalPrice(String orderNo, BigDecimal value) { 25 | //do send point 26 | log.info("=======send final Price orderNo:{}, value:{}", orderNo, value); 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/vo/AmountStepVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.vo; 2 | 3 | import com.fibo.rule.test.mall.enums.AmountTypeEnum; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | 7 | import java.math.BigDecimal; 8 | 9 | /** 10 | *

折扣信息实体

11 | * 12 | * @author JPX 13 | * @since 2022-12-14 13:27 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | public class AmountStepVo { 18 | 19 | /**折扣类型*/ 20 | private AmountTypeEnum amountType; 21 | /**上一步的订单总价格*/ 22 | private BigDecimal prePrice; 23 | /**价格变动值*/ 24 | private BigDecimal priceChange; 25 | /**这步价格计算后的订单总价格*/ 26 | private BigDecimal currPrice; 27 | /**价格步骤描述*/ 28 | private String stepDesc; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/vo/DiscountVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.vo; 2 | 3 | import com.fibo.rule.test.mall.enums.AmountTypeEnum; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | 7 | import java.math.BigDecimal; 8 | 9 | /** 10 | *

折扣信息实体

11 | * 12 | * @author JPX 13 | * @since 2022-12-14 13:27 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | public class DiscountVo { 18 | 19 | /**折扣类型*/ 20 | private AmountTypeEnum amountType; 21 | /**价格变动值*/ 22 | private BigDecimal priceChange; 23 | /**折扣描述*/ 24 | private String desc; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/vo/GoodsVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | /** 8 | *

商品信息

9 | * 10 | * @author JPX 11 | * @since 2022-12-14 11:05 12 | */ 13 | @Data 14 | public class GoodsVo { 15 | 16 | /**商品id*/ 17 | private Long goodsId; 18 | /**商品编码*/ 19 | private String goodsCode; 20 | /**SKU ID*/ 21 | private Long skuId; 22 | /**SKU CODE*/ 23 | private String skuCode; 24 | /**SKU名称*/ 25 | private String skuName; 26 | /**价格*/ 27 | private BigDecimal goodsPrice; 28 | /**数量*/ 29 | private Integer count; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/java/com/fibo/rule/test/mall/vo/OrderVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.mall.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | *

订单信息

9 | * 10 | * @author JPX 11 | * @since 2022-12-14 11:04 12 | */ 13 | @Data 14 | public class OrderVo { 15 | 16 | private Long id; 17 | /**订单号*/ 18 | private String orderNo; 19 | /**是否境外*/ 20 | private boolean isAboard; 21 | /**是否会员*/ 22 | private boolean isVip; 23 | /**商品信息*/ 24 | private List goodsList; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=36 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=mall-price 4 | fiborule.scene-list[0].path=com.fibo.rule.test.mall -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/resources/application-test.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=37 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=mall-price 4 | fiborule.scene-list[0].path=com.fibo.rule.test.mall -------------------------------------------------------------------------------- /fiborule/fiborule-test-mall/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8083 2 | 3 | spring.profiles.active=dev -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/FiboRuleMarketTestApplication.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class FiboRuleMarketTestApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(FiboRuleMarketTestApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/context/MarketContext.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.context; 2 | 3 | import com.fibo.rule.test.market.vo.ResultVo; 4 | import com.fibo.rule.test.market.vo.TradeVo; 5 | import lombok.Data; 6 | 7 | /** 8 | *

营销活动结果

9 | * 10 | *@author JPX 11 | *@since 2022/12/14 11:16 12 | */ 13 | @Data 14 | public class MarketContext { 15 | 16 | /**交易信息*/ 17 | private TradeVo tradeVo; 18 | /**活动结果*/ 19 | private ResultVo result; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/node/ConsumeAmountJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.annotation.FiboField; 5 | import com.fibo.rule.core.node.FiboIfNode; 6 | import com.fibo.rule.test.market.context.MarketContext; 7 | import lombok.Data; 8 | 9 | import java.math.BigDecimal; 10 | 11 | /** 12 | *

累计消费金额判断节点

13 | * 14 | * @author JPX 15 | * @since 2023-01-05 15:58 16 | */ 17 | @Data 18 | @FiboBean(name = "累计消费金额判断节点", desc = "累计消费金额判断") 19 | public class ConsumeAmountJudgeNode extends FiboIfNode { 20 | 21 | @FiboField(name = "累计消费金额", desc = "累计消费金额") 22 | private BigDecimal consumeAmount; 23 | 24 | @Override 25 | public boolean runnerStepIf() { 26 | MarketContext marketContext = this.getContextBean(MarketContext.class); 27 | //可从redis内存数据库中获取累计消费金额,获取之后进行累计,现mock一个值 28 | BigDecimal curConsumeAmount = new BigDecimal(7000); 29 | //判断累计消费金额是否达标 30 | if(curConsumeAmount.compareTo(consumeAmount) >= 0) { 31 | return true; 32 | } 33 | //设置未命中原因 34 | marketContext.getResult().setHit(false); 35 | marketContext.getResult().setUnHitCause("累计消费金额不达标"); 36 | return false; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/node/ContextInitNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.test.market.context.MarketContext; 6 | import com.fibo.rule.test.market.vo.ResultVo; 7 | import lombok.Data; 8 | 9 | /** 10 | *

初始化节点

11 | * 12 | * @author JPX 13 | * @since 2023-01-05 15:58 14 | */ 15 | @Data 16 | @FiboBean(name = "初始化节点", desc = "初始化节点") 17 | public class ContextInitNode extends FiboNode { 18 | @Override 19 | public void runnerStep() { 20 | MarketContext marketContext = this.getContextBean(MarketContext.class); 21 | marketContext.setTradeVo(this.getRequestData()); 22 | marketContext.setResult(new ResultVo()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/node/DateJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.node; 2 | 3 | import cn.hutool.core.date.DateUtil; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboIfNode; 7 | import com.fibo.rule.test.market.context.MarketContext; 8 | import lombok.Data; 9 | 10 | import java.time.LocalDateTime; 11 | import java.util.Date; 12 | 13 | /** 14 | *

活动时间判断节点

15 | * 16 | * @author JPX 17 | * @since 2023-01-05 15:58 18 | */ 19 | @Data 20 | @FiboBean(name = "时间判断节点", desc = "时间判断") 21 | public class DateJudgeNode extends FiboIfNode { 22 | 23 | @FiboField(name = "开始时间", desc = "开始时间") 24 | private Date startDate; 25 | @FiboField(name = "结束时间", desc = "结束时间") 26 | private Date endDate; 27 | 28 | @Override 29 | public boolean runnerStepIf() { 30 | MarketContext marketContext = this.getContextBean(MarketContext.class); 31 | LocalDateTime localTradeDate = marketContext.getTradeVo().getLocalTradeDate(); 32 | LocalDateTime startDateTime = DateUtil.toLocalDateTime(startDate); 33 | LocalDateTime endDateTime = DateUtil.toLocalDateTime(endDate); 34 | //判断交易时间是否在时间范围内 35 | if(!startDateTime.isAfter(localTradeDate) && !endDateTime.isBefore(localTradeDate)) { 36 | return true; 37 | } 38 | //设置未命中原因 39 | marketContext.getResult().setHit(false); 40 | marketContext.getResult().setUnHitCause("交易时间不在活动时间范围内"); 41 | return false; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/node/EnrollJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboIfNode; 5 | import com.fibo.rule.test.market.context.MarketContext; 6 | import lombok.Data; 7 | 8 | /** 9 | *

是否报名判断

10 | * 11 | * @author JPX 12 | * @since 2023-01-05 15:58 13 | */ 14 | @Data 15 | @FiboBean(name = "是否报名节点", desc = "是否报名判断") 16 | public class EnrollJudgeNode extends FiboIfNode { 17 | 18 | @Override 19 | public boolean runnerStepIf() { 20 | MarketContext marketContext = this.getContextBean(MarketContext.class); 21 | //可调用接口判断是否报名,现mock为已报名 22 | boolean isEnroll = true; 23 | if(isEnroll) { 24 | return true; 25 | } 26 | //设置未命中原因 27 | marketContext.getResult().setHit(false); 28 | marketContext.getResult().setUnHitCause("未报名该活动"); 29 | return false; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/node/MerchantJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.node; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboIfNode; 7 | import com.fibo.rule.test.market.context.MarketContext; 8 | import lombok.Data; 9 | 10 | import java.util.HashSet; 11 | import java.util.List; 12 | 13 | /** 14 | *

指定商户判断节点

15 | * 16 | * @author JPX 17 | * @since 2023-01-05 15:58 18 | */ 19 | @Data 20 | @FiboBean(name = "指定商户判断节点", desc = "指定商户判断") 21 | public class MerchantJudgeNode extends FiboIfNode { 22 | 23 | @FiboField(name = "商户编码", desc = "商户编码") 24 | private String merchantCodes; 25 | 26 | @Override 27 | public boolean runnerStepIf() { 28 | MarketContext marketContext = this.getContextBean(MarketContext.class); 29 | List merchants = StrUtil.split(merchantCodes, StrUtil.COMMA); 30 | HashSet merchantSet = new HashSet<>(merchants); 31 | if(merchantSet.contains(marketContext.getTradeVo().getMerchantCode())) { 32 | return true; 33 | } 34 | //设置未命中原因 35 | marketContext.getResult().setHit(false); 36 | marketContext.getResult().setUnHitCause("指定商户未命中"); 37 | return false; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/vo/CashBackVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | /** 8 | *

返现结果

9 | * 10 | * @author JPX 11 | * @since 2023-01-05 10:56 12 | */ 13 | @Data 14 | public class CashBackVo { 15 | 16 | /**返现金额*/ 17 | private BigDecimal cashBackAmount; 18 | /**返现支付方式 1:红包,2:消费冲抵*/ 19 | private Integer cashbackPayType; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/vo/ResultVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.vo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

营销活动结果

7 | * 8 | * @author JPX 9 | * @since 2023-01-05 10:56 10 | */ 11 | @Data 12 | public class ResultVo { 13 | 14 | /**是否命中*/ 15 | private boolean isHit; 16 | /**返现结果*/ 17 | private CashBackVo cashBack; 18 | /**未命中原因*/ 19 | private String unHitCause; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/java/com/fibo/rule/test/market/vo/TradeVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.market.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | import java.time.LocalDateTime; 7 | import java.util.Date; 8 | 9 | /** 10 | *

交易信息

11 | * 12 | * @author JPX 13 | * @since 2023-01-05 11:02 14 | */ 15 | @Data 16 | public class TradeVo { 17 | 18 | /**交易流水号*/ 19 | private String bankTradeCode; 20 | /** 21 | * 持卡人交易类别代码 00:消费,01:取现,10:转出交易,20:退货,21:存款,28:转入交易,29:代付交易,30:余额查询,39:留作将来使用,40:转账交易 22 | */ 23 | private String tradeType; 24 | /**交易金额*/ 25 | private BigDecimal tradeAmount; 26 | /**交易时间*/ 27 | private LocalDateTime localTradeDate; 28 | /**交易时间*/ 29 | private String tradeDate; 30 | /**卡号*/ 31 | private String cardNumber; 32 | /**客户编号*/ 33 | private String customerNumber; 34 | /**商户编号*/ 35 | private String merchantCode; 36 | /**商户名称*/ 37 | private String merchantName; 38 | /**卡片产品名称*/ 39 | private String cardProductName; 40 | /**卡片产品编号*/ 41 | private String cardProductNumber; 42 | /**卡片受理方城市或商户所在城市*/ 43 | private String merchantCityCode; 44 | /**ATM或商户所在国家代码*/ 45 | private String merchantCountryCode; 46 | /**交易地域-省*/ 47 | private String tradePlaceProvince; 48 | /**交易地域-城市*/ 49 | private String tradePlaceCity; 50 | 51 | } 52 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=38 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=market 4 | fiborule.scene-list[0].path=com.fibo.rule.test.market -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/resources/application-test.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=39 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=market 4 | fiborule.scene-list[0].path=com.fibo.rule.test.market -------------------------------------------------------------------------------- /fiborule/fiborule-test-market/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8085 2 | 3 | spring.profiles.active=dev -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/java/com/fibo/rule/test/pay/FiboRulePayTestApplication.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.pay; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.scheduling.annotation.EnableAsync; 6 | 7 | @SpringBootApplication 8 | //@EnableAsync 9 | public class FiboRulePayTestApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(FiboRulePayTestApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/java/com/fibo/rule/test/pay/context/PayRequest.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.pay.context; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | import java.time.LocalDate; 7 | 8 | /** 9 | *

价格计算结果

10 | * 11 | * @author JPX 12 | * @since 2022/12/14 11:16 13 | */ 14 | @Data 15 | public class PayRequest { 16 | 17 | /** 18 | * 充值金额 19 | */ 20 | private BigDecimal payAmount; 21 | 22 | /** 23 | * 充值时间 24 | */ 25 | private LocalDate payTime; 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/java/com/fibo/rule/test/pay/node/MoneyAwardNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.pay.node; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import com.fibo.rule.common.enums.FieldTypeEnum; 5 | import com.fibo.rule.core.annotation.FiboBean; 6 | import com.fibo.rule.core.annotation.FiboField; 7 | import com.fibo.rule.core.node.FiboNode; 8 | import com.fibo.rule.test.pay.vo.ResultVo; 9 | import lombok.Data; 10 | 11 | import java.math.BigDecimal; 12 | import java.util.List; 13 | 14 | 15 | @Data 16 | @FiboBean(name = "金额奖励", desc = "金额奖励") 17 | public class MoneyAwardNode extends FiboNode { 18 | 19 | @FiboField(name = "奖励金额", desc = "奖励金额", type = FieldTypeEnum.NUMBER) 20 | private BigDecimal awardMoney; 21 | 22 | @Override 23 | public void runnerStep() { 24 | ResultVo resultVo = this.getContextBean(ResultVo.class); 25 | resultVo.setAwardMoney(awardMoney); 26 | resultVo.setStepDesc("获得金额奖励:" + awardMoney + ";"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/java/com/fibo/rule/test/pay/node/PayIfNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.pay.node; 2 | 3 | import cn.hutool.core.util.ObjectUtil; 4 | import com.fibo.rule.common.enums.FieldTypeEnum; 5 | import com.fibo.rule.core.annotation.FiboBean; 6 | import com.fibo.rule.core.annotation.FiboField; 7 | import com.fibo.rule.core.node.FiboIfNode; 8 | import com.fibo.rule.test.pay.context.PayRequest; 9 | import lombok.Data; 10 | 11 | import java.math.BigDecimal; 12 | import java.time.LocalDate; 13 | import java.util.Date; 14 | 15 | @Data 16 | @FiboBean(name = "是否满足条件", desc = "是否满足条件") 17 | public class PayIfNode extends FiboIfNode { 18 | 19 | @FiboField(name = "充值金额", desc = "充值金额", type = FieldTypeEnum.NUMBER) 20 | private BigDecimal payAmount; 21 | @FiboField(name = "活动开始时间", desc = "活动开始时间", type = FieldTypeEnum.DATE) 22 | private LocalDate beginTime; 23 | @FiboField(name = "活动结束时间", desc = "活动结束时间", type = FieldTypeEnum.DATE) 24 | private LocalDate endTime; 25 | 26 | @Override 27 | public boolean runnerStepIf() { 28 | //获取请求参数 29 | PayRequest payRequest = this.getRequestData(); 30 | if (ObjectUtil.isNotNull(payRequest) && null != payRequest.getPayAmount() && null != payRequest.getPayTime()) { 31 | if (payRequest.getPayAmount().compareTo(payAmount) >= 0 && 32 | payRequest.getPayTime().compareTo(beginTime) >= 0 && 33 | payRequest.getPayTime().compareTo(endTime) <= 0) { 34 | return true; 35 | } 36 | } 37 | return false; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/java/com/fibo/rule/test/pay/node/PointsAwardNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.pay.node; 2 | 3 | import com.fibo.rule.common.enums.FieldTypeEnum; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboNode; 7 | import com.fibo.rule.test.pay.vo.ResultVo; 8 | import lombok.Data; 9 | 10 | import java.math.BigDecimal; 11 | 12 | 13 | @Data 14 | @FiboBean(name = "积分奖励", desc = "积分奖励") 15 | public class PointsAwardNode extends FiboNode { 16 | 17 | @FiboField(name = "积分奖励", desc = "积分奖励", type = FieldTypeEnum.NUMBER) 18 | private BigDecimal awardPoints; 19 | 20 | @Override 21 | public void runnerStep() { 22 | //获取context 23 | ResultVo resultVo = this.getContextBean(ResultVo.class); 24 | resultVo.setAwardPoints(awardPoints); 25 | resultVo.setStepDesc("获得积分奖励:" + awardPoints + ";"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/java/com/fibo/rule/test/pay/node/RandomAwardNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.pay.node; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboNode; 7 | import com.fibo.rule.test.pay.vo.ResultVo; 8 | import lombok.Data; 9 | 10 | import java.math.BigDecimal; 11 | import java.util.List; 12 | 13 | 14 | @Data 15 | @FiboBean(name = "随机奖励", desc = "随机奖励") 16 | public class RandomAwardNode extends FiboNode { 17 | 18 | @FiboField(name = "随机奖励", desc = "随机奖励") 19 | private String randomAward; 20 | 21 | @Override 22 | public void runnerStep() { 23 | //获取context 24 | ResultVo priceContext = this.getContextBean(ResultVo.class); 25 | priceContext.setRandomAward(randomAward); 26 | priceContext.setStepDesc(priceContext.getStepDesc() + "获得随机奖励:" + randomAward + ";"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/java/com/fibo/rule/test/pay/vo/ResultVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.pay.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | import java.math.BigDecimal; 7 | 8 | /** 9 | *

折扣信息实体

10 | * 11 | * @author JPX 12 | * @since 2022-12-14 13:27 13 | */ 14 | @Data 15 | @AllArgsConstructor 16 | public class ResultVo { 17 | 18 | /**金额奖励*/ 19 | private BigDecimal awardMoney; 20 | /**积分奖励*/ 21 | private BigDecimal awardPoints; 22 | /**随机奖励*/ 23 | private String randomAward; 24 | /**奖励过程描述*/ 25 | private String stepDesc; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=3 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=test-pay 4 | fiborule.scene-list[0].path=com.fibo.rule.test.pay -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/resources/application-test.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=38 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=test-pay 4 | fiborule.scene-list[0].path=com.fibo.rule.test.pay -------------------------------------------------------------------------------- /fiborule/fiborule-test-pay/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8084 2 | 3 | spring.profiles.active=dev -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/JarTestApplication.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.scheduling.annotation.EnableAsync; 6 | 7 | @SpringBootApplication 8 | @EnableAsync 9 | public class JarTestApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(JarTestApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/alltest/context/AllTestContext.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.alltest.context; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

7 | * 8 | * @author JPX 9 | * @since 2022-11-30 10:58 10 | */ 11 | @Data 12 | public class AllTestContext { 13 | 14 | private String a; 15 | private String b; 16 | private String c; 17 | private String d; 18 | private String e; 19 | private String f; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/alltest/node/AllTestA.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.alltest.node; 2 | 3 | import com.fibo.rule.alltest.context.AllTestContext; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.node.FiboNode; 6 | import com.fibo.rule.request.TestRequest; 7 | 8 | /** 9 | *

10 | * 11 | * @author JPX 12 | * @since 2022-11-30 10:45 13 | */ 14 | @FiboBean(name = "AllTestA", desc = "AllTestA") 15 | public class AllTestA extends FiboNode { 16 | @Override 17 | public void runnerStep() { 18 | TestRequest req = this.getRequestData(); 19 | AllTestContext contextBean = this.getContextBean(AllTestContext.class); 20 | contextBean.setA(req.getA()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/alltest/node/AllTestB.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.alltest.node; 2 | 3 | import com.fibo.rule.alltest.context.AllTestContext; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.node.FiboNode; 6 | import com.fibo.rule.request.TestRequest; 7 | import lombok.Data; 8 | 9 | /** 10 | *

11 | * 12 | * @author JPX 13 | * @since 2022-11-30 10:45 14 | */ 15 | @Data 16 | @FiboBean(name = "AllTestB", desc = "AllTestB") 17 | public class AllTestB extends FiboNode { 18 | 19 | @Override 20 | public void runnerStep() { 21 | TestRequest req = this.getRequestData(); 22 | AllTestContext contextBean = this.getContextBean(AllTestContext.class); 23 | contextBean.setB(req.getB()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/alltest/node/AllTestC.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.alltest.node; 2 | 3 | import com.fibo.rule.alltest.context.AllTestContext; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.node.FiboNode; 6 | import com.fibo.rule.request.TestRequest; 7 | 8 | /** 9 | *

10 | * 11 | * @author JPX 12 | * @since 2022-11-30 10:45 13 | */ 14 | @FiboBean(name = "AllTestC", desc = "AllTestC") 15 | public class AllTestC extends FiboNode { 16 | @Override 17 | public void runnerStep() { 18 | TestRequest req = this.getRequestData(); 19 | AllTestContext contextBean = this.getContextBean(AllTestContext.class); 20 | contextBean.setC(req.getC()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/alltest/node/AllTestD.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.alltest.node; 2 | 3 | import com.fibo.rule.alltest.context.AllTestContext; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.request.TestRequest; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-11-30 10:45 12 | */ 13 | public class AllTestD extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | TestRequest req = this.getRequestData(); 17 | AllTestContext contextBean = this.getContextBean(AllTestContext.class); 18 | contextBean.setD(req.getD()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/alltest/node/AllTestE.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.alltest.node; 2 | 3 | import com.fibo.rule.alltest.context.AllTestContext; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.request.TestRequest; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-11-30 10:45 12 | */ 13 | public class AllTestE extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | TestRequest req = this.getRequestData(); 17 | AllTestContext contextBean = this.getContextBean(AllTestContext.class); 18 | contextBean.setE(req.getE()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/context/ComplexContext.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.context; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

7 | * 8 | * @author JPX 9 | * @since 2022-12-07 16:22 10 | */ 11 | @Data 12 | public class ComplexContext { 13 | 14 | private String a; 15 | private String c; 16 | private String d; 17 | private String e; 18 | private String f; 19 | private String h; 20 | private String i; 21 | private String j; 22 | private String k; 23 | private String l; 24 | private String m; 25 | private String n; 26 | private String o; 27 | private String p; 28 | private String r; 29 | private String s; 30 | private String t; 31 | private String u; 32 | private String v; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexA.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexA extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setA(req.getA()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexC.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexC extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setC(req.getC()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexD.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexD extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setD(req.getD()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexE.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexE extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setE(req.getE()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexF.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | import com.fibo.rule.core.node.FiboSwitchNode; 7 | 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | /** 12 | *

13 | * 14 | * @author JPX 15 | * @since 2022-12-07 16:21 16 | */ 17 | public class ComplexF extends FiboSwitchNode { 18 | 19 | @Override 20 | public String runnerStepSwitch() { 21 | ComplexRequest req = this.getRequestData(); 22 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 23 | contextBean.setF(req.getF()); 24 | return req.getF(); 25 | } 26 | 27 | @Override 28 | public Map switchBranchs() { 29 | Map qmap = new HashMap<>(); 30 | qmap.put("I", "I"); 31 | qmap.put("J", "J"); 32 | qmap.put("K", "K"); 33 | return null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexH.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboIfNode; 7 | import com.fibo.rule.core.node.FiboNode; 8 | import lombok.Data; 9 | 10 | /** 11 | *

12 | * 13 | * @author JPX 14 | * @since 2022-12-07 16:21 15 | */ 16 | @Data 17 | public class ComplexH extends FiboIfNode { 18 | 19 | @FiboField(name = "valueH", desc = "valueH") 20 | private String valueH; 21 | 22 | @Override 23 | public boolean runnerStepIf() { 24 | ComplexRequest req = this.getRequestData(); 25 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 26 | contextBean.setH(req.getH()); 27 | if(valueH.equals(req.getH())) { 28 | return true; 29 | } 30 | return false; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexI.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexI extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | try { 17 | Thread.sleep(10); 18 | } catch (InterruptedException e) { 19 | e.printStackTrace(); 20 | } 21 | ComplexRequest req = this.getRequestData(); 22 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 23 | contextBean.setI(req.getI()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexJ.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexJ extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setJ(req.getJ()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexK.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexK extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setK(req.getK()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexL.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexL extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setL(req.getL()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexM.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexM extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | try { 17 | Thread.sleep(10); 18 | } catch (InterruptedException e) { 19 | e.printStackTrace(); 20 | } 21 | ComplexRequest req = this.getRequestData(); 22 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 23 | contextBean.setM(req.getM()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexN.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexN extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setN(req.getN()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexO.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexO extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setO(req.getO()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexP.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexP extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setP(req.getP()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexR.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexR extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setR(req.getR()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexS.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexS extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setS(req.getS()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexT.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexT extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setT(req.getT()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexU.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexU extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setU(req.getU()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/node/ComplexV.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.node; 2 | 3 | import com.fibo.rule.complex.context.ComplexContext; 4 | import com.fibo.rule.complex.request.ComplexRequest; 5 | import com.fibo.rule.core.node.FiboNode; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-12-07 16:21 12 | */ 13 | public class ComplexV extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | ComplexRequest req = this.getRequestData(); 17 | ComplexContext contextBean = this.getContextBean(ComplexContext.class); 18 | contextBean.setV(req.getV()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/complex/request/ComplexRequest.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.complex.request; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

7 | * 8 | * @author JPX 9 | * @since 2022-12-07 16:22 10 | */ 11 | @Data 12 | public class ComplexRequest { 13 | 14 | private String a = "A"; 15 | private String c = "C"; 16 | private String d = "D"; 17 | private String e = "E"; 18 | private String f = "F"; 19 | private String h = "H"; 20 | private String i = "I"; 21 | private String j = "J"; 22 | private String k = "K"; 23 | private String l = "L"; 24 | private String m = "M"; 25 | private String n = "N"; 26 | private String o = "O"; 27 | private String p = "P"; 28 | private String r = "R"; 29 | private String s = "S"; 30 | private String t = "T"; 31 | private String u = "U"; 32 | private String v = "V"; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/iftest/context/IfTestContext.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.iftest.context; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

7 | * 8 | * @author JPX 9 | * @since 2022-11-30 10:58 10 | */ 11 | @Data 12 | public class IfTestContext { 13 | 14 | private String a; 15 | private String b; 16 | private String c; 17 | private String d; 18 | private String e; 19 | private String f; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/iftest/node/IfTestA.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.iftest.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.request.TestRequest; 6 | import com.fibo.rule.iftest.context.IfTestContext; 7 | 8 | /** 9 | *

10 | * 11 | * @author JPX 12 | * @since 2022-11-30 10:45 13 | */ 14 | @FiboBean(name = "IfTestA", desc = "IfTestA") 15 | public class IfTestA extends FiboNode { 16 | @Override 17 | public void runnerStep() { 18 | TestRequest req = this.getRequestData(); 19 | IfTestContext contextBean = this.getContextBean(IfTestContext.class); 20 | contextBean.setA(req.getA()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/iftest/node/IfTestB.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.iftest.node; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboIfNode; 7 | import com.fibo.rule.iftest.context.IfTestContext; 8 | import com.fibo.rule.request.TestRequest; 9 | import lombok.Data; 10 | 11 | import java.math.BigDecimal; 12 | import java.util.Date; 13 | 14 | /** 15 | *

16 | * 17 | * @author JPX 18 | * @since 2022-11-30 10:45 19 | */ 20 | @Data 21 | @FiboBean(name = "IfTestB", desc = "IfTestB") 22 | public class IfTestB extends FiboIfNode { 23 | 24 | @FiboField(name = "valueB", desc = "valueB") 25 | private String valueB; 26 | @FiboField(name = "bigDecimal", desc = "bigDecimal") 27 | private BigDecimal bigDecimal; 28 | @FiboField(name = "integer", desc = "integer") 29 | private Integer integer; 30 | @FiboField(name = "i", desc = "i") 31 | private int i; 32 | @FiboField(name = "date", desc = "date") 33 | private Date date; 34 | @FiboField(name = "jsonObject", desc = "jsonObject") 35 | private JSONObject jsonObject; 36 | 37 | @Override 38 | public boolean runnerStepIf() { 39 | TestRequest req = this.getRequestData(); 40 | IfTestContext contextBean = this.getContextBean(IfTestContext.class); 41 | contextBean.setB(req.getB()); 42 | if(valueB.equals(req.getB())) { 43 | return true; 44 | } 45 | return false; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/iftest/node/IfTestC.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.iftest.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.request.TestRequest; 6 | import com.fibo.rule.iftest.context.IfTestContext; 7 | 8 | /** 9 | *

10 | * 11 | * @author JPX 12 | * @since 2022-11-30 10:45 13 | */ 14 | @FiboBean(name = "IfTestC", desc = "IfTestC") 15 | public class IfTestC extends FiboNode { 16 | @Override 17 | public void runnerStep() { 18 | TestRequest req = this.getRequestData(); 19 | IfTestContext contextBean = this.getContextBean(IfTestContext.class); 20 | contextBean.setC(req.getC()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/iftest/node/IfTestD.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.iftest.node; 2 | 3 | import com.fibo.rule.core.node.FiboNode; 4 | import com.fibo.rule.request.TestRequest; 5 | import com.fibo.rule.iftest.context.IfTestContext; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-11-30 10:45 12 | */ 13 | public class IfTestD extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | TestRequest req = this.getRequestData(); 17 | IfTestContext contextBean = this.getContextBean(IfTestContext.class); 18 | contextBean.setD(req.getD()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/iftest/node/IfTestE.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.iftest.node; 2 | 3 | import com.fibo.rule.core.node.FiboNode; 4 | import com.fibo.rule.request.TestRequest; 5 | import com.fibo.rule.iftest.context.IfTestContext; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-11-30 10:45 12 | */ 13 | public class IfTestE extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | TestRequest req = this.getRequestData(); 17 | IfTestContext contextBean = this.getContextBean(IfTestContext.class); 18 | contextBean.setE(req.getE()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/request/TestRequest.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.request; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

7 | * 8 | * @author JPX 9 | * @since 2022-11-30 10:49 10 | */ 11 | @Data 12 | public class TestRequest { 13 | 14 | private String a; 15 | private String b; 16 | private String c; 17 | private String d; 18 | private String e; 19 | private String f; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/context/SwitchTestContext.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.context; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | *

7 | * 8 | * @author JPX 9 | * @since 2022-11-30 10:58 10 | */ 11 | @Data 12 | public class SwitchTestContext { 13 | 14 | private String a; 15 | private String b; 16 | private String c; 17 | private String d; 18 | private String e; 19 | private String f; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/node/SwitchTestA.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.request.TestRequest; 6 | import com.fibo.rule.switchtest.context.SwitchTestContext; 7 | 8 | /** 9 | *

10 | * 11 | * @author JPX 12 | * @since 2022-11-30 10:45 13 | */ 14 | @FiboBean(name = "SwitchTestA", desc = "SwitchTestA") 15 | public class SwitchTestA extends FiboNode { 16 | @Override 17 | public void runnerStep() { 18 | TestRequest req = this.getRequestData(); 19 | SwitchTestContext contextBean = this.getContextBean(SwitchTestContext.class); 20 | contextBean.setA(req.getA()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/node/SwitchTestB.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.node; 2 | 3 | import com.fibo.rule.common.constant.EngineConstant; 4 | import com.fibo.rule.core.annotation.FiboBean; 5 | import com.fibo.rule.core.annotation.FiboField; 6 | import com.fibo.rule.core.node.FiboIfNode; 7 | import com.fibo.rule.core.node.FiboSwitchNode; 8 | import com.fibo.rule.iftest.context.IfTestContext; 9 | import com.fibo.rule.request.TestRequest; 10 | import com.fibo.rule.switchtest.context.SwitchTestContext; 11 | import lombok.Data; 12 | 13 | import java.util.Arrays; 14 | import java.util.HashMap; 15 | import java.util.List; 16 | import java.util.Map; 17 | 18 | /** 19 | *

20 | * 21 | * @author JPX 22 | * @since 2022-11-30 10:45 23 | */ 24 | @FiboBean(name = "SwitchTestB", desc = "SwitchTestB") 25 | public class SwitchTestB extends FiboSwitchNode { 26 | 27 | @Override 28 | public String runnerStepSwitch() { 29 | TestRequest req = this.getRequestData(); 30 | SwitchTestContext contextBean = this.getContextBean(SwitchTestContext.class); 31 | contextBean.setB(req.getB()); 32 | return req.getB(); 33 | } 34 | 35 | @Override 36 | public Map switchBranchs() { 37 | Map branchMap = new HashMap<>(); 38 | branchMap.put("C", "C"); 39 | branchMap.put("D", "D"); 40 | branchMap.put("E", "E"); 41 | return branchMap; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/node/SwitchTestC.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.request.TestRequest; 6 | import com.fibo.rule.switchtest.context.SwitchTestContext; 7 | 8 | /** 9 | *

10 | * 11 | * @author JPX 12 | * @since 2022-11-30 10:45 13 | */ 14 | @FiboBean(name = "SwitchTestC", desc = "SwitchTestC") 15 | public class SwitchTestC extends FiboNode { 16 | @Override 17 | public void runnerStep() { 18 | TestRequest req = this.getRequestData(); 19 | SwitchTestContext contextBean = this.getContextBean(SwitchTestContext.class); 20 | contextBean.setC(req.getC()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/node/SwitchTestD.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.node; 2 | 3 | import com.fibo.rule.core.node.FiboNode; 4 | import com.fibo.rule.request.TestRequest; 5 | import com.fibo.rule.switchtest.context.SwitchTestContext; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-11-30 10:45 12 | */ 13 | public class SwitchTestD extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | TestRequest req = this.getRequestData(); 17 | SwitchTestContext contextBean = this.getContextBean(SwitchTestContext.class); 18 | contextBean.setD(req.getD()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/node/SwitchTestE.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.node; 2 | 3 | import com.fibo.rule.core.node.FiboNode; 4 | import com.fibo.rule.request.TestRequest; 5 | import com.fibo.rule.switchtest.context.SwitchTestContext; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-11-30 10:45 12 | */ 13 | public class SwitchTestE extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | TestRequest req = this.getRequestData(); 17 | SwitchTestContext contextBean = this.getContextBean(SwitchTestContext.class); 18 | contextBean.setE(req.getE()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/node/SwitchTestF.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.node; 2 | 3 | import com.fibo.rule.core.node.FiboNode; 4 | import com.fibo.rule.request.TestRequest; 5 | import com.fibo.rule.switchtest.context.SwitchTestContext; 6 | 7 | /** 8 | *

9 | * 10 | * @author JPX 11 | * @since 2022-11-30 10:45 12 | */ 13 | public class SwitchTestF extends FiboNode { 14 | @Override 15 | public void runnerStep() { 16 | TestRequest req = this.getRequestData(); 17 | SwitchTestContext contextBean = this.getContextBean(SwitchTestContext.class); 18 | contextBean.setF(req.getF()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/switchtest/node/SwitchTestG.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.switchtest.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboSwitchNode; 5 | import com.fibo.rule.request.TestRequest; 6 | import com.fibo.rule.switchtest.context.SwitchTestContext; 7 | 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | /** 12 | *

13 | * 14 | * @author JPX 15 | * @since 2022-11-30 10:45 16 | */ 17 | @FiboBean(name = "SwitchTestG", desc = "SwitchTestG") 18 | public class SwitchTestG extends FiboSwitchNode { 19 | 20 | @Override 21 | public String runnerStepSwitch() { 22 | TestRequest req = this.getRequestData(); 23 | SwitchTestContext contextBean = this.getContextBean(SwitchTestContext.class); 24 | contextBean.setB(req.getB()); 25 | return req.getB(); 26 | } 27 | 28 | @Override 29 | public Map switchBranchs() { 30 | Map branchMap = new HashMap<>(); 31 | branchMap.put("H", "H_branch"); 32 | branchMap.put("I", "D_branch"); 33 | branchMap.put("J", "E_branch"); 34 | return branchMap; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/test/context/RewardContext.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.context; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | import java.util.Date; 7 | 8 | /** 9 | *

奖励结果context

10 | * 11 | * @author JPX 12 | * @since 2022-11-22 10:56 13 | */ 14 | @Data 15 | public class RewardContext { 16 | 17 | /**充值金额*/ 18 | private BigDecimal rechargeNum; 19 | /**充值时间*/ 20 | private Date rechargeDate; 21 | /**奖励金额*/ 22 | private BigDecimal rewardMoney; 23 | /**奖励积分*/ 24 | private Integer integral; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/test/node/ContextInitNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.node.FiboNode; 5 | import com.fibo.rule.test.context.RewardContext; 6 | import com.fibo.rule.test.request.RechargeRequestVo; 7 | 8 | /** 9 | *

参数初始化节点

10 | * 11 | * @author JPX 12 | * @since 2022-11-18 10:42 13 | */ 14 | @FiboBean(name = "contextInitNode", desc = "参数初始化节点") 15 | public class ContextInitNode extends FiboNode { 16 | 17 | @Override 18 | public void runnerStep() { 19 | RechargeRequestVo req = this.getRequestData(); 20 | RewardContext contextBean = this.getContextBean(RewardContext.class); 21 | contextBean.setRechargeDate(req.getRechargeDate()); 22 | contextBean.setRechargeNum(req.getRechargeNum()); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/test/node/RechargeDateJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.node; 2 | 3 | import com.fibo.rule.core.annotation.FiboBean; 4 | import com.fibo.rule.core.annotation.FiboField; 5 | import com.fibo.rule.core.node.FiboIfNode; 6 | import com.fibo.rule.test.context.RewardContext; 7 | import lombok.Data; 8 | 9 | import java.math.BigDecimal; 10 | import java.util.Date; 11 | 12 | /** 13 | *

充值时间阈值判断

14 | * 15 | * @author JPX 16 | * @since 2022-11-18 10:42 17 | */ 18 | @Data 19 | @FiboBean(name = "rechargeDateJudgeNode", desc = "充值时间判断节点") 20 | public class RechargeDateJudgeNode extends FiboIfNode { 21 | 22 | /**充值时间阈值*/ 23 | @FiboField(name = "beforeDate", desc = "大于等于时间") 24 | private Date beforeDate; 25 | /**充值时间阈值*/ 26 | @FiboField(name = "afterDate", desc = "小于等于时间") 27 | private Date afterDate; 28 | 29 | @Override 30 | public boolean runnerStepIf() { 31 | RewardContext contextBean = this.getContextBean(RewardContext.class); 32 | if(!contextBean.getRechargeDate().before(beforeDate) 33 | && !contextBean.getRechargeDate().after(afterDate)) { 34 | return true; 35 | } else { 36 | return false; 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/test/node/RechargeJudgeNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.node; 2 | 3 | import com.fibo.rule.core.node.FiboIfNode; 4 | import com.fibo.rule.test.context.RewardContext; 5 | import lombok.Data; 6 | 7 | import java.math.BigDecimal; 8 | 9 | /** 10 | *

充值阈值判断

11 | * 12 | * @author JPX 13 | * @since 2022-11-18 10:42 14 | */ 15 | @Data 16 | public class RechargeJudgeNode extends FiboIfNode { 17 | 18 | /**充值金额判断阈值*/ 19 | private BigDecimal threshold; 20 | 21 | @Override 22 | public boolean runnerStepIf() { 23 | RewardContext contextBean = this.getContextBean(RewardContext.class); 24 | if(contextBean.getRechargeNum().compareTo(threshold) >= 0) { 25 | return true; 26 | } else { 27 | return false; 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/test/node/RewardIntegralNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.node; 2 | 3 | import com.fibo.rule.core.node.FiboNode; 4 | import com.fibo.rule.test.context.RewardContext; 5 | import lombok.Data; 6 | 7 | /** 8 | *

奖励积分节点

9 | * 10 | * @author JPX 11 | * @since 2022-11-18 10:42 12 | */ 13 | @Data 14 | public class RewardIntegralNode extends FiboNode { 15 | 16 | private Integer threshold; 17 | 18 | @Override 19 | public void runnerStep() { 20 | RewardContext contextBean = this.getContextBean(RewardContext.class); 21 | contextBean.setIntegral(threshold); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/test/node/RewardMoneyNode.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.node; 2 | 3 | import com.fibo.rule.core.node.FiboNode; 4 | import com.fibo.rule.test.context.RewardContext; 5 | import lombok.Data; 6 | 7 | import java.math.BigDecimal; 8 | 9 | /** 10 | *

奖励余额节点

11 | * 12 | * @author JPX 13 | * @since 2022-11-18 10:42 14 | */ 15 | @Data 16 | public class RewardMoneyNode extends FiboNode { 17 | 18 | private BigDecimal threshold; 19 | 20 | @Override 21 | public void runnerStep() { 22 | RewardContext contextBean = this.getContextBean(RewardContext.class); 23 | contextBean.setRewardMoney(threshold); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/java/com/fibo/rule/test/request/RechargeRequestVo.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.test.request; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | import java.util.Date; 7 | 8 | /** 9 | *

10 | * 11 | * @author JPX 12 | * @since 2022-11-22 11:35 13 | */ 14 | @Data 15 | public class RechargeRequestVo { 16 | 17 | /**充值金额*/ 18 | private BigDecimal rechargeNum; 19 | /**充值时间*/ 20 | private Date rechargeDate; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=1 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=iftest 4 | fiborule.scene-list[0].path=com.fibo.rule.iftest 5 | fiborule.scene-list[1].name=switchtest 6 | fiborule.scene-list[1].path=com.fibo.rule.switchtest 7 | fiborule.scene-list[2].name=alltest 8 | fiborule.scene-list[2].path=com.fibo.rule.alltest 9 | fiborule.scene-list[3].name=complex 10 | fiborule.scene-list[3].path=com.fibo.rule.complex -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/resources/application-test.properties: -------------------------------------------------------------------------------- 1 | fiborule.app=40 2 | fiborule.server=localhost:18121 3 | fiborule.scene-list[0].name=iftest 4 | fiborule.scene-list[0].path=com.fibo.rule.iftest 5 | fiborule.scene-list[1].name=switchtest 6 | fiborule.scene-list[1].path=com.fibo.rule.switchtest 7 | fiborule.scene-list[2].name=alltest 8 | fiborule.scene-list[2].path=com.fibo.rule.alltest 9 | fiborule.scene-list[3].name=complex 10 | fiborule.scene-list[3].path=com.fibo.rule.complex -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8081 2 | 3 | spring.profiles.active=dev -------------------------------------------------------------------------------- /fiborule/fiborule-test/src/test/java/com/fibo/rule/scannerTest/ScannerTest.java: -------------------------------------------------------------------------------- 1 | package com.fibo.rule.scannerTest; 2 | 3 | import com.fibo.rule.core.client.FiboNodeScanner; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 7 | import org.springframework.boot.test.context.SpringBootTest; 8 | import org.springframework.test.context.junit4.SpringRunner; 9 | 10 | import java.io.IOException; 11 | import java.util.Set; 12 | 13 | @RunWith(SpringRunner.class) 14 | @SpringBootTest(classes = ScannerTest.class) 15 | @EnableAutoConfiguration 16 | public class ScannerTest { 17 | 18 | @Test 19 | public void test() throws IOException { 20 | Set> classes = FiboNodeScanner.scanPackage("com.fibo.rule.alltest.node"); 21 | System.out.println(classes); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /h5-fiborule-manager/.env.A: -------------------------------------------------------------------------------- 1 | NODE_ENV = 'A' 2 | VUE_CURRENTMODE = 'A' 3 | VUE_PROXY = true -------------------------------------------------------------------------------- /h5-fiborule-manager/.env.B: -------------------------------------------------------------------------------- 1 | NODE_ENV = 'B' 2 | VUE_CURRENTMODE = 'B' 3 | VUE_PROXY = true -------------------------------------------------------------------------------- /h5-fiborule-manager/.env.C: -------------------------------------------------------------------------------- 1 | NODE_ENV = 'C' 2 | VUE_CURRENTMODE = 'C' 3 | VUE_PROXY = true -------------------------------------------------------------------------------- /h5-fiborule-manager/.env.D: -------------------------------------------------------------------------------- 1 | NODE_ENV = 'D' 2 | VUE_CURRENTMODE = 'D' 3 | VUE_PROXY = true -------------------------------------------------------------------------------- /h5-fiborule-manager/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /h5-fiborule-manager/README.md: -------------------------------------------------------------------------------- 1 | # h5-fiborule-manager 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Customize configuration 19 | See [Configuration Reference](https://cli.vuejs.org/config/). 20 | -------------------------------------------------------------------------------- /h5-fiborule-manager/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /h5-fiborule-manager/baseUrl.js: -------------------------------------------------------------------------------- 1 | // console.log(process.env) 2 | var proxyObj = {} 3 | // console.log(process.env.VUE_PROXY) 4 | switch (process.env.NODE_ENV) { 5 | case 'development': // 个人服务器后端地址 6 | proxyObj = { 7 | '/rule': { 8 | target: 'http://localhost:8080', // 个人服务器后端地址 - Riskmanage 9 | changeOrigin: true, // 是否跨域 10 | pathRewrite: { 11 | '^/rule': '/rule' 12 | } 13 | }, 14 | } 15 | break 16 | 17 | } 18 | 19 | 20 | try{ 21 | // baseUrl2 中的内容为 斐波那契公司内部使用的服务器地址信息 如测试服务器 demo服务器 22 | // 此部分信息为避免数据污染 不能对外公示 23 | // 此处已经 try catch 没有此文件不影响系统运行 24 | // 个人服务器请配置在上方 development 中 25 | let a = require('./baseUrl2') 26 | proxyObj = a() 27 | }catch(err){ 28 | 29 | } 30 | 31 | console.log(proxyObj) 32 | 33 | module.exports = proxyObj 34 | -------------------------------------------------------------------------------- /h5-fiborule-manager/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": [ 9 | "src/*" 10 | ] 11 | }, 12 | "lib": [ 13 | "esnext", 14 | "dom", 15 | "dom.iterable", 16 | "scripthost" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /h5-fiborule-manager/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "h5-fiborule-manager", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "serve:nian": "vue-cli-service serve --mode A", 9 | "serve:B": "vue-cli-service serve --mode B", 10 | "serve:C": "vue-cli-service serve --mode C", 11 | "serve:D": "vue-cli-service serve --mode D" 12 | }, 13 | "dependencies": { 14 | "axios": "^0.18.1", 15 | "core-js": "^3.8.3", 16 | "element-ui": "^2.11.0", 17 | "vue": "^2.6.14", 18 | "vue-router": "^3.5.1", 19 | "vuex": "^3.6.2" 20 | }, 21 | "devDependencies": { 22 | "@vue/cli-plugin-babel": "~5.0.0", 23 | "@vue/cli-plugin-router": "~5.0.0", 24 | "@vue/cli-plugin-vuex": "~5.0.0", 25 | "@vue/cli-service": "~5.0.0", 26 | "less": "^4.0.0", 27 | "less-loader": "^8.0.0", 28 | "vue-template-compiler": "^2.6.14" 29 | }, 30 | "browserslist": [ 31 | "> 1%", 32 | "last 2 versions", 33 | "not dead" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /h5-fiborule-manager/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/favicon.ico -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/decisionBcg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/decisionBcg.jpg -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/nodeimg/nodeType1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/nodeimg/nodeType1.png -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/nodeimg/nodeType2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/nodeimg/nodeType2.png -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/nodeimg/nodeType3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/nodeimg/nodeType3.png -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/nodeimg/nodeType4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/nodeimg/nodeType4.png -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/nodeimg/nodeType5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/nodeimg/nodeType5.png -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/nodeimg/nodeType6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/nodeimg/nodeType6.png -------------------------------------------------------------------------------- /h5-fiborule-manager/public/img/nodeimg/nodeType7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/public/img/nodeimg/nodeType7.png -------------------------------------------------------------------------------- /h5-fiborule-manager/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 12 | 13 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/assets/class.less: -------------------------------------------------------------------------------- 1 | .fromList{ 2 | &>div{ 3 | display: flex; 4 | margin-top: 10px; 5 | &>p{ 6 | width: 100px; 7 | flex-grow: 0; 8 | text-align: right; 9 | margin-right: 10px; 10 | &+div{ 11 | flex-grow: 1; 12 | } 13 | } 14 | 15 | } 16 | } -------------------------------------------------------------------------------- /h5-fiborule-manager/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FiboAI/FiboRuleLite/c11f94d0022de122e555ec4df0c3368a84338c06/h5-fiborule-manager/src/assets/logo.png -------------------------------------------------------------------------------- /h5-fiborule-manager/src/components/input.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/components/pagination.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/components/select.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './store' 5 | import ElementUI from 'element-ui'; 6 | import 'element-ui/lib/theme-chalk/index.css'; 7 | import '@/assets/class.less' 8 | import defData from '@/utils/class' 9 | Vue.use(ElementUI, { size: 'mini' }); 10 | Vue.config.productionTip = false 11 | Vue.prototype.defData = defData 12 | Date.prototype.format = function (fmt = 'yyyy-MM-dd hh:mm:ss') { 13 | var o = { 14 | "M+": this.getMonth() + 1, //月份 15 | "d+": this.getDate(), //日 16 | "h+": this.getHours(), //小时 17 | "m+": this.getMinutes(), //分 18 | "s+": this.getSeconds(), //秒 19 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度 20 | "S": this.getMilliseconds() //毫秒 21 | }; 22 | if (/(y+)/.test(fmt)) { 23 | fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); 24 | } 25 | for (var k in o) { 26 | if (new RegExp("(" + k + ")").test(fmt)) { 27 | fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 28 | } 29 | } 30 | return fmt; 31 | } 32 | 33 | Array.prototype.deleteValue = function (value) { 34 | let index = this.indexOf(value) 35 | if (index != -1) { 36 | this.splice(index, 1) 37 | } 38 | return this 39 | } 40 | Vue.prototype.$getArrayByMap = function (obj) { 41 | let arr = [] 42 | Object.keys(obj).forEach(value => { 43 | arr.push({ 44 | key: value, 45 | label: obj[value] 46 | }) 47 | }) 48 | return arr 49 | } 50 | 51 | new Vue({ 52 | router, 53 | store, 54 | render: h => h(App) 55 | }).$mount('#app') 56 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | 4 | 5 | Vue.use(VueRouter) 6 | 7 | const routes = [ 8 | { 9 | path: '/', 10 | redirect: '/app', 11 | }, 12 | { 13 | path: '/', 14 | name: 'home', 15 | component: () => import('../views/home.vue'), 16 | children: [ 17 | { 18 | path: '/engineList/:appId', 19 | name: 'engineList', 20 | meta: { title: '引擎列表' }, 21 | component: () => import('../views/engineList.vue') 22 | }, 23 | { 24 | path: '/engine/:engineId', 25 | name: 'engine', 26 | meta: { }, 27 | component: () => import('../views/engine/index.vue') 28 | }, 29 | { 30 | path: '/app', 31 | name: 'app', 32 | meta: { title: 'APP列表' }, 33 | component: () => import('../views/appList.vue') 34 | }, 35 | ] 36 | }, 37 | 38 | 39 | ] 40 | 41 | const router = new VueRouter({ 42 | routes 43 | }) 44 | 45 | export default router 46 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | export default new Vuex.Store({ 7 | state: { 8 | }, 9 | getters: { 10 | }, 11 | mutations: { 12 | }, 13 | actions: { 14 | }, 15 | modules: { 16 | } 17 | }) 18 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/utils/class.js: -------------------------------------------------------------------------------- 1 | export default class { 2 | constructor(obj) { 3 | this.__origin = JSON.parse(JSON.stringify(obj)) 4 | 5 | 6 | 7 | 8 | this.reSet = function () { 9 | let originKeys = Object.keys(this.__origin) 10 | originKeys.push(...['__origin','reSet','set']) 11 | for (var key in this) { 12 | if (originKeys.indexOf(key)==-1) { 13 | delete this[key]; 14 | } 15 | } 16 | Object.keys(this.__origin).forEach(value => { 17 | this[value] = this.__origin[value] 18 | }) 19 | } 20 | this.reSet() 21 | 22 | 23 | this.set = function (obj) { 24 | Object.keys(obj).forEach(value => { 25 | this[value] = obj[value] 26 | }) 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /h5-fiborule-manager/src/views/engine/nodeConfig/NoConfig.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/views/engine/nodeConfig/nodeHome.vue: -------------------------------------------------------------------------------- 1 | 16 | 49 | -------------------------------------------------------------------------------- /h5-fiborule-manager/src/views/home.vue: -------------------------------------------------------------------------------- 1 | 18 | 29 | -------------------------------------------------------------------------------- /h5-fiborule-manager/vue.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require('@vue/cli-service') 2 | const { resolve } = require('path') 3 | const path = require('path') 4 | const proxyObj = require('./baseUrl') 5 | module.exports = defineConfig({ 6 | publicPath: './', 7 | // transpileDependencies: true, 8 | devServer:{ 9 | // contentBase: path.join(__dirname, `../public/`), 10 | host: '0.0.0.0', // 'lhl.zcsmart.com', // 'lhl.zcsmart.com',//'lhl.zcsmart.com',//'localhost', 11 | proxy: process.env.OPEN_PROXY === false ? {} : proxyObj, 12 | port: 8888, 13 | open: false, 14 | }, 15 | configureWebpack:{ 16 | resolve:{ 17 | alias:{ 18 | 'c':resolve('src/components') 19 | } 20 | } 21 | } 22 | }) 23 | --------------------------------------------------------------------------------