初次提交代码
This commit is contained in:
93
scripts/tmp_check_dj202500868.js
Normal file
93
scripts/tmp_check_dj202500868.js
Normal file
@@ -0,0 +1,93 @@
|
||||
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 = 'DJ202500868';
|
||||
const rows = await prisma.invoice_application_match_view.findMany({
|
||||
where: { projectNumber: { contains: project } },
|
||||
select: {
|
||||
dataId: true,
|
||||
invoiceJobNumber: true,
|
||||
projectNumber: true,
|
||||
yuJiBaoXiaoDiSanFangChengBenYuan: true,
|
||||
kai_piao_ri_qi: true,
|
||||
},
|
||||
});
|
||||
const filtered = rows.filter((r) => splitProjectNumbers(r.projectNumber).includes(project));
|
||||
const dataIds = [...new Set(filtered.map((r) => r.dataId).filter(Boolean))];
|
||||
|
||||
const details =
|
||||
dataIds.length > 0
|
||||
? await prisma.invoice_amount_details.findMany({
|
||||
where: {
|
||||
dataid: { in: dataIds },
|
||||
project_number: project,
|
||||
},
|
||||
select: {
|
||||
dataid: true,
|
||||
project_number: true,
|
||||
invoice_amount: true,
|
||||
yu_ji_bao_xiao_di_san_fang_cheng_ben: true,
|
||||
},
|
||||
})
|
||||
: [];
|
||||
|
||||
const mainByDataId = dataIds.map((id) => {
|
||||
const arr = filtered.filter((r) => r.dataId === id);
|
||||
const uniqueMainThirdParty = [...new Set(arr.map((r) => String(r.yuJiBaoXiaoDiSanFangChengBenYuan ?? '')).filter(Boolean))];
|
||||
const detailThirdPartyRaw = details
|
||||
.filter((d) => d.dataid === id)
|
||||
.map((d) => String(d.yu_ji_bao_xiao_di_san_fang_cheng_ben ?? ''))
|
||||
.filter((s) => s !== '');
|
||||
return {
|
||||
dataId: id,
|
||||
mainCount: arr.length,
|
||||
uniqueMainThirdParty,
|
||||
detailRows: details.filter((d) => d.dataid === id).length,
|
||||
detailThirdPartyRaw,
|
||||
};
|
||||
});
|
||||
|
||||
const mainDedupByInvoiceKey = new Map();
|
||||
filtered.forEach((r) => {
|
||||
const key = `${r.dataId || ''}||${r.invoiceJobNumber || ''}`;
|
||||
if (!mainDedupByInvoiceKey.has(key)) {
|
||||
mainDedupByInvoiceKey.set(key, Number(r.yuJiBaoXiaoDiSanFangChengBenYuan || 0));
|
||||
}
|
||||
});
|
||||
const mainTotal = [...mainDedupByInvoiceKey.values()].reduce((s, n) => s + n, 0);
|
||||
|
||||
const detailTotal = details.reduce((s, r) => s + Number(r.yu_ji_bao_xiao_di_san_fang_cheng_ben || 0), 0);
|
||||
|
||||
console.log(
|
||||
JSON.stringify(
|
||||
{
|
||||
project,
|
||||
filteredCount: filtered.length,
|
||||
dataIds,
|
||||
mainByDataId,
|
||||
mainTotal,
|
||||
detailTotal,
|
||||
},
|
||||
null,
|
||||
2
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
process.exitCode = 1;
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
92
scripts/tmp_check_jn202600186.js
Normal file
92
scripts/tmp_check_jn202600186.js
Normal 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();
|
||||
});
|
||||
Reference in New Issue
Block a user