sys_user.go 8.5 KB

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