|
|
@@ -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
|
|
|
+}
|