'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;