package repository import ( "wails-app/internal/dao" "wails-app/internal/global" ) 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"` VehicleType string `json:"vehicle_type"` PaymentMethod string `json:"payment_method"` Amount float64 `json:"amount"` PaidAmount float64 `json:"paid_amount"` ChangeAmount float64 `json:"change_amount"` OperatorID uint `json:"operator_id"` OperatorName string `json:"operator_name"` PaidAt string `json:"paid_at"` EntryTime string `json:"entry_time"` ExitTime string `json:"exit_time"` StayTime int64 `json:"stay_time"` } // List 查询收费记录列表(关联 vehicle_record + vehicle + vehicle_type) func (r *PaymentRepository) List(q PaymentListQuery) ([]PaymentListResult, int64, error) { db := global.GVA_DB.Table("payment_record"). Select(`payment_record.id, vehicle_record.plate_number, vehicle_type.name as vehicle_type, payment_record.payment_method, payment_record.amount, payment_record.paid_amount, payment_record.change_amount, payment_record.operator_id, sys_user.nick_name as operator_name, 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"). Joins("LEFT JOIN vehicle ON vehicle.plate_number = vehicle_record.plate_number"). Joins("LEFT JOIN vehicle_type ON vehicle_type.id = vehicle.vehicle_type_id"). Joins("LEFT JOIN sys_user ON sys_user.id = payment_record.operator_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 }