新增资金出款查询与财务统计

This commit is contained in:
yml2213
2026-07-26 16:18:31 +08:00
parent 321f0781cf
commit dbe0cda2c6
17 changed files with 1604 additions and 31 deletions
@@ -4,6 +4,7 @@ import (
"errors"
"net/http"
"strconv"
"strings"
"time"
"hfb_sys/backend/internal/timeutil"
@@ -46,6 +47,19 @@ func (h *Handler) Details(c *gin.Context) {
response.OK(c, result)
}
func (h *Handler) Disbursements(c *gin.Context) {
query, ok := parseDisbursementQuery(c)
if !ok {
return
}
result, err := h.service.Disbursements(c.Request.Context(), query)
if err != nil {
writeFinanceError(c, err)
return
}
response.OK(c, result)
}
func parseDashboardQuery(c *gin.Context) (DashboardQuery, bool) {
start, end, ok := parseDateRange(c, 6)
if !ok {
@@ -60,14 +74,65 @@ func parseDetailQuery(c *gin.Context) (DetailQuery, bool) {
return DetailQuery{}, false
}
query := DetailQuery{
OrderNo: c.Query("order_no"),
OrderStatus: c.Query("order_status"),
SettlementStatus: c.Query("settlement_status"),
DateType: c.DefaultQuery("date_type", "settled"),
StartDate: start,
EndDate: end,
OrderNo: c.Query("order_no"),
OrderStatus: c.Query("order_status"),
SettlementStatus: c.Query("settlement_status"),
SettlementMode: c.Query("settlement_mode"),
OfflineSettlementStatus: c.Query("offline_settlement_status"),
DateType: c.DefaultQuery("date_type", "settled"),
StartDate: start,
EndDate: end,
}
if query.DateType != "created" && query.DateType != "settled" {
if query.DateType != "created" && query.DateType != "settled" && query.DateType != "offline_settled" {
response.BadRequest(c, "日期类型不正确")
return query, false
}
if query.SettlementMode != "" && query.SettlementMode != "owner_wallet" && query.SettlementMode != "platform_managed" {
response.BadRequest(c, "结算模式不正确")
return query, false
}
if query.OfflineSettlementStatus != "" && query.OfflineSettlementStatus != "none" && query.OfflineSettlementStatus != "pending" && query.OfflineSettlementStatus != "settled" {
response.BadRequest(c, "线下结算状态不正确")
return query, false
}
if raw := c.Query("user_id"); raw != "" {
value, err := strconv.ParseUint(raw, 10, 64)
if err != nil || value == 0 {
response.BadRequest(c, "用户 ID 不正确")
return query, false
}
query.UserID = value
}
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
query.Page = page
query.PageSize = pageSize
return query, true
}
func parseDisbursementQuery(c *gin.Context) (DisbursementQuery, bool) {
start, end, ok := parseDateRange(c, 29)
if !ok {
return DisbursementQuery{}, false
}
query := DisbursementQuery{
SourceType: strings.TrimSpace(c.Query("source_type")),
Status: strings.TrimSpace(c.Query("status")),
DateType: c.DefaultQuery("date_type", "created"),
BusinessNo: strings.TrimSpace(c.Query("business_no")),
Keyword: strings.TrimSpace(c.Query("keyword")),
StartDate: start,
EndDate: end,
}
if query.SourceType != "" && query.SourceType != "platform_managed" && query.SourceType != "withdrawal" {
response.BadRequest(c, "出款类型不正确")
return query, false
}
if query.Status != "" && query.Status != "review_pending" && query.Status != "payment_pending" && query.Status != "paid" && query.Status != "rejected" && query.Status != "cancelled" {
response.BadRequest(c, "出款状态不正确")
return query, false
}
if query.DateType != "created" && query.DateType != "paid" {
response.BadRequest(c, "日期类型不正确")
return query, false
}