瀏覽代碼

API指标定时刷新

xyxie 2 周之前
父節點
當前提交
e6d94e94b1
共有 4 個文件被更改,包括 105 次插入13 次删除
  1. 74 2
      controllers/base_from_kpler.go
  2. 10 0
      models/base_from_kpler.go
  3. 9 0
      routers/commentsRouter.go
  4. 12 11
      services/base_from_kpler.go

+ 74 - 2
controllers/base_from_kpler.go

@@ -58,7 +58,7 @@ func (this *KplerController) GetData() {
 	}
 	
 	// 根据配置获取指标数据
-	indexes, _, _, e := services.GetKplerDataByApi(params, "")
+	indexes, _, _, e := services.GetKplerDataByApi(params, "", false)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = fmt.Sprintf("获取开普勒高频指标失败, %v", e)
@@ -119,7 +119,7 @@ func (this *KplerController) IndexAdd() {
 	}
 	
 	// 根据配置获取指标数据
-	indexes, apiQueryUrl, terminalInfo, e := services.GetKplerDataByApi(params, "")
+	indexes, apiQueryUrl, terminalInfo, e := services.GetKplerDataByApi(params, "", false)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = fmt.Sprintf("获取开普勒高频指标失败, %v", e)
@@ -307,4 +307,76 @@ func (this *KplerController) HandleExcelData() {
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "处理成功"
+}
+
+// RefreshByApi
+// @Title 刷新Kpler指标接口
+// @Description 刷新Kpler指标接口
+// @Success 200 {object} models.RefreshEdbInfoReq
+// @router /index/refresh_by_api [post]
+func (this *KplerController) RefreshByApi() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req models.KplerRefreshByApiReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	
+	// 查询所有通过API获取的指标
+	refreshIndexes, err := models.GetApiKplerIndexesByFrequencyEndDateTime(req.Frequency, time.Now().Format("2006-01-02"))
+	if err != nil {
+		br.Msg = "获取指标失败"
+		br.ErrMsg = "获取指标失败,Err:" + err.Error()
+		return
+	}
+    
+	if len(refreshIndexes) == 0 {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "没有需要刷新的指标"
+		return
+	}
+
+	hasRefreshIndexMap := make(map[string]struct{})
+	for _, index := range refreshIndexes {
+		if _, ok := hasRefreshIndexMap[index.IndexCode]; ok {
+			continue
+		}
+		hasRefreshIndexMap[index.IndexCode] = struct{}{}
+
+		reqLib := models.KplerSearchEdbReq{
+			ProductNames: index.ProductNames,
+			FromZoneNames: index.FromZoneName,
+			ToZoneNames: index.ToZoneName,
+			Granularity: index.Granularity,
+			Split: index.Split,
+			Unit: index.Unit,
+			FlowDirection: index.FlowDirection,
+		}
+		// 获取指标数据
+		indexes, apiQueryUrl, _, err := services.GetKplerDataByApi(reqLib, index.TerminalCode, true)
+		if err != nil {
+			utils.FileLog.Error("RefreshByApi Err:" + err.Error())
+			continue
+		}
+        
+        for _, hasIndex := range indexes {
+			hasRefreshIndexMap[hasIndex.IndexCode] = struct{}{}
+		}
+		err = services.AddKplerIndexByApi(indexes, &reqLib, apiQueryUrl, index.ClassifyId, index.TerminalCode)
+		if err != nil {
+			utils.FileLog.Error("RefreshByApi Err:" + err.Error())
+			continue
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+
 }

+ 10 - 0
models/base_from_kpler.go

@@ -615,4 +615,14 @@ type KplerZone struct {
 type KplerZoneDataLibReq struct {
 	AncestorName string `description:"祖先名称"`
 	DescendantName string `description:"子名称"`
+}
+
+type KplerRefreshByApiReq struct {
+	Frequency string `description:"频度"`
+}
+
+func GetApiKplerIndexesByFrequencyEndDateTime(frequency string, endDateTime string) (items []*BaseFromKplerIndex, err error) {
+	sql := ` SELECT * FROM base_from_kpler_index WHERE frequency=? AND end_date < ? and api_query_url != '' order by base_from_kpler_index_id asc, api_query_url asc `
+	err = global.DEFAULT_DB.Raw(sql, frequency, endDateTime).Find(&items).Error
+	return
 }

+ 9 - 0
routers/commentsRouter.go

@@ -1213,6 +1213,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:KplerController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:KplerController"],
+        beego.ControllerComments{
+            Method: "RefreshByApi",
+            Router: `/index/refresh_by_api`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_index_lib/controllers:KplerController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:KplerController"],
         beego.ControllerComments{
             Method: "IndexAdd",

+ 12 - 11
services/base_from_kpler.go

@@ -15,7 +15,7 @@ import (
 )
 
 // GetKplerDataByApi 获取开普勒数据
-func GetKplerDataByApi(params models.KplerSearchEdbReq, terminalCode string) (indexes []*models.KplerIndexItem, apiQueryUrl string, terminalInfo *models.EdbTerminal, err error) {
+func GetKplerDataByApi(params models.KplerSearchEdbReq, terminalCode string, isRefresh bool) (indexes []*models.KplerIndexItem, apiQueryUrl string, terminalInfo *models.EdbTerminal, err error) {
 	terminal, e := GetApiTerminal(utils.DATA_SOURCE_KPLER, terminalCode)
 	if e != nil {
 		err = fmt.Errorf("获取开普勒终端配置失败, %v", e)
@@ -29,7 +29,7 @@ func GetKplerDataByApi(params models.KplerSearchEdbReq, terminalCode string) (in
     
 	// 走API
 	if terminal.IsApi == 1 {
-		indexes, apiQueryUrl, err = getKplerDataByApi(params, terminal.ServerUrl)
+		indexes, apiQueryUrl, err = getKplerDataByApi(params, terminal.ServerUrl, isRefresh)
 		if err != nil {
 			err = fmt.Errorf("获取开普勒指标数据失败, %v", err)
 			return
@@ -41,7 +41,7 @@ func GetKplerDataByApi(params models.KplerSearchEdbReq, terminalCode string) (in
 }
 
 // getEdbDataFromThsHfHttp API-获取高频指标数据
-func getKplerDataByApi(params models.KplerSearchEdbReq, serverUrl string) (list []*models.KplerIndexItem, apiQueryUrl string, err error) {
+func getKplerDataByApi(params models.KplerSearchEdbReq, serverUrl string, isRefresh bool) (list []*models.KplerIndexItem, apiQueryUrl string, err error) {
 	defer func() {
 		if err != nil {
 			tips := fmt.Sprintf("开普勒指标API-getKplerDataByApi err: %v", err)
@@ -121,10 +121,10 @@ func getKplerDataByApi(params models.KplerSearchEdbReq, serverUrl string) (list
 	for _, v := range existList {
 		existIndexCodeMap[v.IndexCode] = true
 	}
-	// 过滤已经存在的指标
+	// 过滤已经存在的指标, 如果是刷新指标,则无需过滤
 	list = make([]*models.KplerIndexItem, 0)
 	for _, v := range indexes {
-		if _, ok := existIndexCodeMap[v.IndexCode]; !ok {
+		if _, ok := existIndexCodeMap[v.IndexCode]; !ok || isRefresh {
 			list = append(list, v)
 		}
 	}
@@ -182,6 +182,7 @@ func AddKplerIndexByApi(indexList []*models.KplerIndexItem, req *models.KplerSea
 			indexObj.IndexName = indexInfo.IndexName
 			indexObj.Frequency = indexInfo.Frequency
 			indexObj.ClassifyId = int(classifyId)
+			indexObj.ProductNames = req.ProductNames
 			indexObj.FromZoneId = fromZoneId
 			indexObj.ToZoneId = toZoneId
 			indexObj.FromZoneName = req.FromZoneNames
@@ -221,7 +222,7 @@ func AddKplerIndexByApi(indexList []*models.KplerIndexItem, req *models.KplerSea
 			indexObj.FromZoneName = req.FromZoneNames
 			indexObj.ToZoneName = req.ToZoneNames
 			indexObj.FlowDirection = req.FlowDirection
-			indexObj.Granularity = req.Granularity
+			indexObj.Granularity = GetKplerGranularity(req.Granularity)
 			indexObj.Split = req.Split
 			indexObj.Unit = req.Unit
 			indexObj.ApiQueryUrl = apiQueryUrl
@@ -781,15 +782,15 @@ func getKplerFrequency(granularity string) (frequency string) {
 
 func GetKplerGranularity(frequency string) (granularity string) {
 	switch frequency {
-	case "daily", "Daily":
+	case "daily", "Daily", "days":
 		return "days"
-	case "weekly", "Weekly":
+	case "weekly", "Weekly", "weeks":
 		return "weeks"
-	case "monthly", "Monthly":
+	case "monthly", "Monthly", "months":
 		return "months"
-	case "yearly", "Yearly":
+	case "yearly", "Yearly", "years":
 		return "years"
-	case "quarterly", "Quarters":
+	case "quarterly", "Quarters", "quarters":
 		return "quarters"
 	}
 	return ""