New file |
| | |
| | | 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() |
| | | } |
| | |
| | | pushAppSecret = gui4KFqXDv8LWKR57NKfS5 |
| | | pushMasterSecret = vFiErCTBqqAcufPzB0Tl45 |
| | | pushPackageName = uni.UNIEDF0B5C |
| | | pushBaseUrl = https://restapi.getui.com/v2/ |
| | | 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 |
New file |
| | |
| | | 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() |
| | | } |
| | | |
| | |
| | | package controllers |
| | | |
| | | import ( |
| | | "car-service/extend/code" |
| | | "car-service/models" |
| | | "encoding/json" |
| | | |
| | | "car-service/service" |
| | | "github.com/astaxie/beego" |
| | | "net/http" |
| | | ) |
| | | |
| | | // Operations about Users |
| | |
| | | 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 |
| | |
| | | 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() |
| | | } |
| | |
| | | // @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() |
| | | } |
| | | |
| | |
| | | // @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() |
| | | } |
| | | |
| | |
| | | // @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() |
| | | } |
| | | |
| | |
| | | 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 |
| | | ) |
| | |
| | | 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= |
| | |
| | | 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= |
| | |
| | | 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= |
| | |
| | | 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= |
| | |
| | | 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= |
| | |
| | | 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= |
| | |
| | | |
| | | import ( |
| | | "car-service/controllers" |
| | | "car-service/models" |
| | | _ "car-service/routers" |
| | | "github.com/astaxie/beego" |
| | | ) |
| | |
| | | beego.BConfig.WebConfig.DirectoryIndex = true |
| | | beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" |
| | | } |
| | | models.InitDb() |
| | | controllers.Schedule() |
| | | go controllers.ComputeSpaceLeftRealTime() |
| | | beego.Run() |
| | |
| | | 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) |
| | | } |
| | |
| | | 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") |
| | | } |
New file |
| | |
| | | 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() |
| | | } |
| | |
| | | //) |
| | | //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") |
| | | } |
New file |
| | |
| | | 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 |
| | | } |
New file |
| | |
| | | package vo |
| | | |
| | | type UserInfo struct { |
| | | UserId string `json:"userId"` |
| | | PhoneNum string `json:"phoneNum"` |
| | | TrueName string `json:"trueName"` |
| | | PlateNos []string `json:"plateNos"` |
| | | } |