u
This commit is contained in:
1 parent
33113f279c
commit
c2c5cc92af
16 files changed
+864
-352
No files matched your search
@@ -8,10 +8,12 @@ import (
|
||||
"base-go-v2/internal/utils/mapx"
|
||||
"fmt"
|
||||
"github.com/shopspring/decimal"
|
||||
"time"
|
||||
)
|
||||
|
||||
func InitMoneyRouter(r *router.Router) {
|
||||
group := r.Group("money")
|
||||
group.POST("/query", queryMoneyRecords)
|
||||
group.GET("/category", getUserCategory)
|
||||
group.POST("/insert", insertMoneyRecord)
|
||||
group.POST("/update", updateMoneyRecord)
|
||||
@@ -20,10 +22,8 @@ func InitMoneyRouter(r *router.Router) {
|
||||
|
||||
// InitDefaultCategories 初始化系统默认分类到用户分类表
|
||||
func InitDefaultCategories(userID int64) error {
|
||||
fmt.Println("进入 InitDefaultCategories ===")
|
||||
|
||||
// 1. 查询系统分类表
|
||||
sysCategories, err := db.FindAll("money_sys_category", "sort_number")
|
||||
sysCategories, err := db.SelectList("money_sys_category", "", "sort_number")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -31,7 +31,6 @@ func InitDefaultCategories(userID int64) error {
|
||||
fmt.Printf("系统分类数量: %d\n", len(sysCategories))
|
||||
|
||||
// 2. 构建批量插入数据
|
||||
//userCategories := make([]mapx.M, 0, len(sysCategories))
|
||||
userCategories := mapx.NewArr(len(sysCategories))
|
||||
|
||||
for i, row := range sysCategories {
|
||||
@@ -52,15 +51,124 @@ func InitDefaultCategories(userID int64) error {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println("初始化用户分类成功!")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 根据
|
||||
func queryMoneyRecords(c *router.Context) error {
|
||||
bodyData, err := c.GetBodyWithRequired("record_time") // "YYYY-MM"
|
||||
if err != nil {
|
||||
return c.AddError(err)
|
||||
}
|
||||
|
||||
recordMonth := bodyData.GetString("record_time")
|
||||
|
||||
// 解析年月
|
||||
startTime, err := time.Parse("2006-01", recordMonth)
|
||||
if err != nil {
|
||||
return c.AddError(fmt.Errorf("invalid record_time format: %v", err))
|
||||
}
|
||||
|
||||
// 获取当月最后一天
|
||||
endTime := startTime.AddDate(0, 1, 0).Add(-time.Nanosecond)
|
||||
|
||||
// SQL: money_record LEFT JOIN money_user_category
|
||||
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"))
|
||||
|
||||
// 查询
|
||||
list, err := db.SelectBySql(sqlStr)
|
||||
if err != nil {
|
||||
return c.AddError(err)
|
||||
}
|
||||
|
||||
// 分组数据
|
||||
grouped := mapx.New() // mapx.M
|
||||
totalIncome := decimal.NewFromInt(0)
|
||||
totalExpense := decimal.NewFromInt(0)
|
||||
|
||||
for _, r := range list {
|
||||
row := mapx.M(r)
|
||||
|
||||
createTime, ok := row["create_time"].(time.Time)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
day := createTime.Format("2006-01-02")
|
||||
|
||||
// 获取当天数据
|
||||
dayDataI := grouped.Get(day)
|
||||
var dayData mapx.M
|
||||
if dayDataI == nil {
|
||||
dayData = mapx.New().
|
||||
Set("records", mapx.NewArr()).
|
||||
Set("income", decimal.NewFromInt(0).String()).
|
||||
Set("expense", decimal.NewFromInt(0).String())
|
||||
} else {
|
||||
dayData = dayDataI.(mapx.M)
|
||||
}
|
||||
|
||||
// 追加记录
|
||||
records := dayData.GetArray("records")
|
||||
records = append(records, row)
|
||||
dayData.Set("records", records)
|
||||
|
||||
// 计算当天收入支出
|
||||
categoryType := row.GetInt("category_type")
|
||||
amount, err := decimal.NewFromString(row.GetString("amount"))
|
||||
if err != nil {
|
||||
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)
|
||||
}
|
||||
|
||||
if categoryType == 0 {
|
||||
dayIncome = dayIncome.Add(amount)
|
||||
totalIncome = totalIncome.Add(amount)
|
||||
} else if categoryType == 1 {
|
||||
dayExpense = dayExpense.Add(amount)
|
||||
totalExpense = totalExpense.Add(amount)
|
||||
}
|
||||
|
||||
dayData.Set("income", dayIncome.String())
|
||||
dayData.Set("expense", dayExpense.String())
|
||||
|
||||
grouped.Set(day, dayData)
|
||||
}
|
||||
|
||||
result := mapx.New().
|
||||
Set("records", grouped).
|
||||
Set("total_income", totalIncome.String()).
|
||||
Set("total_expense", totalExpense.String())
|
||||
|
||||
return response.Success(c).Data(result).Send()
|
||||
}
|
||||
|
||||
func getUserCategory(c *router.Context) error {
|
||||
userId := c.GetUserID()
|
||||
|
||||
// 查询当前用户的分类
|
||||
userCategories, err := db.Find("money_user_category", mapx.New().Set("user_id", userId), "sort_number ASC")
|
||||
userCategories, err := db.SelectList("money_user_category",
|
||||
db.BuildWhereString(mapx.New().Set("user_id", userId)),
|
||||
"sort_number ASC")
|
||||
|
||||
if err != nil {
|
||||
return c.AddError(err)
|
||||
}
|
||||
@@ -126,7 +234,7 @@ func updateMoneyRecord(c *router.Context) error {
|
||||
|
||||
recordId := bodyData.GetInt64("id")
|
||||
|
||||
record, err := db.GetOne("money_record", "id", recordId)
|
||||
record, err := db.SelectById("money_record", "id", recordId)
|
||||
if err != nil {
|
||||
return c.AddError(err)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user