192 lines
4.8 KiB
Go
192 lines
4.8 KiB
Go
package money
|
|
|
|
import (
|
|
"base-go-v2/internal/db"
|
|
response "base-go-v2/internal/reponse"
|
|
"base-go-v2/internal/router"
|
|
"base-go-v2/internal/utils/idgen"
|
|
"base-go-v2/internal/utils/mapx"
|
|
"fmt"
|
|
"github.com/shopspring/decimal"
|
|
)
|
|
|
|
func InitMoneyRouter(r *router.Router) {
|
|
group := r.Group("money")
|
|
group.GET("/category", getUserCategory)
|
|
group.POST("/insert", insertMoneyRecord)
|
|
group.POST("/update", updateMoneyRecord)
|
|
group.POST("/delete", deleteMoneyRecord)
|
|
}
|
|
|
|
// InitDefaultCategories 初始化系统默认分类到用户分类表
|
|
func InitDefaultCategories(userID int64) error {
|
|
fmt.Println("进入 InitDefaultCategories ===")
|
|
|
|
// 1. 查询系统分类表
|
|
sysCategories, err := db.FindAll("money_sys_category", "sort_number")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Printf("系统分类数量: %d\n", len(sysCategories))
|
|
|
|
// 2. 构建批量插入数据
|
|
//userCategories := make([]mapx.M, 0, len(sysCategories))
|
|
userCategories := mapx.NewArr(len(sysCategories))
|
|
|
|
for i, row := range sysCategories {
|
|
m := mapx.New().SetKV(
|
|
"id", idgen.NextId(),
|
|
"user_id", userID,
|
|
"name", row.GetString("name"),
|
|
"icon", row.GetString("icon"),
|
|
"type", row.GetInt("type"),
|
|
"sort_number", row.GetInt("sort_number"),
|
|
)
|
|
fmt.Printf("用户分类 %d: %+v\n", i+1, m)
|
|
userCategories = append(userCategories, m)
|
|
}
|
|
|
|
// 3. 批量插入到用户分类表
|
|
if _, err := db.InsertBatch("money_user_category", userCategories); err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Println("初始化用户分类成功!")
|
|
return nil
|
|
}
|
|
|
|
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")
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
|
|
// 按 type 分组
|
|
result := map[string][]mapx.M{
|
|
"income": {},
|
|
"expense": {},
|
|
}
|
|
|
|
for _, cat := range userCategories {
|
|
switch cat.GetInt("type") {
|
|
case 0:
|
|
result["income"] = append(result["income"], cat)
|
|
case 1:
|
|
result["expense"] = append(result["expense"], cat)
|
|
}
|
|
}
|
|
|
|
return response.Success(c).Data(result).Send()
|
|
}
|
|
|
|
func insertMoneyRecord(c *router.Context) error {
|
|
bodyData, err := c.GetBodyWithRequired("category_id", "amount", "record_time")
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
|
|
categoryId := bodyData.GetInt64("category_id")
|
|
recordTime := bodyData.GetString("record_time")
|
|
amountStr := bodyData.GetString("amount")
|
|
remark := bodyData.GetString("remark")
|
|
|
|
amountDecimal, err := decimal.NewFromString(amountStr)
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
|
|
newRecord := mapx.New().SetKV("id", idgen.NextId(),
|
|
"category_id", categoryId,
|
|
"user_id", c.GetUserID(),
|
|
"amount", amountDecimal,
|
|
"remark", remark,
|
|
"record_time", recordTime,
|
|
)
|
|
|
|
insertOne, err := db.InsertOne("money_record", newRecord)
|
|
if err != nil {
|
|
return response.Fail(c).Message("新增失败").Send()
|
|
}
|
|
if insertOne != 1 {
|
|
return response.Fail(c).Message("新增失败").Send()
|
|
}
|
|
|
|
return response.Success(c).Data(newRecord).Message("新增成功").Send()
|
|
}
|
|
|
|
func updateMoneyRecord(c *router.Context) error {
|
|
bodyData, err := c.GetBodyWithRequired("id")
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
|
|
recordId := bodyData.GetInt64("id")
|
|
|
|
record, err := db.GetOne("money_record", "id", recordId)
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
if record == nil {
|
|
return response.Fail(c).Message("该条账单不存在").Send()
|
|
}
|
|
|
|
categoryId := bodyData.GetInt64("category_id")
|
|
recordTime := bodyData.GetString("record_time")
|
|
amountStr := bodyData.GetString("amount")
|
|
remark := bodyData.GetString("remark")
|
|
|
|
updateRecord := mapx.New().SetKV("id", recordId)
|
|
|
|
if record.GetInt64("category_id") != categoryId {
|
|
updateRecord.SetKV("category_id", categoryId)
|
|
}
|
|
|
|
if record.GetString("record_time") != recordTime {
|
|
updateRecord.SetKV("record_time", recordTime)
|
|
}
|
|
|
|
if record.GetString("amount") != amountStr {
|
|
amountDecimal, err := decimal.NewFromString(amountStr)
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
updateRecord.SetKV("amount", amountDecimal)
|
|
}
|
|
|
|
if record.GetString("remark") != remark {
|
|
updateRecord.SetKV("remark", remark)
|
|
}
|
|
|
|
updateOne, err := db.UpdateOne("money_record", "id", recordId, updateRecord)
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
if updateOne != 1 {
|
|
return response.Fail(c).Message("更新失败").Send()
|
|
}
|
|
|
|
return response.Success(c).Message("更新成功").Send()
|
|
}
|
|
|
|
func deleteMoneyRecord(c *router.Context) error {
|
|
bodyData, err := c.GetBodyWithRequired("id")
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
recordId := bodyData.GetInt64("id")
|
|
|
|
deleteOne, err := db.DeleteOne("money_record", "id", recordId)
|
|
if err != nil {
|
|
return c.AddError(err)
|
|
}
|
|
if deleteOne != 1 {
|
|
return response.Fail(c).Message("删除失败").Send()
|
|
}
|
|
|
|
return response.Success(c).Message("删除成功").Send()
|
|
}
|