| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991 |
- package com.takai.web.controller.takaiai;
- import com.alibaba.fastjson2.JSONObject;
- import com.github.pagehelper.Page;
- import com.github.pagehelper.PageHelper;
- import com.takai.ai.domain.TakaiSysOss;
- import com.takai.ai.domain.dto.*;
- import com.takai.ai.domain.entity.*;
- import com.takai.ai.service.ITakaiAiService;
- import com.takai.ai.utils.MinioUtil;
- import com.takai.bigmodel.domain.entity.PageParams;
- import com.takai.common.annotation.Log;
- import com.takai.common.constant.HttpStatus;
- import com.takai.common.core.controller.BaseController;
- import com.takai.common.core.domain.AjaxResult;
- import com.takai.common.core.domain.R;
- import com.takai.common.core.domain.TreeStruct;
- import com.takai.common.core.domain.entity.SysDictData;
- import com.takai.common.core.domain.entity.SysUser;
- import com.takai.common.core.domain.model.LoginUser;
- import com.takai.common.core.page.TableDataInfo;
- import com.takai.common.enums.BusinessType;
- import com.takai.common.enums.ProjectTypeEnum;
- import com.takai.common.exception.ServiceException;
- import com.takai.common.utils.SecurityUtils;
- import com.takai.common.utils.poi.ExcelUtil;
- import com.takai.framework.web.service.SysPermissionService;
- import com.takai.system.domain.SysProject;
- import com.takai.system.domain.SysProjectTree;
- import com.takai.system.service.ISysDictDataService;
- import com.takai.system.service.ISysProjectService;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.MediaType;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.util.*;
- import java.util.concurrent.CompletableFuture;
- import java.util.stream.Collectors;
- @Slf4j
- @RestController
- @RequestMapping("/deepseek/api")
- public class TakaiAiController extends BaseController {
- @Autowired
- private ITakaiAiService takaiAisService;
- @Autowired
- private ISysDictDataService dictDataService;
- @Autowired
- private SysPermissionService permissionService;
- @Autowired
- private ISysProjectService sysProjectService;
- @Autowired
- private MinioUtil minioUtil;
- /**
- * 对话聊天
- *
- * @param response
- * @param request
- * @param sseParams
- * @return
- */
- @PostMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
- public SseEmitter chat(HttpServletResponse response, HttpServletRequest request, @RequestBody TakaiSseInfoParams sseParams)
- throws Exception {
- return takaiAisService.sseInvoke(sseParams);
- }
- @PostMapping("/async/completions")
- public AjaxResult asyncCompletions(@RequestBody TakaiCompletionsParams params) {
- return success(takaiAisService.asyncCompletions(params));
- }
- @PostMapping("/free/async/completions")
- public AjaxResult freeAsyncCompletions(@RequestBody TakaiCompletionsParams params) {
- return asyncCompletions(params);
- }
- /**
- * 应用列表
- *
- * @param params
- * @return
- */
- @PostMapping("/getApplicationList")
- public TableDataInfo getApplicationList(@RequestBody TakaiPageParams params) {
- TakaiApplication vo = setFlagParams(params.getUserId(), params.getTypeId(), params.getProjectId(), 1);
- PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
- vo.setName(params.getName());
- List<TakaiApplicationResult> list = takaiAisService.getApplicationList(vo);
- Page<TakaiApplicationResult> page = (Page<TakaiApplicationResult>) list;
- return getDataTableResultTotal(list, page.getTotal());
- }
- /**
- * 创建应用
- *
- * @param params
- * @return
- */
- @PostMapping("/createApplication")
- public AjaxResult addApplication(@RequestBody TakaiApplicationParams params) {
- SysUser user = new SysUser();
- user.setUserId(params.getUserId());
- Set<String> permissions = permissionService.getMenuPermission(user);
- int i = 0;
- if (permissions != null && permissions.size() > 0 && (permissions.contains("deepseek:application:role") || permissions.contains("*:*:*"))) {
- i = takaiAisService.createApplication(params, true);
- }else{
- i = takaiAisService.createApplication(params, false);
- }
- return AjaxResult.success(i);
- }
- /**
- * 查询应用详情
- *
- * @param appId
- * @return
- */
- @GetMapping("/selectApplication/{appId}")
- public AjaxResult selectApplication(@PathVariable String appId) {
- JSONObject application = takaiAisService.selectApplication(appId);
- return AjaxResult.success(application);
- }
- /**
- * 修改应用
- *
- * @param params
- * @param appId
- * @return
- */
- @PutMapping("/updateApplication/{appId}")
- public AjaxResult updateApplication(@RequestBody TakaiApplicationParams params, @PathVariable String appId) {
- SysUser user = new SysUser();
- user.setUserId(params.getUserId());
- Set<String> permissions = permissionService.getMenuPermission(user);
- int application = 0;
- if (permissions != null && permissions.size() > 0 && (permissions.contains("deepseek:application:role") || permissions.contains("*:*:*"))) {
- application = takaiAisService.updateApplication(params, appId, true);
- }else{
- application = takaiAisService.updateApplication(params, appId, false);
- }
- return AjaxResult.success(application);
- }
- /**
- * 删除应用
- *
- * @param appId
- * @return
- */
- @DeleteMapping("/delApplication/{appId}")
- public AjaxResult delApplication(@PathVariable String appId) {
- int application = takaiAisService.delApplication(appId);
- return AjaxResult.success(application);
- }
- /**
- * 首页
- *
- * @param params
- * @return
- */
- @PostMapping("/index")
- public AjaxResult index(@RequestBody PageParams params) {
- TakaiApplication vo = setFlagParams(params.getUserId(), params.getTypeId(), params.getProjectId(), 2);
- // 问答应用总数
- List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
- // 知识库总数
- List<TakaiKnowledge> knowledgeList = takaiAisService.queryKnowledgeList();
- Map<String, Object> map = new HashMap();
- map.put("applicationCount", appList.size());
- map.put("knowledgeCount", knowledgeList.size());
- return success(map);
- }
- /**
- * 获取知识库下拉列表
- *
- * @return
- */
- @GetMapping("/knowledgeList")
- public AjaxResult getKnowledgeList() {
- return success(takaiAisService.queryKnowledgeList());
- }
- /**
- * 知识库列表
- *
- * @param params
- * @return
- */
- @PostMapping("/getKnowledgeList")
- public TableDataInfo getKnowledgeList(@RequestBody TakaiPageParams params) {
- PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
- List<TakaiKnowledge> list = takaiAisService.queryKnowledgeList();
- Page<TakaiKnowledge> page = (Page<TakaiKnowledge>) list;
- return getDataTableResultTotal(list, page.getTotal());
- }
- /**
- * 创建知识库
- *
- * @param knowledge
- * @return
- */
- @PostMapping("/createKnowledge")
- public AjaxResult createKnowledge(@RequestBody TakaiKnowledgeParams knowledge) {
- int i = takaiAisService.createKnowledge(knowledge);
- return success(i);
- }
- /**
- * 知识库详情
- *
- * @param knowledgeId
- * @return
- */
- @GetMapping("/detailKnowledge/{knowledgeId}")
- public AjaxResult detailKnowledge(@PathVariable String knowledgeId) {
- TakaiKnowledge result = takaiAisService.detailKnowledge(knowledgeId);
- return success(result);
- }
- /**
- * 修改知识库
- *
- * @param knowledge
- * @param knowledgeId
- * @return
- */
- @PutMapping("/updateKnowledge/{knowledgeId}")
- public AjaxResult updateKnowledge(@RequestBody TakaiKnowledgeParams knowledge, @PathVariable String knowledgeId) {
- int i = takaiAisService.updateKnowledge(knowledge, knowledgeId);
- return success(i);
- }
- /**
- * 删除知识库
- *
- * @param knowledgeId
- * @return
- */
- @DeleteMapping("/delKnowledge/{knowledgeId}")
- public AjaxResult delKnowledge(@PathVariable String knowledgeId) {
- int i = takaiAisService.delKnowledge(knowledgeId);
- return success(i);
- }
- /**
- * 知识列表
- *
- * @param params
- * @return
- */
- @PostMapping("/documentList")
- public TableDataInfo documentList(@RequestBody TakaiDocumentParams params) {
- PageHelper.startPage(params.getPage(), params.getSize(), "").setReasonable(true);
- List<TakaiDocument> list = takaiAisService.documentList(params);
- Page<TakaiDocument> page = (Page<TakaiDocument>) list;
- return getDataTableResultTotal(list, page.getTotal());
- // SysUser user = new SysUser();
- // user.setUserId(Long.valueOf(params.getUserId()));
- // // 角色集合
- // Set<String> permissions = permissionService.getMenuPermission(user);
- // // admin 所有文件
- // if (permissions.contains("document:public") && permissions.contains("document:internal") && permissions.contains("document:confidential") && permissions.contains("document:topsecret")) {
- // params.setFileLevel("4");
- // }
- // // 项目经理 机密文件 + 所有项目下的内部文件 + 公开文件
- // else if (permissions.contains("public") && permissions.contains("internal") && permissions.contains("confidential")) {
- // params.setFileLevel("3");
- // }
- // // 普通用户 所属项目下的内部文件 + 公开文件
- // else if (permissions.contains("public") && permissions.contains("internal")) {
- // params.setFileLevel("2");
- // }
- // // 游客 只能浏览公开文件
- // else if (permissions.contains("public")){
- // params.setFileLevel("1");
- // }else{
- // params.setFileLevel("0"); // 没有权限
- // }
- // List<TakaiDocument> sTotal = takaiAisService.documentList(params);
- // PageHelper.startPage(params.getPage(), params.getSize(), "").setReasonable(true);
- // List<TakaiDocument> list = takaiAisService.documentList(params);
- // return getDataTableResultTotal(list, Long.valueOf(sTotal.size()));
- }
- /**
- * 知识详情
- *
- * @param documentId
- * @return
- */
- @GetMapping("/documentDetail/{documentId}")
- public AjaxResult documentDetail(@PathVariable String documentId) {
- return success(takaiAisService.documentDetail(documentId));
- }
- /**
- * 更新知识
- *
- * @param params
- * @param documentId
- * @return
- */
- @PutMapping("/updateDocument/{documentId}")
- public AjaxResult updateDocument(@RequestBody TakaiDocumentParams params, @PathVariable String documentId) {
- int i = takaiAisService.updateDocument(params, documentId);
- return success(i);
- }
- /**
- * 删除知识
- *
- * @param documentId
- * @return
- */
- @DeleteMapping("/delDocument/{documentId}")
- public AjaxResult delDocument(@PathVariable String documentId) {
- int i = takaiAisService.delDocument(documentId);
- return success(i);
- }
- /**
- * 删除知识
- *
- * @param documentId
- * @return
- */
- @DeleteMapping("/delUnfinishedDocument/{documentId}")
- public R<Integer> delUnfinishedDocument(@PathVariable String documentId) {
- int i = takaiAisService.delUnfinishedDocument(documentId);
- return R.ok(i);
- }
- /**
- * 上传知识文件
- *
- * @param files
- * @param knowledgeId
- * @return
- * @throws Exception
- */
- @PostMapping("/uploadDocument/{knowledgeId}") //@RequestPart DocumentParams documentParams,
- public AjaxResult uploadDocument(@RequestParam("files") MultipartFile[] files,
- @PathVariable String knowledgeId) throws Exception {
- try {
- // 1. 先同步上传文件到MinIO(IO操作,建议后续也异步,这里先保留)
- List<TakaiSysOss> ossList;
- try {
- ossList = minioUtil.uploadMultiple(files);
- if (ossList == null || ossList.isEmpty()) {
- log.error("MinIO上传文件为空,直接返回");
- return error("MinIO上传文件为空");
- }
- } catch (Exception e) {
- log.error("MinIO上传文件失败", e);
- return error("MinIO上传文件失败");
- }
- String updateBy = SecurityUtils.getLoginUser() == null ? "" : SecurityUtils.getLoginUser().getUserId();
- // 调用异步方法
- CompletableFuture<Integer> future = takaiAisService.uploadDocument(files, knowledgeId,ossList,updateBy);
- // 处理结果(非阻塞)
- future.whenComplete((successCount, ex) -> {
- if (ex != null) {
- log.error("上传文档异步任务失败", ex);
- } else {
- log.info("上传文档完成,成功处理{}个文件", successCount);
- // 可触发后续逻辑,比如通知前端
- }
- });
- return success(1);
- } catch (Exception e) {
- return error("上传文档失败");
- }
- }
- /**
- * python文档解析回调接口
- *
- * @param params
- * @return
- * @throws Exception
- */
- @PostMapping("/updateDocumentByPython") //@RequestPart DocumentParams documentParams,
- public R<Void> updateDocumentByPython(@RequestBody JkDocumentPythonParams params){
- takaiAisService.updateDocumentByPython(params);
- return R.ok();
- }
- /**
- * 上传切片图片
- *
- * @param files
- * @param knowledgeId
- * @return
- * @throws Exception
- */
- @PostMapping("/uploadSliceImage/{knowledgeId}/{documentId}")
- public AjaxResult uploadSliceImage(@RequestParam("files") MultipartFile[] files,
- @PathVariable String knowledgeId,
- @PathVariable String documentId) throws Exception {
- try {
- List<TakaiSliceImage> originTextList = takaiAisService.uploadSliceImage(files, knowledgeId, documentId);
- return success(originTextList);
- } catch (Exception e) {
- return error(e.getMessage());
- }
- }
- /**
- * 获取知识配置信息
- *
- * @param documentId
- * @return
- */
- @GetMapping("/documentSetting/{documentId}")
- public AjaxResult documentSetting(@PathVariable String documentId) {
- TakaiDocumentSettings json = takaiAisService.documentSetting(documentId);
- return success(json);
- }
- /**
- * 更新知识配置详情
- *
- * @param documentSetting
- * @param documentId
- * @return
- */
- @PutMapping("/updateDocumentSetting/{documentId}")
- public AjaxResult updateDocumentSetting(@RequestBody TakaiDocumentSettings documentSetting, @PathVariable String documentId) {
- int i = takaiAisService.updateDocumentSetting(documentSetting, documentId); // 更新知识配置信息
- return success(i);
- }
- /**
- * 获取切片列表
- *
- * @param params
- * @return
- */
- @PostMapping("/getSliceList")
- public TableDataInfo getDialogDetail(@RequestBody TakaiSliceParams params) {
- PageHelper.startPage(params.getPageNum(), params.getPageSize(), "").setReasonable(true);
- List<TakaiSliceInfo> sliceList = takaiAisService.selectByDocumentId(params.getDocument_id(), params.getText());
- Page<TakaiSliceInfo> page = (Page<TakaiSliceInfo>) sliceList;
- return getDataTableResultTotal(sliceList, page.getTotal());
- }
- /**
- * 删除切片
- *
- * @param sliceId
- * @param knowledgeId
- */
- @DeleteMapping("/deleteSlice/{sliceId}/{knowledgeId}/{documentId}")
- public AjaxResult deleteSlice(@PathVariable String sliceId, @PathVariable String knowledgeId, @PathVariable String documentId) {
- return success(takaiAisService.deleteSlice(sliceId, knowledgeId, documentId));
- }
- /**
- * 切片详情
- *
- * @param sliceId
- * @param knowledgeId
- * @return
- */
- @GetMapping("/getSliceDetail/{sliceId}/{knowledgeId}")
- public AjaxResult test(@PathVariable String sliceId, @PathVariable String knowledgeId) {
- JSONObject json = takaiAisService.getSliceDetail(sliceId, knowledgeId);
- return success(json);
- }
- /**
- * 更新切片信息
- *
- * @param params
- * @return
- */
- @PutMapping("/updateSliceInfo")
- public AjaxResult updateSliceInfo(@RequestBody TakaiSliceUpdateParams params) {
- return success(takaiAisService.updateSliceInfo(params));
- }
- /**
- * 获取聊天列表
- *
- * @param params
- * @return
- */
- @PostMapping("/chatHistory/list")
- public TableDataInfo dataExportList(@RequestBody TakaiPageParams params) {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- String userId = null;
- boolean isAdmin = false;
- if (loginUser != null) {
- userId = loginUser.getUserId();
- isAdmin = SecurityUtils.isAdmin(Long.valueOf(userId));
- }
- if(isAdmin) {
- userId = null;
- } else {
- userId = params.getUserId() == null ? userId : params.getUserId();
- }
- if (StringUtils.isNotBlank(params.getAppId())) {
- //获取应用聊天列表
- PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
- List<TakaiDialogRespDTO> list = takaiAisService.selectDialogListByAppId(params.getAppId(), userId);
- List<Object> result = takaiAisService.setDialogList(list);
- Page<TakaiDialogRespDTO> page = (Page<TakaiDialogRespDTO>) list;
- return getDataTableResultTotal(result, page.getTotal());
- } else {
- //获取所有列表
- PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
- List<TakaiDialogRespDTO> list = takaiAisService.selectDialogListByAppId(null, userId);
- List<Object> result = takaiAisService.setDialogList(list);
- Page<TakaiDialogRespDTO> page = (Page<TakaiDialogRespDTO>) list;
- return getDataTableResultTotal(result, page.getTotal());
- }
- }
- /**
- * 导出聊天记录
- *
- * @param response
- * @param id
- */
- @Log(title = "聊天详情", businessType = BusinessType.EXPORT)
- @PostMapping("/dialog/export/{id}")
- public void export(HttpServletResponse response, @PathVariable String id) {
- List<TakaiDialogRespDTO> dialogs = takaiAisService.exportExcel(id);
- ExcelUtil<TakaiDialogRespDTO> util = new ExcelUtil(TakaiDialogRespDTO.class);
- util.exportExcel(response, dialogs, "聊天记录");
- }
- /**
- * 应用列表
- *
- * @return
- */
- @GetMapping("/application/list")
- public AjaxResult applicationList() {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if(loginUser != null){
- TakaiApplication vo = setFlagParams(loginUser.getUserId(), null, null, 3);
- List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
- return success(appList);
- }else{
- TakaiApplication vo = setFlagParams(null, null, null, 3);
- List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
- return success(appList);
- }
- }
- /**
- * 管理后台应用列表
- * @return
- */
- @GetMapping("/application/list/{userId}")
- public AjaxResult adminApp(@PathVariable String userId) {
- TakaiApplication vo = setFlagParams(userId, null, null, 3);
- List<TakaiApplicationResult> appList = takaiAisService.getApplicationList(vo);
- return success(appList);
- }
- @GetMapping("/role/list")
- public AjaxResult roleApp() {
- List<TakaiApplicationResult> appList = takaiAisService.selectRoleApp();
- return success(appList);
- }
- /**
- * 保存聊天记录
- *
- * @param dialogReqDTO
- * @return
- */
- @PostMapping("/dialog/save")
- public AjaxResult saveDialog(@RequestBody TakaiDialogReqDTO dialogReqDTO) {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser != null) {
- dialogReqDTO.setUserId(loginUser.getUserId());
- }
- takaiAisService.saveDialog(dialogReqDTO);
- return success();
- }
- /**
- * 聊天集合
- *
- * @return
- */
- @GetMapping("/dialog/list/{appId}")
- public AjaxResult dialogList(@PathVariable String appId) {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- String userId = null;
- if (loginUser != null) {
- userId = loginUser.getUserId();
- }
- List<Object> dialogs = takaiAisService.getDialogList(appId, userId);
- return success(dialogs);
- }
- /**
- * 聊天详情
- *
- * @param dialogId
- * @return
- */
- @GetMapping("/dialog/detail/{dialogId}")
- public AjaxResult dialogDetail(@PathVariable String dialogId) {
- List<TakaiDialogRespDTO> detail = takaiAisService.getDialogDetail(dialogId);
- return success(detail);
- }
- /**
- * 删除聊天记录
- *
- * @param id
- * @return
- */
- @DeleteMapping("/dialog/del/{id}")
- public AjaxResult delDialog(@PathVariable String id) {
- takaiAisService.DelDialogDetail(id);
- return success();
- }
- /**
- * 聊天标题重命名
- *
- * @param dialogReqDTO
- * @return
- */
- @PutMapping("/dialog/update")
- public AjaxResult updateDialog(@RequestBody TakaiDialogReqDTO dialogReqDTO) {
- takaiAisService.updateDialog(dialogReqDTO);
- return success();
- }
- /**
- * 预设问题
- *
- * @param appId
- * @return
- */
- @GetMapping("/presets/{appId}")
- public AjaxResult presets(@PathVariable String appId) {
- List<TakaiQuestionDTO> list = takaiAisService.selectQuestionByAppId(appId);
- List<String> strList = new ArrayList();
- for (TakaiQuestionDTO vo : list) {
- strList.add(vo.getQuestion());
- }
- return success(strList);
- }
- /**
- * 预设问题
- *
- * @param appId
- * @return
- */
- @GetMapping("/free/presets/{appId}")
- public AjaxResult freePresets(@PathVariable String appId) {
- return presets(appId);
- }
- /**
- * 新增切片
- *
- * @param params
- * @return
- */
- @PostMapping("/add/slice")
- public AjaxResult addSlice(@RequestBody TakaiSliceUpdateParams params) {
- return success(takaiAisService.addSlice(params));
- }
- /**
- * 获取聊天切片列表
- *
- * @param params
- * @return
- */
- @PostMapping("/slicePage")
- public TableDataInfo dataExportList(@RequestBody SlicePageInfo params) {
- DocumentInfo chunkInfo = params.getChunk_info();
- List<ChunkList> chunkList = chunkInfo.getChunk_list();
- // 1. 先按 rerank_score 降序排序所有chunk
- List<ChunkList> sortedChunks = chunkList.stream()
- .sorted(Comparator.comparingDouble(
- (ChunkList s) -> Double.parseDouble(s.getRerank_score())
- ).reversed())
- .collect(Collectors.toList());
- // 2. 提取排序后的chunk_ids(此时已按分数排序)
- List<String> sortedChunkIds = sortedChunks.stream()
- .map(ChunkList::getChunk_id)
- .collect(Collectors.toList());
- int fromIndex = (params.getPageNum() - 1) * params.getPageSize();
- int toIndex = Math.min(fromIndex + params.getPageSize(), chunkList.size());
- List<String> ids = sortedChunkIds.subList(fromIndex, toIndex);
- PageHelper.startPage(params.getPageNum(), params.getPageSize(), "").setReasonable(true);
- List<SliceInfo> list = takaiAisService.slicePageInfoList(ids);
- list.forEach(sliceInfo -> {
- chunkList.forEach(chunk -> {
- if (sliceInfo.getSliceId().equals(chunk.getChunk_id())) {
- sliceInfo.setRerankScore(chunk.getRerank_score());
- sliceInfo.setChunkLength(chunk.getChunk_len());
- }
- });
- });
- List<SliceInfo> sliceList = list.stream()
- .sorted(Comparator.comparingDouble((SliceInfo s) -> Double.parseDouble(s.getRerankScore())).reversed())
- .collect(Collectors.toList());
- return getDataTableResultTotal(sliceList, sortedChunkIds.size());
- }
- /**
- * 获取聊天切片列表
- *
- * @param params
- * @return
- */
- @PostMapping("/free/slicePage")
- public TableDataInfo freeDataExportList(@RequestBody SlicePageInfo params) {
- return dataExportList(params);
- }
- @GetMapping("/slice/search/{id}")
- public AjaxResult searchSlice(@PathVariable String id) {
- return success(takaiAisService.searchSlice(id));
- }
- @GetMapping("/free/slice/search/{id}")
- public AjaxResult freeSearchSlice(@PathVariable String id) {
- return searchSlice(id);
- }
- /**
- *
- * 类型列表
- * @param dictType
- * @return
- */
- @GetMapping(value = "/{dictType}")
- public AjaxResult geDictInfo(@PathVariable String dictType) {
- SysDictData dictData = new SysDictData();
- dictData.setDictType(dictType);
- List<SysDictData> dictDataList = dictDataService.selectDictDataList(dictData);
- return success(dictDataList);
- }
- /**
- *
- * 类型列表
- * @param
- * @return
- */
- @GetMapping(value = "/projectTree")
- public AjaxResult getPorjectTree() {
- SysDictData dictData = new SysDictData();
- dictData.setDictType("project_type");
- List<SysDictData> dictDataList = dictDataService.selectDictDataList(dictData);
- List<SysProject> projectList = sysProjectService.selectSysProjectList(null);
- logger.info("getPorjectTree:projectList:"+projectList.size());
- List<TreeStruct> projectTreeList = new ArrayList<>();
- for(SysDictData dict : dictDataList) {
- logger.info("getPorjectTree:dict:"+dict);
- String clientId;
- if(ProjectTypeEnum.HJL.getCode().equals(String.valueOf(dict.getDictValue()))) {
- clientId = ProjectTypeEnum.HJL.getClientId();
- } else if (ProjectTypeEnum.HXG.getCode().equals(String.valueOf(dict.getDictValue()))) {
- clientId = ProjectTypeEnum.HXG.getClientId();
- } else {
- clientId = "";
- }
- logger.info("getPorjectTree:clientId:"+clientId);
- TreeStruct projectType = new TreeStruct();
- projectType.setValue(clientId);
- projectType.setLabel(dict.getDictLabel());
- List<SysProject> filteredProjects = projectList.stream()
- .filter(project -> clientId.equals(project.getSourceFrom()))
- .collect(Collectors.toList());
- List<TreeStruct> children = new ArrayList<>();
- for(SysProject project : filteredProjects) {
- TreeStruct child = new TreeStruct();
- child.setValue(String.valueOf(project.getProjectId()));
- child.setLabel(project.getProjectName());
- children.add(child);
- }
- projectType.setChildren(children);
- projectTreeList.add(projectType);
- }
- return success(projectTreeList);
- }
- /**
- * 应用类型列表
- * @return
- */
- @GetMapping("/appType")
- public AjaxResult appType() {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser != null) {
- SysDictData dictData = new SysDictData();
- dictData.setDictType("app_type");
- List<SysDictData> dictDataList = dictDataService.selectDictDataList(dictData);
- List<Object> list = takaiAisService.searchAppTypeGroupList(dictDataList, loginUser.getUserId());
- return success(list);
- } else {
- throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
- }
- // return null;
- }
- /**
- * 审核列表
- * @param params
- * @return
- */
- @PostMapping("/app/audit/list")
- public TableDataInfo documentAuditList(@RequestBody TakaiApplicationParams params) {
- startPage();
- List<TakaiApplication> list = takaiAisService.applicationListByApprover(params);
- return getDataTable(list);
- }
- /**
- * 开始审核
- * @return
- */
- @PutMapping(value = "/audit/{appId}/{userId}")
- public AjaxResult startAudit(@PathVariable String appId, @PathVariable String userId){
- return success(takaiAisService.startAudit(appId, userId));
- }
- /**
- * 审核
- * @param params
- * @param appId
- * @return
- */
- @PutMapping("/updateDocumentAudit/{appId}")
- public AjaxResult updateAuditApplication(@RequestBody TakaiApplicationParams params, @PathVariable String appId) {
- int i = takaiAisService.updateAuditApplication(params, appId);
- return success(i);
- }
- /**
- * 根据登录用户获取项目下的应用列表
- * @return
- */
- @GetMapping("/project/app")//@RequestBody TakaiPageParams params
- public AjaxResult appFlag() {
- // TakaiApplication vo = setFlagParams(params.getUserId());
- // vo.setApprover(params.getUserId());
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if(loginUser != null){
- TakaiApplication vo = setFlagParams(loginUser.getUserId(), null, null, 1);
- List<TakaiApplicationResult> s = takaiAisService.getApplicationList(vo);
- return success(takaiAisService.getChatAppList(s, loginUser.getUserId()));
- }else{
- return success(null);
- }
- }
- /**
- * 收藏列表
- * @param userId
- * @return
- */
- @GetMapping("/app/collect/list/{userId}")
- public AjaxResult appCollectList(@PathVariable String userId) {
- List<String> list = takaiAisService.selectAppCollectList(userId);
- return success(list);
- }
- /**
- * 收藏
- * @param appCollect
- * @return
- */
- @PostMapping("/app/collect")
- public AjaxResult appCollect(@RequestBody AppCollect appCollect) {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if(loginUser != null){
- appCollect.setUserId(loginUser.getUserId());
- return success(takaiAisService.insertAppCollect(appCollect));
- }else {
- return success(null);
- }
- }
- /**
- * 取消收藏
- * @param appId
- * @return
- */
- @DeleteMapping("/app/collect/{appId}")
- public AjaxResult appCollectDel(@PathVariable String appId) {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if(loginUser != null){
- return success(takaiAisService.deleteAppCollect(loginUser.getUserId(), appId));
- }else{
- return success(null);
- }
- }
- private TakaiApplication setFlagParams(String userId, String typeId, String projectId, int i) {
- if(i == 3){
- return returnParams(userId, typeId, projectId, "0");
- }else{
- // 角色集合
- SysUser user = new SysUser();
- user.setUserId(userId);
- Set<String> permissions = permissionService.getMenuPermission(user);
- if (permissions.contains("deepseek:application:create") || permissions.contains("deepseek:application:update")) {
- return returnParams(userId, typeId, projectId, "1");
- }else{
- return returnParams(userId, typeId, projectId, "0");
- }
- }
- }
- private TakaiApplication returnParams(String userId, String typeId, String projectId, String flag) {
- return TakaiApplication.builder().approver(userId == null ? null : userId)
- .typeId(typeId == null ? null : Long.valueOf(typeId))
- .projectId(projectId == null ? null : projectId)
- .flag(flag).build();
- }
- @GetMapping("/test")
- public AjaxResult test() {
- TakaiMediaReplacement vo = takaiAisService.getTakaiMediaReplacement();
- return success(vo);
- }
- @GetMapping("/download/{fileName}")
- public void downloadFile(@PathVariable String fileName) {
- try {
- // InputStream stream = minioUtil.download(bucketName, fileName);
- // 这里简化处理,实际应该设置正确的Content-Type和Content-Disposition
- // return ResponseEntity.ok()
- // .header("Content-Type", "application/octet-stream")
- // .header("Content-Disposition", "attachment; filename=\"" + fileName + "\"")
- // .body(stream);
- } catch (Exception e) {
- logger.error("文件下载失败: " + e.getMessage());
- }
- }
- @DeleteMapping("/delete/{fileName}")
- public void deleteFile(@PathVariable String fileName) {
- try {
- // minioUtil.remove(bucketName, fileName);
- } catch (Exception e) {
- logger.error("文件删除失败: " + e.getMessage());
- }
- }
- }
|