{ "properties" : { }, "id" : "2b3c4d5e6f748590a1b2c3d4e5f6789", "script" : null, "groupId" : "f8e3d2c1b0a94e5f8a7b6c5d4e3f2a1", "name" : "实时交易统计", "createTime" : 1780876800000, "updateTime" : 1781365000000, "lock" : null, "createBy" : "admin", "updateBy" : "admin", "path" : "/real-time-stats", "method" : "GET", "parameters" : [ { "name" : "dimension", "value" : null, "description" : "时间维度:day(最新统计日)/week(近7天)/month(近30天),不传则返回全部", "required" : false, "dataType" : "String", "type" : null, "defaultValue" : null, "validateType" : null, "error" : null, "expression" : null, "children" : null } ], "options" : [ ], "requestBody" : "", "headers" : [ ], "paths" : [ ], "responseBody" : null, "description" : "实时交易统计:数据源 gov_count_item(只读)。key=mnjyzl/jdjyzl/xsshsl/cgshsl,按 count_date 汇总。", "requestBodyDefinition" : null, "responseBodyDefinition" : null } ================================ // gov_count_item 指标 key: // mnjyzl 牦牛交易总量 // jdjyzl 订单交易总量 // xsshsl 销售商户数量 // cgshsl 采购商户数量 // 同一 key + count_date 可能有多条,取 MAX(value); // 交易量类(mnjyzl/jdjyzl)在 week/month 内按日求和,商户数类取区间内最大值。 var sql = """ WITH daily AS ( SELECT key, count_date, MAX(value) AS value FROM gov_count_item WHERE TRIM(name) IN ( '牦牛交易总量', '订单交易总量', '销售商户数量', '采购商户数量' ) GROUP BY key, count_date ), anchor AS ( SELECT MAX(count_date) AS latest_date FROM daily ), day_stats AS ( SELECT d.key, d.value FROM daily d CROSS JOIN anchor a WHERE d.count_date = a.latest_date ), week_stats AS ( SELECT d.key, CASE WHEN d.key IN ('mnjyzl', 'jdjyzl') THEN SUM(d.value) ELSE MAX(d.value) END AS value FROM daily d CROSS JOIN anchor a WHERE d.count_date >= a.latest_date - INTERVAL '6 days' GROUP BY d.key ), month_stats AS ( SELECT d.key, CASE WHEN d.key IN ('mnjyzl', 'jdjyzl') THEN SUM(d.value) ELSE MAX(d.value) END AS value FROM daily d CROSS JOIN anchor a WHERE d.count_date >= a.latest_date - INTERVAL '29 days' GROUP BY d.key ) SELECT 'day' AS dim, key, value FROM day_stats UNION ALL SELECT 'week' AS dim, key, value FROM week_stats UNION ALL SELECT 'month' AS dim, key, value FROM month_stats ORDER BY dim, key """ var rows = db.select(sql) var createEmptyStats = () => { return { mnjyzl: 0, jdjyzl: 0, xsshsl: 0, cgshsl: 0 } } var result = { day: createEmptyStats(), week: createEmptyStats(), month: createEmptyStats() } for (row in rows) { var dim = row.dim var metricKey = row.key if (result[dim]) { result[dim][metricKey] = row.value != null ? row.value : 0 } } var dim = dimension if (dim && result[dim]) { return result[dim] } return result