irc_dicom_service/app/service/study.js

144 lines
3.3 KiB
JavaScript

'use strict';
const Service = require('egg').Service;
class StudyService extends Service {
//查询study
getStudyById(_id) {
return this.ctx.model.Study.findOne({
_id
});
}
//查询study通过study_uid
getStudyByUID(uid) {
return this.ctx.model.Study.findOne({
StudyInstanceUID: uid
})
}
//根据studytime
getStudyBySTUDYTIME(dayBegin, dayEnd, device) {
let query = {
STUDYTIME: {
$gte: dayBegin,
$lte: dayEnd
}
}
if (device) query.DEVICENAME = device
return this.ctx.model.Study.find(query);
}
/**
* 获取未设置技师的study
* @param {*} dayBegin
* @param {*} dayEnd
*/
getStudyByPhotoMakerStatus(dayBegin, dayEnd) {
let query = {
STUDYSTATUS: {
$in: ['上传图像完成', '诊断完成', '审核完成']
},
DEVICETYPENAME: {
$in: ["CT", "MR"]
},
$or: [{
PHOTOMAKER: null
},
{
schedulePHOTOMAKER: null
},
{
photomakerStatus: 3
}
]
}
if (dayBegin && dayEnd) {
query.STUDYTIME = {
$gte: dayBegin,
$lte: dayEnd
};
}
return this.ctx.model.Study.find(query).limit(100);
}
//获取需要就诊的study
getStudyByIdCanTriage(_id) {
return this.ctx.model.Report.findOne({
_id,
STUDYSTATUS: {
$in: ["待分诊", "已分诊", "到诊"]
}
}).populate({
path: "quenuing_id"
})
}
//设置评分
setGrade(report_id, grade, rank, mask) {
return this.ctx.model.Report.updateOne({
_id: report_id
}, {
$set: {
[`grade.${grade.type}`]: {
score: grade.score, //分数
rank: rank, //等级
mask: mask, //评价
}
}
})
}
//取消评分
delGrade(report_id, type) {
return this.ctx.model.Report.updateOne({
_id: report_id
}, {
$set: {
[`grade.${type}`]: null
}
})
}
findStudyExist(dicomInfo, user_id) {
return this.ctx.model.Study.findOne({
StudyInstanceUID: dicomInfo.StudyInstanceUID,
user_id: user_id
}).exec();
}
/**
* 更新study
* @param {*} dicomInfo 更新的参数
* @param {*} series_ids series
* @param {*} _id series的_id
*/
async findAndUpsert(dicomInfo, user_id, serie) {
let study = await this.findStudyExist(dicomInfo, user_id)
if (!study) {
study = new this.ctx.model.Study({
StudyInstanceUID: dicomInfo.StudyInstanceUID,
user_id: user_id,
status: '1',
modals: "",
...dicomInfo,
})
} else {
study.status = '1';
//bug 上传时间未更新 此处用于解决
study.meta.updatedAt = new Date();
}
if (serie && serie.id) {
study.series_ids.addToSet(serie.id)
}
//更新study中modals
if (serie.Modality) {
let Modality = serie.Modality.split("\\")[0];
if (!study.modals) study.modals = '';
if (Modality && study.modals.indexOf(Modality) < 0) {
let oldModals = study.modals;
let modals = oldModals ? oldModals.split("\\") : [];
modals.push(Modality);
modals.sort((a, b) => a.localeCompare(b, 'zh'));
study.modals = modals.join("\\");
}
}
return await study.save();
}
}
module.exports = StudyService;