Explorar o código

Merge branch 'bzq/dev' of eta_mini/eta_mini_api into master

鲍自强 hai 11 meses
pai
achega
3d341347f5

+ 10 - 0
controllers/base_auth.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_mini_api/models"
 	"eta/eta_mini_api/utils"
 	"net/http"
+	"time"
 
 	"github.com/beego/beego/v2/server/web"
 )
@@ -51,6 +52,15 @@ func (c *BaseAuthController) Prepare() {
 			}
 			c.User = user
 			c.Session = session
+			// 判断正式用户,是否在有效期内
+			if c.User != nil && c.User.Status == utils.UserStatusFormal {
+				if c.User.ValidStartTime.Before(time.Now()) && c.User.ValidEndTime.After(time.Now()) {
+					c.User.Status = utils.UserStatusFormal
+				} else {
+					c.User.Status = utils.UserStatusNo
+				}
+
+			}
 		} else {
 			c.JSON(models.BaseResponse{Ret: 408, Msg: "请求异常,请联系客服!", ErrMsg: "POST之外的请求,暂不支持"}, false, false)
 			c.StopRun()

+ 22 - 1
controllers/report.go

@@ -28,7 +28,25 @@ func (this *ReportController) Detail() {
 		return
 	}
 	user := this.User
-
+	if user == nil {
+		// 如果没有用户没有绑定信息,单独处理
+		resp, er := services.GetReportDetailNoUser(reportId)
+		if er != nil {
+			br.Msg = "查询报告详情失败"
+			br.ErrMsg = "查询报告失败,系统异常,Err:" + er.Error()
+			return
+		}
+		if resp.Ret != 200 {
+			br.Msg = resp.Msg
+			br.ErrMsg = resp.ErrMsg
+			return
+		}
+		br.Msg = "查询成功"
+		br.Data = resp.Data
+		br.Success = true
+		br.Ret = 200
+		return
+	}
 	result, err := services.GetReportDetail(reportId, user.UserId)
 	if err != nil {
 		br.Msg = "查询报告详情失败"
@@ -59,6 +77,9 @@ func (this *ReportController) Detail() {
 	} else {
 		result.Data.IsCollect = false
 	}
+	if user.UserId != 0 {
+		result.Data.IsSignIn = true
+	}
 
 	br.Msg = "查询成功"
 	br.Success = true

+ 1 - 2
controllers/user.go

@@ -164,10 +164,9 @@ func (this *UserController) GetVerifyCode() {
 		var ok bool
 		if req.AreaCode == "86" {
 			ok = services.SendSmsCode(req.Phone, code)
-		} else {
-			ok = services.SendSmsCodeGj(req.Phone, code, req.AreaCode)
 		}
 		if !ok {
+			br.Msg = "请检查手机号和区号"
 			br.ErrMsg = "短信验证码发送失败"
 			return
 		} else {

+ 1 - 1
main.go

@@ -16,7 +16,7 @@ func main() {
 		web.BConfig.WebConfig.DirectoryIndex = true
 		web.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
 	}
-
+	web.BConfig.WebConfig.AutoRender = false
 	web.ErrorController(&controllers.ErrorController{})
 	// 内存调整
 	web.BConfig.MaxMemory = 1024 * 1024 * 128

+ 1 - 0
models/response/report.go

@@ -22,6 +22,7 @@ type ReportDetailResp struct {
 	Report    *models.ReportDetail `description:"报告"`
 	Status    int                  `description:"报告状态"`
 	IsCollect bool                 `description:"报告是否收藏"`
+	IsSignIn  bool                 `description:"是否报名"`
 }
 
 type ReportCollectListItem struct {

+ 9 - 3
models/wx_token.go

@@ -5,9 +5,15 @@ import (
 )
 
 type WxToken struct {
-	AccessToken string `description:"微信token"` //  微信token
-	ExpiresIn   int64  `description:"过期时间"`    // 过期时间
-	Id          int    `description:"id"`      // id
+	Id          int    `orm:"pk" description:"id"` // id
+	AccessToken string `description:"微信token"`     //  微信token
+	ExpiresIn   int64  `description:"过期时间"`        // 过期时间
+}
+
+func (w *WxToken) Insert() (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(w)
+	return
 }
 
 // Update 更新对应字段数据

+ 15 - 0
services/report.go

@@ -38,6 +38,21 @@ func GetReportDetail(reportId, userId int) (resp *resp2.ReportResp[resp2.ReportD
 	return
 }
 
+func GetReportDetailNoUser(reportId int) (resp *resp2.ReportResp[resp2.ReportDetailResp], err error) {
+	url := utils.ETA_MINI_BRIDGE_URL + "/report/detail/noUser?"
+	url += fmt.Sprintf("ReportId=%d", reportId)
+	fmt.Println(url)
+	body, err := HttpGet(url)
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(body, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
 func GetReportDailyList(currentIndex, pageSize int) (resp *resp2.ReportResp[resp2.ReportList], err error) {
 	url := utils.ETA_MINI_BRIDGE_URL + "/report/daily/list?"
 	url += fmt.Sprintf("PageSize=%d&CurrentIndex=%d", pageSize, currentIndex)

+ 1 - 53
services/sms.go

@@ -11,7 +11,7 @@ import (
 
 func SendSmsCode(mobile, vcode string) bool {
 	flag := false
-	tplId := "262642"
+	tplId := utils.SMS_TPLID
 	expiresTime := "15"
 	result, err := sendSms(mobile, tplId, vcode, expiresTime)
 	if err != nil {
@@ -61,55 +61,3 @@ func sendSms(mobile, tplId, code, expirdTime string) (rs []byte, err error) {
 	defer resp.Body.Close()
 	return ioutil.ReadAll(resp.Body)
 }
-
-func SendSmsCodeGj(mobile, vcode, areaNum string) bool {
-	flag := false
-	result, err := sendSmsGj(mobile, vcode, areaNum)
-	if err != nil {
-		fmt.Println("发送短信失败")
-		return false
-	}
-	fmt.Println("result", string(result))
-	var netReturn map[string]interface{}
-	err = json.Unmarshal(result, &netReturn)
-	if err != nil {
-		utils.ApiLog.Info("短信验证码发送失败", "err:"+err.Error()+" result"+string(result))
-		flag = false
-	}
-	if netReturn["error_code"].(float64) == 0 {
-		fmt.Printf("接口返回result字段是:\r\n%v", netReturn["result"])
-		flag = true
-	} else {
-		utils.ApiLog.Info("短信验证码发送失败", "err:"+err.Error()+" result"+string(result))
-		flag = false
-	}
-	return flag
-}
-
-func sendSmsGj(mobile, code, areaNum string) (rs []byte, err error) {
-	var Url *url.URL
-	apiURL := "http://v.juhe.cn/smsInternational/send.php"
-	//初始化参数
-	param := url.Values{}
-	//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
-	param.Set("mobile", mobile)                    //接受短信的用户手机号码
-	param.Set("tplId", "262642")                   //您申请的短信模板ID,根据实际情况修改
-	param.Set("tplValue", "#code#="+code+"#m#=15") //您设置的模板变量,根据实际情况
-	param.Set("key", utils.JhGjAppKey)             //应用APPKEY(应用详细页查询)
-	param.Set("areaNum", areaNum)                  //应用APPKEY(应用详细页查询)
-
-	Url, err = url.Parse(apiURL)
-	if err != nil {
-		fmt.Printf("解析url错误:\r\n%v", err)
-		return nil, err
-	}
-	//如果参数中有中文参数,这个方法会进行URLEncode
-	Url.RawQuery = param.Encode()
-	resp, err := http.Get(Url.String())
-	if err != nil {
-		fmt.Println("err:", err)
-		return nil, err
-	}
-	defer resp.Body.Close()
-	return ioutil.ReadAll(resp.Body)
-}

+ 49 - 44
services/wechat/wechat.go

@@ -1,9 +1,7 @@
 package wechat
 
 import (
-	"context"
 	"encoding/json"
-	"errors"
 	"eta/eta_mini_api/models"
 	"eta/eta_mini_api/services/alarm_msg"
 	"eta/eta_mini_api/utils"
@@ -12,7 +10,6 @@ import (
 	"net/http"
 	"time"
 
-	"github.com/go-redis/redis/v8"
 	"github.com/silenceper/wechat/v2"
 	"github.com/silenceper/wechat/v2/cache"
 	"github.com/silenceper/wechat/v2/credential"
@@ -32,13 +29,10 @@ type WechatAccessToken struct {
 
 func GetWxChat() (officialAccount *officialaccount.OfficialAccount) {
 	wc := wechat.NewWechat()
-	// minConf, _ := models.GetMiniConf()
 	memory := cache.NewMemory()
 	conf := &config.Config{
-		AppID:     utils.DW_WX_APPID,
-		AppSecret: utils.DW_WX_APP_SECRET,
-		// AppID:          minConf["WxAppId"],
-		// AppSecret:      minConf["WxAppSecret"],
+		AppID:          utils.DW_WX_APPID,
+		AppSecret:      utils.DW_WX_APP_SECRET,
 		Token:          "",
 		EncodingAESKey: "",
 		Cache:          memory,
@@ -53,48 +47,59 @@ var DefaultKey = "zcmRedis"
 
 // GetAccessToken 获取accessToken
 func (wechat WechatAccessToken) GetAccessToken() (accessToken string, err error) {
-	accessToken, err = utils.Redis.Get(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW).Result()
-	// wxToken, err := models.GetWxTokenById()
-	if err != nil && err != redis.Nil {
+	wxToken, err := models.GetWxTokenById()
+	if err != nil && err.Error() != utils.ErrNoRow() {
 		return
 	}
-
-	minConf, _ := models.GetMiniConf()
-	// 缓存中没有取到数据,那么就需要强制刷新的accessToken
-	tmpAccessToken, expires, tmpErr := getTokenFromServer(minConf["WxAppId"], minConf["WxAppSecret"])
-	if tmpAccessToken == "" {
-		err = errors.New("获取微信token失败,Err:" + tmpErr.Error())
-		return
-	}
-	redisTimeExpire := time.Duration(expires-600) * time.Second
-	err = utils.Redis.SetEX(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW, tmpAccessToken, redisTimeExpire).Err()
-	if err != nil {
-		return
-	}
-	err = utils.Redis.HSet(context.TODO(), DefaultKey, utils.CACHE_WX_ACCESS_TOKEN_DW, true).Err()
-	// err = utils.Redis.Put(utils.CACHE_WX_ACCESS_TOKEN_HZ, tmpAccessToken, redisTimeExpire)
-	if err != nil {
-		err = errors.New("更新微信token失败")
-		return
+	//如果300s就要过期了,那么就去刷新accessToken
+	if wxToken.ExpiresIn < time.Now().Unix()+300 {
+		tmpAccessToken, expires, tmpErr := getTokenFromServer(utils.DW_WX_APPID, utils.DW_WX_APP_SECRET)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		var updateCols = []string{"access_token", "expires_in"}
+		wxToken.AccessToken = tmpAccessToken
+		wxToken.ExpiresIn = time.Now().Unix() + expires - 600 //快过期前10分钟就刷新掉
+		wxToken.Update(updateCols)
 	}
+	accessToken = wxToken.AccessToken
 	return
-	// //如果300s就要过期了,那么就去刷新accessToken
-	// if wxToken.ExpiresIn < time.Now().Unix()+300 {
-	// 	tmpAccessToken, expires, tmpErr := getTokenFromServer(utils.HZ_WX_APPID, utils.HZ_WX_APP_SECRET)
-	// 	if tmpErr != nil {
-	// 		err = tmpErr
-	// 		return
-	// 	}
-
-	// 	var updateCols = []string{"access_token", "expires_in"}
-	// 	wxToken.AccessToken = tmpAccessToken
-	// 	wxToken.ExpiresIn = expires - 600 //快过期前10分钟就刷新掉
-	// 	wxToken.Update(updateCols)
-	// }
-	// accessToken = wxToken.AccessToken
-	// return
 }
 
+// accessToken, err = utils.Redis.Get(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW).Result()
+// // wxToken, err := models.GetWxTokenById()
+// if err != nil && err != redis.Nil {
+// 	return
+// }
+
+// models.GetWxTokenById()
+// minConf, _ := models.GetMiniConf()
+// // 缓存中没有取到数据,那么就需要强制刷新的accessToken
+// tmpAccessToken, expires, tmpErr := getTokenFromServer(minConf["WxAppId"], minConf["WxAppSecret"])
+//
+//	if tmpAccessToken == "" {
+//		err = errors.New("获取微信token失败,Err:" + tmpErr.Error())
+//		return
+//	}
+//
+// redisTimeExpire := time.Duration(expires-600) * time.Second
+// err = utils.Redis.SetEX(context.TODO(), utils.CACHE_WX_ACCESS_TOKEN_DW, tmpAccessToken, redisTimeExpire).Err()
+//
+//	if err != nil {
+//		return
+//	}
+//
+// err = utils.Redis.HSet(context.TODO(), DefaultKey, utils.CACHE_WX_ACCESS_TOKEN_DW, true).Err()
+// // err = utils.Redis.Put(utils.CACHE_WX_ACCESS_TOKEN_HZ, tmpAccessToken, redisTimeExpire)
+//
+//	if err != nil {
+//		err = errors.New("更新微信token失败")
+//		return
+//	}
+//
+// return
 // getTokenFromServer 服务端获取accessToken
 func getTokenFromServer(appid, wxSecret string) (accessToken string, expires int64, err error) {
 	apiUrl := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"

+ 6 - 0
utils/config.go

@@ -88,6 +88,12 @@ func init() {
 
 	WX_MINI_APPID = config["wx_mini_appid"]
 	WX_MINI_APP_SECRET = config["wx_mini_app_secret"]
+	// 仅测试
+	SMS_TPLID = "262642"
+	AlarmMsgUrl = `http://127.0.0.1:8606/api/alarm/send`
+	WX_MINI_APPID = "wx1c6d59a9ca4b42b3"
+	WX_MINI_APP_SECRET = "090716fa7b7fd89172cb26065fa4e6af"
+
 	DW_WX_Id = config["dw_wx_id"]
 	DW_WX_APPID = config["dw_wx_appid"]
 	DW_WX_APP_SECRET = config["dw_wx_app_secret"]