package controller import ( "GoClouds/cloud/sysCloud" "GoClouds/core/bean" "GoClouds/core/comm" "GoClouds/core/utils" "GoClouds/models" "GoClouds/service" "GoClouds/service/userService" "encoding/json" "fmt" "github.com/donnie4w/go-logger/logger" "github.com/go-macaron/cache" gocloud "github.com/mgr9525/go-cloud" ruisUtil "github.com/mgr9525/go-ruisutil" "gopkg.in/macaron.v1" "gopkg.in/mgo.v2/bson" "strings" "time" ) type UserController struct{} func (e *UserController) GetPath() string { return "/user" } func (e *UserController) Routes() { gocloud.Web.Any("/info", e.info) gocloud.Web.Any("/login", e.login) gocloud.Web.Any("/reg", e.reg) } func (e *UserController) Mid() []macaron.Handler { return []macaron.Handler{gocloud.AccessAllowFun} } func (UserController) info(c *macaron.Context, ch cache.Cache, ctj gocloud.ContJSON) { xid := ctj.GetString("xid") if len(xid) <= 0 { c.PlainText(500, []byte("param err")) return } e := &models.SysUser{} key := fmt.Sprintf("uinfo:%s", xid) if ch.Get(key) != nil { bts := ch.Get(key).([]byte) err := json.Unmarshal(bts, e) if err == nil { c.JSON(200, e) return } } e = userService.FindXid(xid) if e == nil { c.PlainText(404, []byte("not found")) return } bts, err := json.Marshal(e) if err == nil { ch.Put(key, bts, 3600*5) } c.JSON(200, e) } func (e *UserController) login(c *macaron.Context, ctj gocloud.ContJSON) { name := ctj.GetString("name") pass := ctj.GetString("pass") if len(name) <= 0 { c.PlainText(511, []byte("param err:name!")) return } if len(pass) <= 0 { c.PlainText(511, []byte("param err:pass!")) return } ret := &bean.SysLogin{} usr := userService.FindName(name) if usr == nil { ret.Errs = "未找到用户" c.JSON(200, ret) return } if len(usr.Xid) <= 0 { usr.Xid = fmt.Sprintf("%d", usr.Id) comm.DbSys.Cols("xid").Where("id=?", usr.Id).Update(usr) } if usr.Pass != strings.ToUpper(ruisUtil.Md5String(pass)) { ret.Errs = "密码错误" c.JSON(200, ret) return } if !sysCloud.CheckPermission(usr.Xid, "login") { c.PlainText(514, []byte("帐号禁止登录")) return } usr.Logintm = time.Now() comm.DbSys.Cols("logintm").Where("xid=?", usr.Xid).Update(usr) ret.Stat = 1 ret.Uid = usr.Id ret.Xid = usr.Xid ret.Name = usr.Name c.JSON(200, ret) } func (e *UserController) reg(c *macaron.Context, ctj gocloud.ContJSON) { phone := ctj.GetString("phone") pass := ctj.GetString("pass") nick := ctj.GetString("nick") if len(phone) <= 0 { c.PlainText(511, []byte("param err:phone!")) return } /*if len(pass) <= 0 { c.PlainText(511, []byte("param err:pass!")) return }*/ ret := &bean.SysLogin{} ne := userService.FindName(phone) if ne != nil { ret.Errs = "用户已注册过" c.JSON(200, ret) return } ne = &models.SysUser{} ne.Xid = bson.NewObjectId().Hex() ne.Name = phone ne.Phone = phone if len(pass) > 0 { ne.Pass = strings.ToUpper(ruisUtil.Md5String(pass)) } ne.Times = time.Now() ne.Logintm = time.Now() _, err := comm.DbSys.Insert(ne) if err != nil { logger.Info("nes SysUser insert err:" + err.Error()) c.PlainText(512, []byte("插入用户错误!!")) return } info := &models.MgoUserInfo{} info.Id = bson.NewObjectId() info.Uid = ne.Xid info.Name = ne.Name if len(nick) > 0 { info.Nick = nick } else { info.Nick = fmt.Sprintf("U%s", utils.GenValidateCode(7)) } service.MgoUserInfoDao.GetSession().C().Insert(info) ret.Stat = 1 ret.Uid = ne.Id ret.Xid = ne.Xid ret.Name = ne.Name c.JSON(200, ret) }