From 167f00c02df35f19d689e60db3d30ebf035ab629 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期一, 29 六月 2020 17:02:02 +0800 Subject: [PATCH] add user and userCar --- controllers/user.go | 90 +++------- vo/user.go | 8 + cache/redis.go | 26 +++ controllers/code.go | 37 ++++ go.mod | 1 service/userService.go | 114 ++++++++++++++ models/user.go | 111 ++++++------- conf/app.conf | 5 go.sum | 16 + routers/router.go | 12 + models/userCar.go | 36 ++++ models/db.go | 13 + main.go | 2 13 files changed, 342 insertions(+), 129 deletions(-) diff --git a/cache/redis.go b/cache/redis.go new file mode 100644 index 0000000..9598272 --- /dev/null +++ b/cache/redis.go @@ -0,0 +1,26 @@ +package cache + +import ( + "fmt" + "github.com/astaxie/beego" + redigo "github.com/gomodule/redigo/redis" +) + +var pool *redigo.Pool + +func init() { + redisHost := beego.AppConfig.String("redisIp") + redisPort := beego.AppConfig.String("redisPort") + poolSize := 20 + pool = redigo.NewPool(func() (redigo.Conn, error) { + c, err := redigo.Dial("tcp", fmt.Sprintf("%s:%d", redisHost, redisPort)) + if err != nil { + return nil, err + } + return c, nil + }, poolSize) +} + +func Get() redigo.Conn { + return pool.Get() +} \ No newline at end of file diff --git a/conf/app.conf b/conf/app.conf index 0f511aa..8ccddc0 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -15,4 +15,7 @@ pushAppSecret =聽gui4KFqXDv8LWKR57NKfS5 pushMasterSecret = vFiErCTBqqAcufPzB0Tl45 pushPackageName = uni.UNIEDF0B5C -pushBaseUrl = https://restapi.getui.com/v2/ \ No newline at end of file +pushBaseUrl = https://restapi.getui.com/v2/ +dbUrl = root:c++java123@tcp(192.168.20.173:3306)/car_yuying?charset=utf8 +redisIp = 192.168.20.10 +redisPort = 6379 \ No newline at end of file diff --git a/controllers/code.go b/controllers/code.go new file mode 100644 index 0000000..5319d49 --- /dev/null +++ b/controllers/code.go @@ -0,0 +1,37 @@ +package controllers + +import ( + "car-service/extend/code" + "car-service/service" + "github.com/astaxie/beego" + "net/http" +) + +type CodeController struct { + beego.Controller +} + +// @router /new [get] +func (c *CodeController) New() { + phoneNum := c.GetString("phoneNum") + resp := code.Code{} + if phoneNum == "" { + resp.Success= false + resp.Status= http.StatusBadRequest + resp.Data= nil + } else { + err := service.NewVerifyCode(phoneNum) + if err == nil { + resp.Success= true + resp.Status= http.StatusOK + resp.Data= "鍙戦�佹垚鍔�" + } else { + resp.Success= false + resp.Status= http.StatusBadRequest + resp.Data= err.Error() + } + } + c.Data["json"] = resp + c.ServeJSON() +} + diff --git a/controllers/user.go b/controllers/user.go index 4fb7558..05a46fa 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -1,10 +1,11 @@ package controllers import ( + "car-service/extend/code" "car-service/models" - "encoding/json" - + "car-service/service" "github.com/astaxie/beego" + "net/http" ) // Operations about Users @@ -12,48 +13,6 @@ beego.Controller } -// @Title CreateUser -// @Description create users -// @Param body body models.User true "body for user content" -// @Success 200 {int} models.User.Id -// @Failure 403 {string} json "body is empty" -// @router / [post] -func (u *UserController) Post() { - var user models.User - json.Unmarshal(u.Ctx.Input.RequestBody, &user) - uid := models.AddUser(user) - u.Data["json"] = map[string]string{"uid": uid} - u.ServeJSON() -} - -// @Title GetAll -// @Description get all Users -// @Success 200 {object} models.User -// @router / [get] -func (u *UserController) GetAll() { - users := models.GetAllUsers() - u.Data["json"] = users - u.ServeJSON() -} - -// @Title Get -// @Description get user by uid -// @Param uid path string true "The key for staticblock" -// @Success 200 {object} models.User -// @Failure 403 {string} json ":uid is empty" -// @router /:uid [get] -func (u *UserController) Get() { - uid := u.GetString(":uid") - if uid != "" { - user, err := models.GetUser(uid) - if err != nil { - u.Data["json"] = err.Error() - } else { - u.Data["json"] = user - } - } - u.ServeJSON() -} // @Title Update // @Description update the user @@ -66,13 +25,8 @@ uid := u.GetString(":uid") if uid != "" { var user models.User - json.Unmarshal(u.Ctx.Input.RequestBody, &user) - uu, err := models.UpdateUser(uid, &user) - if err != nil { - u.Data["json"] = err.Error() - } else { - u.Data["json"] = uu - } + u.Data["json"] = user + } u.ServeJSON() } @@ -85,8 +39,14 @@ // @router /:uid [delete] func (u *UserController) Delete() { uid := u.GetString(":uid") - models.DeleteUser(uid) - u.Data["json"] = "delete success!" + var user = models.User{ + Id: uid, + } + + i, err := user.DeleteById() + if err ==nil && i >0 { + u.Data["json"] = "delete success!" + } u.ServeJSON() } @@ -98,13 +58,21 @@ // @Failure 403 {string} json "user not exist" // @router /login [get] func (u *UserController) Login() { - username := u.GetString("username") - password := u.GetString("password") - if models.Login(username, password) { - u.Data["json"] = "login success" + phoneNum := u.GetString("phoneNum") + cod := u.GetString("code") + var sv service.UserService + b, info, e := sv.Login(phoneNum, cod) + resp := code.Code{} + if b { + resp.Success= true + resp.Status= http.StatusOK + resp.Data= *info } else { - u.Data["json"] = "user not exist" + resp.Success= false + resp.Status= http.StatusBadRequest + resp.Data= e.Error() } + u.Data["json"] = resp u.ServeJSON() } @@ -113,7 +81,11 @@ // @Success 200 {string} logout success // @router /logout [get] func (u *UserController) Logout() { - u.Data["json"] = "logout success" + resp := code.Code{} + resp.Success = true + resp.Status = http.StatusOK + resp.Data = "閫�鍑烘垚鍔�" + u.Data["json"] = resp u.ServeJSON() } diff --git a/go.mod b/go.mod index a9742c0..b16c2de 100644 --- a/go.mod +++ b/go.mod @@ -10,4 +10,5 @@ github.com/smartystreets/goconvey v1.6.4 // indirect github.com/swaggo/swag v1.6.7 github.com/robfig/cron v1.2.0 + github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190808125512-07798873deee ) diff --git a/go.sum b/go.sum index 1751cd9..df1b18b 100644 --- a/go.sum +++ b/go.sum @@ -10,12 +10,16 @@ github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190808125512-07798873deee h1:NYqDBPkhVYt68W3yoGoRRi32i3MLx2ey7SFkJ1v/UI0= +github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190808125512-07798873deee/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.78 h1:9XVQI9E/JLj1tODaoZkrl/UXIdFL9WNo7Yly7iYwDFQ= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.78/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk= +github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/astaxie/beego v1.12.1 h1:dfpuoxpzLVgclveAXe4PyNKqkzgm5zF4tgF2B3kkM2I= github.com/astaxie/beego v1.12.1/go.mod h1:kPBWpSANNbSdIqOc8SUL9h+1oyBMZhROeYsXQDbidWQ= +github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU= -github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= -github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= @@ -54,12 +58,14 @@ github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -77,11 +83,14 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= +github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo= @@ -91,6 +100,7 @@ github.com/siddontang/ledisdb v0.0.0-20181029004158-becf5f38d373/go.mod h1:mF1DpOSOUiJRMR+FDqaqu3EBqrybQtrDDszLUZ6oxPg= github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= @@ -138,6 +148,7 @@ golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -150,6 +161,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go index 2acffc9..7679f46 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ import ( "car-service/controllers" + "car-service/models" _ "car-service/routers" "github.com/astaxie/beego" ) @@ -11,6 +12,7 @@ beego.BConfig.WebConfig.DirectoryIndex = true beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" } + models.InitDb() controllers.Schedule() go controllers.ComputeSpaceLeftRealTime() beego.Run() diff --git a/models/db.go b/models/db.go index 2640e7f..f4be3a1 100644 --- a/models/db.go +++ b/models/db.go @@ -1 +1,14 @@ package models + +import ( + "github.com/astaxie/beego" + "github.com/astaxie/beego/orm" + _ "github.com/go-sql-driver/mysql" //瀵煎叆鏁版嵁搴撻┍鍔� +) + +func InitDb() { + dbUrl := beego.AppConfig.String("dbUrl") + _ = orm.RegisterDataBase("default", "mysql", dbUrl) + orm.RegisterModel(new(User)) + _ = orm.RunSyncdb("default", false, true) +} diff --git a/models/user.go b/models/user.go index d4bebb2..5e2e8f0 100644 --- a/models/user.go +++ b/models/user.go @@ -1,86 +1,71 @@ package models import ( - "errors" - "strconv" - "time" + "github.com/astaxie/beego/orm" ) - -var ( - UserList map[string]*User -) - -func init() { - UserList = make(map[string]*User) - u := User{"user_11111", "astaxie", "11111", Profile{"male", 20, "Singapore", "astaxie@gmail.com"}} - UserList["user_11111"] = &u -} type User struct { - Id string - Username string - Password string - Profile Profile + Id string `orm:"pk;size(50);column(id)" json:"id"` + Username string `orm:"size(250);column(username)" json:"username"` + PhoneNum string `orm:"size(20);column(phoneNum)" json:"phoneNum"` //鎵嬫満鍙� + Password string `orm:"size(50);column(password)" json:"password"` + TrueName string `orm:"size(250);column(trueName)" json:"trueName"` //鐪熷疄濮撳悕 + Gender int `orm:"size(1);column(gender)" json:"gender"` //鎬у埆 + IdCard string `orm:"size(250);column(idCard)" json:"idCard"` //韬唤璇佸彿 + Age int `orm:"size(8);column(age)" json:"age"` //骞撮緞 + Address string `orm:"size(200);column(address)" json:"gender"` //鍦板潃 + + Email string `orm:"size(200);column(email)" json:"email"` //閭 + IsDelete bool `orm:"size(1);default(0);column(isDelete)" json:"isDelete"` } -type Profile struct { - Gender string - Age int - Address string - Email string +func (u *User) TableName() string { + return "sys_user" } -func AddUser(u User) string { - u.Id = "user_" + strconv.FormatInt(time.Now().UnixNano(), 10) - UserList[u.Id] = &u - return u.Id -} - -func GetUser(uid string) (u *User, err error) { - if u, ok := UserList[uid]; ok { - return u, nil +func (u *User) TableUnique() [][]string { + return [][]string { + []string{"phoneNum"}, } - return nil, errors.New("User not exists") } -func GetAllUsers() map[string]*User { - return UserList +func (u *User) Insert() (int64,error) { + o := orm.NewOrm() + return o.Insert(u) } -func UpdateUser(uid string, uu *User) (a *User, err error) { - if u, ok := UserList[uid]; ok { - if uu.Username != "" { - u.Username = uu.Username - } - if uu.Password != "" { - u.Password = uu.Password - } - if uu.Profile.Age != 0 { - u.Profile.Age = uu.Profile.Age - } - if uu.Profile.Address != "" { - u.Profile.Address = uu.Profile.Address - } - if uu.Profile.Gender != "" { - u.Profile.Gender = uu.Profile.Gender - } - if uu.Profile.Email != "" { - u.Profile.Email = uu.Profile.Email - } - return u, nil +func (u *User) SelectById(uid string) error { + o := orm.NewOrm() + err := o.Raw("select * from ? where id=?", u.TableName(), uid).QueryRow(u) + return err +} + +func (u *User) SelectByPhoneNum(phoneNum string) error { + o := orm.NewOrm() + err := o.Raw("select * from ? where phoneNum=?", u.TableName(), phoneNum).QueryRow(u) + return err +} + +func (u *User) GetAllUsers() (all []User,err error) { + o := orm.NewOrm() + _, err = o.Raw("select * from ?", u.TableName()).QueryRows(&all) + if err != nil { + return nil, err } - return nil, errors.New("User Not Exist") + return all,nil +} + +func (u *User) Update() (int64, error) { + o := orm.NewOrm() + return o.Update(u) } func Login(username, password string) bool { - for _, u := range UserList { - if u.Username == username && u.Password == password { - return true - } - } + return false } -func DeleteUser(uid string) { - delete(UserList, uid) +func (u *User) DeleteById() (int64, error) { + o := orm.NewOrm() + return o.Update(u, "isDelete") } diff --git a/models/userCar.go b/models/userCar.go new file mode 100644 index 0000000..598e613 --- /dev/null +++ b/models/userCar.go @@ -0,0 +1,36 @@ +package models + +import "github.com/astaxie/beego/orm" + +type UserCar struct { + Id string `orm:"pk;size(50);column(id)" json:"id"` + UserId string `orm:"column(userId)" json:"userId"` //浜哄憳id + PlateNo string `orm:"column(plateNo)" json:"plateNo"` //杞︾墝鍙� +} + +func (uc *UserCar) TableName() string { + return "user_car" +} + +func (uc *UserCar) Insert() (int64,error) { + o := orm.NewOrm() + return o.Insert(uc) +} + +func (uc *UserCar) GetByUserId(userId string) (all []UserCar,err error) { + o := orm.NewOrm() + _, err = o.Raw("select * from ? where userId=?", uc.TableName(), userId).QueryRows(&all) + if err != nil { + return nil, err + } + return all,nil +} + +func (uc *UserCar) DeleteByUserId(userId string) (int64, error) { + o := orm.NewOrm() + result, err := o.Raw("delete from ? where userId=?", uc.TableName(), userId).Exec() + if err != nil { + return 0, err + } + return result.RowsAffected() +} \ No newline at end of file diff --git a/routers/router.go b/routers/router.go index 5a9a84c..e2e6f18 100644 --- a/routers/router.go +++ b/routers/router.go @@ -39,8 +39,12 @@ //) //beego.AddNamespace(ns) //beego.Router("/basic/api/car/app/user", &controllers.UserController{}) - beego.Router("/basic/api/car/statistic", &controllers.CarController{}, "*:Statistic") - beego.Router("/basic/api/car/spaceNo", &controllers.CarController{}, "*:SpaceNo") - beego.Router("/basic/api/car/app/version", &controllers.AppController{}, "*:Version") - beego.Router("/basic/api/car/restriction", &controllers.RestrictionController{}, "*:Restriction") + preApi := "/basic/api" + beego.Router(preApi+"/car/statistic", &controllers.CarController{}, "*:Statistic") + beego.Router(preApi+"/car/spaceNo", &controllers.CarController{}, "*:SpaceNo") + beego.Router(preApi+"/car/app/version", &controllers.AppController{}, "*:Version") + beego.Router(preApi+"/car/restriction", &controllers.RestrictionController{}, "*:Restriction") + beego.Router(preApi+"/code/new", &controllers.CodeController{}, "*:New") + beego.Router(preApi+"/user/login", &controllers.UserController{}, "*:Login") + beego.Router(preApi+"/user/logout", &controllers.UserController{}, "*:Logout") } diff --git a/service/userService.go b/service/userService.go new file mode 100644 index 0000000..665820b --- /dev/null +++ b/service/userService.go @@ -0,0 +1,114 @@ +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 + if err := tmpUser.SelectByPhoneNum(phoneNum); err != nil { //鐢ㄦ埛涓嶅瓨鍦�,鍒欐柊澧� + u := models.User{ + Id: uuid.NewV4().String(), + PhoneNum: phoneNum, + IsDelete: false, + } + if i, e := u.Insert();e ==nil && i >0 { + return true, &vo.UserInfo{ + UserId: u.Id, + PhoneNum: phoneNum, + PlateNos: []string{}, + }, nil + } else { + 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 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 +} \ No newline at end of file diff --git a/vo/user.go b/vo/user.go new file mode 100644 index 0000000..dd04367 --- /dev/null +++ b/vo/user.go @@ -0,0 +1,8 @@ +package vo + +type UserInfo struct { + UserId string `json:"userId"` + PhoneNum string `json:"phoneNum"` + TrueName string `json:"trueName"` + PlateNos []string `json:"plateNos"` +} \ No newline at end of file -- Gitblit v1.8.0