TakaiAiController.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812
  1. package com.takai.web.controller.takaiai;
  2. import com.alibaba.fastjson2.JSONObject;
  3. import com.github.pagehelper.PageHelper;
  4. import com.takai.ai.domain.dto.TakaiDialogReqDTO;
  5. import com.takai.ai.domain.dto.TakaiQuestionDTO;
  6. import com.takai.ai.domain.entity.*;
  7. import com.takai.ai.service.ITakaiAiService;
  8. import com.takai.bigmodel.domain.entity.PageParams;
  9. import com.takai.common.annotation.Log;
  10. import com.takai.common.core.controller.BaseController;
  11. import com.takai.common.core.domain.AjaxResult;
  12. import com.takai.common.core.domain.entity.SysDictData;
  13. import com.takai.common.core.domain.entity.SysUser;
  14. import com.takai.common.core.domain.model.LoginUser;
  15. import com.takai.common.core.page.TableDataInfo;
  16. import com.takai.ai.domain.dto.TakaiDialogRespDTO;
  17. import com.takai.common.enums.BusinessType;
  18. import com.takai.common.utils.SecurityUtils;
  19. import com.takai.common.utils.poi.ExcelUtil;
  20. import com.takai.framework.web.service.SysPermissionService;
  21. import com.takai.system.service.ISysDictDataService;
  22. import lombok.extern.slf4j.Slf4j;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.http.MediaType;
  26. import org.springframework.web.bind.annotation.*;
  27. import org.springframework.web.multipart.MultipartFile;
  28. import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
  29. import javax.servlet.http.HttpServletRequest;
  30. import javax.servlet.http.HttpServletResponse;
  31. import java.util.*;
  32. import java.util.stream.Collectors;
  33. @Slf4j
  34. @RestController
  35. @RequestMapping("/deepseek/api")
  36. public class TakaiAiController extends BaseController {
  37. @Autowired
  38. private ITakaiAiService takaiAisService;
  39. @Autowired
  40. private ISysDictDataService dictDataService;
  41. @Autowired
  42. private SysPermissionService permissionService;
  43. /**
  44. * 对话聊天
  45. *
  46. * @param response
  47. * @param request
  48. * @param sseParams
  49. * @return
  50. */
  51. @PostMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
  52. public SseEmitter chat(HttpServletResponse response, HttpServletRequest request, @RequestBody TakaiSseInfoParams sseParams)
  53. throws Exception {
  54. return takaiAisService.sseInvoke(sseParams);
  55. }
  56. @PostMapping("/async/completions")
  57. public AjaxResult asyncCompletions(@RequestBody TakaiCompletionsParams params) {
  58. return success(takaiAisService.asyncCompletions(params));
  59. }
  60. /**
  61. * 应用列表
  62. *
  63. * @param params
  64. * @return
  65. */
  66. @PostMapping("/getApplicationList")
  67. public TableDataInfo getApplicationList(@RequestBody TakaiPageParams params) {
  68. TakaiApplication vo = setFlagParams(params.getUserId(), params.getTypeId(), params.getProjectId(), 1);
  69. List<TakaiApplicationResult> s = takaiAisService.getApplicationList(vo);
  70. PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
  71. List<TakaiApplicationResult> list = takaiAisService.getApplicationList(vo);
  72. return getDataTableResultTotal(list, Long.valueOf(s.size()));
  73. }
  74. /**
  75. * 创建应用
  76. *
  77. * @param params
  78. * @return
  79. */
  80. @PostMapping("/createApplication")
  81. public AjaxResult addApplication(@RequestBody TakaiApplicationParams params) {
  82. SysUser user = new SysUser();
  83. user.setUserId(params.getUserId());
  84. Set<String> permissions = permissionService.getMenuPermission(user);
  85. int i = 0;
  86. if (permissions != null && permissions.size() > 0 && (permissions.contains("deepseek:application:role") || permissions.contains("*:*:*"))) {
  87. i = takaiAisService.createApplication(params, true);
  88. }else{
  89. i = takaiAisService.createApplication(params, false);
  90. }
  91. return AjaxResult.success(i);
  92. }
  93. /**
  94. * 查询应用详情
  95. *
  96. * @param appId
  97. * @return
  98. */
  99. @GetMapping("/selectApplication/{appId}")
  100. public AjaxResult selectApplication(@PathVariable String appId) {
  101. JSONObject application = takaiAisService.selectApplication(appId);
  102. return AjaxResult.success(application);
  103. }
  104. /**
  105. * 修改应用
  106. *
  107. * @param params
  108. * @param appId
  109. * @return
  110. */
  111. @PutMapping("/updateApplication/{appId}")
  112. public AjaxResult updateApplication(@RequestBody TakaiApplicationParams params, @PathVariable String appId) {
  113. SysUser user = new SysUser();
  114. user.setUserId(params.getUserId());
  115. Set<String> permissions = permissionService.getMenuPermission(user);
  116. int application = 0;
  117. if (permissions != null && permissions.size() > 0 && (permissions.contains("deepseek:application:role") || permissions.contains("*:*:*"))) {
  118. application = takaiAisService.updateApplication(params, appId, true);
  119. }else{
  120. application = takaiAisService.updateApplication(params, appId, false);
  121. }
  122. return AjaxResult.success(application);
  123. }
  124. /**
  125. * 删除应用
  126. *
  127. * @param appId
  128. * @return
  129. */
  130. @DeleteMapping("/delApplication/{appId}")
  131. public AjaxResult delApplication(@PathVariable String appId) {
  132. int application = takaiAisService.delApplication(appId);
  133. return AjaxResult.success(application);
  134. }
  135. /**
  136. * 首页
  137. *
  138. * @param params
  139. * @return
  140. */
  141. @PostMapping("/index")
  142. public AjaxResult index(@RequestBody PageParams params) {
  143. TakaiApplication vo = setFlagParams(params.getUserId(), params.getTypeId(), params.getProjectId(), 2);
  144. // 问答应用总数
  145. List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
  146. // 知识库总数
  147. List<TakaiKnowledge> knowledgeList = takaiAisService.queryKnowledgeList();
  148. Map<String, Object> map = new HashMap();
  149. map.put("applicationCount", appList.size());
  150. map.put("knowledgeCount", knowledgeList.size());
  151. return success(map);
  152. }
  153. /**
  154. * 获取知识库下拉列表
  155. *
  156. * @return
  157. */
  158. @GetMapping("/knowledgeList")
  159. public AjaxResult getKnowledgeList() {
  160. return success(takaiAisService.queryKnowledgeList());
  161. }
  162. /**
  163. * 知识库列表
  164. *
  165. * @param params
  166. * @return
  167. */
  168. @PostMapping("/getKnowledgeList")
  169. public TableDataInfo getKnowledgeList(@RequestBody TakaiPageParams params) {
  170. List<TakaiKnowledge> s = takaiAisService.queryKnowledgeList();
  171. PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
  172. List<TakaiKnowledge> list = takaiAisService.queryKnowledgeList();
  173. return getDataTableResultTotal(list, Long.valueOf(s.size()));
  174. }
  175. /**
  176. * 创建知识库
  177. *
  178. * @param knowledge
  179. * @return
  180. */
  181. @PostMapping("/createKnowledge")
  182. public AjaxResult createKnowledge(@RequestBody TakaiKnowledgeParams knowledge) {
  183. int i = takaiAisService.createKnowledge(knowledge);
  184. return success(i);
  185. }
  186. /**
  187. * 知识库详情
  188. *
  189. * @param knowledgeId
  190. * @return
  191. */
  192. @GetMapping("/detailKnowledge/{knowledgeId}")
  193. public AjaxResult detailKnowledge(@PathVariable String knowledgeId) {
  194. TakaiKnowledge result = takaiAisService.detailKnowledge(knowledgeId);
  195. return success(result);
  196. }
  197. /**
  198. * 修改知识库
  199. *
  200. * @param knowledge
  201. * @param knowledgeId
  202. * @return
  203. */
  204. @PutMapping("/updateKnowledge/{knowledgeId}")
  205. public AjaxResult updateKnowledge(@RequestBody TakaiKnowledgeParams knowledge, @PathVariable String knowledgeId) {
  206. int i = takaiAisService.updateKnowledge(knowledge, knowledgeId);
  207. return success(i);
  208. }
  209. /**
  210. * 删除知识库
  211. *
  212. * @param knowledgeId
  213. * @return
  214. */
  215. @DeleteMapping("/delKnowledge/{knowledgeId}")
  216. public AjaxResult delKnowledge(@PathVariable String knowledgeId) {
  217. int i = takaiAisService.delKnowledge(knowledgeId);
  218. return success(i);
  219. }
  220. /**
  221. * 知识列表
  222. *
  223. * @param params
  224. * @return
  225. */
  226. @PostMapping("/documentList")
  227. public TableDataInfo documentList(@RequestBody TakaiDocumentParams params) {
  228. List<TakaiDocument> sTotal = takaiAisService.documentList(params);
  229. PageHelper.startPage(params.getPage(), params.getSize(), "").setReasonable(true);
  230. List<TakaiDocument> list = takaiAisService.documentList(params);
  231. return getDataTableResultTotal(list, Long.valueOf(sTotal.size()));
  232. // SysUser user = new SysUser();
  233. // user.setUserId(Long.valueOf(params.getUserId()));
  234. // // 角色集合
  235. // Set<String> permissions = permissionService.getMenuPermission(user);
  236. // // admin 所有文件
  237. // if (permissions.contains("document:public") && permissions.contains("document:internal") && permissions.contains("document:confidential") && permissions.contains("document:topsecret")) {
  238. // params.setFileLevel("4");
  239. // }
  240. // // 项目经理 机密文件 + 所有项目下的内部文件 + 公开文件
  241. // else if (permissions.contains("public") && permissions.contains("internal") && permissions.contains("confidential")) {
  242. // params.setFileLevel("3");
  243. // }
  244. // // 普通用户 所属项目下的内部文件 + 公开文件
  245. // else if (permissions.contains("public") && permissions.contains("internal")) {
  246. // params.setFileLevel("2");
  247. // }
  248. // // 游客 只能浏览公开文件
  249. // else if (permissions.contains("public")){
  250. // params.setFileLevel("1");
  251. // }else{
  252. // params.setFileLevel("0"); // 没有权限
  253. // }
  254. // List<TakaiDocument> sTotal = takaiAisService.documentList(params);
  255. // PageHelper.startPage(params.getPage(), params.getSize(), "").setReasonable(true);
  256. // List<TakaiDocument> list = takaiAisService.documentList(params);
  257. // return getDataTableResultTotal(list, Long.valueOf(sTotal.size()));
  258. }
  259. /**
  260. * 知识详情
  261. *
  262. * @param documentId
  263. * @return
  264. */
  265. @GetMapping("/documentDetail/{documentId}")
  266. public AjaxResult documentDetail(@PathVariable String documentId) {
  267. return success(takaiAisService.documentDetail(documentId));
  268. }
  269. /**
  270. * 更新知识
  271. *
  272. * @param params
  273. * @param documentId
  274. * @return
  275. */
  276. @PutMapping("/updateDocument/{documentId}")
  277. public AjaxResult updateDocument(@RequestBody TakaiDocumentParams params, @PathVariable String documentId) {
  278. int i = takaiAisService.updateDocument(params, documentId);
  279. return success(i);
  280. }
  281. /**
  282. * 删除知识
  283. *
  284. * @param documentId
  285. * @return
  286. */
  287. @DeleteMapping("/delDocument/{documentId}")
  288. public AjaxResult delDocument(@PathVariable String documentId) {
  289. int i = takaiAisService.delDocument(documentId);
  290. return success(i);
  291. }
  292. /**
  293. * 上传知识文件
  294. *
  295. * @param files
  296. * @param knowledgeId
  297. * @return
  298. * @throws Exception
  299. */
  300. @PostMapping("/uploadDocument/{knowledgeId}") //@RequestPart DocumentParams documentParams,
  301. public AjaxResult uploadDocument(@RequestParam("files") MultipartFile[] files,
  302. @PathVariable String knowledgeId) throws Exception {
  303. try {
  304. int i = takaiAisService.uploadDocument(files, knowledgeId);
  305. return success(i);
  306. } catch (Exception e) {
  307. return error("0");
  308. }
  309. }
  310. /**
  311. * 获取知识配置信息
  312. *
  313. * @param documentId
  314. * @return
  315. */
  316. @GetMapping("/documentSetting/{documentId}")
  317. public AjaxResult documentSetting(@PathVariable String documentId) {
  318. TakaiDocumentSettings json = takaiAisService.documentSetting(documentId);
  319. return success(json);
  320. }
  321. /**
  322. * 更新知识配置详情
  323. *
  324. * @param documentSetting
  325. * @param documentId
  326. * @return
  327. */
  328. @PutMapping("/updateDocumentSetting/{documentId}")
  329. public AjaxResult updateDocumentSetting(@RequestBody TakaiDocumentSettings documentSetting, @PathVariable String documentId) {
  330. int i = takaiAisService.updateDocumentSetting(documentSetting, documentId); // 更新知识配置信息
  331. return success(i);
  332. }
  333. /**
  334. * 获取切片列表
  335. *
  336. * @param params
  337. * @return
  338. */
  339. @PostMapping("/getSliceList")
  340. public TableDataInfo getDialogDetail(@RequestBody TakaiSliceParams params) {
  341. List<TakaiSliceInfo> s = takaiAisService.selectByDocumentId(params.getDocument_id());
  342. PageHelper.startPage(params.getPageNum(), params.getPageSize(), "").setReasonable(true);
  343. List<TakaiSliceInfo> list = takaiAisService.selectByDocumentId(params.getDocument_id());
  344. return getDataTableResultTotal(list, Long.valueOf(s.size()));
  345. // JSONObject json = takaiAisService.getSliceList(params);
  346. // return success(json);
  347. }
  348. /**
  349. * 删除切片
  350. *
  351. * @param sliceId
  352. * @param knowledgeId
  353. */
  354. @DeleteMapping("/deleteSlice/{sliceId}/{knowledgeId}/{documentId}")
  355. public AjaxResult deleteSlice(@PathVariable String sliceId, @PathVariable String knowledgeId, @PathVariable String documentId) {
  356. return success(takaiAisService.deleteSlice(sliceId, knowledgeId, documentId));
  357. }
  358. /**
  359. * 切片详情
  360. *
  361. * @param sliceId
  362. * @param knowledgeId
  363. * @return
  364. */
  365. @GetMapping("/getSliceDetail/{sliceId}/{knowledgeId}")
  366. public AjaxResult test(@PathVariable String sliceId, @PathVariable String knowledgeId) {
  367. JSONObject json = takaiAisService.getSliceDetail(sliceId, knowledgeId);
  368. return success(json);
  369. }
  370. /**
  371. * 更新切片信息
  372. *
  373. * @param params
  374. * @return
  375. */
  376. @PutMapping("/updateSliceInfo")
  377. public AjaxResult updateSliceInfo(@RequestBody TakaiSliceUpdateParams params) {
  378. return success(takaiAisService.updateSliceInfo(params));
  379. }
  380. /**
  381. * 获取聊天列表
  382. *
  383. * @param params
  384. * @return
  385. */
  386. @PostMapping("/chatHistory/list")
  387. public TableDataInfo dataExportList(@RequestBody TakaiPageParams params) {
  388. if (StringUtils.isNotBlank(params.getAppId())) {
  389. //获取应用聊天列表
  390. List<Object> s = takaiAisService.selectDialogListByAppId(params.getAppId(), params.getUserId());
  391. PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
  392. List<Object> list = takaiAisService.selectDialogListByAppId(params.getAppId(), params.getUserId());
  393. return getDataTableResultTotal(list, Long.valueOf(s.size()));
  394. } else {
  395. //获取所有列表
  396. List<Object> s = takaiAisService.selectDialogListByAppId(null, null);
  397. PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
  398. List<Object> list = takaiAisService.selectDialogListByAppId(null, null);
  399. return getDataTableResultTotal(list, Long.valueOf(s.size()));
  400. }
  401. }
  402. /**
  403. * 导出聊天记录
  404. *
  405. * @param response
  406. * @param id
  407. */
  408. @Log(title = "聊天详情", businessType = BusinessType.EXPORT)
  409. @PostMapping("/dialog/export/{id}")
  410. public void export(HttpServletResponse response, @PathVariable String id) {
  411. List<TakaiDialogRespDTO> dialogs = takaiAisService.exportExcel(id);
  412. ExcelUtil<TakaiDialogRespDTO> util = new ExcelUtil(TakaiDialogRespDTO.class);
  413. util.exportExcel(response, dialogs, "聊天记录");
  414. }
  415. /**
  416. * 应用列表
  417. *
  418. * @return
  419. */
  420. @GetMapping("/application/list")
  421. public AjaxResult applicationList() {
  422. LoginUser loginUser = SecurityUtils.getLoginUser();
  423. if(loginUser != null){
  424. TakaiApplication vo = setFlagParams(loginUser.getUserId(), null, null, 3);
  425. List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
  426. return success(appList);
  427. }else{
  428. TakaiApplication vo = setFlagParams(null, null, null, 3);
  429. List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
  430. return success(appList);
  431. }
  432. }
  433. /**
  434. * 管理后台应用列表
  435. * @return
  436. */
  437. @GetMapping("/application/list/{userId}")
  438. public AjaxResult adminApp(@PathVariable String userId) {
  439. TakaiApplication vo = setFlagParams(userId, null, null, 3);
  440. List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
  441. return success(appList);
  442. }
  443. @GetMapping("/role/list")
  444. public AjaxResult roleApp() {
  445. List<TakaiApplicationResult> appList = takaiAisService.selectRoleApp();
  446. return success(appList);
  447. }
  448. /**
  449. * 保存聊天记录
  450. *
  451. * @param dialogReqDTO
  452. * @return
  453. */
  454. @PostMapping("/dialog/save")
  455. public AjaxResult saveDialog(@RequestBody TakaiDialogReqDTO dialogReqDTO) {
  456. LoginUser loginUser = SecurityUtils.getLoginUser();
  457. if (loginUser != null) {
  458. dialogReqDTO.setUserId(loginUser.getUserId());
  459. takaiAisService.saveDialog(dialogReqDTO);
  460. }
  461. return success();
  462. }
  463. /**
  464. * 聊天集合
  465. *
  466. * @return
  467. */
  468. @GetMapping("/dialog/list/{appId}")
  469. public AjaxResult dialogList(@PathVariable String appId) {
  470. LoginUser loginUser = SecurityUtils.getLoginUser();
  471. if (loginUser != null) {
  472. List<Object> dialogs = takaiAisService.getDialogList(appId, loginUser.getUserId());
  473. return success(dialogs);
  474. }
  475. return success(null);
  476. }
  477. /**
  478. * 聊天详情
  479. *
  480. * @param dialogId
  481. * @return
  482. */
  483. @GetMapping("/dialog/detail/{dialogId}")
  484. public AjaxResult dialogDetail(@PathVariable String dialogId) {
  485. List<TakaiDialogRespDTO> detail = takaiAisService.getDialogDetail(dialogId);
  486. return success(detail);
  487. }
  488. /**
  489. * 删除聊天记录
  490. *
  491. * @param id
  492. * @return
  493. */
  494. @DeleteMapping("/dialog/del/{id}")
  495. public AjaxResult delDialog(@PathVariable String id) {
  496. takaiAisService.DelDialogDetail(id);
  497. return success();
  498. }
  499. /**
  500. * 聊天标题重命名
  501. *
  502. * @param dialogReqDTO
  503. * @return
  504. */
  505. @PutMapping("/dialog/update")
  506. public AjaxResult updateDialog(@RequestBody TakaiDialogReqDTO dialogReqDTO) {
  507. takaiAisService.updateDialog(dialogReqDTO);
  508. return success();
  509. }
  510. /**
  511. * 预设问题
  512. *
  513. * @param appId
  514. * @return
  515. */
  516. @GetMapping("/presets/{appId}")
  517. public AjaxResult presets(@PathVariable String appId) {
  518. List<TakaiQuestionDTO> list = takaiAisService.selectQuestionByAppId(appId);
  519. List<String> strList = new ArrayList();
  520. for (TakaiQuestionDTO vo : list) {
  521. strList.add(vo.getQuestion());
  522. }
  523. return success(strList);
  524. }
  525. /**
  526. * 新增切片
  527. *
  528. * @param params
  529. * @return
  530. */
  531. @PostMapping("/add/slice")
  532. public AjaxResult addSlice(@RequestBody TakaiSliceUpdateParams params) {
  533. return success(takaiAisService.addSlice(params));
  534. }
  535. /**
  536. * 获取聊天切片列表
  537. *
  538. * @param params
  539. * @return
  540. */
  541. @PostMapping("/slicePage")
  542. public TableDataInfo dataExportList(@RequestBody SlicePageInfo params) {
  543. DocumentInfo chunkInfo = params.getChunk_info();
  544. List<ChunkList> chunkList = chunkInfo.getChunk_list();
  545. // 1. 先按 rerank_score 降序排序所有chunk
  546. List<ChunkList> sortedChunks = chunkList.stream()
  547. .sorted(Comparator.comparingDouble(
  548. (ChunkList s) -> Double.parseDouble(s.getRerank_score())
  549. ).reversed())
  550. .collect(Collectors.toList());
  551. // 2. 提取排序后的chunk_ids(此时已按分数排序)
  552. List<String> sortedChunkIds = sortedChunks.stream()
  553. .map(ChunkList::getChunk_id)
  554. .collect(Collectors.toList());
  555. int fromIndex = (params.getPageNum() - 1) * params.getPageSize();
  556. int toIndex = Math.min(fromIndex + params.getPageSize(), chunkList.size());
  557. List<String> ids = sortedChunkIds.subList(fromIndex, toIndex);
  558. PageHelper.startPage(params.getPageNum(), params.getPageSize(), "").setReasonable(true);
  559. List<SliceInfo> list = takaiAisService.slicePageInfoList(ids);
  560. list.forEach(sliceInfo -> {
  561. chunkList.forEach(chunk -> {
  562. if (sliceInfo.getSliceId().equals(chunk.getChunk_id())) {
  563. sliceInfo.setRerankScore(chunk.getRerank_score());
  564. sliceInfo.setChunkLength(chunk.getChunk_len());
  565. }
  566. });
  567. });
  568. List<SliceInfo> sliceList = list.stream()
  569. .sorted(Comparator.comparingDouble((SliceInfo s) -> Double.parseDouble(s.getRerankScore())).reversed())
  570. .collect(Collectors.toList());
  571. return getDataTableResultTotal(sliceList, sortedChunkIds.size());
  572. }
  573. @GetMapping("/slice/search/{id}")
  574. public AjaxResult searchSlice(@PathVariable String id) {
  575. return success(takaiAisService.searchSlice(id));
  576. }
  577. /**
  578. *
  579. * 类型列表
  580. * @param dictType
  581. * @return
  582. */
  583. @GetMapping(value = "/{dictType}")
  584. public AjaxResult geDictInfo(@PathVariable String dictType) {
  585. SysDictData dictData = new SysDictData();
  586. dictData.setDictType(dictType);
  587. List<SysDictData> dictDataList = dictDataService.selectDictDataList(dictData);
  588. return success(dictDataList);
  589. }
  590. /**
  591. * 应用类型列表
  592. * @return
  593. */
  594. @GetMapping("/appType")
  595. public AjaxResult appType() {
  596. LoginUser loginUser = SecurityUtils.getLoginUser();
  597. if (loginUser != null) {
  598. SysDictData dictData = new SysDictData();
  599. dictData.setDictType("app_type");
  600. List<SysDictData> dictDataList = dictDataService.selectDictDataList(dictData);
  601. List<Object> list = takaiAisService.searchAppTypeGroupList(dictDataList, loginUser.getUserId());
  602. return success(list);
  603. }
  604. return null;
  605. }
  606. /**
  607. * 审核列表
  608. * @param params
  609. * @return
  610. */
  611. @PostMapping("/app/audit/list")
  612. public TableDataInfo documentAuditList(@RequestBody TakaiApplicationParams params) {
  613. startPage();
  614. List<TakaiApplication> list = takaiAisService.applicationListByApprover(params);
  615. return getDataTable(list);
  616. }
  617. /**
  618. * 开始审核
  619. * @return
  620. */
  621. @PutMapping(value = "/audit/{appId}/{userId}")
  622. public AjaxResult startAudit(@PathVariable String appId, @PathVariable String userId){
  623. return success(takaiAisService.startAudit(appId, userId));
  624. }
  625. /**
  626. * 审核
  627. * @param params
  628. * @param appId
  629. * @return
  630. */
  631. @PutMapping("/updateDocumentAudit/{appId}")
  632. public AjaxResult updateAuditApplication(@RequestBody TakaiApplicationParams params, @PathVariable String appId) {
  633. int i = takaiAisService.updateAuditApplication(params, appId);
  634. return success(i);
  635. }
  636. /**
  637. * 根据登录用户获取项目下的应用列表
  638. * @return
  639. */
  640. @GetMapping("/project/app")//@RequestBody TakaiPageParams params
  641. public AjaxResult appFlag() {
  642. // TakaiApplication vo = setFlagParams(params.getUserId());
  643. // vo.setApprover(params.getUserId());
  644. LoginUser loginUser = SecurityUtils.getLoginUser();
  645. if(loginUser != null){
  646. TakaiApplication vo = setFlagParams(loginUser.getUserId(), null, null, 1);
  647. List<TakaiApplicationResult> s = takaiAisService.getApplicationList(vo);
  648. return success(takaiAisService.getChatAppList(s, loginUser.getUserId()));
  649. }else{
  650. return success(null);
  651. }
  652. }
  653. /**
  654. * 收藏列表
  655. * @param userId
  656. * @return
  657. */
  658. @GetMapping("/app/collect/list/{userId}")
  659. public AjaxResult appCollectList(@PathVariable String userId) {
  660. List<String> list = takaiAisService.selectAppCollectList(userId);
  661. return success(list);
  662. }
  663. /**
  664. * 收藏
  665. * @param appCollect
  666. * @return
  667. */
  668. @PostMapping("/app/collect")
  669. public AjaxResult appCollect(@RequestBody AppCollect appCollect) {
  670. LoginUser loginUser = SecurityUtils.getLoginUser();
  671. if(loginUser != null){
  672. appCollect.setUserId(loginUser.getUserId());
  673. return success(takaiAisService.insertAppCollect(appCollect));
  674. }else {
  675. return success(null);
  676. }
  677. }
  678. /**
  679. * 取消收藏
  680. * @param appId
  681. * @return
  682. */
  683. @DeleteMapping("/app/collect/{appId}")
  684. public AjaxResult appCollectDel(@PathVariable String appId) {
  685. LoginUser loginUser = SecurityUtils.getLoginUser();
  686. if(loginUser != null){
  687. return success(takaiAisService.deleteAppCollect(loginUser.getUserId(), appId));
  688. }else{
  689. return success(null);
  690. }
  691. }
  692. private TakaiApplication setFlagParams(String userId, String typeId, String projectId, int i) {
  693. if(i == 3){
  694. return returnParams(userId, typeId, projectId, "0");
  695. }else{
  696. // 角色集合
  697. SysUser user = new SysUser();
  698. user.setUserId(userId);
  699. Set<String> permissions = permissionService.getMenuPermission(user);
  700. if (permissions.contains("deepseek:application:create") || permissions.contains("deepseek:application:update")) {
  701. return returnParams(userId, typeId, projectId, "1");
  702. }else{
  703. return returnParams(userId, typeId, projectId, "0");
  704. }
  705. }
  706. }
  707. private TakaiApplication returnParams(String userId, String typeId, String projectId, String flag) {
  708. return TakaiApplication.builder().approver(userId == null ? null : userId)
  709. .typeId(typeId == null ? null : Long.valueOf(typeId))
  710. .projectId(projectId == null ? null : projectId)
  711. .flag(flag).build();
  712. }
  713. @GetMapping("/test")
  714. public AjaxResult test() {
  715. TakaiMediaReplacement vo = takaiAisService.getTakaiMediaReplacement();
  716. return success(vo);
  717. }
  718. @GetMapping("/download/{fileName}")
  719. public void downloadFile(@PathVariable String fileName) {
  720. try {
  721. // InputStream stream = minioUtil.download(bucketName, fileName);
  722. // 这里简化处理,实际应该设置正确的Content-Type和Content-Disposition
  723. // return ResponseEntity.ok()
  724. // .header("Content-Type", "application/octet-stream")
  725. // .header("Content-Disposition", "attachment; filename=\"" + fileName + "\"")
  726. // .body(stream);
  727. } catch (Exception e) {
  728. logger.error("文件下载失败: " + e.getMessage());
  729. }
  730. }
  731. @DeleteMapping("/delete/{fileName}")
  732. public void deleteFile(@PathVariable String fileName) {
  733. try {
  734. // minioUtil.remove(bucketName, fileName);
  735. } catch (Exception e) {
  736. logger.error("文件删除失败: " + e.getMessage());
  737. }
  738. }
  739. }