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