let ensureIndexesPromise = null; async function ensureApplicableDiagnosisIndexes(db) { if (!ensureIndexesPromise) { ensureIndexesPromise = Promise.all([ db.collection("drug-info").createIndex({ applicableDiagnosisCodes: 1 }), db.collection("online-drug-info").createIndex({ applicableDiagnosisCodes: 1 }), ]).catch((error) => { ensureIndexesPromise = null; throw error; }); } await ensureIndexesPromise; } async function validateApplicableDiagnosisCodes(params, db) { if (!Object.prototype.hasOwnProperty.call(params, "applicableDiagnosisCodes")) { return { present: false, value: [] }; } const rawCodes = params.applicableDiagnosisCodes; if (!Array.isArray(rawCodes)) { throw new Error("适应诊断格式错误"); } const uniqueCodes = []; const seen = new Set(); for (const rawCode of rawCodes) { if (typeof rawCode !== "string" || !rawCode.trim()) { throw new Error("适应诊断包含无效编码"); } const code = rawCode.trim(); if (!seen.has(code)) { seen.add(code); uniqueCodes.push(code); } } if (uniqueCodes.length) { const diagnoses = await db.collection("hlw-diagnosis").find( { code: { $in: uniqueCodes } }, { projection: { _id: 0, code: 1 } } ).toArray(); const existingCodes = new Set(diagnoses.map(item => item.code)); if (uniqueCodes.some(code => !existingCodes.has(code))) { throw new Error("部分适应诊断不存在,请重新选择"); } } await ensureApplicableDiagnosisIndexes(db); return { present: true, value: uniqueCodes }; } module.exports = { ensureApplicableDiagnosisIndexes, validateApplicableDiagnosisCodes, };