Browse Source

Merge branch 'chart/15.3'

# Conflicts:
#	services/data/predict_edb_info.go
Roc 1 year ago
parent
commit
c8e42c7560

+ 162 - 6
controllers/data_manage/edb_info.go

@@ -17,11 +17,12 @@ import (
 	"time"
 )
 
-// 数据管理
+// EdbInfoController 数据管理
 type EdbInfoController struct {
 	controllers.BaseAuthController
 }
 
+// EdbInfoSearch
 // @Title 新增指标-查询指标信息接口
 // @Description 新增指标-查询指标信息接口
 // @Param   Source   query   int  true       "来源:1:同花顺,2:wind,3:彭博"
@@ -1594,6 +1595,7 @@ func (this *EdbInfoController) EdbInfoSearch() {
 	br.Data = resp
 }
 
+// EdbInfoList
 // @Title 指标列表接口
 // @Description 指标列表接口
 // @Param   PageSize   query   int  true       "每页数据条数"
@@ -1750,6 +1752,7 @@ func (this *EdbInfoController) EdbInfoList() {
 	br.Data = resp
 }
 
+// EdbInfoAdd
 // @Title 新增指标接口
 // @Description 新增指标接口
 // @Param	request	body data_manage.AddEdbInfoReq true "type json string"
@@ -1886,6 +1889,7 @@ func (this *EdbInfoController) EdbInfoAdd() {
 	br.IsAddLog = true
 }
 
+// EdbInfoEdit
 // @Title 编辑指标接口
 // @Description 编辑指标接口
 // @Success 200 {object} data_manage.EditEdbInfoReq
@@ -2036,6 +2040,7 @@ func (this *EdbInfoController) EdbInfoEdit() {
 	br.IsAddLog = true
 }
 
+// EdbEnInfoEdit
 // @Title 编辑指标英文信息接口
 // @Description 编辑指标英文信息接口
 // @Success 200 {object} data_manage.EditEdbEnInfoReq
@@ -2141,6 +2146,7 @@ func (this *EdbInfoController) EdbEnInfoEdit() {
 	br.IsAddLog = true
 }
 
+// EdbInfoNewest
 // @Title 获取最新指标接口
 // @Description 获取最新指标接口
 // @Success 200 {object} data_manage.EdbInfoList
@@ -2163,6 +2169,7 @@ func (this *EdbInfoController) EdbInfoNewest() {
 	br.Data = item
 }
 
+// EdbInfoRefresh
 // @Title 指标刷新接口
 // @Description 指标刷新接口
 // @Param   EdbInfoId   query   int  true       "指标id"
@@ -2213,6 +2220,7 @@ func (this *EdbInfoController) EdbInfoRefresh() {
 	br.IsAddLog = true
 }
 
+// EdbInfoMove
 // @Title 移动指标接口
 // @Description 移动指标接口
 // @Success 200 {object} data_manage.MoveEdbInfoReq
@@ -2374,6 +2382,7 @@ func (this *EdbInfoController) EdbInfoMove() {
 	br.Msg = "移动成功"
 }
 
+// EdbInfoDetail
 // @Title 获取指标详情
 // @Description 获取指标详情接口
 // @Param   EdbInfoId   query   int  true       "指标id"
@@ -2829,6 +2838,7 @@ func searchEdbInfoFilter(condition string, pars []interface{}, i int, ch chan ma
 	return
 }
 
+// EdbInfoAllRefresh
 // @Title 指标全部刷新接口
 // @Description 指标全部刷新接口
 // @Param   EdbInfoId   query   int  true       "指标id"
@@ -2883,6 +2893,7 @@ func (this *EdbInfoController) EdbInfoAllRefresh() {
 	}
 }
 
+// EdbInfoData
 // @Title 获取指标数据
 // @Description 获取指标数据
 // @Param   EdbInfoId   query   int  true       "指标ID"
@@ -2944,6 +2955,7 @@ func (this *ChartInfoController) EdbInfoData() {
 	br.Data = resp
 }
 
+// EdbInfoReplaceCheck
 // @Title 指标一键刷新接口
 // @Description 指标一键刷新接口
 // @Success Ret=200 更新成功
@@ -3546,7 +3558,7 @@ func (this *EdbInfoController) MoveEdbChartUser() {
 	br.Msg = "修改成功"
 }
 
-// MoveEdbChartList
+// EdbChartClassifyList
 // @Title 获取指标/图表分类列表数据接口
 // @Description 获取指标/图表分类列表数据接口
 // @Param   Source   query   int  false       "来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库"
@@ -3981,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      query   string  false       "频度"
 // @Success 200 {object} data_manage.EdbInfoList
 // @router /edb_info/date_data [get]
 func (this *EdbInfoController) GetEdbDateData() {
@@ -4013,14 +4024,159 @@ func (this *EdbInfoController) GetEdbDateData() {
 		br.ErrMsg = fmt.Sprint("获取指标信息失败,Err:", err.Error())
 		return
 	}
-	val, err := data.GetDateData(edbInfo, date)
+	startDate := date
+	endDate := date
+
+	dateType := "day"
+	//如果填写的是月度日期
+	if strings.Count(date, "-") == 1 {
+		startDate = date + "-01"
+		endDate = ``
+		dateType = "month"
+	}
+	dataItem, err := data.GetDateData(edbInfo, startDate, endDate)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = fmt.Sprint("获取指数据失败,Err:", err.Error())
 		return
 	}
+	val := ``
+	if dataItem != nil {
+		switch dateType {
+		case "month":
+			dateTime, _ := time.ParseInLocation(utils.FormatDate, dataItem.DataTime, time.Local)
+			dateTimeStr := dateTime.Format(utils.FormatYearMonthDate)
+			if dateTimeStr != date {
+				val = ``
+			}
+		}
+		val = fmt.Sprint(dataItem.Value)
+	}
+
 	br.Ret = 200
 	br.Success = true
 	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
+	}
+	dataList := make([]*data_manage.EdbDataList, 0)
+
+	startDate := date
+	// 指定日期的类型
+	dateType := "day"
+	//如果填写的是月度日期
+	if strings.Count(date, "-") == 1 {
+		startDate = date + "-01"
+		dateType = "month"
+	}
+
+	// 后面的数据
+	afterList, err := data.GetEdbBeforeAndAfterDateData(edbInfo, startDate, "", 2, num)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取后面的指数据失败,Err:", err.Error())
+		return
+	}
+
+	// 当前日期
+	var currDate string
+	lenBeforeList := len(afterList)
+	if lenBeforeList <= 0 {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "所选指标所选日期无值"
+		br.Data = dataList
+		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 = dataList
+			return
+		}
+	}
+
+	// 前面的数据
+	beforeList, err := data.GetEdbBeforeAndAfterDateData(edbInfo, "", currDate, 1, num)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprint("获取前面的指数据失败,Err:", err.Error())
+		return
+	}
+
+	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]
+	}
+
+	resp := data_manage.BeforeAndAfterDateDataResp{
+		List: dataList,
+		Date: currDate,
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 112 - 96
controllers/data_manage/excel_info.go

@@ -32,14 +32,14 @@ type ExcelInfoController struct {
 // @Param	request	body request.AddExcelInfoReq true "type json string"
 // @Success 200 {object} response.AddExcelInfoResp
 // @router /excel_info/add [post]
-func (this *ExcelInfoController) Add() {
+func (c *ExcelInfoController) Add() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -56,11 +56,11 @@ func (this *ExcelInfoController) Add() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	var req request.AddExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -211,9 +211,9 @@ func (this *ExcelInfoController) Add() {
 	//		SysUserRealName: sysUser.RealName,
 	//		UniqueCode:      excelInfo.UniqueCode,
 	//		CreateTime:      time.Now(),
-	//		Content:         string(this.Ctx.Input.RequestBody),
+	//		Content:         string(c.Ctx.Input.RequestBody),
 	//		Status:          "新增表格",
-	//		Method:          this.Ctx.Input.URI(),
+	//		Method:          c.Ctx.Input.URI(),
 	//	}
 	//	go data_manage.AddExcelInfoLog(excelLog)
 	//}
@@ -235,13 +235,13 @@ func (this *ExcelInfoController) Add() {
 // @Param   AdminId   query   int  false       "创建人id"
 // @Success 200 {object} response.ExcelListResp
 // @router /excel_info/list [get]
-func (this *ExcelInfoController) List() {
+func (c *ExcelInfoController) List() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -249,12 +249,12 @@ func (this *ExcelInfoController) List() {
 		return
 	}
 
-	excelClassifyId, _ := this.GetInt("ExcelClassifyId")
+	excelClassifyId, _ := c.GetInt("ExcelClassifyId")
 
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	keyword := this.GetString("Keyword")
-	adminId, _ := this.GetInt("AdminId")
+	pageSize, _ := c.GetInt("PageSize")
+	currentIndex, _ := c.GetInt("CurrentIndex")
+	keyword := c.GetString("Keyword")
+	adminId, _ := c.GetInt("AdminId")
 
 	var total int
 	page := paging.GetPaging(currentIndex, pageSize, total)
@@ -327,13 +327,13 @@ func (this *ExcelInfoController) List() {
 // @Param   ExcelInfoId   query   int  true       "表格id"
 // @Success 200 {object} data_manage.ExcelInfo
 // @router /excel_info/detail [get]
-func (this *ExcelInfoController) Detail() {
+func (c *ExcelInfoController) Detail() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -341,7 +341,7 @@ func (this *ExcelInfoController) Detail() {
 		return
 	}
 
-	excelInfoId, _ := this.GetInt("ExcelInfoId")
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
 	if excelInfoId <= 0 {
 		br.Msg = "请选择表格"
 		br.ErrMsg = "ExcelInfoId未传"
@@ -372,14 +372,14 @@ func (this *ExcelInfoController) Detail() {
 // @Param	request	body request.EditExcelInfoReq true "type json string"
 // @Success 200 {object} response.AddExcelInfoResp
 // @router /excel_info/edit [post]
-func (this *ExcelInfoController) Edit() {
+func (c *ExcelInfoController) Edit() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -388,7 +388,7 @@ func (this *ExcelInfoController) Edit() {
 	}
 	deleteCache := true
 	var req request.EditExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -408,7 +408,7 @@ func (this *ExcelInfoController) Edit() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	req.ExcelName = strings.Trim(req.ExcelName, " ")
@@ -582,14 +582,14 @@ func (this *ExcelInfoController) Edit() {
 // @Param	request	body request.MoveExcelInfoReq true "type json string"
 // @Success Ret=200 移动成功
 // @router /excel_info/move [post]
-func (this *ExcelInfoController) Move() {
+func (c *ExcelInfoController) Move() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -598,7 +598,7 @@ func (this *ExcelInfoController) Move() {
 	}
 
 	var req request.MoveExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -752,9 +752,9 @@ func (this *ExcelInfoController) Move() {
 	//	ExcelLog.SysUserRealName = sysUser.RealName
 	//	ExcelLog.UniqueCode = ExcelInfo.UniqueCode
 	//	ExcelLog.CreateTime = time.Now()
-	//	ExcelLog.Content = string(this.Ctx.Input.RequestBody)
+	//	ExcelLog.Content = string(c.Ctx.Input.RequestBody)
 	//	ExcelLog.Status = "移动表格"
-	//	ExcelLog.Method = this.Ctx.Input.URL()
+	//	ExcelLog.Method = c.Ctx.Input.URL()
 	//	go data_manage.AddExcelInfoLog(ExcelLog)
 	//}
 
@@ -770,16 +770,16 @@ func (this *ExcelInfoController) Move() {
 // @Param	request	body request.DeleteExcelInfoReq true "type json string"
 // @Success Ret=200 删除成功
 // @router /excel_info/delete [post]
-func (this *ExcelInfoController) Delete() {
+func (c *ExcelInfoController) Delete() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
 	resp := response.AddExcelInfoResp{}
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -788,7 +788,7 @@ func (this *ExcelInfoController) Delete() {
 	}
 
 	var req request.DeleteExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -911,14 +911,14 @@ func (this *ExcelInfoController) Delete() {
 // @Param	request	body request.AddExcelDraftReq true "type json string"
 // @Success Ret=200 添加成功
 // @router /excel_info/draft/add [post]
-func (this *ExcelInfoController) AddDraft() {
+func (c *ExcelInfoController) AddDraft() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -928,7 +928,7 @@ func (this *ExcelInfoController) AddDraft() {
 
 	var req request.AddExcelDraftReq
 
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1010,20 +1010,20 @@ func (this *ExcelInfoController) AddDraft() {
 // @Param   UniqueCode   query   string  true       "表格code"
 // @Success 200 {object} response.ExcelTableDetailResp
 // @router /excel_info/table_data [get]
-func (this *ExcelInfoController) GetExcelTableData() {
+func (c *ExcelInfoController) GetExcelTableData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
 		br.Ret = 408
 		return
 	}
-	uniqueCode := this.GetString("UniqueCode")
+	uniqueCode := c.GetString("UniqueCode")
 
 	var err error
 	if uniqueCode == `` {
@@ -1134,7 +1134,7 @@ func UpdateExcelInfoFileUrl(excelInfo *data_manage.ExcelInfo) {
 	//_, err = luckySheetData.GetTableDataByLuckySheetDataStr()
 	downloadFilePath, err := luckySheetData.ToExcel()
 	defer func() {
-		os.Remove(downloadFilePath)
+		_ = os.Remove(downloadFilePath)
 	}()
 	if err != nil {
 		fmt.Println("err:", err)
@@ -1178,14 +1178,14 @@ func UpdateExcelInfoFileUrl(excelInfo *data_manage.ExcelInfo) {
 // @Description 公式计算接口
 // @Param	request	body request.CalculateReq true "type json string"
 // @router /excel_info/table/calculate [post]
-func (this *ExcelInfoController) Calculate() {
+func (c *ExcelInfoController) Calculate() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1194,7 +1194,7 @@ func (this *ExcelInfoController) Calculate() {
 	}
 
 	var req request.CalculateReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1260,15 +1260,16 @@ func (this *ExcelInfoController) Calculate() {
 // @Description 获取未来日期数据接口
 // @Param   EdbInfoId   query   int  true       "指标id"
 // @Param   Num   query   int  true       "默认期数"
+// @Param   SortType   query   string  true       "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒序`,不传默认倒序"
 // @router /excel_info/table/first_edb_data_list [get]
-func (this *ExcelInfoController) GetFirstEdbData() {
+func (c *ExcelInfoController) GetFirstEdbData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1276,8 +1277,9 @@ func (this *ExcelInfoController) GetFirstEdbData() {
 		return
 	}
 
-	edbInfoId, _ := this.GetInt("EdbInfoId")
-	num, _ := this.GetInt("Num")
+	edbInfoId, _ := c.GetInt("EdbInfoId")
+	num, _ := c.GetInt("Num")
+	sortType := c.GetString("SortType")
 
 	if edbInfoId <= 0 {
 		br.Msg = "请选择指标"
@@ -1304,6 +1306,13 @@ func (this *ExcelInfoController) GetFirstEdbData() {
 		return
 	}
 
+	// 默认是倒序返回的数据,如果要正序的话,那么翻转下就好了
+	if sortType == "asc" {
+		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 = "获取成功"
@@ -1318,14 +1327,14 @@ func (this *ExcelInfoController) GetFirstEdbData() {
 // @Description 获取未来日期数据接口
 // @Param	request	body request.GetOtherEdbDateDataReq true "type json string"
 // @router /excel_info/table/other_edb_data_list [post]
-func (this *ExcelInfoController) GetOtherEdbData() {
+func (c *ExcelInfoController) GetOtherEdbData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1334,7 +1343,7 @@ func (this *ExcelInfoController) GetOtherEdbData() {
 	}
 
 	var req request.GetOtherEdbDateDataReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1365,6 +1374,13 @@ func (this *ExcelInfoController) GetOtherEdbData() {
 		return
 	}
 
+	// 默认是倒序返回的数据,如果要正序的话,那么翻转下就好了
+	if req.SortType == "asc" {
+		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 = "获取成功"
@@ -1379,14 +1395,14 @@ func (this *ExcelInfoController) GetOtherEdbData() {
 // @Description 获取未来日期数据接口
 // @Param	request	body request.GetFutureDateDataReq true "type json string"
 // @router /excel_info/table/future_date_list [post]
-func (this *ExcelInfoController) GetFutureDateData() {
+func (c *ExcelInfoController) GetFutureDateData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1395,7 +1411,7 @@ func (this *ExcelInfoController) GetFutureDateData() {
 	}
 
 	var req request.GetFutureDateDataReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1549,14 +1565,14 @@ func (this *ExcelInfoController) GetFutureDateData() {
 // @Description 获取历史日期数据接口
 // @Param	request	body request.GetFutureDateDataReq true "type json string"
 // @router /excel_info/table/history_date_list [post]
-func (this *ExcelInfoController) GetHistoryDateData() {
+func (c *ExcelInfoController) GetHistoryDateData() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1565,7 +1581,7 @@ func (this *ExcelInfoController) GetHistoryDateData() {
 	}
 
 	var req request.GetHistoryDateDataReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1661,14 +1677,14 @@ func (this *ExcelInfoController) GetHistoryDateData() {
 // @Description 刷新接口
 // @Param   ExcelInfoId   query   int  true       "表格id"
 // @router /excel_info/table/refresh [get]
-func (this *ExcelInfoController) Refresh() {
+func (c *ExcelInfoController) Refresh() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
 
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1676,7 +1692,7 @@ func (this *ExcelInfoController) Refresh() {
 		return
 	}
 
-	excelInfoId, _ := this.GetInt("ExcelInfoId")
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
 	if excelInfoId <= 0 {
 		br.Msg = "请选择表格"
 		br.ErrMsg = "ExcelInfoId未传"
@@ -1741,13 +1757,13 @@ func (this *ExcelInfoController) Refresh() {
 // @Param   ExcelInfoId   query   int  true       "表格id"
 // @Success 200 {object} data_manage.ExcelInfo
 // @router /excel_info/table/download [get]
-func (this *ExcelInfoController) Download() {
+func (c *ExcelInfoController) Download() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1755,8 +1771,8 @@ func (this *ExcelInfoController) Download() {
 		return
 	}
 
-	excelInfoId, _ := this.GetInt("ExcelInfoId")
-	uniqueCode := this.GetString("UniqueCode")
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
+	uniqueCode := c.GetString("UniqueCode")
 	if excelInfoId <= 0 && uniqueCode == `` {
 		br.Msg = "请选择表格"
 		br.ErrMsg = "ExcelInfoId和UniqueCode都未传"
@@ -1840,11 +1856,11 @@ func (this *ExcelInfoController) Download() {
 		return
 	}
 	defer func() {
-		os.Remove(downloadFilePath)
+		_ = os.Remove(downloadFilePath)
 	}()
 
 	downloadFileName := excelInfo.ExcelName + ".xlsx"
-	this.Ctx.Output.Download(downloadFilePath, downloadFileName)
+	c.Ctx.Output.Download(downloadFilePath, downloadFileName)
 
 	br.Ret = 200
 	br.Success = true
@@ -1858,13 +1874,13 @@ func (this *ExcelInfoController) Download() {
 // @Param	request	body request.EditExcelInfoReq true "type json string"
 // @Success 200 {object} response.AddExcelInfoResp
 // @router /excel_info/copy [post]
-func (this *ExcelInfoController) Copy() {
+func (c *ExcelInfoController) Copy() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
+		c.Data["json"] = br
+		c.ServeJSON()
 	}()
-	sysUser := this.SysUser
+	sysUser := c.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
 		br.ErrMsg = "请登录,SysUser Is Empty"
@@ -1874,7 +1890,7 @@ func (this *ExcelInfoController) Copy() {
 
 	deleteCache := true
 	var req request.CopyExcelInfoReq
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
@@ -1894,7 +1910,7 @@ func (this *ExcelInfoController) Copy() {
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
 		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
-		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
 	req.ExcelName = strings.Trim(req.ExcelName, " ")

+ 2 - 2
controllers/data_manage/supply_analysis/variety_plant.go

@@ -14,8 +14,8 @@ import (
 )
 
 // PlantList
-// @Title 商品价格图表分类列表
-// @Description 商品价格图表分类列表接口
+// @Title 装置列表
+// @Description 装置列表
 // @Param   VarietyId   query   int  true       "品种id"
 // @Success 200 {object} response.VarietyListResp
 // @router /variety/plant/list [get]

+ 1 - 0
models/data_manage/chart_info.go

@@ -320,6 +320,7 @@ type EdbDataList struct {
 	Value         float64 `description:"数据值"`
 }
 
+// GetEdbDataList 获取指标的数据(日期正序返回)
 func GetEdbDataList(source, endInfoId int, startDate, endDate string) (list []*EdbDataList, err error) {
 	tableName := GetEdbDataTableName(source)
 	if tableName == "" {

+ 6 - 0
models/data_manage/edb_info.go

@@ -1756,3 +1756,9 @@ type TraceEdbInfoResp struct {
 	ClassifyId  int                `description:"分类ID"`
 	Child       []TraceEdbInfoResp `description:"下级来源"`
 }
+
+// BeforeAndAfterDateDataResp 前后几期数据
+type BeforeAndAfterDateDataResp struct {
+	List []*EdbDataList `description:"list"`
+	Date string         `description:"实际日期"`
+}

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

@@ -58,6 +58,7 @@ type CalculateReq struct {
 // GetOtherEdbDateDataReq 获取其他指标的指定日期的数据
 type GetOtherEdbDateDataReq struct {
 	EdbInfoId int      `description:"指标id"`
+	SortType  string   `description:"如何排序,是正序还是倒序,枚举值:asc 正序,desc 倒序,不传默认倒序"`
 	DateList  []string `description:"日期列表,从小到大"`
 }
 
@@ -106,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

@@ -1978,6 +1978,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",

+ 52 - 4
services/data/edb_data.go

@@ -334,13 +334,13 @@ func TbzDiv(a, b float64) float64 {
 }
 
 // GetDateData 获取指标的单个日期的值
-func GetDateData(edbInfo *data_manage.EdbInfo, date string) (val string, err error) {
+func GetDateData(edbInfo *data_manage.EdbInfo, startDate, endDate string) (item *data_manage.EdbDataList, err error) {
 	var dataList []*data_manage.EdbDataList
 	switch edbInfo.EdbInfoType {
 	case 0:
-		dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.EdbInfoId, date, date)
+		dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.EdbInfoId, startDate, endDate)
 	case 1:
-		_, dataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, date, date, false)
+		_, dataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, startDate, endDate, false)
 	default:
 		err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
 
@@ -353,7 +353,55 @@ func GetDateData(edbInfo *data_manage.EdbInfo, date string) (val string, err err
 		return
 	}
 
-	val = fmt.Sprint(dataList[0].Value)
+	item = dataList[0]
+
+	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
 }

+ 57 - 10
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
 		}
 
@@ -1215,7 +1240,7 @@ func GetMixedTableCellData(config [][]request.MixedTableCellDataReq) (newMixedTa
 		for _, cell := range row {
 			if cell.DataType == 2 {
 				edbInfoIdList = append(edbInfoIdList, cell.EdbInfoId)
-			} else if cell.DataType == 4 {
+			} else if utils.InArrayByInt([]int{4, 5}, cell.DataType) {
 				dataEdbInfoIdList = append(dataEdbInfoIdList, cell.EdbInfoId)
 			}
 		}
@@ -1228,8 +1253,10 @@ func GetMixedTableCellData(config [][]request.MixedTableCellDataReq) (newMixedTa
 
 	// 指标信息map
 	edbInfoMap := make(map[int]*data_manage.EdbInfo)
-	// 指标数据map
+	// 日度指标数据map
 	edbDataListMap := make(map[int]map[string]float64)
+	// 月度指标数据map
+	edbMonthDataListMap := make(map[int]map[string]float64)
 	for _, edbInfo := range edbInfoList {
 		edbInfoMap[edbInfo.EdbInfoId] = edbInfo
 
@@ -1244,10 +1271,18 @@ func GetMixedTableCellData(config [][]request.MixedTableCellDataReq) (newMixedTa
 		}
 
 		dateValMap := make(map[string]float64)
+		monthValMap := make(map[string]float64)
 		for _, data := range dataList {
+			// 日度数据
 			dateValMap[data.DataTime] = data.Value
+			// 月度数据(取该月份的第一个数据)
+			yearMonth := strings.Join(strings.Split(data.DataTime, "-")[0:2], "-")
+			if _, ok := monthValMap[yearMonth]; !ok {
+				monthValMap[yearMonth] = data.Value
+			}
 		}
 		edbDataListMap[edbInfo.EdbInfoId] = dateValMap
+		edbMonthDataListMap[edbInfo.EdbInfoId] = monthValMap
 	}
 
 	for k, row := range newMixedTableCellDataList {
@@ -1256,11 +1291,23 @@ func GetMixedTableCellData(config [][]request.MixedTableCellDataReq) (newMixedTa
 				if edbInfo, ok := edbInfoMap[cell.EdbInfoId]; ok {
 					cell.ShowValue = edbInfo.EdbName
 				}
-			} else if cell.DataType == 4 {
-				if dateValMap, ok := edbDataListMap[cell.EdbInfoId]; ok {
-					if val, ok2 := dateValMap[cell.DataTime]; ok2 {
-						cell.ShowValue = fmt.Sprint(val)
+			} else if utils.InArrayByInt([]int{4, 5}, cell.DataType) {
+				tmpDateList := strings.Split(cell.DataTime, "-")
+				tmpDateValMap := make(map[string]float64)
+				if len(tmpDateList) == 2 {
+					//月度数据
+					if dateValMap, ok := edbMonthDataListMap[cell.EdbInfoId]; ok {
+						tmpDateValMap = dateValMap
 					}
+				} else {
+					// 日度数据
+					if dateValMap, ok := edbDataListMap[cell.EdbInfoId]; ok {
+						tmpDateValMap = dateValMap
+					}
+
+				}
+				if val, ok2 := tmpDateValMap[cell.DataTime]; ok2 {
+					cell.ShowValue = fmt.Sprint(val)
 				}
 			}
 

+ 2 - 2
services/data/predict_edb_info.go

@@ -889,7 +889,7 @@ func getPredictEdbDayList(startDate, endDate time.Time, frequency, dataDateType
 	return
 }
 
-// GetPredictDataListByPredictEdbInfoId 根据预测指标id获取预测指标的数据
+// GetPredictDataListByPredictEdbInfoId 根据预测指标id获取预测指标的数据(日期正序返回)
 func GetPredictDataListByPredictEdbInfoId(edbInfoId int, startDate, endDate string, isTimeBetween bool) (edbInfo *data_manage.EdbInfo, dataList []*data_manage.EdbDataList, sourceEdbInfoItem *data_manage.EdbInfo, predictEdbConf *data_manage.PredictEdbConf, err error, errMsg string) {
 	edbInfo, err = data_manage.GetEdbInfoById(edbInfoId)
 	if err != nil {
@@ -952,7 +952,7 @@ func GetPredictDataListByPredictEdbInfo(edbInfo *data_manage.EdbInfo, startDate,
 
 	endDateStr := edbInfo.EndDate //预测指标的结束日期
 
-	if isTimeBetween && endDate != `` { //如果是时间区间,那么
+	if isTimeBetween && endDate != `` { //如果是时间区间,同时截止日期不为空的情况,那么
 		reqEndDateTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
 		endDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfo.EndDate, time.Local)
 		// 如果选择的时间区间结束日期 晚于 当天,那么预测数据截止到当天