179 lines
4.9 KiB
JavaScript
Raw Normal View History

2026-07-27 11:28:33 +08:00
let db = "";
const { ObjectId } = require("mongodb");
const validator = require('../../utils/validator.js')
module.exports = async (item, mongodb) => {
db = mongodb;
switch (item.type) {
case "getDiagnosisList":
return await getDiagnosisList(item);
case "deleteHlwDiagnosis":
return await deleteHlwDiagnosis(item);
case "updateHlwDiagnosis":
return await updateHlwDiagnosis(item);
case "addHlwDiagnosis":
return await addHlwDiagnosis(item);
case "updateHlwDiagnosisCategory":
return await updateHlwDiagnosisCategory(item)
}
};
// 获取诊断列表
async function getDiagnosisList(item) {
const { page, pageSize, name, code, keyword, category } = item;
try {
// 调用mongo 数据库查询
let query = {};
if (name && typeof name === "string") {
query.name = new RegExp(name.trim(), "i");
}
if (code && typeof code === "string") {
query.code = new RegExp(code.trim(), "i");
}
if (category && typeof category === "string") {
query.category = new RegExp(category.trim(), "i");
}
if (typeof keyword == "string" && keyword.trim()) {
query.$or = [
{ name: new RegExp(keyword.trim(), "i") },
{ code: new RegExp(keyword.trim(), "i") },
{ category: new RegExp(keyword.trim(), "i") },
{ pinyin: new RegExp(keyword.trim(), "i") },
];
}
const res = await db
.collection("hlw-diagnosis")
.find(query)
.sort({ createTime: -1 })
.skip((page - 1) * pageSize)
.limit(pageSize)
.toArray();
const total = await db.collection("hlw-diagnosis").countDocuments(query);
return {
success: true,
message: "查询成功",
data: res,
total,
pages: Math.ceil(total / pageSize),
};
} catch (err) {
return {
success: false,
message: err.message || "查询失败",
};
}
}
// 删除诊断信息
async function deleteHlwDiagnosis(item) {
const { id } = item;
if (typeof id !== 'string' || id.trim() === '') {
return { success: false, message: 'id不能为空' }
}
try {
// 调用mongo 数据库删除
const res = await db.collection("hlw-diagnosis").deleteOne({
_id: new ObjectId(id),
});
return {
success: true,
message: "删除成功",
res
};
} catch (err) {
return {
success: false,
message: err.message || "删除失败",
};
}
}
// 更新诊断信息
async function updateHlwDiagnosis(item) {
if (typeof item.id !== 'string' || item.id.trim() === '') {
return { success: false, message: 'id不能为空' }
}
try {
// 调用mongo 数据库更新
const [valid, data] = verifyDisease(item);
if (!valid) return { success: false, message: data }
data.updateTime = Date.now()
const res = await db
.collection("hlw-diagnosis")
.updateOne(
{ _id: new ObjectId(item.id) },
{ $set: data }
);
if (res.matchedCount === 0) {
return { success: false, message: '未查询到诊断' }
}
return {
success: true,
message: "更新成功",
res
};
} catch (err) {
return {
success: false,
message: err.message || "更新失败",
};
}
}
async function addHlwDiagnosis(item) {
try {
// 调用mongo 数据库新增
const [valid, data] = verifyDisease(item);
if (!valid) return { success: false, message: data }
data.createTime = Date.now()
const res = await db.collection("hlw-diagnosis").insertOne(data);
return {
success: true,
message: "新增成功",
id: res.insertedId
};
} catch (err) {
return {
success: false,
message: err.message || "新增失败",
};
}
}
async function updateHlwDiagnosisCategory(ctx) {
const oldCategory = typeof ctx.oldCategory === 'string' ? ctx.oldCategory.trim() : '';
const newCategory = typeof ctx.newCategory === 'string' ? ctx.newCategory.trim() : undefined;
if (!oldCategory || newCategory == undefined) {
return { success: false, message: '参数有误' }
}
try {
const res = await db.collection("hlw-diagnosis").updateMany(
{ category: oldCategory },
{ $set: { category: newCategory } }
);
return {
success: true,
message: "更新成功",
modifiedCount: res.modifiedCount
};
} catch (e) {
return {
success: false,
message: e.message || "更新失败",
};
}
}
function verifyDisease(ctx) {
const [valid, name] = validator.verifyString(ctx.name, "诊断名称", 1);
if (!valid) return [valid, name]
const [valid1, code] = validator.verifyString(ctx.code, "诊断编码", 1);
if (!valid1) return [valid1, code]
const [valid2, pinyin] = validator.verifyString(ctx.pinyin, "诊断拼音码", 1);
if (!valid2) return [valid2, pinyin]
const [, category] = validator.verifyString(ctx.category, "常用诊断名");
return [true, { name, code, pinyin, category }]
}