package service
|
|
import (
|
"car-service/cache"
|
"car-service/extend/util"
|
"car-service/models"
|
"car-service/vo"
|
"errors"
|
"fmt"
|
"github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi"
|
"github.com/gomodule/redigo/redis"
|
"github.com/satori/go.uuid"
|
)
|
|
type UserService struct {
|
|
}
|
|
func (sv *UserService) Login(phoneNum, code string) (bool,*vo.UserInfo,error) {
|
if verifyCode(phoneNum, code) {
|
var tmpUser models.User
|
err := tmpUser.SelectByPhoneNum(phoneNum)
|
fmt.Println("login err:", err)
|
if err != nil { //用户不存在,则新增
|
u := models.User{
|
Id: uuid.NewV4().String(),
|
PhoneNum: phoneNum,
|
IsDelete: false,
|
}
|
if _, e := u.Insert();e ==nil {
|
return true, &vo.UserInfo{
|
UserId: u.Id,
|
PhoneNum: phoneNum,
|
PlateNos: []string{},
|
}, nil
|
} else {
|
fmt.Println("u.Insert err:", e)
|
return false, nil, errors.New("注册失败")
|
}
|
} else { //用户已存在
|
var userCar models.UserCar
|
var plateNos []string
|
all, e := userCar.GetByUserId(tmpUser.Id)
|
if e == nil && all != nil {
|
for _,up := range all {
|
plateNos = append(plateNos, up.PlateNo)
|
}
|
}
|
return true, &vo.UserInfo{
|
UserId: tmpUser.Id,
|
PhoneNum: phoneNum,
|
PlateNos: plateNos,
|
}, nil
|
}
|
} else {
|
return false,nil, errors.New("验证码错误")
|
}
|
}
|
|
func (sv *UserService) AddPlateNo(userId, plateNo string) bool {
|
var uc models.UserCar
|
if uc.Exist(userId, plateNo) {
|
return true
|
}
|
tmp := models.UserCar{
|
Id: uuid.NewV4().String(),
|
UserId: userId,
|
PlateNo: plateNo,
|
}
|
_, err := tmp.Insert()
|
if err == nil {
|
return true
|
}
|
return false
|
}
|
|
func NewVerifyCode(phoneNum string) error {
|
regionId := "cn-hangzhou"
|
accessKeyId := "LTAIkHFaStA1JKk5"
|
AccessSecret := "oE7LhSqBWWUBzV0B7l1G9aVmgHPddM"
|
client, err := dysmsapi.NewClientWithAccessKey(regionId, accessKeyId, AccessSecret)
|
if err != nil {
|
return errors.New("短信服务器出错,请联系管理员")
|
}
|
verifyCode := util.GenValidateCode(6)
|
request := dysmsapi.CreateSendSmsRequest()
|
request.Scheme = "https"
|
request.SignName = "贝思科"
|
request.TemplateCode = "SMS_186578313"
|
request.PhoneNumbers = phoneNum
|
request.TemplateParam = "{\"code\":"+verifyCode+"}"
|
response, err := client.SendSms(request)
|
fmt.Println("sendSms err:", err)
|
if err != nil {
|
return errors.New("发送短信验证码失败,请联系管理员")
|
}
|
|
go add2Cache(phoneNum, verifyCode)
|
fmt.Println("send sms resp:", response)
|
return nil
|
}
|
|
func verifyCode(phoneNum string, cod string) bool {
|
return true
|
//if b,r := existCode(phoneNum);b && r == cod {
|
// return true
|
//} else {
|
// fmt.Println("verifyCode false,cod:",cod, "r:",r,"b:",b)
|
//}
|
//return false
|
}
|
|
func add2Cache(phoneNum string, code string) {
|
//写到redis缓存中
|
c := cache.Get()
|
defer c.Close()
|
|
reply, err := c.Do("SET", phoneNum, code, "EX", 5 * 60)//超时五分钟
|
if err != nil {
|
fmt.Println("写入redis失败")
|
} else {
|
fmt.Println("写入redis成功,reply:", reply)
|
}
|
}
|
func existCode(phoneNum string) (bool,string) {
|
c := cache.Get()
|
defer c.Close()
|
|
r, err := redis.String(c.Do("GET", phoneNum))
|
if err != nil {
|
fmt.Println("existCode err:", err)
|
return false,""
|
}
|
return true,r
|
}
|