Browse Source

fix:公式计算的时候,调整返回的数据个数

Roc 1 year ago
parent
commit
f92594abd2

+ 79 - 30
controllers/data_manage/excel/mixed_table.go

@@ -7,7 +7,6 @@ import (
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/services/data"
 	excel2 "eta/eta_api/services/data/excel"
-	"fmt"
 	"strconv"
 )
 
@@ -150,39 +149,89 @@ func (c *ExcelInfoController) CalculateData() {
 	}
 
 	// 数据处理成需要返回的样式
-	//num := 5
+	num := 5
 	lenDate := len(respItem.Data.DateList)
-	//if lenDate < 5 {
-	//	num = lenDate
-	//}
-
-	dataListResp := make([]data_manage.DataList, 0)
-	//for i := 1; i <= num; i++ {
-	//	date := respItem.Data.DateList[lenDate-i]
-	//	val, ok := respItem.Data.DataMap[date]
-	//	if !ok {
-	//		continue
-	//	}
-	//
-	//	dataListResp = append(dataListResp, data_manage.DataList{
-	//		Value:    fmt.Sprint(val),
-	//		DataTime: date,
-	//	})
-	//}
-	for i := lenDate - 1; i >= 0; i-- {
-		date := respItem.Data.DateList[i]
-		val, ok := respItem.Data.DataMap[date]
-		if !ok {
-			continue
-		}
+	if lenDate < 5 {
+		num = lenDate
+	}
 
-		dataListResp = append(dataListResp, data_manage.DataList{
-			Value:    fmt.Sprint(val),
-			DataTime: date,
-		})
+	var currDate string // 当前日期
+	dataListResp := make([]*data_manage.EdbDataList, 0)
+
+	if req.DataTime == `` {
+		for i := 1; i <= num; i++ {
+			date := respItem.Data.DateList[lenDate-i]
+			val, ok := respItem.Data.DataMap[date]
+			if !ok {
+				continue
+			}
+
+			dataListResp = append(dataListResp, &data_manage.EdbDataList{
+				Value:    val,
+				DataTime: date,
+			})
+		}
+	} else {
+		if val, ok := respItem.Data.DataMap[req.DataTime]; ok {
+			for i, tmpDate := range respItem.Data.DateList {
+				if tmpDate == req.DataTime {
+					if i+3 <= lenDate {
+						t1Date := respItem.Data.DateList[i+2]
+						if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
+							// 当前日期
+							dataListResp = append(dataListResp, &data_manage.EdbDataList{
+								Value:    tmpVal,
+								DataTime: t1Date,
+							})
+						}
+					}
+
+					if i+2 <= lenDate {
+						t1Date := respItem.Data.DateList[i+1]
+						if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
+							// 当前日期
+							dataListResp = append(dataListResp, &data_manage.EdbDataList{
+								Value:    tmpVal,
+								DataTime: t1Date,
+							})
+						}
+					}
+
+					// 当前日期
+					dataListResp = append(dataListResp, &data_manage.EdbDataList{
+						Value:    val,
+						DataTime: req.DataTime,
+					})
+					if i >= 1 {
+						t1Date := respItem.Data.DateList[i-1]
+						if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
+							// 当前日期
+							dataListResp = append(dataListResp, &data_manage.EdbDataList{
+								Value:    tmpVal,
+								DataTime: t1Date,
+							})
+						}
+					}
+					if i >= 2 {
+						t1Date := respItem.Data.DateList[i-2]
+						if tmpVal, ok2 := respItem.Data.DataMap[t1Date]; ok2 {
+							// 当前日期
+							dataListResp = append(dataListResp, &data_manage.EdbDataList{
+								Value:    tmpVal,
+								DataTime: t1Date,
+							})
+						}
+					}
+				}
+			}
+		}
+	}
+	resp := data_manage.BeforeAndAfterDateDataResp{
+		List: dataListResp,
+		Date: currDate,
 	}
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "计算成功"
-	br.Data = dataListResp
+	br.Data = resp
 }

+ 3 - 2
models/data_manage/excel/request/mixed_table.go

@@ -7,6 +7,7 @@ const (
 	CustomTextDT                        // 3 自定义文本
 	InsertDataDT                        // 4 插值(插入指标值,表格上,自动判断日期和指标的交集位置,插入值)
 	PopInsertDataDT                     // 5 弹框插值(在表格上选择日期,然后空白单元格选择弹框并选择指标,插入该指标与该日期的值)
+	FormulateCalculateDataDT            // 6 公式计算(A+B这种)
 	InsertEdbCalculateDataDT            // 6 插入指标计算公式生成的值	//TODO 不是这个id
 )
 
@@ -77,8 +78,8 @@ type EdbDateConf struct {
 // CalculateConf
 // @Description: 计算公式
 type CalculateConf struct {
-	EdbInfoId int `description:"指标id"`
-	//DataList      []*EdbInfoSearchData
+	EdbInfoId     int         `description:"指标id"`
+	DataTime      string      `description:"所属日期,这个日期有传递的话,那么就取上下两期+自己的数据;没有传就默认最近5期的数据"`
 	Frequency     string      `description:"需要转换的频度"`
 	Formula       interface{} `description:"计算公式,默认是string,实际上还需要转成其他样式"`
 	Calendar      string      `description:"公历/农历"`