repo.go 2.0 KB

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