sys_user.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. package controller
  2. import (
  3. "errors"
  4. "fmt"
  5. "gas-cylinder-api/app/admin/model"
  6. "gas-cylinder-api/app/admin/service"
  7. "gas-cylinder-api/app/admin/service/dto"
  8. "gas-cylinder-api/common/actions"
  9. "gas-cylinder-api/common/middleware/handler"
  10. "gas-cylinder-api/conf"
  11. "github.com/gin-gonic/gin"
  12. "github.com/gin-gonic/gin/binding"
  13. "go.uber.org/zap"
  14. "gogs.baozhida.cn/zoie/OAuth-core/api"
  15. "gogs.baozhida.cn/zoie/OAuth-core/pkg"
  16. "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
  17. _ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
  18. "gogs.baozhida.cn/zoie/OAuth-core/pkg/sms"
  19. "golang.org/x/crypto/bcrypt"
  20. "net/http"
  21. "strconv"
  22. )
  23. // SysUser 定义用户控制器
  24. type SysUser struct {
  25. api.Api
  26. }
  27. // GetPage 获取系统用户列表
  28. // @Summary 获取系统用户列表
  29. // @Description 获取系统用户列表
  30. // @Tags 用户
  31. // @Param username query string false "用户名"
  32. // @Param deptId query int false "部门id"
  33. // @Param roleId query string false "角色id"
  34. // @Param postId query string false "岗位id"
  35. // @Param status query string false "状态 1-停用 2-正常"
  36. // @Param pageSize query int false "页条数"
  37. // @Param pageIndex query int false "页码"
  38. // @Success 200 {object} response.Response{data=response.Page{list=[]model.SysUser}} "{"code": 200, "data": [...]}"
  39. // @Router /api/sys-user [get]
  40. // @Security Bearer
  41. func (e SysUser) GetPage(c *gin.Context) {
  42. s := service.SysUser{}
  43. req := dto.SysUserGetPageReq{}
  44. err := e.MakeContext(c).
  45. MakeOrm().
  46. Bind(&req, binding.Query).
  47. MakeService(&s.Service).
  48. Errors
  49. if err != nil {
  50. e.Logger.Error(err)
  51. e.Error(500, err, err.Error())
  52. return
  53. }
  54. //数据权限检查
  55. p := actions.GetPermissionFromContext(c)
  56. list := make([]model.SysUser, 0)
  57. var count int64
  58. err = s.GetPage(&req, p, &list, &count)
  59. if err != nil {
  60. e.Error(500, err, err.Error())
  61. return
  62. }
  63. e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  64. }
  65. // Get 通过id获取用户
  66. // @Summary 通过id获取用户
  67. // @Description 通过id获取用户
  68. // @Tags 用户
  69. // @Param id path int true "用户id"
  70. // @Success 200 {object} response.Response{data=model.SysUser} "{"code": 200, "data": [...]}"
  71. // @Router /api/sys-user/{id} [get]
  72. // @Security Bearer
  73. func (e SysUser) Get(c *gin.Context) {
  74. s := service.SysUser{}
  75. req := dto.SysUserGetReq{}
  76. err := e.MakeContext(c).
  77. MakeOrm().
  78. Bind(&req, nil).
  79. MakeService(&s.Service).
  80. Errors
  81. if err != nil {
  82. e.Logger.Error(err)
  83. e.Error(500, err, err.Error())
  84. return
  85. }
  86. //数据权限检查
  87. p := actions.GetPermissionFromContext(c)
  88. var object model.SysUser
  89. err = s.Get(&req, p, &object)
  90. if err != nil {
  91. e.Error(http.StatusUnprocessableEntity, err, err.Error())
  92. return
  93. }
  94. e.OK(object, "查询成功")
  95. }
  96. // Insert 创建用户
  97. // @Summary 创建用户
  98. // @Description 创建用户
  99. // @Tags 用户
  100. // @Accept application/json
  101. // @Product application/json
  102. // @Param data body dto.SysUserInsertReq true "用户数据"
  103. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  104. // @Router /api/sys-user [post]
  105. // @Security Bearer
  106. func (e SysUser) Insert(c *gin.Context) {
  107. s := service.SysUser{}
  108. req := dto.SysUserInsertReq{}
  109. err := e.MakeContext(c).
  110. MakeOrm().
  111. Bind(&req, binding.JSON).
  112. MakeService(&s.Service).
  113. Errors
  114. if err != nil {
  115. e.Logger.Error(err)
  116. e.Error(500, err, err.Error())
  117. return
  118. }
  119. deptId := user.GetDeptId(c)
  120. if deptIdStr, err := e.Cache.Get(model.GetEnterDeptCacheKey(user.GetUserId(c))); err == nil {
  121. deptId, _ = strconv.Atoi(deptIdStr)
  122. }
  123. req.DeptId = deptId
  124. req.RoleId = 1
  125. req.Status = "2"
  126. // 设置创建人
  127. req.SetCreateBy(user.GetUserId(c))
  128. err = s.Insert(&req)
  129. if err != nil {
  130. e.Error(500, err, err.Error())
  131. return
  132. }
  133. e.OK(req.GetId(), "创建成功")
  134. }
  135. // Update 修改用户数据
  136. // @Summary 修改用户数据
  137. // @Description 修改用户数据
  138. // @Tags 用户
  139. // @Accept application/json
  140. // @Product application/json
  141. // @Param id path int true "用户id"
  142. // @Param data body dto.SysUserUpdateReq true "body"
  143. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  144. // @Router /api/sys-user [put]
  145. // @Security Bearer
  146. func (e SysUser) Update(c *gin.Context) {
  147. s := service.SysUser{}
  148. req := dto.SysUserUpdateReq{}
  149. err := e.MakeContext(c).
  150. MakeOrm().
  151. Bind(&req).
  152. MakeService(&s.Service).
  153. Errors
  154. if err != nil {
  155. e.Logger.Error(err)
  156. e.Error(500, err, err.Error())
  157. return
  158. }
  159. req.SetUpdateBy(user.GetUserId(c))
  160. //数据权限检查
  161. p := actions.GetPermissionFromContext(c)
  162. err = s.Update(&req, p)
  163. if err != nil {
  164. e.Error(500, err, err.Error())
  165. return
  166. }
  167. e.OK(req.GetId(), "更新成功")
  168. }
  169. // Delete 通过id删除用户数据
  170. // @Summary 通过id删除用户数据
  171. // @Description 通过id删除用户数据
  172. // @Tags 用户
  173. // @Param data body dto.SysUserDeleteReq true "body"
  174. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  175. // @Router /api/sys-user [delete]
  176. // @Security Bearer
  177. func (e SysUser) Delete(c *gin.Context) {
  178. s := service.SysUser{}
  179. req := dto.SysUserDeleteReq{}
  180. err := e.MakeContext(c).
  181. MakeOrm().
  182. Bind(&req, binding.JSON).
  183. MakeService(&s.Service).
  184. Errors
  185. if err != nil {
  186. e.Logger.Error(err)
  187. e.Error(500, err, err.Error())
  188. return
  189. }
  190. userId := user.GetUserId(c)
  191. if userId == req.Id {
  192. err := errors.New("禁止删除自己")
  193. e.Error(500, err, err.Error())
  194. return
  195. }
  196. // 设置编辑人
  197. req.SetUpdateBy(userId)
  198. //数据权限检查
  199. p := actions.GetPermissionFromContext(c)
  200. err = s.Remove(&req, p)
  201. if err != nil {
  202. e.Error(500, err, err.Error())
  203. return
  204. }
  205. e.OK(req.GetId(), "删除成功")
  206. }
  207. // UpdateStatus 修改用户状态
  208. // @Summary 修改用户状态
  209. // @Description 修改用户状态
  210. // @Tags 用户
  211. // @Accept application/json
  212. // @Product application/json
  213. // @Param data body dto.UpdateSysUserStatusReq true "body"
  214. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  215. // @Router /api/user/status [put]
  216. // @Security Bearer
  217. func (e SysUser) UpdateStatus(c *gin.Context) {
  218. s := service.SysUser{}
  219. req := dto.UpdateSysUserStatusReq{}
  220. err := e.MakeContext(c).
  221. MakeOrm().
  222. Bind(&req, binding.JSON, nil).
  223. MakeService(&s.Service).
  224. Errors
  225. if err != nil {
  226. e.Logger.Error(err)
  227. e.Error(500, err, err.Error())
  228. return
  229. }
  230. req.SetUpdateBy(user.GetUserId(c))
  231. //数据权限检查
  232. p := actions.GetPermissionFromContext(c)
  233. err = s.UpdateStatus(&req, p)
  234. if err != nil {
  235. e.Logger.Error(err)
  236. e.Error(500, err, err.Error())
  237. return
  238. }
  239. e.OK(req.GetId(), "更新成功")
  240. }
  241. // ResetPwd 重置用户密码
  242. // @Summary 重置用户密码
  243. // @Description 重置用户密码
  244. // @Tags 用户
  245. // @Accept application/json
  246. // @Product application/json
  247. // @Param data body dto.ResetSysUserPwdReq true "body"
  248. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  249. // @Router /api/user/pwd/reset [put]
  250. // @Security Bearer
  251. func (e SysUser) ResetPwd(c *gin.Context) {
  252. s := service.SysUser{}
  253. req := dto.ResetSysUserPwdReq{}
  254. err := e.MakeContext(c).
  255. MakeOrm().
  256. Bind(&req, binding.JSON).
  257. MakeService(&s.Service).
  258. Errors
  259. if err != nil {
  260. e.Logger.Error(err)
  261. e.Error(500, err, err.Error())
  262. return
  263. }
  264. req.SetUpdateBy(user.GetUserId(c))
  265. //数据权限检查
  266. p := actions.GetPermissionFromContext(c)
  267. err = s.ResetPwd(&req, p)
  268. if err != nil {
  269. e.Logger.Error(err)
  270. e.Error(500, err, err.Error())
  271. return
  272. }
  273. e.OK(req.GetId(), "更新成功")
  274. }
  275. // UpdatePwd 修改密码
  276. // @Summary 修改密码
  277. // @Description 修改密码
  278. // @Tags 个人中心
  279. // @Accept application/json
  280. // @Product application/json
  281. // @Param data body dto.PassWord true "body"
  282. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  283. // @Router /api/user/pwd/set [put]
  284. // @Security Bearer
  285. func (e SysUser) UpdatePwd(c *gin.Context) {
  286. s := service.SysUser{}
  287. req := dto.PassWord{}
  288. err := e.MakeContext(c).
  289. MakeOrm().
  290. Bind(&req).
  291. MakeService(&s.Service).
  292. Errors
  293. if err != nil {
  294. e.Logger.Error(err)
  295. e.Error(500, err, err.Error())
  296. return
  297. }
  298. var hash []byte
  299. if hash, err = bcrypt.GenerateFromPassword([]byte(req.NewPassword), bcrypt.DefaultCost); err != nil {
  300. req.NewPassword = string(hash)
  301. }
  302. err = s.UpdatePwd(user.GetUserId(c), req.OldPassword, req.NewPassword)
  303. if err != nil {
  304. e.Error(http.StatusForbidden, err, err.Error())
  305. return
  306. }
  307. e.OK(nil, "密码修改成功")
  308. }
  309. // GetProfile 获取个人中心用户
  310. // @Summary 获取个人中心用户
  311. // @Description 获取个人中心用户
  312. // @Tags 个人中心
  313. // @Success 200 {object} response.Response{user=model.SysUser,role=model.SysRole} "{"code": 200, "data": {"user":[...],"role":[...]}}"
  314. // @Router /api/user/profile [get]
  315. // @Security Bearer
  316. func (e SysUser) GetProfile(c *gin.Context) {
  317. s := service.SysUser{}
  318. req := dto.SysUserById{}
  319. err := e.MakeContext(c).
  320. MakeOrm().
  321. MakeService(&s.Service).
  322. Errors
  323. if err != nil {
  324. e.Logger.Error(err)
  325. e.Error(500, err, err.Error())
  326. return
  327. }
  328. req.Id = user.GetUserId(c)
  329. sysUser := model.SysUser{}
  330. err = s.GetProfile(&req, &sysUser)
  331. if err != nil {
  332. e.Logger.Errorf("get user profile error, %s", err.Error())
  333. e.Error(500, err, "获取用户信息失败")
  334. return
  335. }
  336. e.OK(gin.H{
  337. "user": sysUser,
  338. }, "查询成功")
  339. }
  340. // GetInfo 获取个人信息
  341. // @Summary 获取个人信息
  342. // @Description 获取个人信息
  343. // @Tags 个人中心
  344. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  345. // @Router /api/user/info [get]
  346. // @Security Bearer
  347. func (e SysUser) GetInfo(c *gin.Context) {
  348. req := dto.SysUserGetReq{}
  349. s := service.SysUser{}
  350. r := service.SysRole{}
  351. err := e.MakeContext(c).
  352. MakeOrm().
  353. MakeService(&r.Service).
  354. MakeService(&s.Service).
  355. Errors
  356. if err != nil {
  357. e.Logger.Error(err)
  358. e.Error(500, err, err.Error())
  359. return
  360. }
  361. var roles = make([]string, 1)
  362. roles[0] = user.GetRoleName(c)
  363. var permissions = make([]string, 1)
  364. permissions[0] = "*:*:*"
  365. var buttons = make([]string, 1)
  366. buttons[0] = "*:*:*"
  367. var mp = make(map[string]interface{})
  368. mp["roles"] = roles
  369. list, _ := r.GetById(user.GetRoleId(c))
  370. mp["permissions"] = list
  371. mp["buttons"] = list
  372. sysUser := model.SysUser{}
  373. req.Id = user.GetUserId(c)
  374. err = s.Get(&req, nil, &sysUser)
  375. if err != nil {
  376. e.Logger.Errorf("get user info error, %s", err.Error())
  377. e.Error(http.StatusUnauthorized, err, err.Error())
  378. return
  379. }
  380. mp["userName"] = sysUser.Username
  381. mp["userId"] = sysUser.Id
  382. mp["deptId"] = sysUser.DeptId
  383. mp["name"] = sysUser.NickName
  384. mp["code"] = 200
  385. e.OK(mp, "查询成功")
  386. }
  387. // VerifyCode 获取短信验证码
  388. // @Summary 获取短信验证码
  389. // @Description 获取短信验证码
  390. // @Tags 登录
  391. // @Accept application/json
  392. // @Product application/json
  393. // @Success 200 {string} string "{"code": 200, "data": "18888888888"}"
  394. // @Router /verify-code [get]
  395. // @Security Bearer
  396. func (e SysUser) VerifyCode(c *gin.Context) {
  397. s := service.SysUser{}
  398. req := dto.SysUserGetSMSVerifyCodeReq{}
  399. err := e.MakeContext(c).
  400. MakeService(&s.Service).
  401. Bind(&req, binding.Query).
  402. Errors
  403. if err != nil {
  404. e.Logger.Error(err)
  405. e.Error(500, err, err.Error())
  406. return
  407. }
  408. key := handler.GetVerifyCodeCacheKey(req.Phone)
  409. _, err = e.Cache.Get(key)
  410. // 验证吗缓存已存在
  411. if err == nil {
  412. e.Error(500, err, "验证吗已发送,请注意查收")
  413. return
  414. }
  415. code := pkg.GenerateRandomFigureKey6()
  416. ss := sms.NewSMS(conf.ExtConfig.SubMail.Appid, conf.ExtConfig.SubMail.Signature)
  417. content := fmt.Sprintf("【气瓶追溯管理系统】您的短信验证码:%s,请在10分钟内输入", code)
  418. res, err := ss.Send(req.Phone, content)
  419. if err != nil || res.Status != sms.SUCCESS {
  420. e.Logger.Error("发送短信验证码出现异常", zap.Any("res", res), zap.Error(err))
  421. e.Error(500, err, "验证吗发送失败,请重试")
  422. return
  423. }
  424. _ = e.Cache.Set(key, code, 600)
  425. e.OK(req.Phone, "发送成功")
  426. }
  427. // GetNewestToken 获取最新token
  428. // @Summary 获取最新token
  429. // @Description 获取最新token,提供给接入服务访问,用于单一认证检查
  430. // @Tags 用户
  431. // @Param serviceId header int true "服务id"
  432. // @Param userId path int true "用户id"
  433. // @Success 200 {string} string "{"code": 200, "data": "...token..."}"
  434. // @Router /newest-token [get]
  435. func (e SysUser) GetNewestToken(c *gin.Context) {
  436. s := service.SysUser{}
  437. req := dto.GetNewestTokenReq{}
  438. err := e.MakeContext(c).
  439. MakeService(&s.Service).
  440. Bind(&req, nil).
  441. Errors
  442. if err != nil {
  443. e.Logger.Error(err)
  444. e.Error(500, err, err.Error())
  445. return
  446. }
  447. key, err := handler.GetNewestToken(c, req.UserId)
  448. if err != nil {
  449. e.Error(500, err, err.Error())
  450. return
  451. }
  452. e.OK(key, "查询成功")
  453. }