sysuser.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package models
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "strings"
  7. "gorm.io/gorm"
  8. "golang.org/x/crypto/bcrypt"
  9. orm "device-manage/common/global"
  10. "device-manage/tools"
  11. )
  12. // User
  13. type User struct {
  14. // key
  15. IdentityKey string
  16. // 用户名
  17. UserName string
  18. FirstName string
  19. LastName string
  20. // 角色
  21. Role string
  22. }
  23. type UserName struct {
  24. Username string `gorm:"size:64" json:"username"`
  25. }
  26. type PassWord struct {
  27. // 密码
  28. Password string `gorm:"size:128" json:"password"`
  29. }
  30. type LoginM struct {
  31. UserName
  32. PassWord
  33. }
  34. type SysUserId struct {
  35. UserId int `gorm:"primary_key;AUTO_INCREMENT" json:"userId"` // 编码
  36. Pid int `json:"pid"` // 编码
  37. }
  38. type SysUserB struct {
  39. NickName string `gorm:"size:128" json:"nickName"` // 昵称
  40. Phone string `gorm:"size:11" json:"phone"` // 手机号
  41. RoleId int `gorm:"" json:"roleId"` // 角色编码
  42. Salt string `gorm:"size:255" json:"salt"` //盐
  43. Avatar string `gorm:"size:255" json:"avatar"` //头像
  44. Sex string `gorm:"size:255" json:"sex"` //性别
  45. Email string `gorm:"size:128" json:"email"` //邮箱
  46. DeptId int `gorm:"" json:"deptId"` //部门编码
  47. PostId int `gorm:"" json:"postId"` //职位编码
  48. CreateBy string `gorm:"size:128" json:"createBy"` //
  49. UpdateBy string `gorm:"size:128" json:"updateBy"` //
  50. Remark string `gorm:"size:255" json:"remark"` //备注
  51. Status string `gorm:"size:4;" json:"status"`
  52. BaseModel
  53. DataScope string `gorm:"-" json:"dataScope"`
  54. Params string `gorm:"-" json:"params"`
  55. GroupName string `gorm:"-" json:"groupName"`
  56. }
  57. type SysUser struct {
  58. SysUserId
  59. LoginM
  60. SysUserB
  61. }
  62. func (SysUser) TableName() string {
  63. return "sys_user"
  64. }
  65. type SysUserPwd struct {
  66. OldPassword string `json:"oldPassword"`
  67. NewPassword string `json:"newPassword"`
  68. }
  69. type SysUserPage struct {
  70. SysUserId
  71. SysUserB
  72. LoginM
  73. DeptName string `gorm:"-" json:"deptName"`
  74. }
  75. type SysUserView struct {
  76. SysUserId
  77. SysUserB
  78. LoginM
  79. RoleName string `gorm:"column:role_name" json:"role_name"`
  80. }
  81. // 获取用户数据
  82. func (e *SysUser) Get() (SysUserView SysUserView, err error) {
  83. table := orm.Eloquent.Table(e.TableName()).Select([]string{"sys_user.*", "sys_role.role_name"})
  84. table = table.Joins("left join sys_role on sys_user.role_id=sys_role.role_id")
  85. if e.UserId != 0 {
  86. table = table.Where("user_id = ?", e.UserId)
  87. }
  88. if e.Username != "" {
  89. table = table.Where("username = ?", e.Username)
  90. }
  91. if e.Password != "" {
  92. table = table.Where("password = ?", e.Password)
  93. }
  94. if e.RoleId != 0 {
  95. table = table.Where("role_id = ?", e.RoleId)
  96. }
  97. if e.DeptId != 0 {
  98. table = table.Where("dept_id = ?", e.DeptId)
  99. }
  100. if e.PostId != 0 {
  101. table = table.Where("post_id = ?", e.PostId)
  102. }
  103. if err = table.First(&SysUserView).Error; err != nil {
  104. return
  105. }
  106. SysUserView.Password = ""
  107. return
  108. }
  109. func (e *SysUser) GetUserInfo() (SysUserView SysUserView, err error) {
  110. table := orm.Eloquent.Table(e.TableName()).Select([]string{"sys_user.*", "sys_role.role_name"})
  111. table = table.Joins("left join sys_role on sys_user.role_id=sys_role.role_id")
  112. if e.UserId != 0 {
  113. table = table.Where("user_id = ?", e.UserId)
  114. }
  115. if e.Username != "" {
  116. table = table.Where("username = ?", e.Username)
  117. }
  118. if e.Password != "" {
  119. table = table.Where("password = ?", e.Password)
  120. }
  121. if e.RoleId != 0 {
  122. table = table.Where("role_id = ?", e.RoleId)
  123. }
  124. if e.DeptId != 0 {
  125. table = table.Where("dept_id = ?", e.DeptId)
  126. }
  127. if e.PostId != 0 {
  128. table = table.Where("post_id = ?", e.PostId)
  129. }
  130. if err = table.First(&SysUserView).Error; err != nil {
  131. return
  132. }
  133. return
  134. }
  135. func (e *SysUser) GetList() (SysUserView []SysUserView, err error) {
  136. table := orm.Eloquent.Table(e.TableName()).Select([]string{"sys_user.*", "sys_role.role_name"})
  137. table = table.Joins("left join sys_role on sys_user.role_id=sys_role.role_id")
  138. if e.UserId != 0 {
  139. table = table.Where("user_id = ?", e.UserId)
  140. }
  141. if e.Username != "" {
  142. table = table.Where("username = ?", e.Username)
  143. }
  144. if e.Password != "" {
  145. table = table.Where("password = ?", e.Password)
  146. }
  147. if e.RoleId != 0 {
  148. table = table.Where("role_id = ?", e.RoleId)
  149. }
  150. if e.DeptId != 0 {
  151. table = table.Where("dept_id = ?", e.DeptId)
  152. }
  153. if e.PostId != 0 {
  154. table = table.Where("post_id = ?", e.PostId)
  155. }
  156. if err = table.Find(&SysUserView).Error; err != nil {
  157. return
  158. }
  159. return
  160. }
  161. func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, error) {
  162. var doc []SysUserPage
  163. table := orm.Eloquent.Select("sys_user.*,sys_dept.dept_name").Table(e.TableName())
  164. table = table.Joins("left join sys_dept on sys_dept.dept_id = sys_user.dept_id")
  165. if e.Username != "" {
  166. table = table.Where("username = ?", e.Username)
  167. }
  168. if e.Status != "" {
  169. table = table.Where("sys_user.status = ?", e.Status)
  170. }
  171. if e.Phone != "" {
  172. table = table.Where("sys_user.phone = ?", e.Phone)
  173. }
  174. if e.DeptId != 0 {
  175. table = table.Where("sys_user.dept_id in (select dept_id from sys_dept where dept_path like ? )", "%"+tools.IntToString(e.DeptId)+"%")
  176. }
  177. // 数据权限控制(如果不需要数据权限请将此处去掉)
  178. dataPermission := new(DataPermission)
  179. dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
  180. table, err := dataPermission.GetDataScope(e.TableName(), table)
  181. if err != nil {
  182. return nil, 0, err
  183. }
  184. var count int64
  185. if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
  186. return nil, 0, err
  187. }
  188. return doc, int(count), nil
  189. }
  190. //加密
  191. func (e *SysUser) Encrypt() (err error) {
  192. if e.Password == "" {
  193. return
  194. }
  195. var hash []byte
  196. if hash, err = bcrypt.GenerateFromPassword([]byte(e.Password), bcrypt.DefaultCost); err != nil {
  197. return
  198. } else {
  199. e.Password = string(hash)
  200. return
  201. }
  202. }
  203. //添加
  204. func (e SysUser) Insert() (id int, err error) {
  205. if err = e.Encrypt(); err != nil {
  206. return
  207. }
  208. // check 用户名
  209. var count int64
  210. orm.Eloquent.Table(e.TableName()).Where("username = ?", e.Username).Count(&count)
  211. if count > 0 {
  212. err = errors.New("账户已存在!")
  213. return
  214. }
  215. fmt.Println("--------------")
  216. fmt.Println(e.UserId)
  217. //添加数据
  218. if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil {
  219. return
  220. }
  221. id = e.UserId
  222. return
  223. }
  224. //修改
  225. func (e *SysUser) Update(id int) (update SysUser, err error) {
  226. if e.Password != "" {
  227. if err = e.Encrypt(); err != nil {
  228. return
  229. }
  230. }
  231. if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
  232. return
  233. }
  234. if e.RoleId == 0 {
  235. e.RoleId = update.RoleId
  236. }
  237. fmt.Println(e)
  238. fmt.Println(e.UserName)
  239. //参数1:是要修改的数据
  240. //参数2:是修改的数据
  241. if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil {
  242. return
  243. }
  244. return
  245. }
  246. func (e *SysUser) BatchDelete(id []int) (Result bool, err error) {
  247. if err = orm.Eloquent.Table(e.TableName()).Where("user_id in (?)", id).Delete(&SysUser{}).Error; err != nil {
  248. return
  249. }
  250. Result = true
  251. return
  252. }
  253. func (e *SysUser) SetPwd(pwd SysUserPwd) (Result bool, err error) {
  254. user, err := e.GetUserInfo()
  255. if err != nil {
  256. tools.HasError(err, "获取用户数据失败(代码202)", 500)
  257. }
  258. _, err = tools.CompareHashAndPassword(user.Password, pwd.OldPassword)
  259. if err != nil {
  260. if strings.Contains(err.Error(), "hashedPassword is not the hash of the given password") {
  261. tools.HasError(err, "密码错误(代码202)", 500)
  262. }
  263. log.Print(err)
  264. return
  265. }
  266. e.Password = pwd.NewPassword
  267. _, err = e.Update(e.UserId)
  268. tools.HasError(err, "更新密码失败(代码202)", 500)
  269. return
  270. }
  271. func (e *SysUser) GetByUserId(tx *gorm.DB, id interface{}) error {
  272. return tx.First(e, id).Error
  273. }
  274. func (e *SysUser) GetUserById() (user SysUser) {
  275. table := orm.Eloquent.Table("sys_user")
  276. if e.UserId > 0 {
  277. table.Where("user_id = ?", e.UserId)
  278. }
  279. if err := table.First(&user).Error; err != nil {
  280. return
  281. }
  282. return
  283. }
  284. //根据pid查询子用户.
  285. func getUsersByPid(userIds []int, uid int) (err error) {
  286. var count int64
  287. var ids []SysUserId
  288. table := orm.Eloquent.Table("sys_user")
  289. if uid < 0 {
  290. return
  291. }
  292. table = table.Where("pid = ?", uid)
  293. if err = table.Find(&ids).Count(&count).Error; err != nil {
  294. return
  295. }
  296. fmt.Println("count:", count)
  297. for _, user := range ids {
  298. fmt.Println("user.id:", user.UserId)
  299. userIds = append(userIds, user.UserId)
  300. getUsersByPid(userIds, user.UserId)
  301. }
  302. return
  303. }
  304. //根据pid查询所有子用户.
  305. func (e *SysUser) GetSubUsersByUserPid(userIds *[]int, pid int) (err error) {
  306. *userIds = append(*userIds, pid)
  307. err = getUsersByPid(*userIds, pid)
  308. fmt.Println(">>", len(*userIds))
  309. return err
  310. }