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.
116 lines
2.9 KiB
116 lines
2.9 KiB
{
|
|
"properties" : { },
|
|
"id" : "2b3c4d5e6f748590a1b2c3d4e5f6789",
|
|
"script" : null,
|
|
"groupId" : "f8e3d2c1b0a94e5f8a7b6c5d4e3f2a1",
|
|
"name" : "实时交易统计",
|
|
"createTime" : 1780876800000,
|
|
"updateTime" : 1780803706100,
|
|
"lock" : null,
|
|
"createBy" : "admin",
|
|
"updateBy" : "admin",
|
|
"path" : "/real-time-stats",
|
|
"method" : "GET",
|
|
"parameters" : [ {
|
|
"name" : "dimension",
|
|
"value" : null,
|
|
"description" : "时间维度:day(当天)/week(近一周)/month(近一月)/year(当年),不传则返回全部",
|
|
"required" : false,
|
|
"dataType" : "String",
|
|
"type" : null,
|
|
"defaultValue" : null,
|
|
"validateType" : null,
|
|
"error" : null,
|
|
"expression" : null,
|
|
"children" : null
|
|
} ],
|
|
"options" : [ ],
|
|
"requestBody" : "",
|
|
"headers" : [ ],
|
|
"paths" : [ ],
|
|
"responseBody" : null,
|
|
"description" : "实时交易统计:牦牛交易总量、订单交易总量、销售商户数量、采购商户数量,按当天/近一周/近一月/当年统计(只读查询)",
|
|
"requestBodyDefinition" : null,
|
|
"responseBodyDefinition" : null
|
|
}
|
|
================================
|
|
// 只读统计已完成订单,不修改任何数据
|
|
var sql = """
|
|
SELECT
|
|
dim,
|
|
COALESCE(SUM(quantity), 0) AS yak_total_volume,
|
|
COUNT(*) AS order_total_volume,
|
|
COUNT(DISTINCT seller_id) AS seller_count,
|
|
COUNT(DISTINCT buyer_id) AS buyer_count
|
|
FROM (
|
|
SELECT 'day' AS dim, quantity, seller_id, buyer_id
|
|
FROM yak_sn_order
|
|
WHERE del_flag = '0'
|
|
AND status = 'COMPLETED'
|
|
AND transaction_time >= CURRENT_DATE
|
|
AND transaction_time < CURRENT_DATE + INTERVAL '1 day'
|
|
|
|
UNION ALL
|
|
|
|
SELECT 'week' AS dim, quantity, seller_id, buyer_id
|
|
FROM yak_sn_order
|
|
WHERE del_flag = '0'
|
|
AND status = 'COMPLETED'
|
|
AND transaction_time >= CURRENT_DATE - INTERVAL '6 days'
|
|
AND transaction_time < CURRENT_DATE + INTERVAL '1 day'
|
|
|
|
UNION ALL
|
|
|
|
SELECT 'month' AS dim, quantity, seller_id, buyer_id
|
|
FROM yak_sn_order
|
|
WHERE del_flag = '0'
|
|
AND status = 'COMPLETED'
|
|
AND transaction_time >= CURRENT_DATE - INTERVAL '29 days'
|
|
AND transaction_time < CURRENT_DATE + INTERVAL '1 day'
|
|
|
|
UNION ALL
|
|
|
|
SELECT 'year' AS dim, quantity, seller_id, buyer_id
|
|
FROM yak_sn_order
|
|
WHERE del_flag = '0'
|
|
AND status = 'COMPLETED'
|
|
AND transaction_time >= DATE_TRUNC('year', CURRENT_DATE)
|
|
AND transaction_time < CURRENT_DATE + INTERVAL '1 day'
|
|
) t
|
|
GROUP BY dim
|
|
ORDER BY dim
|
|
"""
|
|
|
|
var rows = db.select(sql)
|
|
|
|
var createEmptyStats = () => {
|
|
return {
|
|
yakTotalVolume: 0,
|
|
orderTotalVolume: 0,
|
|
sellerCount: 0,
|
|
buyerCount: 0
|
|
}
|
|
}
|
|
|
|
var result = {
|
|
day: createEmptyStats(),
|
|
week: createEmptyStats(),
|
|
month: createEmptyStats(),
|
|
year: createEmptyStats()
|
|
}
|
|
|
|
for (row in rows) {
|
|
result[row.dim] = {
|
|
yakTotalVolume: row.yakTotalVolume,
|
|
orderTotalVolume: row.orderTotalVolume,
|
|
sellerCount: row.sellerCount,
|
|
buyerCount: row.buyerCount
|
|
}
|
|
}
|
|
|
|
var dim = dimension
|
|
if (dim && result[dim]) {
|
|
return result[dim]
|
|
}
|
|
|
|
return result
|
|
|