GAAS GFrame项目web后台
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.

278 lines
7.8 KiB

  1. package models
  2. import (
  3. "LAPP_GAAS_GFrame_BACKEND/db"
  4. "LAPP_GAAS_GFrame_BACKEND/utils"
  5. "errors"
  6. "golang.org/x/crypto/bcrypt"
  7. "strings"
  8. "xorm.io/core"
  9. )
  10. /***
  11. *CreateBy:lou
  12. *Date:2020/5/15
  13. *TableName:用户表
  14. **********/
  15. // User
  16. type User struct {
  17. // key
  18. IdentityKey string
  19. // 用户名
  20. UserName string
  21. FirstName string
  22. LastName string
  23. // 角色
  24. Role string
  25. }
  26. type Usertab struct {
  27. Pid int `xorm:"not null pk comment('工厂ID') INT(0)" form:"pid" json:"pid"`
  28. Userid string `xorm:"not null pk comment('用户ID') VARCHAR(40)" form:"userid" json:"userid"`
  29. Name string `xorm:"comment('用户名') VARCHAR(40)" form:"name" json:"name"`
  30. Password string `xorm:"comment('密码') VARCHAR(255)" form:"password" json:"password"`
  31. Nickname string `xorm:"comment('用户昵称') VARCHAR(40)" form:"nickname" json:"nickname"`
  32. Depid int `xorm:"comment('归属部门') int(11)" form:"depid" json:"depid"`
  33. Phone string `xorm:"comment('手机号') VARCHAR(20)" form:"phone" json:"phone"`
  34. Avatar string `xorm:"comment('用户头像') VARCHAR(128)" form:"avatar" json:"avatar"`
  35. Email string `xorm:"comment('邮箱') VARCHAR(40)" form:"email" json:"email"`
  36. Status string `xorm:"comment('状态') VARCHAR(1)" form:"status" json:"status"`
  37. Gender string `xorm:"comment('性别') VARCHAR(1)" form:"gender" json:"gender"`
  38. Position string `xorm:"comment('岗位') VARCHAR(40)" form:"position" json:"position"`
  39. Role string `xorm:"comment('用户角色') VARCHAR(40)" form:"role" json:"role"`
  40. RoleId int `xorm:"comment('角色编码') int(11)" json:"role_id"` // 角色编码
  41. Remark string `xorm:"comment('备注') VARCHAR(100)" form:"remark" json:"remark"`
  42. Createtime string `xorm:"comment('创建时间') VARCHAR(14)" form:"createtime" json:"createtime"`
  43. Lastmodifytime string `xorm:"comment('最近一次更新时间') VARCHAR(14)" form:"lastmodifytime" json:"lastmodifytime"`
  44. Lastmodify string `xorm:"comment('最近一次更新人员') VARCHAR(40)" form:"lastmodify" json:"lastmodify"`
  45. }
  46. func (t *Usertab) TableName() string {
  47. return "usertab"
  48. }
  49. type UserPage struct {
  50. Usertab `xorm:"extends"`
  51. DeptName string `xorm:"-" json:"deptName"`
  52. }
  53. type SysUserView struct {
  54. Usertab `xorm:"extends"`
  55. Roletab `xorm:"extends"`
  56. }
  57. type UserViewInfo struct {
  58. Pid int `json:"pid"`
  59. Password string `json:"password"`
  60. Userid string `json:"userid"`
  61. Name string `json:"name"`
  62. Nickname string `json:"nickname"`
  63. Phone string `json:"phone"`
  64. Email string `json:"email"`
  65. Status string `json:"status"`
  66. Gender string `json:"gender"`
  67. RoleId int `json:"role_id"`
  68. RoleKey string `json:"role_key"`
  69. Rolename string `json:"rolename"`
  70. Remark string `json:"remark"`
  71. }
  72. // 清除string字段的右侧空格
  73. func (t *Usertab) Clipped() {
  74. utils.TrimStruct(t, *t)
  75. }
  76. // 获取用户数据
  77. func (t *Usertab) Get() (UserView UserViewInfo, err error) {
  78. e := db.Eloquent.Master()
  79. var user SysUserView
  80. table := e.Table(t.TableName()).Select("usertab.*, roletab.rolename").Where("1=1")
  81. table = table.Join("LEFT", "roletab", "usertab.role_id=roletab.role_id")
  82. if t.Userid != "" {
  83. table = table.And("userid = ?", t.Userid)
  84. }
  85. if t.Pid != 0 {
  86. table = table.And("pid = ?", t.Pid)
  87. }
  88. if t.Name != "" {
  89. table = table.And("name = ?", t.Name)
  90. }
  91. if t.RoleId != 0 {
  92. table = table.And("role_id = ?", t.RoleId)
  93. }
  94. if _, err = table.Get(&user); err != nil {
  95. return
  96. }
  97. user.Usertab.Clipped()
  98. user.Roletab.Clipped()
  99. UserView.Password = user.Usertab.Password
  100. UserView.Userid = user.Usertab.Userid
  101. UserView.Pid = user.Usertab.Pid
  102. UserView.Phone = user.Usertab.Phone
  103. UserView.Rolename = user.Roletab.Rolename
  104. UserView.RoleId = user.Usertab.RoleId
  105. UserView.Status = user.Usertab.Status
  106. UserView.Nickname = user.Usertab.Nickname
  107. UserView.Name = user.Usertab.Name
  108. UserView.Email = user.Usertab.Email
  109. return
  110. }
  111. func (t *Usertab) CreateUser(user ...*Usertab) (int64, error) {
  112. e := db.Eloquent.Master()
  113. return e.Insert(user)
  114. }
  115. func (t *Usertab) GetUserByUsername() (bool, error) {
  116. e := db.Eloquent.Master()
  117. return e.Get(t)
  118. }
  119. type SysUserPwd struct {
  120. OldPassword string `json:"oldPassword"`
  121. NewPassword string `json:"newPassword"`
  122. }
  123. func (t *Usertab) SetPwd(pwd *SysUserPwd) (Result bool, err error) {
  124. e := db.Eloquent.Master()
  125. user, _ := t.Get()
  126. _, err = utils.CompareHashAndPassword(user.Password, pwd.OldPassword)
  127. if err != nil {
  128. if strings.Contains(err.Error(), "hashedPassword is not the hash of the given password") {
  129. }
  130. return
  131. }
  132. t.Password = pwd.NewPassword
  133. var upuser Usertab
  134. upuser.Password =pwd.NewPassword
  135. err = upuser.Encrypt()
  136. if err != nil{
  137. return
  138. }
  139. _, err = e.ID(core.PK{t.Pid,t.Userid}).Update(&upuser)
  140. if err != nil {
  141. return false, err
  142. }
  143. return
  144. }
  145. func (t *Usertab) GetPage(pageSize int, pageIndex int) ([]Usertab, int, error) {
  146. doc := make([]Usertab, 0)
  147. e := db.Eloquent.Master()
  148. query := e.Where("1=1")
  149. where := "where 1=1 "
  150. if !utils.ValueIsEmpty(t.Userid) {
  151. query = query.And("userid = ?", t.Userid)
  152. where += " and userid = " + "'" + t.Userid + "'"
  153. }
  154. if !utils.ValueIsEmpty(t.Phone) {
  155. search := "%" + t.Phone + "%"
  156. query = query.And("phone like ?", search)
  157. where += " and phone like " + "'%" + t.Phone + "%'"
  158. }
  159. if !utils.ValueIsEmpty(t.Name) {
  160. searchName := "%" + t.Name + "%"
  161. query = query.And("name like ?", searchName)
  162. where += " and name like " + "'%" + t.Name + "%'"
  163. }
  164. Offset := (pageIndex - 1) * pageSize
  165. 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)
  166. if err != nil {
  167. return nil, 0, err
  168. }
  169. for k, _ := range doc {
  170. doc[k].Password = ""
  171. doc[k].Clipped()
  172. }
  173. usercount := new(Usertab)
  174. count, _ := query.Count(usercount)
  175. return doc, int(count), nil
  176. }
  177. //加密
  178. func (t *Usertab) Encrypt() (err error) {
  179. if t.Password == "" {
  180. return
  181. }
  182. var hash []byte
  183. if hash, err = bcrypt.GenerateFromPassword([]byte(t.Password), bcrypt.DefaultCost); err != nil {
  184. return
  185. } else {
  186. t.Password = string(hash)
  187. return
  188. }
  189. }
  190. //添加
  191. func (t *Usertab) Insert() (id int, err error) {
  192. if err = t.Encrypt(); err != nil {
  193. return
  194. }
  195. e := db.Eloquent.Master()
  196. // check 用户名
  197. usercount := new(Usertab)
  198. count, err := e.Table(t.TableName()).Where("userid = ?", t.Userid).Count(usercount)
  199. if count > 0 {
  200. err = errors.New("账户已存在!")
  201. return
  202. }
  203. var inid int64
  204. //添加数据
  205. if inid, err = e.Table(t.TableName()).Insert(t); err != nil {
  206. return
  207. }
  208. id = int(inid)
  209. return
  210. }
  211. //修改
  212. func (t *Usertab) Update(id string) (update Usertab, err error) {
  213. if err = t.Encrypt(); err != nil {
  214. return
  215. }
  216. e := db.Eloquent.Master()
  217. if _, err = e.Table(t.TableName()).Where("userid=?",id).Get(&update); err != nil {
  218. return
  219. }
  220. if t.RoleId == 0 {
  221. t.RoleId = update.RoleId
  222. }
  223. update.Clipped()
  224. //参数1:是要修改的数据
  225. var upuser Usertab
  226. upuser.Phone =t.Phone
  227. upuser.Email =t.Email
  228. upuser.Remark =t.Remark
  229. upuser.RoleId =t.RoleId
  230. upuser.Role = t.Role
  231. upuser.Avatar = t.Avatar
  232. upuser.Status = t.Status
  233. upuser.Nickname = t.Nickname
  234. upuser.Name = t.Name
  235. upuser.Lastmodify = t.Lastmodify
  236. upuser.Lastmodifytime = t.Lastmodifytime
  237. //参数2:是修改的数据
  238. if _, err = e.Table(t.TableName()).ID(core.PK{t.Pid,t.Userid}).Update(&upuser); err != nil {
  239. return
  240. }
  241. return
  242. }
  243. func (t *Usertab) BatchDelete(ids []string) (Result bool, err error) {
  244. e := db.Eloquent.Master()
  245. idstr := utils.IDsToStrings(ids)
  246. if _, err = e.Table(t.TableName()).Where("userid in ("+idstr+")").Delete(&Usertab{}); err != nil {
  247. return
  248. }
  249. Result = true
  250. return
  251. }