repo.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package repository
  2. import (
  3. "time"
  4. "wails-app/internal/dao"
  5. "wails-app/internal/global"
  6. )
  7. type MonthlyCardRepository struct{}
  8. func (r *MonthlyCardRepository) Create(card *dao.MonthlyCard) error {
  9. return global.GVA_DB.Create(card).Error
  10. }
  11. func (r *MonthlyCardRepository) GetByVehicleID(vehicleID uint) (*dao.MonthlyCard, error) {
  12. var card dao.MonthlyCard
  13. err := global.GVA_DB.
  14. Where("vehicle_id = ? AND payment_status = ? AND end_date > ?", vehicleID, "paid", time.Now()).
  15. Preload("Vehicle").
  16. Order("end_date DESC").
  17. First(&card).Error
  18. if err != nil {
  19. return nil, err
  20. }
  21. return &card, nil
  22. }
  23. func (r *MonthlyCardRepository) Update(card *dao.MonthlyCard) error {
  24. return global.GVA_DB.Save(card).Error
  25. }
  26. type MonthlyCardQuery struct {
  27. PlateNumber string `form:"plate_number"`
  28. CardType string `form:"card_type"`
  29. Page int `form:"page"`
  30. PageSize int `form:"page_size"`
  31. }
  32. type MonthlyCardResult struct {
  33. ID uint `json:"id"`
  34. PlateNumber string `json:"plate_number"`
  35. CardType string `json:"card_type"`
  36. StartDate string `json:"start_date"`
  37. EndDate string `json:"end_date"`
  38. Fee float64 `json:"fee"`
  39. PaymentStatus string `json:"payment_status"`
  40. }
  41. func (r *MonthlyCardRepository) List(q MonthlyCardQuery) ([]MonthlyCardResult, int64, error) {
  42. db := global.GVA_DB.Table("monthly_card").
  43. Select("monthly_card.id, vehicle.plate_number, monthly_card.card_type, monthly_card.start_date, monthly_card.end_date, monthly_card.fee, monthly_card.payment_status").
  44. Joins("LEFT JOIN vehicle ON vehicle.id = monthly_card.vehicle_id")
  45. if q.PlateNumber != "" {
  46. db = db.Where("vehicle.plate_number LIKE ?", "%"+q.PlateNumber+"%")
  47. }
  48. if q.CardType != "" {
  49. db = db.Where("monthly_card.card_type = ?", q.CardType)
  50. }
  51. var total int64
  52. db.Count(&total)
  53. if q.Page <= 0 {
  54. q.Page = 1
  55. }
  56. if q.PageSize <= 0 {
  57. q.PageSize = 10
  58. }
  59. offset := (q.Page - 1) * q.PageSize
  60. var results []MonthlyCardResult
  61. err := db.Order("monthly_card.id DESC").Offset(offset).Limit(q.PageSize).Scan(&results).Error
  62. return results, total, err
  63. }