sys_user.go 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. package service
  2. import (
  3. "cold-logistics/app/admin/model"
  4. "cold-logistics/app/admin/service/dto"
  5. "cold-logistics/common/actions"
  6. cDto "cold-logistics/common/dto"
  7. "cold-logistics/common/global"
  8. "errors"
  9. "gogs.baozhida.cn/zoie/OAuth-core/pkg"
  10. "gogs.baozhida.cn/zoie/OAuth-core/pkg/utils"
  11. "gogs.baozhida.cn/zoie/OAuth-core/service"
  12. "gorm.io/gorm"
  13. )
  14. type SysUser struct {
  15. service.Service
  16. }
  17. // GetPage 获取SysUser列表
  18. func (e *SysUser) GetPage(c *dto.SysUserGetPageReq, p *actions.DataPermission, list *[]model.SysUser, count *int64) error {
  19. var err error
  20. var data model.SysUser
  21. var userList []model.SysUser
  22. if p.DeptId == 0 {
  23. err = e.Orm.
  24. Scopes(
  25. cDto.MakeCondition(c.GetNeedSearch()),
  26. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  27. ).Where("create_by = ?", p.UserId).
  28. Where("user_type = ?", model.UserTypeSys).
  29. Preload("Dept").
  30. Find(&userList).Limit(-1).Offset(-1).
  31. Count(count).Error
  32. } else {
  33. err = e.Orm.
  34. Scopes(
  35. cDto.MakeCondition(c.GetNeedSearch()),
  36. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  37. actions.UserPermission(data.TableName(), p),
  38. ).
  39. Where("user_type = ?", model.UserTypeSys).
  40. Preload("Dept").
  41. Find(&userList).Limit(-1).Offset(-1).
  42. Count(count).Error
  43. }
  44. if err != nil {
  45. e.Log.Errorf("db error: %s", err)
  46. return global.GetFailedErr
  47. }
  48. *list = userList
  49. return nil
  50. }
  51. // Get 获取SysUser对象
  52. func (e *SysUser) Get(d *dto.SysUserGetReq, p *actions.DataPermission, userModel *model.SysUser) error {
  53. var data model.SysUser
  54. err := e.Orm.Model(&data).
  55. Scopes(actions.UserPermission(data.TableName(), p)).
  56. Preload("Dept").
  57. First(userModel, d.GetId()).Error
  58. if err != nil {
  59. e.Log.Errorf("db error: %s", err)
  60. if errors.Is(err, gorm.ErrRecordNotFound) {
  61. return global.GetNotFoundOrNoPermissionErr
  62. }
  63. return global.GetFailedErr
  64. }
  65. return nil
  66. }
  67. // Insert 创建SysUser对象
  68. func (e *SysUser) Insert(c *dto.SysUserInsertReq) error {
  69. var err error
  70. tx := e.Orm.Begin()
  71. defer func() {
  72. if err != nil {
  73. tx.Rollback()
  74. } else {
  75. tx.Commit()
  76. }
  77. }()
  78. var dept model.SysDept
  79. var deptCount int64
  80. err = e.Orm.Model(&dept).Where("id = ?", c.DeptId).Count(&deptCount).Error
  81. if err != nil {
  82. e.Log.Errorf("db error: %s", err)
  83. return global.CreateFailedErr
  84. }
  85. if deptCount == 0 {
  86. err = errors.New("公司不存在!")
  87. e.Log.Errorf("db error: %s", err)
  88. return err
  89. }
  90. var data model.SysUser
  91. var i int64
  92. err = e.Orm.Model(&data).Where("username = ?", c.Username).Count(&i).Error
  93. if err != nil {
  94. e.Log.Errorf("db error: %s", err)
  95. return global.CreateFailedErr
  96. }
  97. if i > 0 {
  98. err = errors.New("用户名已存在!")
  99. e.Log.Errorf("db error: %s", err)
  100. return err
  101. }
  102. var uuid string
  103. for {
  104. uuid = utils.GetUUID()
  105. var j int64
  106. err = e.Orm.Model(&data).Where("uuid = ?", uuid).Count(&j).Error
  107. if err != nil {
  108. continue
  109. }
  110. if j == 0 {
  111. break
  112. }
  113. }
  114. c.Generate(&data)
  115. data.Uuid = uuid
  116. err = tx.Create(&data).Error
  117. if err != nil {
  118. e.Log.Errorf("db error: %s", err)
  119. return global.CreateFailedErr
  120. }
  121. c.Id = data.Id
  122. return nil
  123. }
  124. // Update 修改SysUser对象
  125. func (e *SysUser) Update(c *dto.SysUserUpdateReq, p *actions.DataPermission) error {
  126. var err error
  127. tx := e.Orm.Begin()
  128. defer func() {
  129. if err != nil {
  130. tx.Rollback()
  131. } else {
  132. tx.Commit()
  133. }
  134. }()
  135. var userModel model.SysUser
  136. err = e.Orm.
  137. Scopes(actions.UserPermission(userModel.TableName(), p)).
  138. First(&userModel, c.GetId()).Error
  139. if err != nil {
  140. e.Log.Errorf("db error: %s", err)
  141. if errors.Is(err, gorm.ErrRecordNotFound) {
  142. return global.UpdateNotFoundOrNoPermissionErr
  143. }
  144. return global.UpdateFailedErr
  145. }
  146. c.Generate(&userModel)
  147. err = tx.Model(&userModel).Where("id = ?", &userModel.Id).
  148. Omit("password", "salt").Updates(&userModel).Error
  149. if err != nil {
  150. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  151. return model.ErrForbidUpdateSysRole
  152. }
  153. e.Log.Errorf("db error: %s", err)
  154. return global.UpdateFailedErr
  155. }
  156. return nil
  157. }
  158. // UpdateStatus 更新用户状态
  159. func (e *SysUser) UpdateStatus(c *dto.UpdateSysUserStatusReq, p *actions.DataPermission) error {
  160. var userModel model.SysUser
  161. err := e.Orm.
  162. Scopes(actions.UserPermission(userModel.TableName(), p)).
  163. First(&userModel, c.GetId()).Error
  164. if err != nil {
  165. e.Log.Errorf("db error: %s", err)
  166. if errors.Is(err, gorm.ErrRecordNotFound) {
  167. return global.UpdateNotFoundOrNoPermissionErr
  168. }
  169. return global.UpdateFailedErr
  170. }
  171. err = e.Orm.Table(userModel.TableName()).Where("id = ? ", c.Id).Updates(c).Error
  172. if err != nil {
  173. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  174. return model.ErrForbidUpdateSysRole
  175. }
  176. e.Log.Errorf("db error: %s", err)
  177. return global.UpdateFailedErr
  178. }
  179. return nil
  180. }
  181. // ResetPwd 重置用户密码
  182. func (e *SysUser) ResetPwd(c *dto.ResetSysUserPwdReq, p *actions.DataPermission) error {
  183. var userModel model.SysUser
  184. err := e.Orm.
  185. Scopes(actions.UserPermission(userModel.TableName(), p)).
  186. First(&userModel, c.GetId()).Error
  187. if err != nil {
  188. e.Log.Errorf("db error: %s", err)
  189. if errors.Is(err, gorm.ErrRecordNotFound) {
  190. return global.UpdateNotFoundOrNoPermissionErr
  191. }
  192. return global.UpdateFailedErr
  193. }
  194. c.Generate(&userModel)
  195. err = e.Orm.Omit("username", "nick_name", "phone", "role_id", "avatar", "sex").Save(&userModel).Error
  196. if err != nil {
  197. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  198. return model.ErrForbidUpdateSysRole
  199. }
  200. e.Log.Errorf("db error: %s", err)
  201. return global.UpdateFailedErr
  202. }
  203. return nil
  204. }
  205. // Remove 删除SysUser
  206. func (e *SysUser) Remove(c *dto.SysUserDeleteReq, p *actions.DataPermission) error {
  207. var err error
  208. tx := e.Orm.Begin()
  209. defer func() {
  210. if err != nil {
  211. tx.Rollback()
  212. } else {
  213. tx.Commit()
  214. }
  215. }()
  216. var data model.SysUser
  217. db := e.Orm.Model(&data).
  218. Scopes(actions.UserPermission(data.TableName(), p)).
  219. Find(&data, c.GetId())
  220. if p.UserId != 1 {
  221. if data.CreateBy == 1 && data.Type == 1 {
  222. return errors.New("禁止删除管理员")
  223. }
  224. }
  225. if err = db.Error; err != nil {
  226. e.Log.Errorf("db error: %s", err)
  227. return err
  228. }
  229. if db.RowsAffected == 0 {
  230. return global.DeleteNotFoundOrNoPermissionErr
  231. }
  232. var car model.Car
  233. var j int64
  234. err = e.Orm.Model(&car).Where("user_id = ?", c.GetId()).Count(&j).Error
  235. if err != nil {
  236. e.Log.Errorf("db error: %s", err)
  237. return global.CreateFailedErr
  238. }
  239. if j > 0 {
  240. err = errors.New("该用户已绑定车辆,请解绑后删除!")
  241. e.Log.Errorf("db error: %s", err)
  242. return err
  243. }
  244. var warehouse model.Warehouse
  245. var k int64
  246. err = e.Orm.Model(&warehouse).Where("user_id = ?", c.GetId()).Count(&k).Error
  247. if err != nil {
  248. e.Log.Errorf("db error: %s", err)
  249. return global.CreateFailedErr
  250. }
  251. if k > 0 {
  252. err = errors.New("该用户已绑定仓库,请解绑后删除!")
  253. e.Log.Errorf("db error: %s", err)
  254. return err
  255. }
  256. if err := tx.Delete(&data, c.GetId()).Error; err != nil {
  257. if errors.Is(err, model.ErrForbidDeleteSysRole) {
  258. return model.ErrForbidDeleteSysRole
  259. }
  260. e.Log.Errorf("db error: %s", err)
  261. return err
  262. }
  263. return nil
  264. }
  265. // UpdatePwd 修改SysUser对象密码
  266. func (e *SysUser) UpdatePwd(id int, oldPassword, newPassword string) error {
  267. var err error
  268. if newPassword == "" {
  269. return nil
  270. }
  271. c := &model.SysUser{}
  272. err = e.Orm.Model(c).
  273. Select("id", "password", "salt").
  274. First(c, id).Error
  275. if err != nil {
  276. e.Log.Errorf("db error: %s", err)
  277. if errors.Is(err, gorm.ErrRecordNotFound) {
  278. return global.UpdateNotFoundOrNoPermissionErr
  279. }
  280. return errors.New("密码修改失败")
  281. }
  282. var ok bool
  283. ok, err = pkg.CompareHashAndPassword(c.Password, oldPassword)
  284. if err != nil {
  285. e.Log.Errorf("CompareHashAndPassword error, %s", err.Error())
  286. return errors.New("密码修改失败")
  287. }
  288. if !ok {
  289. err = errors.New("incorrect Password")
  290. e.Log.Warnf("user[%d] %s", id, err.Error())
  291. return err
  292. }
  293. c.Password = newPassword
  294. db := e.Orm.Model(c).Where("id = ?", id).
  295. Select("Password", "Salt").
  296. Updates(c)
  297. if err = db.Error; err != nil {
  298. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  299. return model.ErrForbidUpdateSysRole
  300. }
  301. e.Log.Errorf("db error: %s", err)
  302. return errors.New("密码修改失败")
  303. }
  304. return nil
  305. }
  306. func (e *SysUser) GetProfile(c *dto.SysUserById, user *model.SysUser) error {
  307. err := e.Orm.Preload("Dept").First(user, c.GetId()).Error
  308. if err != nil {
  309. return err
  310. }
  311. return nil
  312. }