|
|
- package models
-
- import (
- "LAPP_GAAS_GFrame_BACKEND/db"
- "LAPP_GAAS_GFrame_BACKEND/utils"
- "errors"
- "golang.org/x/crypto/bcrypt"
- "strings"
- "xorm.io/core"
- )
-
- /***
- *CreateBy:lou
- *Date:2020/5/15
- *TableName:用户表
- **********/
- // User
- type User struct {
- // key
- IdentityKey string
- // 用户名
- UserName string
- FirstName string
- LastName string
- // 角色
- Role string
- }
-
- type Usertab struct {
- Pid int `xorm:"not null pk comment('工厂ID') INT(0)" form:"pid" json:"pid"`
- Userid string `xorm:"not null pk comment('用户ID') VARCHAR(40)" form:"userid" json:"userid"`
- Name string `xorm:"comment('用户名') VARCHAR(40)" form:"name" json:"name"`
- Password string `xorm:"comment('密码') VARCHAR(255)" form:"password" json:"password"`
- Nickname string `xorm:"comment('用户昵称') VARCHAR(40)" form:"nickname" json:"nickname"`
- Depid int `xorm:"comment('归属部门') int(11)" form:"depid" json:"depid"`
- Phone string `xorm:"comment('手机号') VARCHAR(20)" form:"phone" json:"phone"`
- Avatar string `xorm:"comment('用户头像') VARCHAR(128)" form:"avatar" json:"avatar"`
- Email string `xorm:"comment('邮箱') VARCHAR(40)" form:"email" json:"email"`
- Status string `xorm:"comment('状态') VARCHAR(1)" form:"status" json:"status"`
- Gender string `xorm:"comment('性别') VARCHAR(1)" form:"gender" json:"gender"`
- Position string `xorm:"comment('岗位') VARCHAR(40)" form:"position" json:"position"`
- Role string `xorm:"comment('用户角色') VARCHAR(40)" form:"role" json:"role"`
- RoleId int `xorm:"comment('角色编码') int(11)" json:"role_id"` // 角色编码
- Remark string `xorm:"comment('备注') VARCHAR(100)" form:"remark" json:"remark"`
- Createtime string `xorm:"comment('创建时间') VARCHAR(14)" form:"createtime" json:"createtime"`
- Lastmodifytime string `xorm:"comment('最近一次更新时间') VARCHAR(14)" form:"lastmodifytime" json:"lastmodifytime"`
- Lastmodify string `xorm:"comment('最近一次更新人员') VARCHAR(40)" form:"lastmodify" json:"lastmodify"`
- }
-
- func (t *Usertab) TableName() string {
- return "usertab"
- }
-
- type UserPage struct {
- Usertab `xorm:"extends"`
- DeptName string `xorm:"-" json:"deptName"`
- }
-
- type SysUserView struct {
- Usertab `xorm:"extends"`
- Roletab `xorm:"extends"`
- }
-
- type UserViewInfo struct {
- Pid int `json:"pid"`
- Password string `json:"password"`
- Userid string `json:"userid"`
- Name string `json:"name"`
- Nickname string `json:"nickname"`
- Phone string `json:"phone"`
- Email string `json:"email"`
- Status string `json:"status"`
- Gender string `json:"gender"`
- RoleId int `json:"role_id"`
- RoleKey string `json:"role_key"`
- Rolename string `json:"rolename"`
- Remark string `json:"remark"`
- }
-
- // 清除string字段的右侧空格
- func (t *Usertab) Clipped() {
- utils.TrimStruct(t, *t)
- }
-
- // 获取用户数据
- func (t *Usertab) Get() (UserView UserViewInfo, err error) {
- e := db.Eloquent.Master()
-
- var user SysUserView
- table := e.Table(t.TableName()).Select("usertab.*, roletab.rolename").Where("1=1")
- table = table.Join("LEFT", "roletab", "usertab.role_id=roletab.role_id")
- if t.Userid != "" {
- table = table.And("userid = ?", t.Userid)
- }
- if t.Pid != 0 {
- table = table.And("pid = ?", t.Pid)
- }
- if t.Name != "" {
- table = table.And("name = ?", t.Name)
- }
-
- if t.RoleId != 0 {
- table = table.And("role_id = ?", t.RoleId)
- }
-
- if _, err = table.Get(&user); err != nil {
- return
- }
- user.Usertab.Clipped()
- user.Roletab.Clipped()
- UserView.Password = user.Usertab.Password
- UserView.Userid = user.Usertab.Userid
- UserView.Pid = user.Usertab.Pid
- UserView.Phone = user.Usertab.Phone
- UserView.Rolename = user.Roletab.Rolename
- UserView.RoleId = user.Usertab.RoleId
- UserView.Status = user.Usertab.Status
- UserView.Nickname = user.Usertab.Nickname
- UserView.Name = user.Usertab.Name
- UserView.Email = user.Usertab.Email
-
- return
- }
-
- func (t *Usertab) CreateUser(user ...*Usertab) (int64, error) {
- e := db.Eloquent.Master()
- return e.Insert(user)
- }
-
- func (t *Usertab) GetUserByUsername() (bool, error) {
- e := db.Eloquent.Master()
- return e.Get(t)
- }
-
- type SysUserPwd struct {
- OldPassword string `json:"oldPassword"`
- NewPassword string `json:"newPassword"`
- }
-
- func (t *Usertab) SetPwd(pwd *SysUserPwd) (Result bool, err error) {
- e := db.Eloquent.Master()
- user, _ := t.Get()
- _, err = utils.CompareHashAndPassword(user.Password, pwd.OldPassword)
- if err != nil {
- if strings.Contains(err.Error(), "hashedPassword is not the hash of the given password") {
- }
- return
- }
- t.Password = pwd.NewPassword
- var upuser Usertab
- upuser.Password =pwd.NewPassword
- err = upuser.Encrypt()
- if err != nil{
- return
- }
- _, err = e.ID(core.PK{t.Pid,t.Userid}).Update(&upuser)
- if err != nil {
- return false, err
- }
- return
- }
-
- func (t *Usertab) GetPage(pageSize int, pageIndex int) ([]Usertab, int, error) {
- doc := make([]Usertab, 0)
- e := db.Eloquent.Master()
- query := e.Where("1=1")
- where := "where 1=1 "
- if !utils.ValueIsEmpty(t.Userid) {
- query = query.And("userid = ?", t.Userid)
- where += " and userid = " + "'" + t.Userid + "'"
- }
- if !utils.ValueIsEmpty(t.Phone) {
- search := "%" + t.Phone + "%"
- query = query.And("phone like ?", search)
- where += " and phone like " + "'%" + t.Phone + "%'"
- }
- if !utils.ValueIsEmpty(t.Name) {
- searchName := "%" + t.Name + "%"
- query = query.And("name like ?", searchName)
- where += " and name like " + "'%" + t.Name + "%'"
- }
- Offset := (pageIndex - 1) * pageSize
- err := e.SQL("SELECT TOP " + utils.ValueToString(pageSize, "") + " usertab.* FROM usertab " + where + " AND (convert(varchar(10),pid)+convert(varchar(40),userid) NOT IN (SELECT TOP " + utils.ValueToString(Offset, "") + " convert(varchar(10),pid)+convert(varchar(40),userid) FROM usertab " + where + " ORDER BY createtime DESC)) ORDER BY createtime DESC").Find(&doc)
- if err != nil {
- return nil, 0, err
- }
- for k, _ := range doc {
- doc[k].Password = ""
- doc[k].Clipped()
- }
-
- usercount := new(Usertab)
-
- count, _ := query.Count(usercount)
- return doc, int(count), nil
- }
-
- //加密
- func (t *Usertab) Encrypt() (err error) {
- if t.Password == "" {
- return
- }
-
- var hash []byte
- if hash, err = bcrypt.GenerateFromPassword([]byte(t.Password), bcrypt.DefaultCost); err != nil {
- return
- } else {
- t.Password = string(hash)
- return
- }
- }
-
- //添加
- func (t *Usertab) Insert() (id int, err error) {
- if err = t.Encrypt(); err != nil {
- return
- }
- e := db.Eloquent.Master()
- // check 用户名
- usercount := new(Usertab)
- count, err := e.Table(t.TableName()).Where("userid = ?", t.Userid).Count(usercount)
- if count > 0 {
- err = errors.New("账户已存在!")
- return
- }
- var inid int64
- //添加数据
- if inid, err = e.Table(t.TableName()).Insert(t); err != nil {
- return
- }
- id = int(inid)
- return
- }
-
- //修改
- func (t *Usertab) Update(id string) (update Usertab, err error) {
- if err = t.Encrypt(); err != nil {
- return
- }
- e := db.Eloquent.Master()
- if _, err = e.Table(t.TableName()).Where("userid=?",id).Get(&update); err != nil {
- return
- }
- if t.RoleId == 0 {
- t.RoleId = update.RoleId
- }
- update.Clipped()
- //参数1:是要修改的数据
-
- var upuser Usertab
- upuser.Phone =t.Phone
- upuser.Email =t.Email
- upuser.Remark =t.Remark
- upuser.RoleId =t.RoleId
- upuser.Role = t.Role
- upuser.Avatar = t.Avatar
- upuser.Status = t.Status
- upuser.Nickname = t.Nickname
- upuser.Name = t.Name
- upuser.Lastmodify = t.Lastmodify
- upuser.Lastmodifytime = t.Lastmodifytime
-
- //参数2:是修改的数据
- if _, err = e.Table(t.TableName()).ID(core.PK{t.Pid,t.Userid}).Update(&upuser); err != nil {
- return
- }
- return
- }
-
- func (t *Usertab) BatchDelete(ids []string) (Result bool, err error) {
- e := db.Eloquent.Master()
- idstr := utils.IDsToStrings(ids)
- if _, err = e.Table(t.TableName()).Where("userid in ("+idstr+")").Delete(&Usertab{}); err != nil {
- return
- }
- Result = true
- return
- }
|