sys_user.go 8.5 KB

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