sys_user.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. package service
  2. import (
  3. "cold-delivery/app/admin/model"
  4. "cold-delivery/app/admin/service/dto"
  5. "cold-delivery/common/actions"
  6. cDto "cold-delivery/common/dto"
  7. "cold-delivery/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. func GetSysUserCompanyIdScopes(companyId int) func(db *gorm.DB) *gorm.DB {
  52. return func(db *gorm.DB) *gorm.DB {
  53. if companyId == 0 {
  54. return db
  55. }
  56. return db.Where("dept_id = ?", companyId)
  57. }
  58. }
  59. func (e *SysUser) GetPageByDeptId(c *dto.SysUserGetPageByDeptIdReq, p *actions.DataPermission, list *[]model.SysUser, count *int64) error {
  60. var err error
  61. var userList []model.SysUser
  62. var operatingUser model.SysUser
  63. err = e.Orm.Model(&operatingUser).
  64. Scopes(actions.UserPermission(operatingUser.TableName(), p)).
  65. Find(&operatingUser, p.UserId).Error
  66. if err != nil {
  67. e.Log.Errorf("获取操作用户信息失败: %s", err)
  68. return errors.New("获取操作用户信息失败")
  69. }
  70. if operatingUser.Type != model.SysUserTypeSys {
  71. return nil
  72. }
  73. err = e.Orm.
  74. Scopes(
  75. cDto.MakeCondition(c.GetNeedSearch()),
  76. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  77. GetSysUserCompanyIdScopes(c.CompanyId),
  78. ).
  79. Where("user_type = ?", model.UserTypeSys).
  80. Preload("Dept").
  81. Preload("CreateUser").
  82. Find(&userList).Limit(-1).Offset(-1).
  83. Count(count).Error
  84. if err != nil {
  85. e.Log.Errorf("db error: %s", err)
  86. return global.GetFailedErr
  87. }
  88. *list = userList
  89. return nil
  90. }
  91. // Get 获取SysUser对象
  92. func (e *SysUser) Get(d *dto.SysUserGetReq, p *actions.DataPermission, userModel *model.SysUser) error {
  93. var data model.SysUser
  94. err := e.Orm.Model(&data).
  95. Scopes(actions.UserPermission(data.TableName(), p)).
  96. Preload("Dept").
  97. First(userModel, d.GetId()).Error
  98. if err != nil {
  99. e.Log.Errorf("db error: %s", err)
  100. if errors.Is(err, gorm.ErrRecordNotFound) {
  101. return global.GetNotFoundOrNoPermissionErr
  102. }
  103. return global.GetFailedErr
  104. }
  105. return nil
  106. }
  107. // Insert 创建SysUser对象
  108. func (e *SysUser) Insert(c *dto.SysUserInsertReq, p *actions.DataPermission) error {
  109. var err error
  110. tx := e.Orm.Begin()
  111. defer func() {
  112. if err != nil {
  113. tx.Rollback()
  114. } else {
  115. tx.Commit()
  116. }
  117. }()
  118. var dept model.SysDept
  119. var deptCount int64
  120. err = e.Orm.Model(&dept).Where("id = ?", c.DeptId).Count(&deptCount).Error
  121. if err != nil {
  122. e.Log.Errorf("db error: %s", err)
  123. return global.CreateFailedErr
  124. }
  125. if deptCount == 0 {
  126. err = errors.New("公司不存在!")
  127. e.Log.Errorf("db error: %s", err)
  128. return err
  129. }
  130. var operatingUser model.SysUser
  131. err = e.Orm.Model(&operatingUser).
  132. Scopes(actions.UserPermission(operatingUser.TableName(), p)).
  133. Find(&operatingUser, p.UserId).Error
  134. if err != nil {
  135. e.Log.Errorf("获取操作用户信息失败: %s", err)
  136. return errors.New("获取操作用户信息失败")
  137. }
  138. //if (operatingUser.Type != model.SysUserTypeSys) || (operatingUser.Id != 1) {
  139. // err = errors.New("无权添加用户,请联系管理员!")
  140. // return err
  141. //}
  142. if operatingUser.Type != model.SysUserTypeSys {
  143. err = errors.New("无权添加用户,请联系管理员!")
  144. return err
  145. }
  146. var data model.SysUser
  147. var i int64
  148. err = e.Orm.Model(&data).Where("username = ?", c.Username).Count(&i).Error
  149. if err != nil {
  150. e.Log.Errorf("db error: %s", err)
  151. return global.CreateFailedErr
  152. }
  153. if i > 0 {
  154. err = errors.New("用户名已存在!")
  155. e.Log.Errorf("db error: %s", err)
  156. return err
  157. }
  158. var uuid string
  159. for {
  160. uuid = utils.GetUUID()
  161. var j int64
  162. err = e.Orm.Model(&data).Where("uuid = ?", uuid).Count(&j).Error
  163. if err != nil {
  164. continue
  165. }
  166. if j == 0 {
  167. break
  168. }
  169. }
  170. c.Generate(&data)
  171. data.Uuid = uuid
  172. err = tx.Create(&data).Error
  173. if err != nil {
  174. e.Log.Errorf("db error: %s", err)
  175. return global.CreateFailedErr
  176. }
  177. c.Id = data.Id
  178. return nil
  179. }
  180. // Update 修改SysUser对象
  181. func (e *SysUser) Update(c *dto.SysUserUpdateReq, p *actions.DataPermission) error {
  182. var err error
  183. tx := e.Orm.Begin()
  184. defer func() {
  185. if err != nil {
  186. tx.Rollback()
  187. } else {
  188. tx.Commit()
  189. }
  190. }()
  191. var userModel model.SysUser
  192. err = e.Orm.
  193. Scopes(actions.UserPermission(userModel.TableName(), p)).
  194. First(&userModel, c.GetId()).Error
  195. if err != nil {
  196. e.Log.Errorf("db error: %s", err)
  197. if errors.Is(err, gorm.ErrRecordNotFound) {
  198. return global.UpdateNotFoundOrNoPermissionErr
  199. }
  200. return global.UpdateFailedErr
  201. }
  202. c.Generate(&userModel)
  203. err = tx.Model(&userModel).Where("id = ?", &userModel.Id).
  204. Omit("password", "salt").Updates(&userModel).Error
  205. if err != nil {
  206. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  207. return model.ErrForbidUpdateSysRole
  208. }
  209. e.Log.Errorf("db error: %s", err)
  210. return global.UpdateFailedErr
  211. }
  212. return nil
  213. }
  214. // UpdateStatus 更新用户状态
  215. func (e *SysUser) UpdateStatus(c *dto.UpdateSysUserStatusReq, p *actions.DataPermission) error {
  216. var userModel model.SysUser
  217. err := e.Orm.
  218. Scopes(actions.UserPermission(userModel.TableName(), p)).
  219. First(&userModel, c.GetId()).Error
  220. if err != nil {
  221. e.Log.Errorf("db error: %s", err)
  222. if errors.Is(err, gorm.ErrRecordNotFound) {
  223. return global.UpdateNotFoundOrNoPermissionErr
  224. }
  225. return global.UpdateFailedErr
  226. }
  227. err = e.Orm.Table(userModel.TableName()).Where("id = ? ", c.Id).Updates(c).Error
  228. if err != nil {
  229. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  230. return model.ErrForbidUpdateSysRole
  231. }
  232. e.Log.Errorf("db error: %s", err)
  233. return global.UpdateFailedErr
  234. }
  235. return nil
  236. }
  237. // ResetPwd 重置用户密码
  238. func (e *SysUser) ResetPwd(c *dto.ResetSysUserPwdReq, p *actions.DataPermission) error {
  239. var userModel model.SysUser
  240. err := e.Orm.
  241. Scopes(actions.UserPermission(userModel.TableName(), p)).
  242. First(&userModel, c.GetId()).Error
  243. if err != nil {
  244. e.Log.Errorf("db error: %s", err)
  245. if errors.Is(err, gorm.ErrRecordNotFound) {
  246. return global.UpdateNotFoundOrNoPermissionErr
  247. }
  248. return global.UpdateFailedErr
  249. }
  250. c.Generate(&userModel)
  251. err = e.Orm.Omit("username", "nick_name", "phone", "role_id", "avatar", "sex").Save(&userModel).Error
  252. if err != nil {
  253. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  254. return model.ErrForbidUpdateSysRole
  255. }
  256. e.Log.Errorf("db error: %s", err)
  257. return global.UpdateFailedErr
  258. }
  259. return nil
  260. }
  261. // Remove 删除SysUser
  262. func (e *SysUser) Remove(c *dto.SysUserDeleteReq, p *actions.DataPermission) error {
  263. var err error
  264. tx := e.Orm.Begin()
  265. defer func() {
  266. if err != nil {
  267. tx.Rollback()
  268. } else {
  269. tx.Commit()
  270. }
  271. }()
  272. var operatingUser model.SysUser
  273. err = e.Orm.Model(&operatingUser).
  274. Scopes(actions.UserPermission(operatingUser.TableName(), p)).
  275. Find(&operatingUser, p.UserId).Error
  276. if err != nil {
  277. e.Log.Errorf("获取操作用户信息失败: %s", err)
  278. return errors.New("获取操作用户信息失败")
  279. }
  280. var data model.SysUser
  281. err = e.Orm.Model(&data).
  282. Scopes(actions.UserPermission(data.TableName(), p)).
  283. Find(&data, c.GetId()).Error
  284. if err != nil {
  285. e.Log.Errorf("获取操作用户信息失败: %s", err)
  286. return errors.New("获取操作用户信息失败")
  287. }
  288. if p.UserId != 1 {
  289. if data.CreateBy == 1 && data.Type == model.SysUserTypeSys {
  290. return errors.New("禁止删除管理员")
  291. }
  292. }
  293. // 管理员1 门店管理员2 配送员3
  294. if operatingUser.Type != model.SysUserTypeSys && data.Type == model.SysUserTypeSys {
  295. return errors.New("禁止删除管理员")
  296. }
  297. if err = tx.Delete(&data, c.GetId()).Error; err != nil {
  298. if errors.Is(err, model.ErrForbidDeleteSysRole) {
  299. return model.ErrForbidDeleteSysRole
  300. }
  301. e.Log.Errorf("db error: %s", err)
  302. return err
  303. }
  304. return nil
  305. }
  306. // UpdatePwd 修改SysUser对象密码
  307. func (e *SysUser) UpdatePwd(id int, oldPassword, newPassword string) error {
  308. var err error
  309. if newPassword == "" {
  310. return nil
  311. }
  312. c := &model.SysUser{}
  313. err = e.Orm.Model(c).
  314. Select("id", "password", "salt").
  315. First(c, id).Error
  316. if err != nil {
  317. e.Log.Errorf("db error: %s", err)
  318. if errors.Is(err, gorm.ErrRecordNotFound) {
  319. return global.UpdateNotFoundOrNoPermissionErr
  320. }
  321. return errors.New("密码修改失败")
  322. }
  323. var ok bool
  324. ok, err = pkg.CompareHashAndPassword(c.Password, oldPassword)
  325. if err != nil {
  326. e.Log.Errorf("CompareHashAndPassword error, %s", err.Error())
  327. return errors.New("密码修改失败")
  328. }
  329. if !ok {
  330. err = errors.New("incorrect Password")
  331. e.Log.Warnf("user[%d] %s", id, err.Error())
  332. return err
  333. }
  334. c.Password = newPassword
  335. db := e.Orm.Model(c).Where("id = ?", id).
  336. Select("Password", "Salt").
  337. Updates(c)
  338. if err = db.Error; err != nil {
  339. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  340. return model.ErrForbidUpdateSysRole
  341. }
  342. e.Log.Errorf("db error: %s", err)
  343. return errors.New("密码修改失败")
  344. }
  345. return nil
  346. }
  347. func (e *SysUser) GetProfile(c *dto.SysUserById, user *model.SysUser) error {
  348. err := e.Orm.Preload("Dept").First(user, c.GetId()).Error
  349. if err != nil {
  350. return err
  351. }
  352. return nil
  353. }