108 lines
2.2 KiB
Go

package service
import (
"errors"
"fmt"
"gorm.io/gorm"
"hepa-calc-admin-api/api/dao"
"hepa-calc-admin-api/api/model"
"hepa-calc-admin-api/extend/aliyun"
"io"
"math/rand"
"net/http"
"time"
)
type UserService struct {
}
// HandleUserAvatar 处理用户头像
func (r *UserService) HandleUserAvatar(wxAvatar string) (avatar string, err error) {
if wxAvatar == "" {
return "", nil
}
// 发送GET请求
resp, err := http.Get(wxAvatar)
if err != nil {
return "", err
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
if resp.StatusCode != 200 {
return "", errors.New("请求失败")
}
// 读取响应体
respBody, err := io.ReadAll(resp.Body)
if err != nil {
return "", err
}
// 设置文件名字
now := time.Now()
dateTimeString := now.Format("20060102150405") // 当前时间字符串
rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数
ossPath := "user/avatar/" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".png"
// 上传oss
_, err = aliyun.PutObjectByte(ossPath, respBody)
if err != nil {
return "", err
}
ossPath = "/" + ossPath
return ossPath, nil
}
// CheckUserMember 检测用户会员
func (r *UserService) CheckUserMember(user *model.User) bool {
if user.IsMember == 0 {
return false
}
now := time.Now()
if user.MemberExpireDate.Before(now) {
return false
}
return true
}
// CheckUserBuyOrderMember 检测用户是否购买过会员
func (r *UserService) CheckUserBuyOrderMember(userId int64) bool {
orderMemberDao := dao.OrderMemberDao{}
orderMember, _ := orderMemberDao.GetUserFirstTimeBuyOrderMember(userId)
if orderMember == nil {
return false
}
return true
}
// AddUserMemberValidDate 增加用户会员过期时间
func (r *UserService) AddUserMemberValidDate(tx *gorm.DB, user *model.User, d int) bool {
userData := make(map[string]interface{})
if user.IsMember == 0 {
userData["is_member"] = 1
}
if user.MemberExpireDate == nil {
userData["is_member"] = time.Now().Format("2006-01-02 15:04:05")
} else {
userData["is_member"] = user.MemberExpireDate.Add(time.Duration(d) * 24 * time.Hour)
}
userDao := dao.UserDao{}
err := userDao.EditUserById(tx, user.UserId, userData)
if err != nil {
return false
}
return true
}