sys_user.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. package service
  2. import (
  3. "IotAdmin/app/system/models"
  4. "IotAdmin/app/system/service/dto"
  5. "errors"
  6. log "IotAdmin/core/logger"
  7. "IotAdmin/core/sdk/pkg"
  8. "IotAdmin/core/sdk/service"
  9. "gorm.io/gorm"
  10. cDto "IotAdmin/common/dto"
  11. "IotAdmin/common/permission"
  12. )
  13. type SysUserService struct {
  14. service.Service
  15. }
  16. // GetPage 获取SysUser列表
  17. func (e *SysUserService) GetPage(c *dto.SysUserGetPageReq, p *permission.DataPermission, list *[]models.SysUser, count *int64) error {
  18. var err error
  19. var data models.SysUser
  20. err = e.Orm.Debug().
  21. Preload("Org").
  22. Scopes(
  23. cDto.MakeCondition(c.GetNeedSearch()),
  24. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  25. permission.Permission(data.TableName(), p),
  26. ).
  27. Find(list).Limit(-1).Offset(-1).
  28. Count(count).Error
  29. if err != nil {
  30. e.Log.Errorf("db error: %s", err)
  31. return err
  32. }
  33. return nil
  34. }
  35. // Get 获取SysUser对象
  36. func (e *SysUserService) Get(d *dto.SysUserById, p *permission.DataPermission, model *models.SysUser) error {
  37. var data models.SysUser
  38. err := e.Orm.Model(&data).Debug().Preload("Org").Scopes(
  39. permission.Permission(data.TableName(), p),
  40. ).First(model, d.GetId()).Error
  41. if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
  42. err = errors.New("查看对象不存在或无权查看")
  43. e.Log.Errorf("db error: %s", err)
  44. return err
  45. }
  46. if err != nil {
  47. e.Log.Errorf("db error: %s", err)
  48. return err
  49. }
  50. return nil
  51. }
  52. // GetInfo 获取SysUser对象
  53. func (e *SysUserService) GetInfo(d *dto.SysUserById, model *models.SysUser) error {
  54. var data models.SysUser
  55. err := e.Orm.Model(&data).Debug().Preload("Org").First(model, d.GetId()).Error
  56. if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
  57. err = errors.New("查看对象不存在或无权查看")
  58. e.Log.Errorf("db error: %s", err)
  59. return err
  60. }
  61. if err != nil {
  62. e.Log.Errorf("db error: %s", err)
  63. return err
  64. }
  65. return nil
  66. }
  67. func (e *SysUserService) GetUser(d *dto.SysUserById, p *permission.DataPermission, model *models.SysUser) error {
  68. if d.GetId() != 0 {
  69. var data models.SysUser
  70. err := e.Orm.Model(&data).Debug().Scopes(
  71. permission.Permission(data.TableName(), p),
  72. ).First(model, d.GetId()).Error
  73. if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
  74. err = errors.New("查看对象不存在或无权查看")
  75. e.Log.Errorf("db error: %s", err)
  76. return err
  77. }
  78. if err != nil {
  79. e.Log.Errorf("db error: %s", err)
  80. return err
  81. }
  82. }
  83. var role models.SysRole
  84. err := e.Orm.Model(&role).Debug().Scopes(
  85. permission.Permission(role.TableName(), p),
  86. ).Select("role_id,role_name,status").Find(&(model.Roles)).Error
  87. if err != nil {
  88. e.Log.Errorf("db error: %s", err)
  89. return err
  90. }
  91. var post models.SysPost
  92. err = e.Orm.Model(&post).Debug().Scopes(
  93. permission.Permission(post.TableName(), p),
  94. ).Select("post_id,post_name,status").Find(&(model.Posts)).Error
  95. if err != nil {
  96. e.Log.Errorf("db error: %s", err)
  97. return err
  98. }
  99. return nil
  100. }
  101. // Insert 创建SysUser对象
  102. func (e *SysUserService) Insert(c *dto.SysUserInsertReq) error {
  103. var err error
  104. var data models.SysUser
  105. var i int64
  106. err = e.Orm.Model(&data).Where("username = ?", c.Username).Count(&i).Error
  107. if err != nil {
  108. e.Log.Errorf("db error: %s", err)
  109. return err
  110. }
  111. if i > 0 {
  112. err := errors.New("用户名已存在!")
  113. e.Log.Errorf("db error: %s", err)
  114. return err
  115. }
  116. c.Generate(&data)
  117. err = e.Orm.Create(&data).Error
  118. if err != nil {
  119. e.Log.Errorf("db error: %s", err)
  120. return err
  121. }
  122. return nil
  123. }
  124. // Update 修改SysUser对象
  125. func (e *SysUserService) Update(c *dto.SysUserUpdateReq, p *permission.DataPermission) error {
  126. var err error
  127. var model models.SysUser
  128. db := e.Orm.Scopes(
  129. permission.Permission(model.TableName(), p),
  130. ).First(&model, c.GetId())
  131. if err = db.Error; err != nil {
  132. e.Log.Errorf("Service UpdateSysUser error: %s", err)
  133. return err
  134. }
  135. if db.RowsAffected == 0 {
  136. return errors.New("无权更新该数据")
  137. }
  138. c.Generate(&model)
  139. update := e.Orm.Model(&model).Where("user_id = ?", &model.UserId).Omit("password", "salt").Updates(&model)
  140. if err = update.Error; err != nil {
  141. e.Log.Errorf("db error: %s", err)
  142. return err
  143. }
  144. if update.RowsAffected == 0 {
  145. err = errors.New("update userinfo error")
  146. log.Warnf("db update error")
  147. return err
  148. }
  149. return nil
  150. }
  151. // UpdateAvatar 更新用户头像
  152. func (e *SysUserService) UpdateAvatar(c *dto.UpdateSysUserAvatarReq, p *permission.DataPermission) error {
  153. var err error
  154. var model models.SysUser
  155. db := e.Orm.Scopes(
  156. permission.Permission(model.TableName(), p),
  157. ).First(&model, c.GetId())
  158. if err = db.Error; err != nil {
  159. e.Log.Errorf("Service UpdateSysUser error: %s", err)
  160. return err
  161. }
  162. if db.RowsAffected == 0 {
  163. return errors.New("无权更新该数据")
  164. }
  165. err = e.Orm.Table(model.TableName()).Where("user_id =? ", c.UserId).Updates(c).Error
  166. if err != nil {
  167. e.Log.Errorf("Service UpdateSysUser error: %s", err)
  168. return err
  169. }
  170. return nil
  171. }
  172. // UpdateStatus 更新用户状态
  173. func (e *SysUserService) UpdateStatus(c *dto.UpdateSysUserStatusReq, p *permission.DataPermission) error {
  174. var err error
  175. var model models.SysUser
  176. db := e.Orm.Scopes(
  177. permission.Permission(model.TableName(), p),
  178. ).First(&model, c.GetId())
  179. if err = db.Error; err != nil {
  180. e.Log.Errorf("Service UpdateSysUser error: %s", err)
  181. return err
  182. }
  183. if db.RowsAffected == 0 {
  184. return errors.New("无权更新该数据")
  185. }
  186. err = e.Orm.Table(model.TableName()).Where("user_id =? ", c.UserId).Updates(c).Error
  187. if err != nil {
  188. e.Log.Errorf("Service UpdateSysUser error: %s", err)
  189. return err
  190. }
  191. return nil
  192. }
  193. // ResetPwd 重置用户密码
  194. func (e *SysUserService) ResetPwd(c *dto.ResetSysUserPwdReq, p *permission.DataPermission) error {
  195. var err error
  196. var model models.SysUser
  197. db := e.Orm.Scopes(
  198. permission.Permission(model.TableName(), p),
  199. ).First(&model, c.GetId())
  200. if err = db.Error; err != nil {
  201. e.Log.Errorf("At Service ResetSysUserPwd error: %s", err)
  202. return err
  203. }
  204. if db.RowsAffected == 0 {
  205. return errors.New("无权更新该数据")
  206. }
  207. c.Generate(&model)
  208. err = e.Orm.Omit("username", "nick_name", "phone", "role_id", "avatar", "sex").Save(&model).Error
  209. if err != nil {
  210. e.Log.Errorf("At Service ResetSysUserPwd error: %s", err)
  211. return err
  212. }
  213. return nil
  214. }
  215. // Remove 删除SysUser
  216. func (e *SysUserService) Remove(c *dto.SysUserById, p *permission.DataPermission) error {
  217. var err error
  218. var data models.SysUser
  219. db := e.Orm.Model(&data).
  220. Scopes(
  221. permission.Permission(data.TableName(), p),
  222. ).Delete(&data, c.GetId())
  223. if err = db.Error; err != nil {
  224. e.Log.Errorf("Error found in RemoveSysUser : %s", err)
  225. return err
  226. }
  227. if db.RowsAffected == 0 {
  228. return errors.New("无权删除该数据")
  229. }
  230. return nil
  231. }
  232. // UpdatePwd 修改SysUser对象密码
  233. func (e *SysUserService) UpdatePwd(id int, oldPassword, newPassword string, p *permission.DataPermission) error {
  234. var err error
  235. if newPassword == "" {
  236. return nil
  237. }
  238. c := &models.SysUser{}
  239. err = e.Orm.Model(c).
  240. Scopes(
  241. permission.Permission(c.TableName(), p),
  242. ).Select("UserId", "Password", "Salt").
  243. First(c, id).Error
  244. if err != nil {
  245. if errors.Is(err, gorm.ErrRecordNotFound) {
  246. return errors.New("无权更新该数据")
  247. }
  248. e.Log.Errorf("db error: %s", err)
  249. return err
  250. }
  251. var ok bool
  252. ok, err = pkg.CompareHashAndPassword(c.Password, oldPassword)
  253. if err != nil {
  254. e.Log.Errorf("CompareHashAndPassword error, %s", err.Error())
  255. return err
  256. }
  257. if !ok {
  258. err = errors.New("incorrect Password")
  259. e.Log.Warnf("user[%d] %s", id, err.Error())
  260. return err
  261. }
  262. c.Password = newPassword
  263. db := e.Orm.Model(c).Where("user_id = ?", id).
  264. Select("Password", "Salt").
  265. Updates(c)
  266. if err = db.Error; err != nil {
  267. e.Log.Errorf("db error: %s", err)
  268. return err
  269. }
  270. if db.RowsAffected == 0 {
  271. err = errors.New("set password error")
  272. log.Warnf("db update error")
  273. return err
  274. }
  275. return nil
  276. }
  277. func (e *SysUserService) GetProfile(c *dto.SysUserById, user *models.SysUser, roles *[]models.SysRole, posts *[]models.SysPost) error {
  278. err := e.Orm.Preload("Org").First(user, c.GetId()).Error
  279. if err != nil {
  280. return err
  281. }
  282. err = e.Orm.Find(roles, user.RoleId).Error
  283. if err != nil {
  284. return err
  285. }
  286. err = e.Orm.Find(posts, user.PostIds).Error
  287. if err != nil {
  288. return err
  289. }
  290. return nil
  291. }
  292. // GetUserRole 获取用户角色
  293. func (e *SysUserService) GetUserRole(c *dto.SysUserById, p *permission.DataPermission, data *models.SysUser) error {
  294. var err error
  295. var role models.SysRole
  296. db := e.Orm.Model(data).
  297. Scopes(
  298. permission.Permission(data.TableName(), p),
  299. ).First(data, c.GetId())
  300. if err = db.Error; err != nil {
  301. e.Log.Errorf("Error found in RemoveSysUser : %s", err)
  302. return err
  303. }
  304. err = e.Orm.Model(&role).Scopes(
  305. permission.Permission(data.TableName(), p),
  306. ).Find(&(data.Roles)).Error
  307. return nil
  308. }