import fs from 'node:fs'; const J = JSON.parse(fs.readFileSync('.cdp/out/items-7d-30d.json', 'utf8')); const N = s => Number(s) || 0; const L = []; for (const dt of ['recent7d', 'recent30d']) { const it = J.data[dt].items; const dead = it.filter(x => N(x.ord) === 0); const deadPv = dead.reduce((a, b) => a + N(b.pv), 0); const live = it.filter(x => N(x.ord) > 0); // 零成交类目 const cats = {}; for (const x of dead) cats[x.c4 || '?'] = (cats[x.c4 || '?'] || 0) + 1; const allCats = new Set(it.map(x => x.c4)); const deadOnlyCats = [...allCats].filter(c => !it.some(x => x.c4 === c && N(x.ord) > 0)); L.push(`${dt}: 商品 ${it.length} | 零成交 ${dead.length} (${(dead.length / it.length * 100).toFixed(1)}%) | 吃掉曝光 ${deadPv} | 有成交 ${live.length}`); L.push(` 涉及类目 ${new Set(dead.map(x => x.c4)).size} 个;其中"整类目 0 成交"的类目 ${deadOnlyCats.length} 个,这些类目共 ${deadOnlyCats.reduce((a, c) => a + cats[c], 0)} 个商品`); L.push(''); } fs.writeFileSync('.cdp/out/dead-stats.txt', L.join('\n'), 'utf8');