user.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. package user
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "hongze/hongze_yb/controller/response"
  5. userLogic "hongze/hongze_yb/logic/user"
  6. "hongze/hongze_yb/models/request/user"
  7. userResp "hongze/hongze_yb/models/response/user"
  8. userService "hongze/hongze_yb/services/user"
  9. "hongze/hongze_yb/utils"
  10. "strconv"
  11. "strings"
  12. )
  13. // Login 登录接口
  14. // @Tags 用户模块
  15. // @Summary 用户登录
  16. // @Description 用户手机号/邮箱登录
  17. // @Security ApiKeyAuth
  18. // @securityDefinitions.basic BasicAuth
  19. // @Param Authorization header string true "微信登录后获取到的token"
  20. // @Accept json
  21. // @Product json
  22. // @Param data body user.LoginReq true "请求参数"
  23. // @Success 200 {object} user.LoginResp
  24. // @Router /user/login [post]
  25. func Login(c *gin.Context) {
  26. var req user.LoginReq
  27. if c.ShouldBind(&req) != nil {
  28. response.Fail("参数异常", c)
  29. return
  30. }
  31. userInfo := userService.GetInfoByClaims(c)
  32. openId := userInfo.OpenID
  33. if openId == "" {
  34. response.Fail("参数异常", c)
  35. return
  36. }
  37. if req.LoginType == 1 {
  38. //手机登录
  39. if req.Mobile == "" {
  40. response.Fail("手机号不能为空,请输入手机号", c)
  41. return
  42. }
  43. req.Mobile = strings.Trim(req.Mobile, " ")
  44. } else if req.LoginType == 2 {
  45. //邮箱登录
  46. if req.Email == "" {
  47. response.Fail("邮箱不能为空,请输入邮箱", c)
  48. return
  49. }
  50. if !utils.ValidateEmailFormatat(req.Email) {
  51. response.Fail("邮箱格式错误,请重新输入", c)
  52. return
  53. }
  54. } else {
  55. response.Fail("无效的登录方式", c)
  56. return
  57. }
  58. token, newUserInfo, err, errMsg := userService.BindWxUser(openId, req.Mobile, req.Email, req.VerifyCode, req.LoginType, req.AreaNum, 1)
  59. if err != nil {
  60. if errMsg == "" {
  61. errMsg = "登录失败"
  62. }
  63. response.Fail(errMsg, c)
  64. return
  65. }
  66. response.OkData("登录成功", userResp.LoginResp{
  67. UserID: int(newUserInfo.UserID),
  68. Token: token,
  69. Email: newUserInfo.Email,
  70. Mobile: newUserInfo.Mobile,
  71. }, c)
  72. }
  73. // GetSmsCode 获取短信验证码接口
  74. // @Tags 用户模块
  75. // @Summary 获取短信验证码
  76. // @Description 获取短信验证码接口
  77. // @Security ApiKeyAuth
  78. // @securityDefinitions.basic BasicAuth
  79. // @Param Authorization header string true "微信登录后获取到的token"
  80. // @Param mobile query string true "手机号"
  81. // @Param area_num query string true "手机国际区号(中国大陆:86)"
  82. // @Accept json
  83. // @Product json
  84. // @Success 200 {string} string 获取验证码成功
  85. // @Failure 400 {string} string 手机号不能为空,请输入手机号
  86. // @Router /user/get_sms_code [get]
  87. func GetSmsCode(c *gin.Context) {
  88. userInfo := userService.GetInfoByClaims(c)
  89. openId := userInfo.OpenID
  90. if openId == "" {
  91. response.Fail("参数异常", c)
  92. return
  93. }
  94. mobile := c.DefaultQuery("mobile", "")
  95. areaNum := c.DefaultQuery("area_num", "")
  96. err, errMsg := userLogic.SendSmsCode(openId, mobile, areaNum)
  97. if err != nil {
  98. if errMsg != "" {
  99. errMsg = "获取验证码失败"
  100. }
  101. response.Fail(errMsg, c)
  102. return
  103. }
  104. response.Ok("获取验证码成功", c)
  105. }
  106. // GetEmailCode 获取邮箱验证码接口
  107. // @Tags 用户模块
  108. // @Summary 获取邮箱验证码
  109. // @Description 获取邮箱验证码
  110. // @Security ApiKeyAuth
  111. // @securityDefinitions.basic BasicAuth
  112. // @Param Authorization header string true "微信登录后获取到的token"
  113. // @Param email query string true "电子邮箱账号"
  114. // @Accept json
  115. // @Product json
  116. // @Success 200 {string} string 获取验证码成功
  117. // @Failure 400 {string} string 请输入邮箱地址
  118. // @Router /user/get_email_code [get]
  119. func GetEmailCode(c *gin.Context) {
  120. userInfo := userService.GetInfoByClaims(c)
  121. openId := userInfo.OpenID
  122. if openId == "" {
  123. response.Fail("参数异常", c)
  124. return
  125. }
  126. email := c.DefaultQuery("email", "")
  127. if email == "" {
  128. response.Fail("请输入邮箱地址", c)
  129. return
  130. }
  131. if !utils.ValidateEmailFormatat(email) {
  132. response.Fail("邮箱格式错误,请重新输入", c)
  133. return
  134. }
  135. err, errMsg := userLogic.SendEmailCode(openId, email)
  136. if err != nil {
  137. if errMsg != "" {
  138. errMsg = "获取验证码失败"
  139. }
  140. response.Fail(errMsg, c)
  141. return
  142. }
  143. response.Ok("获取验证码成功", c)
  144. }
  145. // Info 我的详情
  146. // @Tags 用户模块
  147. // @Summary 我的详情
  148. // @Description 我的详情
  149. // @Security ApiKeyAuth
  150. // @securityDefinitions.basic BasicAuth
  151. // @Param Authorization header string true "微信登录后获取到的token"
  152. // @Accept json
  153. // @Product json
  154. // @Success 200 {object} user.Detail "获取成功"
  155. // @failure 400 {string} string "获取失败"
  156. // @Router /user/info [get]
  157. func Info(c *gin.Context) {
  158. userInfo := userService.GetInfoByClaims(c)
  159. list, err, errMsg := userLogic.GetUserInfo(userInfo)
  160. if err != nil {
  161. if errMsg != "" {
  162. errMsg = "获取失败"
  163. }
  164. response.Fail(errMsg, c)
  165. return
  166. }
  167. response.OkData("获取成功", list, c)
  168. }
  169. // GetLastApplyRecord 获取最近一条申请单信息
  170. // @Tags 用户模块
  171. // @Summary 获取最近一条申请单信息
  172. // @Description 获取最近一条申请单信息
  173. // @Security ApiKeyAuth
  174. // @securityDefinitions.basic BasicAuth
  175. // @Param Authorization header string true "微信登录后获取到的token"
  176. // @Accept json
  177. // @Product json
  178. // @Success 200 {object} user.Record "获取成功"
  179. // @failure 400 {string} string "获取失败"
  180. // @Router /user/get_last_apply_record [get]
  181. func GetLastApplyRecord(c *gin.Context) {
  182. userInfo := userService.GetInfoByClaims(c)
  183. reqSource := c.DefaultQuery("source", "0")
  184. if reqSource == "0" {
  185. response.Fail("获取失败,申请来源有误", c)
  186. return
  187. }
  188. source, _ := strconv.Atoi(reqSource)
  189. record, err := userLogic.GetLastApplyInfo(int(userInfo.UserID), source)
  190. if err != nil {
  191. response.Fail("获取失败", c)
  192. return
  193. }
  194. if record.RealName == "" {
  195. response.Ok("获取成功", c)
  196. } else {
  197. response.OkData("获取成功", record, c)
  198. }
  199. }
  200. // Apply
  201. // @Tags 用户模块
  202. // @Summary 用户申请
  203. // @Description 用户申请
  204. // @Security ApiKeyAuth
  205. // @securityDefinitions.basic BasicAuth
  206. // @Param Authorization header string true "微信登录后获取到的token"
  207. // @Accept json
  208. // @Product json
  209. // @Param data body user.ApplyReq true "请求参数"
  210. // @Success 200 {object} user.LoginResp
  211. // @Router /user/apply [post]
  212. func Apply(c *gin.Context) {
  213. var req user.ApplyReq
  214. if c.ShouldBind(&req) != nil {
  215. response.Fail("参数异常", c)
  216. return
  217. }
  218. userInfo := userService.GetInfoByClaims(c)
  219. openId := userInfo.OpenID
  220. if openId == "" {
  221. response.Fail("参数异常", c)
  222. return
  223. }
  224. _, err := userLogic.Apply(int(userInfo.UserID), userInfo.CompanyID, userInfo.Mobile, userInfo.Email, req)
  225. if err != nil {
  226. response.Fail("申请失败", c)
  227. return
  228. }
  229. response.Ok("申请成功", c)
  230. }
  231. // GetTabBar 获取用户的菜单栏权限
  232. // @Tags 用户模块
  233. // @Summary 获取用户的菜单栏权限
  234. // @Description 获取用户的菜单栏权限
  235. // @Security ApiKeyAuth
  236. // @securityDefinitions.basic BasicAuth
  237. // @Param Authorization header string true "微信登录后获取到的token"
  238. // @Accept json
  239. // @Product json
  240. // @Success 200 {object} []string "获取成功"
  241. // @failure 400 {string} string "获取失败"
  242. // @Router /user/get_tab_bar [get]
  243. func GetTabBar(c *gin.Context) {
  244. userInfo := userService.GetInfoByClaims(c)
  245. tabBarList, err := userLogic.GetUserTabBar(userInfo)
  246. if err != nil {
  247. response.Fail("获取失败", c)
  248. return
  249. }
  250. response.OkData("获取成功", tabBarList, c)
  251. }