├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── common ├── pom.xml └── src │ └── main │ └── java │ └── net │ └── somta │ └── juggle │ └── common │ ├── constants │ └── ApplicationConstants.java │ ├── identity │ ├── IdentityContext.java │ └── IdentityVO.java │ ├── param │ └── TriggerDataParam.java │ └── utils │ ├── InetUtil.java │ ├── JwtUtil.java │ └── ResultUtil.java ├── console-ui ├── .env ├── .eslintignore ├── .eslintrc.cjs ├── .gitignore ├── .npmrc ├── .prettierrc.json ├── README.md ├── index.html ├── package.json ├── public │ ├── favicon.ico │ └── suite │ │ ├── 163_email.svg │ │ ├── alapi.svg │ │ ├── aliyun.svg │ │ ├── amap.svg │ │ ├── baidu.svg │ │ ├── baidumap.svg │ │ ├── caiyun.svg │ │ ├── deepseek.svg │ │ ├── default.svg │ │ ├── dingtalk.svg │ │ ├── douyin.svg │ │ ├── example.png │ │ ├── feishu.svg │ │ ├── gitee.svg │ │ ├── github.svg │ │ ├── huoshanyinqing.svg │ │ ├── internal_collect.svg │ │ ├── internal_cryptography.svg │ │ ├── internal_random.svg │ │ ├── internal_value.svg │ │ ├── kingdee.svg │ │ ├── kuaidi100.svg │ │ ├── luosimao.png │ │ ├── qq_email.svg │ │ ├── shunfeng.svg │ │ ├── siliconflow.png │ │ ├── tongyi.svg │ │ ├── wecom.svg │ │ ├── weibanzhushou.svg │ │ ├── weixin.svg │ │ ├── yonyou.svg │ │ └── youzan.svg ├── scripts │ ├── copyDist.js │ └── predev.js ├── src │ ├── App.vue │ ├── assets │ │ ├── base.css │ │ ├── link.svg │ │ └── logo.svg │ ├── components │ │ ├── common │ │ │ ├── ClassifyFilter.vue │ │ │ ├── CodeEditor.vue │ │ │ ├── DataTypeDisplay.vue │ │ │ ├── ResizableDrawer.vue │ │ │ └── VariableSelect.vue │ │ ├── entry │ │ │ ├── EntryBg.vue │ │ │ ├── LoginForm.vue │ │ │ ├── RecoverForm.vue │ │ │ └── RegisterForm.vue │ │ ├── filter │ │ │ ├── FilterGroup.vue │ │ │ ├── FilterItem.vue │ │ │ ├── FilterList.vue │ │ │ ├── FilterValue.vue │ │ │ └── config.ts │ │ ├── form │ │ │ ├── ApiSelect.vue │ │ │ ├── DataTypeSelect.vue │ │ │ ├── InputRuleSetting.vue │ │ │ ├── OutputRuleSetting.vue │ │ │ ├── ParamSetting.vue │ │ │ └── SuiteSelect.vue │ │ ├── icons │ │ │ ├── IconAssign.vue │ │ │ ├── IconCode.vue │ │ │ ├── IconCondition.vue │ │ │ ├── IconFlow.vue │ │ │ ├── IconInterface.vue │ │ │ ├── IconMethod.vue │ │ │ ├── IconMysql.vue │ │ │ └── IconSetting.vue │ │ └── layout │ │ │ ├── aside │ │ │ └── LayoutAside.vue │ │ │ ├── header │ │ │ ├── AppLogo.vue │ │ │ ├── CurrentUser.vue │ │ │ ├── HeaderMenu.vue │ │ │ └── LayoutHeader.vue │ │ │ └── main │ │ │ └── MainBreadcrumb.vue │ ├── const │ │ ├── api.ts │ │ ├── application.ts │ │ ├── dataType.ts │ │ └── index.ts │ ├── env.d.ts │ ├── hooks │ │ ├── useCodeEditor.ts │ │ └── useResizableDrawer.ts │ ├── main.ts │ ├── router │ │ └── index.ts │ ├── service │ │ ├── api │ │ │ ├── api.ts │ │ │ ├── common.ts │ │ │ ├── dataSource.ts │ │ │ ├── flow.ts │ │ │ ├── flowDefine.ts │ │ │ ├── flowVersion.ts │ │ │ ├── index.ts │ │ │ ├── object.ts │ │ │ ├── order.ts │ │ │ ├── suite.ts │ │ │ ├── suiteMarket.ts │ │ │ ├── templateMarket.ts │ │ │ ├── token.ts │ │ │ └── user.ts │ │ ├── base │ │ │ ├── errorHander.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ └── module │ │ │ ├── api.ts │ │ │ ├── common.ts │ │ │ ├── dataSource.ts │ │ │ ├── flow.ts │ │ │ ├── flowDefine.ts │ │ │ ├── flowVersion.ts │ │ │ ├── index.ts │ │ │ ├── object.ts │ │ │ ├── orderService.ts │ │ │ ├── suite.ts │ │ │ ├── suiteMarketService.ts │ │ │ ├── templateMarketService.ts │ │ │ ├── token.ts │ │ │ └── user.ts │ ├── typings │ │ ├── api.ts │ │ ├── dataType.ts │ │ ├── flowDefine.ts │ │ ├── flowDesign.ts │ │ ├── index.ts │ │ ├── object.ts │ │ ├── order.ts │ │ ├── parameter.ts │ │ ├── suite.ts │ │ └── template.ts │ ├── utils │ │ └── dataType.ts │ └── views │ │ ├── HomeView.vue │ │ ├── LayoutView.vue │ │ ├── LoginView.vue │ │ ├── NotFound.vue │ │ ├── RouterNest.vue │ │ ├── common │ │ ├── AboutView.vue │ │ ├── SettingView.vue │ │ ├── UserAgreement.vue │ │ ├── UserView.vue │ │ └── index.ts │ │ ├── flow │ │ ├── FlowDebug.vue │ │ ├── FlowDefineList.vue │ │ ├── FlowDesign.vue │ │ ├── FlowList.vue │ │ ├── FlowVersionList.vue │ │ ├── define │ │ │ ├── FlowDefineDrawer.vue │ │ │ ├── FlowDefineFilter.vue │ │ │ ├── FlowDefineTable.vue │ │ │ └── index.ts │ │ ├── design │ │ │ ├── components │ │ │ │ ├── AddNodeModal.vue │ │ │ │ ├── ConditionFilterModal.vue │ │ │ │ ├── EditNodeDrawer.vue │ │ │ │ ├── ZoomTool.vue │ │ │ │ ├── index.ts │ │ │ │ ├── left-menu │ │ │ │ │ ├── LeftMenu.vue │ │ │ │ │ ├── ParamSettingModal.vue │ │ │ │ │ ├── VariableSetting.vue │ │ │ │ │ └── index.ts │ │ │ │ └── node-form │ │ │ │ │ ├── AssignForm.vue │ │ │ │ │ ├── CodeForm.vue │ │ │ │ │ ├── ConditionForm.vue │ │ │ │ │ ├── MethodForm.vue │ │ │ │ │ ├── MySqlForm.vue │ │ │ │ │ └── index.ts │ │ │ ├── config.ts │ │ │ ├── data │ │ │ │ ├── DataNode.ts │ │ │ │ ├── TreeNode.ts │ │ │ │ ├── generate.ts │ │ │ │ └── index.ts │ │ │ ├── hooks │ │ │ │ ├── flow-data.ts │ │ │ │ └── immer.ts │ │ │ ├── index.ts │ │ │ ├── operate.ts │ │ │ ├── readme.md │ │ │ ├── renderer │ │ │ │ ├── index.ts │ │ │ │ ├── layout │ │ │ │ │ ├── LayoutNode.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── vertical │ │ │ │ │ │ ├── DrawNodeHelper.ts │ │ │ │ │ │ ├── generate.ts │ │ │ │ │ │ └── index.ts │ │ │ │ └── utils │ │ │ │ │ ├── TreeNode.ts │ │ │ │ │ └── icon.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── index.ts │ │ ├── list │ │ │ ├── FlowFilter.vue │ │ │ ├── FlowTable.vue │ │ │ └── index.ts │ │ └── version │ │ │ ├── FlowVersionFilter.vue │ │ │ ├── FlowVersionTable.vue │ │ │ └── index.ts │ │ ├── market │ │ ├── SuiteMarket.vue │ │ ├── SuiteMarketDetail.vue │ │ ├── TemplateMarket.vue │ │ ├── TemplateMarketDetail.vue │ │ └── index.ts │ │ ├── object │ │ ├── ObjectDrawer.vue │ │ ├── ObjectFilter.vue │ │ ├── ObjectList.vue │ │ ├── ObjectTable.vue │ │ └── index.ts │ │ ├── suite │ │ ├── ApiDebug.vue │ │ ├── ApiList.vue │ │ ├── SuiteList.vue │ │ ├── api │ │ │ ├── ApiDrawer.vue │ │ │ ├── ApiFilter.vue │ │ │ ├── ApiTable.vue │ │ │ └── index.ts │ │ ├── index.ts │ │ └── suite │ │ │ ├── SuiteFilter.vue │ │ │ ├── SuiteForm.vue │ │ │ ├── SuiteTable.vue │ │ │ └── index.ts │ │ └── system │ │ ├── DataSourceList.vue │ │ ├── TokenList.vue │ │ ├── datasource │ │ ├── DataSourceDrawer.vue │ │ ├── DataSourceTable.vue │ │ └── index.ts │ │ ├── index.ts │ │ └── token │ │ ├── TokenForm.vue │ │ ├── TokenSuccessForm.vue │ │ ├── TokenTable.vue │ │ └── index.ts ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── yarn.lock ├── console ├── pom.xml └── src │ ├── main │ ├── java │ │ └── net │ │ │ └── somta │ │ │ └── juggle │ │ │ ├── Application.java │ │ │ └── console │ │ │ ├── application │ │ │ ├── assembler │ │ │ │ ├── IDataTypeInfoAssembler.java │ │ │ │ ├── IObjectAssembler.java │ │ │ │ ├── IOrderAssembler.java │ │ │ │ ├── IParameterAssembler.java │ │ │ │ ├── flow │ │ │ │ │ ├── IFlowDefinitionAssembler.java │ │ │ │ │ ├── IFlowInfoAssembler.java │ │ │ │ │ └── IFlowVersionAssembler.java │ │ │ │ ├── market │ │ │ │ │ └── ITemplateAssembler.java │ │ │ │ ├── suite │ │ │ │ │ ├── IApiAssembler.java │ │ │ │ │ └── ISuiteAssembler.java │ │ │ │ └── system │ │ │ │ │ ├── IDataSourceAssembler.java │ │ │ │ │ └── ITokenAssembler.java │ │ │ └── service │ │ │ │ ├── IDataTypeInfoService.java │ │ │ │ ├── IObjectService.java │ │ │ │ ├── IOrderService.java │ │ │ │ ├── IUserService.java │ │ │ │ ├── flow │ │ │ │ ├── IFlowDefinitionService.java │ │ │ │ ├── IFlowInfoService.java │ │ │ │ ├── IFlowRuntimeService.java │ │ │ │ ├── IFlowVersionService.java │ │ │ │ └── impl │ │ │ │ │ ├── FlowDefinitionServiceImpl.java │ │ │ │ │ ├── FlowInfoInfoServiceImpl.java │ │ │ │ │ ├── FlowRuntimeServiceImpl.java │ │ │ │ │ └── FlowVersionServiceImpl.java │ │ │ │ ├── impl │ │ │ │ ├── DataTypeInfoServiceImpl.java │ │ │ │ ├── ObjectServiceImpl.java │ │ │ │ ├── OrderServiceImpl.java │ │ │ │ └── UserServiceImpl.java │ │ │ │ ├── market │ │ │ │ ├── ITemplateService.java │ │ │ │ └── impl │ │ │ │ │ └── TemplateServiceImpl.java │ │ │ │ ├── suite │ │ │ │ ├── IApiService.java │ │ │ │ ├── ISuiteService.java │ │ │ │ └── impl │ │ │ │ │ ├── ApiServiceImpl.java │ │ │ │ │ └── SuiteServiceImpl.java │ │ │ │ └── system │ │ │ │ ├── IDataSourceManager.java │ │ │ │ ├── IDataSourceService.java │ │ │ │ ├── ITokenService.java │ │ │ │ └── impl │ │ │ │ ├── DataSourceManager.java │ │ │ │ ├── DataSourceServiceImpl.java │ │ │ │ └── TokenServiceImpl.java │ │ │ ├── configuration │ │ │ ├── ApplicationConfiguration.java │ │ │ ├── InterceptorConfiguration.java │ │ │ ├── JuggleProperties.java │ │ │ ├── MyBatisConfiguration.java │ │ │ └── SwaggerConfiguration.java │ │ │ ├── domain │ │ │ ├── flow │ │ │ │ ├── definition │ │ │ │ │ ├── FlowDefinitionAO.java │ │ │ │ │ ├── enums │ │ │ │ │ │ ├── FlowDefinitionErrorEnum.java │ │ │ │ │ │ ├── VariableErrorEnum.java │ │ │ │ │ │ └── VariableTypeEnum.java │ │ │ │ │ ├── repository │ │ │ │ │ │ ├── IFlowDefinitionRepository.java │ │ │ │ │ │ └── IVariableInfoRepository.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── FlowDefinitionInfoQueryVO.java │ │ │ │ │ │ ├── FlowDefinitionInfoVO.java │ │ │ │ │ │ ├── VariableDeleteVO.java │ │ │ │ │ │ └── VariableInfoVO.java │ │ │ │ ├── flowinfo │ │ │ │ │ ├── FlowInfoAO.java │ │ │ │ │ ├── enums │ │ │ │ │ │ ├── FlowErrorEnum.java │ │ │ │ │ │ └── FlowTypeEnum.java │ │ │ │ │ ├── repository │ │ │ │ │ │ └── IFlowInfoRepository.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── FlowInfoQueryVO.java │ │ │ │ │ │ └── FlowInfoVO.java │ │ │ │ └── version │ │ │ │ │ ├── FlowVersionAO.java │ │ │ │ │ ├── enums │ │ │ │ │ ├── FlowVersionErrorEnum.java │ │ │ │ │ └── FlowVersionStatusEnum.java │ │ │ │ │ ├── repository │ │ │ │ │ └── IFlowVersionRepository.java │ │ │ │ │ ├── view │ │ │ │ │ ├── FlowVersionInfoView.java │ │ │ │ │ └── FlowVersionView.java │ │ │ │ │ └── vo │ │ │ │ │ ├── FlowVersionQueryVO.java │ │ │ │ │ └── FlowVersionVO.java │ │ │ ├── object │ │ │ │ ├── ObjectAO.java │ │ │ │ ├── enums │ │ │ │ │ └── ObjectErrorEnum.java │ │ │ │ ├── repository │ │ │ │ │ └── IObjectRepository.java │ │ │ │ └── vo │ │ │ │ │ ├── ObjectVO.java │ │ │ │ │ └── PropertyVO.java │ │ │ ├── order │ │ │ │ ├── OrderEntity.java │ │ │ │ ├── repository │ │ │ │ │ └── IOrderRepository.java │ │ │ │ └── vo │ │ │ │ │ └── CreateOrderVO.java │ │ │ ├── parameter │ │ │ │ ├── ParameterEntity.java │ │ │ │ ├── enums │ │ │ │ │ ├── ParameterSourceTypeEnum.java │ │ │ │ │ └── ParameterTypeEnum.java │ │ │ │ ├── repository │ │ │ │ │ └── IParameterRepository.java │ │ │ │ └── vo │ │ │ │ │ ├── InputParameterVO.java │ │ │ │ │ ├── OutputParameterVO.java │ │ │ │ │ └── ParameterVO.java │ │ │ ├── suite │ │ │ │ ├── api │ │ │ │ │ ├── ApiAO.java │ │ │ │ │ ├── enums │ │ │ │ │ │ └── ApiErrorEnum.java │ │ │ │ │ ├── repository │ │ │ │ │ │ └── IApiRepository.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ApiVO.java │ │ │ │ │ │ └── HeaderVO.java │ │ │ │ └── suiteinfo │ │ │ │ │ ├── SuiteEntity.java │ │ │ │ │ ├── enums │ │ │ │ │ ├── SuiteErrorEnum.java │ │ │ │ │ └── SuiteTypeEnum.java │ │ │ │ │ ├── repository │ │ │ │ │ └── ISuiteRepository.java │ │ │ │ │ └── vo │ │ │ │ │ ├── SuiteApiInfoVO.java │ │ │ │ │ ├── SuiteMarketClassifyVO.java │ │ │ │ │ ├── SuiteMarketVO.java │ │ │ │ │ ├── SuiteQueryVO.java │ │ │ │ │ └── SuiteVO.java │ │ │ ├── system │ │ │ │ ├── datasource │ │ │ │ │ ├── DataSourceAO.java │ │ │ │ │ ├── enums │ │ │ │ │ │ └── DatasourceErrorEnum.java │ │ │ │ │ ├── repository │ │ │ │ │ │ └── IDataSourceRepository.java │ │ │ │ │ ├── service │ │ │ │ │ │ ├── DataSourceInstanceFactory.java │ │ │ │ │ │ ├── IDataSourceInstance.java │ │ │ │ │ │ └── MySqlDataSourceInstance.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── DataSourceQueryVO.java │ │ │ │ │ │ └── DataSourceVO.java │ │ │ │ └── token │ │ │ │ │ ├── TokenEntity.java │ │ │ │ │ ├── repository │ │ │ │ │ └── ITokenRepository.java │ │ │ │ │ └── vo │ │ │ │ │ ├── OpenApiTokenVO.java │ │ │ │ │ └── TokenVO.java │ │ │ ├── template │ │ │ │ ├── enums │ │ │ │ │ └── TemplateErrorEnum.java │ │ │ │ ├── repository │ │ │ │ │ └── ITemplateRepository.java │ │ │ │ └── vo │ │ │ │ │ ├── TemplateMarketClassifyVO.java │ │ │ │ │ ├── TemplateMarketInfoVO.java │ │ │ │ │ └── TemplateMarketVO.java │ │ │ └── user │ │ │ │ ├── UserAO.java │ │ │ │ ├── enums │ │ │ │ └── UserErrorEnum.java │ │ │ │ ├── repository │ │ │ │ └── IUserRepository.java │ │ │ │ └── vo │ │ │ │ └── UserTokenVO.java │ │ │ ├── infrastructure │ │ │ ├── converter │ │ │ │ ├── IObjectConverter.java │ │ │ │ ├── IParameterConverter.java │ │ │ │ ├── IUserConverter.java │ │ │ │ ├── IVariableInfoConverter.java │ │ │ │ ├── flow │ │ │ │ │ ├── IFlowDefinitionConverter.java │ │ │ │ │ ├── IFlowInfoConverter.java │ │ │ │ │ └── IFlowVersionConverter.java │ │ │ │ ├── suite │ │ │ │ │ ├── IApiConverter.java │ │ │ │ │ └── ISuiteConverter.java │ │ │ │ └── system │ │ │ │ │ ├── IDataSourceConverter.java │ │ │ │ │ └── ITokenConverter.java │ │ │ ├── mapper │ │ │ │ ├── ObjectMapper.java │ │ │ │ ├── ParameterMapper.java │ │ │ │ ├── UserMapper.java │ │ │ │ ├── VariableInfoMapper.java │ │ │ │ ├── flow │ │ │ │ │ ├── FlowDefinitionMapper.java │ │ │ │ │ ├── FlowInfoMapper.java │ │ │ │ │ └── FlowVersionMapper.java │ │ │ │ ├── suite │ │ │ │ │ ├── ApiMapper.java │ │ │ │ │ └── SuiteMapper.java │ │ │ │ └── system │ │ │ │ │ ├── DataSourceMapper.java │ │ │ │ │ └── TokenMapper.java │ │ │ ├── po │ │ │ │ ├── ObjectPO.java │ │ │ │ ├── ParameterPO.java │ │ │ │ ├── UserPO.java │ │ │ │ ├── VariableInfoPO.java │ │ │ │ ├── flow │ │ │ │ │ ├── FlowDefinitionInfoPO.java │ │ │ │ │ ├── FlowInfoPO.java │ │ │ │ │ ├── FlowTemplatePO.java │ │ │ │ │ └── FlowVersionPO.java │ │ │ │ ├── suite │ │ │ │ │ ├── ApiPO.java │ │ │ │ │ └── SuitePO.java │ │ │ │ └── system │ │ │ │ │ ├── DataSourcePO.java │ │ │ │ │ └── TokenPO.java │ │ │ ├── repository │ │ │ │ ├── ObjectRepositoryImpl.java │ │ │ │ ├── OrderRepositoryImpl.java │ │ │ │ ├── ParameterRepositoryImpl.java │ │ │ │ ├── UserRepositoryImpl.java │ │ │ │ ├── VariableInfoRepositoryImpl.java │ │ │ │ ├── flow │ │ │ │ │ ├── FlowDefinitionRepositoryImpl.java │ │ │ │ │ ├── FlowInfoRepositoryImpl.java │ │ │ │ │ └── FlowVersionRepositoryImpl.java │ │ │ │ ├── market │ │ │ │ │ └── TemplateRepositoryImpl.java │ │ │ │ ├── suite │ │ │ │ │ ├── ApiRepositoryImpl.java │ │ │ │ │ └── SuiteRepositoryImpl.java │ │ │ │ └── system │ │ │ │ │ ├── DataSourceRepositoryImpl.java │ │ │ │ │ └── TokenRepositoryImpl.java │ │ │ └── view │ │ │ │ └── ObjectInfoView.java │ │ │ └── interfaces │ │ │ ├── controller │ │ │ ├── api │ │ │ │ ├── DataTypeInfoController.java │ │ │ │ ├── ObjectController.java │ │ │ │ ├── OrderController.java │ │ │ │ ├── UserController.java │ │ │ │ ├── example │ │ │ │ │ ├── GoodsExampleController.java │ │ │ │ │ ├── OrderExampleController.java │ │ │ │ │ └── UserExampleController.java │ │ │ │ ├── flow │ │ │ │ │ ├── FlowDefinitionController.java │ │ │ │ │ ├── FlowInfoController.java │ │ │ │ │ └── FlowVersionController.java │ │ │ │ ├── market │ │ │ │ │ └── TemplateController.java │ │ │ │ ├── suite │ │ │ │ │ ├── ApiController.java │ │ │ │ │ └── SuiteController.java │ │ │ │ └── system │ │ │ │ │ ├── DataSourceController.java │ │ │ │ │ └── TokenController.java │ │ │ └── open │ │ │ │ └── FlowOpenController.java │ │ │ ├── dto │ │ │ ├── DataTypeOptionDTO.java │ │ │ ├── DomainDTO.java │ │ │ ├── LoginDTO.java │ │ │ ├── ObjectDTO.java │ │ │ ├── ObjectInfoDTO.java │ │ │ ├── OrderDTO.java │ │ │ ├── UserDTO.java │ │ │ ├── flow │ │ │ │ ├── FlowDefinitionInfoDTO.java │ │ │ │ ├── FlowInfoDTO.java │ │ │ │ ├── FlowTemplateInfoDTO.java │ │ │ │ └── FlowVersionDTO.java │ │ │ ├── market │ │ │ │ ├── TemplateMarketClassifyDTO.java │ │ │ │ ├── TemplateMarketDTO.java │ │ │ │ └── TemplateMarketInfoDTO.java │ │ │ ├── suite │ │ │ │ ├── ApiDTO.java │ │ │ │ ├── ApiInfoDTO.java │ │ │ │ ├── SuiteDTO.java │ │ │ │ ├── SuiteMarketClassifyDTO.java │ │ │ │ ├── SuiteMarketDTO.java │ │ │ │ └── SuiteMarketInfoDTO.java │ │ │ └── system │ │ │ │ ├── DataSourceDTO.java │ │ │ │ └── TokenDTO.java │ │ │ ├── handler │ │ │ └── GlobalExceptionHandler.java │ │ │ ├── interceptor │ │ │ └── AuthInterceptor.java │ │ │ ├── listener │ │ │ └── JuggleApplicationRunListener.java │ │ │ └── param │ │ │ ├── ObjectAddParam.java │ │ │ ├── ObjectQueryParam.java │ │ │ ├── ObjectUpdateParam.java │ │ │ ├── OrderParam.java │ │ │ ├── flow │ │ │ ├── FlowInfoPageParam.java │ │ │ ├── FlowTemplatePageParam.java │ │ │ ├── FlowVersionPageParam.java │ │ │ ├── FlowVersionStatusParam.java │ │ │ └── definition │ │ │ │ ├── FlowDefinitionAddParam.java │ │ │ │ ├── FlowDefinitionContentParam.java │ │ │ │ ├── FlowDefinitionDeployParam.java │ │ │ │ ├── FlowDefinitionPageParam.java │ │ │ │ └── FlowDefinitionUpdateParam.java │ │ │ ├── market │ │ │ ├── TemplateMarketParam.java │ │ │ └── TemplateMarketQueryParam.java │ │ │ ├── suite │ │ │ ├── ApiAddParam.java │ │ │ ├── ApiDebugParam.java │ │ │ ├── ApiQueryParam.java │ │ │ ├── ApiUpdateParam.java │ │ │ ├── SuiteAddParam.java │ │ │ ├── SuiteMarketParam.java │ │ │ ├── SuiteMarketQueryParam.java │ │ │ ├── SuiteQueryParam.java │ │ │ └── SuiteUpdateParam.java │ │ │ ├── system │ │ │ ├── DataSourceAddParam.java │ │ │ ├── DataSourceQueryParam.java │ │ │ ├── DataSourceUpdateParam.java │ │ │ ├── TokenAddParam.java │ │ │ └── TokenUpdateParam.java │ │ │ └── user │ │ │ ├── LoginParam.java │ │ │ └── UpdatePasswordParam.java │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ ├── application.properties │ │ ├── banner.txt │ │ ├── data │ │ ├── application-default.properties │ │ ├── db_juggle.mv.db │ │ └── docker-startup.sh │ │ ├── db │ │ ├── data.sql │ │ └── schema.sql │ │ ├── mybatis-config.xml │ │ ├── mybatis │ │ ├── ApiMapper.xml │ │ ├── DataSourceMapper.xml │ │ ├── FlowDefinitionMapper.xml │ │ ├── FlowInfoMapper.xml │ │ ├── FlowVersionMapper.xml │ │ ├── ObjectMapper.xml │ │ ├── ParameterMapper.xml │ │ ├── SuiteMapper.xml │ │ ├── TokenMapper.xml │ │ ├── UserMapper.xml │ │ ├── VariableInfoMapper.xml │ │ └── core │ │ │ ├── ApiCoreMapper.xml │ │ │ ├── DataSourceCoreMapper.xml │ │ │ ├── FlowDefinitionCoreMapper.xml │ │ │ ├── FlowInfoCoreMapper.xml │ │ │ ├── FlowVersionCoreMapper.xml │ │ │ ├── ObjectCoreMapper.xml │ │ │ ├── ParameterCoreMapper.xml │ │ │ ├── SuiteCoreMapper.xml │ │ │ ├── TokenCoreMapper.xml │ │ │ ├── UserCoreMapper.xml │ │ │ └── VariableInfoCoreMapper.xml │ │ └── static │ │ └── favicon.ico │ └── test │ └── java │ └── net │ └── somta │ └── juggle │ └── console │ ├── application │ └── service │ │ └── impl │ │ ├── FlowRuntimeServiceImplTest.java │ │ └── UserServiceImplTest.java │ ├── helper │ └── FlowDefinitionHelper.java │ └── interfaces │ └── controller │ └── flow │ └── FlowVersionControllerTest.java ├── docker-compose.yml ├── docs ├── .gitignore ├── Dockerfile ├── README.md ├── docs │ ├── .vuepress │ │ ├── client.ts │ │ ├── config.ts │ │ ├── navbar.ts │ │ ├── notes │ │ │ ├── changelog.ts │ │ │ ├── index.ts │ │ │ ├── suite-school.ts │ │ │ └── user-guide.ts │ │ ├── public │ │ │ ├── customer │ │ │ │ ├── hstong.png │ │ │ │ ├── megvii.png │ │ │ │ ├── pingankeji.png │ │ │ │ ├── scooper.png │ │ │ │ ├── swsc.png │ │ │ │ └── xinyucores.png │ │ │ └── images │ │ │ │ ├── choose.png │ │ │ │ ├── ecology.svg │ │ │ │ ├── favicon.ico │ │ │ │ ├── function.svg │ │ │ │ ├── gzh_qrcode.jpg │ │ │ │ ├── logo.png │ │ │ │ ├── price-bg.jpg │ │ │ │ ├── scene.svg │ │ │ │ └── wx.png │ │ └── styles │ │ │ ├── custom.css │ │ │ ├── index.css │ │ │ ├── index.styl │ │ │ └── palette.styl │ ├── README.md │ ├── about-me.md │ ├── notes │ │ ├── changelog │ │ │ ├── 1.x │ │ │ │ ├── 2024-03-22-juggle-1.0.0-issue.md │ │ │ │ ├── 2024-04-06-juggle-1.1.0-issue.md │ │ │ │ ├── 2024-04-24-juggle-1.1.1-issue.md │ │ │ │ ├── 2024-05-30-juggle-1.2.0-issue.md │ │ │ │ ├── 2024-07-30-juggle-1.2.1-issue.md │ │ │ │ ├── 2024-09-27-juggle-1.2.2-issue.md │ │ │ │ ├── 2024-11-27-juggle-1.2.3-issue.md │ │ │ │ ├── 2025-1-27-juggle-1.3.0-issue.md │ │ │ │ ├── 2025-4-27-juggle-1.3.1-issue.md │ │ │ │ ├── 2025-6-27-juggle-1.3.2-issue.md │ │ │ │ └── images │ │ │ │ │ ├── flow_example.png │ │ │ │ │ └── flow_example_2.png │ │ │ └── changelog-index.md │ │ ├── guide │ │ │ ├── community │ │ │ │ ├── donate.md │ │ │ │ ├── get-help.md │ │ │ │ └── images │ │ │ │ │ ├── gzh_qrcode.jpg │ │ │ │ │ ├── pay_wechat.jpg │ │ │ │ │ ├── pay_zfb.jpg │ │ │ │ │ └── wxqq.png │ │ │ ├── integration │ │ │ │ ├── images │ │ │ │ │ ├── gen_token.png │ │ │ │ │ ├── openapi_get_flow_result.png │ │ │ │ │ ├── openapi_trigger_flow_get.png │ │ │ │ │ └── openapi_trigger_flow_post.png │ │ │ │ ├── integration.md │ │ │ │ ├── java-juggle.md │ │ │ │ ├── open-api.md │ │ │ │ └── spring-boot-juggle.md │ │ │ ├── introduce │ │ │ │ ├── concept.md │ │ │ │ └── introduce-index.md │ │ │ ├── market │ │ │ │ └── images │ │ │ │ │ └── example_suite.png │ │ │ ├── open │ │ │ │ ├── contributing-flow.md │ │ │ │ ├── pull-request.md │ │ │ │ └── reporting-bug.md │ │ │ ├── operation │ │ │ │ ├── deployment-cluster.md │ │ │ │ ├── deployment-overview.md │ │ │ │ ├── deployment-standalone.md │ │ │ │ ├── images │ │ │ │ │ ├── application_config.png │ │ │ │ │ └── cluster_deploy_framework.png │ │ │ │ └── system-configurations.md │ │ │ ├── start │ │ │ │ ├── quick-start.md │ │ │ │ ├── start-with-docker.md │ │ │ │ └── start-with-kubernetes.md │ │ │ ├── test │ │ │ │ ├── images │ │ │ │ │ ├── 300_500.png │ │ │ │ │ ├── 600_500.png │ │ │ │ │ └── 900_500.png │ │ │ │ └── performance-test.md │ │ │ └── user │ │ │ │ ├── api.md │ │ │ │ ├── data-type-info.md │ │ │ │ ├── design │ │ │ │ ├── nodes.md │ │ │ │ └── variable.md │ │ │ │ ├── example-api.md │ │ │ │ ├── example-flow.md │ │ │ │ ├── flow-definition.md │ │ │ │ ├── flow-version.md │ │ │ │ ├── flow.md │ │ │ │ ├── images │ │ │ │ ├── add_api.png │ │ │ │ ├── add_suite.png │ │ │ │ ├── deploy_flow.png │ │ │ │ ├── edit_api.png │ │ │ │ ├── edit_suite.png │ │ │ │ ├── flow_example.png │ │ │ │ ├── flow_example_1.png │ │ │ │ ├── flow_example_2.png │ │ │ │ └── flow_example_3.png │ │ │ │ ├── nodes │ │ │ │ ├── assign-node.md │ │ │ │ ├── code-node.md │ │ │ │ ├── condition-node.md │ │ │ │ ├── images │ │ │ │ │ ├── add_assign_node.png │ │ │ │ │ ├── add_code_node.png │ │ │ │ │ ├── add_condition_item.png │ │ │ │ │ ├── add_condition_node.png │ │ │ │ │ ├── add_method_node.png │ │ │ │ │ ├── add_mysql_node.png │ │ │ │ │ └── sql_object.png │ │ │ │ ├── method-node.md │ │ │ │ └── mysql-node.md │ │ │ │ ├── object.md │ │ │ │ └── suite.md │ │ └── suite │ │ │ ├── internal │ │ │ ├── random-value.md │ │ │ └── value-handle.md │ │ │ ├── introduce.md │ │ │ └── third │ │ │ ├── 163-email.md │ │ │ ├── caiyun-weather.md │ │ │ ├── dingtalk-robot.md │ │ │ ├── images │ │ │ ├── caiyun_weather_1.png │ │ │ ├── caiyun_weather_2.png │ │ │ ├── qqEmail_1.png │ │ │ ├── qqEmail_2.png │ │ │ ├── qqEmail_3.png │ │ │ ├── qqEmail_4.png │ │ │ └── qqEmail_5.png │ │ │ ├── qq-email.md │ │ │ ├── tongyi-qianwen.md │ │ │ └── wecom-robot.md │ └── price.md ├── package.json ├── pnpm-lock.yaml └── src │ ├── components │ ├── VPHomeIntroduce.vue │ ├── VPPrice.vue │ └── VPTitle.vue │ └── layouts │ ├── DocSidebarSlot.vue │ └── FooterSlot.vue ├── example ├── juggle-nodejs-example │ ├── index.js │ ├── package.json │ └── pnpm-lock.yaml └── juggle-spring-boot-example │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── net │ │ └── somta │ │ └── juggle │ │ └── boot │ │ └── example │ │ ├── BootExampleApplication.java │ │ ├── controller │ │ ├── FlowIntegrationController.java │ │ └── StudentController.java │ │ ├── dto │ │ ├── BaseResponse.java │ │ └── StudentDTO.java │ │ └── param │ │ └── TriggerFlowParam.java │ └── resources │ └── application.properties ├── issue_template.md ├── pom.xml └── sdk ├── juggle-sdk-go └── README.md ├── juggle-sdk-java ├── pom.xml └── src │ ├── main │ └── java │ │ └── net │ │ └── somta │ │ └── juggle │ │ └── client │ │ ├── JuggleClient.java │ │ ├── JuggleClientImpl.java │ │ ├── JuggleConfig.java │ │ ├── JuggleFactory.java │ │ ├── enums │ │ └── FlowStatusEnum.java │ │ └── model │ │ ├── FlowResultModel.java │ │ └── FlowTriggerDataParam.java │ └── test │ └── java │ └── net │ └── somta │ └── juggle │ └── client │ └── JuggleClientTest.java ├── juggle-sdk-nodejs ├── .npmrc ├── README.md ├── package.json ├── pnpm-lock.yaml ├── rollup.config.mjs ├── src │ ├── IConfig.ts │ ├── index.ts │ ├── typings │ │ ├── index.ts │ │ └── result.ts │ └── utils │ │ └── request.ts ├── test.ts └── tsconfig.json └── juggle-spring-boot-starter ├── pom.xml └── src └── main ├── java └── net │ └── somta │ └── juggle │ └── starter │ ├── JuggleAutoConfiguration.java │ ├── impl │ ├── IJuggleTemplate.java │ └── JuggleTemplateImpl.java │ └── properties │ └── JuggleOpenProperties.java └── resources └── META-INF └── spring.factories /.gitignore: -------------------------------------------------------------------------------- 1 | ### STS ### 2 | .apt_generated 3 | .classpath 4 | .factorypath 5 | .project 6 | .settings 7 | .springBeans 8 | .sts4-cache 9 | 10 | ### IntelliJ IDEA ### 11 | .idea 12 | *.iws 13 | *.iml 14 | *.ipr 15 | 16 | ### NetBeans ### 17 | /nbproject/private/ 18 | /nbbuild/ 19 | /dist/ 20 | /nbdist/ 21 | /.nb-gradle/ 22 | build/ 23 | node_modules/ 24 | 25 | ### VS Code ### 26 | .vscode/ 27 | 28 | 29 | ###idea config### 30 | .svn/ 31 | target/ 32 | .idea/ 33 | *.iml 34 | .mvn/ 35 | mvnw 36 | mvnw.* 37 | build/ 38 | dist/ 39 | .flattened-pom.xml 40 | 41 | ### sdk-nodejs ### 42 | esm/ 43 | cjs/ 44 | sdk/juggle-sdk-nodejs/types/ -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM hub.c.163.com/tonight/oracle_jdk_1.8_131:131 2 | 3 | MAINTAINER Gavin somta@qq.com 4 | 5 | ADD console/target/*.jar juggle-server.jar 6 | 7 | EXPOSE 9127 8 | 9 | ENV BASE_DIR="/home/juggle" \ 10 | JVM_XMS="1g" \ 11 | JVM_XMX="1g" \ 12 | JVM_MS="128m" \ 13 | JVM_MMS="320m" \ 14 | JVM_GC_LOG="false" \ 15 | TIME_ZONE="Asia/Shanghai" 16 | 17 | COPY console/src/main/resources/data/application-default.properties /home/juggle/conf/application.properties 18 | COPY console/src/main/resources/data/db_juggle.mv.db /home/juggle/data/ 19 | COPY console/src/main/resources/data/docker-startup.sh /home/juggle/bin/ 20 | 21 | ENTRYPOINT ["sh","/home/juggle/bin/docker-startup.sh"] -------------------------------------------------------------------------------- /common/src/main/java/net/somta/juggle/common/identity/IdentityContext.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.common.identity; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class IdentityContext { 7 | private static ThreadLocal identityThreadLocal = new ThreadLocal<>(); 8 | 9 | public static void setIdentity(IdentityVO identity) { 10 | identityThreadLocal.set(identity); 11 | } 12 | 13 | public static IdentityVO getIdentity() { 14 | return identityThreadLocal.get(); 15 | } 16 | 17 | public static void clearIdentity() { 18 | identityThreadLocal.remove(); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /common/src/main/java/net/somta/juggle/common/identity/IdentityVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.common.identity; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class IdentityVO { 7 | public static final String USER_ID = "userId"; 8 | 9 | private Long userId; 10 | 11 | public IdentityVO(Long userId) { 12 | this.userId = userId; 13 | } 14 | 15 | public Long getUserId() { 16 | return userId; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /common/src/main/java/net/somta/juggle/common/param/TriggerDataParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.common.param; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 触发流程的实体 7 | * @author husong 8 | */ 9 | public class TriggerDataParam { 10 | /** 11 | * 触发流程需要的数据 12 | */ 13 | private Map flowData; 14 | 15 | public Map getFlowData() { 16 | return flowData; 17 | } 18 | 19 | public void setFlowData(Map flowData) { 20 | this.flowData = flowData; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /common/src/main/java/net/somta/juggle/common/utils/InetUtil.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.common.utils; 2 | 3 | import java.net.InetAddress; 4 | import java.net.UnknownHostException; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public class InetUtil { 10 | 11 | 12 | /** 13 | * 获取本机IP地址 14 | * @return local ip address 15 | */ 16 | public static String getLocalIp() { 17 | InetAddress localHost = null; 18 | try { 19 | localHost = InetAddress.getLocalHost(); 20 | String ipAddress = localHost.getHostAddress(); 21 | return ipAddress; 22 | } catch (UnknownHostException e) { 23 | throw new RuntimeException(e); 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /console-ui/.env: -------------------------------------------------------------------------------- 1 | 2 | # 代理地址 3 | #VITE_API_PROXY = http://127.0.0.1:9127 4 | VITE_API_PROXY = http://dev.juggle.plus -------------------------------------------------------------------------------- /console-ui/.eslintignore: -------------------------------------------------------------------------------- 1 | tailwind.config.js 2 | vite.config.ts 3 | tests 4 | src/proto 5 | scripts 6 | build 7 | -------------------------------------------------------------------------------- /console-ui/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | require('@rushstack/eslint-patch/modern-module-resolution') 3 | 4 | module.exports = { 5 | root: true, 6 | extends: [ 7 | 'plugin:vue/vue3-essential', 8 | 'eslint:recommended', 9 | '@vue/eslint-config-typescript', 10 | '@vue/eslint-config-prettier/skip-formatting', 11 | ], 12 | parserOptions: { 13 | ecmaVersion: 'latest', 14 | }, 15 | rules: {}, 16 | } 17 | -------------------------------------------------------------------------------- /console-ui/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /console-ui/.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /console-ui/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/prettierrc", 3 | "semi": true, 4 | "tabWidth": 2, 5 | "singleQuote": true, 6 | "printWidth": 150, 7 | "trailingComma": "es5", 8 | "arrowParens": "avoid", 9 | "bracketSameLine": false, 10 | "bracketSpacing": true, 11 | "jsxSingleQuote": false, 12 | "quoteProps": "preserve", 13 | "singleAttributePerLine": false, 14 | "proseWrap": "preserve" 15 | } 16 | -------------------------------------------------------------------------------- /console-ui/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Juggle 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /console-ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/public/favicon.ico -------------------------------------------------------------------------------- /console-ui/public/suite/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /console-ui/public/suite/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/public/suite/example.png -------------------------------------------------------------------------------- /console-ui/public/suite/gitee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /console-ui/public/suite/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /console-ui/public/suite/kingdee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /console-ui/public/suite/luosimao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/public/suite/luosimao.png -------------------------------------------------------------------------------- /console-ui/public/suite/siliconflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/public/suite/siliconflow.png -------------------------------------------------------------------------------- /console-ui/public/suite/tongyi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /console-ui/public/suite/weibanzhushou.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /console-ui/scripts/predev.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | function createEnvLocal () { 5 | const configPath = path.join(__dirname, '../.env'); 6 | const localPath = path.join(__dirname, '../.env.local'); 7 | if (!fs.existsSync(localPath)) { 8 | fs.copyFileSync(configPath, localPath); 9 | } 10 | } 11 | 12 | createEnvLocal(); 13 | -------------------------------------------------------------------------------- /console-ui/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /console-ui/src/assets/base.css: -------------------------------------------------------------------------------- 1 | *, 2 | *::before, 3 | *::after { 4 | box-sizing: border-box; 5 | margin: 0; 6 | font-weight: normal; 7 | } 8 | 9 | html, 10 | body { 11 | height: 100%; 12 | } 13 | 14 | #app { 15 | height: 100%; 16 | } 17 | 18 | .page-header { 19 | height: auto !important; 20 | padding: 24px 20px 0 20px !important; 21 | } 22 | 23 | .page-body { 24 | min-height: 0; 25 | overflow: auto; 26 | } 27 | 28 | .table-header{ 29 | background-color: #f0f0f0 !important; 30 | } 31 | .table-pagination { 32 | padding: 12px 0; 33 | display: flex; 34 | flex-direction: row-reverse; 35 | } -------------------------------------------------------------------------------- /console-ui/src/assets/link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /console-ui/src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /console-ui/src/components/entry/RecoverForm.vue: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/src/components/entry/RecoverForm.vue -------------------------------------------------------------------------------- /console-ui/src/components/entry/RegisterForm.vue: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/src/components/entry/RegisterForm.vue -------------------------------------------------------------------------------- /console-ui/src/components/icons/IconCode.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /console-ui/src/components/icons/IconCondition.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /console-ui/src/components/icons/IconFlow.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /console-ui/src/components/layout/header/AppLogo.vue: -------------------------------------------------------------------------------- 1 | 4 | 15 | -------------------------------------------------------------------------------- /console-ui/src/components/layout/header/HeaderMenu.vue: -------------------------------------------------------------------------------- 1 | 19 | 35 | -------------------------------------------------------------------------------- /console-ui/src/components/layout/header/LayoutHeader.vue: -------------------------------------------------------------------------------- 1 | 6 | 17 | 27 | -------------------------------------------------------------------------------- /console-ui/src/components/layout/main/MainBreadcrumb.vue: -------------------------------------------------------------------------------- 1 | 10 | 19 | -------------------------------------------------------------------------------- /console-ui/src/const/api.ts: -------------------------------------------------------------------------------- 1 | export const ApiRequestTypeMap = { 2 | GET: 'GET', 3 | POST: 'POST', 4 | PUT: 'PUT', 5 | DELETE: 'DELETE', 6 | }; 7 | 8 | export const ApiRequestContentTypeMap = { 9 | 'application/json': 'application/json', 10 | 'application/x-www-form-urlencoded': 'application/x-www-form-urlencoded', 11 | }; 12 | 13 | export type ApiRequestType = keyof typeof ApiRequestTypeMap; 14 | export type ApiRequestContentType = keyof typeof ApiRequestContentTypeMap; 15 | -------------------------------------------------------------------------------- /console-ui/src/const/application.ts: -------------------------------------------------------------------------------- 1 | 2 | export const JUGGLE_SERVER_VERSION = "/v1"; 3 | export const JUGGLE_API_PREFIX = "/api" + JUGGLE_SERVER_VERSION; -------------------------------------------------------------------------------- /console-ui/src/const/dataType.ts: -------------------------------------------------------------------------------- 1 | 2 | export const DataTypeMap = { 3 | String: '字符串', 4 | Integer: '整数', 5 | Double: '小数', 6 | Boolean: '布尔', 7 | Date: '日期', 8 | Time: '时间', 9 | Object: '对象', 10 | List: '集合', 11 | }; 12 | 13 | export type DataTypeMap = keyof typeof DataTypeMap; -------------------------------------------------------------------------------- /console-ui/src/const/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api'; 2 | export * from './dataType.ts'; 3 | -------------------------------------------------------------------------------- /console-ui/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | interface ImportMetaEnv { 4 | readonly VITE_API_PROXY: string; 5 | } 6 | 7 | interface ImportMeta { 8 | readonly env: ImportMetaEnv; 9 | } 10 | -------------------------------------------------------------------------------- /console-ui/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import App from './App.vue'; 3 | import router from './router'; 4 | import ElementPlus from 'element-plus'; 5 | import './assets/base.css'; 6 | import 'element-plus/dist/index.css'; 7 | import { userService } from './service'; 8 | 9 | const app = createApp(App); 10 | 11 | app.use(ElementPlus); 12 | app.use(router); 13 | 14 | app.config.errorHandler = (err, instance, info) => { 15 | console.error(err); 16 | }; 17 | 18 | async function startup() { 19 | // 检查登录状态 20 | const isLogin = await userService.check(); 21 | if (!isLogin) { 22 | await router.push({ name: 'login' }); 23 | } 24 | app.mount('#app'); 25 | } 26 | 27 | startup(); 28 | -------------------------------------------------------------------------------- /console-ui/src/service/api/common.ts: -------------------------------------------------------------------------------- 1 | import { request, ResponseResult } from '@/service/base'; 2 | import {JUGGLE_API_PREFIX} from "@/const/application.ts"; 3 | 4 | export function listDataType(): ResponseResult { 5 | return request.get(JUGGLE_API_PREFIX+'/dataType/list'); 6 | } 7 | -------------------------------------------------------------------------------- /console-ui/src/service/api/flow.ts: -------------------------------------------------------------------------------- 1 | import { request, ResponsePageResult, ResponseResult } from '@/service/base'; 2 | import {JUGGLE_API_PREFIX} from "@/const/application.ts"; 3 | 4 | export function updateFlowStatus(flowId: number, flowStatus: number): ResponsePageResult { 5 | return request.put(JUGGLE_API_PREFIX+'/flow/status', { flowId: flowId, flowStatus: flowStatus }); 6 | } 7 | 8 | export async function flowPage(params: { pageNum: number; pageSize: number; flowName?: string; flowType?: string }): ResponsePageResult { 9 | return request.post(JUGGLE_API_PREFIX+'/flow/page', params); 10 | } 11 | 12 | export async function deleteFlow(id: number): ResponseResult { 13 | return request.delete(JUGGLE_API_PREFIX+`/flow/delete/${id}`); 14 | } 15 | -------------------------------------------------------------------------------- /console-ui/src/service/api/index.ts: -------------------------------------------------------------------------------- 1 | import * as userAPI from './user'; 2 | import * as flowDefineAPI from './flowDefine'; 3 | import * as flowAPI from './flow'; 4 | import * as flowVersionAPI from './flowVersion'; 5 | import * as suiteAPI from './suite'; 6 | import * as suiteMarketAPI from './suiteMarket.ts'; 7 | import * as templateMarketAPI from './templateMarket.ts'; 8 | import * as apiAPI from './api'; 9 | import * as objectAPI from './object.ts'; 10 | import * as orderAPI from './order.ts'; 11 | import * as tokenAPI from './token.ts'; 12 | import * as datasourceAPI from './dataSource.ts'; 13 | import * as commonAPI from './common.ts'; 14 | 15 | export { 16 | userAPI, 17 | flowDefineAPI, 18 | flowAPI, 19 | flowVersionAPI, 20 | suiteAPI, 21 | suiteMarketAPI, 22 | templateMarketAPI, 23 | apiAPI, 24 | objectAPI, 25 | orderAPI, 26 | tokenAPI, 27 | datasourceAPI, 28 | commonAPI 29 | }; 30 | -------------------------------------------------------------------------------- /console-ui/src/service/api/order.ts: -------------------------------------------------------------------------------- 1 | import { request, type ResponseResult } from '@/service/base'; 2 | import {CreateOrder} from "@/typings"; 3 | import {JUGGLE_API_PREFIX} from "@/const/application.ts"; 4 | 5 | export async function createOrder(params: { 6 | orderName: string; 7 | orderType: number; 8 | goodsId: number; 9 | }): ResponseResult { 10 | return request.post(JUGGLE_API_PREFIX+`/order/createOrder`, params); 11 | } 12 | 13 | export async function getOrderPayStatus(orderNo: string): ResponseResult { 14 | return request.get(JUGGLE_API_PREFIX+`/order/getOrderPayStatus/${orderNo}`); 15 | } 16 | 17 | 18 | -------------------------------------------------------------------------------- /console-ui/src/service/api/suite.ts: -------------------------------------------------------------------------------- 1 | import { request, type ResponsePageResult, type ResponseResult } from '../base'; 2 | import {JUGGLE_API_PREFIX} from "@/const/application.ts"; 3 | 4 | export async function addSuite(params: { suiteCode: string; suiteName: string; suiteDesc: string }): ResponseResult { 5 | return request.post(JUGGLE_API_PREFIX+'/suite/add', params); 6 | } 7 | 8 | export async function deleteSuite(id: number): ResponseResult { 9 | return request.delete(JUGGLE_API_PREFIX+`/suite/delete/${id}`); 10 | } 11 | 12 | export async function updateSuite(params: { id: string; suiteCode: string; suiteName: string; suiteDesc: string }): ResponseResult { 13 | return request.put(JUGGLE_API_PREFIX+'/suite/update', params); 14 | } 15 | 16 | export async function suitePage(params: { pageNum: number; pageSize: number; suiteName?: string }): ResponsePageResult { 17 | return request.post(JUGGLE_API_PREFIX+'/suite/page', params); 18 | } 19 | 20 | export async function suiteList(): ResponseResult { 21 | return request.get(JUGGLE_API_PREFIX+'/suite/list'); 22 | } 23 | -------------------------------------------------------------------------------- /console-ui/src/service/api/suiteMarket.ts: -------------------------------------------------------------------------------- 1 | import { request, type ResponseResult } from '../base'; 2 | import {JUGGLE_API_PREFIX} from "@/const/application.ts"; 3 | 4 | export async function querySuiteMarketClassifyList(): ResponseResult { 5 | return request.post(JUGGLE_API_PREFIX+'/suite/market/classify'); 6 | } 7 | 8 | export async function querySuiteMarketList(params: { 9 | pageNum:number; 10 | pageSize:number; 11 | suiteName: string; 12 | suiteClassifyId: number|null; 13 | }): ResponseResult { 14 | return request.post(JUGGLE_API_PREFIX+'/suite/market',params); 15 | } 16 | 17 | export async function querySuiteMarketDetail(suiteId: number): ResponseResult { 18 | return request.get(JUGGLE_API_PREFIX+'/suite/market/info/' + suiteId); 19 | } 20 | 21 | export async function installSuiteMarket(suiteId: number,bill?:string): ResponseResult { 22 | return request.post(JUGGLE_API_PREFIX+'/suite/market/install', { 23 | suiteId: suiteId, 24 | bill: bill 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /console-ui/src/service/api/token.ts: -------------------------------------------------------------------------------- 1 | import { request, ResponsePageResult, type ResponseResult } from '@/service/base'; 2 | import {JUGGLE_API_PREFIX} from "@/const/application.ts"; 3 | 4 | export async function addToken(tokenDesc: string): ResponseResult { 5 | return request.post(JUGGLE_API_PREFIX+`/token/add`, tokenDesc); 6 | } 7 | 8 | export async function deleteTokenById(tokenId: number): ResponseResult { 9 | return request.delete(JUGGLE_API_PREFIX+`/token/delete/${tokenId}`); 10 | } 11 | 12 | export async function updateTokenById(params: { id: number; tokenDesc: string }): ResponseResult { 13 | return request.put(JUGGLE_API_PREFIX+`/token/update`, params); 14 | } 15 | 16 | export async function tokenPage(params: { pageNum: number; pageSize: number }): ResponsePageResult { 17 | return request.post(JUGGLE_API_PREFIX+'/token/page', params); 18 | } 19 | -------------------------------------------------------------------------------- /console-ui/src/service/api/user.ts: -------------------------------------------------------------------------------- 1 | import { request, type ResponseResult } from '@/service/base'; 2 | import {JUGGLE_API_PREFIX} from "@/const/application.ts"; 3 | 4 | export function login(data: { userName: string; password: string }): ResponseResult { 5 | return request.post(JUGGLE_API_PREFIX+'/user/login', data); 6 | } 7 | 8 | export function logout() {} 9 | 10 | export function check() {} 11 | 12 | export function getProductInfo(): ResponseResult { 13 | return request.get(JUGGLE_API_PREFIX+'/user/product/info'); 14 | } -------------------------------------------------------------------------------- /console-ui/src/service/base/errorHander.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/src/service/base/errorHander.ts -------------------------------------------------------------------------------- /console-ui/src/service/index.ts: -------------------------------------------------------------------------------- 1 | export * from './module'; 2 | -------------------------------------------------------------------------------- /console-ui/src/service/module/common.ts: -------------------------------------------------------------------------------- 1 | import { commonAPI } from '@/service/api'; 2 | 3 | export async function listDataType() { 4 | return commonAPI.listDataType(); 5 | } 6 | 7 | export const dataType = (function () { 8 | let dataTypeList: any[] = []; 9 | let pedding: any = null; 10 | async function getList(useCache: boolean = true) { 11 | if (!useCache || dataTypeList.length === 0) { 12 | pedding = pedding || listDataType(); 13 | const res = await pedding; 14 | if (res.success) { 15 | pedding = null; 16 | dataTypeList = res.result; 17 | } 18 | } 19 | return dataTypeList; 20 | } 21 | function clearList() { 22 | dataTypeList = []; 23 | } 24 | return { 25 | getList, 26 | clearList, 27 | }; 28 | })(); 29 | -------------------------------------------------------------------------------- /console-ui/src/service/module/flow.ts: -------------------------------------------------------------------------------- 1 | import { flowAPI } from '@/service/api'; 2 | 3 | export async function updateFlowStatus(flowId: number, flowStatus: number) { 4 | return flowAPI.updateFlowStatus(flowId, flowStatus); 5 | } 6 | 7 | export async function queryFlowPage(params: Parameters[0]) { 8 | return flowAPI.flowPage(params); 9 | } 10 | 11 | export async function deleteFlowById(params: Parameters[0]) { 12 | return flowAPI.deleteFlow(params); 13 | } 14 | -------------------------------------------------------------------------------- /console-ui/src/service/module/flowVersion.ts: -------------------------------------------------------------------------------- 1 | import { flowVersionAPI } from '@/service/api'; 2 | 3 | export async function getLatestDeployVersion(flowId: number) { 4 | return flowVersionAPI.getLatestDeployVersion(flowId); 5 | } 6 | 7 | export async function updateFlowVersionStatus(flowVersionId: number, flowVersionStatus: number) { 8 | return flowVersionAPI.updateFlowVersionStatus(flowVersionId, flowVersionStatus); 9 | } 10 | 11 | export async function queryFlowVersionPage(params: Parameters[0]) { 12 | return flowVersionAPI.flowVersionPage(params); 13 | } 14 | 15 | export async function deleteFlowVersionById(params: Parameters[0]) { 16 | return flowVersionAPI.deleteFlowVersion(params); 17 | } 18 | 19 | export async function getAsyncFlowResult(flowInstanceId: string) { 20 | return flowVersionAPI.getAsyncFlowResult(flowInstanceId); 21 | } 22 | -------------------------------------------------------------------------------- /console-ui/src/service/module/index.ts: -------------------------------------------------------------------------------- 1 | import * as userService from './user'; 2 | import * as flowDefineService from './flowDefine'; 3 | import * as flowService from './flow'; 4 | import * as flowVersionService from './flowVersion'; 5 | import * as suiteService from './suite'; 6 | import * as suiteMarketService from './suiteMarketService.ts'; 7 | import * as templateMarketService from './templateMarketService.ts'; 8 | import * as apiService from './api'; 9 | import * as objectService from './object'; 10 | import * as orderService from './orderService.ts'; 11 | import * as tokenService from './token'; 12 | import * as dataSourceService from './dataSource.ts'; 13 | import * as commonService from './common'; 14 | 15 | export { 16 | userService, 17 | flowDefineService, 18 | flowService, 19 | flowVersionService, 20 | suiteService, 21 | suiteMarketService, 22 | templateMarketService, 23 | apiService, 24 | objectService, 25 | orderService, 26 | tokenService, 27 | dataSourceService, 28 | commonService, 29 | }; 30 | -------------------------------------------------------------------------------- /console-ui/src/service/module/object.ts: -------------------------------------------------------------------------------- 1 | import { objectAPI } from '@/service/api'; 2 | import { ResponseResult } from '@/service/base'; 3 | import { ObjectInfo } from '@/typings'; 4 | 5 | export async function addObject(params: Parameters[0]) { 6 | return objectAPI.addObject(params); 7 | } 8 | 9 | export async function deleteObject(objectId: number) { 10 | return objectAPI.deleteObjectById(objectId); 11 | } 12 | 13 | export async function updateObject(params: Parameters[0]) { 14 | return objectAPI.updateObjectById(params); 15 | } 16 | 17 | export async function queryObjectInfo(objectId: number): ResponseResult { 18 | return objectAPI.queryObjectInfo(objectId); 19 | } 20 | 21 | export async function isExistObjectKey(params: Parameters[0]): ResponseResult { 22 | return objectAPI.isExistObjectKey(params); 23 | } 24 | 25 | export async function queryObjectPage(params: Parameters[0]) { 26 | return objectAPI.objectPage(params); 27 | } 28 | -------------------------------------------------------------------------------- /console-ui/src/service/module/orderService.ts: -------------------------------------------------------------------------------- 1 | import { orderAPI} from '@/service/api' 2 | 3 | export async function createOrder(params: Parameters[0]) { 4 | return orderAPI.createOrder(params); 5 | } 6 | 7 | export async function getOrderPayStatus(orderNo: string) { 8 | return orderAPI.getOrderPayStatus(orderNo); 9 | } 10 | 11 | 12 | -------------------------------------------------------------------------------- /console-ui/src/service/module/suite.ts: -------------------------------------------------------------------------------- 1 | import { suiteAPI } from '../api'; 2 | 3 | export async function addSuite(params: Parameters[0]) { 4 | return suiteAPI.addSuite(params); 5 | } 6 | 7 | export async function deleteSuite(suiteId: number) { 8 | return suiteAPI.deleteSuite(suiteId); 9 | } 10 | 11 | export async function updateSuite(params: Parameters[0]) { 12 | return suiteAPI.updateSuite(params); 13 | } 14 | 15 | export async function querySuitePage(params: Parameters[0]) { 16 | return suiteAPI.suitePage(params); 17 | } 18 | 19 | export async function querySuiteList() { 20 | return suiteAPI.suiteList(); 21 | } 22 | -------------------------------------------------------------------------------- /console-ui/src/service/module/token.ts: -------------------------------------------------------------------------------- 1 | import { tokenAPI } from '@/service/api'; 2 | 3 | export async function addToken(tokenDesc: string) { 4 | return tokenAPI.addToken(tokenDesc); 5 | } 6 | 7 | export async function deleteToken(tokenId: number) { 8 | return tokenAPI.deleteTokenById(tokenId); 9 | } 10 | 11 | export async function updateToken(params: Parameters[0]) { 12 | return tokenAPI.updateTokenById(params); 13 | } 14 | 15 | export async function queryTokenPage(params: Parameters[0]) { 16 | return tokenAPI.tokenPage(params); 17 | } 18 | -------------------------------------------------------------------------------- /console-ui/src/typings/api.ts: -------------------------------------------------------------------------------- 1 | import { InputParams, OutputParams } from '@/typings/parameter.ts'; 2 | 3 | export interface ApiHeader { 4 | headerKey: string; 5 | headerName: string; 6 | dataType: string; 7 | required: boolean; 8 | headerDesc: string; 9 | } 10 | 11 | export interface ApiInfo { 12 | id: number | null; 13 | suiteId: number | null; 14 | suiteFlag?: number | null; 15 | apiCode: string; 16 | apiUrl: string; 17 | apiName: string; 18 | apiDesc: string; 19 | apiRequestType: string; 20 | apiRequestContentType: string; 21 | apiHeaders: ApiHeader[]; 22 | apiInputParams: InputParams[]; 23 | apiOutputParams: OutputParams[]; 24 | } 25 | -------------------------------------------------------------------------------- /console-ui/src/typings/dataType.ts: -------------------------------------------------------------------------------- 1 | export enum DataTypeEnum { 2 | Basic = 1, 3 | List = 2, 4 | Object = 3, 5 | } 6 | 7 | export type DataTypeInfo = { 8 | id: number; 9 | dataTypeClassify: DataTypeEnum; 10 | type: string; 11 | displayName: string; 12 | objectKey: string; 13 | objectStructure: string; 14 | }; 15 | 16 | export interface DataType { 17 | type: string; 18 | itemType?: string | null; 19 | objectKey?: string | null; 20 | objectStructure?: string | null; 21 | } -------------------------------------------------------------------------------- /console-ui/src/typings/flowDefine.ts: -------------------------------------------------------------------------------- 1 | import { InputParams, OutputParams } from '@/typings/parameter.ts'; 2 | 3 | export interface FlowDefineInfo { 4 | id: number | null; 5 | flowName: string; 6 | flowType: string; 7 | flowContent?: string; 8 | remark: string; 9 | flowInputParams: InputParams[]; 10 | flowOutputParams: OutputParams[]; 11 | } 12 | -------------------------------------------------------------------------------- /console-ui/src/typings/flowDesign.ts: -------------------------------------------------------------------------------- 1 | import {DataType} from "@/typings/dataType.ts"; 2 | 3 | export enum valueType { 4 | VARIABLE = 'VARIABLE', 5 | CONSTANT = 'CONSTANT', 6 | INPUT_PARAM = 'INPUT_PARAM', 7 | OUTPUT_PARAM = 'OUTPUT_PARAM', 8 | HEADER = 'HEADER', 9 | } 10 | 11 | export type RuleItem = { 12 | source: string; 13 | sourceDataType: DataType | null; 14 | sourceType: valueType; 15 | target: string; 16 | targetDataType: DataType | null; 17 | targetType: valueType; 18 | required?: boolean; 19 | }; 20 | -------------------------------------------------------------------------------- /console-ui/src/typings/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api.ts'; 2 | export * from './dataType.ts'; 3 | export * from './flowDefine'; 4 | export * from './object.ts'; 5 | export * from './order.ts'; 6 | export * from './flowDesign'; 7 | export * from './parameter'; 8 | export * from './suite'; 9 | export * from './template.ts'; 10 | -------------------------------------------------------------------------------- /console-ui/src/typings/object.ts: -------------------------------------------------------------------------------- 1 | export interface ObjectProperty { 2 | propKey: string; 3 | propName: string; 4 | dataType: string; 5 | } 6 | 7 | export interface ObjectInfo { 8 | id: number | null; 9 | objectKey: string; 10 | objectName: string; 11 | objectDesc: string; 12 | props: ObjectProperty[]; 13 | } 14 | -------------------------------------------------------------------------------- /console-ui/src/typings/order.ts: -------------------------------------------------------------------------------- 1 | export interface CreateOrder { 2 | orderNo: string; 3 | qrCode: string; 4 | } 5 | -------------------------------------------------------------------------------- /console-ui/src/typings/parameter.ts: -------------------------------------------------------------------------------- 1 | import {DataType} from "@/typings/dataType.ts"; 2 | 3 | export interface InputParams { 4 | paramKey: string; 5 | paramName: string; 6 | dataType: DataType; 7 | paramPosition: string; 8 | required: boolean; 9 | paramDesc: string; 10 | } 11 | 12 | export interface OutputParams { 13 | paramKey: string; 14 | paramName: string; 15 | dataType: DataType; 16 | paramDesc: string; 17 | } 18 | -------------------------------------------------------------------------------- /console-ui/src/typings/suite.ts: -------------------------------------------------------------------------------- 1 | export interface SuiteMarket { 2 | id: number | null; 3 | suiteCode: string; 4 | suiteName: string; 5 | suiteImage: string; 6 | suiteDesc: string; 7 | } 8 | 9 | export interface SuiteMarketInfo { 10 | id: number | null; 11 | suiteCode: string; 12 | suiteName: string; 13 | suiteImage: string; 14 | suiteDesc: string; 15 | priceStatus: number; 16 | suitePrice: number; 17 | suiteHelpDocJson: string; 18 | installStatus: boolean; 19 | apiList: any[]; 20 | } -------------------------------------------------------------------------------- /console-ui/src/typings/template.ts: -------------------------------------------------------------------------------- 1 | import {SuiteMarket} from "@/typings/suite.ts"; 2 | 3 | export interface TemplateMarket { 4 | id: number | null; 5 | templateName: string; 6 | templateRemark: string; 7 | recommend: boolean; 8 | suiteList: SuiteMarket[]; 9 | } 10 | 11 | export interface TemplateMarketInfo { 12 | id: number | null; 13 | templateName: string; 14 | templateRemark: string; 15 | recommend: boolean; 16 | priceStatus: number; 17 | templatePrice: number; 18 | suiteList: SuiteMarket[]; 19 | noBuySuiteList: SuiteMarket[]; 20 | flowContent:string; 21 | } -------------------------------------------------------------------------------- /console-ui/src/views/HomeView.vue: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /console-ui/src/views/NotFound.vue: -------------------------------------------------------------------------------- 1 | 4 | 7 | -------------------------------------------------------------------------------- /console-ui/src/views/RouterNest.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /console-ui/src/views/common/AboutView.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /console-ui/src/views/common/SettingView.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /console-ui/src/views/common/UserView.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /console-ui/src/views/common/index.ts: -------------------------------------------------------------------------------- 1 | import AboutView from './AboutView.vue'; 2 | import SettingView from './SettingView.vue'; 3 | import UserView from './UserView.vue'; 4 | 5 | export const CommonRoutes = [ 6 | { 7 | path: 'about', 8 | name: 'about', 9 | component: AboutView, 10 | meta: { name: '关于' }, 11 | }, 12 | { 13 | path: 'setting', 14 | name: 'setting', 15 | component: SettingView, 16 | meta: { name: '设置' }, 17 | }, 18 | { 19 | path: 'user', 20 | name: 'user', 21 | component: UserView, 22 | meta: { name: '用户' }, 23 | }, 24 | ]; 25 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/define/index.ts: -------------------------------------------------------------------------------- 1 | import FlowDefineTable from './FlowDefineTable.vue'; 2 | import FlowDefineDrawer from './FlowDefineDrawer.vue'; 3 | import FlowDefineFilter from './FlowDefineFilter.vue'; 4 | 5 | export { FlowDefineTable, FlowDefineDrawer, FlowDefineFilter }; 6 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/components/index.ts: -------------------------------------------------------------------------------- 1 | import ZoomTool from './ZoomTool.vue'; 2 | import AddNodeModal from './AddNodeModal.vue'; 3 | import EditNodeDrawer from './EditNodeDrawer.vue'; 4 | import ConditionFilterModal from './ConditionFilterModal.vue'; 5 | import { LeftMenu } from './left-menu'; 6 | 7 | export { ZoomTool, AddNodeModal, EditNodeDrawer, ConditionFilterModal, LeftMenu }; 8 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/components/left-menu/index.ts: -------------------------------------------------------------------------------- 1 | import LeftMenu from './LeftMenu.vue'; 2 | 3 | export { LeftMenu }; 4 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/components/node-form/index.ts: -------------------------------------------------------------------------------- 1 | import ConditionForm from './ConditionForm.vue'; 2 | import MethodForm from './MethodForm.vue'; 3 | import CodeForm from './CodeForm.vue'; 4 | import MySqlForm from './MySqlForm.vue'; 5 | import { ElementType } from '../../types'; 6 | import AssignForm from "./AssignForm.vue"; 7 | 8 | const nodeFormMap = { 9 | [ElementType.CONDITION]: ConditionForm, 10 | [ElementType.METHOD]: MethodForm, 11 | [ElementType.CODE]: CodeForm, 12 | [ElementType.ASSIGN]: AssignForm, 13 | [ElementType.MYSQL]: MySqlForm, 14 | }; 15 | 16 | export function getNodeForm(type: ElementType) { 17 | return nodeFormMap[type as keyof typeof nodeFormMap]; 18 | } 19 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/config.ts: -------------------------------------------------------------------------------- 1 | import { ElementType } from '@/views/flow/design/types.ts'; 2 | 3 | export const nodeMap = { 4 | [ElementType.METHOD]: { 5 | nodeName: '方法节点', 6 | nodeHeaderColor: '#6bcb7b', 7 | }, 8 | [ElementType.CONDITION]: { 9 | nodeName: '判断节点', 10 | nodeHeaderColor: '#e5cf7a', 11 | }, 12 | [ElementType.ASSIGN]: { 13 | nodeName: '赋值节点', 14 | nodeHeaderColor: '#e0b290', 15 | }, 16 | [ElementType.CODE]: { 17 | nodeName: '代码节点', 18 | nodeHeaderColor: '#b471e7', 19 | }, 20 | [ElementType.MYSQL]: { 21 | nodeName: 'MySql节点', 22 | nodeHeaderColor: '#48a6bb', 23 | }, 24 | [ElementType.AI]: { 25 | nodeName: 'AI节点', 26 | nodeHeaderColor: '#640505', 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/data/index.ts: -------------------------------------------------------------------------------- 1 | import { DataNode, DataBranch } from './DataNode'; 2 | import { generateDataTree, initNewNode } from './generate'; 3 | import { TreeNode } from './TreeNode'; 4 | 5 | export { TreeNode, DataNode, DataBranch, generateDataTree, initNewNode }; 6 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/hooks/immer.ts: -------------------------------------------------------------------------------- 1 | import { produce } from 'immer'; 2 | import { ShallowRef, shallowRef } from 'vue'; 3 | 4 | export function useImmer(baseState: T) { 5 | const state = shallowRef(baseState); 6 | const update = (updater: (draft: T) => void) => { 7 | state.value = produce(state.value, updater); 8 | }; 9 | return [state, update] as [ShallowRef, typeof update]; 10 | } 11 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './types'; 3 | export * from './renderer'; 4 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/readme.md: -------------------------------------------------------------------------------- 1 | 1. 数据 2 | | 3 | 2. 数据树(数据) 4 | | 5 | 3. 布局树(数据树) 6 | | 7 | 4. 渲染(布局树,事件) 8 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/renderer/layout/index.ts: -------------------------------------------------------------------------------- 1 | import { LayoutNode } from './LayoutNode'; 2 | import { VerticalLayout } from './vertical'; 3 | 4 | export { LayoutNode, VerticalLayout }; 5 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/design/utils.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console-ui/src/views/flow/design/utils.ts -------------------------------------------------------------------------------- /console-ui/src/views/flow/list/index.ts: -------------------------------------------------------------------------------- 1 | import FlowTable from './FlowTable.vue'; 2 | import FlowFilter from './FlowFilter.vue'; 3 | 4 | export { FlowTable, FlowFilter }; 5 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/version/FlowVersionFilter.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 35 | -------------------------------------------------------------------------------- /console-ui/src/views/flow/version/index.ts: -------------------------------------------------------------------------------- 1 | import FlowVersionFilter from './FlowVersionFilter.vue'; 2 | import FlowVersionTable from './FlowVersionTable.vue'; 3 | 4 | export { FlowVersionFilter, FlowVersionTable }; 5 | -------------------------------------------------------------------------------- /console-ui/src/views/object/ObjectFilter.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 31 | -------------------------------------------------------------------------------- /console-ui/src/views/object/index.ts: -------------------------------------------------------------------------------- 1 | import ObjectFilter from './ObjectFilter.vue'; 2 | import ObjectTable from './ObjectTable.vue'; 3 | import ObjectDrawer from './ObjectDrawer.vue'; 4 | 5 | export { ObjectFilter, ObjectTable, ObjectDrawer }; 6 | -------------------------------------------------------------------------------- /console-ui/src/views/suite/api/index.ts: -------------------------------------------------------------------------------- 1 | import ListFilter from './ApiFilter.vue'; 2 | import ListTable from './ApiTable.vue'; 3 | import ListForm from './ApiDrawer.vue'; 4 | 5 | export { ListFilter, ListTable, ListForm }; 6 | -------------------------------------------------------------------------------- /console-ui/src/views/suite/index.ts: -------------------------------------------------------------------------------- 1 | import ApiList from './ApiList.vue'; 2 | import RouterNest from '@/views/RouterNest.vue'; 3 | import ApiDebug from './ApiDebug.vue'; 4 | import SuiteList from './SuiteList.vue'; 5 | 6 | export const SuiteRoutes = [ 7 | { 8 | path: 'suite', 9 | name: 'suite', 10 | component: RouterNest, 11 | redirect: () => ({ name: 'suite-list' }), 12 | meta: { name: '套件' }, 13 | children: [ 14 | { 15 | path: 'list', 16 | name: 'suite-list', 17 | component: SuiteList, 18 | meta: { name: '套件列表' }, 19 | }, 20 | { 21 | path: 'api', 22 | name: 'api-list', 23 | component: ApiList, 24 | meta: { name: '接口列表' }, 25 | }, 26 | { 27 | path: 'debug/:apiId', 28 | name: 'api-debug', 29 | component: ApiDebug, 30 | meta: { name: '接口调试' }, 31 | }, 32 | ], 33 | }, 34 | ]; 35 | -------------------------------------------------------------------------------- /console-ui/src/views/suite/suite/SuiteFilter.vue: -------------------------------------------------------------------------------- 1 | 17 | 30 | -------------------------------------------------------------------------------- /console-ui/src/views/suite/suite/index.ts: -------------------------------------------------------------------------------- 1 | import SuiteFilter from './SuiteFilter.vue'; 2 | import SuiteTable from './SuiteTable.vue'; 3 | import SuiteForm from './SuiteForm.vue'; 4 | 5 | export { SuiteFilter, SuiteTable, SuiteForm }; 6 | -------------------------------------------------------------------------------- /console-ui/src/views/system/datasource/index.ts: -------------------------------------------------------------------------------- 1 | import DataSourceTable from './DataSourceTable.vue'; 2 | import DataSourceDrawer from './DataSourceDrawer.vue'; 3 | 4 | export { DataSourceTable, DataSourceDrawer }; 5 | -------------------------------------------------------------------------------- /console-ui/src/views/system/index.ts: -------------------------------------------------------------------------------- 1 | import RouterNest from '@/views/RouterNest.vue'; 2 | import TokenList from '@/views/system/TokenList.vue'; 3 | import DataSourceList from '@/views/system/DataSourceList.vue'; 4 | 5 | export const SystemRoutes = [ 6 | { 7 | path: 'system', 8 | name: 'system', 9 | component: RouterNest, 10 | redirect: () => ({ name: 'api-token' }), 11 | meta: { name: '设置' }, 12 | children: [ 13 | { 14 | path: 'token', 15 | name: 'token-list', 16 | component: TokenList, 17 | meta: { name: '令牌' }, 18 | }, 19 | { 20 | path: 'datasource', 21 | name: 'datasource-list', 22 | component: DataSourceList, 23 | meta: { name: '数据源' }, 24 | }, 25 | ], 26 | }, 27 | ]; 28 | -------------------------------------------------------------------------------- /console-ui/src/views/system/token/index.ts: -------------------------------------------------------------------------------- 1 | import TokenTable from './TokenTable.vue'; 2 | import TokenForm from './TokenForm.vue'; 3 | 4 | export { TokenTable, TokenForm }; 5 | -------------------------------------------------------------------------------- /console-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | "baseUrl": "./", 9 | "paths": { 10 | "@/*": ["src/*"], 11 | "@/views/*": ["src/views/*"] 12 | }, 13 | 14 | /* Bundler mode */ 15 | "moduleResolution": "bundler", 16 | "allowImportingTsExtensions": true, 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "noEmit": true, 20 | "jsx": "preserve", 21 | 22 | /* Linting */ 23 | "strict": true, 24 | "noUnusedLocals": true, 25 | "noUnusedParameters": true, 26 | "noFallthroughCasesInSwitch": true, 27 | "allowSyntheticDefaultImports": true 28 | }, 29 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 30 | "references": [{ "path": "./tsconfig.node.json" }] 31 | } 32 | -------------------------------------------------------------------------------- /console-ui/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts", "src/env.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /console-ui/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | import { defineConfig, loadEnv } from 'vite' 3 | import vue from '@vitejs/plugin-vue' 4 | import monacoEditorPlugin from 'vite-plugin-monaco-editor' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig(({ mode }) => { 8 | const env = loadEnv(mode, process.cwd()) 9 | return { 10 | plugins: [ 11 | vue(), 12 | monacoEditorPlugin({ 13 | languageWorkers: ['editorWorkerService', 'typescript', 'json'] 14 | }) 15 | 16 | ], 17 | resolve: { 18 | alias: { 19 | '@': fileURLToPath(new URL('./src', import.meta.url)) 20 | } 21 | }, 22 | server: { 23 | open: true, 24 | host: '0.0.0.0', 25 | proxy: { 26 | '^/api': env.VITE_API_PROXY, 27 | '^/open': env.VITE_API_PROXY 28 | } 29 | } 30 | } 31 | }) 32 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/assembler/IOrderAssembler.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.assembler; 2 | 3 | import net.somta.juggle.console.domain.order.vo.CreateOrderVO; 4 | import net.somta.juggle.console.interfaces.dto.OrderDTO; 5 | import org.mapstruct.Mapper; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | /** 9 | * @author husong 10 | * @since 1.2.2 11 | */ 12 | @Mapper 13 | public interface IOrderAssembler { 14 | IOrderAssembler IMPL = Mappers.getMapper(IOrderAssembler.class); 15 | 16 | OrderDTO voToDto(CreateOrderVO order); 17 | } 18 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/assembler/IParameterAssembler.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.assembler; 2 | 3 | import org.mapstruct.Mapper; 4 | import org.mapstruct.factory.Mappers; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | @Mapper 10 | public interface IParameterAssembler { 11 | IParameterAssembler IMPL = Mappers.getMapper(IParameterAssembler.class); 12 | } 13 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/assembler/flow/IFlowInfoAssembler.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.assembler.flow; 2 | 3 | import net.somta.juggle.console.domain.flow.flowinfo.vo.FlowInfoQueryVO; 4 | import net.somta.juggle.console.domain.flow.flowinfo.vo.FlowInfoVO; 5 | import net.somta.juggle.console.interfaces.dto.flow.FlowInfoDTO; 6 | import net.somta.juggle.console.interfaces.param.flow.FlowInfoPageParam; 7 | import org.mapstruct.Mapper; 8 | import org.mapstruct.factory.Mappers; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @author husong 14 | */ 15 | @Mapper 16 | public interface IFlowInfoAssembler { 17 | IFlowInfoAssembler IMPL = Mappers.getMapper(IFlowInfoAssembler.class); 18 | 19 | FlowInfoQueryVO paramToVo(FlowInfoPageParam flowInfoPageParam); 20 | 21 | List voListToDtoList(List flowInfoList); 22 | } 23 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/assembler/system/ITokenAssembler.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.assembler.system; 2 | 3 | import net.somta.juggle.console.domain.system.token.vo.TokenVO; 4 | import net.somta.juggle.console.interfaces.dto.system.TokenDTO; 5 | import org.mapstruct.Mapper; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author husong 12 | */ 13 | @Mapper 14 | public interface ITokenAssembler { 15 | 16 | ITokenAssembler IMPL = Mappers.getMapper(ITokenAssembler.class); 17 | 18 | List voListToDtoList(List tokenVoList); 19 | } 20 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/service/IDataTypeInfoService.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.service; 2 | 3 | import net.somta.juggle.console.interfaces.dto.DataTypeOptionDTO; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author husong 9 | */ 10 | public interface IDataTypeInfoService { 11 | 12 | /** 13 | * Get a list of data types 14 | * @return Data Type List 15 | */ 16 | List getDataTypeOptions(); 17 | } 18 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/service/IOrderService.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.service; 2 | 3 | import net.somta.juggle.console.interfaces.dto.OrderDTO; 4 | import net.somta.juggle.console.interfaces.param.OrderParam; 5 | 6 | public interface IOrderService { 7 | OrderDTO createOrder(OrderParam orderParam); 8 | 9 | String getOrderPayStatus(String orderNo); 10 | } 11 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/service/IUserService.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.service; 2 | 3 | import net.somta.juggle.console.domain.user.UserAO; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public interface IUserService { 9 | 10 | /** 11 | * Update user Information 12 | * @param userAo User Information 13 | * @return boolean 14 | */ 15 | Boolean updateUser(UserAO userAo); 16 | 17 | /** 18 | * Query user information based on userId 19 | * @param userId userid 20 | * @return User Information 21 | */ 22 | UserAO queryUserById(Long userId); 23 | 24 | /** 25 | * Query user information based on userName 26 | * @param userName user 27 | * @return User Information 28 | */ 29 | UserAO queryUserByUserName(String userName); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/service/flow/IFlowInfoService.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.service.flow; 2 | 3 | import com.github.pagehelper.PageInfo; 4 | import net.somta.juggle.console.interfaces.dto.flow.FlowInfoDTO; 5 | import net.somta.juggle.console.interfaces.param.flow.FlowInfoPageParam; 6 | 7 | /** 8 | * @author husong 9 | */ 10 | public interface IFlowInfoService { 11 | 12 | /** 13 | * Delete flow information based on flow ID 14 | * @param flowId flow id 15 | * @return Boolean 16 | */ 17 | Boolean deleteFlowInfo(Long flowId); 18 | 19 | /** 20 | * Query flow information pagination list 21 | * @param flowInfoPageParam Flow information pagination query object 22 | * @return Flow Information Paging Object 23 | */ 24 | PageInfo getFlowInfoPageList(FlowInfoPageParam flowInfoPageParam); 25 | } 26 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/service/flow/IFlowRuntimeService.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.service.flow; 2 | 3 | import net.somta.juggle.common.param.TriggerDataParam; 4 | import net.somta.juggle.core.model.Flow; 5 | import net.somta.juggle.core.model.FlowResult; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * @author Gavin 11 | */ 12 | public interface IFlowRuntimeService { 13 | /** 14 | * start flow 15 | * @param flow flow object 16 | * @param flowType The type of this flow 17 | * @param triggerData trigger flow data 18 | * @return sync flow result 19 | */ 20 | FlowResult triggerFlow(Flow flow, String flowType, TriggerDataParam triggerData); 21 | 22 | /** 23 | * get async flow result 24 | * @param flowInstanceId 25 | * @return async flow result 26 | */ 27 | Map getAsyncFlowResult(String flowInstanceId); 28 | } 29 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/application/service/system/IDataSourceManager.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.application.service.system; 2 | 3 | import net.somta.juggle.core.executor.data.IDataSource; 4 | import net.somta.juggle.core.model.DataSource; 5 | 6 | /** 7 | * @author husong 8 | * @since 1.2.0 9 | */ 10 | public interface IDataSourceManager extends IDataSource { 11 | 12 | void deleteDataSourceFromCache(Long dataSourceId); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/definition/enums/FlowDefinitionErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.definition.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum FlowDefinitionErrorEnum implements IBaseError { 10 | FLOW_PARAM_ERROR(1000, "流程参数不能为空"), 11 | FLOW_DEFINITION_NOT_EXIST(1001, "流程定义不存在"), 12 | FLOW_DEFINITION_ID_IS_NULL_ERROR(1002, "流程定义ID不能为空"), 13 | FLOW_DEFINITION_CONTENT_IS_NULL_ERROR(1003, "流程定义内容不能为空"), 14 | FLOW_DEFINITION_CONTENT_VALIDATOR_ERROR(1004, "流程定义内容校验失败"); 15 | 16 | private int errorCode; 17 | private String errorMsg; 18 | 19 | FlowDefinitionErrorEnum(int errorCode, String errorMsg) { 20 | this.errorCode = errorCode; 21 | this.errorMsg = errorMsg; 22 | } 23 | 24 | @Override 25 | public long getErrorCode() { 26 | return ApplicationConstants.FLOW_DEFINITION_CODE + errorCode; 27 | } 28 | 29 | @Override 30 | public String getErrorMsg() { 31 | return errorMsg; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/definition/enums/VariableErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.definition.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum VariableErrorEnum implements IBaseError { 10 | VARIABLE_PARAM_IS_NULL_ERROR(1000, "变量参数不能为空"), 11 | VARIABLE_ID_IS_NULL_ERROR(1000, "变量ID不能为空"), 12 | ; 13 | 14 | private int errorCode; 15 | private String errorMsg; 16 | 17 | VariableErrorEnum(int errorCode, String errorMsg) { 18 | this.errorCode = errorCode; 19 | this.errorMsg = errorMsg; 20 | } 21 | 22 | @Override 23 | public long getErrorCode() { 24 | return ApplicationConstants.VARIABLE_CODE + errorCode; 25 | } 26 | 27 | @Override 28 | public String getErrorMsg() { 29 | return errorMsg; 30 | } 31 | } -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/definition/enums/VariableTypeEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.definition.enums; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public enum VariableTypeEnum { 7 | INPUT_PARAM_VARIABLE(1,"入参变量"), 8 | OUTPUT_PARAM_VARIABLE(2,"出参变量"), 9 | MIDDLE_VARIABLE(3,"中间变量"); 10 | 11 | private int code; 12 | private String name; 13 | 14 | VariableTypeEnum(int code, String name) { 15 | this.code = code; 16 | this.name = name; 17 | } 18 | 19 | public int getCode() { 20 | return code; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/definition/repository/IFlowDefinitionRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.definition.repository; 2 | 3 | import net.somta.juggle.console.domain.flow.definition.FlowDefinitionAO; 4 | import net.somta.juggle.console.domain.flow.definition.vo.FlowDefinitionInfoQueryVO; 5 | import net.somta.juggle.console.domain.flow.definition.vo.FlowDefinitionInfoVO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author husong 11 | */ 12 | public interface IFlowDefinitionRepository { 13 | Long addFlowDefinition(FlowDefinitionAO flowDefinitionAo); 14 | 15 | Boolean deleteFlowDefinitionById(Long flowDefinitionId); 16 | 17 | Boolean updateFlowDefinition(FlowDefinitionAO flowDefinitionAo); 18 | 19 | Boolean saveFlowDefinitionContent(FlowDefinitionAO flowDefinitionAo); 20 | 21 | FlowDefinitionAO queryFlowDefinitionInfo(Long flowDefinitionId); 22 | 23 | FlowDefinitionAO queryFlowDefinitionByKey(String flowKey); 24 | 25 | List queryFlowDefinitionList(FlowDefinitionInfoQueryVO flowDefinitionInfoQueryVo); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/definition/repository/IVariableInfoRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.definition.repository; 2 | 3 | import net.somta.juggle.console.domain.flow.definition.vo.VariableInfoVO; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author husong 9 | */ 10 | public interface IVariableInfoRepository { 11 | 12 | List queryVariableInfoList(Long flowDefinitionId); 13 | } 14 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/definition/vo/FlowDefinitionInfoQueryVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.definition.vo; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class FlowDefinitionInfoQueryVO { 7 | 8 | /** 9 | * 流程名称 10 | */ 11 | private String flowName; 12 | 13 | /** 14 | * 流程类型 sync:同步 async:异步 15 | */ 16 | private String flowType; 17 | 18 | public String getFlowName() { 19 | return flowName; 20 | } 21 | 22 | public void setFlowName(String flowName) { 23 | this.flowName = flowName; 24 | } 25 | 26 | public String getFlowType() { 27 | return flowType; 28 | } 29 | 30 | public void setFlowType(String flowType) { 31 | this.flowType = flowType; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/flowinfo/enums/FlowErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.flowinfo.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum FlowErrorEnum implements IBaseError { 10 | FLOW_KEY_IS_EMPTY(1000, "流程KEY不能为空"), 11 | FLOW_NOT_EXIST(1001, "流程不存在"), 12 | ; 13 | 14 | private int errorCode; 15 | private String errorMsg; 16 | 17 | FlowErrorEnum(int errorCode, String errorMsg) { 18 | this.errorCode = errorCode; 19 | this.errorMsg = errorMsg; 20 | } 21 | 22 | @Override 23 | public long getErrorCode() { 24 | return ApplicationConstants.FLOW_CODE + errorCode; 25 | } 26 | 27 | @Override 28 | public String getErrorMsg() { 29 | return errorMsg; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/flowinfo/enums/FlowTypeEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.flowinfo.enums; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public enum FlowTypeEnum { 7 | SYNC("sync","同步"), 8 | ASYNC("async","异步"); 9 | 10 | private String code; 11 | private String desc; 12 | 13 | FlowTypeEnum(String code, String desc) { 14 | this.code = code; 15 | this.desc = desc; 16 | } 17 | 18 | public String getCode() { 19 | return code; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/flowinfo/repository/IFlowInfoRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.flowinfo.repository; 2 | 3 | import net.somta.juggle.console.domain.flow.flowinfo.FlowInfoAO; 4 | import net.somta.juggle.console.domain.flow.flowinfo.vo.FlowInfoQueryVO; 5 | import net.somta.juggle.console.domain.flow.flowinfo.vo.FlowInfoVO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author husong 11 | */ 12 | public interface IFlowInfoRepository { 13 | 14 | Boolean deleteFlowInfoAndFlowVersion(Long flowId); 15 | 16 | FlowInfoAO queryFlowInfo(Long flowInfoId); 17 | 18 | List queryFlowInfoList(FlowInfoQueryVO flowInfoQueryVo); 19 | 20 | Boolean deployFlow(FlowInfoAO flowInfoAo); 21 | } 22 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/flowinfo/vo/FlowInfoQueryVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.flowinfo.vo; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class FlowInfoQueryVO { 7 | private String flowName; 8 | 9 | private String flowType; 10 | 11 | public String getFlowName() { 12 | return flowName; 13 | } 14 | 15 | public void setFlowName(String flowName) { 16 | this.flowName = flowName; 17 | } 18 | 19 | public String getFlowType() { 20 | return flowType; 21 | } 22 | 23 | public void setFlowType(String flowType) { 24 | this.flowType = flowType; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/version/enums/FlowVersionErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.version.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum FlowVersionErrorEnum implements IBaseError { 10 | ENABLE_FLOW_NOT_DELETE(1000, "启用中的流程不能删除"), 11 | 12 | FLOW_NOT_ENABLE(1003, "请启用流程后在调用流程"), 13 | ; 14 | 15 | private int errorCode; 16 | private String errorMsg; 17 | 18 | FlowVersionErrorEnum(int errorCode, String errorMsg) { 19 | this.errorCode = errorCode; 20 | this.errorMsg = errorMsg; 21 | } 22 | 23 | @Override 24 | public long getErrorCode() { 25 | return ApplicationConstants.FLOW_CODE + errorCode; 26 | } 27 | 28 | @Override 29 | public String getErrorMsg() { 30 | return errorMsg; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/version/enums/FlowVersionStatusEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.version.enums; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public enum FlowVersionStatusEnum { 7 | 8 | DISABLED(0,"禁用"), 9 | ENABLE(1,"启用"); 10 | 11 | private Integer code; 12 | private String desc; 13 | 14 | 15 | FlowVersionStatusEnum(Integer code, String desc) { 16 | this.code = code; 17 | this.desc = desc; 18 | } 19 | 20 | public static FlowVersionStatusEnum getByCode(Integer code){ 21 | for (FlowVersionStatusEnum status : FlowVersionStatusEnum.values()) { 22 | if (status.getCode().equals(code)) { 23 | return status; 24 | } 25 | } 26 | return null; 27 | } 28 | 29 | public Integer getCode() { 30 | return code; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/version/repository/IFlowVersionRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.version.repository; 2 | 3 | import net.somta.juggle.console.domain.flow.version.FlowVersionAO; 4 | import net.somta.juggle.console.domain.flow.version.view.FlowVersionInfoView; 5 | import net.somta.juggle.console.domain.flow.version.view.FlowVersionView; 6 | import net.somta.juggle.console.domain.flow.version.vo.FlowVersionQueryVO; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author husong 12 | */ 13 | public interface IFlowVersionRepository { 14 | void deleteFlowVersionById(Long flowVersionId); 15 | 16 | Boolean updateFlowVersion(FlowVersionAO flowVersionAo); 17 | 18 | String queryLatestVersion(String flowKey); 19 | 20 | FlowVersionAO getFlowVersionInfo(Long flowVersionId); 21 | 22 | FlowVersionInfoView queryFlowVersionInfoByKey(String flowKey, String flowVersion); 23 | 24 | List queryFlowVersionList(FlowVersionQueryVO flowVersionQueryVo); 25 | 26 | void invalidateFlowCache(String flowKey, String flowVersion); 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/flow/version/vo/FlowVersionVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.flow.version.vo; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class FlowVersionVO { 7 | private Long id; 8 | 9 | private Long flowId; 10 | 11 | private String flowVersion; 12 | /** 13 | * 流程状态 0:禁用 1:启用 14 | */ 15 | private Integer flowStatus; 16 | 17 | public Long getId() { 18 | return id; 19 | } 20 | 21 | public void setId(Long id) { 22 | this.id = id; 23 | } 24 | 25 | public Long getFlowId() { 26 | return flowId; 27 | } 28 | 29 | public void setFlowId(Long flowId) { 30 | this.flowId = flowId; 31 | } 32 | 33 | public String getFlowVersion() { 34 | return flowVersion; 35 | } 36 | 37 | public void setFlowVersion(String flowVersion) { 38 | this.flowVersion = flowVersion; 39 | } 40 | 41 | public Integer getFlowStatus() { 42 | return flowStatus; 43 | } 44 | 45 | public void setFlowStatus(Integer flowStatus) { 46 | this.flowStatus = flowStatus; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/object/enums/ObjectErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.object.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum ObjectErrorEnum implements IBaseError { 10 | OBJECT_KEY_EXIST(1000, "对象编码已存在"), 11 | ; 12 | 13 | private int errorCode; 14 | private String errorMsg; 15 | 16 | ObjectErrorEnum(int errorCode, String errorMsg) { 17 | this.errorCode = errorCode; 18 | this.errorMsg = errorMsg; 19 | } 20 | 21 | @Override 22 | public long getErrorCode() { 23 | return ApplicationConstants.OBJECT_CODE + errorCode; 24 | } 25 | 26 | @Override 27 | public String getErrorMsg() { 28 | return errorMsg; 29 | } 30 | } -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/object/repository/IObjectRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.object.repository; 2 | 3 | import net.somta.juggle.console.domain.object.ObjectAO; 4 | import net.somta.juggle.console.domain.object.vo.ObjectVO; 5 | import net.somta.juggle.console.interfaces.param.ObjectQueryParam; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author husong 11 | */ 12 | public interface IObjectRepository { 13 | Boolean addObject(ObjectAO objectAo); 14 | 15 | Boolean deleteObjectById(Long objId); 16 | 17 | Boolean updateObject(ObjectAO objectAo); 18 | 19 | ObjectAO queryObject(Long objId); 20 | 21 | ObjectAO queryObjectInfoByKey(String objectKey); 22 | 23 | List queryObjectInfoList(); 24 | 25 | List queryObjectPageList(ObjectQueryParam objectQueryParam); 26 | 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/object/vo/PropertyVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.object.vo; 2 | 3 | 4 | /** 5 | * @author Gavin 6 | */ 7 | public class PropertyVO { 8 | 9 | /** 10 | * 属性key 11 | */ 12 | private String propKey; 13 | /** 14 | * 属性名称 15 | */ 16 | private String propName; 17 | 18 | /** 19 | * 参数的数据类型 20 | */ 21 | private String dataType; 22 | 23 | public String getPropKey() { 24 | return propKey; 25 | } 26 | 27 | public void setPropKey(String propKey) { 28 | this.propKey = propKey; 29 | } 30 | 31 | public String getPropName() { 32 | return propName; 33 | } 34 | 35 | public void setPropName(String propName) { 36 | this.propName = propName; 37 | } 38 | 39 | public String getDataType() { 40 | return dataType; 41 | } 42 | 43 | public void setDataType(String dataType) { 44 | this.dataType = dataType; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/order/OrderEntity.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.order; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.2.2 6 | */ 7 | public class OrderEntity { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/order/repository/IOrderRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.order.repository; 2 | 3 | import net.somta.juggle.console.domain.order.vo.CreateOrderVO; 4 | 5 | public interface IOrderRepository { 6 | 7 | CreateOrderVO createOrder(String orderName,Integer orderType,Long goodsId); 8 | 9 | String queryOrderPayStatus(String orderNo); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/order/vo/CreateOrderVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.order.vo; 2 | 3 | public class CreateOrderVO { 4 | 5 | private String orderNo; 6 | 7 | private String qrCode; 8 | 9 | public String getOrderNo() { 10 | return orderNo; 11 | } 12 | 13 | public void setOrderNo(String orderNo) { 14 | this.orderNo = orderNo; 15 | } 16 | 17 | public String getQrCode() { 18 | return qrCode; 19 | } 20 | 21 | public void setQrCode(String qrCode) { 22 | this.qrCode = qrCode; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/parameter/enums/ParameterSourceTypeEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.parameter.enums; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public enum ParameterSourceTypeEnum { 7 | FLOW("flow","流程参数"), 8 | API("api","接口参数"), 9 | OBJECT("object","对象属性"); 10 | 11 | private String code; 12 | private String name; 13 | 14 | ParameterSourceTypeEnum(String code, String name) { 15 | this.code = code; 16 | this.name = name; 17 | } 18 | 19 | public String getCode() { 20 | return code; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/parameter/enums/ParameterTypeEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.parameter.enums; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public enum ParameterTypeEnum { 7 | INPUT_PARAM(1,"入参"), 8 | OUTPUT_PARAM(2,"出参"), 9 | PROPERTY(3,"属性"), 10 | HEADER(4,"请求头"); 11 | 12 | private int code; 13 | private String name; 14 | 15 | ParameterTypeEnum(int code, String name) { 16 | this.code = code; 17 | this.name = name; 18 | } 19 | 20 | public int getCode() { 21 | return code; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/parameter/repository/IParameterRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.parameter.repository; 2 | 3 | import net.somta.juggle.console.domain.parameter.ParameterEntity; 4 | import net.somta.juggle.console.domain.parameter.vo.ParameterVO; 5 | 6 | /** 7 | * @author Gavin 8 | */ 9 | public interface IParameterRepository { 10 | 11 | /** 12 | * @param parameterQueryVO 13 | * @return 14 | */ 15 | ParameterEntity getParameter(ParameterVO parameterQueryVO); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/parameter/vo/ParameterVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.parameter.vo; 2 | 3 | /** 4 | * @author Gavin 5 | */ 6 | public class ParameterVO { 7 | 8 | /** 9 | * 来源类型 api:接口 flow:流程 10 | */ 11 | private String sourceType; 12 | 13 | private Long sourceId; 14 | 15 | public ParameterVO(String sourceType, Long sourceId) { 16 | this.sourceType = sourceType; 17 | this.sourceId = sourceId; 18 | } 19 | 20 | public String getSourceType() { 21 | return sourceType; 22 | } 23 | 24 | public void setSourceType(String sourceType) { 25 | this.sourceType = sourceType; 26 | } 27 | 28 | public Long getSourceId() { 29 | return sourceId; 30 | } 31 | 32 | public void setSourceId(Long sourceId) { 33 | this.sourceId = sourceId; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/suite/api/enums/ApiErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.suite.api.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum ApiErrorEnum implements IBaseError { 10 | API_NOT_EXIST(1000, "api接口不存在"), 11 | API_NOT_EDIT_ERROR(1001, "不能修改官方套件下的接口"), 12 | ; 13 | 14 | private int errorCode; 15 | private String errorMsg; 16 | 17 | ApiErrorEnum(int errorCode, String errorMsg) { 18 | this.errorCode = errorCode; 19 | this.errorMsg = errorMsg; 20 | } 21 | 22 | @Override 23 | public long getErrorCode() { 24 | return ApplicationConstants.API_CODE + errorCode; 25 | } 26 | 27 | @Override 28 | public String getErrorMsg() { 29 | return errorMsg; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/suite/api/repository/IApiRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.suite.api.repository; 2 | 3 | import net.somta.juggle.console.domain.suite.api.ApiAO; 4 | import net.somta.juggle.console.domain.suite.api.vo.ApiVO; 5 | import net.somta.juggle.console.interfaces.param.suite.ApiQueryParam; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author Gavin 11 | */ 12 | public interface IApiRepository { 13 | 14 | Boolean addApi(ApiAO apiAo); 15 | 16 | Boolean deleteApi(Long apiId); 17 | 18 | Boolean updateApi(ApiAO apiAo); 19 | 20 | ApiAO queryApi(Long apiId); 21 | 22 | ApiAO queryApiByCode(String apiCode); 23 | 24 | List getApiListBySuiteId(Long suiteId); 25 | 26 | List getApiListBySuiteCode(String suiteCode); 27 | 28 | List queryApiPageList(ApiQueryParam apiQueryParam); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/suite/suiteinfo/enums/SuiteErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.suite.suiteinfo.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum SuiteErrorEnum implements IBaseError { 10 | SUITE_EXIST_API_ERROR(1000, "该套件下存在接口,无法删除"), 11 | SUITE_NOT_EXIST_ERROR(1001, "套件不存在"), 12 | SUITE_IS_EXIST_ERROR(1002, "套件%s已存在"), 13 | ; 14 | 15 | private int errorCode; 16 | private String errorMsg; 17 | 18 | SuiteErrorEnum(int errorCode, String errorMsg) { 19 | this.errorCode = errorCode; 20 | this.errorMsg = errorMsg; 21 | } 22 | 23 | @Override 24 | public long getErrorCode() { 25 | return ApplicationConstants.SUITE_CODE + errorCode; 26 | } 27 | 28 | @Override 29 | public String getErrorMsg() { 30 | return errorMsg; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/suite/suiteinfo/enums/SuiteTypeEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.suite.suiteinfo.enums; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public enum SuiteTypeEnum { 7 | INSIDE_SUITE(0,"内置套件"), 8 | OFFICIAL_SUITE(1,"官方套件"), 9 | PERSONAL_SUITE(2,"个人套件"); 10 | 11 | private int code; 12 | private String desc; 13 | 14 | SuiteTypeEnum(int code, String desc) { 15 | this.code = code; 16 | this.desc = desc; 17 | } 18 | 19 | public int getCode() { 20 | return code; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/suite/suiteinfo/vo/SuiteMarketClassifyVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.suite.suiteinfo.vo; 2 | 3 | 4 | /** 5 | * @author husong 6 | * @since 1.2.2 7 | */ 8 | public class SuiteMarketClassifyVO { 9 | private Long id; 10 | 11 | private String classifyName; 12 | 13 | public Long getId() { 14 | return id; 15 | } 16 | 17 | public void setId(Long id) { 18 | this.id = id; 19 | } 20 | 21 | public String getClassifyName() { 22 | return classifyName; 23 | } 24 | 25 | public void setClassifyName(String classifyName) { 26 | this.classifyName = classifyName; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/suite/suiteinfo/vo/SuiteQueryVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.suite.suiteinfo.vo; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.1.1 6 | */ 7 | public class SuiteQueryVO { 8 | private String suiteName; 9 | 10 | public String getSuiteName() { 11 | return suiteName; 12 | } 13 | 14 | public void setSuiteName(String suiteName) { 15 | this.suiteName = suiteName; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/system/datasource/enums/DatasourceErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.system.datasource.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | * @since 1.2.0 9 | */ 10 | public enum DatasourceErrorEnum implements IBaseError { 11 | 12 | DATASOURCE_CONNECT_ERROR(1000, "数据源连接失败"), 13 | ; 14 | 15 | private int errorCode; 16 | private String errorMsg; 17 | 18 | DatasourceErrorEnum(int errorCode, String errorMsg) { 19 | this.errorCode = errorCode; 20 | this.errorMsg = errorMsg; 21 | } 22 | 23 | @Override 24 | public long getErrorCode() { 25 | return ApplicationConstants.DATASOURCE_CODE + errorCode; 26 | } 27 | 28 | @Override 29 | public String getErrorMsg() { 30 | return errorMsg; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/system/datasource/repository/IDataSourceRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.system.datasource.repository; 2 | 3 | import net.somta.juggle.console.domain.system.datasource.DataSourceAO; 4 | import net.somta.juggle.console.domain.system.datasource.vo.DataSourceQueryVO; 5 | import net.somta.juggle.console.domain.system.datasource.vo.DataSourceVO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author husong 11 | * @since 1.2.0 12 | */ 13 | public interface IDataSourceRepository { 14 | Long addDataSource(DataSourceAO dataSourceAo); 15 | 16 | void deleteDataSourceById(Long dataSourceId); 17 | 18 | Boolean updateDataSource(DataSourceAO dataSourceAo); 19 | 20 | DataSourceAO queryDataSource(Long dataSourceId); 21 | 22 | List queryDataSourceList(DataSourceQueryVO dataSourceQueryVO); 23 | } 24 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/system/datasource/service/DataSourceInstanceFactory.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.system.datasource.service; 2 | 3 | import net.somta.juggle.core.model.DataSource; 4 | 5 | /** 6 | * @author husong 7 | * @since 1.2.0 8 | */ 9 | public class DataSourceInstanceFactory { 10 | 11 | public static Object getDataSourceInstance(DataSource dataSource){ 12 | IDataSourceInstance dataSourceInstance = null; 13 | if("MYSQL".equals(dataSource.getDataSourceType())){ 14 | dataSourceInstance = new MySqlDataSourceInstance(); 15 | } 16 | if(dataSourceInstance != null){ 17 | return dataSourceInstance.getDataSourceInstance(dataSource); 18 | } 19 | return null; 20 | } 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/system/datasource/service/IDataSourceInstance.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.system.datasource.service; 2 | 3 | import net.somta.juggle.core.model.DataSource; 4 | 5 | /** 6 | * @author husong 7 | * @since 1.2.0 8 | */ 9 | public interface IDataSourceInstance { 10 | 11 | Object getDataSourceInstance(DataSource dataSource); 12 | } 13 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/system/datasource/vo/DataSourceQueryVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.system.datasource.vo; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.2.0 6 | */ 7 | public class DataSourceQueryVO { 8 | private String dataSourceName; 9 | private String dataSourceType; 10 | 11 | public String getDataSourceName() { 12 | return dataSourceName; 13 | } 14 | 15 | public void setDataSourceName(String dataSourceName) { 16 | this.dataSourceName = dataSourceName; 17 | } 18 | 19 | public String getDataSourceType() { 20 | return dataSourceType; 21 | } 22 | 23 | public void setDataSourceType(String dataSourceType) { 24 | this.dataSourceType = dataSourceType; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/template/enums/TemplateErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.template.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum TemplateErrorEnum implements IBaseError { 10 | TEMPLATE_NOT_EXIST_ERROR(1001, "模板不存在"), 11 | ; 12 | 13 | private int errorCode; 14 | private String errorMsg; 15 | 16 | TemplateErrorEnum(int errorCode, String errorMsg) { 17 | this.errorCode = errorCode; 18 | this.errorMsg = errorMsg; 19 | } 20 | 21 | @Override 22 | public long getErrorCode() { 23 | return ApplicationConstants.SUITE_CODE + errorCode; 24 | } 25 | 26 | @Override 27 | public String getErrorMsg() { 28 | return errorMsg; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/template/repository/ITemplateRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.template.repository; 2 | 3 | import net.somta.core.protocol.ResponsePaginationDataResult; 4 | import net.somta.juggle.console.domain.suite.suiteinfo.vo.SuiteVO; 5 | import net.somta.juggle.console.domain.template.vo.TemplateMarketClassifyVO; 6 | import net.somta.juggle.console.domain.template.vo.TemplateMarketInfoVO; 7 | import net.somta.juggle.console.domain.template.vo.TemplateMarketVO; 8 | 9 | import java.util.List; 10 | 11 | public interface ITemplateRepository { 12 | List queryTemplateMarketClassifyList(); 13 | 14 | ResponsePaginationDataResult queryTemplateMarketList(Integer pageNum, Integer pageSize, String templateName, Long templateClassifyId); 15 | 16 | TemplateMarketInfoVO queryTemplateMarketInfo(Long templateId,String bill); 17 | 18 | List getRecommendTemplateList(Long templateId); 19 | } 20 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/template/vo/TemplateMarketClassifyVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.template.vo; 2 | 3 | 4 | /** 5 | * @author husong 6 | * @since 1.2.3 7 | */ 8 | public class TemplateMarketClassifyVO { 9 | private Long id; 10 | 11 | private String classifyName; 12 | 13 | public Long getId() { 14 | return id; 15 | } 16 | 17 | public void setId(Long id) { 18 | this.id = id; 19 | } 20 | 21 | public String getClassifyName() { 22 | return classifyName; 23 | } 24 | 25 | public void setClassifyName(String classifyName) { 26 | this.classifyName = classifyName; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/user/UserAO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.user; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class UserAO { 7 | 8 | private Long id; 9 | private String userName; 10 | private String password; 11 | 12 | public Long getId() { 13 | return id; 14 | } 15 | 16 | public void setId(Long id) { 17 | this.id = id; 18 | } 19 | 20 | public String getUserName() { 21 | return userName; 22 | } 23 | 24 | public void setUserName(String userName) { 25 | this.userName = userName; 26 | } 27 | 28 | public String getPassword() { 29 | return password; 30 | } 31 | 32 | public void setPassword(String password) { 33 | this.password = password; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/user/enums/UserErrorEnum.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.user.enums; 2 | 3 | import net.somta.core.base.IBaseError; 4 | import net.somta.juggle.common.constants.ApplicationConstants; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public enum UserErrorEnum implements IBaseError { 10 | LOGIN_PARAM_ERROR(1000, "用户名或密码不能为空"), 11 | USER_NOT_EXIST_ERROR(1001, "用户不存在"), 12 | USER_PWD_ERROR(1002, "用户密码错误"), 13 | USER_NOT_LOGIN_ERROR(1003, "用户未登录"), 14 | OLD_PASSWORD_ERROR(1004, "原密码错误"), 15 | OPEN_API_TOKEN_ERROR(1005, "令牌不存在或为非法令牌"), 16 | ; 17 | 18 | private int errorCode; 19 | private String errorMsg; 20 | 21 | UserErrorEnum(int errorCode, String errorMsg) { 22 | this.errorCode = errorCode; 23 | this.errorMsg = errorMsg; 24 | } 25 | 26 | @Override 27 | public long getErrorCode() { 28 | return ApplicationConstants.USER_CODE + errorCode; 29 | } 30 | 31 | @Override 32 | public String getErrorMsg() { 33 | return errorMsg; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/user/repository/IUserRepository.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.user.repository; 2 | 3 | import net.somta.juggle.console.domain.user.UserAO; 4 | 5 | /** 6 | * @author Gavin 7 | */ 8 | public interface IUserRepository { 9 | 10 | void updateUser(UserAO userAo); 11 | 12 | UserAO getUserById(Long userId); 13 | 14 | UserAO getUserByUserName(String userName); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/domain/user/vo/UserTokenVO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.domain.user.vo; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | /*public class UserTokenVO { 7 | 8 | public static final String USER_ID = "userId"; 9 | 10 | private Long userId; 11 | 12 | public Long getUserId() { 13 | return userId; 14 | } 15 | 16 | public void setUserId(Long userId) { 17 | this.userId = userId; 18 | } 19 | }*/ 20 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/converter/IUserConverter.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.converter; 2 | 3 | import net.somta.juggle.console.domain.user.UserAO; 4 | import net.somta.juggle.console.infrastructure.po.UserPO; 5 | import org.mapstruct.Mapper; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | /** 9 | * @author husong 10 | */ 11 | @Mapper 12 | public interface IUserConverter { 13 | IUserConverter IMPL = Mappers.getMapper(IUserConverter.class); 14 | 15 | UserAO poToAo(UserPO userPo); 16 | 17 | UserPO aoToPo(UserAO userAo); 18 | } 19 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/converter/flow/IFlowDefinitionConverter.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.converter.flow; 2 | 3 | import net.somta.juggle.console.domain.flow.definition.FlowDefinitionAO; 4 | import net.somta.juggle.console.infrastructure.po.flow.FlowDefinitionInfoPO; 5 | import org.mapstruct.Mapper; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | /** 9 | * @author husong 10 | */ 11 | @Mapper 12 | public interface IFlowDefinitionConverter { 13 | 14 | IFlowDefinitionConverter IMPL = Mappers.getMapper(IFlowDefinitionConverter.class); 15 | 16 | FlowDefinitionInfoPO aoToPo(FlowDefinitionAO flowDefinitionAo); 17 | 18 | FlowDefinitionAO poToAo(FlowDefinitionInfoPO flowDefinitionInfoPo); 19 | } 20 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/converter/flow/IFlowInfoConverter.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.converter.flow; 2 | 3 | import net.somta.juggle.console.domain.flow.flowinfo.FlowInfoAO; 4 | import net.somta.juggle.console.domain.flow.flowinfo.vo.FlowInfoVO; 5 | import net.somta.juggle.console.infrastructure.po.flow.FlowInfoPO; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.factory.Mappers; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author husong 13 | */ 14 | @Mapper 15 | public interface IFlowInfoConverter { 16 | IFlowInfoConverter IMPL = Mappers.getMapper(IFlowInfoConverter.class); 17 | 18 | FlowInfoPO aoToPo(FlowInfoAO flowInfoAo); 19 | 20 | FlowInfoAO poToAo(FlowInfoPO flowInfoPo); 21 | 22 | List poListToVoList(List flowInfoList); 23 | } 24 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/converter/flow/IFlowVersionConverter.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.converter.flow; 2 | 3 | import net.somta.juggle.console.domain.flow.flowinfo.FlowInfoAO; 4 | import net.somta.juggle.console.domain.flow.version.FlowVersionAO; 5 | import net.somta.juggle.console.infrastructure.po.flow.FlowVersionPO; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.Mapping; 8 | import org.mapstruct.factory.Mappers; 9 | 10 | /** 11 | * @author husong 12 | */ 13 | @Mapper 14 | public interface IFlowVersionConverter { 15 | IFlowVersionConverter IMPL = Mappers.getMapper(IFlowVersionConverter.class); 16 | 17 | FlowVersionPO aoToPo(FlowInfoAO flowInfoAo); 18 | 19 | @Mapping(target = "flowVersionStatus", expression = "java(flowVersionAo.getFlowVersionStatusEnum().getCode())") 20 | FlowVersionPO aoToPo(FlowVersionAO flowVersionAo); 21 | 22 | @Mapping(target = "flowVersionStatusEnum", expression = "java(net.somta.juggle.console.domain.flow.version.enums.FlowVersionStatusEnum.getByCode(flowVersionPo.getFlowVersionStatus()))") 23 | FlowVersionAO poToAo(FlowVersionPO flowVersionPo); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/converter/suite/ISuiteConverter.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.converter.suite; 2 | 3 | import net.somta.juggle.console.domain.suite.suiteinfo.SuiteEntity; 4 | import net.somta.juggle.console.domain.suite.suiteinfo.vo.SuiteVO; 5 | import net.somta.juggle.console.infrastructure.po.suite.SuitePO; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.factory.Mappers; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author husong 13 | */ 14 | @Mapper 15 | public interface ISuiteConverter { 16 | ISuiteConverter IMPL = Mappers.getMapper(ISuiteConverter.class); 17 | 18 | SuitePO entityToPo(SuiteEntity suiteEntity); 19 | 20 | List poListToVoList(List suitePoList); 21 | 22 | SuiteVO poToVo(SuitePO suitePo); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/ObjectMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper; 2 | 3 | import net.somta.core.base.IBaseMapper; 4 | import net.somta.juggle.console.infrastructure.po.ObjectPO; 5 | import net.somta.juggle.console.infrastructure.view.ObjectInfoView; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author Gavin 11 | */ 12 | public interface ObjectMapper extends IBaseMapper { 13 | 14 | 15 | int addObject(ObjectPO objectPo); 16 | 17 | ObjectPO queryObjectInfoByKey(String objectKey); 18 | 19 | List queryObjectInfoList(); 20 | } 21 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper; 2 | 3 | 4 | import net.somta.core.base.IBaseMapper; 5 | import net.somta.juggle.console.infrastructure.po.UserPO; 6 | 7 | /** 8 | * @author husong 9 | */ 10 | public interface UserMapper extends IBaseMapper { 11 | 12 | UserPO getUserByUserName(String userName); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/VariableInfoMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper; 2 | 3 | import net.somta.core.base.IBaseMapper; 4 | import net.somta.juggle.console.domain.flow.definition.vo.VariableDeleteVO; 5 | import net.somta.juggle.console.infrastructure.po.VariableInfoPO; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | /** 12 | * @author husong 13 | */ 14 | public interface VariableInfoMapper extends IBaseMapper { 15 | 16 | /** 17 | * 批量新增变量 18 | * @param variableInfoList 19 | * @return 20 | */ 21 | int batchAddVariable(@Param("variableInfoList") List variableInfoList); 22 | 23 | /** 24 | * 根据流程定义ID删除变量 25 | * @param variableDeleteVo 26 | * @return 27 | */ 28 | int deleteVariableByFlowDefinitionId(VariableDeleteVO variableDeleteVo); 29 | 30 | /** 31 | * 32 | * @param flowDefinitionId 33 | * @return 34 | */ 35 | List queryVariableInfoListByDefinitionId(Long flowDefinitionId); 36 | } 37 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/flow/FlowInfoMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper.flow; 2 | 3 | 4 | import net.somta.core.base.IBaseMapper; 5 | import net.somta.juggle.console.infrastructure.po.flow.FlowInfoPO; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | /** 9 | * @author husong 10 | */ 11 | public interface FlowInfoMapper extends IBaseMapper { 12 | 13 | 14 | int addFlowInfo(FlowInfoPO flowInfoPo); 15 | 16 | FlowInfoPO querySimpleFlowInfo(Long flowId); 17 | 18 | /** 19 | * 根据流程key查询流程信息 20 | * @param flowKey 21 | * @return 22 | */ 23 | FlowInfoPO queryFlowByFlowKey(@Param("flowKey") String flowKey); 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/flow/FlowVersionMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper.flow; 2 | 3 | import net.somta.core.base.IBaseMapper; 4 | import net.somta.juggle.console.domain.flow.version.view.FlowVersionInfoView; 5 | import net.somta.juggle.console.domain.flow.version.view.FlowVersionView; 6 | import net.somta.juggle.console.domain.flow.version.vo.FlowVersionQueryVO; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author husong 12 | */ 13 | public interface FlowVersionMapper extends IBaseMapper { 14 | 15 | int deleteFlowVersionByFlowId(Long flowId); 16 | 17 | FlowVersionInfoView queryFlowVersionInfoById(Long flowVersionId); 18 | 19 | FlowVersionInfoView queryFlowVersionInfoByKey(FlowVersionQueryVO flowVersionQueryVo); 20 | 21 | List queryFlowVersionList(FlowVersionQueryVO flowVersionQueryVO); 22 | 23 | String queryLatestVersion(String flowKey); 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/suite/ApiMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper.suite; 2 | 3 | import net.somta.core.base.IBaseMapper; 4 | import net.somta.juggle.console.domain.suite.api.vo.ApiVO; 5 | import net.somta.juggle.console.infrastructure.po.suite.ApiPO; 6 | import net.somta.juggle.console.interfaces.param.suite.ApiQueryParam; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author Gavin 12 | */ 13 | public interface ApiMapper extends IBaseMapper { 14 | 15 | /** 16 | * @param apiPo 17 | * @return 18 | */ 19 | int addApi(ApiPO apiPo); 20 | 21 | ApiPO queryApiByCode(String apiCode); 22 | 23 | List queryApiListBySuiteId(Long suiteId); 24 | 25 | List queryApiListBySuiteCode(String suiteCode); 26 | 27 | Long queryApiCount(ApiQueryParam apiQueryParam); 28 | 29 | List queryApiPageList(ApiQueryParam apiQueryParam); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/suite/SuiteMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper.suite; 2 | 3 | import net.somta.core.base.IBaseMapper; 4 | import net.somta.juggle.console.domain.suite.suiteinfo.vo.SuiteVO; 5 | import net.somta.juggle.console.infrastructure.po.suite.SuitePO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author husong 11 | * @since 1.1.1 12 | */ 13 | public interface SuiteMapper extends IBaseMapper { 14 | 15 | int addSuite(SuitePO suitePo); 16 | 17 | SuitePO querySuiteByCode(String suiteCode); 18 | 19 | List queryExistSuiteByCodes(List suiteCodes); 20 | } 21 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/system/DataSourceMapper.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.mapper.system; 2 | 3 | import net.somta.core.base.IBaseMapper; 4 | import net.somta.juggle.console.domain.system.datasource.vo.DataSourceQueryVO; 5 | import net.somta.juggle.console.infrastructure.po.system.DataSourcePO; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author husong 11 | * @since 1.2.0 12 | */ 13 | public interface DataSourceMapper extends IBaseMapper { 14 | Long addDataSource(DataSourcePO dataSourcePo); 15 | 16 | List queryDataSourceList(DataSourceQueryVO dataSourceQueryVO); 17 | } 18 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/mapper/system/TokenMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2022-2024 husong 3 | 4 | This program is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License 6 | as published by the Free Software Foundation; either version 3 7 | of the License, or (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with this program; if not, visit . 16 | */ 17 | package net.somta.juggle.console.infrastructure.mapper.system; 18 | 19 | 20 | import net.somta.core.base.IBaseMapper; 21 | import net.somta.juggle.console.infrastructure.po.system.TokenPO; 22 | 23 | /** 24 | * @author husong 25 | * @since 1.1.0 26 | */ 27 | public interface TokenMapper extends IBaseMapper { 28 | 29 | TokenPO queryTokenByValue(String tokenValue); 30 | } 31 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/infrastructure/po/UserPO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.infrastructure.po; 2 | 3 | import net.somta.core.base.BaseModel; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public class UserPO extends BaseModel { 9 | private Long id; 10 | private String userName; 11 | private String password; 12 | private Integer deleted; 13 | 14 | public Long getId() { 15 | return id; 16 | } 17 | 18 | public void setId(Long id) { 19 | this.id = id; 20 | } 21 | 22 | public String getUserName() { 23 | return userName; 24 | } 25 | 26 | public void setUserName(String userName) { 27 | this.userName = userName; 28 | } 29 | 30 | public String getPassword() { 31 | return password; 32 | } 33 | 34 | public void setPassword(String password) { 35 | this.password = password; 36 | } 37 | 38 | public Integer getDeleted() { 39 | return deleted; 40 | } 41 | 42 | public void setDeleted(Integer deleted) { 43 | this.deleted = deleted; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/dto/LoginDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.dto; 2 | 3 | /** 4 | * @author Gavin 5 | */ 6 | public class LoginDTO { 7 | 8 | private String userName; 9 | private String token; 10 | 11 | public String getUserName() { 12 | return userName; 13 | } 14 | 15 | public void setUserName(String userName) { 16 | this.userName = userName; 17 | } 18 | 19 | public String getToken() { 20 | return token; 21 | } 22 | 23 | public void setToken(String token) { 24 | this.token = token; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "LoginDTO{" + 30 | "userName='" + userName + '\'' + 31 | ", token='" + token + '\'' + 32 | '}'; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/dto/ObjectDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.dto; 2 | 3 | /** 4 | * @author Gavin 5 | */ 6 | public class ObjectDTO { 7 | 8 | private Long id; 9 | 10 | private String objectKey; 11 | 12 | private String objectName; 13 | 14 | private String objectDesc; 15 | 16 | public Long getId() { 17 | return id; 18 | } 19 | 20 | public void setId(Long id) { 21 | this.id = id; 22 | } 23 | 24 | public String getObjectKey() { 25 | return objectKey; 26 | } 27 | 28 | public void setObjectKey(String objectKey) { 29 | this.objectKey = objectKey; 30 | } 31 | 32 | public String getObjectName() { 33 | return objectName; 34 | } 35 | 36 | public void setObjectName(String objectName) { 37 | this.objectName = objectName; 38 | } 39 | 40 | public String getObjectDesc() { 41 | return objectDesc; 42 | } 43 | 44 | public void setObjectDesc(String objectDesc) { 45 | this.objectDesc = objectDesc; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/dto/OrderDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.dto; 2 | 3 | public class OrderDTO { 4 | /** 5 | * 订单号 6 | */ 7 | private String orderNo; 8 | 9 | /** 10 | * 支付二维码 11 | */ 12 | private String qrCode; 13 | 14 | public String getOrderNo() { 15 | return orderNo; 16 | } 17 | 18 | public void setOrderNo(String orderNo) { 19 | this.orderNo = orderNo; 20 | } 21 | 22 | public String getQrCode() { 23 | return qrCode; 24 | } 25 | 26 | public void setQrCode(String qrCode) { 27 | this.qrCode = qrCode; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/dto/UserDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.dto; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class UserDTO { 7 | private Long id; 8 | private String userName; 9 | 10 | public Long getId() { 11 | return id; 12 | } 13 | 14 | public void setId(Long id) { 15 | this.id = id; 16 | } 17 | 18 | public String getUserName() { 19 | return userName; 20 | } 21 | 22 | public void setUserName(String userName) { 23 | this.userName = userName; 24 | } 25 | 26 | @Override 27 | public String toString() { 28 | return "UserDTO{" + 29 | "id=" + id + 30 | ", userName='" + userName + '\'' + 31 | '}'; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/dto/flow/FlowTemplateInfoDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.dto.flow; 2 | 3 | /** 4 | * @author Gavin 5 | */ 6 | public class FlowTemplateInfoDTO { 7 | private Long id; 8 | private String templateName; 9 | 10 | public Long getId() { 11 | return id; 12 | } 13 | 14 | public void setId(Long id) { 15 | this.id = id; 16 | } 17 | 18 | public String getTemplateName() { 19 | return templateName; 20 | } 21 | 22 | public void setTemplateName(String templateName) { 23 | this.templateName = templateName; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/dto/market/TemplateMarketClassifyDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.dto.market; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.2.3 6 | */ 7 | public class TemplateMarketClassifyDTO { 8 | 9 | private Long id; 10 | 11 | private String classifyName; 12 | 13 | public Long getId() { 14 | return id; 15 | } 16 | 17 | public void setId(Long id) { 18 | this.id = id; 19 | } 20 | 21 | public String getClassifyName() { 22 | return classifyName; 23 | } 24 | 25 | public void setClassifyName(String classifyName) { 26 | this.classifyName = classifyName; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/dto/suite/SuiteMarketClassifyDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.dto.suite; 2 | 3 | public class SuiteMarketClassifyDTO { 4 | 5 | private Long id; 6 | 7 | private String classifyName; 8 | 9 | public Long getId() { 10 | return id; 11 | } 12 | 13 | public void setId(Long id) { 14 | this.id = id; 15 | } 16 | 17 | public String getClassifyName() { 18 | return classifyName; 19 | } 20 | 21 | public void setClassifyName(String classifyName) { 22 | this.classifyName = classifyName; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/ObjectQueryParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public class ObjectQueryParam extends PageParam { 9 | 10 | private String objectName; 11 | 12 | public String getObjectName() { 13 | return objectName; 14 | } 15 | 16 | public void setObjectName(String objectName) { 17 | this.objectName = objectName; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/OrderParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param; 2 | 3 | public class OrderParam { 4 | private String orderName; 5 | private Integer orderType; 6 | private Long goodsId; 7 | 8 | public String getOrderName() { 9 | return orderName; 10 | } 11 | 12 | public void setOrderName(String orderName) { 13 | this.orderName = orderName; 14 | } 15 | 16 | public Integer getOrderType() { 17 | return orderType; 18 | } 19 | 20 | public void setOrderType(Integer orderType) { 21 | this.orderType = orderType; 22 | } 23 | 24 | public Long getGoodsId() { 25 | return goodsId; 26 | } 27 | 28 | public void setGoodsId(Long goodsId) { 29 | this.goodsId = goodsId; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/flow/FlowInfoPageParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.flow; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public class FlowInfoPageParam extends PageParam { 9 | 10 | private String flowName; 11 | 12 | private String flowType; 13 | 14 | public String getFlowName() { 15 | return flowName; 16 | } 17 | 18 | public void setFlowName(String flowName) { 19 | this.flowName = flowName; 20 | } 21 | 22 | public String getFlowType() { 23 | return flowType; 24 | } 25 | 26 | public void setFlowType(String flowType) { 27 | this.flowType = flowType; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/flow/FlowTemplatePageParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.flow; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public class FlowTemplatePageParam extends PageParam { 9 | 10 | private String templateName; 11 | 12 | public String getTemplateName() { 13 | return templateName; 14 | } 15 | 16 | public void setTemplateName(String templateName) { 17 | this.templateName = templateName; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/flow/FlowVersionPageParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.flow; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public class FlowVersionPageParam extends PageParam { 9 | 10 | private Long flowId; 11 | 12 | /** 13 | * 流程状态 0:禁用 1:启用 14 | */ 15 | private Integer flowVersionStatus; 16 | 17 | public Long getFlowId() { 18 | return flowId; 19 | } 20 | 21 | public void setFlowId(Long flowId) { 22 | this.flowId = flowId; 23 | } 24 | 25 | public Integer getFlowVersionStatus() { 26 | return flowVersionStatus; 27 | } 28 | 29 | public void setFlowVersionStatus(Integer flowVersionStatus) { 30 | this.flowVersionStatus = flowVersionStatus; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/flow/FlowVersionStatusParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.flow; 2 | 3 | /** 4 | * @author Gavin 5 | */ 6 | public class FlowVersionStatusParam { 7 | 8 | private Long flowVersionId; 9 | 10 | private Integer flowVersionStatus; 11 | 12 | public Long getFlowVersionId() { 13 | return flowVersionId; 14 | } 15 | 16 | public void setFlowVersionId(Long flowVersionId) { 17 | this.flowVersionId = flowVersionId; 18 | } 19 | 20 | public Integer getFlowVersionStatus() { 21 | return flowVersionStatus; 22 | } 23 | 24 | public void setFlowVersionStatus(Integer flowVersionStatus) { 25 | this.flowVersionStatus = flowVersionStatus; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/flow/definition/FlowDefinitionContentParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.flow.definition; 2 | 3 | import net.somta.juggle.console.domain.flow.definition.vo.VariableInfoVO; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author husong 9 | */ 10 | public class FlowDefinitionContentParam { 11 | private Long id; 12 | private String flowContent; 13 | private List flowVariables; 14 | 15 | public Long getId() { 16 | return id; 17 | } 18 | 19 | public void setId(Long id) { 20 | this.id = id; 21 | } 22 | 23 | public String getFlowContent() { 24 | return flowContent; 25 | } 26 | 27 | public void setFlowContent(String flowContent) { 28 | this.flowContent = flowContent; 29 | } 30 | 31 | public List getFlowVariables() { 32 | return flowVariables; 33 | } 34 | 35 | public void setFlowVariables(List flowVariables) { 36 | this.flowVariables = flowVariables; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/flow/definition/FlowDefinitionDeployParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.flow.definition; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class FlowDefinitionDeployParam { 7 | private Long flowDefinitionId; 8 | private String flowDeployVersion; 9 | private String flowVersionRemark; 10 | 11 | public Long getFlowDefinitionId() { 12 | return flowDefinitionId; 13 | } 14 | 15 | public void setFlowDefinitionId(Long flowDefinitionId) { 16 | this.flowDefinitionId = flowDefinitionId; 17 | } 18 | 19 | public String getFlowDeployVersion() { 20 | return flowDeployVersion; 21 | } 22 | 23 | public void setFlowDeployVersion(String flowDeployVersion) { 24 | this.flowDeployVersion = flowDeployVersion; 25 | } 26 | 27 | public String getFlowVersionRemark() { 28 | return flowVersionRemark; 29 | } 30 | 31 | public void setFlowVersionRemark(String flowVersionRemark) { 32 | this.flowVersionRemark = flowVersionRemark; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/flow/definition/FlowDefinitionPageParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.flow.definition; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public class FlowDefinitionPageParam extends PageParam { 9 | 10 | private String flowName; 11 | 12 | private String flowType; 13 | 14 | public String getFlowName() { 15 | return flowName; 16 | } 17 | 18 | public void setFlowName(String flowName) { 19 | this.flowName = flowName; 20 | } 21 | 22 | public String getFlowType() { 23 | return flowType; 24 | } 25 | 26 | public void setFlowType(String flowType) { 27 | this.flowType = flowType; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/market/TemplateMarketParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.market; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.2.3 6 | */ 7 | public class TemplateMarketParam { 8 | private Long templateId; 9 | private String bill; 10 | 11 | public Long getTemplateId() { 12 | return templateId; 13 | } 14 | 15 | public void setTemplateId(Long templateId) { 16 | this.templateId = templateId; 17 | } 18 | 19 | public String getBill() { 20 | return bill; 21 | } 22 | 23 | public void setBill(String bill) { 24 | this.bill = bill; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/market/TemplateMarketQueryParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.market; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | * @since 1.2.3 8 | */ 9 | public class TemplateMarketQueryParam extends PageParam { 10 | private String templateName; 11 | private Long templateClassifyId; 12 | 13 | public String getTemplateName() { 14 | return templateName; 15 | } 16 | 17 | public void setTemplateName(String templateName) { 18 | this.templateName = templateName; 19 | } 20 | 21 | public Long getTemplateClassifyId() { 22 | return templateClassifyId; 23 | } 24 | 25 | public void setTemplateClassifyId(Long templateClassifyId) { 26 | this.templateClassifyId = templateClassifyId; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/suite/ApiDebugParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.suite; 2 | 3 | import java.util.Map; 4 | 5 | public class ApiDebugParam { 6 | private Map headerData; 7 | private Map inputParamData; 8 | 9 | public Map getHeaderData() { 10 | return headerData; 11 | } 12 | 13 | public void setHeaderData(Map headerData) { 14 | this.headerData = headerData; 15 | } 16 | 17 | public Map getInputParamData() { 18 | return inputParamData; 19 | } 20 | 21 | public void setInputParamData(Map inputParamData) { 22 | this.inputParamData = inputParamData; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/suite/ApiQueryParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.suite; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | public class ApiQueryParam extends PageParam { 9 | private Long suiteId; 10 | 11 | private String apiName; 12 | 13 | private String apiUrl; 14 | 15 | public Long getSuiteId() { 16 | return suiteId; 17 | } 18 | 19 | public void setSuiteId(Long suiteId) { 20 | this.suiteId = suiteId; 21 | } 22 | 23 | public String getApiName() { 24 | return apiName; 25 | } 26 | 27 | public void setApiName(String apiName) { 28 | this.apiName = apiName; 29 | } 30 | 31 | public String getApiUrl() { 32 | return apiUrl; 33 | } 34 | 35 | public void setApiUrl(String apiUrl) { 36 | this.apiUrl = apiUrl; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/suite/SuiteAddParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.suite; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class SuiteAddParam { 7 | private String suiteCode; 8 | private String suiteName; 9 | private String suiteImage; 10 | private String suiteDesc; 11 | 12 | public String getSuiteCode() { 13 | return suiteCode; 14 | } 15 | 16 | public void setSuiteCode(String suiteCode) { 17 | this.suiteCode = suiteCode; 18 | } 19 | 20 | public String getSuiteName() { 21 | return suiteName; 22 | } 23 | 24 | public void setSuiteName(String suiteName) { 25 | this.suiteName = suiteName; 26 | } 27 | 28 | public String getSuiteImage() { 29 | return suiteImage; 30 | } 31 | 32 | public void setSuiteImage(String suiteImage) { 33 | this.suiteImage = suiteImage; 34 | } 35 | 36 | public String getSuiteDesc() { 37 | return suiteDesc; 38 | } 39 | 40 | public void setSuiteDesc(String suiteDesc) { 41 | this.suiteDesc = suiteDesc; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/suite/SuiteMarketParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.suite; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.2.1 6 | */ 7 | public class SuiteMarketParam { 8 | private Long suiteId; 9 | private String bill; 10 | 11 | public Long getSuiteId() { 12 | return suiteId; 13 | } 14 | 15 | public void setSuiteId(Long suiteId) { 16 | this.suiteId = suiteId; 17 | } 18 | 19 | public String getBill() { 20 | return bill; 21 | } 22 | 23 | public void setBill(String bill) { 24 | this.bill = bill; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/suite/SuiteMarketQueryParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.suite; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | * @since 1.2.2 8 | */ 9 | public class SuiteMarketQueryParam extends PageParam { 10 | private String suiteName; 11 | private Long suiteClassifyId; 12 | 13 | public String getSuiteName() { 14 | return suiteName; 15 | } 16 | 17 | public void setSuiteName(String suiteName) { 18 | this.suiteName = suiteName; 19 | } 20 | 21 | public Long getSuiteClassifyId() { 22 | return suiteClassifyId; 23 | } 24 | 25 | public void setSuiteClassifyId(Long suiteClassifyId) { 26 | this.suiteClassifyId = suiteClassifyId; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/suite/SuiteQueryParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.suite; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | * @since 1.1.0 8 | */ 9 | public class SuiteQueryParam extends PageParam { 10 | private String suiteName; 11 | 12 | public String getSuiteName() { 13 | return suiteName; 14 | } 15 | 16 | public void setSuiteName(String suiteName) { 17 | this.suiteName = suiteName; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/system/DataSourceQueryParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.system; 2 | 3 | import net.somta.core.base.page.PageParam; 4 | 5 | /** 6 | * @author husong 7 | * @since 1.2.0 8 | */ 9 | public class DataSourceQueryParam extends PageParam { 10 | private String dataSourceName; 11 | private String dataSourceType; 12 | 13 | public String getDataSourceName() { 14 | return dataSourceName; 15 | } 16 | 17 | public void setDataSourceName(String dataSourceName) { 18 | this.dataSourceName = dataSourceName; 19 | } 20 | 21 | public String getDataSourceType() { 22 | return dataSourceType; 23 | } 24 | 25 | public void setDataSourceType(String dataSourceType) { 26 | this.dataSourceType = dataSourceType; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/user/LoginParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.user; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class LoginParam { 7 | private String userName; 8 | private String password; 9 | 10 | public String getUserName() { 11 | return userName; 12 | } 13 | 14 | public void setUserName(String userName) { 15 | this.userName = userName; 16 | } 17 | 18 | public String getPassword() { 19 | return password; 20 | } 21 | 22 | public void setPassword(String password) { 23 | this.password = password; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /console/src/main/java/net/somta/juggle/console/interfaces/param/user/UpdatePasswordParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.param.user; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class UpdatePasswordParam { 7 | private Long userId; 8 | private String oldPassword; 9 | private String newPassword; 10 | 11 | public Long getUserId() { 12 | return userId; 13 | } 14 | 15 | public void setUserId(Long userId) { 16 | this.userId = userId; 17 | } 18 | 19 | public String getOldPassword() { 20 | return oldPassword; 21 | } 22 | 23 | public void setOldPassword(String oldPassword) { 24 | this.oldPassword = oldPassword; 25 | } 26 | 27 | public String getNewPassword() { 28 | return newPassword; 29 | } 30 | 31 | public void setNewPassword(String newPassword) { 32 | this.newPassword = newPassword; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /console/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.SpringApplicationRunListener= \ 2 | net.somta.juggle.console.interfaces.listener.JuggleApplicationRunListener -------------------------------------------------------------------------------- /console/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | __ _ Juggle ${application.version} 2 | \ \ _ _ __ _ __ _ | | ___ Port: ${server.port} 3 | \ \ | | | | / _` | / _` | | | / _ \ 4 | /\_/ / | |_| | | (_| | | (_| | | | | __/ Pid: ${pid} 5 | \___/ \__,_| \__, | \__, | |_| \___| Console: http://${server.ip}:${server.port}/index.html 6 | |___/ |___/ Site: https://juggle.plus -------------------------------------------------------------------------------- /console/src/main/resources/data/db_juggle.mv.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console/src/main/resources/data/db_juggle.mv.db -------------------------------------------------------------------------------- /console/src/main/resources/mybatis/TokenMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /console/src/main/resources/mybatis/UserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /console/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/console/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /console/src/test/java/net/somta/juggle/console/interfaces/controller/flow/FlowVersionControllerTest.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.console.interfaces.controller.flow; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static org.junit.jupiter.api.Assertions.*; 6 | 7 | class FlowVersionControllerTest { 8 | 9 | @Test 10 | void updateFlowVersionStatus() { 11 | } 12 | 13 | @Test 14 | void deleteFlowVersion() { 15 | } 16 | 17 | @Test 18 | void getFlowVersionPageList() { 19 | } 20 | 21 | @Test 22 | void getLatestDeployVersion() { 23 | } 24 | 25 | @Test 26 | void triggerFlow() { 27 | } 28 | 29 | @Test 30 | void getAsyncFlowResult() { 31 | } 32 | } -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | juggle: 4 | image: somta-docker.pkg.coding.net/juggle/juggle-docker/juggle:v4 5 | ports: 6 | - 9127:9127 7 | volumes: 8 | - ./conf/application.properties:/home/juggle/conf/application.properties 9 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | docs/.vuepress/.cache 3 | docs/.vuepress/.temp 4 | docs/.vuepress/dist 5 | .idea -------------------------------------------------------------------------------- /docs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:stable-alpine 2 | 3 | COPY ./docs/.vuepress/dist /usr/share/nginx/html 4 | 5 | EXPOSE 80 6 | 7 | CMD ["nginx", "-g", "daemon off;"] -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Juggle官方文档 2 | 3 | 4 | 5 | 构建镜像命令 6 | docker build -t juggle/juggle-docker/juggle-doc:v20 -f Dockerfile . -------------------------------------------------------------------------------- /docs/docs/.vuepress/navbar.ts: -------------------------------------------------------------------------------- 1 | import { NavItem } from "vuepress-theme-plume"; 2 | 3 | export const zhNavbar = [ 4 | { text: '首页', link: '/' }, 5 | { text: '文档', link: '/docs/guide/start/quick-start/' }, 6 | { text: '套件学堂', link: '/suite/introduce.html' }, 7 | { text: '价格', link: '/price.html' }, 8 | { text: '更新日志', link: '/changelog/introduce.html' }, 9 | { text: '关于我们', link: '/about_me.html' }, 10 | ] as NavItem[] -------------------------------------------------------------------------------- /docs/docs/.vuepress/notes/changelog.ts: -------------------------------------------------------------------------------- 1 | import { defineNoteConfig } from 'vuepress-theme-plume' 2 | 3 | export const changeLog = defineNoteConfig({ 4 | dir: 'changelog', 5 | link: '/changelog/', 6 | sidebar: [ 7 | 'changelog-index', 8 | { 9 | text: '1.x版本', 10 | collapsed: false, 11 | prefix: '1.x', 12 | items: "auto", 13 | } 14 | ], 15 | }) -------------------------------------------------------------------------------- /docs/docs/.vuepress/notes/index.ts: -------------------------------------------------------------------------------- 1 | import { defineNotesConfig } from 'vuepress-theme-plume' 2 | import { suiteSchool } from './suite-school' 3 | import {userGuide} from "./user-guide"; 4 | import {changeLog} from "./changelog"; 5 | 6 | export const zhNotes = defineNotesConfig({ 7 | dir: 'notes', 8 | link: '/', 9 | notes: [ 10 | userGuide, 11 | suiteSchool, 12 | changeLog, 13 | ], 14 | }) 15 | -------------------------------------------------------------------------------- /docs/docs/.vuepress/notes/suite-school.ts: -------------------------------------------------------------------------------- 1 | import { defineNoteConfig } from 'vuepress-theme-plume' 2 | 3 | export const suiteSchool = defineNoteConfig({ 4 | dir: 'suite', 5 | link: '/suite/', 6 | sidebar: [ 7 | { 8 | text: '内置套件', 9 | collapsed: false, 10 | prefix: 'internal', 11 | items: "auto", 12 | }, 13 | { 14 | text: '第三方套件', 15 | collapsed: false, 16 | prefix: 'third', 17 | items: ['qq-email','caiyun-weather'], 18 | } 19 | ], 20 | }) -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/customer/hstong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/customer/hstong.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/customer/megvii.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/customer/megvii.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/customer/pingankeji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/customer/pingankeji.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/customer/scooper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/customer/scooper.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/customer/swsc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/customer/swsc.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/customer/xinyucores.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/customer/xinyucores.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/images/choose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/images/choose.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/images/favicon.ico -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/images/gzh_qrcode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/images/gzh_qrcode.jpg -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/images/logo.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/images/price-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/images/price-bg.jpg -------------------------------------------------------------------------------- /docs/docs/.vuepress/public/images/wx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/.vuepress/public/images/wx.png -------------------------------------------------------------------------------- /docs/docs/.vuepress/styles/custom.css: -------------------------------------------------------------------------------- 1 | 2 | .vp-navbar-menu .navbar-menu-link{ 3 | font-size: 16px; 4 | padding: 0 15px; 5 | } 6 | 7 | .navbar-menu-link.active{ 8 | font-weight: 800; 9 | } -------------------------------------------------------------------------------- /docs/docs/.vuepress/styles/index.styl: -------------------------------------------------------------------------------- 1 | .medium-zoom-image{ 2 | box-shadow: 0 4px 8px rgba(0,0,0,0.1); 3 | display: inline-block; 4 | border-radius:3px; 5 | transition: box-shadow 0.3s ease-in; 6 | &:hover{ 7 | box-shadow: 0 8px 10px rgba(8,8,8,0.3); 8 | } 9 | } 10 | 11 | .theme-default-content.content__default{ 12 | max-width: 80%; 13 | } 14 | footer.page-edit{ 15 | max-width: 80%; 16 | } 17 | div.page-nav{ 18 | max-width: 80%; 19 | } 20 | 21 | .sidebar-group { 22 | .sidebar-heading { 23 | padding: 0.35rem 1.25rem 0.35rem 1.25rem; 24 | } 25 | } -------------------------------------------------------------------------------- /docs/docs/.vuepress/styles/palette.styl: -------------------------------------------------------------------------------- 1 | $accentColor = #107fff 2 | $textColor = #2c3e50 3 | $borderColor = #eaecef 4 | $codeBgColor = #282c34 5 | 6 | // layout 7 | $navbarHeight = 3.3rem 8 | $sidebarWidth = 16rem 9 | $contentWidth = 780px 10 | $homePageWidth = 1300px -------------------------------------------------------------------------------- /docs/docs/about-me.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 关于我们 3 | author: 明天的地平线 4 | createTime: 2024/05/27 21:57:08 5 | permalink: /about_me.html 6 | --- 7 | ## 关于我们 8 | 9 | 我们是一支充满活力与激情的年轻团队,成员均来自国内顶尖互联网公司(如百度、阿里巴巴、腾讯等),拥有扎实的技术功底和丰富的实战经验。无论是前端交互、后端架构,还是人工智能、大数据处理,我们的成员都在各自领域中积累了深厚的专业能力。 10 | 11 | 我们始终秉持“以用户为中心,合作共赢”的理念,致力于打造一个个既实用又强大的工具平台,帮助个人与企业提升效率、优化体验。在快速迭代的技术浪潮中,我们不断探索创新,追求卓越,力求将复杂变得简单,让技术真正服务于每一个人,我们将继续携手并进,用技术创造价值,用热情点燃梦想。 12 | 13 | 14 | ## 愿景 15 | 16 | 用技术创造价值,以合作推动创新,打造人人可用、人人受益的科技平台,实现共赢发展。 17 | 18 | 19 | 20 | ## 准则 21 | 22 | - **一流的代码质量** 23 | 24 | 一个由一流技术团队打造的工具平台,代码质量必须是一流的,采用领域驱动设计(DDD),代码逻辑和职责清晰明了。 25 | 26 | - **强大的可拓展性** 27 | 28 | 为了满足最大程度的可拓展性,前端流程设计器和后端流程引擎均没用采用现有的框架,全部采用完全自研的结构模型,后续拓展极其方便。 29 | 30 | - **极致的性能** 31 | 32 | 一流的代码质量下,性能也不甘落后,对于流程引擎的核心部分,我们逐行代码优化,精益求精,最终做到了流程本身的耗时普遍低于10毫秒。 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2024-04-06-juggle-1.1.0-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.1.0版本 - 2024/04/06 3 | createTime: 2024/10/21 15:44:32 4 | permalink: /changelog/1.x/juggle-1.1.0.html 5 | --- 6 | # 1.1.0版本 - 2024/04/06 7 | 8 | 该版本主要进一步完善了Juggle的核心能力,提供了业务系统对Juggle的集成,新增了自定义代码节点等。 9 | 变更详情: 10 | 11 | ### Feature 12 | 13 | 新增令牌管理 14 | 15 | [[#I9CHIZ](https://gitee.com/Somta/Juggle/issues/I9CHIZ)]提供juggle-spring-boot-starter,三方业务系统可以通过集成该starter调用Juggle的openApi接口 16 | 17 | [[#3](https://github.com/somta/Juggle/issues/3)]流程设计新增自定义代码节点,支持Groovy脚本 18 | 19 | [[#I9CHK3](https://gitee.com/Somta/Juggle/issues/I9CHK3)]完善通过Docker,K8S等多种方式部署Juggle 20 | 21 | [[#I9CHHV](https://gitee.com/Somta/Juggle/issues/I9CHHV)]新增接口调试能力 22 | 23 | ### Enhancement&Refactor 24 | 25 | ● 增强流程参数填充变量逻辑 26 | 27 | ### BugFix 28 | 29 | ● 修复小数类型传输过程中类型错误问题 30 | 31 | ● 修复部分参数导致的数据丢失问题 32 | 33 | ### Dependency 34 | 35 | ● 将element-plus 升级到2.6.3 -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2024-04-24-juggle-1.1.1-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.1.1版本 - 2024/04/24 3 | createTime: 2024/10/21 15:44:32 4 | permalink: /changelog/1.x/juggle-1.1.1.html 5 | --- 6 | # 1.1.1版本 - 2024/04/24 7 | 8 | 该版本主要废弃了领域的产品概念,修复了一些新测试发现的问题。 9 | 变更详情: 10 | 11 | ### Feature 12 | 13 | ● 废弃领域的概念,领域的概念太过技术化,也会限制后续产品能力的发展,因此将领域改成套件 14 | 15 | 16 | ### Enhancement&Refactor 17 | 18 | ● 完善Juggle的OpenApi文档,允许开发者基于OpenApi将Juggle集成到自己的业务系统 19 | 20 | ### BugFix 21 | 22 | ● 修复OpenApi不传token时导致的系统异常 23 | 24 | ● 修复调试流程时,异步流程不生效的问题 25 | 26 | ### Dependency 27 | -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2024-05-30-juggle-1.2.0-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.2.0版本 - 2024/05/30 3 | createTime: 2024/10/21 15:44:32 4 | permalink: /changelog/1.x/juggle-1.2.0.html 5 | --- 6 | # 1.2.0版本 - 2024/05/30 7 | 8 | 该版本主要新增了数据源,MySql数据节点,允许在流程中添加操作数据库,允许在Groovy脚本中引入json库等 9 | 变更详情: 10 | 11 | ### Feature 12 | 13 | ● 新增数据源管理模块,支持用户管理数据源,目前支持MySql数据源 14 | 15 | ● 流程设计新增MySql节点,允许用户基于MySql节点,实现数据源的查询、更新、删除等操作 16 | 17 | ● Groovy脚本支持引入json库,进行序列化与反序列化操作 18 | 19 | ● 提供juggle-client依赖包,使普通Java项目也能集成Juggle流程 20 | 21 | 22 | ### Enhancement&Refactor 23 | 24 | ● 新增完善的方法节点,判断节点,代码节点的使用说明和示例 25 | 26 | ### BugFix 27 | 28 | ● 修复api接口/流程调试参数为复杂类型错误的问题 29 | 30 | ● 修复流程执行引擎请求头常量填充丢失 31 | 32 | ● 修复代码节点后无法添加新节点的问题 33 | 34 | ### Dependency 35 | -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2024-07-30-juggle-1.2.1-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.2.1版本 - 2024/07/30 3 | createTime: 2024/10/21 15:44:32 4 | permalink: /changelog/1.x/juggle-1.2.1.html 5 | --- 6 | # 1.2.1版本 - 2024/07/30 7 | 8 | 9 | 10 | ### Feature 11 | 12 | ● 代码节点,mysql节点新增自定义描述 13 | 14 | ● 文档完善方法节点,判断节点,代码节点,MySql节点的具体使用介绍 15 | 16 | ● 套件新增套件图像,方便套件识别度 17 | 18 | ● 优化流程设计画布节点显示,显示节点类型,增加节点的辨识度 19 | 20 | ● 接口参数支持添加path参数,query参数,body参数 21 | 22 | 23 | ### Enhancement&Refactor 24 | 25 | ● 优化流程运行性能,单流程运行需要内存减少30% 26 | 27 | ● 优化流程引擎核心代码,提升合理性 28 | 29 | ### BugFix 30 | 31 | ● 修复流程定义分页列表失效 32 | 33 | ● 修复MySql节点查询sql与接收对象属性不完全一致时发生异常的问题 34 | 35 | ● 修复“查询用户订单列表”内置接口由于预置数据导致的异常问题 36 | 37 | ● 修复接口调试面板偶现出错导致奔溃的问题 38 | 39 | ● 修复方法节点出入参参数据类型为对象类型时不显示的问题 40 | 41 | -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2024-09-27-juggle-1.2.2-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.2.2版本 - 2024/09/27 3 | createTime: 2024/10/21 15:44:32 4 | permalink: /changelog/1.x/juggle-1.2.2.html 5 | --- 6 | # 1.2.2版本 - 2024/09/27 7 | 该版本主要新增了日期数据类型,赋值节点,套件市场等核心能力,让Juggle更加灵活,不用进行任何开发就能快速集成主流的平台系统。 8 | 变更详情: 9 | 10 | ### Feature 11 | 12 | ● 代码节点,新增大屏代码编写能力 13 | 14 | ● 新增赋值节点,解决多分支条件下多个变量的赋值能力 15 | 16 | ● 为参数节点添加描述字段 17 | 18 | ● 新增“日期”数据类型 19 | 20 | ● 新增"QQ邮箱",”163邮箱“,”通义千问“,”彩云天气“,”阿里云短信“等五个官方套件 21 | 22 | ### BugFix 23 | 24 | ● 修复流程过程中由于接口404导致的流程异常问题 25 | 26 | ● 修复流程中使用接口中有path参数的接口时,出现参数没有没有被替换的问题 27 | 28 | ● 修复空赋值节点保存后,二次修改赋值规则时出现无法赋值的问题 29 | 30 | ● [[#24](https://github.com/somta/Juggle/issues/24)]修复docker镜像中缺少H2数据库文件导致启动失败 31 | 32 | ● [[#IAG0EP](https://gitee.com/Somta/Juggle/issues/IAG0EP)]修复window下通过压缩包启动Juggle中文乱码问题 33 | 34 | ### Dependency 35 | ● 升级element-plus到2.8.2版本 36 | 37 | ● 升级vite到5.2.6版本,解决安全漏洞问题 -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2024-11-27-juggle-1.2.3-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.2.3版本 - 2024/11/27 3 | createTime: 2024/10/21 15:44:32 4 | permalink: /changelog/1.x/juggle-1.2.3.html 5 | --- 6 | # 1.2.3版本 - 2024/11/27 7 | 该版本主要新增模板市场,对象属性下探等核心能力,优化了流程的执行性能和用户体验,新增五个套件等。 8 | 变更详情: 9 | 10 | ### Feature 11 | 12 | ● 判断节点,方法节点,赋值节点参数赋值时支持对象属性下探选择 13 | 14 | ● 新增模板市场能力 15 | 16 | ● 代码节点,支持书写JavaScript脚本代码 17 | 18 | ● 新增普通Juggle项目快速集成Juggle的sdk,帮助用户快速集成Juggle流程 19 | 20 | ● 抽离市场配置域名,支持套件市场和模板市场私有化能力 21 | 22 | ● 新增数据源重要信息加密存储,防止数据泄露 23 | 24 | ● 新增螺丝帽短信,钉钉群机器人,微信群机器人,随机值生成,值处理等套件 25 | 26 | ● 流程定义,流程节点等节点支持可调整抽屉,更好的用户体验,感谢@Abluee 27 | 28 | ### Enhancement&Refactor 29 | 30 | ● 将流程设计画布抽离成单独的页面,提升体验度 31 | 32 | ● 变量选择时,同时展示变量键和变量名称,增加识别度 33 | 34 | ● 补充了Juggle的部署和配置文档 35 | 36 | ● 发布juggle-client 1.1.0,juggle-spring-boot 1.1.3版本,增强流程集成能力 37 | 38 | 39 | ### BugFix 40 | 41 | ● [流程设计页面删除节点问题](https://github.com/somta/Juggle/pull/26),感谢@fun90 42 | 43 | ● [解决高并发下变量引擎反复创建类导致GC的问题](https://github.com/somta/Juggle/pull/28),感谢@fun90 44 | 45 | ● [修复Groovy脚本执行过程中占用内存过大的问题](https://github.com/somta/Juggle/pull/28),感谢@fun90 46 | 47 | ### Dependency 48 | 49 | ● 升级SpringBoot,caffeine等版本解决已知安全漏洞 -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2025-1-27-juggle-1.3.0-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.3.0版本 - 2025/1/27 3 | createTime: 2024/11/21 15:44:32 4 | permalink: /changelog/1.x/juggle-1.3.0.html 5 | --- 6 | # 1.3.0版本 - 2025/01/27 7 | 该版本主要修复了一些新的bug,优化交互逻辑,提升用户体验,同时提供了加解密等套件,丰富套件市场。 8 | 变更详情: 9 | 10 | ### Feature 11 | 12 | ● 对象列表支持根据创建时间排序 13 | 14 | ● 新增加解密套件,十几种加解密方法,满足不同的加解密需求 15 | 16 | ● 流程列表支持根据创建时间排序 17 | 18 | ● 右上角菜单添加关于说明,方便查看当前使用juggle的版本信息 19 | 20 | ● 接口调试支持打开新窗口,简化操作路径 21 | 22 | 23 | ### Enhancement&Refactor 24 | 25 | ● 发布juggle-client 1.1.1版本,juggle-spring-boot-starter 1.1.4版本 26 | 27 | ● 完善值处理套件,添加多个数据转换方法 28 | 29 | 30 | ### BugFix 31 | 32 | ● 修复多实例部署情况下,无法登录的问题 33 | 34 | ● [[#41](https://github.com/somta/Juggle/issues/41)]修复无法连续添加赋值节点问题 35 | 36 | ● [[#40](https://github.com/somta/Juggle/issues/40)]流程刷新后无法修改变量类型 37 | 38 | ● 修复部分套件无法购买的问题 39 | -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/2025-6-27-juggle-1.3.2-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: juggle v1.3.2版本 - 2025/6/27 (待发布) 3 | createTime: 2025/05/06 15:44:32 4 | permalink: /changelog/1.x/juggle-1.3.2.html 5 | --- 6 | # 1.3.1版本 - 2025/04/27 7 | 该版本主要修复了一些新的bug,优化交互逻辑,提升用户体验,新增了多个套件,满足更多的业务场景需求。 8 | 变更详情: 9 | 10 | ### Feature 11 | 12 | ● 完成系统的新一轮流程压测,输出相关的压测报告并完善到官网 13 | 14 | ● 15 | 16 | ● 17 | 18 | ● 19 | 20 | ### Enhancement&Refactor 21 | 22 | ● 暴露出更多配置供使用者配置,如连接池的最大连接数,最小连接数,连接最大空闲时间等通过这些配置进一步提高Juggle的运行性能。 23 | 24 | ● 新增暴露镜像环境变量,支持通过环境变量设置JVM参数,如JVM堆内存大小,元空间大小,gc日志记录等。 25 | 26 | ● 27 | 28 | ### BugFix 29 | 30 | ● 31 | 32 | ● 33 | 34 | ● 35 | 36 | 37 | -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/images/flow_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/changelog/1.x/images/flow_example.png -------------------------------------------------------------------------------- /docs/docs/notes/changelog/1.x/images/flow_example_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/changelog/1.x/images/flow_example_2.png -------------------------------------------------------------------------------- /docs/docs/notes/changelog/changelog-index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Juggle更新说明 3 | createTime: 2024/10/21 15:44:32 4 | permalink: /changelog/introduce.html 5 | --- 6 | 7 | 这是关于Juggle的更新说明 -------------------------------------------------------------------------------- /docs/docs/notes/guide/community/donate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 赞助我们 3 | description: Juggle赞助信息 4 | keywords: 5 | - Juggle赞助 6 | - Juggle 7 | - 赞助Juggle 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/community/donate/ 10 | --- 11 | 12 | 如果您有产品需要在Juggle的官网上进行推广,可以申请成为Juggle的赞助商,Juggle将对您的产品在Banner位进行展示,Juggle官网通过CPM(曝光度)的方式收取费用,详情可以加微信细聊:`Somta_Gavin` ,添加时请备注来意。 13 | 14 | 或者可以通过发送邮件的方式与我们取得联系,邮箱地址:`305123882@qq.com` 15 | 16 | 17 | 当然如果您觉得`Juggle`不错,也可以通过扫码的方式请Juggle的作者喝一杯咖啡!!! 18 | 19 | 20 | | :[bi:alipay]: AliPay | :[fa:wechat]: WeChat | 21 | |----------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| 22 | | ![Alipay](images/pay_zfb.jpg){width="300" height="300" style="width:150px"} | ![WeChat](images/pay_wechat.jpg){width="300" height="300" style="width:150px"} | 23 | 24 | 25 | 26 | 当然也欢迎Star、PR、ISSUE等任何方式的支持,非常感谢~~! 27 | 28 | 前往[https://github.com/somta/Juggle](https://github.com/somta/Juggle)点个Star吧~~ :) 29 | 30 | -------------------------------------------------------------------------------- /docs/docs/notes/guide/community/get-help.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 获取帮助 3 | description: Juggle社区信息 4 | keywords: 5 | - Juggle社区 6 | - Juggle 7 | - 帮助信息 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/community/community-get-help/ 10 | --- 11 | 12 | 如果您需要有关`Juggle`的帮助,我们将在这里为您提供帮助,以下是获取帮助的一些方法: 13 | 14 | - 仔细阅读官方文档:[https://juggle.plus](https://juggle.plus) 15 | - 在[https://github.com/somta/Juggle/issues](https://github.com/somta/Juggle/issues)报告错误或者增强需求及建议. 16 | - 在[https://github.com/somta/Juggle/issues](https://github.com/somta/Juggle/issues)搜索相关问题,也许别人早已经碰到了你的问题 17 | - 关注微信公众号获取加群二维码 18 | 19 | ![微信公众号二维码](images/gzh_qrcode.jpg) -------------------------------------------------------------------------------- /docs/docs/notes/guide/community/images/gzh_qrcode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/community/images/gzh_qrcode.jpg -------------------------------------------------------------------------------- /docs/docs/notes/guide/community/images/pay_wechat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/community/images/pay_wechat.jpg -------------------------------------------------------------------------------- /docs/docs/notes/guide/community/images/pay_zfb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/community/images/pay_zfb.jpg -------------------------------------------------------------------------------- /docs/docs/notes/guide/community/images/wxqq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/community/images/wxqq.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/integration/images/gen_token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/integration/images/gen_token.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/integration/images/openapi_get_flow_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/integration/images/openapi_get_flow_result.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/integration/images/openapi_trigger_flow_get.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/integration/images/openapi_trigger_flow_get.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/integration/images/openapi_trigger_flow_post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/integration/images/openapi_trigger_flow_post.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/integration/integration.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 业务系统集成Juggle 3 | description: 业务系统如何快速集成Juggle,完成业务系统与流程的对接。 4 | keywords: 5 | - Juggle 6 | - 系统集成 7 | - 集成Juggle 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/integration/ 10 | --- 11 | 12 | # 业务系统集成Juggle 13 | Juggle提供了非常强大的流程设计能力,通过Juggle的流程编排能力,我们通过界面的编排就能完成现在大部分后端服务的开发工作,那如何将Juggle的流程快速接入现有的业务系统,为业务系统赋能呢? 14 | 15 | ### 为什么要集成Juggle 16 | 17 | - 每个业务系统的协议模型对象都可能不一样,Juggle定义的协议模型对象无法适配所有业务系统,通过业务系统集成Juggle,可以屏蔽协议模型差异, 将Juggle变成您的业务系统的一部分。 18 | - 设计的流程并不一定是给前端调用,有可能是业务系统某个核心功能的一部分,还需要融合其他的业务逻辑,此时可以通过集成Juggle,将流程的能力融入到功能的某部分逻辑中。 19 | 20 | ### 集成Juggle有哪些方式 21 | 22 | 为了简化集成流程,Juggle提供了对应语言的sdk,业务系统引入相关的sdk,就能直接调用设计好的流程,具体不同语言的sdk的使用方式如下: 23 | 24 | - [普通Java项目集成Juggle](https://www.juggle.plus/docs/guide/integration/java-juggle) 25 | - [SpringBoot集成Juggle](https://www.juggle.plus/docs/guide/integration/spring-boot-juggle) 26 | 27 | 更多语言的sdk,持续更新中...... -------------------------------------------------------------------------------- /docs/docs/notes/guide/introduce/concept.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 概念 3 | description: Juggle提供了哪些概念,这些概念都是什么意思? 4 | keywords: 5 | - Juggle的概念 6 | - 流程定义 7 | - 流程版本 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/concept/ 10 | --- 11 | 12 | # 概念 13 | 14 | ### 套件 15 | 套件主要是一系列的接口集合,避免接口过多在流程编排的过程中选接口会变的非常麻烦,同时提供了套件和接口的使用说明 16 | 17 | ### 接口 18 | 接口是不同微服务对外提供的rest接口,接口是编排过程中的最小单位,开发者可以通过在页面上新建接口或通过starter自动上传的方式来新增接口。 19 | 20 | ### 流程定义 21 | 流程定义是流程部署前的前置步骤,先通过流程定义出一个满足需求的流程,测试通过后,将流程部署,最终得到一个用于生产环境的流程,流程定义将开发过程和正式运行完全隔离开,避免了对正式环境的干扰。 22 | 23 | ### 流程 24 | 流程是由流程定义部署得到的产物,流程下会包含多个流程版本。 25 | 26 | ### 流程版本 27 | 流程版本是由流程部署得到的产物,一个流程对应多个流程版本,每个流程版本都有一个唯一的触发地址,每个流程被启用后才能被正式使用,通过多版本流程可以轻松实现流程的灰度切换和升级。 28 | 29 | ### 变量 30 | 变量是指流程中的变量,跟程序中的变量类似,都是用于承接和流转数据,通过变量,接口,判断可以通过编排的形式实现业务逻辑。 31 | 32 | ### 对象 33 | 对象是用于入参和出参中承载复杂信息的,在实际的系统对接和编排过程中,只靠简单的数据类型往往无法满足业务场景的需求,此时可以通过基础类型+对象的组合,进行复杂类型的封装,然后用于流程编排。 -------------------------------------------------------------------------------- /docs/docs/notes/guide/introduce/introduce-index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Juggle简介 3 | description: 关于Juggle的详细介绍 4 | keywords: 5 | - 微服务编排框架 6 | - 第三方系统集成框架 7 | - 定制化开发框架 8 | createTime: 2024/10/21 10:53:12 9 | permalink: /docs/guide/introduce/ 10 | --- 11 | 12 | ### 概览 13 | Juggle中文有“积木,魔法”的意思,寓意Juggle像积木一样灵活,像魔法一样强大,满足灵活多变的业务需求,定制化开发等业务场景,助力业务快速落地! 14 | 15 | ### Juggle能做什么? 16 | Juggle是一个图形化的微服务编排工具,通过简单的流程编排,快速完成接口开发,大大提高开发效率,Juggle致力于完成以下几个使命: 17 | - 微服务的接口编排,根据已有的基础接口快速开发新接口 18 | - 第三方系统平台对接集成,快速打通系统之间的壁垒 19 | - 面向前端提供聚合适配聚合层(即业界的BFF层) 20 | - 私有化标准功能的定制开发,通过Juggle实现定制部分,避免污染标准代码 21 | -------------------------------------------------------------------------------- /docs/docs/notes/guide/market/images/example_suite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/market/images/example_suite.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/open/pull-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pull Request模板 3 | description: 开源项目的Pull Request模板。 4 | keywords: 5 | - Juggle 6 | - PR模板 7 | - Juggle开源 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/open/pull-request/ 10 | --- 11 | 12 | # Pull Request模板 13 | 14 | ### 相关 Issue 15 | 16 | 请列出与此 Pull Request 相关的 Issue 编号(如果有的话)。 17 | 18 | ### 修改内容 19 | 20 | 请描述你所做的修改及其目的。 21 | 22 | ### 测试步骤 23 | 24 | 请提供测试此 Pull Request 的步骤和说明。 25 | 26 | ### 预期的行为 27 | 28 | 请描述你期望这个 Pull Request 完成的目标。 29 | -------------------------------------------------------------------------------- /docs/docs/notes/guide/open/reporting-bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 如何提交问题报告 3 | description: 如何给Juggle提问题,提交问题的格式。 4 | keywords: 5 | - Juggle 6 | - 问题报告格式 7 | - 复现步骤 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/open/reporting-bug/ 10 | --- 11 | 12 | # 如何提交问题报告 13 | 14 | 如果Juggle项目的任何代码或文档存在问题,请通过[opening an issue](https://github.com/somta/Juggle/issues/new)告诉我们。我们会认真对待 15 | 16 | 每一个错误,在产品面前没有不重要的问题。不过在创建错误报告之前,请检查是否存在报告相同问题的issues。 17 | 18 | 为了使错误报告准确且易于理解,请尽可能多的提供细节如:那个版本,什么环境,什么配置,错误日志,具体复现步骤等,具体可参考一下模板。 19 | 20 | ``` 21 | ### 基础信息 22 | 操作系统:Ubuntu 23 | Juggle版本:1.0.0 24 | 部署方式:Docker 25 | 26 | ### 问题描述 27 | 28 | 29 | ### 复现步骤 30 | 1. 31 | 2. 32 | 3. 33 | 34 | ### 错误日志或截图 35 | 36 | ``` 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /docs/docs/notes/guide/operation/deployment-cluster.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 集群模式部署 3 | description: 通过集群模式部署一个高可用的Juggle,可用于生产环境 4 | keywords: 5 | - Juggle集群部署方案 6 | - Juggle高可用部署 7 | - 部署Juggle 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/operation/deployment-cluster/ 10 | --- 11 | 12 | 集群模式主要用于生产环境,要确保Juggle服务的高可用、高扩展、高并发等要求,确保在单节点故障发生时不影响业务的运行。故提出以下几点要求 13 | 14 | 1. Juggle要多实例部署 15 | 2. 中间件切换为MySql数据库,Redis缓存这种具有更高可用性的中间件 16 | 3. 使用域名访问Juggle,不要直连IP,避免单机器宕机后,ip变动导致的问题 17 | 18 | 集群模式下,架构图如下所示 19 | 20 | ![集群部署架构图](images/cluster_deploy_framework.png) 21 | 22 | 23 | 具体切换MySql数据库和Redis缓存的方法可以参考Juggle单机部署的方法 [单机模式部署](https://juggle.plus/docs/guide/operation/deployment-standalone) 24 | 25 | 26 | 27 | 28 | :::warning 29 | 30 | 集群模式下存在多个Juggle实例,不能使用内置H2数据库存储数据,要切换成Mysql等高可用的数据库;也不能使用内置缓存,要切换为Redis缓存, 31 | 因为多实例下使用各自的内存缓存,会导致缓存中的流程结果混乱。 32 | 33 | ::: -------------------------------------------------------------------------------- /docs/docs/notes/guide/operation/deployment-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 部署手册概览 3 | description: 如何快速介绍微服务编排框架Juggle? 4 | keywords: 5 | - Juggle部署方案 6 | - Juggle部署 7 | - 部署方式 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/operation/deployment-overview/ 10 | --- 11 | 12 | ### 1.Juggle支持的两种部署模式 13 | 14 | 单机模式 - 又称单例模式,主要用于测试和单机试用。 15 | 16 | 集群模式 - 主要用于生产环境,确保高可用。 17 | 18 | #### a.单机模式 19 | 20 | 单机模式又称单例模式,拥有所有Juggle的功能及特性,具有极易部署,快速启动等优点。但是无法与其他Juggle实例组成集群,无法在节点或网络故障时提供高可用能力。单机模式同样可以使用内置H2数据库(默认)和外置数据库进行存储。 21 | 22 | 23 | 24 | 单机模式主要适合于工程师于本地搭建或于测试环境中搭建Juggle环境,主要用于开发调试及测试使用;也能够兼顾部分对稳定性和可用性要求不高的业务场景。 25 | 26 | 27 | 28 | 单机模式的部署参考文档: [单机模式部署](https://juggle.plus/docs/guide/operation/deployment-standalone) 29 | 30 | #### b.集群模式 31 | 32 | 集群模式又称多例模式,通过将多个Juggle实例节点组成一个集群,集群模式具有高可用、高扩展、高并发等优点,确保在故障发生时不影响业务的运行。集群模式**必须采用**外置数据库和外置缓存进行存储。 33 | 34 | 35 | 36 | 该模式主要适合于生产环境,也是我们推荐的部署模式。 37 | 38 | 39 | 40 | 单机模式的部署参考文档: [集群模式部署](https://juggle.plus/docs/guide/operation/deployment-cluster) -------------------------------------------------------------------------------- /docs/docs/notes/guide/operation/images/application_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/operation/images/application_config.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/operation/images/cluster_deploy_framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/operation/images/cluster_deploy_framework.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/test/images/300_500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/test/images/300_500.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/test/images/600_500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/test/images/600_500.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/test/images/900_500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/test/images/900_500.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/design/nodes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 节点 3 | description: 节点是流程的核心,通过不同节点的串联和连接,能配置出非常复杂的流程,满足不同的业务常见需求。 4 | keywords: 5 | - 流程节点 6 | - 方法调用 7 | - 变量引擎 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/user/design/nodes/ 10 | --- 11 | 12 | # 节点 13 | 14 | ### 1.开始节点 15 | 16 | 开始节点为系统默认节点,表示流程的开始,没有任何业务含义。 17 | 18 | ### 2.结束节点 19 | 20 | 结束节点为系统默认节点,表示流程的结束,没有任何业务含义。 21 | 22 | ### 3.方法节点 23 | 24 | 方法节点是用来承载接口的,通过方法节点,用户在方法节点上定义不同系统的接口,然后通过流程编排打通各个系统之间的屏障,达到各个系统互通互联的目的。 25 | 26 | ### 4.判断节点 27 | 28 | 判断节点是用来承载判断条件的,一个判断节点会有多个分支,默认会有一个else分支,每个分支之间是互斥的,从左往右依次执行,第一个命中的分支将会被触发,如果都没命中就会进入默认的else分支。 29 | 30 | 判断节点的判断条件只能由一个或多个变量组成,每种数据类型的变量支持的[表达式](/docs/guide/user/data-type-info/#数据类型支持的表达式)是不一样,变量可以是入参变量,出参变量,中间变量,具体变量的赋值来源可以参考[变量](/docs/guide/user/design/variable/)章节。 31 | 32 | ### 5.代码节点 33 | 34 | 自定义代码节点是用来承载代码的,即可以在流程设计过程中添加一个自定义的代码节点,可以在这个节点内直接编写Groovy的脚本代码,脚本代码可以完成变量的组装转换,业务逻辑增强,数据清洗等工作,代码节点将极大的提升Juggle编排的灵活性 -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/design/variable.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 变量 3 | description: 变量是流程设计中数据流转的纽带,变量支持全流程跨节点的流转,支持变量表达式。 4 | keywords: 5 | - 流程变量 6 | - 变量表达式 7 | - 条件表达式 8 | - 变量引擎 9 | createTime: 2024/10/18 15:09:38 10 | permalink: /docs/guide/user/design/variable/ 11 | --- 12 | 13 | # 变量 14 | 15 | 变量是整个流程设计中数据流转的纽带,不同变量或变量与参数的相互赋值是根据数据类型来决定的,同一种数据类型的变量和参数之间才能相互赋值传递,变量的[数据类型](/docs/guide/user/data-type-info/)跟方法的出入参类型是一致的,变量主要分为三类,入参变量,出参变量,中间变量,详细介绍如下: 16 | 17 | ### 1.入参变量 18 | 19 | 入参变量是根据流程的入参系统自动创建的变量,该变量不能在变量管理中修改,只能通过修改流程的入参来间接修改变量。入参变量能作为流程中任何方法节点的入参赋值,也可以作为判断节点的判断条件。 20 | 21 | ### 2.出参变量 22 | 23 | 出参变量是根据流程的出参系统自动创建的变量,该变量不能在变量管理中修改,只能通过修改流程的出参来间接修改变量。出参变量能作为流程中任何方法节点的出参赋值,但是出参变量不能作为判断节点的判断条件使用。 24 | 25 | ### 3.中间变量 26 | 27 | 中间变量是有用户自己定义的,主要用于流程设计中流程数据使用,可用于方法节点的出入参赋值,也可以用户判断节点的判断条件使用。 -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/flow-version.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 流程版本 3 | description: Juggle的流程版本是为了解决用户流程回滚和灰度发布等问题,帮助用户减轻流程切换的成本,提供流程的使用效率。 4 | keywords: 5 | - 流程版本 6 | - 第三方系统集成 7 | - 微服务接口编排 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/user/flow-version/ 10 | --- 11 | 12 | # 流程版本 13 | 14 | 流程版本是流程运行的最终实体,流程设计完成后部署就会产生一个流程版本,每个流程版本无需用户手动输入,系统会自动增加版本号。 15 | 16 | ### 启用流程版本 17 | 18 | 1.在"**流程**" > "**流程列表**" > "**版本列表**"页面,点击“**启用**”按钮 19 | 20 | 2.在二次确认弹框中,再次点击“**确定**”按钮 21 | 22 | :::info 23 | 启用后的流程版本才能被触发调用。 24 | ::: 25 | 26 | ### 禁用流程版本 27 | 28 | 1.在"**流程**" > "**流程列表**" > "**版本列表**"页面,点击“**禁用用*”按钮 29 | 30 | 2.在二次确认弹框中,再次点击“**确定**”按钮 31 | 32 | :::info 33 | 禁用后的流程就无法调用了,调用的时候抛出“**请启用流程后在调用流程**”的提示。 34 | ::: 35 | 36 | ### 删除流程版本 37 | 38 | 1.在"**流程**" > "**流程列表**" > "**版本列表**"页面,点击“**删除**”按钮 39 | 40 | 2.在二次确认弹框中,再次点击“**确定**”按钮 41 | 42 | :::info 43 | 启用中的流程版本是无法删除的,如果要删除需要确认没有系统调用后,先禁用流程版本,然后在删除该流程版本 44 | ::: -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/flow.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 流程 3 | description: Juggle的流程是流程定义部署后的产物,流程支持多版本,可以实现流程的灰度和快速回滚等能力。 4 | keywords: 5 | - 流程 6 | - Juggle流程 7 | - 流程示例 8 | - 微服务编排流程 9 | createTime: 2024/10/18 15:09:38 10 | permalink: /docs/guide/user/flow/ 11 | --- 12 | 13 | # 流程 14 | 15 | 流程是由流程定义部署后的产物,具体部署过程可以参考[流程定义部署](/docs/guide/user/flow-definition/#部署流程),但是Juggle并没有让流程作为最终的运行实体,因为实际应用场景下如果将流程作为最终的运行实体就会面临以下问题: 16 | 17 | 1.我刚才部署的问题真实运行的时候发现有问题,怎么快速回滚。 18 | 19 | 2.旧流程不能下线,但是新流程我要先正式验证一下,然后慢慢切换,类似灰度的过程。 20 | 21 | 因此Juggle引入了[流程版本](/docs/guide/user/flow-version/)的概念,让[流程版本](/docs/guide/user/flow-version/)做最终运行的实体,以此解决上面的问题。一个流程下会存在多个流程版本。 22 | 23 | :::info 24 | 同一个流程下的多个流程版本的流程类型一定是相同的。 25 | ::: 26 | 27 | -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/add_api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/add_api.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/add_suite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/add_suite.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/deploy_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/deploy_flow.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/edit_api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/edit_api.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/edit_suite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/edit_suite.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/flow_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/flow_example.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/flow_example_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/flow_example_1.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/flow_example_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/flow_example_2.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/images/flow_example_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/images/flow_example_3.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/assign-node.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 赋值节点 3 | description: 通过赋值节点能完成不同分支情况下给同一个变量进行不同的赋值操作,实现不同场景下变量不同的需求。 4 | keywords: 5 | - 接口编排 6 | - 流程赋值 7 | - juggle编排 8 | createTime: 2025/4/18 15:09:38 9 | permalink: /docs/guide/user/nodes/assign-node/ 10 | --- 11 | 12 | # 赋值节点 13 | 赋值节点主要是来用户根据业务场景的需求,在不同的分支条件下对同一变量赋予不同的值,以满足不同的业务场景的赋值的需要。 14 | 15 | ### 节点介绍 16 | 17 | 1.点击“+”,选择赋值节点 18 | 19 | 2.在代码节点页面,输入**节点名称**,**自定义代码**,点击**“确定”**按钮 20 | 21 | ![新增节点](images/add_assign_node.png) 22 | 23 | ### 功能介绍 24 | 25 | 赋值节点主要是给中间变量,出参变量进行变量赋值,赋值来源主要包括常量,其他中间变量,其他接口出参等三种情况,最终达到不同分支条件下给同一个变量赋值不同值的目的。 26 | 27 | -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/condition-node.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 判断节点 3 | description: 通过判断节点,用户可以根据流程的变量自由组合出不同的分支流程,通过这些分支流程处理不同的业务逻辑,使流程非常灵活 4 | keywords: 5 | - 流程节点 6 | - 判断节点 7 | - 判断表达式 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/user/nodes/condition-node/ 10 | --- 11 | 12 | # 判断节点 13 | 判断节点是用来承载判断条件的,一个判断节点会有多个分支,默认会有一个else分支,每个分支之间是互斥的,从左往右依次执行,第一个命中的分支将会被触发,如果都没命中就会进入默认的else分支。 14 | 15 | ### 节点介绍 16 | 17 | 1.点击“+”,选择判断节点 18 | 19 | 2.在代码节点页面,输入**节点名称**,**节点描述**等信息 20 | 21 | ![新增判断节点](images/add_condition_node.png) 22 | 23 | 3.点击**新增分支**按钮,输入**分支名称**,**分支条件**,点击**“确定”**按钮 24 | 25 | ![判断节点分支条件](images/add_condition_item.png) 26 | 27 | ### 功能介绍 28 | 29 | #### a.条件执行逻辑 30 | 31 | 多个判断条件是排它的,从左到右依次匹配,匹配到对应的条件后就会进入命中的分支逻辑,多个分支条件的循序可以在判断节点的面板调整,来调整条件匹配的优先级。 32 | 33 | 判断节点的判断条件只能由一个或多个变量组成,多个变量和条件之间可以自由的进行且或组合,每种数据类型的变量支持的[表达式](/docs/guide/user/data-type-info/#数据类型支持的表达式)是不一样,可以用于条件判断的变量有入参变量,出参变量,中间变量,具体变量的赋值来源可以参考[变量](/docs/guide/user/design/variable/)章节。 -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/images/add_assign_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/nodes/images/add_assign_node.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/images/add_code_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/nodes/images/add_code_node.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/images/add_condition_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/nodes/images/add_condition_item.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/images/add_condition_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/nodes/images/add_condition_node.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/images/add_method_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/nodes/images/add_method_node.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/images/add_mysql_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/nodes/images/add_mysql_node.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/images/sql_object.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/guide/user/nodes/images/sql_object.png -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/nodes/method-node.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 方法节点 3 | description: 通过方法节点,用户在方法节点上定义不同系统的接口,然后通过流程编排打通各个系统之间的屏障,系统互通互联。 4 | keywords: 5 | - 流程节点 6 | - 方法节点 7 | - 系统集成 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/user/nodes/method-node/ 10 | --- 11 | 12 | # 方法节点 13 | 方法节点是用来承载接口的,在该节点中可以选择套件下定义好的接口,然后通过变量给接口请求头或入参赋值,并根据需要将接口出参赋值给变量,供流程编排使用,通过多个系统接口的编排可以打通系统之间的屏障。 14 | 15 | ### 节点介绍 16 | 17 | 1.点击“+”,选择方法节点 18 | 19 | 2.在代码节点页面,输入**节点名称**,**节点描述**,**选择套件和接口**,**接口请求头/请求参数/出参的赋值**,点击**“确定”**按钮 20 | 21 | ![新增方法节点](images/add_method_node.png) 22 | 23 | ### 功能介绍 24 | 25 | #### a.入参赋值 26 | 27 | 入参赋值支持两种赋值方式: 28 | 29 | 常量赋值:即根据字段的数据类型,在后面的赋值框中输入对应的常量。 30 | 31 | 变量赋值:即根据字段的数据类型,在后面的赋值框中选择对应的变量。 32 | 33 | #### b.出参赋值 34 | 35 | 出参赋值只能将接口的参数赋值给字段类型相同的变量(这里包括流程的出参变量和中间变量) 36 | 37 | :::info 38 | 39 | 节点编码:由系统自动生成,method_8位随机. 40 | 41 | 节点名称:用户输入,最终会显示在流程设计的节点卡片上 42 | 43 | 节点描述:详细描述这个节点的作用 44 | 45 | ::: -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/object.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 对象 3 | description: 对象主要是为了解决入参和出参中复杂的数据结构,同时对象的定义让流程编排更加灵活。 4 | keywords: 5 | - DDD领域驱动 6 | - 领域对象 7 | - 领域模型 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/user/object/ 10 | --- 11 | 12 | # 对象 13 | 14 | 对象主要是为了解决入参和出参中复杂的数据结构,通过基础类型+对象类型的组合,来满足系统对接过程中的复杂结构,同时对象在流程编排中也支持**下探取值**,**取值判断**,**对象判断**等能力,这让流程编排更加灵活。 15 | 16 | ### 创建对象 17 | 1.在"**对象"**页面,点击“**新建**”按钮 18 | 19 | 2.在“**新增对象**”面板,完成**对象编码**,**对象名称**,**对象描述**(非必填)设置后,点击“**确认**”按钮 20 | 21 | ![新增对象](images/add_suite.png) 22 | 23 | ### 编辑对象 24 | 1.在 "**对象**"页面,点击“**编辑**” 25 | 26 | 2.在“**编辑对象**”面板,完成**对象编码**,**对象名称**,**对象描述**(非必填)设置后,点击“**确认**”按钮 27 | ![编辑对象](images/edit_suite.png) 28 | 29 | ### 删除对象 30 | 1.在"**对象**"列表页面,点击“**删除**” 31 | 32 | 2.在二次确认对话框中,点击“**确认**”按钮 33 | :::info 34 | 流程中使用的对象,是流程使用那刻的快照,因此从对象列表把对象删除后,并不会影响流程的使用和运行。 35 | ::: 36 | 37 | -------------------------------------------------------------------------------- /docs/docs/notes/guide/user/suite.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 套件 3 | description: 套件包含套件说明,API接口集合,套件帮助文档等多个实体组成,方便用户通过套件快速搭建流程。 4 | keywords: 5 | - API套件 6 | - API接口 7 | - 微服务接口编排 8 | createTime: 2024/10/18 15:09:38 9 | permalink: /docs/guide/user/suite/ 10 | --- 11 | 12 | # 套件 13 | 14 | 套件包含套件说明,API接口集合,套件帮助文档等多个实体组成。套件的设计能帮忙用户通过自建套件+系统自带套件,快速搭建流程,节省流程搭建的时间。 15 | 16 | ### 创建套件 17 | 1.在"**接口**" > "**套件**"页面,点击“**新建**”按钮 18 | 19 | 2.在“**新增套件**”面板,完成**套件编码**,**套件名称**,**套件描述**(非必填)设置后,点击“**确认**”按钮 20 | 21 | ![新增套件](images/add_suite.png) 22 | 23 | ### 编辑套件 24 | 1.在"**套件**" > "**套件**"页面,点击“**编辑**” 25 | 26 | 2.在“**编辑套件**”面板,完成**套件编码**,**套件名称**,**套件描述**(非必填)设置后,点击“**确认**”按钮 27 | 28 | ![修改套件](images/edit_suite.png) 29 | 30 | ### 删除套件 31 | 1.在"**套件**" > "**套件**"页面,点击“**删除**” 32 | 33 | 2.在二次确认对话框中,点击“**确认**”按钮 34 | :::info 35 | 套件下如果已经绑定了接口,则不能删除该套件 36 | ::: 37 | 38 | -------------------------------------------------------------------------------- /docs/docs/notes/suite/internal/random-value.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 随机值 3 | description: 如何使用随机值套件,并详细介绍随机值套件的方法 4 | keywords: 5 | - 随机值 6 | - 唯一值 7 | - 随机时间 8 | permalink: /suite/internal/random.html 9 | createTime: 2024/10/18 18:29:05 10 | --- 11 | 12 | 随机值套件文档 待完善 -------------------------------------------------------------------------------- /docs/docs/notes/suite/internal/value-handle.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 值处理 3 | description: 如何使用值处理套件,并详细介绍值处理套件的方法 4 | keywords: 5 | - 字符串转换 6 | - 字符串拼接 7 | - 值提取 8 | permalink: /suite/internal/value-handle.html 9 | createTime: 2024/10/21 10:43:26 10 | --- 11 | 12 | 随机值套件文档 待完善 -------------------------------------------------------------------------------- /docs/docs/notes/suite/introduce.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 套件学堂介绍 3 | description: 如何使用随机值套件,并详细介绍随机值套件的方法 4 | keywords: 5 | - 随机值 6 | - 唯一值 7 | - 随机时间 8 | permalink: /suite/introduce.html 9 | createTime: 2024/10/21 10:34:51 10 | --- 11 | -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/163-email.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 163邮箱套件 3 | description: QQ邮箱如何授权? 4 | keywords: 5 | - QQ邮箱 6 | - QQ邮箱授权 7 | - 应用连接器 8 | permalink: /suite/third/163-email.html 9 | createTime: 2024/10/21 10:29:38 10 | --- 11 | 12 | QQ邮箱是腾讯公司2002年推出,向用户提供安全、稳定、快速、便捷电子邮件服务的邮箱产品,已为超过1亿的邮箱用户提供免费和增值邮箱服务。 官网:https://mail.qq.com/ 13 | 14 | ## 如何获取163邮箱授权码 15 | 1.登录邮箱https://mail.qq.com, 进入设置-帐户 16 | 17 | 2.开启【POP3/SMTP】、【IMAP/SMTP】服务 18 | 19 | 输入验证码完成验证 20 | 21 | 22 | 3.生成QQ邮箱授权码 23 | 24 | -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/caiyun-weather.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 彩云天气 3 | description: 彩云天气如何创建并获取token? 4 | keywords: 5 | - juggle 6 | - 彩云天气 7 | - 应用连接器 8 | createTime: 2024/10/21 10:29:38 9 | permalink: /suite/third/caiyun-weather.html 10 | --- 11 | 12 | 彩云天气是一款由北京彩彻区明科技有限公司开发的高精度天气预报应用,利用雷达数据和AI技术提供分钟级的降水预报。用户可以查看未来两小时内逐分钟的降雨预测,帮助合理安排出行计划。除了基本的天气信息外,彩云天气还提供空气质量、生活指数等功能,致力于为用户提供精准、便捷的气象服务。 13 | 14 | ## 一.彩云天气如何获取token 15 | 1.前往彩云科技开发平台https://platform.caiyunapp.com/login,注册账号 16 | 17 | 2.登录后,在“应用管理”中点击“创建应用” 18 | 19 | ![彩云上创建应用](images/caiyun_weather_1.png) 20 | 21 | 3.创建成功后,就可以在应用列表页面查看Token 22 | ![查看彩云token](images/caiyun_weather_2.png) 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/dingtalk-robot.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: dingtalk-robot 3 | createTime: 2024/10/21 10:29:38 4 | permalink: /suite/8xyu2x0t/ 5 | --- 6 | 7 | todo 待补充 8 | 9 | https://open.dingtalk.com/document/orgapp/custom-robots-send-group-messages 10 | 11 | https://open.dingtalk.com/document/orgapp/custom-bot-send-message-type# -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/images/caiyun_weather_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/suite/third/images/caiyun_weather_1.png -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/images/caiyun_weather_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/suite/third/images/caiyun_weather_2.png -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/images/qqEmail_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/suite/third/images/qqEmail_1.png -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/images/qqEmail_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/suite/third/images/qqEmail_2.png -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/images/qqEmail_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/suite/third/images/qqEmail_3.png -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/images/qqEmail_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/suite/third/images/qqEmail_4.png -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/images/qqEmail_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somta/Juggle/3efd64cce2b5d842257f1f64f53fd9269a7f5dbc/docs/docs/notes/suite/third/images/qqEmail_5.png -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/qq-email.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: QQ邮箱套件 3 | description: QQ邮箱如何授权? 4 | keywords: 5 | - QQ邮箱 6 | - QQ邮箱授权 7 | - 应用连接器 8 | permalink: /suite/third/qq-email.html 9 | createTime: 2024/10/21 10:06:46 10 | --- 11 | 12 | QQ邮箱是腾讯公司2002年推出,向用户提供安全、稳定、快速、便捷电子邮件服务的邮箱产品,已为超过1亿的邮箱用户提供免费和增值邮箱服务。 官网:https://mail.qq.com/ 13 | 14 | :::warning 15 | 注意: 如果需要大批量发送邮件,建议使用阿里云邮箱,因为QQ邮箱不支持批量邮件发送 16 | ::: 17 | 18 | ## QQ邮箱如何授权? 19 | 1.登录邮箱https://mail.qq.com, 进入设置-帐户 20 | ![登录QQ邮箱](images/qqEmail_1.png) 21 | 22 | 2.开启【POP3/SMTP】、【IMAP/SMTP】服务 23 | ![开启邮箱服务](images/qqEmail_2.png) 24 | 25 | 输入验证码完成验证 26 | 27 | ![验证](images/qqEmail_3.png) 28 | 29 | 3.生成QQ邮箱授权码 30 | ![生成授权码](images/qqEmail_4.png) 31 | ![查看授权码](images/qqEmail_5.png) 32 | 33 | -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/tongyi-qianwen.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: tongyi-qianwen 3 | createTime: 2024/10/21 10:29:38 4 | permalink: /suite/bv3xbysc/ 5 | --- 6 | 7 | 8 | todo 待补充 -------------------------------------------------------------------------------- /docs/docs/notes/suite/third/wecom-robot.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 企业微信群机器人 3 | description: QQ邮箱如何授权? 4 | keywords: 5 | - QQ邮箱 6 | - QQ邮箱授权 7 | - 应用连接器 8 | createTime: 2024/10/21 10:29:38 9 | permalink: /suite/551ccqsv/ 10 | --- 11 | 12 | 13 | https://developer.work.weixin.qq.com/document/path/91770 -------------------------------------------------------------------------------- /docs/docs/price.md: -------------------------------------------------------------------------------- 1 | --- 2 | pageLayout: page 3 | backToTop: false 4 | title: 价格 5 | permalink: /price.html 6 | createTime: 2025/03/05 22:57:52 7 | --- 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "juggle-doc", 3 | "version": "1.0.0", 4 | "description": "Juggle官网", 5 | "scripts": { 6 | "dev": "vuepress dev docs", 7 | "clean": "rimraf docs/.vuepress/.temp docs/.vuepress/.cache docs/.vuepress/dist", 8 | "build": "vuepress build docs" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/somta/Juggle.git" 13 | }, 14 | "keywords": [ 15 | "juggle" 16 | ], 17 | "author": "明天的地平线", 18 | "license": "ISC", 19 | "dependencies": { 20 | "swiper": "^11.1.14", 21 | "vue": "^3.5.0" 22 | }, 23 | "devDependencies": { 24 | "@vuepress/bundler-vite": "2.0.0-rc.18", 25 | "rimraf": "^5.0.7", 26 | "sass-embedded": "^1.79.4", 27 | "typescript": "^5.5.2", 28 | "vuepress": "2.0.0-rc.18", 29 | "vuepress-theme-plume": "1.0.0-rc.112" 30 | }, 31 | "packageManager": "pnpm@9.4.0+sha512.f549b8a52c9d2b8536762f99c0722205efc5af913e77835dbccc3b0b0b2ca9e7dc8022b78062c17291c48e88749c70ce88eb5a74f1fa8c4bf5e18bb46c8bd83a" 32 | } 33 | -------------------------------------------------------------------------------- /docs/src/components/VPTitle.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/layouts/DocSidebarSlot.vue: -------------------------------------------------------------------------------- 1 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /example/juggle-nodejs-example/index.js: -------------------------------------------------------------------------------- 1 | const JuggleClient = require('juggle-client'); 2 | 3 | const serverAddr = 'https://demo.juggle.plus'; 4 | const accessToken = 'eyJ1c2VySWQiOjEsInRpbWVzdGFtcCI6MTcyOTAwODYzOTc5MH0='; 5 | 6 | const juggleClient = new JuggleClient({ 7 | accessToken, 8 | serverAddr, 9 | }); 10 | 11 | async function r() { 12 | const res1 = await juggleClient.triggerFlow('v1', 'sync_example', { 13 | userName: 'juggle', 14 | password: '123456', 15 | deposit: 1000, 16 | }); 17 | console.log(res1); 18 | 19 | const res2 = await juggleClient.getAsyncFlowResult('222'); 20 | console.log(res2); 21 | } 22 | 23 | r(); 24 | -------------------------------------------------------------------------------- /example/juggle-nodejs-example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "juggle-nodejs-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node index.js" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "juggle-client": "^1.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/juggle-spring-boot-example/src/main/java/net/somta/juggle/boot/example/BootExampleApplication.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.boot.example; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | @SpringBootApplication 10 | public class BootExampleApplication { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(BootExampleApplication.class, args); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/juggle-spring-boot-example/src/main/java/net/somta/juggle/boot/example/controller/StudentController.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.boot.example.controller; 2 | 3 | import io.swagger.v3.oas.annotations.Operation; 4 | import io.swagger.v3.oas.annotations.tags.Tag; 5 | import net.somta.juggle.boot.example.dto.StudentDTO; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RestController; 9 | 10 | 11 | /** 12 | * @author husong 13 | */ 14 | @Tag(name = "学生接口") 15 | @RestController 16 | @RequestMapping("/student") 17 | public class StudentController { 18 | 19 | @Operation(summary = "获取用户信息") 20 | @GetMapping("/getStudentById") 21 | public StudentDTO getStudentById(Long studentId){ 22 | StudentDTO studentDto = new StudentDTO(); 23 | studentDto.setId(studentId); 24 | studentDto.setName("明天的地平线"); 25 | return studentDto; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /example/juggle-spring-boot-example/src/main/java/net/somta/juggle/boot/example/dto/StudentDTO.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.boot.example.dto; 2 | 3 | /** 4 | * @author husong 5 | */ 6 | public class StudentDTO { 7 | private Long id; 8 | private String name; 9 | 10 | public Long getId() { 11 | return id; 12 | } 13 | 14 | public void setId(Long id) { 15 | this.id = id; 16 | } 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /example/juggle-spring-boot-example/src/main/java/net/somta/juggle/boot/example/param/TriggerFlowParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.boot.example.param; 2 | 3 | 4 | import net.somta.juggle.client.model.FlowTriggerDataParam; 5 | 6 | /** 7 | * @author husong 8 | */ 9 | public class TriggerFlowParam { 10 | 11 | private String flowKey; 12 | 13 | private String flowVersion; 14 | 15 | private FlowTriggerDataParam triggerData; 16 | 17 | public String getFlowKey() { 18 | return flowKey; 19 | } 20 | 21 | public void setFlowKey(String flowKey) { 22 | this.flowKey = flowKey; 23 | } 24 | 25 | public String getFlowVersion() { 26 | return flowVersion; 27 | } 28 | 29 | public void setFlowVersion(String flowVersion) { 30 | this.flowVersion = flowVersion; 31 | } 32 | 33 | public FlowTriggerDataParam getTriggerData() { 34 | return triggerData; 35 | } 36 | 37 | public void setTriggerData(FlowTriggerDataParam triggerData) { 38 | this.triggerData = triggerData; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /example/juggle-spring-boot-example/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8080 2 | spring.application.name=juggle-spring-boot-example 3 | 4 | juggle.server-addr=http://127.0.0.1:9127 5 | juggle.access-token=eyJ1c2VySWQiOjEsInRpbWVzdGFtcCI6MTcxMTU1NTM3ODkyN30= -------------------------------------------------------------------------------- /issue_template.md: -------------------------------------------------------------------------------- 1 | ### 基础信息 2 | 操作系统:xxx 如:Ubuntu 3 | Juggle版本:x.x.x 如:1.0.0 4 | 部署方式:xxx 如:Docker 5 | 6 | ### 问题描述 7 | 8 | 9 | ### 复现步骤 10 | 1. 11 | 2. 12 | 3. 13 | 14 | ### 错误日志或截图 15 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-go/README.md: -------------------------------------------------------------------------------- 1 | # juggle go sdk 2 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-java/src/main/java/net/somta/juggle/client/JuggleClient.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.client; 2 | 3 | import net.somta.core.protocol.ResponseDataResult; 4 | import net.somta.juggle.client.model.FlowResultModel; 5 | import net.somta.juggle.client.model.FlowTriggerDataParam; 6 | 7 | import java.io.IOException; 8 | import java.util.Map; 9 | 10 | /** 11 | * @author husong 12 | * @since 1.2.0 13 | */ 14 | public interface JuggleClient { 15 | 16 | /** 17 | * Trigger a sync flow 18 | * @param flowVersion flow version number 19 | * @param flowKey flow key 20 | * @param triggerData trigger flow data 21 | * @return return flow result data 22 | * @throws IOException 23 | */ 24 | ResponseDataResult triggerFlow(String flowVersion, String flowKey, FlowTriggerDataParam triggerData) throws IOException; 25 | 26 | /** 27 | * get a async flow data 28 | * @param flowInstanceId flow instance id 29 | * @return return async flow result data 30 | * @throws IOException 31 | */ 32 | ResponseDataResult> getAsyncFlowResult(String flowInstanceId) throws IOException; 33 | } 34 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-java/src/main/java/net/somta/juggle/client/JuggleConfig.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.client; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.2.0 6 | */ 7 | public class JuggleConfig { 8 | 9 | /** 10 | * Juggle server address 11 | */ 12 | private String serverAddr; 13 | 14 | /** 15 | * Request access token 16 | */ 17 | private String accessToken; 18 | 19 | public String getServerAddr() { 20 | return serverAddr; 21 | } 22 | 23 | public void setServerAddr(String serverAddr) { 24 | this.serverAddr = serverAddr; 25 | } 26 | 27 | public String getAccessToken() { 28 | return accessToken; 29 | } 30 | 31 | public void setAccessToken(String accessToken) { 32 | this.accessToken = accessToken; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-java/src/main/java/net/somta/juggle/client/JuggleFactory.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.client; 2 | 3 | /** 4 | * @author husong 5 | * @since 1.2.0 6 | */ 7 | public class JuggleFactory { 8 | private static volatile JuggleClient juggleClient; 9 | 10 | public static JuggleClient getClientInstance(JuggleConfig juggleConfig) { 11 | if (juggleClient == null) { 12 | synchronized (JuggleClient.class) { 13 | if (juggleClient == null) { 14 | juggleClient = new JuggleClientImpl(juggleConfig); 15 | } 16 | } 17 | } 18 | return juggleClient; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-java/src/main/java/net/somta/juggle/client/enums/FlowStatusEnum.java: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2022-2024 husong 3 | 4 | This program is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License 6 | as published by the Free Software Foundation; either version 3 7 | of the License, or (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with this program; if not, visit . 16 | */ 17 | package net.somta.juggle.client.enums; 18 | 19 | /** 20 | * 流程的状态枚举 21 | * @author husong 22 | * @since 1.0.0 23 | */ 24 | public enum FlowStatusEnum { 25 | /** 26 | * 初始化 27 | */ 28 | INIT, 29 | /** 30 | * 运行中 31 | */ 32 | RUNNING, 33 | /** 34 | * 完成 35 | */ 36 | FINISH, 37 | /** 38 | * 终止 39 | */ 40 | ABORT 41 | } 42 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-java/src/main/java/net/somta/juggle/client/model/FlowTriggerDataParam.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.client.model; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 触发流程的实体 7 | * @author husong 8 | */ 9 | public class FlowTriggerDataParam { 10 | /** 11 | * 触发流程需要的数据 12 | */ 13 | private Map flowData; 14 | 15 | public Map getFlowData() { 16 | return flowData; 17 | } 18 | 19 | public void setFlowData(Map flowData) { 20 | this.flowData = flowData; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npmjs.org -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/README.md: -------------------------------------------------------------------------------- 1 | # juggle-sdk-nodejs 2 | 3 | Node 环境 juggle-client sdk 4 | 5 | ## 安装 6 | 7 | ```sh 8 | # npm 9 | npm install juggle-client 10 | # or yarn 11 | yarn add juggle-client 12 | # or pnpm 13 | pnpm i juggle-client 14 | ``` 15 | 16 | ## 使用 17 | 18 | ```js 19 | // 引入 pkg 20 | const JuggleClient = require('juggle-client'); 21 | 22 | // 配置信息 23 | const serverAddr = 'https://demo.juggle.plus'; 24 | const accessToken = 'eyJ1c2VySWQiOjEsInRpbWVzdGFtcCI6MTcyOTAwODYzOTc5MH0='; 25 | 26 | // 实例初始化 27 | const juggleClient = new JuggleClient({ 28 | accessToken, 29 | serverAddr, 30 | }); 31 | 32 | async function r() { 33 | const res1 = await juggleClient.triggerFlow('v1', 'sync_example', { 34 | userName: 'juggle', 35 | password: '123456', 36 | deposit: 1000, 37 | }); 38 | console.log(res1); 39 | 40 | const res2 = await juggleClient.getAsyncFlowResult('222'); 41 | console.log(res2); 42 | } 43 | 44 | r(); 45 | ``` 46 | 47 | 48 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import typescript from '@rollup/plugin-typescript'; 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | 4 | // rollup.config.mjs 5 | export default { 6 | input: 'src/index.ts', 7 | output: [ 8 | { 9 | file: 'cjs/index.js', 10 | format: 'cjs', 11 | }, 12 | { 13 | file: 'esm/index.js', 14 | format: 'es', 15 | }, 16 | ], 17 | plugins: [ 18 | commonjs(), 19 | typescript({ 20 | compilerOptions: { lib: ['es5', 'es6'], target: 'es5' }, 21 | }), 22 | ], 23 | }; 24 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/src/IConfig.ts: -------------------------------------------------------------------------------- 1 | export interface IConfig { 2 | /** 密钥 */ 3 | accessToken: string; 4 | /** 服务地址 */ 5 | serverAddr: string; 6 | } -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/src/typings/index.ts: -------------------------------------------------------------------------------- 1 | export * from './result.ts'; 2 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/src/typings/result.ts: -------------------------------------------------------------------------------- 1 | export interface ResponseDataResult { 2 | success: boolean; 3 | result: T; 4 | errorCode?: string; 5 | errorMsg?: string; 6 | } -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/src/utils/request.ts: -------------------------------------------------------------------------------- 1 | import fetch from 'node-fetch'; 2 | 3 | export async function get(url: string, headers = {}) { 4 | const response = await fetch(url, { 5 | method: 'GET', 6 | headers: { 'Content-Type': 'application/json', ...headers }, 7 | }); 8 | return response.json(); 9 | } 10 | 11 | export async function post( 12 | url: string, 13 | data: Record = {}, 14 | headers = {} 15 | ) { 16 | const response = await fetch(url, { 17 | method: 'POST', 18 | body: JSON.stringify(data), 19 | headers: { 'Content-Type': 'application/json', ...headers }, 20 | }); 21 | 22 | return response.json(); 23 | } 24 | -------------------------------------------------------------------------------- /sdk/juggle-sdk-nodejs/test.ts: -------------------------------------------------------------------------------- 1 | import JuggleClient from './src/index'; 2 | 3 | const serverAddr = 'https://demo.juggle.plus'; 4 | const accessToken = 'eyJ1c2VySWQiOjEsInRpbWVzdGFtcCI6MTcyOTAwODYzOTc5MH0='; 5 | 6 | const juggleClient = new JuggleClient({ 7 | accessToken, 8 | serverAddr, 9 | }); 10 | 11 | async function r() { 12 | const res1 = await juggleClient.triggerFlow('v1', 'sync_example', { 13 | userName: 'juggle', 14 | password: '123456', 15 | deposit: 1000, 16 | }); 17 | console.log(res1); 18 | 19 | const res2 = await juggleClient.getAsyncFlowResult('222'); 20 | console.log(res2); 21 | } 22 | 23 | r(); 24 | -------------------------------------------------------------------------------- /sdk/juggle-spring-boot-starter/src/main/java/net/somta/juggle/starter/impl/IJuggleTemplate.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.starter.impl; 2 | 3 | import net.somta.core.protocol.ResponseDataResult; 4 | import net.somta.juggle.client.model.FlowResultModel; 5 | import net.somta.juggle.client.model.FlowTriggerDataParam; 6 | 7 | import java.io.IOException; 8 | import java.util.Map; 9 | 10 | /** 11 | * @author husong 12 | */ 13 | public interface IJuggleTemplate { 14 | 15 | ResponseDataResult triggerFlow(String flowVersion, String flowKey, FlowTriggerDataParam triggerData) throws IOException; 16 | 17 | ResponseDataResult> getAsyncFlowResult(String flowInstanceId) throws IOException; 18 | } 19 | -------------------------------------------------------------------------------- /sdk/juggle-spring-boot-starter/src/main/java/net/somta/juggle/starter/properties/JuggleOpenProperties.java: -------------------------------------------------------------------------------- 1 | package net.somta.juggle.starter.properties; 2 | 3 | import org.springframework.boot.context.properties.ConfigurationProperties; 4 | 5 | /** 6 | * @author husong 7 | */ 8 | @ConfigurationProperties(prefix = "juggle") 9 | public class JuggleOpenProperties { 10 | /** 11 | * Juggle server address 12 | */ 13 | private String serverAddr; 14 | 15 | /** 16 | * Request access token 17 | */ 18 | private String accessToken; 19 | 20 | public String getServerAddr() { 21 | return serverAddr; 22 | } 23 | 24 | public void setServerAddr(String serverAddr) { 25 | this.serverAddr = serverAddr; 26 | } 27 | 28 | public String getAccessToken() { 29 | return accessToken; 30 | } 31 | 32 | public void setAccessToken(String accessToken) { 33 | this.accessToken = accessToken; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /sdk/juggle-spring-boot-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration= \ 2 | net.somta.juggle.starter.JuggleAutoConfiguration --------------------------------------------------------------------------------