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) { carSv := NewCarService() var tmpUser models.User err := tmpUser.SelectByPhoneNum(phoneNum) fmt.Println("login err:", err) if err != nil { //用户不存在,则新增 //先判断此手机号是否在海康平台中 hikPersons := carSv.GetHikPersonList() found := false hikPersonId := "" if hikPersons != nil { for _,hikP := range hikPersons { if hikP.PhoneNo == phoneNum { found = true hikPersonId = hikP.PersonId } } } if !found { return false, nil, errors.New("请联系停车场管理员") } u := models.User{ Id: hikPersonId, 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 plateNos = make([]string, 0) hikVehicles := carSv.GetVehicleListByPerson(tmpUser.Id) if hikVehicles != nil { for _,up := range hikVehicles { 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 { 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 }