Browse Source

feat:新增根据日期/指标获取指标对应日期的前后几期数据

Roc 1 year ago
parent
commit
a9f74a334f
3 changed files with 135 additions and 3 deletions
  1. 78 3
      controllers/data_manage/edb_info.go
  2. 9 0
      routers/commentsRouter.go
  3. 48 0
      services/data/edb_data.go

+ 78 - 3
controllers/data_manage/edb_info.go

@@ -3993,11 +3993,10 @@ func (this *EdbInfoController) AllEdbInfoByEs() {
 }
 
 // GetEdbDateData
-// @Title 所有指标筛选接口
-// @Description 所有指标筛选接口
+// @Title 根据指标ID和具体日期获取对应日期的数据值
+// @Description 根据指标ID和具体日期获取对应日期的数据值
 // @Param   EdbInfoId   query   int  false       "指标id"
 // @Param   Date   query   string  false       "日期"
-// @Param   DateType   query   string  false       "频度"
 // @Success 200 {object} data_manage.EdbInfoList
 // @router /edb_info/date_data [get]
 func (this *EdbInfoController) GetEdbDateData() {
@@ -4043,3 +4042,79 @@ func (this *EdbInfoController) GetEdbDateData() {
 	br.Msg = "获取成功"
 	br.Data = val
 }
+
+// GetEdbBeforeAndAfterDateData
+// @Title 根据指标ID和具体日期获取对应日期的数据值+前后几期
+// @Description 根据指标ID和具体日期获取对应日期的数据值+前后几期
+// @Param   EdbInfoId   query   int  false       "指标id"
+// @Param   Date   query   string  false       "日期"
+// @Param   Num   query   int  false       "前后几期数据"
+// @Success 200 {object} data_manage.EdbInfoList
+// @router /edb_info/date_data/before_after [get]
+func (this *EdbInfoController) GetEdbBeforeAndAfterDateData() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	edbInfoId, _ := this.GetInt("EdbInfoId")
+	date := this.GetString("Date")
+	num, _ := this.GetInt("Num")
+
+	// 默认2期数据
+	if num <= 0 {
+		num = 2
+	}
+
+	if edbInfoId <= 0 {
+		br.Msg = "请选择指标"
+		br.IsSendEmail = false
+		return
+	}
+	if date == `` {
+		br.Msg = "请选择日期"
+		br.IsSendEmail = false
+		return
+	}
+	edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取指标信息失败,Err:", err.Error())
+		return
+	}
+	startDate := date
+	//如果填写的是月度日期
+	if strings.Count(date, "-") == 1 {
+		startDate = date + "-01"
+	}
+	// 前面的数据
+	tmpList, err := data.GetEdbBeforeAndAfterDateData(edbInfo, "", startDate, 1, num)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取指数据失败,Err:", err.Error())
+		return
+	}
+	// 后面的数据
+	tmpList2, err := data.GetEdbBeforeAndAfterDateData(edbInfo, startDate, "", 2, num)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取指数据失败,Err:", err.Error())
+		return
+	}
+
+	dataList := make([]*data_manage.EdbDataList, 0)
+
+	dataList = append(dataList, tmpList...)
+	dataList = append(dataList, tmpList2...)
+
+	// 数据翻转
+	for i, j := 0, len(dataList)-1; i < j; i, j = i+1, j-1 {
+		dataList[i], dataList[j] = dataList[j], dataList[i]
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = dataList
+}

+ 9 - 0
routers/commentsRouter.go

@@ -1960,6 +1960,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "GetEdbBeforeAndAfterDateData",
+            Router: `/edb_info/date_data/before_after`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["hongze/hz_eta_api/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "EdbInfoDetail",

+ 48 - 0
services/data/edb_data.go

@@ -357,3 +357,51 @@ func GetDateData(edbInfo *data_manage.EdbInfo, startDate, endDate string) (val s
 
 	return
 }
+
+// GetEdbBeforeAndAfterDateData 获取指标的单个日期的值
+func GetEdbBeforeAndAfterDateData(edbInfo *data_manage.EdbInfo, startDate, endDate string, dataType, num int) (list []*data_manage.EdbDataList, err error) {
+	var dataList []*data_manage.EdbDataList
+	switch edbInfo.EdbInfoType {
+	case 0:
+		dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.EdbInfoId, startDate, endDate)
+	case 1:
+		_, dataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, startDate, endDate, true)
+	default:
+		err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
+
+	}
+	if err != nil {
+		return
+	}
+
+	lenDataList := len(dataList)
+	if lenDataList <= 0 {
+		return
+	}
+
+	switch dataType {
+	case 1: // 取前面的数据
+		if lenDataList <= 1 { // 如果只有一个,那么也返回,因为自己不算
+			return
+		}
+		if lenDataList <= num {
+			num = lenDataList - 1
+		}
+
+		for i := num; i > 0; i-- {
+			list = append(list, dataList[lenDataList-1-i])
+		}
+
+	case 2: // 取后面的数据
+		num = num + 1
+		if lenDataList < num {
+			num = lenDataList
+		}
+
+		for i := 0; i < num; i++ {
+			list = append(list, dataList[i])
+		}
+	}
+
+	return
+}