浏览代码

查找前后记录

xyxie 1 年之前
父节点
当前提交
c3c6115ad5

+ 47 - 86
controllers/data_manage/edb_info.go

@@ -6,11 +6,13 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/company"
 	"eta/eta_api/models/data_manage"
+	request2 "eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/data_manage/request"
 	"eta/eta_api/models/data_manage/response"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/data"
+	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/services/data_stat"
 	"eta/eta_api/services/elastic"
 	etaTrialService "eta/eta_api/services/eta_trial"
@@ -4490,7 +4492,7 @@ func (this *EdbInfoController) GetEdbDateData() {
 // @Param   Date   query   string  false       "日期"
 // @Param   Num   query   int  false       "前后几期数据"
 // @Success 200 {object} data_manage.EdbInfoList
-// @router /edb_info/date_data/before_after [get]
+// @router /edb_info/date_data/before_after [post]
 func (this *EdbInfoController) GetEdbBeforeAndAfterDateData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -4498,9 +4500,17 @@ func (this *EdbInfoController) GetEdbBeforeAndAfterDateData() {
 		this.ServeJSON()
 	}()
 
-	edbInfoId, _ := this.GetInt("EdbInfoId")
-	date := this.GetString("Date")
-	num, _ := this.GetInt("Num")
+	requestBody := string(this.Ctx.Input.RequestBody)
+	var req request2.DateDataBeforeAfterReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	edbInfoId := req.EdbInfoId
+	currDate := req.Date
+	num := req.Num
 
 	// 默认2期数据
 	if num <= 0 {
@@ -4519,100 +4529,51 @@ func (this *EdbInfoController) GetEdbBeforeAndAfterDateData() {
 		return
 	}
 
-	// 当前日期
-	var currDate string
-	// 是否查找之后的数据
-	isFindAfter := true
-	if date == `` {
-		currDate = edbInfo.EndDate
-		isFindAfter = false
-		if num <= 0 {
-			num = 4 //默认获取前面的几期数据
-		}
-	}
-
 	dataList := make([]*data_manage.EdbDataList, 0)
-
-	startDate := date
-	// 指定日期的类型
-	dateType := "day"
-	//如果填写的是月度日期
-	if strings.Count(date, "-") == 1 {
-		startDate = date + "-01"
-		dateType = "month"
-	}
-
-	resp := data_manage.BeforeAndAfterDateDataResp{
-		List: dataList,
-		Date: "",
-	}
-	// 后面的数据
-	afterList := make([]*data_manage.EdbDataList, 0)
-	if isFindAfter {
-		afterList, err = data.GetEdbBeforeAndAfterDateData(edbInfo, startDate, "", 2, num)
+	switch edbInfo.EdbInfoType {
+	case 0:
+		dataList, _ = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, ``, ``)
+	case 1:
+		_, dataList, _, _, _, _ = data.GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
+	default:
+		br.Msg = "指标类型异常!"
+		br.ErrMsg = "指标类型异常,Err:" + strconv.Itoa(edbInfo.EdbInfoType)
+		return
+	}
+	if currDate == `` {
+		currDate, err = excel2.GetEdbDateByMoveForward(requestBody, dataList)
 		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = fmt.Sprint("获取后面的指数据失败,Err:", err.Error())
+			br.Msg = "日期前移失败"
+			br.ErrMsg = "日期前移失败,Err:" + err.Error()
 			return
 		}
-
-		lenBeforeList := len(afterList)
-		if lenBeforeList <= 0 {
-			br.Ret = 200
-			br.Success = true
-			br.Msg = "所选指标所选日期无值"
-			br.Data = resp
-			return
-		} else {
-			var dateTimeStr string
-			switch dateType {
-			case "month":
-				dateTime, _ := time.ParseInLocation(utils.FormatDate, afterList[0].DataTime, time.Local)
-				dateTimeStr = dateTime.Format(utils.FormatYearMonthDate)
-			case "day":
-				dateTimeStr = afterList[0].DataTime
-			}
-			currDate = afterList[0].DataTime
-			// 如果对应日期找不到,那么就直接返回吧
-			if dateTimeStr != date {
-				br.Ret = 200
-				br.Success = true
-				br.Msg = "所选指标所选日期无值"
-				br.Data = resp
-				return
-			}
+	} else {
+		if strings.Count(currDate, "-") == 1 {
+			currDate = currDate + "-01"
+			//dateType = "month"
+		} else if strings.Count(currDate, "-") == 0 {
+			currDate = currDate + "-01-01"
 		}
 	}
-
-	// 前面的数据
-	beforeList, err := data.GetEdbBeforeAndAfterDateData(edbInfo, "", currDate, 1, num)
+	currDate, err = excel2.HandleMixTableDateChange(currDate, requestBody)
 	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = fmt.Sprint("获取前面的指数据失败,Err:", err.Error())
+		br.Msg = "日期变换失败"
+		br.ErrMsg = "日期变换失败,Err:" + err.Error()
 		return
 	}
+	list := make([]*data_manage.EdbDataList, 5)
 
-	dataList = append(dataList, beforeList...)
-	// 后面的数据
-	if len(afterList) > 0 {
-		if len(beforeList) > 0 {
-			dataList = append(dataList, afterList[1:]...)
-		} else {
-			dataList = append(dataList, afterList...)
-		}
-	}
-
-	// 数据翻转
-	for i, j := 0, len(dataList)-1; i < j; i, j = i+1, j-1 {
-		dataList[i], dataList[j] = dataList[j], dataList[i]
+	list, err = data.GetEdbBeforeAndAfterDateData(currDate, dataList)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取后面的指数据失败,Err:", err.Error())
+		return
 	}
-
-	resp.List = dataList
-	// 前端不传入日期的时候,这个J皮不让返回这个字段,要不然他会颜色标记
-	if date != `` {
-		resp.Date = currDate
+	// todo 如果list 是空值,是否默认返回最新的记录
+	resp := data_manage.BeforeAndAfterDateDataResp{
+		List: list,
+		Date: currDate,
 	}
-
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 2 - 1
controllers/data_manage/excel/mixed_table.go

@@ -187,7 +187,8 @@ func (c *ExcelInfoController) CalculateData() {
 	}
 	respItem, tmpErr := data.BaseCalculate(string(reqJson))
 	if tmpErr != nil {
-		err = tmpErr
+		br.Msg = "计算指标失败"
+		br.ErrMsg = tmpErr.Error()
 		return
 	}
 	if respItem.Ret != 200 {

+ 8 - 0
models/data_manage/excel/request/mixed_table.go

@@ -131,6 +131,14 @@ type MixNumberShowStyle struct {
 	IsPercent   int `description:"是否是百分比1 是,0否, 将选中的单元格的样式设置成百分比"`
 }
 
+type DateDataBeforeAfterReq struct {
+	EdbInfoId   int
+	Date        string
+	Num         int
+	MoveForward int `description:"前移的期数"`
+	DateChange  []*EdbDateConfDateChange
+}
+
 // CalculateConf
 // @Description: 计算公式
 type CalculateConf struct {

+ 1 - 1
routers/commentsRouter.go

@@ -2810,7 +2810,7 @@ func init() {
         beego.ControllerComments{
             Method: "GetEdbBeforeAndAfterDateData",
             Router: `/edb_info/date_data/before_after`,
-            AllowHTTPMethods: []string{"get"},
+            AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})

+ 24 - 38
services/data/edb_data.go

@@ -358,49 +358,35 @@ func GetDateData(edbInfo *data_manage.EdbInfo, startDate, endDate string) (item
 }
 
 // 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.SubSource, 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
-	}
-
+func GetEdbBeforeAndAfterDateData(targetDate string, dataList []*data_manage.EdbDataList) (list []*data_manage.EdbDataList, err error) {
 	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])
+	// 数组按照日期从小到大排序
+	maxIndex := lenDataList - 1
+	startIndex := 0
+	endIndex := 0
+	for index, v := range dataList {
+		if v.DataTime >= targetDate {
+			if index+2 > maxIndex {
+				endIndex = maxIndex
+			} else if index+1 > maxIndex {
+				endIndex = maxIndex
+			} else {
+				endIndex = index + 2
+			}
+			startIndex = endIndex - 4
+			if startIndex < 0 {
+				startIndex = 0
+			}
+			if endIndex == maxIndex {
+				list = dataList[startIndex:]
+			} else {
+				list = dataList[startIndex : endIndex+1]
+			}
+			break
 		}
 	}
-
 	return
 }