user.go 12 KB

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