275 lines
9.0 KiB
JavaScript
Raw Normal View History

2026-07-27 11:28:33 +08:00
const request = require("../request");
const dayjs = require("dayjs");
const hzUrl = "http://60.191.102.204:23901/patient";
exports.getHzzxCustomerArchive = async (event) => {
const { idCard, mobile, idNo } = event;
let url = "";
try {
if (idCard) {
url = `${hzUrl}?sql=CALL SQLUser.Pat_Info('${idCard}','1')`;
} else if (mobile) {
url = `${hzUrl}?sql=CALL SQLUser.Pat_Info('${mobile}','2')`;
} else if (idNo) {
url = `${hzUrl}?sql=CALL SQLUser.Pat_Info('${idNo}','3')`;
} else {
return { success: false, message: "请输入患者信息", list: [] };
}
const res = await request.main(url, null, "GET");
if (res && Array.isArray(res) && res.length > 0) {
const list = res.map((i) => convertToCustomerParams(i));
return { success: true, message: "获取成功", list };
} else {
return { success: false, message: "获取失败", list: [] };
}
} catch (error) {
console.error("Error in getHzzxCustomerArchive:", error);
return { success: false, message: "获取失败,发生错误", list: [] };
}
};
exports.getHzzxInHospitalRecord = async (event) => {
const { idNo, startTime, endTime } = event;
const url = `${hzUrl}?sql=CALL SQLUser.In_PatInfo('${idNo}', '${startTime}', '${endTime}')`;
try {
const res = await request.main(url, null, "GET");
let list = [];
if (res && Array.isArray(res) && res.length > 0) {
list = res.map((i) => convertToInHospitalParams(i));
// 通过hospitalizationId 对数据进行去重
list = list.reduce((acc, cur) => {
if (!acc.some((i) => i.hospitalizationId === cur.hospitalizationId)) {
acc.push(cur);
}
return acc;
}, []);
return { success: true, message: "获取成功", list };
} else {
return { success: false, message: "为查询到数据", list: [] };
}
} catch (error) {
console.error("Error in getHzzxInHospitalRecord:", error);
return { success: false, message: "获取失败,发生错误", list: [] };
}
};
exports.getHzzxOutHospitalRecord = async (event) => {
const { idNo, startTime, endTime } = event;
const url = `${hzUrl}?sql=CALL SQLUser.Pat_OutInfo('${idNo}','${startTime}','${endTime}')`;
try {
const res = await request.main(url, null, "GET");
let list = [];
if (res && Array.isArray(res) && res.length > 0) {
list = res.map((i) => convertToOutHospitalParams(i));
// 通过 visitId 对数据进行去重
list = list.reduce((acc, cur) => {
if (!acc.some((i) => i.visitId === cur.visitId)) {
acc.push(cur);
}
return acc;
}, []);
return { success: true, message: "获取成功", list };
} else {
return { success: false, message: "为查询到数据", list: [] };
}
} catch (error) {
console.error("Error in getHzzxOutHospitalRecord:", error);
return { success: false, message: "获取失败,发生错误", list: [] };
}
};
exports.getHzzxFeeRecord = async (event) => {
const { idNo, startTime, endTime } = event;
const url = `${hzUrl}?sql=CALL SQLUser.FYDD_Info('${idNo}','${startTime}','${endTime}')`;
try {
const res = await request.main(url, null, "GET");
let list = [];
if (res && Array.isArray(res) && res.length > 0) {
list = res.map((i) => convertToFeeParams(i));
list = filterAndBalance(list); // Process data based on logic
return { success: true, message: "获取成功", list };
} else {
return { success: false, message: "为查询到缴费单", list: [] };
}
} catch (error) {
console.error("Error in getHzzxFeeRecord:", error);
return { success: false, message: "获取失败,发生错误", list: [] };
}
};
exports.getHzzxPackageRecord = async (event) => {
const { idNo, startTime, endTime } = event;
const url = `${hzUrl}?sql=CALL SQLUser.TCZL_Info('${idNo}','${startTime}','${endTime}')`;
try {
const res = await request.main(url, null, "GET");
let list = [];
if (res && Array.isArray(res) && res.length > 0) {
list = res;
return { success: true, message: "获取成功", list };
} else {
return { success: false, message: "为查询到数据", list: [] };
}
} catch (error) {
console.error("Error in getHzzxPackageRecord:", error);
return { success: false, message: "获取失败,发生错误", list: [] };
}
};
// 开单记录 退费金额处理
function filterAndBalance(arr) {
// 创建一个 Map 来存储每个 projectId 和 orderNo 对应的正负数信息
const map = new Map();
// 遍历每一项,填充 map
arr.forEach((item) => {
const { projectId, orderNo, projectCount, totalFee } = item;
const key = `${projectId}||${orderNo}`;
// 如果 map 中没有该键,则初始化
if (!map.has(key)) {
map.set(key, { positive: [], negative: [] });
}
const projectCountNum = parseFloat(projectCount);
const totalFeeNum = parseFloat(totalFee);
if (projectCountNum > 0) {
// 正数,直接存入 positive 数组
map.get(key).positive.push(item);
} else if (projectCountNum < 0) {
// 负数,转为正数并存入 negative 数组
item.projectCount = Math.abs(projectCountNum); // 修改负数为正数
item.totalFee = Math.abs(totalFeeNum); // 修改负数费用为正数
map.get(key).negative.push(item);
}
});
// 最终结果数组
const result = [];
// 遍历 map 中每个项目,处理正负数的抵消
map.forEach(({ positive, negative }) => {
let i = 0,
j = 0;
// 对正数和负数进行排序,以便匹配
positive.sort((a, b) => b.projectCount - a.projectCount);
negative.sort((a, b) => b.projectCount - a.projectCount);
// 比较正数和负数进行抵消
while (i < positive.length && j < negative.length) {
if (positive[i].projectCount == negative[j].projectCount) {
// 如果正负数相等,则抵消
i++;
j++;
} else if (positive[i].projectCount > negative[j].projectCount) {
// 如果正数更大,则保留正数,移动正数指针
result.push(positive[i]);
i++;
} else {
// 如果负数更大,跳过负数,移动负数指针
j++;
}
}
// 如果还有正数没有被抵消,添加到结果中
while (i < positive.length) {
result.push(positive[i]);
i++;
}
});
return result;
}
// 转换患者档案信息
function convertToCustomerParams(patient) {
return {
name: patient.name,
cardType: "身份证",
idCard: patient.card_id,
mobile: patient.mobile,
address: patient.address,
customerNumber: patient.registration_to,
};
}
// 转换出院记录信息
function convertToOutHospitalParams(patient) {
return {
customerNumber: patient.registration_to,
name: patient.name,
cardType: patient.card_type,
idCard: patient.card_id,
visitId: patient.visit_id,
visitTime: patient.visit_time,
deptName: patient.visit_dept,
doctor: patient.doctor_name,
diagnosisId: patient.diagnosis_id,
diagnosisName: patient.diagnosis_name,
chiefComplaint: patient.chief_complaint,
disposalPlan: patient.deal_with,
amount: patient.fee,
};
}
// 转换住院记录信息
function convertToInHospitalParams(patient) {
return {
customerNumber: patient.registration_to,
name: patient.name,
cardType: patient.card_type,
idCard: patient.card_id,
hospitalizationId: patient.hospitalization_id,
hospitalizationStatus: patient.hospitalization_status,
inhosDate: patient.admission_time,
outhosDate: patient.discharge_time,
hospitalizationDays: patient.hospitalization_days,
deptName: patient.dept_name,
wardName: patient.wardname,
bedNo: patient.bed_no,
doctor: patient.doctor_name,
nurseName: patient.nurse_name,
diagnosisId: patient.diagnosis_id,
diagnosisName: patient.diagnosis_name,
operationId: patient.operation_id,
operation: patient.operation_name,
operationDate: patient.operation_date,
amount: patient.fee,
};
}
// I住院O门诊E急诊H体检
// 转换费用记录信息
function convertToFeeParams(patient) {
const billTypeObj = {
I: "住院",
O: "门诊",
E: "急诊",
H: "体检",
};
return {
customerNumber: patient.registration_to,
name: patient.name,
cardType: patient.card_type,
idCard: patient.card_id,
orderNo: patient.order_no,
billDept: patient.bill_dept,
billDoctor: patient.bill_doctor,
doctorAdvice: patient.doctor_advice,
billTime: patient.bill_time,
orderName: patient.order_name,
orderStatus: patient.order_status,
projectPrice: patient.project_price,
projectCount: patient.project_count,
totalFee: patient.total_fee,
payTime: patient.pay_time,
payment: patient.payment,
projectName: patient.project_name,
projectId: patient.project_id,
payType: patient.pay_type,
billId: patient.bill_id,
settlementTime: patient.settlement_time,
billAdm: patient.bill_adm,
billType: billTypeObj[patient.bill_type],
};
}