Browse Source

fix:修改登录逻辑, 新增手机区号获取

zqbao 10 months ago
parent
commit
23a88e5c22

+ 3 - 42
controllers/base_auth.go

@@ -5,9 +5,7 @@ import (
 	"eta/eta_mini_api/models"
 	"eta/eta_mini_api/utils"
 	"net/http"
-	"strconv"
 	"strings"
-	"time"
 
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/beego/beego/v2/server/web"
@@ -15,8 +13,7 @@ import (
 
 type BaseAuthController struct {
 	web.Controller
-	User    *models.User
-	Session *models.WxSession
+	User *models.User
 }
 
 func (c *BaseAuthController) Prepare() {
@@ -34,7 +31,7 @@ func (c *BaseAuthController) Prepare() {
 			tokenArr := strings.Split(tokenStr, "=")
 			token := tokenArr[1]
 
-			session, err := models.GetWxSessionByToken(token)
+			user, err := models.GetUserByToken(token)
 			if err != nil {
 				if err == orm.ErrNoRows {
 					c.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "Token 信息已变更:Token: " + token})
@@ -45,48 +42,12 @@ func (c *BaseAuthController) Prepare() {
 				c.StopRun()
 				return
 			}
-			if session == nil {
-				c.JSON(models.BaseResponse{Ret: 408, Msg: "网络异常,请稍后重试!", ErrMsg: "sesson is empty "})
-				c.StopRun()
-				return
-			}
-
-			if time.Now().After(session.ExpireTime) {
-				c.JSON(models.BaseResponse{Ret: 408, Msg: "请重新登录!", ErrMsg: "获取用户信息异常"})
-				c.StopRun()
-				return
-			}
-			var user *models.User
-			if session.OpenId != "" {
-				tmpWxUser, tmpErr := models.GetUserByOpenId(session.OpenId)
-				user = tmpWxUser
-				err = tmpErr
-			} else if session.UserId > 0 {
-				tmpWxUser, tmpErr := models.GetUserById(session.UserId)
-				user = tmpWxUser
-				err = tmpErr
-			} else {
-				c.JSON(models.BaseResponse{Ret: 408, Msg: "数据异常!", ErrMsg: "sesson is empty "})
-				c.StopRun()
-				return
-			}
-			if err != nil {
-				if err == orm.ErrNoRows {
-					c.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "获取sysUser信息失败: " + strconv.Itoa(session.UserId)})
-					c.StopRun()
-					return
-				}
-				c.JSON(models.BaseResponse{Ret: 408, Msg: "网络异常,请稍后重试!", ErrMsg: "获取sysUser信息异常,Err:" + err.Error()})
-				c.StopRun()
-				return
-			}
 			if user == nil {
-				c.JSON(models.BaseResponse{Ret: 408, Msg: "网络异常,请稍后重试!", ErrMsg: "sysUser is empty"})
+				c.JSON(models.BaseResponse{Ret: 408, Msg: "网络异常,请稍后重试!", ErrMsg: "sesson is empty "})
 				c.StopRun()
 				return
 			}
 			c.User = user
-			c.Session = session
 		} else {
 			c.JSON(models.BaseResponse{Ret: 408, Msg: "请求异常,请联系客服!", ErrMsg: "POST之外的请求,暂不支持"})
 			c.StopRun()

+ 38 - 2
controllers/report.go

@@ -49,6 +49,8 @@ func (this *ReportController) Detail() {
 // @Description 研报列表
 // @Param   ReportId   query   int  true       "报告id"
 // @Param   chartPermissionId   query   int  true       "品种ID"
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Success 200 {object} models.ReportDetailResp
 // @router /list [get]
 func (this *ReportController) List() {
@@ -58,14 +60,48 @@ func (this *ReportController) List() {
 		this.ServeJSON()
 	}()
 
-	reports, err := services.GetReportList()
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	chartPermissionId, _ := this.GetInt("ChartPermissionId")
+	reports, err := services.GetReportList(chartPermissionId, currentIndex, pageSize)
 	if err != nil {
 		br.Msg = "研报列表查询失败"
 		br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
 		return
 	}
 
-	br.Data = reports
+	br.Data = reports.Data
+	br.Msg = "查询成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// @Title 研报列表
+// @Description 研报列表
+// @Param   ReportId   query   int  true       "报告id"
+// @Param   chartPermissionId   query   int  true       "品种ID"
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Success 200 {object} models.ReportDetailResp
+// @router /daily/list [get]
+func (this *ReportController) DailyList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+
+	reports, err := services.GetReportDailyList(currentIndex, pageSize)
+	if err != nil {
+		br.Msg = "研报列表查询失败"
+		br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
+		return
+	}
+
+	br.Data = reports.Data
 	br.Msg = "查询成功"
 	br.Ret = 200
 	br.Success = true

+ 43 - 51
controllers/user.go

@@ -6,7 +6,6 @@ import (
 	"eta/eta_mini_api/models/request"
 	"eta/eta_mini_api/models/response"
 	"eta/eta_mini_api/services"
-	"eta/eta_mini_api/services/wx_app"
 	"eta/eta_mini_api/utils"
 	"fmt"
 	"strconv"
@@ -26,7 +25,7 @@ type UserAuthController struct {
 // @Param	request	body models.LoginReq true "type json string"
 // @Success 200 {object} models.LoginResp
 // @router /login [post]
-func (this *UserController) Login() {
+func (this *UserAuthController) Login() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		if err := recover(); err != nil {
@@ -35,6 +34,7 @@ func (this *UserController) Login() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	user := this.User
 
 	var req request.LoginReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
@@ -43,17 +43,6 @@ func (this *UserController) Login() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-	if req.Code == "" {
-		br.Msg = "授权码不存在"
-		return
-	}
-
-	userInfo, err := wx_app.GetSession(req.Code)
-	if err != nil {
-		br.Msg = "登录失败,请重新尝试"
-		br.ErrMsg = "用户信息获取失败,系统错误,Err:" + err.Error()
-		return
-	}
 
 	switch req.LoginType {
 	case 1:
@@ -113,7 +102,7 @@ func (this *UserController) Login() {
 			return
 		}
 	}
-	user, errMsg, err := services.BindWxUser(userInfo.UnionID, userInfo.OpenID, req.Phone, req.Email, req.AreaCode)
+	_, errMsg, err := services.BindWxUser(user.UnionId, user.OpenId, req.Phone, req.Email, req.AreaCode)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "登录失败,系统处理中,请稍后重试"
 		if errMsg != `` {
@@ -122,44 +111,7 @@ func (this *UserController) Login() {
 		br.ErrMsg = "登录失败:" + err.Error()
 		return
 	}
-	userId := user.UserId
 
-	var token string
-	tokenItem, err := models.GetTokenByOpenId(userInfo.OpenID)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "登录失败"
-		br.ErrMsg = "登录失败,获取token失败:" + err.Error()
-		return
-	}
-	if tokenItem == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
-		timeUnix := time.Now().Unix()
-		timeUnixStr := strconv.FormatInt(timeUnix, 10)
-		token := utils.MD5(strconv.Itoa(userId)) + utils.MD5(timeUnixStr)
-		//新增session
-		{
-			session := new(models.WxSession)
-			session.OpenId = userInfo.OpenID
-			session.UserId = userId
-			session.CreateTime = time.Now()
-			session.LastUpdateTime = time.Now()
-			session.ExpireTime = time.Now().AddDate(0, 3, 0)
-			session.AccessToken = token
-			err = session.AddWxSession()
-			if err != nil {
-				br.Msg = "登录失败"
-				br.ErrMsg = "登录失败,新增用户session信息失败:" + err.Error()
-				return
-			}
-		}
-	} else {
-		token = tokenItem.AccessToken
-		_ = models.UpdateSession(tokenItem.WxSessionId, userId, time.Now().AddDate(0, 1, 0))
-	}
-	resp := new(response.LoginResp)
-	resp.UserId = userId
-	resp.Authorization = token
-
-	br.Data = resp
 	br.Msg = "登录成功"
 	br.Success = true
 	br.Ret = 200
@@ -190,6 +142,7 @@ func (this *UserController) GetVerifyCode() {
 	}
 
 	code := utils.GetRandDigit(6)
+	fmt.Println(code)
 	switch req.VerifyType {
 	case 1:
 		if req.AreaCode == "" {
@@ -375,3 +328,42 @@ func (this *UserAuthController) AddReportRecord() {
 	br.Success = true
 	br.Data = resp
 }
+
+// AreaCodeList
+// @Title 手机号区号列表
+// @Description 手机号区号列表
+// @Success 200 Ret=200 获取成功
+// @router /area_code/list [get]
+func (this *UserController) AreaCodeList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	resp := make([]response.AreaCodeListResp, 0)
+	confAuth, e := models.GetConfigDetailByCode(models.ConfAreaCodeListKey)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取手机号区号配置失败, Err: " + e.Error()
+		return
+	}
+	if confAuth.ConfigValue == "" {
+		br.Msg = "获取失败"
+		br.ErrMsg = "手机号区号配置为空"
+		return
+	}
+	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &resp); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "手机号区号配置有误"
+		return
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 81 - 0
controllers/wechat.go

@@ -1,9 +1,13 @@
 package controllers
 
 import (
+	"encoding/json"
 	"encoding/xml"
 	"eta/eta_mini_api/models"
+	"eta/eta_mini_api/models/request"
+	"eta/eta_mini_api/models/response"
 	"eta/eta_mini_api/services/wechat"
+	"eta/eta_mini_api/services/wx_app"
 	"eta/eta_mini_api/utils"
 	"fmt"
 	"strconv"
@@ -169,3 +173,80 @@ func subscribe(openId string) {
 		return
 	}
 }
+
+// @Title 微信登录
+// @Description 微信登录
+// @Param	request	body models.LoginReq true "type json string"
+// @Success 200 {object} models.LoginResp
+// @router /login [post]
+func (this *WechatController) Login() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if err := recover(); err != nil {
+			fmt.Println(err)
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	var req request.WeChatLoginReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析失败"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.Code == "" {
+		br.Msg = "授权码不存在"
+		return
+	}
+
+	userInfo, err := wx_app.GetSession(req.Code)
+	if err != nil {
+		br.Msg = "登录失败,请重新尝试"
+		br.ErrMsg = "用户信息获取失败,系统错误,Err:" + err.Error()
+		return
+	}
+	user, err := models.GetUserByOpenId(userInfo.OpenID)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() && user == nil {
+			tmpUser := &models.User{
+				OpenId:  userInfo.OpenID,
+				UnionId: userInfo.UnionID,
+			}
+			tmpUserId, er := tmpUser.Insert()
+			if er != nil {
+				br.Msg = "登录失败"
+				br.ErrMsg = "登录失败,新增用户信息失败:" + er.Error()
+				return
+			}
+			user = tmpUser
+			user.UserId = int(tmpUserId)
+		} else {
+			br.Msg = "获取用户信息失败"
+			br.ErrMsg = "获取用户信息失败,系统错误,Err:" + err.Error()
+			return
+		}
+	}
+	var token string
+	if user.AccessToken == "" {
+		timeUnix := time.Now().Unix()
+		timeUnixStr := strconv.FormatInt(timeUnix, 10)
+		token = utils.MD5(strconv.Itoa(user.UserId)) + utils.MD5(timeUnixStr)
+		user.AccessToken = token
+		_, err = user.Update([]string{"access_token"})
+		if err != nil {
+			br.Msg = "微信登录失败"
+			br.ErrMsg = "微信登录失败,更新用户信息失败:" + err.Error()
+			return
+		}
+	}
+	token = user.AccessToken
+	resp := new(response.WeChatLoginResp)
+	resp.Authorization = token
+
+	br.Data = resp
+	br.Msg = "登录成功"
+	br.Success = true
+	br.Ret = 200
+}

+ 16 - 0
models/crm_config.go

@@ -0,0 +1,16 @@
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+const ConfAreaCodeListKey = "area_code_list" // 手机号区号列表
+
+type CrmConfig struct {
+	ConfigValue string `description:"详情"`
+}
+
+func GetConfigDetailByCode(configCode string) (item CrmConfig, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT config_value FROM crm_config WHERE config_code=? `
+	err = o.Raw(sql, configCode).QueryRow(&item)
+	return
+}

+ 0 - 1
models/request/user.go

@@ -13,7 +13,6 @@ type LoginReq struct {
 	Phone     string `description:"手机号"`
 	Email     string `description:"邮箱"`
 	AreaCode  string `description:"国际区号"`
-	Code      string `description:"用户code"`
 	SmsCode   string `description:"短信/邮箱验证码"`
 }
 

+ 4 - 0
models/request/wechat.go

@@ -3,3 +3,7 @@ package request
 type SendTemplateMsgRep struct {
 	ReportId int
 }
+
+type WeChatLoginReq struct {
+	Code string `description:"用户code"`
+}

+ 10 - 3
models/response/user.go

@@ -4,14 +4,21 @@ type LoginResp struct {
 	UserId        int    `description:"用户id"`
 	Authorization string `description:"Token"`
 	Headimgurl    string `description:"用户头像"`
-	Mobile        string `description:"手机号"`
+	Phone         string `description:"手机号"`
 	Email         string `description:"邮箱"`
 	CompanyName   string `description:"客户名称"`
-	Status        string `description:"状态"`
 	EndDate       string `description:"到期日期"`
-	ProductName   string `description:"客户类型名称"`
+}
+
+type WeChatLoginResp struct {
+	Authorization string `description:"Token"`
 }
 
 type UserReadRecordResp struct {
 	RecordIds []int64
 }
+
+type AreaCodeListResp struct {
+	Name  string `description:"地区"`
+	Value string `description:"区号"`
+}

+ 24 - 0
models/user.go

@@ -25,6 +25,8 @@ type User struct {
 	IsSubscribed   bool      `description:"是否关注公众号: 0表示没有关注,1表示关注"`
 	IsRegistered   bool      `description:"是否注册: 0表示没有注册,1表示注册"`
 	LastUpdateTime time.Time `description:"用户最近一次登录时间"`
+	AccessToken    string    `description:"用户token"`
+	Headimgurl     string    `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
 }
 
 func (u *User) Insert() (insertId int64, err error) {
@@ -33,6 +35,12 @@ func (u *User) Insert() (insertId int64, err error) {
 	return
 }
 
+func (u *User) Update(cols []string) (updateId int64, err error) {
+	o := orm.NewOrm()
+	updateId, err = o.Update(u, cols...)
+	return
+}
+
 type UserItem struct {
 	UserId         int       `description:"用户id"`
 	OpenId         string    `description:"open_id"`
@@ -53,6 +61,13 @@ type UserItem struct {
 	LastUpdateTime time.Time `description:"用户最近一次登录时间"`
 }
 
+func GetUserByToken(token string) (item *User, err error) {
+	sql := `SELECT * FROM user WHERE access_token=? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, token).QueryRow(&item)
+	return
+}
+
 // 根据openid获取用户关系
 func GetUserByOpenId(openId string) (item *User, err error) {
 	sql := `SELECT * FROM user WHERE open_id=? `
@@ -61,6 +76,14 @@ func GetUserByOpenId(openId string) (item *User, err error) {
 	return
 }
 
+// 根据openid获取用户关系
+func GetUserItemByOpenId(openId string) (item *UserItem, err error) {
+	sql := `SELECT * FROM user WHERE open_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, openId).QueryRow(&item)
+	return
+}
+
 // 变更联系人是否已注册状态
 func ModifyUserRegisterStatus(userId int, status bool, registerTime, modifyTime time.Time) (err error) {
 	o := orm.NewOrm()
@@ -98,6 +121,7 @@ func GetUserItemByEmail(email string) (item *UserItem, err error) {
 	err = orm.NewOrm().Raw(sql, email).QueryRow(&item)
 	return
 }
+
 func GetUserItemByUserId(userId int) (item *UserItem, err error) {
 	sql := `SELECT * FROM user WHERE user_id=? `
 	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)

+ 2 - 19
models/wx_session.go

@@ -11,7 +11,6 @@ type WxSession struct {
 	UserId         int
 	OpenId         string
 	AccessToken    string
-	ExpireTime     time.Time
 	CreateTime     time.Time
 	LastUpdateTime time.Time
 }
@@ -23,32 +22,16 @@ func (s *WxSession) AddWxSession() (err error) {
 }
 
 func GetWxSessionByToken(token string) (item *WxSession, err error) {
-	sql := `SELECT * FROM wx_session WHERE access_token=? AND expire_time> NOW() ORDER BY expire_time DESC LIMIT 1 `
+	sql := `SELECT * FROM wx_session WHERE access_token=? ORDER BY expire_time DESC LIMIT 1 `
 	o := orm.NewOrm()
 	err = o.Raw(sql, token).QueryRow(&item)
 	return
 }
 
-// ExpiredWxSessionByUserId 过期掉用户token
-func ExpiredWxSessionByUserId(UserId int) (err error) {
-	sql := `UPDATE wx_session SET expire_time = NOW()  WHERE user_id=? AND expire_time > NOW()`
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, UserId).Exec()
-	return
-}
-
 // 根据用户id获取token
 func GetTokenByOpenId(openId string) (item *WxSession, err error) {
-	sql := `SELECT * FROM wx_session WHERE open_id=? AND expire_time> NOW() ORDER BY wx_session_id DESC LIMIT 1 `
+	sql := `SELECT * FROM wx_session WHERE open_id=? ORDER BY wx_session_id DESC LIMIT 1 `
 	o := orm.NewOrm()
 	err = o.Raw(sql, openId).QueryRow(&item)
 	return
 }
-
-// 更新session
-func UpdateSession(sessionId, userId int, expireTime time.Time) (err error) {
-	sql := `update wx_session set user_id=?,expire_time=? where wx_session_id = ? `
-	o := orm.NewOrm()
-	_, err = o.Raw(sql, userId, expireTime, sessionId).Exec()
-	return
-}

+ 28 - 1
routers/commentsRouter.go

@@ -16,6 +16,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "DailyList",
+            Router: `/daily/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:ReportController"],
         beego.ControllerComments{
             Method: "Detail",
@@ -43,6 +52,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"],
+        beego.ControllerComments{
+            Method: "Login",
+            Router: `/login`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserController"],
+        beego.ControllerComments{
+            Method: "AreaCodeList",
+            Router: `/area_code/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserController"],
         beego.ControllerComments{
             Method: "GetVerifyCode",
@@ -52,7 +79,7 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserController"],
+    beego.GlobalControllerRouter["eta/eta_mini_api/controllers:WechatController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:WechatController"],
         beego.ControllerComments{
             Method: "Login",
             Router: `/login`,

+ 49 - 2
services/report.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"eta/eta_mini_api/models"
 	"eta/eta_mini_api/utils"
+	"fmt"
 	"io"
 	"net/http"
 	"strconv"
@@ -24,8 +25,10 @@ type ReportResp[T any] struct {
 	ErrMsg string
 }
 
-func GetReportList() (resp *ReportResp[ReportList], err error) {
-	url := utils.ETA_MINI_BRIDGE_URL + "/report/list"
+func GetReportList(chartPermissionId, currentIndex, pageSize int) (resp *ReportResp[ReportList], err error) {
+	url := utils.ETA_MINI_BRIDGE_URL + "/report/list?"
+	url += fmt.Sprintf("?ChartPermissionId=%d&PageSize=%d&CurrentIndex=%d", chartPermissionId, pageSize, currentIndex)
+	fmt.Println(url)
 	client := &http.Client{}
 	// 提交请求
 	req, err := http.NewRequest("GET", url, nil)
@@ -102,3 +105,47 @@ func GetReportDetail(reportId int) (resp *ReportResp[models.ReportDetail], err e
 	}
 	return resp, nil
 }
+
+func GetReportDailyList(currentIndex, pageSize int) (resp *ReportResp[ReportList], err error) {
+	url := utils.ETA_MINI_BRIDGE_URL + "/report/daily/list"
+	if currentIndex >= 0 && pageSize > 0 {
+		url += "?PageSize=" + strconv.Itoa(pageSize)
+		url += "&CurrentIndex=" + strconv.Itoa(currentIndex)
+	}
+	fmt.Println(url)
+	client := &http.Client{}
+	// 提交请求
+	req, err := http.NewRequest("GET", url, nil)
+	if err != nil {
+		return &ReportResp[ReportList]{}, err
+	}
+	nonce := utils.GetRandStringNoSpecialChar(16)
+	timestamp := time.Now().Format(utils.FormatDateTimeUnSpace)
+	signature := utils.GetSign(nonce, timestamp, utils.ETA_MINI_APPID, utils.ETA_MINI_APP_SECRET)
+	//增加header选项
+	req.Header.Add("Nonce", nonce)
+	req.Header.Add("Timestamp", timestamp)
+	req.Header.Add("Appid", utils.ETA_MINI_APPID)
+	req.Header.Add("Signature", signature)
+	req.Header.Set("Content-Type", "application/json")
+
+	response, err := client.Do(req)
+	if err != nil {
+		return &ReportResp[ReportList]{}, err
+	}
+	defer response.Body.Close()
+
+	body, err := io.ReadAll(response.Body)
+
+	if err != nil {
+		return &ReportResp[ReportList]{}, err
+	}
+
+	utils.FileLog.Info("result:" + string(body))
+	err = json.Unmarshal(body, &resp)
+	if err != nil {
+		return resp, err
+	}
+	return resp, nil
+
+}

+ 88 - 44
services/user.go

@@ -27,65 +27,109 @@ func GetWxUserItemByOpenId(openid string) (userInfo UserInfo, err error) {
 }
 
 // BindWxUser 用户绑定
-func BindWxUser(unionId, openId, phone, email, areaCode string) (wxUser *models.UserItem, errMsg string, err error) {
+func BindWxUser(unionId, openId, phone, email, areaCode string) (userItem *models.UserItem, errMsg string, err error) {
 	if phone == "" && email == "" {
 		err = errors.New("手机号或邮箱必填一个")
 		return
 	}
-	//根据手机号获取用户信息
-	if phone != "" {
-		tmpWxUser, wxUserErr := models.GetUserItemByPhone(phone)
-		if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() {
-			err = wxUserErr
-			return
-		}
-		wxUser = tmpWxUser
+	// 根据openid获取用户信息
+	if openId == "" {
+		err = errors.New("openid不能为空")
+		return
 	}
-	//根据邮箱获取用户信息
-	if wxUser == nil && email != "" {
-		tmpWxUser, wxUserErr := models.GetUserItemByEmail(email)
-		if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() {
-			err = wxUserErr
+	userItem, err = models.GetUserItemByOpenId(openId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	var userId int64
+	curTime := time.Now()
+	if userItem != nil {
+		if userItem.Phone != "" && userItem.Phone != phone {
+			errMsg = "该手机号已绑定其他微信号"
 			return
 		}
-		wxUser = tmpWxUser
-	}
-
-	var userId int
-	//如果查询出来的用户是nil,那么需要新增用户
-	if wxUser == nil {
-		// key := "bind_wx_user:mobile:" + phone + ":email:" + email
-		key := utils.CACHE_ACCESS_WX_BIND + phone + ":" + email
-		isHas := go_redis.IsExist(key)
-		if isHas {
-			err = errors.New("多次提交,请关闭页面重新进入")
+		if userItem.Email != "" && userItem.Email != email {
+			errMsg = "该邮箱已绑定其他微信号"
 			return
 		}
-		go_redis.SetNX(key, "ok", time.Second*300)
-		user := &models.User{
-			Phone:    phone,
-			AreaCode: areaCode,
-			Email:    email,
-			OpenId:   openId,
-			UnionId:  unionId,
+		if userItem.Phone == "" && phone != "" {
+			user := &models.User{
+				UserId:       userItem.UserId,
+				Phone:        phone,
+				AreaCode:     areaCode,
+				RegisterTime: curTime,
+				ModifyTime:   curTime,
+			}
+			tmpUserId, updateUserErr := user.Update([]string{"phone", "area_code", "register_time", "modify_time"})
+			userId = tmpUserId
+			err = updateUserErr
 		}
-		tmpUserId, addUserErr := user.Insert()
-		//添加完成,清除缓存
-		_ = go_redis.Delete(key)
-		if addUserErr != nil {
-			err = addUserErr
-			return
+		if userItem.Email == "" && email != "" {
+			user := &models.User{
+				UserId:       userItem.UserId,
+				Email:        email,
+				RegisterTime: curTime,
+				ModifyTime:   curTime,
+			}
+			tmpUserId, updateUserErr := user.Update([]string{"email", "modify_time", "register_time"})
+			userId = tmpUserId
+			err = updateUserErr
 		}
-		user.UserId = int(tmpUserId)
-		userId = int(tmpUserId)
-		wxUser, err = models.GetUserItemByUserId(userId)
 	} else {
-		userId = wxUser.UserId
+		//根据手机号获取用户信息
+		if phone != "" {
+			tmpWxUser, wxUserErr := models.GetUserItemByPhone(phone)
+			if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() {
+				err = wxUserErr
+				return
+			}
+			userItem = tmpWxUser
+		}
+		//根据邮箱获取用户信息
+		if userItem == nil && email != "" {
+			tmpWxUser, wxUserErr := models.GetUserItemByEmail(email)
+			if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() {
+				err = wxUserErr
+				return
+			}
+			userItem = tmpWxUser
+		}
+
+		var userId int
+		//如果查询出来的用户是nil,那么需要新增用户
+		if userItem == nil {
+			key := utils.CACHE_ACCESS_WX_BIND + phone + ":" + email
+			isHas := go_redis.IsExist(key)
+			if isHas {
+				err = errors.New("多次提交,请关闭页面重新进入")
+				return
+			}
+			go_redis.SetNX(key, "ok", time.Second*300)
+			user := &models.User{
+				Phone:    phone,
+				AreaCode: areaCode,
+				Email:    email,
+				OpenId:   openId,
+				UnionId:  unionId,
+			}
+			tmpUserId, addUserErr := user.Insert()
+			//添加完成,清除缓存
+			_ = go_redis.Delete(key)
+			if addUserErr != nil {
+				err = addUserErr
+				return
+			}
+			user.UserId = int(tmpUserId)
+			userId = int(tmpUserId)
+			userItem, err = models.GetUserItemByUserId(userId)
+		} else {
+			userId = userItem.UserId
+		}
 	}
 
 	//如果该用户 绑定注册状态 字段处于 未注册 的情况下,那么去修改该数据
-	if !wxUser.IsRegistered {
-		err = models.ModifyUserRegisterStatus(userId, true, time.Now(), time.Now())
+	if !userItem.IsRegistered {
+		err = models.ModifyUserRegisterStatus(int(userId), true, curTime, curTime)
 		if err != nil {
 			return
 		}