From c8e3460c5aefedfa45dc19a7a8d5720a10d0f058 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 23 Sep 2025 15:38:44 +0800
Subject: [PATCH] feat(ai): 引入LlmApplicationAppIdEnum枚举优化工作流类型管理

---
 src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java |   76 +++++++++++++++++++++----------------
 1 files changed, 43 insertions(+), 33 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java
index f89d249..3b6013e 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java
@@ -1,10 +1,22 @@
 package cc.mrbird.febs.ai.service.impl;
 
+import cc.mrbird.febs.ai.entity.AiCompanyWorkflow;
+import cc.mrbird.febs.ai.enums.LlmApplicationAppIdEnum;
+import cc.mrbird.febs.ai.mapper.AiCompanyWorkflowMapper;
 import cc.mrbird.febs.ai.req.AiProductQuestionAiDto;
+import cc.mrbird.febs.ai.service.AiCompanyService;
 import cc.mrbird.febs.ai.service.AiService;
 import cc.mrbird.febs.common.exception.FebsException;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.dashscope.app.Application;
+import com.alibaba.dashscope.app.ApplicationParam;
+import com.alibaba.dashscope.app.ApplicationResult;
+import com.alibaba.dashscope.app.FlowStreamMode;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.utils.JsonUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -15,6 +27,8 @@
 @Service
 @RequiredArgsConstructor
 public class AiServiceImpl implements AiService {
+
+    private final AiCompanyService aiCompanyService;
 
     private static final String apiKey = "sk-babdcf8799144134915cee2683794b2f";
     private static final String appId = "963b854d994a4f578d8207cd477a2464";
@@ -29,44 +43,40 @@
             throw new FebsException("百炼工作流初始化异常");
         }
 
+        String companyAppId = appId;
+        String companyId = dto.getCompanyId();
+        if (StrUtil.isNotEmpty(companyId)){
+            AiCompanyWorkflow workflowByTypeAndCompanyId =
+                    aiCompanyService.getWorkflowByTypeAndCompanyId(LlmApplicationAppIdEnum.ADMIN_QUESTION.getCode(), companyId);
+            companyAppId = workflowByTypeAndCompanyId.getCode();
+        }
+
+
+
         HashMap<String, Object> bizParams = new HashMap<>();
         bizParams.put(bizParam_1,dto.getQuestionCnt());
         bizParams.put(bizParam_2,dto.getPromptAiSystem());
         bizParams.put(bizParam_3,dto.getJsonFormat());
         String query = dto.getQuery();
         long startTime = System.currentTimeMillis();
-//        ApplicationParam param = ApplicationParam.builder()
-//                // 若没有配置环境变量,可用百炼API Key将下行替换为:.apiKey("sk-xxx")。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
-//                .apiKey(apiKey)
-//                .appId(appId) //替换为实际的应用 ID
-//                .flowStreamMode(FlowStreamMode.MESSAGE_FORMAT)
-//                .prompt(query)
-//                .bizParams(JsonUtils.toJsonObject( bizParams))
-//                .build();
-//
-//        Application application = new Application();
-//        Flowable<ApplicationResult> result;
-//        try {
-//            result = application.streamCall(param);
-//        } catch (NoApiKeyException | InputRequiredException e) {
-//            throw new FebsException(StrUtil.format("百炼工作流输出失败:{}",e.getMessage()));
-//        }
-//
-//        return Flux.from(result)
-//                .map(message -> {
-//                    HashMap<String, String> stringStringHashMap = new HashMap<>();
-//                    if (!message.getOutput().getFinishReason().equals("stop")){
-//                        stringStringHashMap.put(LlmStrategyContextEnum.CONTENT.name(),message.getOutput().getWorkflowMessage().getMessage().getContent());
-//                    }
-//                    return new FebsResponse().success().data(stringStringHashMap);
-//                })
-//                .doOnComplete(() -> {
-//                    long endTime = System.currentTimeMillis();
-//                    System.out.println("百炼工作流输出:" + (endTime - startTime) + "毫秒");
-//                })
-//                .doOnError(error -> {
-//                    throw new FebsException(StrUtil.format("百炼工作流输出失败:{}",error));
-//                });
-        return null;
+        ApplicationParam param = ApplicationParam.builder()
+                // 若没有配置环境变量,可用百炼API Key将下行替换为:.apiKey("sk-xxx")。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
+                .apiKey(apiKey)
+                .appId(companyAppId) //替换为实际的应用 ID
+                .flowStreamMode(FlowStreamMode.MESSAGE_FORMAT)
+                .prompt(query)
+                .bizParams(JsonUtils.toJsonObject( bizParams))
+                .build();
+
+        Application application = new Application();
+        ApplicationResult result = null;
+        try {
+            result = application.call(param);
+        } catch (NoApiKeyException e) {
+            throw new FebsException("百炼工作流调用异常");
+        } catch (InputRequiredException e) {
+            throw new FebsException("百炼工作流调用异常");
+        }
+        return  result.getOutput().getText();
     }
 }

--
Gitblit v1.9.1