浏览代码

优化同花顺新增数据逻辑

longyu 3 年之前
父节点
当前提交
91353f2030
共有 3 个文件被更改,包括 72 次插入62 次删除
  1. 25 13
      controllers/base_from_ths.go
  2. 3 49
      models/base_from_ths.go
  3. 44 0
      services/base_from_ths.go

+ 25 - 13
controllers/base_from_ths.go

@@ -3,8 +3,10 @@ package controllers
 import (
 	"encoding/json"
 	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/services"
 	"hongze/hongze_edb_lib/utils"
 	"strconv"
+	"time"
 )
 
 type ThsController struct {
@@ -17,12 +19,9 @@ type ThsController struct {
 // @router /add [post]
 func (this *ThsController) Add() {
 	br := new(models.BaseResponse).Init()
-	deleteCache := true
 	var cacheKey string
 	defer func() {
-		if deleteCache {
-			utils.Rc.Delete(cacheKey)
-		}
+		utils.Rc.Delete(cacheKey)
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
@@ -40,13 +39,26 @@ func (this *ThsController) Add() {
 		return
 	}
 	cacheKey = "CACHE_EDB_DATA_ADD_" + strconv.Itoa(source) + "_" + req.EdbCode
-	err = models.AddEdbDataFromThs(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE)
-	if err != nil {
-		br.Msg = "获取指标信息失败!"
-		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
-		return
+	if !utils.Rc.IsExist(cacheKey) {
+		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+		dataItem, err := services.GetEdbDataFromThs(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 GetEdbDataFromThs,Err:" + err.Error()
+			return
+		}
+		err = models.AddEdbDataFromThs(req.EdbCode, dataItem)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromThs,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	}else{
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
 	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-}
+}

+ 3 - 49
models/base_from_ths.go

@@ -1,69 +1,23 @@
 package models
 
 import (
-	"encoding/json"
-	"errors"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
-	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_edb_lib/services"
 	"hongze/hongze_edb_lib/utils"
 	"strings"
 	"time"
 )
 
-type EdbDataFromThs struct {
-	DataVol   int64       `json:"dataVol"`
-	Errmsg    string      `json:"errmsg"`
-	Errorcode int64       `json:"errorcode"`
-	Perf      interface{} `json:"perf"`
-	Tables    []struct {
-		ID    []string  `json:"id"`
-		Time  []string  `json:"time"`
-		Value []float64 `json:"value"`
-	} `json:"tables"`
-}
-
-func AddEdbDataFromThs(edbCode, startDate, endDate string) (err error) {
+func AddEdbDataFromThs(edbCode string, item *services.EdbDataFromThs) (err error) {
 	var errMsg string
 	o := orm.NewOrm()
-	tx, err := o.Begin()
 	defer func() {
-		if err != nil {
-			err = tx.Rollback()
-			if err != nil {
-				errMsg = " Rollback err:" + err.Error()
-			}
-		} else {
-			err = tx.Commit()
-			if err != nil {
-				errMsg = " Commit err:" + err.Error()
-			}
-		}
 		if err != nil {
 			go utils.SendEmail(utils.APP_NAME_CN+"【"+utils.RunMode+"】"+"失败提醒", " 同花顺数据获取失败:err:"+errMsg, utils.EmailSendToUsers)
 		}
 	}()
 
-	thsUrl := utils.Hz_Ths_Data_Url + `edbInfo/ths?EdbCode=%s&StartDate=%s&EndDate=%s`
-	thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
-	utils.FileLog.Info("thsUrl:" + thsUrl)
-	body, err := http.Get(thsUrl)
-	utils.FileLog.Info("ths result:" + string(body))
-	if err != nil {
-		err = errors.New(" Err:" + err.Error() + ";result:" + string(body))
-		return
-	}
-	item := new(EdbDataFromThs)
-	err = json.Unmarshal(body, &item)
-	if err != nil {
-		err = errors.New("GetEdbDataFromThs json.Unmarshal Err:" + err.Error())
-		return
-	}
-	if item.Errorcode != 0 {
-		err = errors.New(string(body))
-		errMsg ="获取同花顺信息失败:"+ string(body)
-		return
-	}
 	if len(item.Tables) > 0 {
 		table := item.Tables[0]
 		dataLen := len(table.Time)
@@ -88,7 +42,7 @@ func AddEdbDataFromThs(edbCode, startDate, endDate string) (err error) {
 		}
 		if isAdd {
 			addSql = strings.TrimRight(addSql, ",")
-			_, err = tx.Raw(addSql).Exec()
+			_, err = o.Raw(addSql).Exec()
 			if err != nil {
 				errMsg = " tx.Exec Err :" + err.Error()
 				return

+ 44 - 0
services/base_from_ths.go

@@ -0,0 +1,44 @@
+package services
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_edb_lib/utils"
+)
+
+type EdbDataFromThs struct {
+	DataVol   int64       `json:"dataVol"`
+	Errmsg    string      `json:"errmsg"`
+	Errorcode int64       `json:"errorcode"`
+	Perf      interface{} `json:"perf"`
+	Tables    []struct {
+		ID    []string  `json:"id"`
+		Time  []string  `json:"time"`
+		Value []float64 `json:"value"`
+	} `json:"tables"`
+}
+
+func GetEdbDataFromThs(edbCode, startDate, endDate string) (item *EdbDataFromThs, err error) {
+	thsUrl := utils.Hz_Ths_Data_Url + `edbInfo/ths?EdbCode=%s&StartDate=%s&EndDate=%s`
+	thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
+	utils.FileLog.Info("thsUrl:" + thsUrl)
+	body, err := http.Get(thsUrl)
+	utils.FileLog.Info("ths result:" + string(body))
+	if err != nil {
+		err = errors.New(" Err:" + err.Error() + ";result:" + string(body))
+		return
+	}
+	item = new(EdbDataFromThs)
+	err = json.Unmarshal(body, &item)
+	if err != nil {
+		err = errors.New("GetEdbDataFromThs json.Unmarshal Err:" + err.Error())
+		return
+	}
+	if item.Errorcode != 0 {
+		err = errors.New(string(body))
+		return
+	}
+	return item, nil
+}