This commit is contained in:
oneao committed 2025-11-16 20:48:56 +08:00
1 parent c2c5cc92af
commit caed43a011
60 files changed
+1710 -1272

No files matched your search

@@ -7,8 +7,10 @@ import (
"base-go-v2/internal/utils/idgen"
"base-go-v2/internal/utils/mapx"
"fmt"
"github.com/shopspring/decimal"
"sort"
"time"
"github.com/shopspring/decimal"
)
func InitMoneyRouter(r *router.Router) {
@@ -54,7 +56,6 @@ func InitDefaultCategories(userID int64) error {
return nil
}
// 根据
func queryMoneyRecords(c *router.Context) error {
bodyData, err := c.GetBodyWithRequired("record_time") // "YYYY-MM"
if err != nil {
@@ -72,38 +73,37 @@ func queryMoneyRecords(c *router.Context) error {
// 获取当月最后一天
endTime := startTime.AddDate(0, 1, 0).Add(-time.Nanosecond)
// SQL: money_record LEFT JOIN money_user_category
// 查询 SQL
sqlStr := fmt.Sprintf(`
SELECT
mr.*,
muc.name AS category_name,
muc.icon AS category_icon,
muc.type AS category_type
FROM money_record mr
LEFT JOIN money_user_category muc ON mr.category_id = muc.id
WHERE mr.create_time BETWEEN '%s' AND '%s'
ORDER BY mr.create_time DESC
`, startTime.Format("2006-01-02 15:04:05"), endTime.Format("2006-01-02 15:04:05"))
SELECT
mr.*,
muc.name AS category_name,
muc.icon AS category_icon,
muc.type AS category_type
FROM money_record mr
LEFT JOIN money_user_category muc ON mr.category_id = muc.id
WHERE mr.create_time BETWEEN '%s' AND '%s'
ORDER BY mr.record_time DESC, mr.create_time DESC
`, startTime.Format("2006-01-02 15:04:05"), endTime.Format("2006-01-02 15:04:05"))
// 查询
list, err := db.SelectBySql(sqlStr)
if err != nil {
return c.AddError(err)
}
// 分组数据
grouped := mapx.New() // mapx.M
grouped := mapx.New()
totalIncome := decimal.NewFromInt(0)
totalExpense := decimal.NewFromInt(0)
for _, r := range list {
row := mapx.M(r)
createTime, ok := row["create_time"].(time.Time)
recordTime, ok := row["record_time"].(time.Time)
if !ok {
continue
}
day := createTime.Format("2006-01-02")
day := recordTime.Format("2006-01-02")
// 获取当天数据
dayDataI := grouped.Get(day)
@@ -129,15 +129,8 @@ func queryMoneyRecords(c *router.Context) error {
continue
}
dayIncome, err := decimal.NewFromString(dayData.GetString("income"))
if err != nil {
dayIncome = decimal.NewFromInt(0)
}
dayExpense, err := decimal.NewFromString(dayData.GetString("expense"))
if err != nil {
dayExpense = decimal.NewFromInt(0)
}
dayIncome, _ := decimal.NewFromString(dayData.GetString("income"))
dayExpense, _ := decimal.NewFromString(dayData.GetString("expense"))
if categoryType == 0 {
dayIncome = dayIncome.Add(amount)
@@ -153,8 +146,28 @@ func queryMoneyRecords(c *router.Context) error {
grouped.Set(day, dayData)
}
// 对日期排序,最新在前
dates := make([]string, 0, len(grouped))
for k := range grouped {
dates = append(dates, k)
}
sort.Slice(dates, func(i, j int) bool {
return dates[i] > dates[j] // 倒序
})
// 构建最终 records 数组
recordsArr := make([]mapx.M, 0, len(dates))
for _, date := range dates {
dayData := grouped.Get(date).(mapx.M)
recordsArr = append(recordsArr, mapx.New().
Set("record_time", date).
Set("income", dayData.GetString("income")).
Set("expense", dayData.GetString("expense")).
Set("records", dayData.GetArray("records")))
}
result := mapx.New().
Set("records", grouped).
Set("records", recordsArr).
Set("total_income", totalIncome.String()).
Set("total_expense", totalExpense.String())
@@ -164,26 +177,27 @@ func queryMoneyRecords(c *router.Context) error {
func getUserCategory(c *router.Context) error {
userId := c.GetUserID()
// 查询当前用户的分类
userCategories, err := db.SelectList("money_user_category",
// 查询当前用户的分类,已经按 sort_number 升序
userCategories, err := db.SelectList(
"money_user_category",
db.BuildWhereString(mapx.New().Set("user_id", userId)),
"sort_number ASC")
"sort_number ASC",
)
if err != nil {
return c.AddError(err)
}
// 按 type 分组
// 按 type 分组并保持顺序
result := map[string][]mapx.M{
"income": {},
"expense": {},
}
for _, cat := range userCategories {
switch cat.GetInt("type") {
case 0:
t := cat.GetInt("type")
if t == 0 {
result["income"] = append(result["income"], cat)
case 1:
} else if t == 1 {
result["expense"] = append(result["expense"], cat)
}
}