'use strict'; /** * 仓储中心物流转运异常 —— HTTP 路由(2026-10-21 新增) * ──────────────────────────────────────────────────────────────────────────── * GET /api/warehouse-logistics-exception/list * query: * date 核验日 'YYYY-MM-DD'(默认:已过 09:00 用今天,否则用昨天) * limit 明细条数上限(默认 500,最大 2000) * force 1 = 绕过 5 分钟结果缓存 * * 挂载见 src/index.js:`/api/warehouse-logistics-exception` + authMiddleware */ const express = require('express'); const { getLogisticsExceptions } = require('../services/warehouseLogisticsExceptionService'); const { CENTERS, EXCEPTION_TYPES, LOOKBACK_DAYS, VERIFY_HOUR, } = require('../services/warehouseLogisticsExceptionRegistry'); const router = express.Router(); function sendError(res, error, fallback) { const status = Number(error?.statusCode) || 500; console.error('[WarehouseLogisticsException]', { message: error?.message || fallback, code: error?.code || null, status, }); res.status(status).json({ success: false, error: error.message || fallback }); } // 转运异常总览:12 个发货仓异常单量 + 明细 router.get('/list', async (req, res) => { try { const data = await getLogisticsExceptions(req.query || {}); res.json({ success: true, data }); } catch (error) { sendError(res, error, '加载物流转运异常失败'); } }); // 口径元数据(不查库,秒回):页面文案与图例用它,避免前后端各写一套 router.get('/meta', (_req, res) => { res.json({ success: true, data: { verifyHour: VERIFY_HOUR, lookbackDays: LOOKBACK_DAYS, centers: CENTERS.map((c) => ({ key: c.key, name: c.name })), exceptionTypes: EXCEPTION_TYPES, }, }); }); module.exports = router;