login.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package user
  2. import (
  3. "encoding/hex"
  4. "fmt"
  5. "mtp2_if/db"
  6. "mtp2_if/global/app"
  7. "mtp2_if/global/e"
  8. "mtp2_if/global/utils"
  9. "mtp2_if/logger"
  10. "mtp2_if/models"
  11. "net/http"
  12. "github.com/gin-gonic/gin"
  13. )
  14. // GetLoginIDReq 获取登录ID请求参数
  15. type GetLoginIDReq struct {
  16. UserName string `form:"username" binding:"required"`
  17. }
  18. // GetLoginID 获取登录ID
  19. // @Summary 获取登录ID
  20. // @Description UserName 可传入“登录账号”、“登录代码”和“手机号码”
  21. // @Produce json
  22. // @Param username query string true "登录代码"
  23. // @Success 200 {object} app.Response
  24. // @Failure 500 {object} app.Response
  25. // @Router /User/GetLoginID [get]
  26. // @Tags 用户信息
  27. func GetLoginID(c *gin.Context) {
  28. appG := app.Gin{C: c}
  29. // 获取请求参数
  30. var req GetLoginIDReq
  31. if err := appG.C.ShouldBindQuery(&req); err != nil {
  32. logger.GetLogger().Errorf("QueryPreasleApply failed: %s", err.Error())
  33. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  34. return
  35. }
  36. engine := db.GetEngine()
  37. loginid := req.UserName // 如果找不到,则直接把登录代码返回去
  38. // 通过登录代码查询登录账号
  39. var loginaccount models.Loginaccount
  40. has, _ := engine.Where("Logincode = ?", req.UserName).Get(&loginaccount)
  41. if has {
  42. loginid = fmt.Sprintf("%v", loginaccount.Loginid)
  43. } else {
  44. // 通过手机号码查询登录账号
  45. // 手机号码需要AES加密
  46. key, _ := hex.DecodeString(utils.AESSecretKey)
  47. if mobileEncrypted, err := utils.AESEncrypt([]byte(req.UserName), key); err == nil {
  48. // 加密成功后进行查询
  49. has, _ := engine.Join("INNER", "USERINFO", "USERINFO.USERID = LOGINACCOUNT.USERID").
  50. Where("USERINFO.MOBILE = ?", hex.EncodeToString(mobileEncrypted)).Get(&loginaccount)
  51. if has {
  52. loginid = fmt.Sprintf("%v", loginaccount.Loginid)
  53. }
  54. }
  55. }
  56. // 查询成功
  57. logger.GetLogger().Infof("GetLoginID successed: %v", loginaccount)
  58. appG.Response(http.StatusOK, e.SUCCESS, loginid)
  59. }