From 2b66ac70a801d9b010cc8c77abdd2b09cdf94ae5 Mon Sep 17 00:00:00 2001
From: chengf <cgf12138@163.com>
Date: 星期三, 11 二月 2026 10:16:27 +0800
Subject: [PATCH] 添加状态:停止服务-cgf

---
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/copywriting/controller/CopywritingController.java |  345 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 285 insertions(+), 60 deletions(-)

diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/copywriting/controller/CopywritingController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/copywriting/controller/CopywritingController.java
index d146dab..76163fb 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/copywriting/controller/CopywritingController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/copywriting/controller/CopywritingController.java
@@ -3,12 +3,19 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.*;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 
 import com.alibaba.fastjson2.JSONObject;
+import opennlp.tools.dictionary.serializer.Entry;
+import org.jeecg.modules.demo.copywritingScheme.entity.CopywritingScheme;
+import org.jeecg.modules.demo.copywritingScheme.service.ICopywritingSchemeService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ByteArrayResource;
 import org.springframework.http.*;
@@ -39,6 +46,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.bind.annotation.*;
@@ -61,12 +70,17 @@
 @RestController
 @RequestMapping("/copywriting/copywriting")
 @Slf4j
+@EnableAsync
 public class CopywritingController extends JeecgController<Copywriting, ICopywritingService> {
-	@Autowired
-	private ICopywritingService copywritingService;
+	 @Autowired
+	 public ICopywritingService copywritingService;
      @Autowired
-     private ISemanticWordService semanticWordService;
-	
+     private ISemanticWordService semanticWordService;;
+     @Autowired
+     private ISysUserService sysUserService;
+
+     @Autowired
+     private ICopywritingSchemeService copywritingSchemeService;
 	/**
 	 * 鍒嗛〉鍒楄〃鏌ヨ
 	 *
@@ -94,8 +108,19 @@
         }
         if (StringUtils.isNotBlank(copywriting.getWordLike())){
             queryWrapper.exists("SELECT 1 FROM semantic_word WHERE semantic_word.id = copywriting.word_id " +
-                            "AND semantic_word.word LIKE '%" + copywriting.getWordLike() + "%'");
+                    "AND semantic_word.word LIKE '%" + copywriting.getWordLike() + "%'");
 
+        }
+        if (StringUtils.isNotBlank(copywriting.getContractId())) {
+            // 1. 鎷兼帴鍏宠仈 contact 琛ㄧ殑 EXISTS 瀛愭煡璇紝浣跨敤 contact.id 浣滀负澶栭敭鍏宠仈
+            // 2. 浣跨敤 MyBatis-Plus 鐨勫弬鏁板崰浣嶇閬垮厤 SQL 娉ㄥ叆锛岃�屼笉鏄洿鎺ュ瓧绗︿覆鎷兼帴
+            String existsSql = "SELECT 1 FROM semantic_word " +
+                    "LEFT JOIN contract ON semantic_word.contract_id = contract.id " + // 鍏宠仈 contact 琛紙澶栭敭鍏宠仈锛�
+                    "WHERE semantic_word.id = copywriting.word_id " +
+                    "AND contract.id = " + copywriting.getContractId(); // 浣跨敤 contact 琛ㄧ殑 id 浣滀负鏉′欢
+
+            // 缁� QueryWrapper 璁剧疆鍙傛暟锛岄伩鍏� SQL 娉ㄥ叆
+            queryWrapper.exists(existsSql);
         }
         Page<Copywriting> page = new Page<Copywriting>(pageNo, pageSize);
 		IPage<Copywriting> pageList = copywritingService.page(page, queryWrapper);
@@ -104,6 +129,47 @@
         }
 		return Result.OK(pageList);
 	}
+
+
+     @Operation(summary="鏂囨-鏌ヨ鍙戦�侀棬鎴锋枃绔犳�婚噺")
+     @GetMapping(value = "/count")
+     public Result<IPage<Copywriting>> count(Copywriting copywriting,
+                                             @RequestParam(name="role", defaultValue="鏃�") String role,
+                                             @RequestParam(name="user", defaultValue="鏃�") String user,
+                                                     HttpServletRequest req) {
+
+         QueryWrapper<Copywriting> queryWrapper = QueryGenerator.initQueryWrapper(copywriting, req.getParameterMap());
+
+         if (StringUtils.isNotBlank(copywriting.getTitleLike())) {
+             queryWrapper.like("title", copywriting.getTitleLike());
+         }
+         if (StringUtils.isNotBlank(copywriting.getTitleLike()) && StringUtils.isNotBlank(copywriting.getWordLike())) {
+             queryWrapper.or();
+         }
+         if (StringUtils.isNotBlank(copywriting.getWordLike())){
+             queryWrapper.exists("SELECT 1 FROM semantic_word WHERE semantic_word.id = copywriting.word_id " +
+                     "AND semantic_word.word LIKE '%" + copywriting.getWordLike() + "%'");
+
+         }
+
+         if (!user.equals("鏃�")){
+             QueryWrapper qw = new QueryWrapper<SysUser>();
+             qw.eq("id", user);
+             String userName = ((SysUser)((Page) sysUserService.queryPageList(req, qw, 1, 1).getResult()).getRecords().get(0)).getUsername();
+             queryWrapper.eq("create_by", userName);
+         }
+         long count = copywritingService.count(queryWrapper);
+         return Result.OK(count+"");
+     }
+
+
+
+     @Operation(summary="鏂囨-鏌ヨ鍙戦�侀棬鎴锋枃绔犳�婚噺")
+     @GetMapping(value = "/upAvgTime")
+     public Result<IPage<Copywriting>> upAvgTime(Copywriting copywriting,
+                                             HttpServletRequest req) {
+         return Result.OK("5");
+     }
 
 	/**
 	 *   娣诲姞
@@ -116,6 +182,9 @@
 	@RequiresPermissions("copywriting:copywriting:add")
 	@PostMapping(value = "/add")
 	public Result<String> add(@RequestBody Copywriting copywriting) {
+        if (copywriting.getOutStatus() == null) {
+            copywriting.setOutStatus("1");
+        }
 		copywritingService.save(copywriting);
 
 		return Result.OK("娣诲姞鎴愬姛锛�");
@@ -195,6 +264,9 @@
         return super.exportXls(request, copywriting, Copywriting.class, "鏂囨");
     }
 
+
+    @Value("${jeecg.path.upload}")
+    private String uploadPath;
     /**
       * 閫氳繃excel瀵煎叆鏁版嵁
     *
@@ -212,74 +284,101 @@
      @RequiresPermissions("copywriting:copywriting:aiCreateCopyWriting")
      @RequestMapping(value = "/aiCreateCopyWriting", method = RequestMethod.POST)
      public Result<?> aiCreateCopyWriting(
-             @RequestParam("jianli") String jianli,
+             @RequestParam(name = "file", required = false) String jianli,
+             @RequestParam(name = "url", required = false) String jianli2,
              @RequestParam String wenanyaoqiu,
              @RequestParam String louchu,
              @RequestParam String youshang,
              @RequestParam String wenti,
-             @RequestParam String user) {
-        if (jianli == null || jianli.equals("")) {
-            return Result.error("璇烽�夋嫨鏂囦欢");
-        }
+             @RequestParam String user,
+             @RequestParam String csId) {
+         if (csId == null){
+             csId = "2020795745607319553";
+         }
+         CopywritingScheme copywritingScheme = new CopywritingScheme();
+         copywritingScheme.setId(csId);
+         return getResult(jianli, jianli2, wenanyaoqiu, louchu, youshang, wenti, user, copywritingScheme);
+     }
+
+     public Result<?> getResult(String jianli, String jianli2, String wenanyaoqiu, String louchu, String youshang, String wenti, String user, CopywritingScheme cs) {
+         QueryWrapper<CopywritingScheme> copywritingSchemeQueryWrapper = new QueryWrapper<>();
+
+         if (cs.getId() == null){
+             cs.setId("2020795745607319553");
+         }
+         copywritingSchemeQueryWrapper.eq("id", cs.getId());
+         List<CopywritingScheme> list = copywritingSchemeService.list(copywritingSchemeQueryWrapper);
+         if(list.size()==0) {
+             return Result.error("鏂规涓嶅瓨鍦�");
+         } else {
+             cs = list.get(0);
+         }
          // 閰嶇疆淇℃伅
-         String serverFileRoot = "D:\\opt\\upFiles\\";
-         String workflowUrl = "http://14.103.174.44/v1/workflows/run";
-         String fileUploadUrl = "http://14.103.174.44/v1/files/upload"; // 鏂囦欢涓婁紶鎺ュ彛锛堝亣璁撅級
-         String authToken = "app-J1Tqytg0ZetcrVTF2fVHHY8B";
+         String serverFileRoot = uploadPath;
+         String workflowUrl = cs.getWorkflowUrl();
+         String fileUploadUrl = cs.getFileUploadUrl(); // 鏂囦欢涓婁紶鎺ュ彛锛堝亣璁撅級
+         String authToken = cs.getAuthToken();
          String userId = user;
-         String appId = "cf85fe4d-b76b-4c4c-801a-1336c880d473";
+         String appId = cs.getAppId();
 
          try {
-             // 姝ラ1锛氫笂浼犵畝鍘嗘枃浠讹紝鑾峰彇 upload_file_id 鍒楄〃
-             List<String> jianliFileList = Arrays.asList(jianli.split(","));
-             List<String> jianliFileIds = new ArrayList<>();
-             for (String fileName : jianliFileList) {
-                 // 淇锛氬彧杩囨护璺緞閬嶅巻瀛楃锛屼繚鐣欏悎娉曠殑 /
-                 String safeFileName = fileName.trim()
-                         // 杩囨护 ../ 鍜� ./ 搴忓垪锛堥槻姝㈣闂笂绾х洰褰曪級
-                         .replaceAll("\\.\\./", "")
-                         .replaceAll("\\./", "");
+             Map<String, Object> inputs = new HashMap<>();
+             if (jianli != null) {
+                 // 姝ラ2锛氭瀯寤� inputs 鍙傛暟锛堟寜鎺ュ彛瑕佹眰鏍煎紡锛�
+                 List<String> jianliFileList = Arrays.asList(jianli.split(","));
+                 if (jianliFileList != null && !jianliFileList.isEmpty()) {
+                     // 姝ラ1锛氫笂浼犵畝鍘嗘枃浠讹紝鑾峰彇 upload_file_id 鍒楄〃
+                     List<String> jianliFileIds = new ArrayList<>();
+                     for (String fileName : jianliFileList) {
+                         // 淇锛氬彧杩囨护璺緞閬嶅巻瀛楃锛屼繚鐣欏悎娉曠殑 /
+                         String safeFileName = File.separator + fileName.trim()
+                                 // 杩囨护 ../ 鍜� ./ 搴忓垪锛堥槻姝㈣闂笂绾х洰褰曪級
+                                 .replaceAll("\\.\\./", "")
+                                 .replaceAll("\\./", "");
 
 // 杩涗竴姝ュ畨鍏ㄦ牎楠岋細纭繚鎷兼帴鍚庣殑鏂囦欢璺緞鍦ㄦ湇鍔″櫒鏍圭洰褰曚笅锛堟牳蹇冨畨鍏ㄦ帾鏂斤級
-                 File file = new File(serverFileRoot + safeFileName);
-                 String canonicalPath = file.getCanonicalPath(); // 鑾峰彇鏍囧噯鍖栬矾寰勶紙鑷姩瑙f瀽 ../ 绛夛級
-                 String canonicalRootPath = new File(serverFileRoot).getCanonicalPath();
+                         File file = new File(serverFileRoot + safeFileName);
+                         String canonicalPath = file.getCanonicalPath(); // 鑾峰彇鏍囧噯鍖栬矾寰勶紙鑷姩瑙f瀽 ../ 绛夛級
+                         String canonicalRootPath = new File(serverFileRoot).getCanonicalPath();
 
 // 鏍¢獙锛氬鏋滄枃浠惰矾寰勪笉鍦ㄦ湇鍔″櫒鏍圭洰褰曚笅锛岃涓洪潪娉曡姹�
-                 if (!canonicalPath.startsWith(canonicalRootPath)) {
-                     throw new RuntimeException("闈炴硶鏂囦欢璁块棶锛�" + fileName);
-                 }
+                         if (!canonicalPath.startsWith(canonicalRootPath)) {
+                             throw new RuntimeException("闈炴硶鏂囦欢璁块棶锛�" + fileName);
+                         }
 
 // 鍐嶅垽鏂枃浠舵槸鍚﹀瓨鍦�
-                 if (!file.exists() || !file.isFile()) {
-                     return Result.error("鏈嶅姟鍣ㄤ笉瀛樺湪鏂囦欢锛�" + safeFileName + "锛岃矾寰勶細" + file.getAbsolutePath());
+                         if (!file.exists() || !file.isFile()) {
+                             return Result.error("鏈嶅姟鍣ㄤ笉瀛樺湪鏂囦欢锛�" + safeFileName + "锛岃矾寰勶細" + file.getAbsolutePath());
+                         }
+                         // 璋冪敤鏂囦欢涓婁紶鎺ュ彛锛岃幏鍙� upload_file_id
+                         String fileId = uploadFileToServer(file, fileUploadUrl, authToken);
+                         jianliFileIds.add(fileId);
+                     }
+
+
+                     // 澶勭悊绠�鍘嗘枃浠讹紙jianli 鏄� variable_name锛屽搴旀帴鍙g殑 {variable_name}锛�
+                     if (!jianliFileIds.isEmpty()) {
+                         // 鑻ユ敮鎸佸涓枃浠讹紝鍙兘闇�瑕佹暟缁勫舰寮忥紱鍗曚釜鏂囦欢鍒欑洿鎺ユ斁瀵硅薄
+                         List<Map<String, String>> jianliFiles = new ArrayList<>();
+                         for (String fileId : jianliFileIds) {
+                             Map<String, String> fileInfo = new HashMap<>();
+                             fileInfo.put("transfer_method", "local_file"); // 鍥哄畾鍊硷紝鎺ュ彛瑕佹眰
+                             fileInfo.put("upload_file_id", fileId); // 涓婁紶鏂囦欢杩斿洖鐨処D
+                             fileInfo.put("type", "document"); // 鏂囦欢绫诲瀷锛屽 document/image 绛夛紙鎸夋帴鍙h姹傦級
+                             jianliFiles.add(fileInfo);
+                         }
+                         inputs.put("jianli", jianliFiles); // jianli 瀵瑰簲 {variable_name}
+                     } else {
+                         inputs.put("jianli", new ArrayList<>()); // 绌烘枃浠跺垪琛�
+                     }
                  }
-                 // 璋冪敤鏂囦欢涓婁紶鎺ュ彛锛岃幏鍙� upload_file_id
-                 String fileId = uploadFileToServer(file, fileUploadUrl, authToken);
-                 jianliFileIds.add(fileId);
              }
 
-             // 姝ラ2锛氭瀯寤� inputs 鍙傛暟锛堟寜鎺ュ彛瑕佹眰鏍煎紡锛�
-             Map<String, Object> inputs = new HashMap<>();
-
-             // 澶勭悊绠�鍘嗘枃浠讹紙jianli 鏄� variable_name锛屽搴旀帴鍙g殑 {variable_name}锛�
-             if (!jianliFileIds.isEmpty()) {
-                 // 鑻ユ敮鎸佸涓枃浠讹紝鍙兘闇�瑕佹暟缁勫舰寮忥紱鍗曚釜鏂囦欢鍒欑洿鎺ユ斁瀵硅薄
-                 List<Map<String, String>> jianliFiles = new ArrayList<>();
-                 for (String fileId : jianliFileIds) {
-                     Map<String, String> fileInfo = new HashMap<>();
-                     fileInfo.put("transfer_method", "local_file"); // 鍥哄畾鍊硷紝鎺ュ彛瑕佹眰
-                     fileInfo.put("upload_file_id", fileId); // 涓婁紶鏂囦欢杩斿洖鐨処D
-                     fileInfo.put("type", "document"); // 鏂囦欢绫诲瀷锛屽 document/image 绛夛紙鎸夋帴鍙h姹傦級
-                     jianliFiles.add(fileInfo);
-                 }
-                 inputs.put("jianli", jianliFiles); // jianli 瀵瑰簲 {variable_name}
-             } else {
-                 inputs.put("jianli", new ArrayList<>()); // 绌烘枃浠跺垪琛�
+             if (jianli2 != null) {
+                 inputs.put("jianli2", jianli2);
              }
-
              // 娣诲姞鍏朵粬鏂囨湰鍙傛暟
-             inputs.put("wenanyaoqiu", wenanyaoqiu);
+             inputs.put("benchmarkUrl", wenanyaoqiu);
              inputs.put("louchu", louchu);
              inputs.put("youshang", youshang);
              inputs.put("wenti", wenti);
@@ -293,7 +392,111 @@
              requestBody.put("inputs", inputs); // 椤跺眰 inputs 瀹瑰櫒
              requestBody.put("user", user); // 椤跺眰 inputs 瀹瑰櫒
 
+             SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+// 杩炴帴瓒呮椂锛氬缓绔婽CP杩炴帴鐨勮秴鏃舵椂闂达紝鍗曚綅姣锛堝缓璁5绉掞級
+             factory.setConnectTimeout(5000);
+// 璇诲彇瓒呮椂锛氱瓑寰呮湇鍔$鍝嶅簲鏁版嵁鐨勮秴鏃舵椂闂达紝鍗曚綅姣锛堟牴鎹帴鍙h�楁椂璋冩暣锛岃繖閲岃30绉掞級
+             factory.setReadTimeout(200000);
              // 姝ラ4锛氳皟鐢ㄥ伐浣滄祦鎺ュ彛
+             RestTemplate restTemplate = new RestTemplate(factory);
+             HttpHeaders headers = new HttpHeaders();
+             headers.setContentType(MediaType.APPLICATION_JSON);
+             headers.set("Authorization", "Bearer " + authToken);
+
+             HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
+             ResponseEntity<String> response = restTemplate.postForEntity(workflowUrl, requestEntity, String.class);
+
+             if (response.getStatusCode() == HttpStatus.OK) {
+                 if (JSONObject.parseObject(response.getBody()).getJSONObject("data").get("outputs") == null) {
+                     return Result.error(JSONObject.parseObject(response.getBody()).getJSONObject("data").getString("error"));
+                 }
+                 else{
+                     String test = JSONObject.parseObject(response.getBody()).getJSONObject("data").getJSONObject("outputs").getString("http");
+
+// ========== 涓棿鎿嶄綔锛歁D杞琀TML鏍煎紡鏂囨湰锛堜繚鐣欐墍鏈夊洖杞︼紝鏂板####鍥涚骇鏍囬澶勭悊锛� ==========
+// 1. 瀹氫箟MD璇硶姝e垯锛堣ˉ鍏�####鍥涚骇鏍囬锛屽叾浠栦繚鐣欙級
+                     Pattern h1Pattern = Pattern.compile("^# (.*)", Pattern.MULTILINE);
+                     Pattern h2Pattern = Pattern.compile("^## (.*)", Pattern.MULTILINE);
+                     Pattern h3Pattern = Pattern.compile("^### (.*)", Pattern.MULTILINE);
+                     Pattern h4Pattern = Pattern.compile("^#### (.*)", Pattern.MULTILINE); // 鏂板锛氬洓绾ф爣棰樻鍒�
+                     Pattern ulStartPattern = Pattern.compile("^- (.*)", Pattern.MULTILINE);
+                     Pattern boldPattern = Pattern.compile("\\*\\*(.*?)\\*\\*");
+                     Pattern hrPattern = Pattern.compile("^---+$", Pattern.MULTILINE);
+
+// 2. 閫愭鏇挎崲MD璇硶涓篐TML鏍囩锛堜繚鐣欐墍鏈夋崲琛岋紝鏂板鍥涚骇鏍囬杞崲锛�
+                     test = h1Pattern.matcher(test).replaceAll("<h1>$1</h1>"); // 涓�绾ф爣棰樷啋<h1>
+                     test = h2Pattern.matcher(test).replaceAll("<h2>$1</h2>"); // 浜岀骇鏍囬鈫�<h2>
+                     test = h3Pattern.matcher(test).replaceAll("<h3>$1</h3>"); // 涓夌骇鏍囬鈫�<h3>
+                     test = h4Pattern.matcher(test).replaceAll("<h4>$1</h4>"); // 鏂板锛氬洓绾ф爣棰樷啋<h4>
+                     test = boldPattern.matcher(test).replaceAll("<strong>$1</strong>"); // 鍔犵矖鈫�<strong>
+                     test = hrPattern.matcher(test).replaceAll("<hr/>"); // 鍒嗛殧绾库啋<hr/>
+
+// 澶勭悊鏃犲簭鍒楄〃锛堝厛鏍囪鍒楄〃椤癸紝鍐嶅寘瑁�<ul>锛�
+                     test = ulStartPattern.matcher(test).replaceAll("<li>$1</li>");
+                     test = test.replaceAll("(<li>.*?</li>\\r?\\n?)+", "<ul>$0</ul>");
+
+// 淇濈暀鍘熸湁鍥炶溅锛堝皢\n杞负HTML鎹㈣<br>锛屽悓鏃朵繚鐣欏師濮嬫崲琛岀锛�
+                     test = test.replaceAll("\\r?\\n", "<br/>\n");
+
+// ========== 杞崲缁撴潫锛宼est涓篐TML鏍煎紡涓斿鐞嗕簡####鍥涚骇鏍囬 ==========
+
+                     return Result.OK("鏂囨鐢熸垚鎴愬姛", test);
+                 }
+
+             } else {
+                 return Result.error("宸ヤ綔娴佹帴鍙e紓甯革紝鐘舵�佺爜锛�" + response.getStatusCodeValue());
+             }
+
+         } catch (NullPointerException e) {
+             e.printStackTrace();
+             return Result.error("涓嶆敮鎸佺殑鏂囦欢鏍煎紡锛�" + jianli.split("\\.")[jianli.split("\\.").length - 1]);
+         } catch (Exception e) {
+             e.printStackTrace();
+             return Result.error("鐢熸垚鏂囨寮傚父锛�" + e.getMessage());
+         }
+     }
+
+
+     /**
+      * 鏂板鐨勭敓鎴愭爣棰樻帴鍙f柟娉�
+      */
+     @RequiresPermissions("copywriting:copywriting:aiCreateTitle")
+     @RequestMapping(value = "/aiCreateTitle", method = RequestMethod.POST)
+     public Result<?> aiCreateTitle(
+             @RequestParam String louchu,
+             @RequestParam String yuyici,
+             @RequestParam String startTime,
+             @RequestParam String endTime,
+             @RequestParam String user) { // 淇濈暀user鍙傛暟锛岀敤浜庢帴鍙i壌鏉�/褰掑睘
+
+         return getResult(louchu, yuyici, startTime, endTime, user);
+     }
+
+     public static Result<?> getResult(String louchu, String yuyici, String startTime, String endTime, String user) {
+         // 2. 閰嶇疆鍥哄畾鍙傛暟锛堝拰鍘熸湁鏂规硶淇濇寔涓�鑷达紝鍙牴鎹疄闄呮儏鍐佃皟鏁达級
+         String workflowUrl = "http://14.103.174.44/v1/workflows/run"; // 鏍囬鐢熸垚鐨勫伐浣滄祦鍦板潃锛岃嫢鍜屾枃妗堜笉鍚岄渶淇敼
+         String authToken = "app-F09iyl3p5448JoKufR2CRpWG";
+         String appId = "cf85fe4d-b76b-4c4c-801a-1336c880d473";
+
+         try {
+             // 3. 鏋勫缓inputs鍙傛暟锛堥�傞厤鏍囬鐢熸垚鎺ュ彛鐨勫弬鏁版牸寮忥級
+             Map<String, Object> inputs = new HashMap<>();
+             // 娣诲姞涓氬姟鍙傛暟
+             inputs.put("louchu", louchu);        // 闇插嚭
+             inputs.put("yuyici", yuyici);        // 璇皵璇�
+             inputs.put("startTime", startTime);  // 寮�濮嬫椂闂�
+             inputs.put("endTime", endTime);      // 缁撴潫鏃堕棿
+
+             // 娣诲姞绯荤粺鍙傛暟锛堝拰鍘熸湁鏂规硶涓�鑷达級
+             inputs.put("sys.user_id", user);
+             inputs.put("sys.app_id", appId);
+
+             // 4. 鏋勫缓瀹屾暣璇锋眰浣�
+             Map<String, Object> requestBody = new HashMap<>();
+             requestBody.put("inputs", inputs);   // 椤跺眰inputs瀹瑰櫒
+             requestBody.put("user", user);       // 椤跺眰user鍙傛暟锛堜繚鎸佸拰鍘熸湁鎺ュ彛涓�鑷达級
+
+             // 5. 璋冪敤宸ヤ綔娴佹帴鍙�
              RestTemplate restTemplate = new RestTemplate();
              HttpHeaders headers = new HttpHeaders();
              headers.setContentType(MediaType.APPLICATION_JSON);
@@ -301,19 +504,41 @@
              HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
              ResponseEntity<String> response = restTemplate.postForEntity(workflowUrl, requestEntity, String.class);
 
+             // 6. 澶勭悊鎺ュ彛杩斿洖缁撴灉
              if (response.getStatusCode() == HttpStatus.OK) {
-                 return Result.OK("鏂囨鐢熸垚鎴愬姛", JSONObject.parseObject(response.getBody()).getJSONObject("data").getJSONObject("outputs").getString("http"));
+                 JSONObject responseJson = JSONObject.parseObject(response.getBody());
+                 JSONObject dataJson = responseJson.getJSONObject("data");
+
+                 // 鏍¢獙杩斿洖缁撴灉缁撴瀯
+                 if (dataJson == null) {
+                     return Result.error("鎺ュ彛杩斿洖鏁版嵁鏍煎紡寮傚父锛氭棤data瀛楁");
+                 }
+                 if (dataJson.get("outputs") == null) {
+                     String errorMsg = dataJson.getString("error") != null ? dataJson.getString("error") : "鏍囬鐢熸垚澶辫触锛屾棤鍏蜂綋閿欒淇℃伅";
+                     return Result.error(errorMsg);
+                 }
+
+                 // 鎻愬彇鏍囬缁撴灉锛堝亣璁緊utputs閲岀殑key鏄�"title"锛岄渶鏍规嵁瀹為檯鎺ュ彛杩斿洖璋冩暣锛�
+                 String title = dataJson.getJSONObject("outputs").getString("title");
+                 if (title != null) {
+                     return Result.OK("鏍囬鐢熸垚鎴愬姛", title);
+                 } else {
+                     try {
+                         return Result.OK(JSONObject.parseObject(dataJson.get("outputs").toString()).get("llm"));
+                     } catch (Exception e ){
+
+                     }
+
+                 }
              } else {
-                 return Result.error("宸ヤ綔娴佹帴鍙e紓甯革紝鐘舵�佺爜锛�" + response.getStatusCodeValue());
+                 return Result.error("宸ヤ綔娴佹帴鍙h皟鐢ㄥ紓甯革紝鐘舵�佺爜锛�" + response.getStatusCodeValue());
              }
 
-         } catch (NullPointerException e) {
-             e.printStackTrace();
-             return Result.error("涓嶆敮鎸佺殑鏂囦欢鏍煎紡锛�"+jianli.split("\\.")[jianli.split("\\.").length-1]);
          } catch (Exception e) {
              e.printStackTrace();
-             return Result.error("鐢熸垚鏂囨寮傚父锛�" + e.getMessage());
+             return Result.error("鐢熸垚鏍囬寮傚父锛�" + e.getMessage());
          }
+         return Result.error("");
      }
 
      /**

--
Gitblit v1.8.0