user.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "hongze/hongze_cygx/models"
  5. "hongze/hongze_cygx/utils"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. //用户
  11. type UserController struct {
  12. BaseAuthController
  13. }
  14. // @Title 登录
  15. // @Description 登录接口
  16. // @Param request body models.LoginReq true "type json string"
  17. // @Success 200 {object} models.LoginResp
  18. // @router /login [post]
  19. func (this *UserController) Login() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. this.Data["json"] = br
  23. this.ServeJSON()
  24. }()
  25. var req models.LoginReq
  26. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  27. if err != nil {
  28. br.Msg = "参数解析异常!"
  29. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  30. return
  31. }
  32. user := this.User
  33. if user == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录"
  36. br.Ret = 408
  37. return
  38. }
  39. unionId := this.User.UnionId
  40. userId := this.User.UserId
  41. if unionId == "" {
  42. br.Msg = "参数错误"
  43. br.ErrMsg = "参数错误,unionId 为空"
  44. return
  45. }
  46. newUserId := 0
  47. if req.LoginType == 1 {
  48. //BindMobile(openId, mobile string, userId, loginType int) (err error) {
  49. req.Mobile = strings.Trim(req.Mobile, " ")
  50. newUserId, err = models.PcBindMobile(unionId, req.Mobile, userId, req.LoginType)
  51. } else if req.LoginType == 2 {
  52. if req.Email == "" {
  53. br.ErrMsg = "邮箱不能为空,请输入邮箱"
  54. br.Msg = "邮箱不能为空,请输入邮箱"
  55. return
  56. }
  57. if !utils.ValidateEmailFormatat(req.Email) {
  58. br.ErrMsg = "邮箱格式错误,请重新输入"
  59. br.Msg = "邮箱格式错误,请重新输入"
  60. return
  61. }
  62. newUserId, err = models.PcBindMobile(unionId, req.Email, userId, req.LoginType)
  63. } else {
  64. br.Msg = "无效的登录方式"
  65. br.ErrMsg = "无效的登录方式,Err:" + err.Error()
  66. return
  67. }
  68. var token string
  69. tokenItem, err := models.GetTokenByUid(newUserId)
  70. if err != nil && err.Error() != utils.ErrNoRow() {
  71. br.Msg = "登录失败"
  72. br.ErrMsg = "登录失败,获取token失败:" + err.Error()
  73. return
  74. }
  75. if tokenItem == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  76. timeUnix := time.Now().Unix()
  77. timeUnixStr := strconv.FormatInt(timeUnix, 10)
  78. token := utils.MD5(strconv.Itoa(userId)) + utils.MD5(timeUnixStr)
  79. //新增session
  80. {
  81. session := new(models.CygxSession)
  82. session.OpenId = unionId
  83. session.UnionId = unionId
  84. session.UserId = userId
  85. session.CreatedTime = time.Now()
  86. session.LastUpdatedTime = time.Now()
  87. session.ExpireTime = time.Now().AddDate(0, 1, 0)
  88. session.AccessToken = token
  89. err = models.AddSession(session)
  90. if err != nil {
  91. br.Msg = "登录失败"
  92. br.ErrMsg = "登录失败,新增用户session信息失败:" + err.Error()
  93. return
  94. }
  95. }
  96. } else {
  97. token = tokenItem.AccessToken
  98. }
  99. //新增登录日志
  100. {
  101. loginLog := new(models.WxUserLog)
  102. loginLog.UserId = userId
  103. loginLog.OpenId = unionId
  104. loginLog.Mobile = req.Mobile
  105. loginLog.Email = req.Email
  106. loginLog.CreateTime = time.Now()
  107. loginLog.Handle = "wechat_user_login"
  108. loginLog.Remark = token
  109. go models.AddWxUserLog(loginLog)
  110. }
  111. resp := new(models.LoginResp)
  112. resp.UserId = newUserId
  113. resp.Authorization = token
  114. br.Ret = 200
  115. br.Success = true
  116. br.Data = resp
  117. br.Msg = "登录成功"
  118. }
  119. // @Title 获取用户详情
  120. // @Description 获取用户详情接口
  121. // @Success 200 {object} models.UserDetail
  122. // @router /detail [get]
  123. func (this *UserController) Detail() {
  124. br := new(models.BaseResponse).Init()
  125. defer func() {
  126. this.Data["json"] = br
  127. this.ServeJSON()
  128. }()
  129. user := this.User
  130. if user == nil {
  131. br.Msg = "请登录"
  132. br.ErrMsg = "请登录,用户信息为空"
  133. br.Ret = 408
  134. return
  135. }
  136. item, err := models.GetUserDetailByUserId(user.UserId)
  137. if err != nil {
  138. br.Msg = "获取信息失败"
  139. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  140. return
  141. }
  142. companyItem, err := models.GetCompanyDetailById(user.UserId)
  143. if err != nil {
  144. br.Msg = "获取信息失败"
  145. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  146. return
  147. }
  148. item.CompanyName = companyItem.CompanyName
  149. var hasPermission bool
  150. if companyItem.Status == "试用" || companyItem.Status == "永续" || companyItem.Status == "正式" {
  151. hasPermission = true
  152. permissionStr, err := models.GetCompanyPermission(companyItem.CompanyId)
  153. if err != nil {
  154. br.Msg = "获取信息失败"
  155. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  156. return
  157. }
  158. item.PermissionName = permissionStr
  159. }
  160. item.HasPermission = hasPermission
  161. br.Ret = 200
  162. br.Success = true
  163. br.Msg = "获取成功"
  164. br.Data = item
  165. }
  166. // @Title 校验用户状态信息
  167. // @Description 校验用户状态信息
  168. // @Success 200 {object} models.CheckStatusResp
  169. // @router /check/status [get]
  170. func (this *UserController) CheckLogin() {
  171. br := new(models.BaseResponse).Init()
  172. defer func() {
  173. this.Data["json"] = br
  174. this.ServeJSON()
  175. }()
  176. if this.User == nil {
  177. br.Msg = "请登录"
  178. br.ErrMsg = "请登录"
  179. br.Ret = 408
  180. return
  181. }
  182. uid := this.User.UserId
  183. //判断token是否过期
  184. userItem, err := models.GetWxUserItemByUserId(uid)
  185. if err != nil {
  186. br.Msg = "获取用户信息失败"
  187. br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
  188. return
  189. }
  190. resp := new(models.CheckStatusResp)
  191. permissionStr, err := models.GetCompanyPermission(userItem.CompanyId)
  192. if err != nil {
  193. br.Msg = "获取信息失败"
  194. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  195. return
  196. }
  197. resp.PermissionName = permissionStr
  198. if userItem.Mobile == "" && userItem.Email == "" {
  199. resp.IsBind = true
  200. }
  201. if userItem.UnionId == "" {
  202. resp.IsAuth = true
  203. }
  204. br.Success = true
  205. br.Msg = "获取成功"
  206. br.Data = resp
  207. }
  208. //
  209. //// @Title 绑定手机号或邮箱
  210. //// @Description 绑定手机号或邮箱
  211. //// @Param request body models.WxGetPhoneNumberReq true "type json string"
  212. //// @Success 200 {object} models.WxGetPhoneNumberResp
  213. //// @router /bind [post]
  214. //func (this *WechatController) Bind() {
  215. // br := new(models.BaseResponse).Init()
  216. // defer func() {
  217. // this.Data["json"] = br
  218. // this.ServeJSON()
  219. // }()
  220. // var req models.WxGetPhoneNumberReq
  221. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  222. // if err != nil {
  223. // br.Msg = "参数解析异常!"
  224. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  225. // return
  226. // }
  227. // if req.EncryptedData == "" || req.Iv == "" {
  228. // br.Msg = "参数错误"
  229. // return
  230. // }
  231. // user := this.User
  232. // if user == nil {
  233. // br.Msg = "请登陆"
  234. // br.Ret = 408
  235. // return
  236. // }
  237. // sessionKey := user.SessionKey
  238. // wxMobile, err := weapp.DecryptMobile(sessionKey, req.EncryptedData, req.Iv)
  239. // if err != nil {
  240. // br.Msg = "解析用户手机号信息失败"
  241. // br.ErrMsg = "解析用户手机号信息失败,Err:" + err.Error()
  242. // return
  243. // }
  244. // err = models.ModifyUsersMobile(user.UserId, wxMobile.PurePhoneNumber)
  245. // if err != nil {
  246. // br.Msg = "获取失败"
  247. // br.ErrMsg = "获取失败,Err:" + err.Error()
  248. // return
  249. // }
  250. // resp := new(models.WxGetPhoneNumberResp)
  251. // resp.Authorization = this.Token
  252. // resp.PhoneNumber = wxMobile.PhoneNumber
  253. // resp.PurePhoneNumber = wxMobile.PurePhoneNumber
  254. // resp.CountryCode = wxMobile.CountryCode
  255. // br.Msg = "获取成功!"
  256. // br.Ret = 200
  257. // br.Success = true
  258. // br.Data = resp
  259. //}