xyxie 7 mēneši atpakaļ
vecāks
revīzija
19f6731895

+ 48 - 11
controllers/data_manage/usda_fas_data.go

@@ -171,22 +171,58 @@ func (this *BaseFromUsdaFasController) UsdaFasIndexData() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+
 	edbCodeList := make([]string, 0)
 	for _, v := range UsdaFasList {
 		edbCodeList = append(edbCodeList, v.IndexCode)
 	}
-	edbInfoList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_USDA_FAS, edbCodeList)
+	edbInfoMap := make(map[string]*data_manage.EdbInfo)
+	dataMap := make(map[string][]*data_manage.BaseFromUsdaFasData)
+	if len(edbCodeList) > 0 {
+		edbInfoList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_USDA_FAS, edbCodeList)
+		if err != nil {
+			br.Msg = "获取数据源失败"
+			br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range edbInfoList {
+			edbInfoMap[v.EdbCode] = v
+		}
+		// 首先对分类下的指标按照日期进行分页,再针对日期,进行排序
+		dataTimes, err := data_manage.GetUsdaFasIndexDataTimePageByCodes(edbCodeList, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "获取指标数据日期信息失败,Err:" + err.Error()
+			return
+		}
+		if len(dataTimes) > 0 {
+			startDate := dataTimes[len(dataTimes)-1]
+			endDate := dataTimes[0]
+			// 把截止日往后加1天
+			endDateT, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+			endDate = endDateT.AddDate(0, 0, 1).Format(utils.FormatDate)
+			dataList, e := data_manage.GetUsdaFasIndexDataByDataTime(edbCodeList, startDate, endDate)
+			if e != nil {
+				br.Msg = "获取数据失败"
+				br.ErrMsg = "获取指标数据失败,Err:" + e.Error()
+				return
+			}
+			//将数据按照指标进行分类
+			for _, v := range dataList {
+				dataMap[v.IndexCode] = append(dataMap[v.IndexCode], v)
+			}
+		}
+	}
+	total, err := data_manage.GetUsdaFasIndexDataTimePageCount(edbCodeList)
 	if err != nil {
-		br.Msg = "获取数据源失败"
+		br.Msg = "获取数据失败"
 		br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
 		return
 	}
-	edbInfoMap := make(map[string]*data_manage.EdbInfo)
-	for _, v := range edbInfoList {
-		edbInfoMap[v.EdbCode] = v
-	}
+	page := paging.GetPaging(currentIndex, pageSize, total)
 
 	resultList := make([]*data_manage.BaseFromUsdaFasIndexList, 0)
+
 	for _, v := range UsdaFasList {
 		product := new(data_manage.BaseFromUsdaFasIndexList)
 		product.BaseFromUsdaFasIndexId = v.BaseFromUsdaFasIndexId
@@ -200,7 +236,7 @@ func (this *BaseFromUsdaFasController) UsdaFasIndexData() {
 			product.EdbExist = 1
 		}
 
-		total, err := data_manage.GetUsdaFasIndexDataCount(v.IndexCode)
+		/*total, err := data_manage.GetUsdaFasIndexDataCount(v.IndexCode)
 		if err != nil {
 			br.Msg = "获取数据失败"
 			br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
@@ -212,11 +248,12 @@ func (this *BaseFromUsdaFasController) UsdaFasIndexData() {
 			br.Msg = "获取数据失败"
 			br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
 			return
+		}*/
+		dataListTmp, ok := dataMap[v.IndexCode]
+		if !ok {
+			dataListTmp = make([]*data_manage.BaseFromUsdaFasData, 0)
 		}
-		if dataList == nil {
-			dataList = make([]*data_manage.BaseFromUsdaFasData, 0)
-		}
-		product.DataList = dataList
+		product.DataList = dataListTmp
 		product.Paging = page
 		resultList = append(resultList, product)
 	}

+ 17 - 3
models/data_manage/base_from_usda_fas.go

@@ -108,10 +108,24 @@ func GetUsdaFasIndexDataCount(indexCode string) (count int, err error) {
 	return
 }
 
-func GetUsdaFasIndexData(indexCode string, startSize, pageSize int) (items []*BaseFromUsdaFasData, err error) {
+func GetUsdaFasIndexDataByDataTime(indexCodes []string, startDate, endDate string) (items []*BaseFromUsdaFasData, err error) {
 	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT *  FROM base_from_usda_fas_data WHERE index_code=? ORDER BY data_time DESC LIMIT ?,? `
-	_, err = o.Raw(sql, indexCode, startSize, pageSize).QueryRows(&items)
+	sql := ` SELECT *  FROM base_from_usda_fas_data WHERE  index_code in (` + utils.GetOrmInReplace(len(indexCodes)) + `) and data_time >=? and data_time <? ORDER BY data_time DESC `
+	_, err = o.Raw(sql, indexCodes, startDate, endDate).QueryRows(&items)
+	return
+}
+
+func GetUsdaFasIndexDataTimePageByCodes(indexCodes []string, startSize, pageSize int) (dataTimes []string, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT data_time FROM base_from_usda_fas_data WHERE index_code in (` + utils.GetOrmInReplace(len(indexCodes)) + `) GROUP BY data_time ORDER BY data_time DESC LIMIT ?,? `
+	_, err = o.Raw(sql, indexCodes, startSize, pageSize).QueryRows(&dataTimes)
+	return
+}
+
+func GetUsdaFasIndexDataTimePageCount(indexCodes []string) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(1) AS count  FROM base_from_usda_fas_data WHERE index_code in (` + utils.GetOrmInReplace(len(indexCodes)) + `) GROUP BY data_time `
+	err = o.Raw(sql, indexCodes).QueryRow(&count)
 	return
 }