// ROUTES FOR OUR APIselectClassStudent // ============================================================================= const express = require("express"); const request = require("request"); const bcrypt = require("bcryptjs"); const router = express.Router(); // get an instance of the express Router const querystring = require("querystring"); var mysql = require("./mysql"); // const _mysqlLabor = ["183.36.25.93", "pbl"]; //edu數據庫信息 // const _mysqluser = ["183.36.25.93", "cocorobouser"]; //用户数据库信息 // const _getmysqlLabor = ["123.58.32.151", "pbl"]; //edu數據庫信息f // const _getmysqluser = ["123.58.32.151", "cocorobouser"]; //edu數據庫信息 const _mysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息 const _mysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息 // const _getmysqlLabor = ["172.16.12.5", "pbl"]; //edu數據庫信息 // const _getmysqluser = ["172.16.12.5", "cocorobouser"]; //edu數據庫信息 const _getmysqlLabor2 = ["172.16.12.7", "pbl"]; //edu數據庫信息 const _getmysqlLabor = ["172.16.12.7", "pbl"]; //edu數據庫信息 const _getmysqluser = ["172.16.12.7", "cocorobouser"]; //edu數據庫信息 const _localhost = ["127.0.0.1", "pbl"]; //edu數據庫信息 const crypto = require("crypto"); const https = require("https"); const { Pool } = require('pg'); const axios = require('axios'); const multer = require("multer"); const loginHandler = require('./login'); // 确保路径正确 const { r2rClient } = require("r2r-js"); const client = new r2rClient("https://r2rserver.cocorobo.cn/"); // 配置 multer 存储选项 const storage = multer.diskStorage({ destination: function (req, file, cb) { req.setEncoding('utf-8'); cb(null, 'uploads/'); // 文件上传目录 }, filename: function (req, file, cb) { req.setEncoding('utf-8'); // 使用 Buffer 处理文件名,确保编码正确 const fileExtension = file.originalname.split('.').pop(); // 获取文件后缀 const fileNameWithoutExt = Buffer.from(file.originalname.slice(0, -(fileExtension.length + 1)), 'latin1').toString('utf8'); // 转换编码 cb(null, fileNameWithoutExt + '-' + Date.now() + '.' + fileExtension); // 使用时间戳和原始文件名 } }); const upload = multer({ storage: storage, limits: { fileSize: 100 * 1024 * 1024 // 100MB } }); router.route("/login").all(async (req, res, next) => { loginHandler(req, res) }); router.route("/logout").all(async (req, res, next) => { try { const response = await client.users.logout(); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //获取文档列表 router.route("/getDocument").all(async (req, res, next) => { try { const response = await client.documents.list({ limit: 10, offset: 0, }); console.log(response); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //列出文档块 router.route("/listChunks").all(async (req, res, next) => { try { const response = await client.documents.listChunks({ id: "5111165f-965c-5d61-89e3-1f74b0178032", }); console.log(response); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //提取实体和关系 router.route("/extract").all(async (req, res, next) => { try { const response = await client.documents.extract({ id: "5111165f-965c-5d61-89e3-1f74b0178032" }) console.log(response); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); router.route("/selectUser").all((req, res, next) => { var json = queryString(req.url); getmysql(req, res, "selectUser", json["userid"]); }); // 文件上传接口 router.post('/upload', upload.single('file'), async (req, res) => { req.setEncoding('utf-8') try { console.log(req.file); // 打印上传的文件信息 console.log(`File path: uploads/${req.file.filename}`); const path = require('path'); const filePath = path.resolve(__dirname, 'uploads', req.file.filename); console.log(filePath); let filename = Buffer.from(req.file.originalname, 'latin1').toString('utf8'); const fs = require('fs'); const file = new File([fs.readFileSync('./uploads/q-1739170522767.doc')], filename, { type: req.file.mimetype }); const response = await client.documents.create({ file: file, metadata: { title: filename } }); console.log(response); res.status(200).json({ message: 'File uploaded successfully', file: req.file }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //获取文档列表 router.route("/getFile").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFile"); mysql.usselect(p, async function (ret) { let data = ret[0]; // const array = data.map(item => item.documentid); const array = data.map(item => item.documentid); try { const response = await client.documents.list({ ids: array }); // const response = await client.collections.listDocuments({ id: req.body[0].folderid }); // const response = await client.collections.listDocuments({ collection_ids: req.body[0].folderid.split(",") }); // console.log(response); let data2 = response.results.map(doc => { doc.documentid = doc.id; delete doc.id; return doc; }); // console.log(data2); // 合并data和data2,根据documentid const mergedData = data.map(item => { const correspondingDoc = data2.find(doc => doc.documentid === item.documentid); return { ...item, ...correspondingDoc }; }); res.status(200).json({ result: mergedData }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); } }); //获取文档列表 router.route("/getFileD").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileD"); mysql.usselect(p, async function (ret) { let data = ret[0]; // const array = data.map(item => item.documentid); const array = data.map(item => item.documentid); try { const response = await client.documents.list({ ids: array }); // const response = await client.collections.listDocuments({ id: req.body[0].folderid }); // const response = await client.collections.listDocuments({ collection_ids: req.body[0].folderid.split(",") }); // console.log(response); let data2 = response.results.map(doc => { doc.documentid = doc.id; delete doc.id; return doc; }); // console.log(data2); // 合并data和data2,根据documentid const mergedData = data.map(item => { const correspondingDoc = data2.find(doc => doc.documentid === item.documentid); return { ...item, ...correspondingDoc }; }); res.status(200).json({ result: mergedData }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); } }); //获取文档列表 router.route("/getFileD2").all(async (req, res, next) => { //mode的处理 if (req.body) { p = [req.body.uid, req.body.folderid, req.body.n, req.body.page, req.body.num]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileD"); mysql.usselect(p, async function (ret) { let data = ret[0]; // const array = data.map(item => item.documentid); const array = data.map(item => item.documentid); try { const response = await client.documents.list({ ids: array }); // const response = await client.collections.listDocuments({ id: req.body[0].folderid }); // const response = await client.collections.listDocuments({ collection_ids: req.body[0].folderid.split(",") }); // console.log(response); let data2 = response.results.map(doc => { doc.documentid = doc.id; delete doc.id; return doc; }); // console.log(data2); // 合并data和data2,根据documentid const mergedData = data.map(item => { const correspondingDoc = data2.find(doc => doc.documentid === item.documentid); return { ...item, ...correspondingDoc }; }); res.status(200).json({ result: mergedData }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); } }); //获取文档列表 router.route("/getFileOpen").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileOpen"); mysql.usselect(p, async function (ret) { let data = ret[0]; let user = ret[1]; // const array = data.map(item => item.documentid); const array = data.map(item => item.documentid); try { const response = await client.documents.list({ ids: array }); let data2 = response.results.map(doc => { doc.documentid = doc.id; delete doc.id; return doc; }); // 合并data和data2,根据documentid const mergedData = data.map(item => { const correspondingDoc = data2.find(doc => doc.documentid === item.documentid); return { ...item, ...correspondingDoc }; }); res.status(200).json({ result: mergedData, user: user }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); } }); //获取文档列表2 router.route("/getFileP").all(async (req, res, next) => { //mode的处理 if (req.body) { p = [req.body.uid, req.body.folderid, req.body.n, req.body.page, req.body.num]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFile"); mysql.usselect(p, async function (ret) { let data = ret[0]; // const array = data.map(item => item.documentid); try { // const response = await client.documents.list({ collection_ids: [req.body.folderid] }); const response = await client.collections.listDocuments({ id: req.body[0].folderid }); // console.log(response); let data2 = response.results.map(doc => { doc.documentid = doc.id; delete doc.id; return doc; }); // 合并data和data2,根据documentid const mergedData = data.map(item => { const correspondingDoc = data2.find(doc => doc.documentid === item.documentid); return { ...item, ...correspondingDoc }; }); res.status(200).json({ result: mergedData }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); } }); //获取能关联的文件 router.route("/getFile2").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFile2"); mysql.usselect(p, async function (ret) { let data = ret[0]; const array = data.map(item => item.documentid); try { const response = await client.documents.list({ ids: array }); // const response = await client.documents.list({ collection_ids: [req.body[0].folderid] }); // console.log(response); let data2 = response.results.map(doc => { doc.documentid = doc.id; delete doc.id; return doc; }); // 合并data和data2,根据documentid const mergedData = data.map(item => { const correspondingDoc = data2.find(doc => doc.documentid === item.documentid); return { ...item, ...correspondingDoc }; }); res.status(200).json({ result: mergedData }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); } }); //添加文件夹 router.route("/addFolder").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { try { const response = await client.collections.create({ name: decodeURIComponent(req.body[0].n), description: decodeURIComponent(req.body[0].fd) }); p = [...Object.values(req.body[0]), response.results.id]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addFolder"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //添加文件夹 router.route("/addFolderP").all(async (req, res, next) => { //mode的处理 if (req.body) { try { const response = await client.collections.create({ name: decodeURIComponent(req.body.n), description: decodeURIComponent(req.body.fd) }); p = [req.body.n, req.body.fd, req.body.uid, req.body.im , response.results.id]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addFolder"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //删除文件夹 router.route("/deleteFolder").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { try { const folderids = decodeURIComponent(req.body[0].folderids).split(","); const ids = req.body[0].ids; // 并行处理文件夹下的文件删除和文件夹删除 await Promise.all(folderids.map(async folderid => { const files = await client.collections.listDocuments({ id: folderid, offset: 0, limit: 999 }); await Promise.all(files.results.map(file => client.collections.removeDocument({ id: folderid, documentId: file.id }) )); })); await Promise.all(folderids.map(folderid => client.collections.delete({ id: folderid }))); const params = [_mysqlLabor[0], _mysqlLabor[1], "deleteFolder", ids]; mysql.usselect(params, async function (ret) { res.end(JSON.stringify(ret)); }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //修改文件夹 router.route("/updateFolder").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { try { const { folderid, ...folderData } = req.body[0]; // 解构赋值,排除folderid const response = await client.collections.update({ id: folderid, name: decodeURIComponent(req.body[0].n), description: decodeURIComponent(req.body[0].d) }); p = Object.values(folderData); // 获取剩余属性的键 p.unshift(_mysqlLabor[0], _mysqlLabor[1], "updateFolder2"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //修改文件夹 router.route("/updateFolder2").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { try { const { folderid, ...folderData } = req.body[0]; // 解构赋值,排除folderid const response = await client.collections.update({ id: folderid, name: decodeURIComponent(req.body[0].n), description: decodeURIComponent(req.body[0].d) }); p = Object.values(folderData); // 获取剩余属性的键 p.unshift(_mysqlLabor[0], _mysqlLabor[1], "updateFolder3"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //移除文件 router.route("/removeFile").all(async (req, res, next) => { if (req.body[0]) { let documentids = decodeURIComponent(req.body[0].documentids).split(","); let folderid = req.body[0].folderid; let ids = req.body[0].ids; // 使用 Promise.all 确保所有删除操作都被执行 const removePromises = documentids.map(documentid => client.collections.removeDocument({ id: folderid, documentId: documentid }) ); // 不管client.documents报错没有也要执行removeFile Promise.all(removePromises).catch(error => { console.error("移除文件时发生错误:", error); }); p = [ids, folderid]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "removeFile"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); } }); //移入文件 router.route("/moveFile").all(async (req, res, next) => { if (req.body[0]) { try { let documentids = decodeURIComponent(req.body[0].documentids).split(",") let folderid = req.body[0].folderid let ids = decodeURIComponent(req.body[0].ids).split(",") // 使用 Promise.all 确保所有添加操作都被执行 await Promise.all(documentids.map(documentid => client.collections.addDocument({ id: folderid, documentId: documentid }).catch(error => { console.error("移动文件时发生错误:", error); }) )); for (const id of ids) { p = [id, folderid]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "moveFile"); await mysql.usselect(p, async function (ret) { }); } res.status(200).json({ messages: "移动成功" }); } catch (error) { // 这里不返回错误,确保deleteFile执行完 console.error("处理过程中发生错误:", error); } } }); //删除文件 router.route("/deleteFile").all(async (req, res, next) => { if (req.body[0]) { let documentids = decodeURIComponent(req.body[0].documentids).split(","); let ids = req.body[0].ids; // 使用 Promise.all 确保所有删除操作都被执行 Promise.all(documentids.map(documentid => client.documents.delete({ id: documentid }).catch(error => { console.error("删除文件时发生错误:", error); }) )); p = [ids]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "deleteFile"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); } }); //删除文件 router.route("/deleteFileByFilter").all(async (req, res, next) => { if (req.body[0]) { let documentids = decodeURIComponent(req.body[0].documentids).split(","); let ids = req.body[0].ids; client.documents.deleteByFilter({ filters: {"document_id": { "$in": documentids }} }).then(() => { console.log("文件删除成功"); }).catch(error => { console.error("删除文件时发生错误:", error); }) p = [ids]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "deleteFile"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); } }); router.route("/getFolder").all((req, res, next) => { getmysql2(req, res, "getFolder", req.body.uid); }); router.route("/getFolder2").all((req, res, next) => { var json = queryString(req.url); getmysql2(req, res, "getFolder", json['uid']); }); router.route("/getFolderPage").all((req, res, next) => { getmysql2(req, res, "getFolderPage2", req.body[0].uid, req.body[0].n, req.body[0].sub, req.body[0].class, req.body[0].page, req.body[0].num); }); router.route("/getFolderPage3").all((req, res, next) => { getmysql2(req, res, "getFolderPage3", req.body[0].uid, req.body[0].n, req.body[0].sub, req.body[0].class, req.body[0].tag, req.body[0].page, req.body[0].num); }); router.route("/getFolderPage32").all((req, res, next) => { var json = queryString(req.url); getmysql2(req, res, "getFolderPage3", json['uid'], json['n'], json['sub'], json['class'], json['tag'], json['page'], json["num"]); }); router.route("/getFolderPageOpen").all((req, res, next) => { getmysql2(req, res, "getFolderPageOpen", req.body[0].uid, req.body[0].n, req.body[0].sub, req.body[0].class, req.body[0].tag, req.body[0].page, req.body[0].num); }); router.route("/haveFile").all((req, res, next) => { postmysql(req, res, "haveFile"); }); router.route("/haveFolder").all((req, res, next) => { postmysql(req, res, "haveFolder"); }); //search文件 router.route("/searchFile").all(async (req, res, next) => { if (req.body) { try { let filters = {} if (req.body.type == 1) { filters = { "document_id": { "$in": req.body.ids } } } else if (req.body.type == 2) { filters = { "collection_ids": { "$in": req.body.ids } } } const response = await client.retrieval.search({ query: req.body.query, search_settings: { filters: filters, useSemanticSearch: true, chunkSettings: { limit: req.body.limit ? req.body.limit : 10, enabled: true }, } }); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //提取文件实体 router.route("/extractFile").all(async (req, res, next) => { if (req.body) { try { const response = client.documents.extract({ id: req.body.id }) res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //添加上传好的知识库文件 router.route("/addFile").all((req, res, next) => { getmysql2(req, res, "add_file", req.body.n, req.body.did, req.body.uid, req.body.fid, req.body.mofid); }) //获取文件详情 router.route("/getFileDetail").all(async (req, res, next) => { if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getFileDetail"); mysql.usselect(p, async function (ret) { let data = ret[0][0]; // const array = data.map(item => item.documentid); try { const response = await client.documents.list({ ids: [req.body[0].documentId] }); // console.log(response); let data2 = response.results[0] // 合并data和data2,根据documentid const mergedData = { ...data, ...data2 }; res.status(200).json({ result: mergedData }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); } }); //获取切片 router.route("/getChunks").all(async (req, res, next) => { if (req.body[0]) { try { const { page = 1, limit = 10, documentId } = req.body[0]; const offset = (page - 1) * limit; const response = await client.documents.listChunks({ id: documentId, includeVectors: false, offset, limit, }); res.status(200).json({ result: response }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //获取实体 router.route("/getEntities").all(async (req, res, next) => { if (req.body[0]) { try { const { page = 1, limit = 10, documentId } = req.body[0]; const offset = (page - 1) * limit; const response = await client.documents.listEntities({ id: documentId, includeVectors: false, offset, limit, }); res.status(200).json({ result: response }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //获取关系 router.route("/getRelationships").all(async (req, res, next) => { if (req.body[0]) { try { const { page = 1, limit = 10, documentId } = req.body[0]; const offset = (page - 1) * limit; const response = await client.documents.listRelationships({ id: documentId, includeVectors: false, offset, limit, }); res.status(200).json({ result: response }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //获取实体和关系 router.route("/getEntitiesAndRelationships").all(async (req, res, next) => { if (req.body[0]) { try { const { documentId } = req.body[0]; const offset = (page - 1) * limit; const response = await client.documents.listEntities({ id: documentId, includeVectors: false, }); const response2 = await client.documents.listRelationships({ id: documentId, includeVectors: false, }); res.status(200).json({ Entities: response, Relationships: response2 }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //提取功能 router.route("/extractFile2").all(async (req, res, next) => { try { const response = await client.documents.extract({ id: req.body[0].documentid }); console.log(response); res.status(200).json({ result: response.results }); } catch (error) { res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } }); //复制文件夹 router.route("/copyFolder").all(async (req, res, next) => { if (req.body[0]) { const response = await client.collections.create({ name: decodeURIComponent(req.body[0].n), description: decodeURIComponent(req.body[0].fd) }); let folderid = response.results.id; p2 = [req.body[0].folderid] p2.unshift(_mysqlLabor[0], _mysqlLabor[1], "selectFolderFile"); mysql.usselect(p2, async function (ret2) { let file = ret2[0] if (file.length) { let documentids = file.map(item => item.documentid); // 使用 Promise.all 确保所有添加操作都被执行 await Promise.all(documentids.map(documentid => client.collections.addDocument({ id: folderid, documentId: documentid }).catch(error => { console.error("移动文件时发生错误:", error); }) )); } let ids = file.map(item => item.fileid); console.log(ids); p = [req.body[0].n, req.body[0].fd, req.body[0].uid, 2, folderid, req.body[0].folderid, ids.join(",")]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addFolder2"); mysql.usselect(p, async function (ret) { res.end(JSON.stringify(ret)); }); }); } }); // 下载文件功能 router.route("/downloadFile").all(async (req, res, next) => { var json = queryString(req.url); let params = { documentid: (json && json['documentid'] || req.body[0].documentid), filename: (json && json['filename'] || req.body[0].filename), }; try { const response = await client.documents.download({ id: params.documentid }); console.log(response); // 根据response的类型设置Content-Type const contentType = response.type || 'application/octet-stream'; res.setHeader('Content-Type', contentType); res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(params.filename)}"`); // 直接发送blob数据 res.send(Buffer.from(await response.arrayBuffer())); } catch (error) { console.error("下载文件时发生错误:", error); res.status(500).json({ error: error instanceof Error ? error.message : "发生错误" }); } }); // 下载文件功能 router.route("/downloadFile2").all(async (req, res, next) => { var json = queryString(req.url); let params = { documentid: (json && json['documentid'] || req.body[0].documentid), filename: (json && json['filename'] || req.body[0].filename), }; try { const response = await client.documents.download({ id: params.documentid }); console.log(response); // 直接返回blob数据 res.setHeader('Content-Type', response.type || 'application/octet-stream'); res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(params.filename)}"`); const buffer = Buffer.from(await response.arrayBuffer()); res.send(buffer); // 发送blob数据 } catch (error) { console.error("下载文件时发生错误:", error); res.status(500).json({ error: error instanceof Error ? error.message : "发生错误" }); } }); //召回测试 router.route("/ragFolder").all(async (req, res, next) => { let reqJson = req.body[0] if (reqJson) { reqJson.query = decodeURIComponent(reqJson.query) try { let filters = {} if (reqJson.type == 1) { filters = { "document_id": { "$in": reqJson.ids.split(",") } } } else if (reqJson.type == 2) { filters = { "collection_ids": { "$in": reqJson.ids.split(",") } } } else if (reqJson.type == 3) { filters = { "collection_ids": { "$eq": reqJson.ids } } } console.log(111); const response = await client.retrieval.search({ query: reqJson.query, // searchMode: reqJson.useType == 1 ? 'basic' : reqJson.useType == 2 ? 'custom' : 'advanced', // searchMode: 'basic', searchSettings: { useHybridSearch: reqJson.useType == 3, useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, useFullTextSearch: reqJson.useType == 2 || reqJson.useType == 3, hybrid_settings: { fullTextWeight: reqJson.fullTextWeight ? reqJson.fullTextWeight : 1, semanticWeight: reqJson.semanticWeight ? reqJson.semanticWeight : 5, }, filters: filters, limit: reqJson.limit ? reqJson.limit : 100, }, ragGenerationConfig: { stream: false, temperature: reqJson.temperature ? reqJson.temperature : 0, maxTokens: reqJson.tokens ? reqJson.tokens : 5000 } }); // res.status(200).json({ result: response.results }); p = [reqJson.userid, reqJson.ids, encodeURIComponent(JSON.stringify(reqJson)), encodeURIComponent(JSON.stringify(response.results))]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addRagData"); mysql.usselect(p, async function (ret) { res.status(200).json({ result: response.results }); }); } catch (error) { console.log(error); res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //召回测试 router.route("/searchFolder").all(async (req, res, next) => { let reqJson = req.body[0] if (reqJson) { try { let filters = {} let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : []; let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : []; filters = { "$or": [ { "collection_ids": { "$in": folderids } }, { "document_id": { "$in": documentids } } ] }; let params = { query: reqJson.query, searchSettings: { useHybridSearch: reqJson.useType == 3, useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, hybrid_settings: { fullTextWeight: reqJson.fullTextWeight ? reqJson.fullTextWeight : 1, semanticWeight: reqJson.semanticWeight ? reqJson.semanticWeight : 5, }, filters: filters, limit: reqJson.limit ? reqJson.limit : 100, }, ragGenerationConfig: { stream: false, temperature: reqJson.temperature ? reqJson.temperature : 0, maxTokens: reqJson.tokens ? reqJson.tokens : 5000 } } // console.log(params); const response = await client.retrieval.search(params); res.status(200).json({ result: response.results }); } catch (error) { console.log(error); res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //召回测试 router.route("/searchFolder2").all(async (req, res, next) => { let reqJson = req.body if (reqJson) { try { let filters = {} let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : []; let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : []; filters = { "$or": [ { "collection_ids": { "$in": folderids } }, { "document_id": { "$in": documentids } } ] }; let params = { query: reqJson.query, searchSettings: { useHybridSearch: reqJson.useType == 3, useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, hybrid_settings: { fullTextWeight: reqJson.fullTextWeight ? reqJson.fullTextWeight : 1, semanticWeight: reqJson.semanticWeight ? reqJson.semanticWeight : 5, }, filters: filters, limit: reqJson.limit ? reqJson.limit : 100, }, ragGenerationConfig: { stream: false, temperature: reqJson.temperature ? reqJson.temperature : 0, maxTokens: reqJson.tokens ? reqJson.tokens : 5000 } } // console.log(params); const response = await client.retrieval.search(params); res.status(200).json({ result: response.results }); } catch (error) { console.log(error); res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //召回测试 router.route("/searchFolder3").all(async (req, res, next) => { let reqJson = req.body[0] if (reqJson) { reqJson.query = decodeURIComponent(reqJson.query) try { let filters = {} let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : []; let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : []; filters = { "$or": [ { "collection_ids": { "$in": folderids } }, { "document_id": { "$in": documentids } } ] }; let params = { query: reqJson.query, searchSettings: { useHybridSearch: reqJson.useType == 3, useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, hybrid_settings: { fullTextWeight: reqJson.fullTextWeight, semanticWeight: reqJson.semanticWeight, }, filters: filters, limit: reqJson.limit ? reqJson.limit : 100, }, ragGenerationConfig: { stream: false, temperature: reqJson.temperature ? reqJson.temperature : 0, maxTokens: reqJson.tokens ? reqJson.tokens : 5000 } } // console.log(params); const response = await client.retrieval.search(params); p = [reqJson.userid, reqJson.folderids, encodeURIComponent(JSON.stringify(reqJson)), encodeURIComponent(JSON.stringify(response.results))]; p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addRagData"); mysql.usselect(p, async function (ret) { res.status(200).json({ result: response.results }); }); } catch (error) { console.log(error); res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //召回测试 router.route("/searchFolder32").all(async (req, res, next) => { let reqJson = req.body[0] if (reqJson) { reqJson.query = decodeURIComponent(reqJson.query) try { let filters = {} let documentids = reqJson.documentids ? decodeURIComponent(reqJson.documentids).split(",").filter(id => id) : []; let folderids = reqJson.folderids ? decodeURIComponent(reqJson.folderids).split(",").filter(id => id) : []; filters = { "$or": [ { "collection_ids": { "$in": folderids } }, { "document_id": { "$in": documentids } } ] }; let params = { query: reqJson.query, searchSettings: { useHybridSearch: reqJson.useType == 3, useSemanticSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, useFullTextSearch: reqJson.useType == 1 || reqJson.useType == 2 || reqJson.useType == 3, hybrid_settings: { fullTextWeight: reqJson.fullTextWeight, semanticWeight: reqJson.semanticWeight, }, filters: filters, limit: reqJson.limit ? reqJson.limit : 100, }, ragGenerationConfig: { stream: false, temperature: reqJson.temperature ? reqJson.temperature : 0, maxTokens: reqJson.tokens ? reqJson.tokens : 5000 } } // console.log(params); const response = await client.retrieval.search(params); res.status(200).json({ result: response.results }); // p = [reqJson.userid, reqJson.folderids, encodeURIComponent(JSON.stringify(reqJson)), encodeURIComponent(JSON.stringify(response.results))]; // p.unshift(_mysqlLabor[0], _mysqlLabor[1], "addRagData"); // mysql.usselect(p, async function (ret) { // }); } catch (error) { console.log(error); res.status(500).json({ error: error instanceof Error ? error.message : "An error occurred" }); } } }); //获取召回测试数据 router.route("/getRagData").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "getRagData"); mysql.usselect(p, async function (ret) { res.status(200).json(ret); }); } }); //删除召回测试数据 router.route("/delRagData").all(async (req, res, next) => { //mode的处理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], "delRagData"); mysql.usselect(p, async function (ret) { res.status(200).json(ret); }); } }); function generateAPIKey(username) { let timeStamp = new Date().getTime(); let hashStr = timeStamp + username; let digest = crypto .createHash("sha256") .update(hashStr, "utf8") .digest("hex"); return digest; } queryString = function (url) { var a = url.split("?"); var json = querystring.parse(a[1]); return json; }; //post存儲過程處理 postmysql = function (req, res, functionname) { //mode的處理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); } }; //post存儲過程處理 postmysql2 = function (req, res, functionname) { //mode的處理 if (req.body) { p = Object.values(req.body)[0].split(","); p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); } }; //post存儲過程處理 postmysql3 = function (req, res, functionname) { //mode的處理 if (req.body) { console.log(req); p = Object.values(req.body); p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); } }; //get獲取數據庫信息 getmysql = function (req, res, functionname, ...p) { p = p || []; p.unshift(_getmysqlLabor[0], _getmysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); // }; //get獲取數據庫信息 getmysql2 = function (req, res, functionname, ...p) { p = p || []; p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); // }; //get獲取數據庫信息 getmysql3 = function (req, res, functionname, ...p) { p = p || []; p.unshift(_getmysqlLabor2[0], _getmysqlLabor2[1], functionname); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); // }; //post存储过程处理 userpostmysql = function (req, res, functionname) { //mode的处理 if (req.body.mode) { p = req.body.mode.split(","); p.unshift(_mysqluser[0], _mysqluser[1], functionname); //执行存储过程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); } }; //get获取数据库信息 usergetmysql = function (req, res, functionname, ...p) { p = p || []; p.unshift(_mysqluser[0], _mysqluser[1], functionname); //执行存储过程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); // }; //post存儲過程處理 postmysqlLocal = function (req, res) { //mode的處理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_localhost[0], _localhost[1]); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); } }; postmysqlOnline = function (req, res) { //mode的處理 if (req.body[0]) { p = Object.values(req.body[0]); p.unshift(_mysqlLabor[0], _mysqlLabor[1]); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); } }; module.exports = router;