Explorar el Código

feat: 收费记录查询API——GET /payment/list,支持车牌/支付方式/日期筛选

lq hace 1 mes
padre
commit
b17e88d9e1

+ 30 - 3
internal/modules/payment/api.go

@@ -4,11 +4,14 @@ import (
 	"github.com/gin-gonic/gin"
 	"wails-app/internal/model/common/response"
 	"wails-app/internal/model/vehicle/request"
+	"wails-app/internal/modules/payment/repository"
+	paymentService "wails-app/internal/modules/payment/service"
 	utils "wails-app/internal/pkg"
 	"wails-app/internal/service"
 )
 
 var vehicleSvc = service.ServiceGroupApp.VehicleServiceGroup.VehicleService
+var paymentSvc = paymentService.NewPaymentService()
 
 // ExitPreview 费用预览(只读,不修改数据库)
 func ExitPreview(c *gin.Context) {
@@ -40,11 +43,35 @@ func ExitConfirm(c *gin.Context) {
 	response.OkWithData(resp, c)
 }
 
+// ListPayments 收费记录列表
+func ListPayments(c *gin.Context) {
+	var q repository.PaymentListQuery
+	if err := c.ShouldBindQuery(&q); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	list, total, err := paymentSvc.QueryPayments(q)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	response.OkWithDetailed(response.PageResult{
+		List:     list,
+		Total:    total,
+		Page:     q.Page,
+		PageSize: q.PageSize,
+	}, "查询成功", c)
+}
+
 // SetupPaymentRouter 注册支付相关路由
 func SetupPaymentRouter(router *gin.RouterGroup) {
-	pg := router.Group("/vehicle")
+	pg := router.Group("/payment")
+	{
+		pg.GET("/list", ListPayments)
+	}
+	eg := router.Group("/vehicle")
 	{
-		pg.POST("/exit/preview", ExitPreview)
-		pg.POST("/exit/confirm", ExitConfirm)
+		eg.POST("/exit/preview", ExitPreview)
+		eg.POST("/exit/confirm", ExitConfirm)
 	}
 }

+ 63 - 0
internal/modules/payment/repository/repo.go

@@ -10,3 +10,66 @@ type PaymentRepository struct{}
 func (r *PaymentRepository) Create(record *dao.PaymentRecord) error {
 	return global.GVA_DB.Create(record).Error
 }
+
+// PaymentListQuery 收费记录查询参数
+type PaymentListQuery struct {
+	PlateNumber   string `form:"plate_number"`
+	PaymentMethod string `form:"payment_method"`
+	StartDate     string `form:"start_date"`
+	EndDate       string `form:"end_date"`
+	Page          int    `form:"page"`
+	PageSize      int    `form:"page_size"`
+}
+
+// PaymentListResult 收费记录列表项
+type PaymentListResult struct {
+	ID            uint    `json:"id"`
+	PlateNumber   string  `json:"plate_number"`
+	PaymentMethod string  `json:"payment_method"`
+	Amount        float64 `json:"amount"`
+	PaidAmount    float64 `json:"paid_amount"`
+	ChangeAmount  float64 `json:"change_amount"`
+	OperatorID    uint    `json:"operator_id"`
+	PaidAt        string  `json:"paid_at"`
+	EntryTime     string  `json:"entry_time"`
+	ExitTime      string  `json:"exit_time"`
+	StayTime      int64   `json:"stay_time"`
+}
+
+// List 查询收费记录列表(关联 vehicle_record 获取车牌/进出时间)
+func (r *PaymentRepository) List(q PaymentListQuery) ([]PaymentListResult, int64, error) {
+	db := global.GVA_DB.Table("payment_record").
+		Select(`payment_record.id, vehicle_record.plate_number, payment_record.payment_method,
+			payment_record.amount, payment_record.paid_amount, payment_record.change_amount,
+			payment_record.operator_id, payment_record.paid_at,
+			vehicle_record.entry_time, vehicle_record.exit_time, vehicle_record.stay_time`).
+		Joins("LEFT JOIN vehicle_record ON vehicle_record.id = payment_record.record_id")
+
+	if q.PlateNumber != "" {
+		db = db.Where("vehicle_record.plate_number LIKE ?", "%"+q.PlateNumber+"%")
+	}
+	if q.PaymentMethod != "" {
+		db = db.Where("payment_record.payment_method = ?", q.PaymentMethod)
+	}
+	if q.StartDate != "" {
+		db = db.Where("payment_record.paid_at >= ?", q.StartDate)
+	}
+	if q.EndDate != "" {
+		db = db.Where("payment_record.paid_at <= ?", q.EndDate+" 23:59:59")
+	}
+
+	var total int64
+	db.Count(&total)
+
+	if q.Page <= 0 {
+		q.Page = 1
+	}
+	if q.PageSize <= 0 {
+		q.PageSize = 10
+	}
+	offset := (q.Page - 1) * q.PageSize
+
+	var results []PaymentListResult
+	err := db.Order("payment_record.paid_at DESC").Offset(offset).Limit(q.PageSize).Scan(&results).Error
+	return results, total, err
+}

+ 5 - 0
internal/modules/payment/service/service.go

@@ -55,3 +55,8 @@ func (s *PaymentService) ProcessPayment(recordID uint, paymentMethod string, amo
 
 	return pr, nil
 }
+
+// QueryPayments 查询收费记录列表
+func (s *PaymentService) QueryPayments(q repository.PaymentListQuery) ([]repository.PaymentListResult, int64, error) {
+	return s.repo.List(q)
+}