From e310dfdc93c20ac0c3b5fcd1a95de298cfce2ae9 Mon Sep 17 00:00:00 2001
From: chengf <cgf12138@163.com>
Date: 星期六, 07 二月 2026 10:28:55 +0800
Subject: [PATCH] 添加状态:停止服务-cgf
---
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/copywriting/controller/CopywritingController.java | 393 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 384 insertions(+), 9 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 fabefbf..76eb289 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
@@ -1,19 +1,32 @@
package org.jeecg.modules.demo.copywriting.controller;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+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.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.*;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.demo.contract.entity.SemanticWord;
+import org.jeecg.modules.demo.contract.service.ISemanticWordService;
import org.jeecg.modules.demo.copywriting.entity.Copywriting;
import org.jeecg.modules.demo.copywriting.service.ICopywritingService;
@@ -29,7 +42,14 @@
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
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.*;
+import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
@@ -48,9 +68,14 @@
@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;;
+ @Autowired
+ private ISysUserService sysUserService;
/**
* 鍒嗛〉鍒楄〃鏌ヨ
@@ -69,13 +94,79 @@
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
-
QueryWrapper<Copywriting> queryWrapper = QueryGenerator.initQueryWrapper(copywriting, req.getParameterMap());
- Page<Copywriting> page = new Page<Copywriting>(pageNo, pageSize);
+
+ 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 (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);
+ for (Copywriting item : pageList.getRecords()) {
+ item.setSemanticWord(semanticWordService.getById(item.getWordId()));
+ }
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");
+ }
+
/**
* 娣诲姞
*
@@ -87,6 +178,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("娣诲姞鎴愬姛锛�");
@@ -166,6 +260,9 @@
return super.exportXls(request, copywriting, Copywriting.class, "鏂囨");
}
+
+ @Value("${jeecg.path.upload}")
+ private String uploadPath;
/**
* 閫氳繃excel瀵煎叆鏁版嵁
*
@@ -179,4 +276,282 @@
return super.importExcel(request, response, Copywriting.class);
}
+
+ @RequiresPermissions("copywriting:copywriting:aiCreateCopyWriting")
+ @RequestMapping(value = "/aiCreateCopyWriting", method = RequestMethod.POST)
+ public Result<?> aiCreateCopyWriting(
+ @RequestParam("jianli") String jianli,
+ @RequestParam String wenanyaoqiu,
+ @RequestParam String louchu,
+ @RequestParam String youshang,
+ @RequestParam String wenti,
+ @RequestParam String user) {
+ return getResult(jianli, wenanyaoqiu, louchu, youshang, wenti, user);
+ }
+
+ public Result<?> getResult(String jianli, String wenanyaoqiu, String louchu, String youshang, String wenti, String user) {
+ if (jianli == null || jianli.equals("")) {
+ return Result.error("璇烽�夋嫨鏂囦欢");
+ }
+ // 閰嶇疆淇℃伅
+ String serverFileRoot = uploadPath;
+ 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 userId = user;
+ String appId = "cf85fe4d-b76b-4c4c-801a-1336c880d473";
+
+ try {
+ // 姝ラ1锛氫笂浼犵畝鍘嗘枃浠讹紝鑾峰彇 upload_file_id 鍒楄〃
+ List<String> jianliFileList = Arrays.asList(jianli.split(","));
+ 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();
+
+// 鏍¢獙锛氬鏋滄枃浠惰矾寰勪笉鍦ㄦ湇鍔″櫒鏍圭洰褰曚笅锛岃涓洪潪娉曡姹�
+ if (!canonicalPath.startsWith(canonicalRootPath)) {
+ throw new RuntimeException("闈炴硶鏂囦欢璁块棶锛�" + fileName);
+ }
+
+// 鍐嶅垽鏂枃浠舵槸鍚﹀瓨鍦�
+ if (!file.exists() || !file.isFile()) {
+ return Result.error("鏈嶅姟鍣ㄤ笉瀛樺湪鏂囦欢锛�" + safeFileName + "锛岃矾寰勶細" + file.getAbsolutePath());
+ }
+ // 璋冪敤鏂囦欢涓婁紶鎺ュ彛锛岃幏鍙� 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<>()); // 绌烘枃浠跺垪琛�
+ }
+
+ // 娣诲姞鍏朵粬鏂囨湰鍙傛暟
+ inputs.put("benchmarkUrl", wenanyaoqiu);
+ inputs.put("louchu", louchu);
+ inputs.put("youshang", youshang);
+ inputs.put("wenti", wenti);
+
+ // 娣诲姞绯荤粺鍙傛暟
+ inputs.put("sys.user_id", userId);
+ inputs.put("sys.app_id", appId);
+
+ // 姝ラ3锛氭瀯寤哄畬鏁磋姹備綋
+ Map<String, Object> requestBody = new HashMap<>();
+ requestBody.put("inputs", inputs); // 椤跺眰 inputs 瀹瑰櫒
+ requestBody.put("user", user); // 椤跺眰 inputs 瀹瑰櫒
+
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+// 杩炴帴瓒呮椂锛氬缓绔婽CP杩炴帴鐨勮秴鏃舵椂闂达紝鍗曚綅姣锛堝缓璁5绉掞級
+ factory.setConnectTimeout(5000);
+// 璇诲彇瓒呮椂锛氱瓑寰呮湇鍔$鍝嶅簲鏁版嵁鐨勮秴鏃舵椂闂达紝鍗曚綅姣锛堟牴鎹帴鍙h�楁椂璋冩暣锛岃繖閲岃30绉掞級
+ factory.setReadTimeout(100000);
+ // 姝ラ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);
+ headers.set("Authorization", "Bearer " + authToken);
+ HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
+ ResponseEntity<String> response = restTemplate.postForEntity(workflowUrl, requestEntity, String.class);
+
+ // 6. 澶勭悊鎺ュ彛杩斿洖缁撴灉
+ if (response.getStatusCode() == HttpStatus.OK) {
+ 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("宸ヤ綔娴佹帴鍙h皟鐢ㄥ紓甯革紝鐘舵�佺爜锛�" + response.getStatusCodeValue());
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error("鐢熸垚鏍囬寮傚父锛�" + e.getMessage());
+ }
+ return Result.error("");
+ }
+
+ /**
+ * 璋冪敤鏂囦欢涓婁紶鎺ュ彛锛岃幏鍙� upload_file_id锛堜慨姝g増锛�
+ */
+ private String uploadFileToServer(File file, String uploadUrl, String authToken) throws Exception {
+ // 鏋勫缓鏂囦欢涓婁紶璇锋眰锛坢ultipart/form-data 鏍煎紡锛�
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.MULTIPART_FORM_DATA);
+ headers.set("Authorization", "Bearer " + authToken);
+
+ // 璇诲彇鏂囦欢鍐呭
+ byte[] fileBytes = new byte[(int) file.length()];
+ try (FileInputStream fis = new FileInputStream(file)) {
+ fis.read(fileBytes);
+ }
+
+ // 鏋勫缓澶氶儴鍒嗚姹備綋
+ MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
+ parts.add("file", new ByteArrayResource(fileBytes) {
+ @Override
+ public String getFilename() {
+ return file.getName(); // 蹇呴』璁剧疆鏂囦欢鍚�
+ }
+ });
+
+ HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(parts, headers);
+ RestTemplate restTemplate = new RestTemplate();
+ ResponseEntity<Map> response = restTemplate.postForEntity(uploadUrl, requestEntity, Map.class);
+
+ // 淇锛氬彧瑕佺姸鎬佺爜鏄�200 OK锛屼笖鍖呭惈id瀛楁锛屽氨鏄笂浼犳垚鍔�
+ if ((response.getStatusCode() == HttpStatus.OK || response.getStatusCode() == HttpStatus.CREATED) && response.getBody() != null) {
+ Object fileId = response.getBody().get("id");
+ if (fileId != null) {
+ return fileId.toString(); // 鎴愬姛杩斿洖upload_file_id
+ } else {
+ throw new RuntimeException("鏂囦欢涓婁紶鎴愬姛锛屼絾鏈繑鍥瀒d瀛楁锛屽搷搴旓細" + response.getBody());
+ }
+ } else {
+ throw new RuntimeException("鏂囦欢涓婁紶澶辫触锛岀姸鎬佺爜锛�" + response.getStatusCode() + "锛屽搷搴旓細" + response.getBody());
+ }
+ }
}
--
Gitblit v1.8.0