You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

159 lines
3.5 KiB

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)
}