sys_user.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. package service
  2. import (
  3. "errors"
  4. "gas-cylinder-api/app/admin/model"
  5. "gas-cylinder-api/app/admin/service/dto"
  6. "gas-cylinder-api/common/actions"
  7. cDto "gas-cylinder-api/common/dto"
  8. "gas-cylinder-api/common/global"
  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 c.UserType > 0 {
  23. err = e.Orm.
  24. Scopes(
  25. cDto.MakeCondition(c.GetNeedSearch()),
  26. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  27. actions.UserPermission(data.TableName(), p),
  28. ).
  29. Where("JSON_EXTRACT(prov_user, '$.userType') = ?", c.UserType).
  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. 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. // GetPage 获取送气员列表
  61. func (e *SysUser) GetDeliveryPage(c *dto.SysUserGetDeliveryPageReq, p *actions.DataPermission, list *[]model.SysUser, count *int64) error {
  62. var err error
  63. var data model.SysUser
  64. var userList []model.SysUser
  65. err = e.Orm.
  66. Scopes(
  67. cDto.MakeCondition(c.GetNeedSearch()),
  68. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  69. actions.UserPermission(data.TableName(), p),
  70. ).Where("JSON_EXTRACT(prov_user, '$.userType') = 3 and JSON_EXTRACT(prov_user, '$.isorders') = 0").
  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. for i := 0; i < len(userList); i++ {
  78. var dept model.SysDept
  79. var role model.SysRole
  80. //var post model.SysPost
  81. err = e.Orm.First(&dept, userList[i].DeptId).Error
  82. userList[i].Dept = dept
  83. err = e.Orm.First(&role, userList[i].RoleId).Error
  84. userList[i].Role = role
  85. //err = e.Orm.First(&post, userList[i].PostId).Error
  86. //userList[i].Post = post
  87. }
  88. *list = userList
  89. return nil
  90. }
  91. func (e *SysUser) GetCount(c *dto.SysUserGetCountReq, count *int64) error {
  92. var err error
  93. var data model.SysUser
  94. err = e.Orm.Model(&data).
  95. Scopes(
  96. cDto.MakeCondition(c.GetNeedSearch()),
  97. ).Count(count).Error
  98. if err != nil {
  99. e.Log.Errorf("db error: %s", err)
  100. return global.GetFailedErr
  101. }
  102. return nil
  103. }
  104. // Get 获取SysUser对象
  105. func (e *SysUser) Get(d *dto.SysUserGetReq, p *actions.DataPermission, userModel *model.SysUser) error {
  106. var data model.SysUser
  107. var dept model.SysDept
  108. var role model.SysRole
  109. //var post model.SysPost
  110. err := e.Orm.Model(&data).
  111. Scopes(actions.UserPermission(data.TableName(), p)).
  112. First(userModel, d.GetId()).Error
  113. if err != nil {
  114. e.Log.Errorf("db error: %s", err)
  115. if errors.Is(err, gorm.ErrRecordNotFound) {
  116. return global.GetNotFoundOrNoPermissionErr
  117. }
  118. return global.GetFailedErr
  119. }
  120. err = e.Orm.First(&dept, userModel.DeptId).Error
  121. userModel.Dept = dept
  122. err = e.Orm.First(&role, userModel.RoleId).Error
  123. userModel.Role = role
  124. //err = e.Orm.First(&post, userModel.PostId).Error
  125. //userModel.Post = post
  126. return nil
  127. }
  128. func (e *SysUser) GetByProvUserId(provUserId string, userModel *model.SysUser) error {
  129. var data model.SysUser
  130. var dept model.SysDept
  131. //var role model.SysRole
  132. //var post model.SysPost
  133. err := e.Orm.Model(&data).Where("prov_user_id = ?", provUserId).Preload("Dept").First(userModel).Error
  134. if err != nil {
  135. e.Log.Errorf("db error: %s", err)
  136. if errors.Is(err, gorm.ErrRecordNotFound) {
  137. return global.GetNotFoundOrNoPermissionErr
  138. }
  139. return global.GetFailedErr
  140. }
  141. err = e.Orm.First(&dept, userModel.DeptId).Error
  142. userModel.Dept = dept
  143. //
  144. //err = e.Orm.First(&role, userModel.RoleId).Error
  145. //userModel.Role = role
  146. //err = e.Orm.First(&post, userModel.PostId).Error
  147. //userModel.Post = post
  148. return nil
  149. }
  150. // Insert 创建SysUser对象
  151. func (e *SysUser) Insert(c *dto.SysUserInsertReq) error {
  152. var err error
  153. tx := e.Orm.Begin()
  154. defer func() {
  155. if err != nil {
  156. tx.Rollback()
  157. } else {
  158. tx.Commit()
  159. }
  160. }()
  161. var data model.SysUser
  162. var i int64
  163. err = e.Orm.Model(&data).Where("username = ?", c.Username).Count(&i).Error
  164. if err != nil {
  165. e.Log.Errorf("db error: %s", err)
  166. return global.CreateFailedErr
  167. }
  168. if i > 0 {
  169. err = errors.New("用户名已存在!")
  170. e.Log.Errorf("db error: %s", err)
  171. return err
  172. }
  173. // TODO 1.1.1.7新增用户信息
  174. // TODO 1.1.1.10送气人员绑定资质信息
  175. // TODO 1.1.1.11货车司机绑定资质信息
  176. var uuid string
  177. for {
  178. uuid = utils.GetUUID()
  179. var j int64
  180. err = e.Orm.Model(&data).Where("uuid = ?", uuid).Count(&j).Error
  181. if err != nil {
  182. continue
  183. }
  184. if j == 0 {
  185. break
  186. }
  187. }
  188. c.ProvUser.UserId = uuid
  189. c.Generate(&data)
  190. data.Uuid = uuid
  191. err = tx.Create(&data).Error
  192. if err != nil {
  193. e.Log.Errorf("db error: %s", err)
  194. return global.CreateFailedErr
  195. }
  196. c.Id = data.Id
  197. return nil
  198. }
  199. // Update 修改SysUser对象
  200. func (e *SysUser) Update(c *dto.SysUserUpdateReq, p *actions.DataPermission) error {
  201. var err error
  202. tx := e.Orm.Begin()
  203. defer func() {
  204. if err != nil {
  205. tx.Rollback()
  206. } else {
  207. tx.Commit()
  208. }
  209. }()
  210. var userModel model.SysUser
  211. err = e.Orm.
  212. Scopes(actions.UserPermission(userModel.TableName(), p)).
  213. First(&userModel, c.GetId()).Error
  214. if err != nil {
  215. e.Log.Errorf("db error: %s", err)
  216. if errors.Is(err, gorm.ErrRecordNotFound) {
  217. return global.UpdateNotFoundOrNoPermissionErr
  218. }
  219. return global.UpdateFailedErr
  220. }
  221. // TODO 1.1.1.8更新用户信息
  222. // TODO 1.1.1.10送气人员绑定资质信息
  223. // TODO 1.1.1.11货车司机绑定资质信息
  224. c.Generate(&userModel)
  225. err = tx.Model(&userModel).Where("id = ?", &userModel.Id).
  226. Omit("password", "salt").Updates(&userModel).Error
  227. if err != nil {
  228. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  229. return model.ErrForbidUpdateSysRole
  230. }
  231. e.Log.Errorf("db error: %s", err)
  232. return global.UpdateFailedErr
  233. }
  234. return nil
  235. }
  236. // UpdateStatus 更新用户状态
  237. func (e *SysUser) UpdateStatus(c *dto.UpdateSysUserStatusReq, p *actions.DataPermission) error {
  238. var userModel model.SysUser
  239. err := e.Orm.
  240. Scopes(actions.UserPermission(userModel.TableName(), p)).
  241. First(&userModel, c.GetId()).Error
  242. if err != nil {
  243. e.Log.Errorf("db error: %s", err)
  244. if errors.Is(err, gorm.ErrRecordNotFound) {
  245. return global.UpdateNotFoundOrNoPermissionErr
  246. }
  247. return global.UpdateFailedErr
  248. }
  249. err = e.Orm.Table(userModel.TableName()).Where("id = ? ", c.Id).Updates(c).Error
  250. if err != nil {
  251. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  252. return model.ErrForbidUpdateSysRole
  253. }
  254. e.Log.Errorf("db error: %s", err)
  255. return global.UpdateFailedErr
  256. }
  257. return nil
  258. }
  259. // ResetPwd 重置用户密码
  260. func (e *SysUser) ResetPwd(c *dto.ResetSysUserPwdReq, p *actions.DataPermission) error {
  261. var userModel model.SysUser
  262. err := e.Orm.
  263. Scopes(actions.UserPermission(userModel.TableName(), p)).
  264. First(&userModel, c.GetId()).Error
  265. if err != nil {
  266. e.Log.Errorf("db error: %s", err)
  267. if errors.Is(err, gorm.ErrRecordNotFound) {
  268. return global.UpdateNotFoundOrNoPermissionErr
  269. }
  270. return global.UpdateFailedErr
  271. }
  272. c.Generate(&userModel)
  273. err = e.Orm.Omit("username", "nick_name", "phone", "role_id", "avatar", "sex").Save(&userModel).Error
  274. if err != nil {
  275. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  276. return model.ErrForbidUpdateSysRole
  277. }
  278. e.Log.Errorf("db error: %s", err)
  279. return global.UpdateFailedErr
  280. }
  281. return nil
  282. }
  283. // Remove 删除SysUser
  284. func (e *SysUser) Remove(c *dto.SysUserDeleteReq, p *actions.DataPermission) error {
  285. var err error
  286. tx := e.Orm.Begin()
  287. defer func() {
  288. if err != nil {
  289. tx.Rollback()
  290. } else {
  291. tx.Commit()
  292. }
  293. }()
  294. var data model.SysUser
  295. db := e.Orm.Model(&data).
  296. Scopes(actions.UserPermission(data.TableName(), p)).
  297. Find(&data, c.GetId())
  298. if err := db.Error; err != nil {
  299. e.Log.Errorf("db error: %s", err)
  300. return err
  301. }
  302. if db.RowsAffected == 0 {
  303. return global.DeleteNotFoundOrNoPermissionErr
  304. }
  305. // TODO 1.1.1.9注销用户信息
  306. if err := tx.Delete(&data, c.GetId()).Error; err != nil {
  307. if errors.Is(err, model.ErrForbidDeleteSysRole) {
  308. return model.ErrForbidDeleteSysRole
  309. }
  310. e.Log.Errorf("db error: %s", err)
  311. return err
  312. }
  313. return nil
  314. }
  315. // UpdatePwd 修改SysUser对象密码
  316. func (e *SysUser) UpdatePwd(id int, oldPassword, newPassword string) error {
  317. var err error
  318. if newPassword == "" {
  319. return nil
  320. }
  321. c := &model.SysUser{}
  322. err = e.Orm.Model(c).
  323. Select("id", "password", "salt").
  324. First(c, id).Error
  325. if err != nil {
  326. e.Log.Errorf("db error: %s", err)
  327. if errors.Is(err, gorm.ErrRecordNotFound) {
  328. return global.UpdateNotFoundOrNoPermissionErr
  329. }
  330. return errors.New("密码修改失败")
  331. }
  332. var ok bool
  333. ok, err = pkg.CompareHashAndPassword(c.Password, oldPassword)
  334. if err != nil {
  335. e.Log.Errorf("CompareHashAndPassword error, %s", err.Error())
  336. return errors.New("密码修改失败")
  337. }
  338. if !ok {
  339. err = errors.New("incorrect Password")
  340. e.Log.Warnf("user[%d] %s", id, err.Error())
  341. return err
  342. }
  343. c.Password = newPassword
  344. db := e.Orm.Model(c).Where("id = ?", id).
  345. Select("Password", "Salt").
  346. Updates(c)
  347. if err = db.Error; err != nil {
  348. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  349. return model.ErrForbidUpdateSysRole
  350. }
  351. e.Log.Errorf("db error: %s", err)
  352. return errors.New("密码修改失败")
  353. }
  354. return nil
  355. }
  356. func (e *SysUser) GetProfile(c *dto.SysUserById, user *model.SysUser) error {
  357. err := e.Orm.First(user, c.GetId()).Error
  358. if err != nil {
  359. return err
  360. }
  361. var dept model.SysDept
  362. var role model.SysRole
  363. //var post model.SysPost
  364. err = e.Orm.First(&dept, user.DeptId).Error
  365. if err != nil {
  366. return err
  367. }
  368. user.Dept = dept
  369. err = e.Orm.First(&role, user.RoleId).Error
  370. if err != nil {
  371. return err
  372. }
  373. user.Role = role
  374. return nil
  375. }