- 新增 ProductInventorySnapshot / ProductInventorySnapshotRun 模型与正式迁移(条码×实际仓库) - 同步任务复用现有库存/云仓/档案读取,临时表+事务原子替换,advisory lock 防重叠,失败保留上一份快照 - 新增 15 分钟 systemd timer 安装脚本与同步脚本(身份校验、凭据走环境变量) - 列表/导出接口改读快照并展示 syncedAt,保留全零行过滤与导出字段选择
255 lines
15 KiB
JSON
255 lines
15 KiB
JSON
{
|
|
"name": "furniture-3d-system",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"worker:ai-image": "node scripts/run-ai-image-worker.mjs",
|
|
"predev": "npm run prisma:check-client-sync",
|
|
"dev": "next dev --webpack",
|
|
"build": "prisma generate && next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"test": "jest",
|
|
"test:watch": "jest --watch",
|
|
"test:coverage": "jest --coverage",
|
|
"clean:local": "node scripts/cleanup-local-artifacts.js",
|
|
"prisma:generate": "prisma generate",
|
|
"prisma:check-client-sync": "node scripts/check-prisma-client-sync.js",
|
|
"prisma:push": "node scripts/prisma-db-push-local.js",
|
|
"prisma:studio": "prisma studio",
|
|
"sync:supply-chain-product-archive": "tsx scripts/sync-supply-chain-product-archive.ts",
|
|
"sync:supply-chain-product-archive-daily": "tsx scripts/sync-supply-chain-product-archive-sales-performance-daily.ts",
|
|
"sync:supply-chain-product-archive-enrichment": "tsx scripts/sync-supply-chain-product-archive-enrichment.ts",
|
|
"backfill:product-archive-designer": "tsx scripts/backfill-product-archive-designer-from-jst-sku-info-manage.ts",
|
|
"backfill:product-archive-designer:apply": "tsx scripts/backfill-product-archive-designer-from-jst-sku-info-manage.ts --apply",
|
|
"backfill:product-archive-opshead": "tsx scripts/backfill-product-archive-opshead-from-jst-sku-info-manage.ts",
|
|
"backfill:product-archive-opshead:apply": "tsx scripts/backfill-product-archive-opshead-from-jst-sku-info-manage.ts --apply",
|
|
"backfill:product-archive-opshead:regular": "tsx scripts/backfill-product-archive-opshead-from-jst-sku-info-manage.ts --mode=regular",
|
|
"backfill:product-archive-opshead:regular:apply": "tsx scripts/backfill-product-archive-opshead-from-jst-sku-info-manage.ts --mode=regular --apply",
|
|
"backfill:product-archive-production-type": "tsx scripts/backfill-product-archive-production-type.ts",
|
|
"backfill:product-archive-production-type:apply": "tsx scripts/backfill-product-archive-production-type.ts --apply",
|
|
"sync:supply-chain-product-archive-sales-performance": "tsx scripts/sync-supply-chain-product-archive-sales-performance.ts",
|
|
"run:product-sabc": "tsx scripts/run-product-sabc.ts",
|
|
"compare:product-sabc-xlsx": "tsx scripts/compare-product-sabc-xlsx.ts",
|
|
"seed:local-product-sabc-xlsx": "tsx scripts/seed-local-product-sabc-xlsx.ts",
|
|
"sync:jst-sku-product-archive": "tsx scripts/sync-jst-sku-product-archive.ts",
|
|
"sync:bom-cost-reference": "tsx scripts/sync-bom-cost-reference.ts",
|
|
"backtest:bom-cost-reference": "tsx scripts/backtest-bom-cost-reference.ts",
|
|
"report:bom-cost-shadow-divergence": "tsx scripts/report-bom-cost-shadow-divergence.ts",
|
|
"report:bom-agent-baseline": "tsx scripts/report-bom-agent-baseline.ts",
|
|
"trial:bom-costing-agent": "tsx scripts/run-bom-costing-agent-trial.ts",
|
|
"import:yunshan-created-at": "tsx scripts/import-yunshan-product-created-at.ts",
|
|
"import:product-archive-drawing-media": "tsx scripts/import-product-archive-drawing-media.ts",
|
|
"db:verify-master-data": "node scripts/verify-master-data-foundation.js",
|
|
"db:verify-master-data:audit": "node scripts/verify-master-data-foundation.js --output .master-data-audits/foundation-hard-ready-gate-current.json --summary-output .master-data-audits/foundation-hard-ready-gate-current.summary.json --summary-stdout",
|
|
"db:verify-master-data:strict": "node scripts/verify-master-data-foundation.js --require-applied",
|
|
"db:verify-master-data:migration-status": "node scripts/verify-master-data-foundation.js --read-only-migration-status",
|
|
"db:verify-master-data:production-readonly": "node scripts/verify-master-data-foundation.js --read-only-quality --summary-output .master-data-audits/foundation-production-readonly-current.summary.json --summary-stdout",
|
|
"db:cleanup-master-data": "node scripts/apply-master-data-cleanup-plan.js",
|
|
"db:cleanup-master-data:validate": "node scripts/apply-master-data-cleanup-plan.js --validate-plan",
|
|
"db:cleanup-operation-logs": "tsx scripts/cleanup-operation-logs.ts",
|
|
"db:cleanup-operation-logs:apply": "tsx scripts/cleanup-operation-logs.ts --apply --confirm=cleanup-operation-logs",
|
|
"db:export-product-category-review": "node scripts/export-non-integrated-product-category-review.js",
|
|
"db:build-product-category-cleanup-plan": "node scripts/build-non-integrated-product-category-cleanup-plan.js",
|
|
"db:match-jst-product-category-cleanup-plan": "node scripts/match-jst-product-category-cleanup-plan.js",
|
|
"db:archive-jst-unresolved-products": "node scripts/archive-jst-unresolved-non-integrated-products.js",
|
|
"prisma:seed": "tsx prisma/seed.ts",
|
|
"open-platform:seed": "tsx scripts/seed-open-platform-demo.ts",
|
|
"type-check": "node scripts/run-type-check.js",
|
|
"storage:verify-config": "tsx scripts/verify-object-storage-config.ts",
|
|
"storage:migrate-historical-assets": "tsx scripts/migrate-historical-assets-to-qiniu.ts",
|
|
"storage:migrate-historical-assets:gate": "tsx scripts/migrate-historical-assets-to-qiniu.ts --fail-on-missing-sources",
|
|
"storage:migrate-historical-assets:apply": "tsx scripts/migrate-historical-assets-to-qiniu.ts --apply",
|
|
"storage:gc:audit": "tsx scripts/storage-gc.ts",
|
|
"storage:gc:apply": "tsx scripts/storage-gc.ts --apply",
|
|
"storage:inventory:filesystem": "tsx scripts/migrate-historical-assets-to-qiniu.ts --skip-database-scan --include-filesystem-inventory",
|
|
"storage:inventory:filesystem:apply": "tsx scripts/migrate-historical-assets-to-qiniu.ts --skip-database-scan --include-filesystem-inventory --apply",
|
|
"demo:create": "node scripts/create-demo-data.js",
|
|
"demo:setup": "npm run prisma:push && npm run demo:create",
|
|
"demo:update": "node scripts/update-demo-models.js",
|
|
"demo:refresh": "npm run prisma:push && npm run demo:update",
|
|
"thumbnails:backfill": "tsx scripts/backfill-asset-variant-thumbnails.ts",
|
|
"thumbnails:backfill:apply": "tsx scripts/backfill-asset-variant-thumbnails.ts --apply",
|
|
"materials:sync-textures": "tsx scripts/sync-material-textures.ts",
|
|
"materials:sync-textures:apply": "tsx scripts/sync-material-textures.ts --apply",
|
|
"materials:sync-standard": "tsx scripts/sync-standard-finishes.ts",
|
|
"materials:sync-standard:apply": "tsx scripts/sync-standard-finishes.ts --apply",
|
|
"sync:jst-sku-stock": "tsx scripts/sync-jst-sku-stock-products.ts",
|
|
"sync:product-inventory-snapshot": "tsx scripts/sync-product-inventory-snapshot.ts",
|
|
"image-search:model:prepare": "tsx scripts/prepare-product-archive-image-search-model.ts",
|
|
"image-search:index": "tsx scripts/index-product-archive-images.ts",
|
|
"repair:barcode-print:historical": "tsx scripts/repair-barcode-print-source-rows.ts",
|
|
"sync:oa-board": "tsx scripts/sync-oa-board.ts",
|
|
"sync:oa-board:apply": "tsx scripts/sync-oa-board.ts --apply",
|
|
"sync:oa-brand-planning": "tsx scripts/sync-oa-brand-planning-board.ts",
|
|
"sync:oa-brand-planning:apply": "tsx scripts/sync-oa-brand-planning-board.ts --apply",
|
|
"sync:oa-video-flow": "tsx scripts/sync-oa-video-flow-board.ts",
|
|
"sync:oa-video-flow:apply": "tsx scripts/sync-oa-video-flow-board.ts --apply",
|
|
"sync:oa-art-flow-raw": "tsx scripts/sync-oa-art-flow-raw.ts",
|
|
"sync:oa-art-flow-raw:apply": "tsx scripts/sync-oa-art-flow-raw.ts --apply",
|
|
"cache:oa-board:local": "tsx scripts/cache-oa-board-local-preview.ts",
|
|
"import:oa-board-activity-mappings": "tsx scripts/import-oa-board-activity-mappings.ts",
|
|
"import:oa-board-node-rules": "tsx scripts/import-oa-board-node-rules.ts",
|
|
"report:oa-board-activities": "tsx scripts/report-oa-board-activities.ts",
|
|
"sync:employee-directory": "tsx scripts/sync-employee-directory.ts",
|
|
"sync:employee-directory:apply": "tsx scripts/sync-employee-directory.ts --apply",
|
|
"sync:dingtalk-directory:apply": "tsx scripts/sync-dingtalk-directory.ts --apply",
|
|
"sync:external-jsreport": "tsx scripts/sync-external-readonly-to-jsreport.ts",
|
|
"sync:external-jsreport:apply": "tsx scripts/sync-external-readonly-to-jsreport.ts --apply",
|
|
"db:verify-master-data:truth": "node scripts/verify-master-data-truth-sources.js",
|
|
"db:verify-master-data:code": "node scripts/verify-master-data-code-boundaries.js",
|
|
"db:verify-master-data:all": "npm run db:verify-master-data:truth && npm run db:verify-master-data:code && npm run db:verify-master-data:migration-status && npm run db:verify-master-data",
|
|
"db:verify-master-data:all:strict": "npm run db:verify-master-data:truth && npm run db:verify-master-data:code && npm run db:verify-master-data:migration-status && npm run db:verify-master-data:strict",
|
|
"db:verify-master-data:readiness": "node scripts/verify-master-data-readiness.js",
|
|
"db:verify-master-data:readiness:audit": "node scripts/verify-master-data-readiness.js --output .master-data-audits/readiness-current.json",
|
|
"db:diagnose-prisma-migration-baseline": "node scripts/diagnose-prisma-migration-baseline.js",
|
|
"db:preflight-database-foundation-change": "node scripts/preflight-database-foundation-change.js",
|
|
"db:preflight-database-foundation-change:audit": "node scripts/preflight-database-foundation-change.js --output .master-data-audits/foundation-preflight-current.json",
|
|
"db:backup:postgres": "node scripts/create-postgres-backup.js",
|
|
"db:foundation:migrate": "node scripts/run-database-foundation-migrations.js",
|
|
"db:foundation:migrate:audit": "node scripts/run-database-foundation-migrations.js --output .master-data-audits/foundation-migrate-plan-current.json",
|
|
"db:foundation:apply-required": "node scripts/apply-master-data-foundation-migrations.js",
|
|
"db:foundation:apply-required:audit": "node scripts/apply-master-data-foundation-migrations.js --output .master-data-audits/foundation-required-migration-apply-plan-current.json",
|
|
"db:foundation:apply-structure-repair": "node scripts/apply-prisma-structure-repair.js",
|
|
"db:foundation:apply-structure-repair:audit": "node scripts/apply-prisma-structure-repair.js --output .master-data-audits/authorized-structure-repair-apply-plan-current.json",
|
|
"db:foundation:baseline-resolve": "node scripts/apply-prisma-baseline-resolve.js",
|
|
"db:foundation:rehearse-migration": "node scripts/rehearse-database-foundation-migration.js",
|
|
"db:foundation:rehearse-structure-repair": "node scripts/rehearse-prisma-structure-repair.js",
|
|
"db:foundation:baseline-repair-plan": "node scripts/plan-prisma-baseline-repair.js",
|
|
"db:foundation:plan-pre-sku-formalization-repair": "node scripts/plan-pre-sku-formalization-repair.js",
|
|
"db:foundation:validate-pre-sku-formalization-repair": "node scripts/plan-pre-sku-formalization-repair.js --validate-plan",
|
|
"db:foundation:apply-pre-sku-formalization-repair": "node scripts/apply-pre-sku-formalization-repair.js",
|
|
"db:foundation:audit": "node scripts/run-master-data-foundation-audit.js",
|
|
"db:foundation:audit:cleanup-template": "node scripts/run-master-data-foundation-audit.js --include-cleanup-template",
|
|
"db:foundation:audit:production-readonly": "node scripts/run-master-data-foundation-audit.js --production-read-only --output-dir .master-data-audits/foundation-production-readonly-current",
|
|
"db:foundation:verify-production-readonly": "node scripts/verify-production-readonly-foundation-manifest.js",
|
|
"db:foundation:audit:full": "node scripts/run-master-data-foundation-audit.js --include-cleanup-template --include-storage-migration-gate --use-docker-shadow --include-structure-repair-rehearsal --output-dir .master-data-audits/foundation-audit-current-goal",
|
|
"db:foundation:completion-checklist": "node scripts/print-master-data-foundation-checklist.js",
|
|
"db:foundation:decision-package": "node scripts/print-master-data-foundation-decision-package.js"
|
|
},
|
|
"dependencies": {
|
|
"@aws-sdk/client-s3": "^3.948.0",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@hookform/resolvers": "^5.2.2",
|
|
"@huggingface/transformers": "3.8.1",
|
|
"@prisma/adapter-pg": "^7.3.0",
|
|
"@prisma/client": "^7.3.0",
|
|
"@react-three/drei": "^10.7.7",
|
|
"@react-three/fiber": "^9.5.0",
|
|
"@tanstack/react-query": "^5.90.20",
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/qrcode": "^1.5.6",
|
|
"autoprefixer": "^10.4.22",
|
|
"bcryptjs": "^3.0.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"crypto-js": "^4.2.0",
|
|
"date-fns": "^4.1.0",
|
|
"dockerode": "^4.0.9",
|
|
"exceljs": "^4.4.0",
|
|
"framer-motion": "^12.29.2",
|
|
"gsap": "^3.12.5",
|
|
"html2canvas": "^1.4.1",
|
|
"ioredis": "^5.9.2",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"jszip": "^3.10.1",
|
|
"lucide-react": "^0.563.0",
|
|
"mssql": "^12.5.0",
|
|
"mysql2": "^3.15.3",
|
|
"nanoid": "^5.1.6",
|
|
"next": "^16.1.6",
|
|
"obj2gltf": "^3.2.0",
|
|
"pg": "^8.17.2",
|
|
"pinyin-pro": "^3.29.5",
|
|
"postcss": "^8.5.6",
|
|
"print-js": "^1.6.0",
|
|
"puppeteer": "^24.40.0",
|
|
"qiniu": "^7.15.2",
|
|
"qr-scanner": "^1.4.2",
|
|
"qrcode": "^1.5.4",
|
|
"react": "^19.2.4",
|
|
"react-dom": "^19.2.4",
|
|
"react-hook-form": "^7.54.2",
|
|
"server-only": "^0.0.1",
|
|
"sharp": "^0.34.5",
|
|
"ssh2": "^1.17.0",
|
|
"tailwind-merge": "^3.4.0",
|
|
"three": "^0.182.0",
|
|
"uuid": "^11.1.1",
|
|
"xlsx": "^0.18.5",
|
|
"zod": "^4.3.6",
|
|
"zustand": "^5.0.2"
|
|
},
|
|
"overrides": {
|
|
"@react-three/drei": {
|
|
"react": "19.2.4",
|
|
"react-dom": "19.2.4"
|
|
},
|
|
"@react-three/fiber": {
|
|
"react": "19.2.4",
|
|
"react-dom": "19.2.4"
|
|
},
|
|
"@react-spring/three": {
|
|
"react": "19.2.4",
|
|
"react-dom": "19.2.4"
|
|
},
|
|
"@react-spring/animated": {
|
|
"react": "19.2.4"
|
|
},
|
|
"@react-spring/core": {
|
|
"react": "19.2.4"
|
|
},
|
|
"@react-spring/shared": {
|
|
"react": "19.2.4"
|
|
}
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/crypto-js": "^4.2.2",
|
|
"@types/dockerode": "^4.0.1",
|
|
"@types/ioredis": "^4.28.10",
|
|
"@types/jest": "^30.0.0",
|
|
"@types/node": "^22.19.7",
|
|
"@types/pg": "^8.16.0",
|
|
"@types/react": "^19.2.10",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@types/ssh2": "^1.15.5",
|
|
"@types/supertest": "^6.0.3",
|
|
"@types/three": "^0.182.0",
|
|
"babel-plugin-react-compiler": "1.0.0",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "^16.1.6",
|
|
"fast-check": "^4.5.3",
|
|
"jest": "^30.2.0",
|
|
"jest-environment-jsdom": "^30.2.0",
|
|
"playwright": "^1.59.1",
|
|
"prisma": "^7.3.0",
|
|
"supertest": "^7.2.2",
|
|
"tailwindcss": "^4.1.18",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "^5"
|
|
},
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": [
|
|
"@parcel/watcher",
|
|
"@prisma/engines",
|
|
"cpu-features",
|
|
"esbuild",
|
|
"onnxruntime-node",
|
|
"prisma",
|
|
"protobufjs",
|
|
"puppeteer",
|
|
"sharp",
|
|
"ssh2",
|
|
"unrs-resolver"
|
|
]
|
|
}
|
|
}
|