Skip to content

Commit

Permalink
feat: C MOVE DIMSE Service
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinlinlee committed Aug 23, 2023
1 parent 9ce4213 commit 3468469
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 49 deletions.
7 changes: 0 additions & 7 deletions dimse-sql/c-move.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
const _ = require("lodash");
const path = require("path");
const { mongoose } = require("mongoose");

const { Attributes } = require("@dcm4che/data/Attributes");
const { Tag } = require("@dcm4che/data/Tag");
Expand All @@ -9,15 +7,10 @@ const { Status } = require("@dcm4che/net/Status");
const { PresentationContext } = require("@dcm4che/net/pdu/PresentationContext");
const { DicomServiceError } = require("@error/dicom-service");
const { createCMoveSCPInjectProxy } = require("@java-wrapper/org/github/chinlinlee/dcm777/net/CMoveSCPInject");
const { DimseQueryBuilder } = require("./queryBuilder");
const { File } = require("@java-wrapper/java/io/File");
const { raccoonConfig } = require("@root/config-class");
const { SimpleCMoveSCP } = require("@java-wrapper/org/github/chinlinlee/dcm777/net/SimpleCMoveSCP");
const { UID } = require("@dcm4che/data/UID");

const { PATIENT_ROOT_LEVELS, STUDY_ROOT_LEVELS, PATIENT_STUDY_ONLY_LEVELS } = require("./level");
const { importClass } = require("java-bridge");
const { default: InstanceLocator } = require("@dcm4che/net/service/InstanceLocator");
const { default: AAssociateRQ } = require("@dcm4che/net/pdu/AAssociateRQ");
const { default: Connection } = require("@dcm4che/net/Connection");
const { default: RetrieveTaskImpl } = require("@dcm4che/tool/dcmqrscp/RetrieveTaskImpl");
Expand Down
14 changes: 7 additions & 7 deletions dimse-sql/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,16 @@ class DcmQrScp {
// #endregion

// #region C-MOVE
// await dicomServiceRegistry.addDicomService(new JsCMoveScp(this).getPatientRootLevel());
// await dicomServiceRegistry.addDicomService(new JsCMoveScp(this).getStudyRootLevel());
// await dicomServiceRegistry.addDicomService(new JsCMoveScp(this).getPatientStudyOnlyLevel());
await dicomServiceRegistry.addDicomService(new JsCMoveScp(this).getPatientRootLevel());
await dicomServiceRegistry.addDicomService(new JsCMoveScp(this).getStudyRootLevel());
await dicomServiceRegistry.addDicomService(new JsCMoveScp(this).getPatientStudyOnlyLevel());
// #endregion

// #region C-GET
// await dicomServiceRegistry.addDicomService(new JsCGetScp().getPatientRootLevel());
// await dicomServiceRegistry.addDicomService(new JsCGetScp().getStudyRootLevel());
// await dicomServiceRegistry.addDicomService(new JsCGetScp().getPatientStudyOnlyLevel());
// await dicomServiceRegistry.addDicomService(new JsCGetScp().getCompositeLevel());
await dicomServiceRegistry.addDicomService(new JsCGetScp().getPatientRootLevel());
await dicomServiceRegistry.addDicomService(new JsCGetScp().getStudyRootLevel());
await dicomServiceRegistry.addDicomService(new JsCGetScp().getPatientStudyOnlyLevel());
await dicomServiceRegistry.addDicomService(new JsCGetScp().getCompositeLevel());
// #endregion

return dicomServiceRegistry;
Expand Down
71 changes: 36 additions & 35 deletions dimse-sql/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ const { importClass } = require("java-bridge");
const { raccoonConfig } = require("@root/config-class");
const { InstanceLocator } = require("@dcm4che/net/service/InstanceLocator");
const { default: File } = require("@java-wrapper/java/io/File");
const sequenceInstance = require("@models/sql/instance");
const { InstanceQueryBuilder } = require("@root/api-sql/dicom-web/controller/QIDO-RS/service/instanceQueryBuilder");
/**
*
* @param {number} tag
Expand All @@ -20,25 +22,25 @@ function intTagToString(tag) {
* @returns
*/
async function getInstancesFromKeysAttr(keys) {
const { DimseQueryBuilder } = require("./queryBuilder");
const { SqlDimseQueryBuilder: DimseQueryBuilder } = require("./queryBuilder");
let queryBuilder = new DimseQueryBuilder(keys, "instance");
let normalQuery = await queryBuilder.toNormalQuery();
let mongoQuery = await queryBuilder.getMongoQuery(normalQuery);

let returnKeys = {
"instancePath": 1,
"00020010": 1,
"00080016": 1,
"00080018": 1,
"0020000D": 1,
"0020000E": 1
let sqlQuery = await queryBuilder.getSqlQuery(normalQuery);
let instanceQueryBuilder = new InstanceQueryBuilder({
query: {
...sqlQuery
}
});
let q = instanceQueryBuilder.build();
let instanceQuery = {
...q
};

let instances = await mongoose.model("dicom").find({
...mongoQuery.$match
}, returnKeys).setOptions({
strictQuery: false
}).exec();
let instances = await sequenceInstance.model("Instance").findAll({
...instanceQuery,
attributes: ["json", "instancePath"]
});

const JArrayList = await importClass("java.util.ArrayList");
let list = await JArrayList.newInstanceAsync();

Expand All @@ -52,11 +54,11 @@ async function getInstancesFromKeysAttr(keys) {

let fileUri = await instanceFile.toURI();
let fileUriString = await fileUri.toString();

let instanceLocator = await InstanceLocator.newInstanceAsync(
_.get(instance, "00080016.Value.0"),
_.get(instance, "00080018.Value.0"),
_.get(instance, "00020010.Value.0"),
_.get(instance.json, "00080016.Value.0"),
_.get(instance.json, "00080018.Value.0"),
_.get(instance.json, "00020010.Value.0"),
fileUriString
);

Expand All @@ -72,27 +74,26 @@ async function getInstancesFromKeysAttr(keys) {
* @returns
*/
async function findOneInstanceFromKeysAttr(keys) {
const { DimseQueryBuilder } = require("./queryBuilder");
const { SqlDimseQueryBuilder: DimseQueryBuilder } = require("./queryBuilder");
let queryBuilder = new DimseQueryBuilder(keys, "instance");
let normalQuery = await queryBuilder.toNormalQuery();
let mongoQuery = await queryBuilder.getMongoQuery(normalQuery);

let returnKeys = {
"instancePath": 1,
"00020010": 1,
"00080016": 1,
"00080018": 1,
"0020000D": 1,
"0020000E": 1
let sqlQuery = await queryBuilder.getMongoQuery(normalQuery);
let instanceQueryBuilder = new InstanceQueryBuilder({
query: {
...sqlQuery
}
});
let q = instanceQueryBuilder.build();
let instanceQuery = {
...q
};

let instance = await mongoose.model("dicom").findOne({
...mongoQuery.$match
}, returnKeys).setOptions({
strictQuery: false
}).exec();
let instance = await sequenceInstance.model("Instance").findOne({
...instanceQuery,
attributes: ["json"]
});

return instance;
return instance.json;
}

module.exports.intTagToString = intTagToString;
Expand Down

0 comments on commit 3468469

Please sign in to comment.