sys_user.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  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. err := e.Orm.Model(&data).
  108. Scopes(actions.UserPermission(data.TableName(), p)).
  109. Preload("Dept").Preload("Role").
  110. First(userModel, d.GetId()).Error
  111. if err != nil {
  112. e.Log.Errorf("db error: %s", err)
  113. if errors.Is(err, gorm.ErrRecordNotFound) {
  114. return global.GetNotFoundOrNoPermissionErr
  115. }
  116. return global.GetFailedErr
  117. }
  118. return nil
  119. }
  120. func (e *SysUser) GetByProvUserId(provUserId string, userModel *model.SysUser) error {
  121. var data model.SysUser
  122. var dept model.SysDept
  123. //var role model.SysRole
  124. //var post model.SysPost
  125. err := e.Orm.Model(&data).Where("prov_user_id = ?", provUserId).Preload("Dept").First(userModel).Error
  126. if err != nil {
  127. e.Log.Errorf("db error: %s", err)
  128. if errors.Is(err, gorm.ErrRecordNotFound) {
  129. return global.GetNotFoundOrNoPermissionErr
  130. }
  131. return global.GetFailedErr
  132. }
  133. err = e.Orm.First(&dept, userModel.DeptId).Error
  134. userModel.Dept = dept
  135. //
  136. //err = e.Orm.First(&role, userModel.RoleId).Error
  137. //userModel.Role = role
  138. //err = e.Orm.First(&post, userModel.PostId).Error
  139. //userModel.Post = post
  140. return nil
  141. }
  142. // Insert 创建SysUser对象
  143. func (e *SysUser) Insert(c *dto.SysUserInsertReq) error {
  144. var err error
  145. tx := e.Orm.Begin()
  146. defer func() {
  147. if err != nil {
  148. tx.Rollback()
  149. } else {
  150. tx.Commit()
  151. }
  152. }()
  153. var data model.SysUser
  154. var i int64
  155. err = e.Orm.Model(&data).Where("username = ?", c.Username).Count(&i).Error
  156. if err != nil {
  157. e.Log.Errorf("db error: %s", err)
  158. return global.CreateFailedErr
  159. }
  160. if i > 0 {
  161. err = errors.New("用户名已存在!")
  162. e.Log.Errorf("db error: %s", err)
  163. return err
  164. }
  165. // TODO 1.1.1.7新增用户信息
  166. // TODO 1.1.1.10送气人员绑定资质信息
  167. // TODO 1.1.1.11货车司机绑定资质信息
  168. var uuid string
  169. for {
  170. uuid = utils.GetUUID()
  171. var j int64
  172. err = e.Orm.Model(&data).Where("uuid = ?", uuid).Count(&j).Error
  173. if err != nil {
  174. continue
  175. }
  176. if j == 0 {
  177. break
  178. }
  179. }
  180. c.ProvUser.UserId = uuid
  181. c.Generate(&data)
  182. data.Uuid = uuid
  183. err = tx.Create(&data).Error
  184. if err != nil {
  185. e.Log.Errorf("db error: %s", err)
  186. return global.CreateFailedErr
  187. }
  188. c.Id = data.Id
  189. return nil
  190. }
  191. // Update 修改SysUser对象
  192. func (e *SysUser) Update(c *dto.SysUserUpdateReq, p *actions.DataPermission) error {
  193. var err error
  194. tx := e.Orm.Begin()
  195. defer func() {
  196. if err != nil {
  197. tx.Rollback()
  198. } else {
  199. tx.Commit()
  200. }
  201. }()
  202. var userModel model.SysUser
  203. err = e.Orm.
  204. Scopes(actions.UserPermission(userModel.TableName(), p)).
  205. First(&userModel, c.GetId()).Error
  206. if err != nil {
  207. e.Log.Errorf("db error: %s", err)
  208. if errors.Is(err, gorm.ErrRecordNotFound) {
  209. return global.UpdateNotFoundOrNoPermissionErr
  210. }
  211. return global.UpdateFailedErr
  212. }
  213. // TODO 1.1.1.8更新用户信息
  214. // TODO 1.1.1.10送气人员绑定资质信息
  215. // TODO 1.1.1.11货车司机绑定资质信息
  216. c.Generate(&userModel)
  217. err = tx.Model(&userModel).Where("id = ?", &userModel.Id).
  218. Omit("password", "salt").Updates(&userModel).Error
  219. if err != nil {
  220. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  221. return model.ErrForbidUpdateSysRole
  222. }
  223. e.Log.Errorf("db error: %s", err)
  224. return global.UpdateFailedErr
  225. }
  226. return nil
  227. }
  228. // UpdateStatus 更新用户状态
  229. func (e *SysUser) UpdateStatus(c *dto.UpdateSysUserStatusReq, p *actions.DataPermission) error {
  230. var userModel model.SysUser
  231. err := e.Orm.
  232. Scopes(actions.UserPermission(userModel.TableName(), p)).
  233. First(&userModel, c.GetId()).Error
  234. if err != nil {
  235. e.Log.Errorf("db error: %s", err)
  236. if errors.Is(err, gorm.ErrRecordNotFound) {
  237. return global.UpdateNotFoundOrNoPermissionErr
  238. }
  239. return global.UpdateFailedErr
  240. }
  241. err = e.Orm.Table(userModel.TableName()).Where("id = ? ", c.Id).Updates(c).Error
  242. if err != nil {
  243. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  244. return model.ErrForbidUpdateSysRole
  245. }
  246. e.Log.Errorf("db error: %s", err)
  247. return global.UpdateFailedErr
  248. }
  249. return nil
  250. }
  251. // ResetPwd 重置用户密码
  252. func (e *SysUser) ResetPwd(c *dto.ResetSysUserPwdReq, p *actions.DataPermission) error {
  253. var userModel model.SysUser
  254. err := e.Orm.
  255. Scopes(actions.UserPermission(userModel.TableName(), p)).
  256. First(&userModel, c.GetId()).Error
  257. if err != nil {
  258. e.Log.Errorf("db error: %s", err)
  259. if errors.Is(err, gorm.ErrRecordNotFound) {
  260. return global.UpdateNotFoundOrNoPermissionErr
  261. }
  262. return global.UpdateFailedErr
  263. }
  264. c.Generate(&userModel)
  265. err = e.Orm.Omit("username", "nick_name", "phone", "role_id", "avatar", "sex").Save(&userModel).Error
  266. if err != nil {
  267. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  268. return model.ErrForbidUpdateSysRole
  269. }
  270. e.Log.Errorf("db error: %s", err)
  271. return global.UpdateFailedErr
  272. }
  273. return nil
  274. }
  275. // Remove 删除SysUser
  276. func (e *SysUser) Remove(c *dto.SysUserDeleteReq, p *actions.DataPermission) error {
  277. var err error
  278. tx := e.Orm.Begin()
  279. defer func() {
  280. if err != nil {
  281. tx.Rollback()
  282. } else {
  283. tx.Commit()
  284. }
  285. }()
  286. var data model.SysUser
  287. db := e.Orm.Model(&data).
  288. Scopes(actions.UserPermission(data.TableName(), p)).
  289. Find(&data, c.GetId())
  290. if err := db.Error; err != nil {
  291. e.Log.Errorf("db error: %s", err)
  292. return err
  293. }
  294. if db.RowsAffected == 0 {
  295. return global.DeleteNotFoundOrNoPermissionErr
  296. }
  297. // TODO 1.1.1.9注销用户信息
  298. if err := tx.Delete(&data, c.GetId()).Error; err != nil {
  299. if errors.Is(err, model.ErrForbidDeleteSysRole) {
  300. return model.ErrForbidDeleteSysRole
  301. }
  302. e.Log.Errorf("db error: %s", err)
  303. return err
  304. }
  305. return nil
  306. }
  307. // UpdatePwd 修改SysUser对象密码
  308. func (e *SysUser) UpdatePwd(id int, oldPassword, newPassword string) error {
  309. var err error
  310. if newPassword == "" {
  311. return nil
  312. }
  313. c := &model.SysUser{}
  314. err = e.Orm.Model(c).
  315. Select("id", "password", "salt").
  316. First(c, id).Error
  317. if err != nil {
  318. e.Log.Errorf("db error: %s", err)
  319. if errors.Is(err, gorm.ErrRecordNotFound) {
  320. return global.UpdateNotFoundOrNoPermissionErr
  321. }
  322. return errors.New("密码修改失败")
  323. }
  324. var ok bool
  325. ok, err = pkg.CompareHashAndPassword(c.Password, oldPassword)
  326. if err != nil {
  327. e.Log.Errorf("CompareHashAndPassword error, %s", err.Error())
  328. return errors.New("密码修改失败")
  329. }
  330. if !ok {
  331. err = errors.New("incorrect Password")
  332. e.Log.Warnf("user[%d] %s", id, err.Error())
  333. return err
  334. }
  335. c.Password = newPassword
  336. db := e.Orm.Model(c).Where("id = ?", id).
  337. Select("Password", "Salt").
  338. Updates(c)
  339. if err = db.Error; err != nil {
  340. if errors.Is(err, model.ErrForbidUpdateSysRole) {
  341. return model.ErrForbidUpdateSysRole
  342. }
  343. e.Log.Errorf("db error: %s", err)
  344. return errors.New("密码修改失败")
  345. }
  346. return nil
  347. }
  348. func (e *SysUser) GetProfile(c *dto.SysUserById, user *model.SysUser) error {
  349. err := e.Orm.Preload("Dept").Preload("Role").First(user, c.GetId()).Error
  350. if err != nil {
  351. return err
  352. }
  353. return nil
  354. }
  355. func SysUserOptTypeScopes(optType string) func(db *gorm.DB) *gorm.DB {
  356. return func(db *gorm.DB) *gorm.DB {
  357. switch optType {
  358. // 查询司机
  359. case "17", "033", "11":
  360. //司机确认重瓶从气站出库17
  361. //司机确认重瓶从门店出库033
  362. //司机确认空瓶装车11
  363. db.Where("JSON_EXTRACT(prov_user, '$.userType') = 4 and JSON_EXTRACT(prov_user, '$.isorders') = 0")
  364. // 查询库管
  365. case "31", "35", "21":
  366. //门店确认重瓶卸货入库31
  367. //门店确认未配送重瓶返库35
  368. //门店回收空瓶21
  369. db.Where("JSON_EXTRACT(prov_user, '$.userType') = 3 and JSON_EXTRACT(prov_user, '$.isorders') = 1")
  370. // 查询气站
  371. case "016", "13":
  372. //气站确认重瓶到达气站016
  373. //气站确认空瓶到达气站13
  374. db.Where("JSON_EXTRACT(prov_user, '$.userType') = 5 and JSON_EXTRACT(prov_user, '$.isorders') = 0")
  375. // 查询送气员 送气员领重瓶出库25
  376. case "25":
  377. db.Where("JSON_EXTRACT(prov_user, '$.userType') = 3 and JSON_EXTRACT(prov_user, '$.isorders') = 0")
  378. // 查询门店
  379. case "mdscrap", "mdextended":
  380. db.Where("JSON_EXTRACT(prov_user, '$.userType') = 3 and JSON_EXTRACT(prov_user, '$.isorders') = 1")
  381. // 查询气站
  382. case "qzscrap", "qzextended":
  383. db.Where("JSON_EXTRACT(prov_user, '$.userType') = 5 and JSON_EXTRACT(prov_user, '$.isorders') = 0")
  384. // 查询司机
  385. case "sjscrap", "sjextended":
  386. db.Where("JSON_EXTRACT(prov_user, '$.userType') = 4 and JSON_EXTRACT(prov_user, '$.isorders') = 0")
  387. }
  388. return db
  389. }
  390. }
  391. // GetPageByOptType 通过OptType获取用户信息
  392. func (e *SysUser) GetPageByOptType(c *dto.SysUserGetPageByOptTypeReq, list *[]model.SysUser, count *int64) error {
  393. var err error
  394. //var data model.SysUser
  395. err = e.Orm.
  396. Scopes(
  397. cDto.MakeCondition(c.GetNeedSearch()),
  398. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  399. SysUserOptTypeScopes(c.OptType),
  400. ).
  401. Preload("Dept").
  402. Find(&list).Limit(-1).Offset(-1).
  403. Count(count).Error
  404. if err != nil {
  405. e.Log.Errorf("db error: %s", err)
  406. return global.GetFailedErr
  407. }
  408. return nil
  409. }