沈阳玫苑物业管理后端
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.

276 lines
7.5 KiB

  1. package models
  2. import (
  3. "lapp_-wy/db"
  4. "lapp_-wy/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.MasterEngine()
  79. var user SysUserView
  80. table := e.Table(t.TableName()).Select("usertab.*, roletab.rolename").Where("usertab.pid = ?", t.Pid)
  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.Name != "" {
  86. table = table.And("name = ?", t.Name)
  87. }
  88. if t.RoleId != 0 {
  89. table = table.And("role_id = ?", t.RoleId)
  90. }
  91. if _, err = table.Get(&user); err != nil {
  92. return
  93. }
  94. user.Usertab.Clipped()
  95. user.Roletab.Clipped()
  96. UserView.Password = user.Usertab.Password
  97. UserView.Userid = user.Usertab.Userid
  98. UserView.Pid = user.Usertab.Pid
  99. UserView.Phone = user.Usertab.Phone
  100. UserView.Rolename = user.Roletab.Rolename
  101. UserView.RoleId = user.Usertab.RoleId
  102. UserView.Status = user.Usertab.Status
  103. UserView.Nickname = user.Usertab.Nickname
  104. UserView.Name = user.Usertab.Name
  105. UserView.Email = user.Usertab.Email
  106. return
  107. }
  108. func (t *Usertab) CreateUser(user ...*Usertab) (int64, error) {
  109. e := db.MasterEngine()
  110. return e.Insert(user)
  111. }
  112. func (t *Usertab) GetUserByUsername() (bool, error) {
  113. e := db.MasterEngine()
  114. return e.Get(t)
  115. }
  116. type SysUserPwd struct {
  117. OldPassword string `json:"oldPassword"`
  118. NewPassword string `json:"newPassword"`
  119. }
  120. func (t *Usertab) SetPwd(pwd *SysUserPwd) (Result bool, err error) {
  121. e := db.MasterEngine()
  122. user, _ := t.Get()
  123. _, err = utils.CompareHashAndPassword(user.Password, pwd.OldPassword)
  124. if err != nil {
  125. if strings.Contains(err.Error(), "hashedPassword is not the hash of the given password") {
  126. }
  127. return
  128. }
  129. t.Password = pwd.NewPassword
  130. var upuser Usertab
  131. upuser.Password = pwd.NewPassword
  132. err = upuser.Encrypt()
  133. if err != nil {
  134. return
  135. }
  136. _, err = e.ID(core.PK{t.Pid, t.Userid}).Update(&upuser)
  137. if err != nil {
  138. return false, err
  139. }
  140. return
  141. }
  142. func (t *Usertab) GetPage(pageSize int, pageIndex int) ([]Usertab, int, error) {
  143. doc := make([]Usertab, 0)
  144. e := db.MasterEngine()
  145. query := e.Table("usertab").Where("pid = ?", t.Pid)
  146. table := e.Table("usertab").Where("pid = ?", t.Pid)
  147. if !utils.ValueIsEmpty(t.Userid) {
  148. query = query.And("userid = ?", t.Userid)
  149. table = table.And("userid = ?", t.Userid)
  150. }
  151. if !utils.ValueIsEmpty(t.Phone) {
  152. search := "%" + t.Phone + "%"
  153. query = query.And("phone like ?", search)
  154. table = table.And("phone like ?", search)
  155. }
  156. Offset := (pageIndex - 1) * pageSize
  157. err := query.Limit(pageSize, Offset).Desc("createtime").Find(&doc)
  158. if err != nil {
  159. return nil, 0, err
  160. }
  161. for k, _ := range doc {
  162. doc[k].Password = ""
  163. doc[k].Clipped()
  164. }
  165. usercount := new(Usertab)
  166. count, _ := table.Count(usercount)
  167. return doc, int(count), nil
  168. }
  169. //加密
  170. func (t *Usertab) Encrypt() (err error) {
  171. if t.Password == "" {
  172. return
  173. }
  174. var hash []byte
  175. if hash, err = bcrypt.GenerateFromPassword([]byte(t.Password), bcrypt.DefaultCost); err != nil {
  176. return
  177. } else {
  178. t.Password = string(hash)
  179. return
  180. }
  181. }
  182. //添加
  183. func (t *Usertab) Insert() (id int, err error) {
  184. if err = t.Encrypt(); err != nil {
  185. return
  186. }
  187. e := db.MasterEngine()
  188. // check 用户名
  189. usercount := new(Usertab)
  190. count, err := e.Table(t.TableName()).Where("pid = ? and userid = ?", t.Pid, t.Userid).Count(usercount)
  191. if count > 0 {
  192. err = errors.New("账户已存在!")
  193. return
  194. }
  195. var inid int64
  196. //添加数据
  197. if inid, err = e.Table(t.TableName()).Insert(t); err != nil {
  198. return
  199. }
  200. id = int(inid)
  201. return
  202. }
  203. //修改
  204. func (t *Usertab) Update(id string) (update Usertab, err error) {
  205. if err = t.Encrypt(); err != nil {
  206. return
  207. }
  208. e := db.MasterEngine()
  209. if _, err = e.Table(t.TableName()).Where("userid=?", id).Get(&update); err != nil {
  210. return
  211. }
  212. if t.RoleId == 0 {
  213. t.RoleId = update.RoleId
  214. }
  215. update.Clipped()
  216. //参数1:是要修改的数据
  217. var upuser Usertab
  218. upuser.Phone = t.Phone
  219. upuser.Email = t.Email
  220. upuser.Remark = t.Remark
  221. upuser.RoleId = t.RoleId
  222. upuser.Role = t.Role
  223. upuser.Avatar = t.Avatar
  224. upuser.Status = t.Status
  225. upuser.Nickname = t.Nickname
  226. upuser.Lastmodify = t.Lastmodify
  227. upuser.Lastmodifytime = t.Lastmodifytime
  228. //参数2:是修改的数据
  229. if _, err = e.Table(t.TableName()).ID(core.PK{t.Pid, t.Userid}).Update(&upuser); err != nil {
  230. return
  231. }
  232. return
  233. }
  234. func (t *Usertab) BatchDelete(ids []string) (Result bool, err error) {
  235. e := db.MasterEngine()
  236. idstr := utils.IDsToStrings(ids)
  237. if _, err = e.Table(t.TableName()).Where("userid in (" + idstr + ")").Delete(&Usertab{}); err != nil {
  238. return
  239. }
  240. Result = true
  241. return
  242. }
  243. func (t *Usertab) AllUsers() (users []Usertab, err error) {
  244. e := db.MasterEngine()
  245. err = e.Table(t.TableName()).Select("userid,nickname").Distinct("userid").Where("pid > 0 and userid != ?","admin").Find(&users)
  246. if err != nil {
  247. return nil, err
  248. }
  249. return users, nil
  250. }