repo.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package repository
  2. import (
  3. "wails-app/internal/dao"
  4. "wails-app/internal/global"
  5. )
  6. type PaymentRepository struct{}
  7. func (r *PaymentRepository) Create(record *dao.PaymentRecord) error {
  8. return global.GVA_DB.Create(record).Error
  9. }
  10. // PaymentListQuery 收费记录查询参数
  11. type PaymentListQuery struct {
  12. PlateNumber string `form:"plate_number"`
  13. PaymentMethod string `form:"payment_method"`
  14. StartDate string `form:"start_date"`
  15. EndDate string `form:"end_date"`
  16. Page int `form:"page"`
  17. PageSize int `form:"page_size"`
  18. }
  19. // PaymentListResult 收费记录列表项
  20. type PaymentListResult struct {
  21. ID uint `json:"id"`
  22. PlateNumber string `json:"plate_number"`
  23. VehicleType string `json:"vehicle_type"`
  24. PaymentMethod string `json:"payment_method"`
  25. Amount float64 `json:"amount"`
  26. PaidAmount float64 `json:"paid_amount"`
  27. ChangeAmount float64 `json:"change_amount"`
  28. OperatorID uint `json:"operator_id"`
  29. OperatorName string `json:"operator_name"`
  30. PaidAt string `json:"paid_at"`
  31. EntryTime string `json:"entry_time"`
  32. ExitTime string `json:"exit_time"`
  33. StayTime int64 `json:"stay_time"`
  34. }
  35. // List 查询收费记录列表(关联 vehicle_record + vehicle + vehicle_type)
  36. func (r *PaymentRepository) List(q PaymentListQuery) ([]PaymentListResult, int64, error) {
  37. db := global.GVA_DB.Table("payment_record").
  38. Select(`payment_record.id, vehicle_record.plate_number, vehicle_type.name as vehicle_type, payment_record.payment_method,
  39. payment_record.amount, payment_record.paid_amount, payment_record.change_amount,
  40. payment_record.operator_id, sys_user.nick_name as operator_name, payment_record.paid_at,
  41. vehicle_record.entry_time, vehicle_record.exit_time, vehicle_record.stay_time`).
  42. Joins("LEFT JOIN vehicle_record ON vehicle_record.id = payment_record.record_id").
  43. Joins("LEFT JOIN vehicle ON vehicle.plate_number = vehicle_record.plate_number").
  44. Joins("LEFT JOIN vehicle_type ON vehicle_type.id = vehicle.vehicle_type_id").
  45. Joins("LEFT JOIN sys_user ON sys_user.id = payment_record.operator_id")
  46. if q.PlateNumber != "" {
  47. db = db.Where("vehicle_record.plate_number LIKE ?", "%"+q.PlateNumber+"%")
  48. }
  49. if q.PaymentMethod != "" {
  50. db = db.Where("payment_record.payment_method = ?", q.PaymentMethod)
  51. }
  52. if q.StartDate != "" {
  53. db = db.Where("payment_record.paid_at >= ?", q.StartDate)
  54. }
  55. if q.EndDate != "" {
  56. db = db.Where("payment_record.paid_at <= ?", q.EndDate+" 23:59:59")
  57. }
  58. var total int64
  59. db.Count(&total)
  60. if q.Page <= 0 {
  61. q.Page = 1
  62. }
  63. if q.PageSize <= 0 {
  64. q.PageSize = 10
  65. }
  66. offset := (q.Page - 1) * q.PageSize
  67. var results []PaymentListResult
  68. err := db.Order("payment_record.paid_at DESC").Offset(offset).Limit(q.PageSize).Scan(&results).Error
  69. return results, total, err
  70. }