| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package repository
- import (
- "time"
- "wails-app/internal/dao"
- "wails-app/internal/global"
- )
- type MonthlyCardRepository struct{}
- func (r *MonthlyCardRepository) Create(card *dao.MonthlyCard) error {
- return global.GVA_DB.Create(card).Error
- }
- func (r *MonthlyCardRepository) GetByVehicleID(vehicleID uint) (*dao.MonthlyCard, error) {
- var card dao.MonthlyCard
- err := global.GVA_DB.
- Where("vehicle_id = ? AND payment_status = ? AND end_date > ?", vehicleID, "paid", time.Now()).
- Preload("Vehicle").
- Order("end_date DESC").
- First(&card).Error
- if err != nil {
- return nil, err
- }
- return &card, nil
- }
- func (r *MonthlyCardRepository) Update(card *dao.MonthlyCard) error {
- return global.GVA_DB.Save(card).Error
- }
- type MonthlyCardQuery struct {
- PlateNumber string `form:"plate_number"`
- CardType string `form:"card_type"`
- Page int `form:"page"`
- PageSize int `form:"page_size"`
- }
- type MonthlyCardResult struct {
- ID uint `json:"id"`
- PlateNumber string `json:"plate_number"`
- CardType string `json:"card_type"`
- StartDate string `json:"start_date"`
- EndDate string `json:"end_date"`
- Fee float64 `json:"fee"`
- PaymentStatus string `json:"payment_status"`
- }
- func (r *MonthlyCardRepository) List(q MonthlyCardQuery) ([]MonthlyCardResult, int64, error) {
- db := global.GVA_DB.Table("monthly_card").
- 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").
- Joins("LEFT JOIN vehicle ON vehicle.id = monthly_card.vehicle_id")
- if q.PlateNumber != "" {
- db = db.Where("vehicle.plate_number LIKE ?", "%"+q.PlateNumber+"%")
- }
- if q.CardType != "" {
- db = db.Where("monthly_card.card_type = ?", q.CardType)
- }
- 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 []MonthlyCardResult
- err := db.Order("monthly_card.id DESC").Offset(offset).Limit(q.PageSize).Scan(&results).Error
- return results, total, err
- }
|