duedate.go 1.3 KB

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