Ver Fonte

bpm-测试流程所需类

liyanbo há 2 meses atrás
pai
commit
119b08872d

+ 75 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/CourseFlowController.java

@@ -0,0 +1,75 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto;
+
+import cn.iocoder.byzs.module.bpm.controller.admin.courseAuto.vo.CompleteEditRequest;
+import cn.iocoder.byzs.module.bpm.controller.admin.courseAuto.vo.CourseFlowRequest;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.TaskService;
+import org.flowable.engine.runtime.Execution;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.task.api.Task;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/flow")
+public class CourseFlowController {
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private TaskService taskService;
+
+    // 1. 启动流程(用户输入触发语+选择数字人)
+    @PostMapping("/start")
+    public String startProcess(@RequestBody CourseFlowRequest request) {
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("triggerText", request.getTriggerText());
+        variables.put("mainSpeaker", request.getMainSpeaker());
+        variables.put("sideSpeakers", request.getSideSpeakers());
+        variables.put("userId", request.getCurrentUserId()); // 当前用户ID
+        
+        // 启动流程(流程标识为 courseAuto,与截图中一致)
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey("courseAuto", variables);
+        return pi.getId(); // 返回流程实例ID,供前端查询状态
+    }
+
+    // 2. 查询待办任务(前端编辑脚本)
+    @GetMapping("/todo-tasks")
+    public List<Task> getTodoTasks(@RequestParam String userId) {
+        return taskService.createTaskQuery()
+                .taskAssignee(userId)
+                .processDefinitionKey("courseAuto")
+                .list();
+    }
+
+    // 3. 完成编辑任务(提交编辑后的脚本)
+    @PostMapping("/complete-edit")
+    public void completeEditTask(@RequestBody CompleteEditRequest request) {
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("editedScriptJson", request.getEditedScriptJson());
+        taskService.complete(request.getTaskId(), variables);
+    }
+
+    // 4. 查询流程状态
+    @GetMapping("/status/{processInstanceId}")
+    public String getProcessStatus(@PathVariable String processInstanceId) {
+        Execution execution = runtimeService.createExecutionQuery()
+                .processInstanceId(processInstanceId)
+                .singleResult();
+        if (execution == null) return "流程已结束";
+        
+        String activityId = execution.getActivityId();
+        // 映射活动ID到阶段名称
+        return switch (activityId) {
+            case "generateScriptTask" -> "生成脚本中";
+            case "editScriptTask" -> "待编辑脚本";
+            case "generateImageMusicTask" -> "生成背景图/音乐中";
+            case "generateVoiceTask" -> "生成语音中";
+            case "saveToDbTask" -> "保存入库中";
+            default -> "处理中";
+        };
+    }
+}

+ 25 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/GenerateImageMusicDelegate.java

@@ -0,0 +1,25 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto;
+
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.JavaDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Component("generateImageMusicDelegate")
+    public class GenerateImageMusicDelegate implements JavaDelegate {
+//        @Autowired
+//        private ImageMusicService imageMusicService;
+
+        @Override
+        public void execute(DelegateExecution execution) {
+            String scriptJson = (String) execution.getVariable("editedScriptJson");
+//            Map<String, Object> resources = imageMusicService.generateResources(scriptJson);
+            Map<String, Object> resources = new HashMap<String, Object>();
+
+            execution.setVariable("imageUrls", resources.get("imageUrls"));
+            execution.setVariable("musicUrls", resources.get("musicUrls"));
+        }
+    }

+ 29 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/GenerateScriptDelegate.java

@@ -0,0 +1,29 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto;
+
+import cn.iocoder.byzs.module.bpm.controller.admin.courseAuto.vo.DigitalHuman;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.JavaDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component("generateScriptDelegate")
+public class GenerateScriptDelegate implements JavaDelegate {
+//    @Autowired
+//    private AgentService agentService; // 智能体调用服务
+
+    @Override
+    public void execute(DelegateExecution execution) {
+        // 1. 获取流程变量
+        String triggerText = (String) execution.getVariable("triggerText");
+        DigitalHuman mainSpeaker = (DigitalHuman) execution.getVariable("mainSpeaker"); // 主讲数字人
+        List<DigitalHuman> sideSpeakers = (List<DigitalHuman>) execution.getVariable("sideSpeakers"); // 副讲列表
+
+        // 2. 调用智能体生成脚本(传入数字人信息)
+//        String scriptJson = agentService.generateStructuredScript(triggerText, mainSpeaker, sideSpeakers);
+
+        // 3. 存入流程变量,供后续节点使用
+        execution.setVariable("scriptJson", "scriptJson");
+    }
+}

+ 35 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/GenerateVoiceDelegate.java

@@ -0,0 +1,35 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto;
+
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.JavaDelegate;
+import org.springframework.stereotype.Component;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Component("generateVoiceDelegate")
+    public class GenerateVoiceDelegate implements JavaDelegate {
+//        @Autowired
+//        private TTSService ttsService;
+//        @Autowired
+//        private DigitalHumanMapper digitalHumanMapper;
+
+        @Override
+        public void execute(DelegateExecution execution) {
+            String scriptJson = (String) execution.getVariable("editedScriptJson");
+//            List<Dialog> dialogs = parseScriptDialogs(scriptJson); // 解析脚本对话
+            List<Dialog> dialogs = new ArrayList<>(); // 解析脚本对话
+
+            List<String> voiceUrls = new ArrayList<>();
+            for (Dialog dialog : dialogs) {
+                // 根据角色名称获取音色 ID
+//                DigitalHuman dh = digitalHumanMapper.getByName(dialog.getRole());
+//                String voiceUrl = ttsService.generateVoice(dialog.getContent(), dh.getVoiceId());
+                voiceUrls.add("voiceUrl");
+            }
+
+            execution.setVariable("voiceUrls", voiceUrls);
+        }
+    }

+ 24 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/SaveToDbDelegate.java

@@ -0,0 +1,24 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto;
+
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.JavaDelegate;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component("saveToDbDelegate")
+    public class SaveToDbDelegate implements JavaDelegate {
+//        @Autowired
+//        private CourseScriptService courseScriptService;
+
+        @Override
+        public void execute(DelegateExecution execution) {
+            String triggerText = (String) execution.getVariable("triggerText");
+            String scriptJson = (String) execution.getVariable("editedScriptJson");
+            String imageUrls = (String) execution.getVariable("imageUrls");
+            String musicUrls = (String) execution.getVariable("musicUrls");
+            List<String> voiceUrls = (List<String>) execution.getVariable("voiceUrls");
+
+//            courseScriptService.saveCourseScript(triggerText, scriptJson, imageUrls, musicUrls, voiceUrls);
+        }
+    }

+ 9 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/vo/CompleteEditRequest.java

@@ -0,0 +1,9 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto.vo;
+
+import lombok.Data;
+
+@Data
+public class CompleteEditRequest {
+    private String editedScriptJson;
+    private String taskId;
+}

+ 13 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/vo/CourseFlowRequest.java

@@ -0,0 +1,13 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto.vo;
+
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class CourseFlowRequest {
+
+    private String triggerText; // 触发文本
+    private String mainSpeaker; // 主发言人
+    private List<String> sideSpeakers; // 旁发言人
+    private Long currentUserId; // 当前用户ID
+}

+ 4 - 0
byzs-module-bpm/src/main/java/cn/iocoder/byzs/module/bpm/controller/admin/courseAuto/vo/DigitalHuman.java

@@ -0,0 +1,4 @@
+package cn.iocoder.byzs.module.bpm.controller.admin.courseAuto.vo;
+
+public class DigitalHuman {
+}