sys_user.go 9.3 KB

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