From 3db690773f0fcc394a658c836b8a0c6d5c89eda7 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Sat, 25 Mar 2023 12:55:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=95=B0=E6=8D=AE=E9=9B=86=E5=90=88?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/data.ts | 5 +++ src/hooks/useRequest.tsx | 33 +++++++++++++++ src/pages/api/data/delData.ts | 37 +++++++++++++++++ src/pages/api/data/getDataList.ts | 3 +- src/pages/api/data/putDataName.ts | 37 +++++++++++++++++ src/pages/api/timer/clearAuthCode.ts | 3 ++ src/pages/api/timer/clearChatWindow.ts | 3 ++ src/pages/api/timer/initBill.ts | 3 ++ src/pages/api/timer/initDataItemTime.ts | 36 +++++++++++++++++ src/pages/api/timer/updateTraining.ts | 3 ++ src/pages/data/defail.tsx | 15 +++++++ src/pages/data/list.tsx | 53 +++++++++++++++++++++++-- src/service/events/generateQA.ts | 22 ++++++---- src/service/models/data.ts | 4 ++ 14 files changed, 244 insertions(+), 13 deletions(-) create mode 100644 src/hooks/useRequest.tsx create mode 100644 src/pages/api/data/delData.ts create mode 100644 src/pages/api/data/putDataName.ts create mode 100644 src/pages/api/timer/initDataItemTime.ts create mode 100644 src/pages/data/defail.tsx diff --git a/src/api/data.ts b/src/api/data.ts index 3d6975a94..d49049be3 100644 --- a/src/api/data.ts +++ b/src/api/data.ts @@ -11,3 +11,8 @@ export const postData = (name: string) => POST(`/data/postData?name=${na export const postSplitData = (dataId: string, text: string) => POST(`/data/splitData`, { dataId, text }); + +export const updateDataName = (dataId: string, name: string) => + PUT(`/data/putDataName?dataId=${dataId}&name=${name}`); + +export const delData = (dataId: string) => DELETE(`/data/delData?dataId=${dataId}`); diff --git a/src/hooks/useRequest.tsx b/src/hooks/useRequest.tsx new file mode 100644 index 000000000..a3184657d --- /dev/null +++ b/src/hooks/useRequest.tsx @@ -0,0 +1,33 @@ +import { useToast } from '@/hooks/useToast'; +import { useMutation } from '@tanstack/react-query'; +import type { UseMutationOptions } from '@tanstack/react-query'; + +interface Props extends UseMutationOptions { + successToast?: string; + errorToast?: string; +} + +export const useRequest = ({ successToast, errorToast, onSuccess, onError, ...props }: Props) => { + const { toast } = useToast(); + const mutation = useMutation({ + ...props, + onSuccess(res, variables: void, context: unknown) { + onSuccess?.(res, variables, context); + successToast && + toast({ + title: successToast, + status: 'success' + }); + }, + onError(err: any, variables: void, context: unknown) { + onError?.(err, variables, context); + errorToast && + toast({ + title: typeof err === 'string' ? err : err?.message || errorToast, + status: 'error' + }); + } + }); + + return mutation; +}; diff --git a/src/pages/api/data/delData.ts b/src/pages/api/data/delData.ts new file mode 100644 index 000000000..5802b6c06 --- /dev/null +++ b/src/pages/api/data/delData.ts @@ -0,0 +1,37 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@/service/response'; +import { connectToDatabase, Data } from '@/service/mongo'; +import { authToken } from '@/service/utils/tools'; +import type { DataListItem } from '@/types/data'; +import type { PagingData } from '@/types'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + const { authorization } = req.headers; + + if (!authorization) { + throw new Error('缺少登录凭证'); + } + + await authToken(authorization); + + const { dataId } = req.query as { dataId: string }; + if (!dataId) { + throw new Error('缺少参数'); + } + + await connectToDatabase(); + + await Data.findByIdAndUpdate(dataId, { + isDeleted: true + }); + + jsonRes>(res); + } catch (err) { + jsonRes(res, { + code: 500, + error: err + }); + } +} diff --git a/src/pages/api/data/getDataList.ts b/src/pages/api/data/getDataList.ts index 9ef241624..5d8fa569b 100644 --- a/src/pages/api/data/getDataList.ts +++ b/src/pages/api/data/getDataList.ts @@ -28,7 +28,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const datalist = await Data.aggregate([ { $match: { - userId: new mongoose.Types.ObjectId(userId) + userId: new mongoose.Types.ObjectId(userId), + isDeleted: false } }, { diff --git a/src/pages/api/data/putDataName.ts b/src/pages/api/data/putDataName.ts new file mode 100644 index 000000000..d075c1a3a --- /dev/null +++ b/src/pages/api/data/putDataName.ts @@ -0,0 +1,37 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@/service/response'; +import { connectToDatabase, Data } from '@/service/mongo'; +import { authToken } from '@/service/utils/tools'; +import type { DataListItem } from '@/types/data'; +import type { PagingData } from '@/types'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + const { authorization } = req.headers; + + if (!authorization) { + throw new Error('缺少登录凭证'); + } + + await authToken(authorization); + + const { dataId, name } = req.query as { dataId: string; name: string }; + if (!dataId || !name) { + throw new Error('缺少参数'); + } + + await connectToDatabase(); + + await Data.findByIdAndUpdate(dataId, { + name + }); + + jsonRes>(res); + } catch (err) { + jsonRes(res, { + code: 500, + error: err + }); + } +} diff --git a/src/pages/api/timer/clearAuthCode.ts b/src/pages/api/timer/clearAuthCode.ts index 248027d01..e7dfddfcc 100644 --- a/src/pages/api/timer/clearAuthCode.ts +++ b/src/pages/api/timer/clearAuthCode.ts @@ -5,6 +5,9 @@ import { AuthCode } from '@/service/models/authCode'; import { connectToDatabase } from '@/service/mongo'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (req.headers.auth !== 'archer') { + throw new Error('凭证错误'); + } try { await connectToDatabase(); diff --git a/src/pages/api/timer/clearChatWindow.ts b/src/pages/api/timer/clearChatWindow.ts index ac3878419..dbfdd232e 100644 --- a/src/pages/api/timer/clearChatWindow.ts +++ b/src/pages/api/timer/clearChatWindow.ts @@ -4,6 +4,9 @@ import { connectToDatabase, Chat } from '@/service/mongo'; /* 定时删除那些不活跃的内容 */ export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (req.headers.auth !== 'archer') { + throw new Error('凭证错误'); + } try { await connectToDatabase(); diff --git a/src/pages/api/timer/initBill.ts b/src/pages/api/timer/initBill.ts index 26659ce8e..80659da33 100644 --- a/src/pages/api/timer/initBill.ts +++ b/src/pages/api/timer/initBill.ts @@ -7,6 +7,9 @@ import type { BillSchema } from '@/types/mongoSchema'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { + if (req.headers.auth !== 'archer') { + throw new Error('凭证错误'); + } await connectToDatabase(); await Bill.updateMany( diff --git a/src/pages/api/timer/initDataItemTime.ts b/src/pages/api/timer/initDataItemTime.ts new file mode 100644 index 000000000..d4b252658 --- /dev/null +++ b/src/pages/api/timer/initDataItemTime.ts @@ -0,0 +1,36 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@/service/response'; +import { connectToDatabase, DataItem, Data } from '@/service/mongo'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + if (req.headers.auth !== 'archer') { + throw new Error('凭证错误'); + } + await connectToDatabase(); + + // await DataItem.updateMany( + // {}, + // { + // times: 2 + // } + // ); + + await Data.updateMany( + {}, + { + isDeleted: false + } + ); + + jsonRes(res, { + data: {} + }); + } catch (err) { + jsonRes(res, { + code: 500, + error: err + }); + } +} diff --git a/src/pages/api/timer/updateTraining.ts b/src/pages/api/timer/updateTraining.ts index 0657e448d..4d4fe6d83 100644 --- a/src/pages/api/timer/updateTraining.ts +++ b/src/pages/api/timer/updateTraining.ts @@ -11,6 +11,9 @@ import { sendTrainSucceed } from '@/service/utils/sendEmail'; import { httpsAgent } from '@/service/utils/tools'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (req.headers.auth !== 'archer') { + throw new Error('凭证错误'); + } try { await connectToDatabase(); diff --git a/src/pages/data/defail.tsx b/src/pages/data/defail.tsx new file mode 100644 index 000000000..d6aae3a1d --- /dev/null +++ b/src/pages/data/defail.tsx @@ -0,0 +1,15 @@ +import React from 'react'; + +const DataDetail = ({ dataId }: { dataId: string }) => { + return
DataDetail
; +}; + +export default DataDetail; + +export async function getServerSideProps(context: any) { + const dataId = context.query?.dataId || ''; + + return { + props: { dataId } + }; +} diff --git a/src/pages/data/list.tsx b/src/pages/data/list.tsx index 98aa4b418..33c074c79 100644 --- a/src/pages/data/list.tsx +++ b/src/pages/data/list.tsx @@ -11,14 +11,17 @@ import { Th, Td, TableContainer, - useDisclosure + useDisclosure, + Input } from '@chakra-ui/react'; -import { getDataList } from '@/api/data'; +import { getDataList, updateDataName, delData } from '@/api/data'; import { usePaging } from '@/hooks/usePaging'; import type { DataListItem } from '@/types/data'; import ScrollData from '@/components/ScrollData'; import dayjs from 'dayjs'; import dynamic from 'next/dynamic'; +import { useConfirm } from '@/hooks/useConfirm'; +import { useRequest } from '@/hooks/useRequest'; const CreateDataModal = dynamic(() => import('./components/CreateDataModal')); const ImportDataModal = dynamic(() => import('./components/ImportDataModal')); @@ -34,6 +37,9 @@ const DataList = () => { pageSize: 20 }); const [ImportDataId, setImportDataId] = useState(); + const { openConfirm, ConfirmChild } = useConfirm({ + content: '删除数据集,将删除里面的所有内容,请确认!' + }); const { isOpen: isOpenCreateDataModal, @@ -41,6 +47,15 @@ const DataList = () => { onClose: onCloseCreateDataModal } = useDisclosure(); + const { mutate: handleDelData, isLoading: isDeleting } = useRequest({ + mutationFn: (dataId: string) => delData(dataId), + successToast: '删除数据集成功', + errorToast: '删除数据集异常', + onSuccess() { + getData(1, true); + } + }); + return ( @@ -74,12 +89,31 @@ const DataList = () => { {dataList.map((item, i) => ( - {item.name} + + { + if (!e.target.value) return; + updateDataName(item._id, e.target.value); + }} + /> + {dayjs(item.createTime).format('YYYY/MM/DD HH:mm')} {item.trainingData} / {item.totalData} + - + + ))} @@ -104,6 +148,7 @@ const DataList = () => { {isOpenCreateDataModal && ( getData(1, true)} /> )} + ); }; diff --git a/src/service/events/generateQA.ts b/src/service/events/generateQA.ts index 4a242be14..2860d9cda 100644 --- a/src/service/events/generateQA.ts +++ b/src/service/events/generateQA.ts @@ -35,10 +35,7 @@ export async function generateQA(next = false): Promise { // 减少一次重试次数, 并更新状态为生成中 await DataItem.findByIdAndUpdate(dataItem._id, { - status: 2, - $inc: { - time: -1 - } + status: 2 }); // 获取 openapi Key @@ -86,22 +83,31 @@ export async function generateQA(next = false): Promise { const splitResponse = splitText(content || ''); // 插入数据库,并修改状态 await DataItem.findByIdAndUpdate(dataItem._id, { - status: dataItem.temperature >= 100 ? 0 : 1, - temperature: dataItem.temperature >= 100 ? dataItem.temperature : dataItem.temperature + 25, + status: dataItem.temperature >= 80 ? 0 : 1, // 需要生成 5 组内容。0,0.2,0.4,0.6,0.8 + temperature: dataItem.temperature >= 80 ? dataItem.temperature : dataItem.temperature + 20, $push: { result: { $each: splitResponse } } }); - console.log('生成成功,time:', `${(Date.now() - startTime) / 1000}s`); + console.log( + '生成成功,time:', + `${(Date.now() - startTime) / 1000}s`, + 'result length: ', + splitResponse.length + ); } catch (error: any) { console.log('error: 生成QA错误', dataItem?._id); console.log('response:', error?.response); // 重置状态 if (dataItem?._id) { await DataItem.findByIdAndUpdate(dataItem._id, { - status: dataItem.times > 0 ? 1 : 0 // 还有重试次数则可以继续进行 + status: dataItem.times > 0 ? 1 : 0, // 还有重试次数则可以继续进行 + $inc: { + // 剩余尝试次数-1 + times: -1 + } }); } } diff --git a/src/service/models/data.ts b/src/service/models/data.ts index 9b590f746..d687b6e75 100644 --- a/src/service/models/data.ts +++ b/src/service/models/data.ts @@ -13,6 +13,10 @@ const DataSchema = new Schema({ createTime: { type: Date, default: () => new Date() + }, + isDeleted: { + type: Boolean, + default: false } });