{ "properties" : { }, "id" : "7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2", "script" : null, "groupId" : "f8e3d2c1b0a94e5f8a7b6c5d4e3f2a1", "name" : "牦牛销售类型统计", "createTime" : 1780880400000, "updateTime" : null, "lock" : null, "createBy" : "admin", "updateBy" : "admin", "path" : "/yak-sales-type-stats", "method" : "GET", "parameters" : [ ], "options" : [ ], "requestBody" : "", "headers" : [ ], "paths" : [ ], "responseBody" : null, "description" : "牦牛销售类型统计:按订单 purpose 归类为屠宰/养殖/其他,统计已完成订单牦牛头数与占比(只读)。", "requestBodyDefinition" : null, "responseBodyDefinition" : null } ================================ // 只读查询,不修改任何数据 // 数据源 yak_sn_order.purpose,按用途关键词归类 var sql = """ SELECT category AS name, COALESCE(SUM(quantity), 0) AS value FROM ( SELECT o.quantity, CASE WHEN TRIM(COALESCE(o.purpose, '')) ~* '(屠宰|餐饮|肉食|宰杀)' THEN '屠宰用途' WHEN TRIM(COALESCE(o.purpose, '')) ~* '(养殖|繁育|种|批发|转售)' THEN '养殖用途' ELSE '其他用途' END AS category FROM yak_sn_order o WHERE o.del_flag = '0' AND o.status = 'COMPLETED' ) t GROUP BY category """ var rows = db.select(sql) var categories = ['屠宰用途', '养殖用途', '其他用途'] var valueMap = {} for (row in rows) { valueMap[row.name] = row.value ? row.value : 0 } var total = 0 for (cat in categories) { var count = valueMap[cat] ? valueMap[cat] : 0 total = total + count } var result = [] for (cat in categories) { var count = valueMap[cat] ? valueMap[cat] : 0 var percent = 0 if (total > 0) { percent = (count * 100.0) / total } result.push({ name: cat, value: count, percent: percent }) } return result