158 lines
3.4 KiB
Go
158 lines
3.4 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"gorm.io/gorm"
|
|
"hepa-calc-api/api/dao"
|
|
"hepa-calc-api/api/model"
|
|
"hepa-calc-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()
|
|
t := time.Time(*user.MemberExpireDate)
|
|
if t.Before(now) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// CheckUserBuyMember 检测用户是否购买过会员
|
|
func (r *UserService) CheckUserBuyMember(userId int64) bool {
|
|
orderMemberDao := dao.OrderMemberDao{}
|
|
orderMember, _ := orderMemberDao.GetUserFirstTimeBuyOrderMember(userId)
|
|
if orderMember == nil {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// CheckUserBuySingle 检测用户是否购买过单项产品
|
|
func (r *UserService) CheckUserBuySingle(userId int64) bool {
|
|
orderSingleDao := dao.OrderSingleDao{}
|
|
|
|
maps := make(map[string]interface{})
|
|
maps["user_id"] = userId
|
|
maps["order_status"] = 3
|
|
orderSingle, _ := orderSingleDao.GetOrderSingle(maps)
|
|
if orderSingle == 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 {
|
|
t := time.Time(*user.MemberExpireDate)
|
|
userData["is_member"] = t.Add(time.Duration(d) * 24 * time.Hour)
|
|
}
|
|
|
|
userDao := dao.UserDao{}
|
|
err := userDao.EditUserById(tx, user.UserId, userData)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// AddUserSingleSubmitCount 增加用户单项提交次数
|
|
func (r *UserService) AddUserSingleSubmitCount(tx *gorm.DB, userId int64) (bool, error) {
|
|
userDao := dao.UserDao{}
|
|
err := userDao.Inc(tx, userId, "single_submit_count", 1)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// AddUserSinglePayCount 增加用户单项支付次数
|
|
func (r *UserService) AddUserSinglePayCount(tx *gorm.DB, userId int64) (bool, error) {
|
|
userDao := dao.UserDao{}
|
|
err := userDao.Inc(tx, userId, "single_pay_count", 1)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// AddUserMemberBuyCount 增加用户会员购买次数
|
|
func (r *UserService) AddUserMemberBuyCount(tx *gorm.DB, userId int64) (bool, error) {
|
|
userDao := dao.UserDao{}
|
|
err := userDao.Inc(tx, userId, "member_buy_count", 1)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return true, nil
|
|
}
|