You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
{
|
|
"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
|
|
|