205 lines
4.9 KiB
JavaScript
205 lines
4.9 KiB
JavaScript
const dayjs = require("dayjs");
|
|
const treatmentRecord = require("../treatment-record");
|
|
const common = require("../../common");
|
|
let db = null;
|
|
|
|
exports.main = async (content, DB) => {
|
|
db = DB;
|
|
switch (content.type) {
|
|
case "getBillRecord":
|
|
return getBillRecord(content);
|
|
case "addBillRecord":
|
|
return addBillRecord(content);
|
|
case "updateBillRecord":
|
|
return updateBillRecord(content);
|
|
case "deductPorjectUsageCount":
|
|
return deductPorjectUsageCount(content);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 新增账单记录
|
|
* @param {*} content
|
|
* @returns
|
|
*/
|
|
async function addBillRecord(content) {
|
|
const { corpId, params } = content;
|
|
const { hasValidDays, validDays } = params;
|
|
if (!corpId) {
|
|
return { success: false, message: "机构id不能为空" };
|
|
}
|
|
if (hasValidDays && validDays)
|
|
params.validTime = dayjs().add(validDays, "day").valueOf();
|
|
const createTime = dayjs().valueOf();
|
|
try {
|
|
const id = common.generateRandomString(24);
|
|
await db.collection("bill-record").insertOne({
|
|
_id: id,
|
|
...params,
|
|
corpId,
|
|
createTime,
|
|
});
|
|
// 新增治疗记录, 治疗状态为init
|
|
if (params.createTreatmentOrder) {
|
|
await treatmentRecord.main(
|
|
{
|
|
type: "addTreatmentRecord",
|
|
corpId,
|
|
params: {
|
|
...params,
|
|
billId: id,
|
|
createTreatementTime: dayjs().valueOf(),
|
|
billdCreateTime: createTime,
|
|
treatmentStatus: "init",
|
|
},
|
|
},
|
|
db
|
|
);
|
|
}
|
|
return {
|
|
success: true,
|
|
message: "新增成功",
|
|
data: id,
|
|
};
|
|
} catch (error) {
|
|
return {
|
|
success: false,
|
|
message: error.message,
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取账单记录
|
|
* @param {string} corpId 机构id
|
|
* @returns
|
|
*/
|
|
async function getBillRecord(content) {
|
|
const {
|
|
corpId,
|
|
customerId,
|
|
haveValid,
|
|
page = 1,
|
|
pageSize = 100,
|
|
billType,
|
|
billDates,
|
|
projects,
|
|
packageList,
|
|
treatmentDept_ids,
|
|
projectType,
|
|
restUsage,
|
|
treatmentStatus,
|
|
consultId,
|
|
} = content;
|
|
let query = {
|
|
corpId,
|
|
};
|
|
if (haveValid) {
|
|
query.validTime = {
|
|
$or: [{ $exists: false }, { $gte: dayjs().endOf("day").valueOf() }],
|
|
};
|
|
}
|
|
if (billType) query["packageName"] = { $exists: billType === "package" };
|
|
if (billDates && Array.isArray(billDates) && billDates.length) {
|
|
query.createTime = {
|
|
$and: [
|
|
{ $gte: dayjs(billDates[0]).startOf("day").valueOf() },
|
|
{ $lte: dayjs(billDates[1]).endOf("day").valueOf() },
|
|
],
|
|
};
|
|
}
|
|
if(customerId) query.customerId = customerId;
|
|
if (projects && Array.isArray(projects) && projects.length) {
|
|
query.projectId = { $in: projects };
|
|
}
|
|
if (packageList && Array.isArray(packageList) && packageList.length) {
|
|
query.packageId = { $in: packageList };
|
|
}
|
|
if (
|
|
treatmentDept_ids &&
|
|
Array.isArray(treatmentDept_ids) &&
|
|
treatmentDept_ids.length
|
|
) {
|
|
query.treatmentDept_id = { $in: treatmentDept_ids };
|
|
}
|
|
if (consultId) {
|
|
query.consultId = consultId;
|
|
}
|
|
if (restUsage) query.restUsageCount = { $gt: 0 };
|
|
if (projectType) query.projectType = projectType;
|
|
|
|
const total = await db.collection("bill-record").countDocuments(query);
|
|
const pages = Math.ceil(total / pageSize);
|
|
const billCollection = db
|
|
.collection("bill-record")
|
|
.find(query)
|
|
.sort({ createTime: -1 })
|
|
.skip(pageSize * (page - 1))
|
|
.limit(pageSize);
|
|
|
|
let res = [];
|
|
if (treatmentStatus === "pending") {
|
|
res = await billCollection.toArray();
|
|
res = await Promise.all(
|
|
res.map(async (bill) => {
|
|
const treatmentRecords = await db
|
|
.collection("treatment-record")
|
|
.find({ billId: bill._id })
|
|
.toArray();
|
|
bill.treatmentStatus = treatmentRecords.some(
|
|
(record) => record.treatmentStatus === "pending"
|
|
);
|
|
return bill;
|
|
})
|
|
);
|
|
} else {
|
|
res = await billCollection.toArray();
|
|
}
|
|
|
|
return {
|
|
list: res,
|
|
success: true,
|
|
message: "获取成功",
|
|
total: total,
|
|
pages: pages,
|
|
size: pageSize,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 更新账单记录
|
|
* @param {*} content
|
|
* @returns
|
|
*/
|
|
async function updateBillRecord(content) {
|
|
const { corpId, id, params } = content;
|
|
if (!corpId) return { success: false, message: "机构id不能为空" };
|
|
if (!id || !params) return { success: false, message: "缺少必要的字段" };
|
|
try {
|
|
await db
|
|
.collection("bill-record")
|
|
.updateOne({ _id: id, corpId }, { $set: params });
|
|
return { success: true, message: "更新成功" };
|
|
} catch (error) {
|
|
return { success: false, message: "更新失败" };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 扣减项目使用次数
|
|
* @param {*} content
|
|
* @returns
|
|
*/
|
|
async function deductPorjectUsageCount({ corpId, billId, deductUsageCount }) {
|
|
await db
|
|
.collection("bill-record")
|
|
.updateOne(
|
|
{ _id: billId, corpId },
|
|
{ $inc: { restUsageCount: -deductUsageCount } }
|
|
);
|
|
return {
|
|
success: true,
|
|
message: "更新成功",
|
|
};
|
|
}
|