Skip to content

Commit

Permalink
feat: #10
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinlinlee committed Jun 6, 2023
1 parent 150ea4e commit f617273
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 31 deletions.
14 changes: 14 additions & 0 deletions config-class.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,16 @@ class DicomDimseConfig {
return bindInfo.split(":").pop();
}

getAeTitle() {
let bindArgIndex = this.dcm4cheQrscpArgv.findIndex(v => v === "-b");
/** @type {string} */
let bindInfo = this.dcm4cheQrscpArgv[bindArgIndex + 1];

let aeTitleAndIp = bindInfo.split(":").shift();
let aeTitle = aeTitleAndIp.includes("@") ? aeTitleAndIp.split("@").shift() : aeTitleAndIp;
return aeTitle;
}

}

class FhirConfig {
Expand All @@ -100,6 +110,10 @@ class RaccoonConfig {

/** @type {string} */
this.mediaStorageID = this.mongoDbConfig.dbName;

this.aeTitle = this.dicomDimseConfig.enableDimse ? this.dicomDimseConfig.getAeTitle() : this.dicomWebConfig.aeTitle;
if (!this.aeTitle)
throw new Error("Missing required config `aeTitle`");
}
}

Expand Down
71 changes: 40 additions & 31 deletions models/mongodb/models/dicom.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const _ = require("lodash");
const mongoose = require("mongoose");
const {
dicomJsonAttributeSchema,
Expand All @@ -7,6 +8,8 @@ const {
} = require("../schema/dicomJsonAttribute");
const { getStoreDicomFullPath, IncludeFieldsFactory } = require("../service");
const { logger } = require("../../../utils/logs/log");
const { raccoonConfig } = require("@root/config-class");
const { dictionary } = require("@models/DICOM/dicom-tags-dic");

let dicomModelSchema = new mongoose.Schema(
{
Expand Down Expand Up @@ -319,16 +322,16 @@ dicomModelSchema.statics.getDicomJson = async function (queryOptions) {
try {

let docs = await mongoose
.model("dicom")
.find(queryOptions.query, {
...instanceFields
})
.setOptions({
strictQuery: false
})
.limit(queryOptions.limit)
.skip(queryOptions.skip)
.exec();
.model("dicom")
.find(queryOptions.query, {
...instanceFields
})
.setOptions({
strictQuery: false
})
.limit(queryOptions.limit)
.skip(queryOptions.skip)
.exec();

let instanceDicomJson = docs.map(v => {
let obj = v.toObject();
Expand All @@ -340,15 +343,21 @@ dicomModelSchema.statics.getDicomJson = async function (queryOptions) {
`${queryOptions.retrieveBaseUrl}/${obj["0020000D"]["Value"][0]}/series/${obj["0020000E"]["Value"][0]}/instances/${obj["00080018"]["Value"][0]}`
]
};

_.set(obj, dictionary.keyword.RetrieveAETitle, {
...dictionary.tagVR[dictionary.keyword.RetrieveAETitle],
Value: [raccoonConfig.aeTitle]
});

return obj;
});

return instanceDicomJson;

} catch(e) {
} catch (e) {
throw e;
}

};

/**
Expand All @@ -358,22 +367,22 @@ dicomModelSchema.statics.getDicomJson = async function (queryOptions) {
* @param {string} iParam.seriesUID
* @param {string} iParam.instanceUID
*/
dicomModelSchema.statics.getPathOfInstance = async function(iParam) {
dicomModelSchema.statics.getPathOfInstance = async function (iParam) {
let { studyUID, seriesUID, instanceUID } = iParam;

try {
let query = {
$and: [
{
studyUID: studyUID
},
{
seriesUID: seriesUID
},
{
instanceUID: instanceUID
}
]
$and: [
{
studyUID: studyUID
},
{
seriesUID: seriesUID
},
{
instanceUID: instanceUID
}
]
};

let doc = await mongoose.model("dicom").findOne(query, {
Expand Down Expand Up @@ -413,13 +422,13 @@ dicomModelSchema.statics.getInstanceOfMedianIndex = async function (query) {
instanceUID: 1,
instancePath: 1
})
.sort({
studyUID: 1,
seriesUID: 1
})
.skip(instanceCountOfStudy >> 1)
.limit(1)
.exec();
.sort({
studyUID: 1,
seriesUID: 1
})
.skip(instanceCountOfStudy >> 1)
.limit(1)
.exec();
};

/**
Expand Down
8 changes: 8 additions & 0 deletions models/mongodb/models/dicomSeries.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ const _ = require("lodash");
const { tagsNeedStore } = require("../../DICOM/dicom-tags-mapping");
const { getVRSchema } = require("../schema/dicomJsonAttribute");
const { getStoreDicomFullPathGroup, IncludeFieldsFactory } = require("../service");
const { dictionary } = require("@models/DICOM/dicom-tags-dic");
const { raccoonConfig } = require("@root/config-class");

let dicomSeriesSchema = new mongoose.Schema(
{
Expand Down Expand Up @@ -95,6 +97,12 @@ dicomSeriesSchema.statics.getDicomJson = async function(queryOptions) {
`${queryOptions.retrieveBaseUrl}/${obj["0020000D"]["Value"][0]}/series/${obj["0020000E"]["Value"][0]}`
]
};

_.set(obj, dictionary.keyword.RetrieveAETitle, {
...dictionary.tagVR[dictionary.keyword.RetrieveAETitle],
Value: [raccoonConfig.aeTitle]
});

return obj;
});

Expand Down
8 changes: 8 additions & 0 deletions models/mongodb/models/dicomStudy.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ const {
const {
tagsOfRequiredMatching
} = require("../../DICOM/dicom-tags-mapping");
const { raccoonConfig } = require("../../../config-class");
const { dictionary } = require("@models/DICOM/dicom-tags-dic");

let dicomStudySchema = new mongoose.Schema(
{
Expand Down Expand Up @@ -74,6 +76,12 @@ dicomStudySchema.statics.getDicomJson = async function (queryOptions) {
vr: "UR",
Value: [`${queryOptions.retrieveBaseUrl}/${obj["0020000D"]["Value"][0]}`]
};

_.set(obj, dictionary.keyword.RetrieveAETitle, {
...dictionary.tagVR[dictionary.keyword.RetrieveAETitle],
Value: [raccoonConfig.aeTitle]
});

return obj;
});

Expand Down

0 comments on commit f617273

Please sign in to comment.