This commit is contained in:
oneao committed 2026-03-04 22:22:07 +08:00
1 parent 34240d2e16
commit bf350d8d35
21 files changed
+670 -304

No files matched your search

@@ -5,6 +5,7 @@ import (
"allapp/api/types"
"allapp/db"
"allapp/db/repo"
"allapp/utils/errorx"
"allapp/utils/pgtypex"
"allapp/utils/requestx"
"allapp/utils/responsex"
@@ -57,6 +58,7 @@ func ListFinanceRecords(c fiber.Ctx) error {
RecordTime: pgtypex.TimePtrToPgDate(startTime),
RecordTime_2: pgtypex.TimePtrToPgDate(endTime),
Column4: categoryId,
Column5: dto.CategoryType,
})
if err != nil {
@@ -131,7 +133,7 @@ func UpdateFinanceRecord(c fiber.Ctx) error {
}
err = db.Queries.UpdateFinanceRecord(c.Context(), repo.UpdateFinanceRecordParams{
ID: uniqueid.NextId(),
ID: dto.Id,
CategoryID: dto.CategoryId,
Amount: pgtypex.StringToNumeric(dto.Amount),
Remark: pgtypex.StringToText(dto.Remark),
@@ -161,3 +163,38 @@ func DeleteFinanceRecord(c fiber.Ctx) error {
return responsex.OK(c, nil)
}
// GetFinanceRecordDetail 删除记账记录
func GetFinanceRecordDetail(c fiber.Ctx) error {
dto := new(types.FinanceRecordDetailDTO)
if err := requestx.BindAndValidate(c, dto); err != nil {
return err
}
recordDetail, err := db.Queries.GetFinanceRecordDetail(c.Context(), dto.Id)
if err != nil {
if errorx.IsNotFound(err) {
return responsex.Error(c, "该条记录不存在")
}
return err
}
vo := new(types.FinanceRecordDetailVO)
vo.Id = recordDetail.ID
vo.CategoryId = recordDetail.CategoryID
vo.Amount = pgtypex.NumericToString(recordDetail.Amount)
vo.RecordTime = pgtypex.DateToString(recordDetail.RecordTime)
vo.Remark = pgtypex.TextToString(recordDetail.Remark)
vo.CreateTime = pgtypex.TimestamptzToMillis(recordDetail.CreateTime)
vo.CreateMemberId = recordDetail.CreateBy
vo.CreateMemberName = pgtypex.TextToString(recordDetail.CreateMemberName)
vo.UpdateTime = pgtypex.TimestamptzToMillis(recordDetail.UpdateTime)
vo.UpdateMemberId = recordDetail.UpdateBy
vo.UpdateMemberName = pgtypex.TextToString(recordDetail.UpdateMemberName)
return responsex.OK(c, vo)
}
@@ -52,6 +52,7 @@ func SetupRouters(app *fiber.App) {
financeRouter.Post("/record/create", finance.CreateFinanceRecord)
financeRouter.Post("/record/update", finance.UpdateFinanceRecord)
financeRouter.Post("/record/delete", finance.DeleteFinanceRecord)
financeRouter.Post("/record/detail", finance.GetFinanceRecordDetail)
// authGroup.Get("/user/profile", user.GetProfile)
// spaceGroup.Get("/space/info", space.GetInfo)
+22 -3
View File
@@ -63,9 +63,10 @@ type FinanceRecord struct {
}
type ListFinanceRecordsDTO struct {
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
CategoryId int64 `json:"category_id"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
CategoryId int64 `json:"category_id"`
CategoryType int16 `json:"category_type"`
}
type ListFinanceRecordsVO struct {
@@ -93,3 +94,21 @@ type UpdateFinanceRecordDTO struct {
type DeleteFinanceRecordDTO struct {
Id int64 `json:"id" validate:"required"`
}
type FinanceRecordDetailDTO struct {
Id int64 `json:"id" validate:"required"`
}
type FinanceRecordDetailVO struct {
Id int64 `json:"id"`
CategoryId int64 `json:"category_id"`
Amount string `json:"amount"`
RecordTime string `json:"record_time"`
Remark string `json:"remark"`
CreateTime int64 `json:"create_time"`
CreateMemberId int64 `json:"create_member_id"`
CreateMemberName string `json:"create_member_name"`
UpdateTime int64 `json:"update_time"`
UpdateMemberId int64 `json:"update_member_id"`
UpdateMemberName string `json:"update_member_name"`
}
@@ -4,16 +4,14 @@ SELECT
su.member_name
FROM finance_record fr
LEFT JOIN space_member su
ON fr.space_id = su.space_id
AND fr.update_by = su.user_id
ON fr.space_id = su.space_id AND fr.update_by = su.user_id
LEFT JOIN finance_category_space fcs ON fr.category_id = fcs.id
WHERE
fr.space_id = $1
AND fr.record_time >= $2
AND fr.record_time < $3
AND (
$4 = 0
OR fr.category_id = $4
)
AND fr.category_id = COALESCE(NULLIF($4::bigint, 0), fr.category_id)
AND fcs.type = COALESCE(NULLIF($5::smallint, 0), fcs.type)
ORDER BY
fr.record_time DESC,
fr.create_time DESC;
@@ -37,4 +35,23 @@ WHERE id = $1;
DELETE FROM finance_record WHERE id = $1;
-- name: DeleteFinanceRecordByCategoryId :exec
DELETE FROM finance_record WHERE category_id = $1;
DELETE FROM finance_record WHERE category_id = $1;
-- name: GetFinanceRecordDetail :one
SELECT
fr.id,
fr.category_id,
fr.amount,
fr.record_time,
fr.remark,
fr.create_by,
fr.create_time,
cm.nickname AS create_member_name,
fr.update_by,
fr.update_time,
um.nickname AS update_member_name
FROM finance_record fr
LEFT JOIN "user" cm ON cm.id = fr.create_by
LEFT JOIN "user" um ON um.id = fr.update_by
WHERE fr.id = $1
LIMIT 1;
@@ -29,6 +29,59 @@ func (q *Queries) DeleteFinanceRecordByCategoryId(ctx context.Context, categoryI
return err
}
const getFinanceRecordDetail = `-- name: GetFinanceRecordDetail :one
SELECT
fr.id,
fr.category_id,
fr.amount,
fr.record_time,
fr.remark,
fr.create_by,
fr.create_time,
cm.nickname AS create_member_name,
fr.update_by,
fr.update_time,
um.nickname AS update_member_name
FROM finance_record fr
LEFT JOIN "user" cm ON cm.id = fr.create_by
LEFT JOIN "user" um ON um.id = fr.update_by
WHERE fr.id = $1
LIMIT 1
`
type GetFinanceRecordDetailRow struct {
ID int64
CategoryID int64
Amount pgtype.Numeric
RecordTime pgtype.Date
Remark pgtype.Text
CreateBy int64
CreateTime pgtype.Timestamptz
CreateMemberName pgtype.Text
UpdateBy int64
UpdateTime pgtype.Timestamptz
UpdateMemberName pgtype.Text
}
func (q *Queries) GetFinanceRecordDetail(ctx context.Context, id int64) (GetFinanceRecordDetailRow, error) {
row := q.db.QueryRow(ctx, getFinanceRecordDetail, id)
var i GetFinanceRecordDetailRow
err := row.Scan(
&i.ID,
&i.CategoryID,
&i.Amount,
&i.RecordTime,
&i.Remark,
&i.CreateBy,
&i.CreateTime,
&i.CreateMemberName,
&i.UpdateBy,
&i.UpdateTime,
&i.UpdateMemberName,
)
return i, err
}
const insertFinanceRecord = `-- name: InsertFinanceRecord :exec
INSERT INTO finance_record(id,category_id,space_id,amount,record_time,remark,create_by,update_by,create_time,update_time)
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,NOW(),NOW())
@@ -65,16 +118,14 @@ SELECT
su.member_name
FROM finance_record fr
LEFT JOIN space_member su
ON fr.space_id = su.space_id
AND fr.update_by = su.user_id
ON fr.space_id = su.space_id AND fr.update_by = su.user_id
LEFT JOIN finance_category_space fcs ON fr.category_id = fcs.id
WHERE
fr.space_id = $1
AND fr.record_time >= $2
AND fr.record_time < $3
AND (
$4 = 0
OR fr.category_id = $4
)
AND fr.category_id = COALESCE(NULLIF($4::bigint, 0), fr.category_id)
AND fcs.type = COALESCE(NULLIF($5::smallint, 0), fcs.type)
ORDER BY
fr.record_time DESC,
fr.create_time DESC
@@ -84,7 +135,8 @@ type ListFinanceRecordsParams struct {
SpaceID int64
RecordTime pgtype.Date
RecordTime_2 pgtype.Date
Column4 interface{}
Column4 int64
Column5 int16
}
type ListFinanceRecordsRow struct {
@@ -107,6 +159,7 @@ func (q *Queries) ListFinanceRecords(ctx context.Context, arg ListFinanceRecords
arg.RecordTime,
arg.RecordTime_2,
arg.Column4,
arg.Column5,
)
if err != nil {
return nil, err
-1
View File
@@ -110,4 +110,3 @@ create table finance_record
update_by bigint not null,
update_time timestamp with time zone default now()
);