u
This commit is contained in:
1 parent
c62c9d080b
commit
6a8c31e20c
29 files changed
+1454
-357
No files matched your search
@@ -160,6 +160,138 @@ func (q *Queries) ListMoneyRecords(ctx context.Context, arg ListMoneyRecordsPara
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listMoneyRecordsByLineAnalysis = `-- name: ListMoneyRecordsByLineAnalysis :many
|
||||
SELECT
|
||||
CASE
|
||||
WHEN $1 = 0 THEN to_char(mr.record_time, 'DD') -- 日分析,转换为文本
|
||||
WHEN $1 = 1 THEN to_char(mr.record_time, 'MM') -- 月分析,转换为文本
|
||||
WHEN $1 = 2 THEN to_char(mr.record_time, 'YYYY') -- 年分析,转换为文本
|
||||
END AS period,
|
||||
SUM(mr.amount)::DECIMAL AS total_amount
|
||||
FROM
|
||||
money_record mr
|
||||
LEFT JOIN
|
||||
money_user_category muc ON mr.category_id = muc.id -- 连接 money_user_category 获取 type
|
||||
LEFT JOIN
|
||||
space_user su ON su.user_id = $2 -- 连接 space_user 表,查找该用户在空间中的信息
|
||||
LEFT JOIN
|
||||
space s ON s.id = su.space_id -- 连接 space 表,获取空间信息
|
||||
WHERE
|
||||
(
|
||||
(su.user_id IS NOT NULL) -- 用户在空间,查询该空间内所有人的数据
|
||||
OR (mr.user_id = $1) -- 用户不在空间,查询该用户个人的账本数据
|
||||
)
|
||||
AND mr.record_time BETWEEN $3 AND $4 -- 时间范围
|
||||
AND muc.type = $5 -- 收入或支出类型
|
||||
GROUP BY
|
||||
period
|
||||
ORDER BY
|
||||
period
|
||||
`
|
||||
|
||||
type ListMoneyRecordsByLineAnalysisParams struct {
|
||||
Column1 interface{}
|
||||
UserID int64
|
||||
RecordTime pgtype.Date
|
||||
RecordTime_2 pgtype.Date
|
||||
Type int32
|
||||
}
|
||||
|
||||
type ListMoneyRecordsByLineAnalysisRow struct {
|
||||
Period interface{}
|
||||
TotalAmount pgtype.Numeric
|
||||
}
|
||||
|
||||
// 折线图:按天、月、年汇总金额
|
||||
func (q *Queries) ListMoneyRecordsByLineAnalysis(ctx context.Context, arg ListMoneyRecordsByLineAnalysisParams) ([]ListMoneyRecordsByLineAnalysisRow, error) {
|
||||
rows, err := q.db.Query(ctx, listMoneyRecordsByLineAnalysis,
|
||||
arg.Column1,
|
||||
arg.UserID,
|
||||
arg.RecordTime,
|
||||
arg.RecordTime_2,
|
||||
arg.Type,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []ListMoneyRecordsByLineAnalysisRow
|
||||
for rows.Next() {
|
||||
var i ListMoneyRecordsByLineAnalysisRow
|
||||
if err := rows.Scan(&i.Period, &i.TotalAmount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const listMoneyRecordsByPieAnalysis = `-- name: ListMoneyRecordsByPieAnalysis :many
|
||||
SELECT
|
||||
muc.name,
|
||||
SUM(mr.amount)::DECIMAL AS total_amount
|
||||
FROM
|
||||
money_record mr
|
||||
LEFT JOIN
|
||||
money_user_category muc ON mr.category_id = muc.id
|
||||
LEFT JOIN
|
||||
space_user su ON su.user_id = $1 -- 连接 space_user 表,查找该用户在空间中的信息
|
||||
LEFT JOIN
|
||||
space s ON s.id = su.space_id -- 连接 space 表,获取空间信息
|
||||
WHERE
|
||||
(
|
||||
(su.user_id IS NOT NULL) -- 用户在空间,查询该空间内所有人的数据
|
||||
OR (mr.user_id = $1) -- 用户不在空间,查询该用户个人的账本数据
|
||||
)
|
||||
AND mr.record_time BETWEEN $2 AND $3 -- 时间范围
|
||||
AND muc.type = $4 -- 收入或支出类型
|
||||
GROUP BY
|
||||
muc.name
|
||||
ORDER BY
|
||||
total_amount DESC
|
||||
`
|
||||
|
||||
type ListMoneyRecordsByPieAnalysisParams struct {
|
||||
UserID int64
|
||||
RecordTime pgtype.Date
|
||||
RecordTime_2 pgtype.Date
|
||||
Type int32
|
||||
}
|
||||
|
||||
type ListMoneyRecordsByPieAnalysisRow struct {
|
||||
Name pgtype.Text
|
||||
TotalAmount pgtype.Numeric
|
||||
}
|
||||
|
||||
// 饼图:按类别汇总金额
|
||||
func (q *Queries) ListMoneyRecordsByPieAnalysis(ctx context.Context, arg ListMoneyRecordsByPieAnalysisParams) ([]ListMoneyRecordsByPieAnalysisRow, error) {
|
||||
rows, err := q.db.Query(ctx, listMoneyRecordsByPieAnalysis,
|
||||
arg.UserID,
|
||||
arg.RecordTime,
|
||||
arg.RecordTime_2,
|
||||
arg.Type,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []ListMoneyRecordsByPieAnalysisRow
|
||||
for rows.Next() {
|
||||
var i ListMoneyRecordsByPieAnalysisRow
|
||||
if err := rows.Scan(&i.Name, &i.TotalAmount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const updateMoneyRecord = `-- name: UpdateMoneyRecord :exec
|
||||
UPDATE money_record
|
||||
SET
|
||||
|
||||
Reference in new issue
Block a user