liuxiaolong
2020-08-06 dbc843d0b37f786fb816131bcc7ebca86dbe72e9
service/userService.go
@@ -1,15 +1,15 @@
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"
   "sync"
   "time"
)
type UserService struct {
@@ -46,10 +46,18 @@
            IsDelete: false,
         }
         if _, e := u.Insert();e ==nil {
            var plateNos = make([]string, 0)
            hikVehicles := carSv.GetVehicleListByPerson(u.Id)
            if hikVehicles != nil {
               for _,up := range hikVehicles {
                  plateNos = append(plateNos, up.PlateNo)
               }
            }
            return true, &vo.UserInfo{
               UserId: u.Id,
               PhoneNum: phoneNum,
               PlateNos: []string{},
               PlateNos: plateNos,
            }, nil
         } else {
            fmt.Println("u.Insert err:", e)
@@ -93,6 +101,26 @@
}
func NewVerifyCode(phoneNum string) error {
   var tmpUser models.User
   err := tmpUser.SelectByPhoneNum(phoneNum)
   if err != nil { //用户不存在,注册获取验证码,此手机号必须在育英海康平台中
      carSv := NewCarService()
      personList := carSv.GetHikPersonList()
      found := false
      if personList ==nil {
         return errors.New("手机号不存在,请联系停车场管理员")
      } else {
         for _,p := range personList {
            if p.PhoneNo == phoneNum {
               found = true
            }
         }
      }
      if !found {
         return errors.New("手机号不存在,请联系停车场管理员")
      }
   }
   regionId := "cn-hangzhou"
   accessKeyId := "LTAIkHFaStA1JKk5"
   AccessSecret := "oE7LhSqBWWUBzV0B7l1G9aVmgHPddM"
@@ -127,26 +155,52 @@
   return false
}
type CodCache struct {
   phoneNum    string
   cod       string
   ex          time.Time
}
var codMap = make(map[string]CodCache)
var codLock sync.RWMutex
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)
   //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)
   //}
   codLock.Lock()
   defer codLock.Unlock()
   expireTime := time.Now().Add(time.Minute * 5)
   codMap[phoneNum] = CodCache{
      phoneNum:phoneNum,
      cod: code,
      ex:expireTime,
   }
}
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,""
   //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
   codLock.Lock()
   defer codLock.Unlock()
   if cache,exist := codMap[phoneNum];exist {
      if cache.ex.Before(time.Now()) {//已过期
         return false, ""
      } else {
         return true, cache.cod
      }
   } else {
      return false, ""
   }
   return true,r
}