duedate.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/go-nunu/nunu-layout-advanced/internal/repository"
  6. "strconv"
  7. "time"
  8. )
  9. type DuedateService interface {
  10. NextDueDate(ctx context.Context, uid int, hostId int) (string, error)
  11. }
  12. func NewDuedateService(
  13. service *Service,
  14. gameShieldRepository repository.GameShieldRepository,
  15. ) DuedateService {
  16. return &duedateService{
  17. Service: service,
  18. gameShieldRepository: gameShieldRepository,
  19. }
  20. }
  21. type duedateService struct {
  22. *Service
  23. gameShieldRepository repository.GameShieldRepository
  24. }
  25. func (service *duedateService) NextDueDate(ctx context.Context, uid int, productID int) (string, error) {
  26. timeStr, err := service.gameShieldRepository.GetGameShieldNextduedate(ctx, int64(uid), productID)
  27. if timeStr == "0" || timeStr == "" {
  28. return "", err
  29. }
  30. // 将字符串转为 int64 时间戳
  31. unixTime, err := strconv.ParseInt(timeStr, 10, 64)
  32. if err != nil {
  33. return "", err
  34. }
  35. now := time.Now().Unix() // 当前时间戳(秒级)
  36. if now > unixTime {
  37. return "", fmt.Errorf("产品已过期,请及时续费")
  38. }
  39. // 格式化时间
  40. t := time.Unix(unixTime, 0)
  41. nextduedate := t.Format("2006-01-02 15:04:05")
  42. return nextduedate, nil
  43. }