api.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package monthly
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "time"
  7. "github.com/gin-gonic/gin"
  8. "wails-app/internal/model/common/response"
  9. "wails-app/internal/modules/monthly/repository"
  10. "wails-app/internal/modules/monthly/service"
  11. utils "wails-app/internal/pkg"
  12. )
  13. var monthlySvc = service.NewMonthlyCardService()
  14. type createReq struct {
  15. VehicleID uint `json:"vehicle_id"`
  16. CardType string `json:"card_type"`
  17. Fee float64 `json:"fee"`
  18. EffectiveDate string `json:"effective_date"`
  19. Remark string `json:"remark"`
  20. }
  21. func parseEffectiveDate(value string) (time.Time, error) {
  22. value = strings.TrimSpace(value)
  23. if value == "" {
  24. return time.Time{}, fmt.Errorf("生效日期不能为空")
  25. }
  26. date, err := time.ParseInLocation("2006-01-02", value, time.Local)
  27. if err != nil {
  28. return time.Time{}, fmt.Errorf("生效日期格式错误,应为 YYYY-MM-DD")
  29. }
  30. return date, nil
  31. }
  32. func CreateCard(c *gin.Context) {
  33. var req createReq
  34. if err := c.ShouldBindJSON(&req); err != nil {
  35. response.FailWithMessage(err.Error(), c)
  36. return
  37. }
  38. effectiveDate, err := parseEffectiveDate(req.EffectiveDate)
  39. if err != nil {
  40. response.FailWithMessage(err.Error(), c)
  41. return
  42. }
  43. card, err := monthlySvc.Create(req.VehicleID, req.CardType, req.Fee, utils.GetUserID(c), req.Remark, effectiveDate)
  44. if err != nil {
  45. response.FailWithMessage(err.Error(), c)
  46. return
  47. }
  48. response.OkWithData(card, c)
  49. }
  50. type renewReq struct {
  51. CardID uint `json:"card_id"`
  52. CardType string `json:"card_type"`
  53. Fee float64 `json:"fee"`
  54. EffectiveDate string `json:"effective_date"`
  55. }
  56. func RenewCard(c *gin.Context) {
  57. var req renewReq
  58. if err := c.ShouldBindJSON(&req); err != nil {
  59. response.FailWithMessage(err.Error(), c)
  60. return
  61. }
  62. effectiveDate, err := parseEffectiveDate(req.EffectiveDate)
  63. if err != nil {
  64. response.FailWithMessage(err.Error(), c)
  65. return
  66. }
  67. if err := monthlySvc.Renew(req.CardID, req.CardType, req.Fee, utils.GetUserID(c), effectiveDate); err != nil {
  68. response.FailWithMessage(err.Error(), c)
  69. return
  70. }
  71. response.OkWithMessage("续费成功", c)
  72. }
  73. func RefundCard(c *gin.Context) {
  74. id, _ := strconv.Atoi(c.Query("id"))
  75. if err := monthlySvc.Refund(uint(id)); err != nil {
  76. response.FailWithMessage(err.Error(), c)
  77. return
  78. }
  79. response.OkWithMessage("退卡成功", c)
  80. }
  81. func ListCards(c *gin.Context) {
  82. var q repository.MonthlyCardQuery
  83. if err := c.ShouldBindQuery(&q); err != nil {
  84. response.FailWithMessage(err.Error(), c)
  85. return
  86. }
  87. list, total, err := monthlySvc.List(q)
  88. if err != nil {
  89. response.FailWithMessage(err.Error(), c)
  90. return
  91. }
  92. response.OkWithDetailed(response.PageResult{List: list, Total: total, Page: q.Page, PageSize: q.PageSize}, "查询成功", c)
  93. }
  94. func SetupMonthlyCardRouter(router *gin.RouterGroup) {
  95. mc := router.Group("/monthly-card")
  96. {
  97. mc.POST("/create", CreateCard)
  98. mc.POST("/renew", RenewCard)
  99. mc.DELETE("/refund", RefundCard)
  100. mc.GET("/list", ListCards)
  101. }
  102. }