diff --git a/apps/dmp/core/domain/Dicom/DicomService.ts b/apps/dmp/core/domain/Dicom/DicomService.ts index 7dd5de8..d681b45 100644 --- a/apps/dmp/core/domain/Dicom/DicomService.ts +++ b/apps/dmp/core/domain/Dicom/DicomService.ts @@ -4,10 +4,16 @@ import { DicomRepository } from "./DicomRepository"; export class DicomService { constructor(private dicomRepository: DicomRepository) {} + /** + * 直穿pacs + */ async upload2Pacs(dcmFile: File) { return await this.dicomRepository.upload2Pacs(dcmFile); } + /** + * dicom徐磊是否在pacs中存在 + */ async existInPacs(p: ExistInPacsDTO) { return await this.dicomRepository.existInPacs(p); } diff --git a/apps/dmp/core/domain/User/UserService.ts b/apps/dmp/core/domain/User/UserService.ts index 4efaa08..9177a99 100644 --- a/apps/dmp/core/domain/User/UserService.ts +++ b/apps/dmp/core/domain/User/UserService.ts @@ -2,6 +2,7 @@ import { makeAutoObservable } from "mobx"; import { UserRepository } from "./UserRepository"; import { User } from "./entities/User"; import { RouteObject } from "react-router"; +import { Study } from "@/modules/Admin/Dicom/Upload/DicomUploader/util"; export class UserService { user: User; @@ -47,4 +48,11 @@ export class UserService { async getDmpAnnotators() { return await this.userRepository.getDmpAnnotators(); } + + /** + * 分配标注序列 + */ + async assignLabelDicom(user: User, study: Study[]) { + console.log(user, study); + } } diff --git a/apps/dmp/core/domain/User/entities/User.ts b/apps/dmp/core/domain/User/entities/User.ts index 120db0d..21f2495 100644 --- a/apps/dmp/core/domain/User/entities/User.ts +++ b/apps/dmp/core/domain/User/entities/User.ts @@ -1,7 +1,7 @@ import { makeAutoObservable } from "mobx"; interface UserProps { - id?: number | string; + id?: number | string | undefined; username?: string; password?: string; isEnabled?: boolean; diff --git a/apps/dmp/src/modules/Admin/Dicom/Upload/index.tsx b/apps/dmp/src/modules/Admin/Dicom/Upload/index.tsx index e3eb26b..df02332 100644 --- a/apps/dmp/src/modules/Admin/Dicom/Upload/index.tsx +++ b/apps/dmp/src/modules/Admin/Dicom/Upload/index.tsx @@ -5,6 +5,8 @@ import { DicomTable } from "./DicomTable"; import { useDomain } from "@/hook/useDomain"; import { Typography } from "antd"; import { useState } from "react"; +import { User } from "@@/domain/User/entities/User"; +import { limitConcurrency } from "./limitConcurrency"; const { Text } = Typography; @@ -29,9 +31,9 @@ export const DicomUpload = (props: DicomUploadProps) => { const { dcmFileNum, totalFileNum, dcmFileSize } = fileCalculator; const [selectRows, setSelectedRows] = useState([]); const [isModalOpen, setIsModalOpen] = useState(false); - const [annotators, setAnnotators] = useState([]); - const [selectAnnotatorId, setSelectAnnotatorId] = useState( - "" + const [annotators, setAnnotators] = useState([]); + const [selectAnnotator, setSelectAnnotator] = useState( + undefined ); const onUploadFiles = async (study: Study, series: Series) => { @@ -45,31 +47,18 @@ export const DicomUpload = (props: DicomUploadProps) => { if (instances.length === subs.length) { openOHIFViewer(StudyInstanceUID, SeriesInstanceUID); } else { - let fullfilled = 0; - Promise.all( - series.subs.map((file) => - dicomDomainService.upload2Pacs(file).then((res) => { - if (["success", "AlreadyStored"].includes(res.Status)) { - fullfilled++; - } - }) - ) - ).then((res) => { - if (res.length === series.subs.length) { - openOHIFViewer(StudyInstanceUID, SeriesInstanceUID); - } + const uploadFunc = (f: File) => () => dicomDomainService.upload2Pacs(f); + limitConcurrency(series.subs.map(uploadFunc), 10, (completed, total) => { + console.log(`${completed} out of ${total} tasks completed.`); }); } }; const onClickAssign = () => { userDomainService.getDmpAnnotators().then((res) => { - console.log(res); - const { data } = res; setIsModalOpen(true); - setAnnotators(data.map((u) => ({ label: u.username, value: u.id }))); + setAnnotators(res.data as User[]); }); - console.log(selectRows); }; const dcmFileInfo = !!totalFileNum && ( @@ -82,10 +71,13 @@ export const DicomUpload = (props: DicomUploadProps) => { ); + /** + * 分配任务 + */ const onAssignConfirm = () => { - if (!selectAnnotatorId) return; - console.log(selectAnnotatorId); - setSelectAnnotatorId(0); + if (!selectAnnotator?.id) return; + userDomainService.assignLabelDicom(selectAnnotator, selectRows); + setSelectAnnotator(undefined); setIsModalOpen(false); }; @@ -124,9 +116,15 @@ export const DicomUpload = (props: DicomUploadProps) => { >