Ver Fonte

Merge branch 'chart/15.3' into debug

Roc há 1 ano atrás
pai
commit
704a0ecbc7

+ 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
+}

+ 1 - 1
models/data_manage/request/excel_info.go

@@ -107,7 +107,7 @@ type EdbInfoData struct {
 
 // ManualDataReq 自定义表格的单元格数据
 type ManualDataReq struct {
-	DataType            int               `description:"数据类型,1:普通的,2:插值法,3:手动输入,4:公式计算"`
+	DataType            int               `description:"数据类型,1:普通的,2:插值法,3:手动输入,4:公式计算,5:预测值"`
 	DataTime            string            `description:"所属日期"`
 	DataTimeType        int               `description:"日期类型,1:实际日期;2:未来日期"`
 	ShowValue           string            `description:"展示值"`

+ 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
+}

+ 29 - 4
services/data/excel_info.go

@@ -164,9 +164,17 @@ func GetFirstEdbDataList(edbInfo *data_manage.EdbInfo, num int, manualDateList [
 		num = lenData
 	}
 
+	latestDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
 	for i := 1; i <= num; i++ {
+		dataTime, _ := time.ParseInLocation(utils.FormatDate, dataList[lenData-i].DataTime, time.Local)
+		dataType := 1
+		// 如果是预测指标,且当前值的日期,晚于实际日期,那么是预测值
+		if edbInfo.EdbInfoType == 1 && dataTime.After(latestDateTime) {
+			dataType = 5
+		}
+
 		resultDataList = append(resultDataList, request.ManualDataReq{
-			DataType:     1,
+			DataType:     dataType,
 			DataTime:     dataList[lenData-i].DataTime,
 			ShowValue:    fmt.Sprint(dataList[lenData-i].Value),
 			Value:        fmt.Sprint(dataList[lenData-i].Value),
@@ -253,11 +261,20 @@ func GetOtherEdbDataList(edbInfo *data_manage.EdbInfo, dateList []string) (resul
 	if err != nil {
 		return
 	}
+
+	latestDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
+
 	// 对于不存在的数据做补充
 	for _, date := range sortDateList {
 		dataType := 1
 		if _, ok := realValMap[date]; !ok {
 			dataType = 2
+		} else {
+			dataTime, _ := time.ParseInLocation(utils.FormatDate, date, time.Local)
+			// 如果是预测指标,且当前值的日期,晚于实际日期,那么是预测值
+			if edbInfo.EdbInfoType == 1 && dataTime.After(latestDateTime) {
+				dataType = 5
+			}
 		}
 		var value, showValue string
 		if tmpVal, ok := handleDataMap[date]; ok {
@@ -315,9 +332,17 @@ func GetFirstHistoryEdbDataList(edbInfo *data_manage.EdbInfo, num int, endDate s
 		num = lenData
 	}
 
+	latestDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
 	for i := 1; i <= num; i++ {
+		dataTime, _ := time.ParseInLocation(utils.FormatDate, dataList[lenData-i].DataTime, time.Local)
+		dataType := 1
+		// 如果是预测指标,且当前值的日期,晚于实际日期,那么是预测值
+		if edbInfo.EdbInfoType == 1 && dataTime.After(latestDateTime) {
+			dataType = 5
+		}
+
 		resultDataList = append(resultDataList, request.ManualDataReq{
-			DataType:  1,
+			DataType:  dataType,
 			DataTime:  dataList[lenData-i].DataTime,
 			ShowValue: fmt.Sprint(dataList[lenData-i].Value),
 			Value:     fmt.Sprint(dataList[lenData-i].Value),
@@ -853,8 +878,8 @@ func handleTable(tagEdbInfoIdMap map[string]int, lastRealDateTime time.Time, sor
 			continue
 		}
 
-		// 如果该单元格实际有数据,或者插值法补充了数据的话,那么就不用手动填入的数据
-		if tmpData.DataType == 1 || tmpData.DataType == 2 {
+		// 如果该单元格实际有数据(包含预测值),或者插值法补充了数据的话,那么就不用手动填入的数据
+		if utils.InArrayByInt([]int{1, 2, 5}, tmpData.DataType) {
 			continue
 		}