From 0c84a91bc866a7180ee08eb16049973b326d7463 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Mon, 31 Mar 2025 16:50:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EAI=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/config/ElePropertyConfig.java | 8 ++++ .../manage/config/LoginInterceptor.java | 2 +- .../manage/controller/AiChatController.java | 32 +++++++++++++ .../manage/pojo/req/ChatQueryDTO.java | 8 ++++ .../service/serviceimpl/AiChatService.java | 45 +++++++++++++++++++ .../src/main/resources/application.properties | 6 ++- 6 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/AiChatController.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/ChatQueryDTO.java create mode 100644 electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/AiChatService.java diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java index 8fc7b42..89342ef 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/ElePropertyConfig.java @@ -62,6 +62,14 @@ public class ElePropertyConfig { @Value("${backup.mysql.path}") private String sqlDirs; + @Getter + @Value("${ai.remote.host}") + private String aiRemoteHost; + + @Getter + @Value("${ai.remote.port}") + private String aiRemotePort; + public String getEleTmpPath() { if (EleCommonUtil.isWinOs()) { return winPrefix + eleTmpPath; diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java index fda0bfe..3b8da6d 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java @@ -132,7 +132,7 @@ public class LoginInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - if (request.getRequestURI().endsWith("index")) { + if (request.getRequestURI().endsWith("index") || request.getRequestURI().contains("/data/ed/ai/")) { return; } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/AiChatController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/AiChatController.java new file mode 100644 index 0000000..824c0a4 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/AiChatController.java @@ -0,0 +1,32 @@ +package com.electromagnetic.industry.software.manage.controller; + +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.manage.pojo.req.ChatQueryDTO; +import com.electromagnetic.industry.software.manage.service.serviceimpl.AiChatService; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; + +@RestController +@RequestMapping("/data/ed/ai/") +public class AiChatController { + + @Resource + private AiChatService aiChatService; + + @RequestMapping(value = "chat") + public ElectromagneticResult chat(@RequestBody ChatQueryDTO chatQueryDTO) { + return aiChatService.chat(chatQueryDTO.getQuestion()); + } + + @RequestMapping(value = "addKnowledge") + public ElectromagneticResult addKnowledge(@RequestParam("file") MultipartFile file) throws IOException { + return aiChatService.addKnowledge(file); + } + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/ChatQueryDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/ChatQueryDTO.java new file mode 100644 index 0000000..7ac9609 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/ChatQueryDTO.java @@ -0,0 +1,8 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +@Data +public class ChatQueryDTO { + private String question; +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/AiChatService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/AiChatService.java new file mode 100644 index 0000000..6802e82 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/AiChatService.java @@ -0,0 +1,45 @@ +package com.electromagnetic.industry.software.manage.service.serviceimpl; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.text.StrFormatter; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.manage.config.ElePropertyConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class AiChatService { + + @Resource + private ElePropertyConfig elePropertyConfig; + + public ElectromagneticResult chat(String message) { + Map map = new HashMap<>(); + map.put("msg", message); + String url = StrFormatter.format("http://{}:{}/data/ed/ai/chat", elePropertyConfig.getAiRemoteHost(), elePropertyConfig.getAiRemotePort()); + String res = HttpUtil.post(url, JSONUtil.toJsonStr(map), 5 * 60 * 1000); + log.info("answer is {}", res); + ElectromagneticResult result = JSONUtil.toBean(res, ElectromagneticResult.class); + log.info("result ----------------------------->{}", result); + return result; + } + + public ElectromagneticResult addKnowledge(MultipartFile file) throws IOException { + String content = IoUtil.read(file.getInputStream(), Charset.defaultCharset()); + Map map = new HashMap<>(); + map.put("content", content); + String url = StrFormatter.format("http://{}:{}/data/ed/ai/upload", elePropertyConfig.getAiRemoteHost(), elePropertyConfig.getAiRemotePort()); + String res = HttpUtil.post(url, JSONUtil.toJsonStr(map)); + return JSONUtil.toBean(res, ElectromagneticResult.class); + } +} diff --git a/electrmangnetic/src/main/resources/application.properties b/electrmangnetic/src/main/resources/application.properties index 075390f..8f75033 100644 --- a/electrmangnetic/src/main/resources/application.properties +++ b/electrmangnetic/src/main/resources/application.properties @@ -36,4 +36,8 @@ tmp.file.store.hour=48 backup.remote.host=127.0.0.1 backup.remote.port=1111 backup.mysql.path=/workspace/mysqlbak/test -backup.mysql.script.path=/workspace/mysqlbak/back_dev.sh \ No newline at end of file +backup.mysql.script.path=/workspace/mysqlbak/back_dev.sh + +# ai options +ai.remote.host=127.0.0.1 +ai.remote.port=8186 \ No newline at end of file