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