初次提交代码

This commit is contained in:
2026-05-27 14:12:10 +08:00
parent 321aa5b319
commit ca32aa87e7
88 changed files with 19000 additions and 1 deletions

View File

@@ -0,0 +1,92 @@
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
function splitProjectNumbers(value) {
return String(value ?? '')
.split(/[,,、\s]+/)
.map((s) => s.trim())
.filter(Boolean);
}
async function main() {
const project = 'JN202600186';
const mainRows = await prisma.invoice_application_match_view.findMany({
where: { projectNumber: { contains: project } },
select: {
dataId: true,
invoiceJobNumber: true,
projectNumber: true,
bu_han_shui_jin_e_yuan_duo: true,
han_shui_jin_e_yuan_duo: true,
bu_han_shui_jin_e_yuan_du: true,
bu_han_shui_jin_e_yuan_other: true,
bu_han_shui_jin_e_yuan_da: true,
bu_han_shui_jin_e_yuan_da_du: true,
kai_piao_ri_qi: true,
},
});
const filteredRows = mainRows.filter((r) => splitProjectNumbers(r.projectNumber).includes(project));
const ids = [...new Set(filteredRows.map((r) => r.dataId).filter(Boolean))];
const detailRows =
ids.length > 0
? await prisma.invoice_amount_details.findMany({
where: {
dataid: { in: ids },
project_number: project,
},
select: {
dataid: true,
project_number: true,
invoice_amount: true,
yu_ji_bao_xiao_di_san_fang_cheng_ben: true,
},
})
: [];
const summaryByDataId = ids.map((dataId) => {
const mainForDataId = filteredRows.filter((r) => r.dataId === dataId);
const detailForDataId = detailRows.filter((r) => r.dataid === dataId);
const duoBuHan = Number(mainForDataId.find((r) => r.bu_han_shui_jin_e_yuan_duo)?.bu_han_shui_jin_e_yuan_duo || 0);
const duoHan = Number(mainForDataId.find((r) => r.han_shui_jin_e_yuan_duo)?.han_shui_jin_e_yuan_duo || 0);
const detailHanShuiSum = detailForDataId.reduce((s, r) => s + Number(r.invoice_amount || 0), 0);
const calcBuHan = duoHan > 0 ? (detailHanShuiSum * duoBuHan) / duoHan : detailHanShuiSum;
return {
dataId,
mainRowCount: mainForDataId.length,
detailRowCount: detailForDataId.length,
detailHanShuiSum,
duoBuHan,
duoHan,
calcBuHan,
detailSamples: detailForDataId.slice(0, 5),
};
});
const totalBuHan = summaryByDataId.reduce((s, r) => s + r.calcBuHan, 0);
console.log(
JSON.stringify(
{
project,
filteredCount: filteredRows.length,
ids,
summaryByDataId,
totalBuHan,
},
null,
2
)
);
}
main()
.catch((e) => {
console.error(e);
process.exitCode = 1;
})
.finally(async () => {
await prisma.$disconnect();
});