From 200e679519263af35db1e149c98f22fe45aafe0a Mon Sep 17 00:00:00 2001 From: jack ning Date: Fri, 14 Feb 2025 12:45:07 +0800 Subject: [PATCH] update starter/src: mod 3 del 1 files --- .../ticket/listener/TicketEventListener.java | 17 ++- .../main/resources/templates/ftl/index.ftl | 2 +- .../com/bytedesk/starter/FlowableTests.java | 102 ++++++++++++++++-- 3 files changed, 108 insertions(+), 13 deletions(-) diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/listener/TicketEventListener.java b/modules/ticket/src/main/java/com/bytedesk/ticket/listener/TicketEventListener.java index ef67ca6d..4e139774 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/listener/TicketEventListener.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/listener/TicketEventListener.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-01-23 14:52:45 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-14 11:33:02 + * @LastEditTime: 2025-02-14 12:34:14 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -20,9 +20,12 @@ import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.context.event.EventListener; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import com.alibaba.fastjson2.JSON; +import com.bytedesk.core.rbac.organization.OrganizationCreateEvent; +import com.bytedesk.core.rbac.organization.OrganizationEntity; import com.bytedesk.core.rbac.user.UserProtobuf; import com.bytedesk.kbase.upload.UploadEntity; import com.bytedesk.kbase.upload.UploadTypeEnum; @@ -46,6 +49,18 @@ public class TicketEventListener { private final TicketRestService ticketRestService; + @Order(5) + @EventListener + public void onOrganizationCreateEvent(OrganizationCreateEvent event) { + OrganizationEntity organization = (OrganizationEntity) event.getSource(); + String orgUid = organization.getUid(); + log.info("ticket - organization created: {}", orgUid); + // 为每个组织加载自己的流程文件 + // 1. 查询流程文件 + // 2. 加载流程文件 + // 3. 部署流程 + } + @EventListener public void handleTicketCreateEvent(TicketCreateEvent event) { log.info("TicketEventListener handleTicketCreateEvent: {}", event); diff --git a/starter/src/main/resources/templates/ftl/index.ftl b/starter/src/main/resources/templates/ftl/index.ftl index 06fc3627..18927b89 100644 --- a/starter/src/main/resources/templates/ftl/index.ftl +++ b/starter/src/main/resources/templates/ftl/index.ftl @@ -69,7 +69,7 @@ Listed course START -->
AI助手
- 对接各种大模型,支持私有部署大模型,支持私有知识库问答. + 对接Ollama/DeepSeek/智谱等大模型,支持私有部署/Api调用大模型. diff --git a/starter/src/test/java/com/bytedesk/starter/FlowableTests.java b/starter/src/test/java/com/bytedesk/starter/FlowableTests.java index 47c7d4e2..db64c2d2 100644 --- a/starter/src/test/java/com/bytedesk/starter/FlowableTests.java +++ b/starter/src/test/java/com/bytedesk/starter/FlowableTests.java @@ -1,8 +1,8 @@ /* * @Author: jackning 270580156@qq.com * @Date: 2025-02-02 11:21:45 - * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-14 12:06:33 + * @LastEditors: jack ning github@bytedesk.com + * @LastEditTime: 2025-02-14 12:25:12 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -14,6 +14,7 @@ package com.bytedesk.starter; import java.io.InputStream; +import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -52,15 +53,38 @@ public class FlowableTests { @Autowired private HistoryService historyService; - /** - * 查询流程定义列表, 涉及到 act_re_procdef表,部署成功会新增记录 - */ + // 查询全部流程定义列表, 涉及到 act_re_procdef表,部署成功会新增记录 @Test public void testProcessDefinition() { List processList = repositoryService.createProcessDefinitionQuery().list(); for (ProcessDefinition processDefinition : processList) { - log.info("ProcessDefinition name = {},deploymentId = {}", processDefinition.getName(), - processDefinition.getDeploymentId()); + log.info("流程定义 name={}, key={}, version={}, deploymentId={}", + processDefinition.getName(), + processDefinition.getKey(), + processDefinition.getVersion(), + processDefinition.getDeploymentId()); + } + } + + /** + * 自定义过滤条件查询流程定义列表, 涉及到 act_re_procdef表,部署成功会新增记录 + */ + @Test + public void testFilterProcessDefinition() { + List processList = repositoryService.createProcessDefinitionQuery() + .processDefinitionKey("StudentLeave") // 按流程定义key过滤 + .processDefinitionName("请假流程") // 按流程定义名称过滤 + .latestVersion() // 只查询最新版本 + .active() // 查询激活的流程 + .orderByProcessDefinitionVersion().desc() // 按版本降序排序 + .list(); + + for (ProcessDefinition processDefinition : processList) { + log.info("流程定义 name={}, key={}, version={}, deploymentId={}", + processDefinition.getName(), + processDefinition.getKey(), + processDefinition.getVersion(), + processDefinition.getDeploymentId()); } } @@ -77,16 +101,16 @@ public void testAddProcessDefinition() { // 通过上传文件部署流程 @Test - public void testAddProcessDefinitionByUploadFile() { + public void testAddProcessDefinitionByUploadFile() throws Exception { // 上传文件 UploadEntity upload = UploadEntity.builder() .fileName("请假流程") .type(UploadTypeEnum.BPMN.name()) - .fileUrl("") + .fileUrl("https://example.com/processes/StudentLeave.bpmn20.xml") .build(); - // 将文件URL转换为InputStream - InputStream inputStream = getClass().getResourceAsStream("/processes/StudentLeave.bpmn20.xml"); + // 从URL获取InputStream + InputStream inputStream = new URL(upload.getFileUrl()).openStream(); // 部署流程 Deployment deployment = repositoryService.createDeployment() @@ -133,4 +157,60 @@ public void testStudentLeaveFlow() { System.out.println(activity.getActivityName()); } } + + // 按租户ID查询流程定义列表 + @Test + public void testProcessDefinitionByTenant() { + String orgUid = "df_org_uid"; + List processList = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantId(orgUid) // 按租户ID过滤 + .latestVersion() // 只查询最新版本 + .active() // 查询激活的流程 + .orderByProcessDefinitionVersion().desc() // 按版本降序排序 + .list(); + + for (ProcessDefinition processDefinition : processList) { + log.info("租户流程定义 tenantId={}, name={}, key={}, version={}", + processDefinition.getTenantId(), + processDefinition.getName(), + processDefinition.getKey(), + processDefinition.getVersion()); + } + } + + // 部署带租户ID的流程定义 + @Test + public void testAddProcessDefinitionWithTenant() { + String orgUid = "df_org_uid"; + // 部署流程 + Deployment deployment = repositoryService.createDeployment() + .name("请假流程") + .addClasspathResource("processes/StudentLeave.bpmn20.xml") + .tenantId(orgUid) // 设置租户ID + .deploy(); + log.info("部署租户流程成功: deploymentId={}, tenantId={}", deployment.getId(), deployment.getTenantId()); + } + + // 通过上传文件部署带租户ID的流程 + @Test + public void testAddProcessDefinitionByUploadFileWithTenant() throws Exception { + String orgUid = "df_org_uid"; + // 上传文件 + UploadEntity upload = UploadEntity.builder() + .fileName("请假流程") + .type(UploadTypeEnum.BPMN.name()) + .fileUrl("https://example.com/processes/StudentLeave.bpmn20.xml") + .build(); + + // 从URL获取InputStream + InputStream inputStream = new URL(upload.getFileUrl()).openStream(); + + // 部署流程 + Deployment deployment = repositoryService.createDeployment() + .name(upload.getFileName()) + .addInputStream(upload.getFileName(), inputStream) + .tenantId(orgUid) // 设置租户ID + .deploy(); + log.info("部署租户流程成功: deploymentId={}, tenantId={}", deployment.getId(), deployment.getTenantId()); + } }