repo.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package repository
  2. import (
  3. "gorm.io/gorm"
  4. "wails-app/internal/dao"
  5. "wails-app/internal/global"
  6. )
  7. type TicketRepository struct{}
  8. func (r *TicketRepository) Create(ticket *dao.DigitalTicket) error {
  9. return r.CreateTx(global.GVA_DB, ticket)
  10. }
  11. func (r *TicketRepository) CreateTx(db *gorm.DB, ticket *dao.DigitalTicket) error {
  12. return db.Create(ticket).Error
  13. }
  14. func (r *TicketRepository) GetByTicketNo(ticketNo string) (*dao.DigitalTicket, error) {
  15. var t dao.DigitalTicket
  16. err := global.GVA_DB.Where("ticket_no = ?", ticketNo).First(&t).Error
  17. if err != nil {
  18. return nil, err
  19. }
  20. return &t, nil
  21. }
  22. func (r *TicketRepository) GetByID(id uint) (*dao.DigitalTicket, error) {
  23. return r.GetByIDTx(global.GVA_DB, id)
  24. }
  25. func (r *TicketRepository) GetByIDTx(db *gorm.DB, id uint) (*dao.DigitalTicket, error) {
  26. var t dao.DigitalTicket
  27. err := db.First(&t, id).Error
  28. if err != nil {
  29. return nil, err
  30. }
  31. return &t, nil
  32. }
  33. func (r *TicketRepository) UpdateState(id uint, state string, updates map[string]interface{}) error {
  34. return r.UpdateStateTx(global.GVA_DB, id, state, updates)
  35. }
  36. func (r *TicketRepository) GetByVehicleRecordID(recordID uint) (*dao.DigitalTicket, error) {
  37. return r.GetByVehicleRecordIDTx(global.GVA_DB, recordID)
  38. }
  39. func (r *TicketRepository) GetByVehicleRecordIDTx(db *gorm.DB, recordID uint) (*dao.DigitalTicket, error) {
  40. var t dao.DigitalTicket
  41. err := db.Where("vehicle_record_id = ?", recordID).Order("id DESC").First(&t).Error
  42. if err != nil {
  43. return nil, err
  44. }
  45. return &t, nil
  46. }
  47. func (r *TicketRepository) UpdateStateTx(db *gorm.DB, id uint, state string, updates map[string]interface{}) error {
  48. updates["state"] = state
  49. return db.Model(&dao.DigitalTicket{}).Where("id = ?", id).Updates(updates).Error
  50. }
  51. type TicketListQuery struct {
  52. PlateNumber string `form:"plate_number"`
  53. State string `form:"state"`
  54. Page int `form:"page"`
  55. PageSize int `form:"page_size"`
  56. }
  57. func (r *TicketRepository) List(q TicketListQuery) ([]dao.DigitalTicket, int64, error) {
  58. db := global.GVA_DB.Model(&dao.DigitalTicket{})
  59. if q.PlateNumber != "" {
  60. db = db.Where("plate_number LIKE ?", "%"+q.PlateNumber+"%")
  61. }
  62. if q.State != "" {
  63. db = db.Where("state = ?", q.State)
  64. }
  65. var total int64
  66. db.Count(&total)
  67. if q.Page <= 0 {
  68. q.Page = 1
  69. }
  70. if q.PageSize <= 0 {
  71. q.PageSize = 10
  72. }
  73. var list []dao.DigitalTicket
  74. err := db.Order("id DESC").Offset((q.Page - 1) * q.PageSize).Limit(q.PageSize).Find(&list).Error
  75. return list, total, err
  76. }