user.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. package handler
  2. import (
  3. "context"
  4. "dashoo.cn/opms_libary/myerrors"
  5. "dashoo.cn/opms_libary/request"
  6. "github.com/gogf/gf/util/gconv"
  7. "strings"
  8. "github.com/gogf/gf/util/gvalid"
  9. "dashoo.cn/opms_admin/app/model"
  10. "dashoo.cn/opms_admin/app/service"
  11. "dashoo.cn/common_definition/comm_def"
  12. "github.com/gogf/gf/frame/g"
  13. )
  14. type UserHandler struct{}
  15. // GetList 获取用户列表
  16. func (h *UserHandler) GetList(ctx context.Context, req *model.SysUserSearchReq, rsp *comm_def.CommonMsg) error {
  17. userService, err := service.NewUserService(ctx)
  18. if err != nil {
  19. return err
  20. }
  21. total, list, err := userService.GetUserList(req)
  22. if err != nil {
  23. return err
  24. }
  25. rsp.Data = g.Map{"list": list, "total": total}
  26. return nil
  27. }
  28. // Create 添加用户
  29. func (h *UserHandler) Create(ctx context.Context, req *model.AddUserReq, rsp *comm_def.CommonMsg) error {
  30. // 参数校验
  31. if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
  32. return err
  33. }
  34. userService, err := service.NewUserService(ctx)
  35. if err != nil {
  36. g.Log().Error(err)
  37. return err
  38. }
  39. err = userService.CreateUser(req)
  40. if err != nil {
  41. return err
  42. }
  43. return nil
  44. }
  45. // UpdateById 更新用户
  46. func (h *UserHandler) UpdateById(ctx context.Context, req *model.EditUserReq, rsp *comm_def.CommonMsg) error {
  47. // 参数校验
  48. if req.Id == 0 {
  49. return myerrors.TipsError("请求参数不存在。")
  50. }
  51. if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
  52. return err
  53. }
  54. userService, err := service.NewUserService(ctx)
  55. if err != nil {
  56. g.Log().Error(err)
  57. return err
  58. }
  59. err = userService.UpdateUser(req)
  60. if err != nil {
  61. return err
  62. }
  63. return nil
  64. }
  65. // GetUserInfo 获取用户实体信息
  66. func (h *UserHandler) GetUserInfo(ctx context.Context, req *comm_def.IdReq, rsp *comm_def.CommonMsg) error {
  67. userService, err := service.NewUserService(ctx)
  68. if err != nil {
  69. return err
  70. }
  71. // 从上下文中获取用户
  72. userId := userService.GetCxtUserId()
  73. if req.Id != 0 {
  74. userId = int(req.Id)
  75. }
  76. data, err := userService.GetUserInfoById(userId)
  77. if err != nil {
  78. return err
  79. }
  80. // 获取用户权限 角色
  81. userRoles, err := userService.GetUserRoleIds(userId)
  82. if err != nil {
  83. return err
  84. }
  85. roleService, _ := service.NewRoleService(ctx)
  86. roleKeys, err := roleService.GetRoleKeys(userRoles)
  87. if err != nil {
  88. return err
  89. }
  90. permissions, err := roleService.GetRolesMenuPermissions(userRoles)
  91. if err != nil {
  92. return err
  93. }
  94. userPosts, err := userService.GetUserPostIds(userId)
  95. if err != nil {
  96. return err
  97. }
  98. postService, _ := service.NewPostService(ctx)
  99. postNames, err := postService.GetEntityNameByIds(userPosts)
  100. if err != nil {
  101. return err
  102. }
  103. data.PostName = strings.Join(postNames, ",")
  104. userGroups, err := userService.GetUserGroupIds(userId)
  105. if err != nil {
  106. return err
  107. }
  108. rsp.Data = g.Map{
  109. "entity": data,
  110. "permissions": permissions,
  111. "roleKeys": roleKeys,
  112. "roleIds": userRoles,
  113. "postIds": userPosts,
  114. "groupIds": userGroups,
  115. }
  116. return nil
  117. }
  118. // GetEntityByUuId 根据UUID获取用户实体信息
  119. //func (e *UserHandler) GetEntityByUuId(ctx context.Context, req *user_def.UuIdReq, rsp *comm_def.CommonMsg) error {
  120. // // 参数校验
  121. // if req.Uuid == "" {
  122. // return myerrors.TipsError("请求参数不存在。")
  123. // }
  124. // userService, err := service.NewUserService(ctx)
  125. // if err != nil {
  126. // return err
  127. // }
  128. // data, err := userService.GetEntityByUuId(req.Uuid)
  129. // if err != nil {
  130. // return err
  131. // }
  132. // rsp.Data = data
  133. // return nil
  134. //}
  135. // DeleteByIds 删除 支持批量删除
  136. func (h *UserHandler) DeleteByIds(ctx context.Context, req *comm_def.IdsReq, rsp *comm_def.CommonMsg) error {
  137. // 参数校验
  138. if len(req.Ids) == 0 {
  139. return myerrors.TipsError("请求参数不存在。")
  140. }
  141. userService, err := service.NewUserService(ctx)
  142. if err != nil {
  143. return err
  144. }
  145. err = userService.DeleteUserByIds(ctx, req.Ids)
  146. if err != nil {
  147. return err
  148. }
  149. return nil
  150. }
  151. // ResetPassword 密码重置(管理员进行操作)
  152. func (h *UserHandler) ResetPassword(ctx context.Context, req *model.SysResetPwdReq, rsp *comm_def.CommonMsg) error {
  153. if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
  154. return err
  155. }
  156. userService, err := service.NewUserService(ctx)
  157. if err != nil {
  158. return err
  159. }
  160. err = userService.ResetUserPwd(req)
  161. if err != nil {
  162. return err
  163. }
  164. return nil
  165. }
  166. // SetStatus 设置用户状态
  167. func (h *UserHandler) SetStatus(ctx context.Context, req *model.SysUserStatusReq, rsp *comm_def.CommonMsg) error {
  168. if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
  169. return err
  170. }
  171. userService, err := service.NewUserService(ctx)
  172. if err != nil {
  173. return err
  174. }
  175. err = userService.ChangeUserStatus(req)
  176. if err != nil {
  177. return err
  178. }
  179. return nil
  180. }
  181. // GetDataScope 获取某用户数据集合权限,返回Ids(用户Id列表),返回-1表示无角色,返回-2表示有全部集合权限
  182. func (h *UserHandler) GetDataScope(ctx context.Context, req *comm_def.IdReq, rsp *comm_def.CommonMsg) error {
  183. userService, err := service.NewUserService(ctx)
  184. if err != nil {
  185. return err
  186. }
  187. sysUserInfo, err := userService.GetUserInfoById(int(req.Id))
  188. if err != nil {
  189. return err
  190. }
  191. userInfo := new(request.UserInfo)
  192. if err = gconv.Struct(sysUserInfo, userInfo); err != nil {
  193. return err
  194. }
  195. dataScope, err := userService.GetDataScope(userInfo)
  196. if err != nil {
  197. return err
  198. }
  199. rsp.Code = 200
  200. rsp.Data = dataScope
  201. return nil
  202. }
  203. // GetUserByDept 获取部门下所属用户
  204. func (h *UserHandler) GetUserByDept(ctx context.Context, req *model.DeptIdReq, rsp *comm_def.CommonMsg) error {
  205. // 参数校验
  206. if req.DeptId == 0 {
  207. return myerrors.TipsError("请求参数不存在。")
  208. }
  209. userService, err := service.NewUserService(ctx)
  210. if err != nil {
  211. return err
  212. }
  213. var list interface{}
  214. if req.Include {
  215. req := &model.SysUserSearchReq{DeptId: req.DeptId}
  216. req.PageSize = 1000
  217. _, list, err = userService.GetUsersByDeptEx(req)
  218. } else {
  219. list, err = userService.GetUserByDept(req.DeptId)
  220. }
  221. if err != nil {
  222. return err
  223. }
  224. rsp.Data = list
  225. return nil
  226. }
  227. // GetUserByRole 获取角色关联用户
  228. func (h *UserHandler) GetUserByRole(ctx context.Context, req *model.SysUserRoleReq, rsp *comm_def.CommonMsg) error {
  229. // 参数校验
  230. if req.RoleId == 0 {
  231. return myerrors.TipsError("请求参数不存在。")
  232. }
  233. userService, err := service.NewUserService(ctx)
  234. if err != nil {
  235. return err
  236. }
  237. list, err := userService.GetUserByRole(req.RoleId)
  238. if err != nil {
  239. return err
  240. }
  241. rsp.Data = list
  242. return nil
  243. }
  244. func (h *UserHandler) GetUsersByRoleKeys(ctx context.Context, req *model.SysUserRoleKeysReq, rsp *comm_def.CommonMsg) error {
  245. if len(req.RoleKeys) == 0 && len(req.RoleIds) == 0 {
  246. return myerrors.TipsError("角色编码和角色ID不能同时为空")
  247. }
  248. userService, err := service.NewUserService(ctx)
  249. if err != nil {
  250. return err
  251. }
  252. list, err := userService.GetUsersByRoleKeys(req.RoleKeys, req.RoleIds)
  253. if err != nil {
  254. return err
  255. }
  256. rsp.Data = list
  257. return nil
  258. }
  259. //// GetDictList 获取用户列表字典项(返回字典数据形式,一般用来绑定用户的下拉列表)
  260. //func (e *UserHandler) GetDictList(ctx context.Context, req *user_def.DictSelectReq, rsp *comm_def.CommonMsg) error {
  261. // // 获取租户码
  262. // tenant, err := micro_srv.GetTenant(ctx)
  263. // if err != nil {
  264. // return err
  265. // }
  266. // g.Log().Info("Received UserHandler.GetDictList request @ " + tenant)
  267. //
  268. // service, err := user.NewService(tenant)
  269. // if flag, err, _, _ := myerrors.CheckError(err); flag {
  270. // return err
  271. // }
  272. //
  273. // list, err := service.GetDict(req)
  274. // _, err, code, msg := myerrors.CheckError(err)
  275. // if err != nil {
  276. // return err
  277. // }
  278. // rsp.Code = code
  279. // rsp.Msg = msg
  280. // rsp.Data = list
  281. // return nil
  282. //}
  283. //
  284. //// GetUsersDictByDepartment 获取当前部门下用户信息列表(返回字典数据形式,一般用来绑定用户的下拉列表)
  285. //func (e *UserHandler) GetUsersDictByDepartment(ctx context.Context, req *user_def.DeptIdReq,
  286. // rsp *comm_def.CommonMsg) error {
  287. // // 获取租户码
  288. // tenant, err := micro_srv.GetTenant(ctx)
  289. // if err != nil {
  290. // return err
  291. // }
  292. // g.Log().Info("Received UserHandler.GetUsersDictByDepartment request @ " + tenant)
  293. // service, err := user.NewService(tenant)
  294. // if err != nil {
  295. // g.Log().Error(err)
  296. // return myerrors.TipsError("系统异常,请重新尝试")
  297. // }
  298. // list, err := service.GetUsersDictByDepartment(req.DeptId)
  299. // _, err, code, msg := myerrors.CheckError(err)
  300. // if err != nil {
  301. // return err
  302. // }
  303. // rsp.Code = code
  304. // rsp.Msg = msg
  305. // rsp.Data = list
  306. // return nil
  307. //}
  308. //
  309. //// GetProfile 获取用户信息
  310. //func (e *UserHandler) GetProfile(ctx context.Context, numParams interface{}, rsp *comm_def.CommonMsg) error {
  311. // // 获取租户码
  312. // tenant, err := micro_srv.GetTenant(ctx)
  313. // if err != nil {
  314. // return err
  315. // }
  316. // g.Log().Info("Received UserHandler.GetProfile request @ " + tenant)
  317. //
  318. // service, err := user.NewService(tenant)
  319. // if flag, err, _, _ := myerrors.CheckError(err); flag {
  320. // return err
  321. // }
  322. // userInfo, err := micro_srv.GetUserInfo(ctx)
  323. // if err != nil {
  324. // return err
  325. // }
  326. // profile, err := service.GetProfile(int64(userInfo.Id))
  327. // _, err, code, msg := myerrors.CheckError(err)
  328. // if err != nil {
  329. // return err
  330. // }
  331. // rsp.Code = code
  332. // rsp.Msg = msg
  333. // rsp.Data = profile
  334. // return nil
  335. //}
  336. //
  337. //// UpdateProfile 更新Profile
  338. //func (e *UserHandler) UpdateProfile(ctx context.Context, req *user_def.EditProfileEntity, rsp *comm_def.CommonMsg) error {
  339. // // 获取租户码
  340. // tenant, err := micro_srv.GetTenant(ctx)
  341. // if err != nil {
  342. // return err
  343. // }
  344. // g.Log().Info("Received UserHandler.UpdateProfile request @ " + tenant)
  345. // if req.Id == 0 {
  346. // return NoParamsErr
  347. // }
  348. // validErr := gvalid.CheckStruct(ctx, req, nil)
  349. // if validErr != nil {
  350. // return validErr.Current()
  351. // }
  352. // service, err := user.NewService(tenant)
  353. // if flag, err, _, _ := myerrors.CheckError(err); flag {
  354. // return err
  355. // }
  356. // userInfo, err := micro_srv.GetUserInfo(ctx)
  357. // if err != nil {
  358. // return err
  359. // }
  360. // err = service.UpdateProfile(&userInfo, req)
  361. // _, err, code, msg := myerrors.CheckError(err)
  362. // if err != nil {
  363. // return err
  364. // }
  365. // rsp.Code = code
  366. // rsp.Msg = msg
  367. // return nil
  368. //}
  369. //
  370. //// SetAvatar 设置用户头像
  371. //func (e *UserHandler) SetAvatar(ctx context.Context, req *user_def.AvatarReq, rsp *comm_def.CommonMsg) error {
  372. // // 获取租户码
  373. // tenant, err := micro_srv.GetTenant(ctx)
  374. // if err != nil {
  375. // return err
  376. // }
  377. // g.Log().Info("Received UserHandler.SetAvatar request @ " + tenant)
  378. // if req.FileUrl == "" {
  379. // return NoParamsErr
  380. // }
  381. // service, err := user.NewService(tenant)
  382. // if err != nil {
  383. // g.Log().Error(err)
  384. // return myerrors.TipsError("系统异常,请重新尝试")
  385. // }
  386. // userInfo, err := micro_srv.GetUserInfo(ctx)
  387. // if err != nil {
  388. // return err
  389. // }
  390. // err = service.SetAvatar(&userInfo, req.FileUrl)
  391. // _, err, code, msg := myerrors.CheckError(err)
  392. // if err != nil {
  393. // return err
  394. // }
  395. // rsp.Code = code
  396. // rsp.Msg = msg
  397. // return nil
  398. //}
  399. // ChangePassword 用户修改密码
  400. func (h *UserHandler) ChangePassword(ctx context.Context, req *model.SysUserResetPwdReq, rsp *comm_def.CommonMsg) error {
  401. if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
  402. return err
  403. }
  404. userService, err := service.NewUserService(ctx)
  405. if err != nil {
  406. return err
  407. }
  408. err = userService.ProfileUpdatePwd(&model.ProfileUpdatePwdReq{
  409. UserId: userService.GetCxtUserId(),
  410. OldPassword: req.OldPassword,
  411. NewPassword: req.NewPassword,
  412. })
  413. return err
  414. }
  415. //// GetUserByUserName 根据用户名获取用户信息
  416. //func (e *UserHandler) GetUserByUserName(ctx context.Context, req *user_def.UserNameReq, rsp *comm_def.CommonMsg) error {
  417. // // 获取租户码
  418. // tenant, err := micro_srv.GetTenant(ctx)
  419. // if err != nil {
  420. // return err
  421. // }
  422. // g.Log().Info("Received UserHandler.GetUserByUserName request @ " + tenant)
  423. // if req.UserName == "" {
  424. //
  425. // }
  426. // service, err := user.NewService(tenant)
  427. // if err != nil {
  428. // g.Log().Error(err)
  429. // return myerrors.TipsError("系统异常,请重新尝试")
  430. // }
  431. //
  432. // userEntity, err := service.GetUserByUserName(req.UserName)
  433. // _, err, code, msg := myerrors.CheckError(err)
  434. // rsp.Code = code
  435. // rsp.Msg = msg
  436. // rsp.Data = userEntity
  437. // return nil
  438. //}
  439. //
  440. //func (e *UserHandler) SendResetPasswordEmail(ctx context.Context, req *user_def.UserNameReq, rsp *comm_def.CommonMsg) error {
  441. // tenant, err := micro_srv.GetTenant(ctx)
  442. // if err != nil {
  443. // return err
  444. // }
  445. // service, err := user.NewService(tenant)
  446. // if err != nil {
  447. // g.Log().Error(err)
  448. // return myerrors.TipsError("系统异常,请重新尝试")
  449. // }
  450. // email, expired, err := service.SendResetPasswordEmail(req)
  451. // _, err, code, msg := myerrors.CheckError(err)
  452. // rsp.Code = code
  453. // rsp.Msg = msg
  454. // if err == nil {
  455. // rsp.Data = map[string]interface{}{
  456. // "email": email,
  457. // "expired": expired,
  458. // }
  459. // }
  460. // return nil
  461. //}
  462. //
  463. //func (e *UserHandler) ResetPasswordFromEmail(ctx context.Context, req *user.ResetPasswordFromEmailReq, rsp *comm_def.CommonMsg) error {
  464. // tenant, err := micro_srv.GetTenant(ctx)
  465. // if err != nil {
  466. // return err
  467. // }
  468. // service, err := user.NewService(tenant)
  469. // if err != nil {
  470. // g.Log().Error(err)
  471. // return myerrors.TipsError("系统异常,请重新尝试")
  472. // }
  473. // err = service.ResetPasswordFromEmail(ctx, req)
  474. // _, err, code, msg := myerrors.CheckError(err)
  475. // rsp.Code = code
  476. // rsp.Msg = msg
  477. // return nil
  478. //}