Roc 3 years ago
parent
commit
7f2ee8f312

+ 663 - 0
controllers/base_from_edb.go

@@ -0,0 +1,663 @@
+package controllers
+
+import (
+	"fmt"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/utils"
+	"strings"
+	"time"
+)
+
+type EdbController struct {
+	BaseAuthController
+}
+
+// Search
+// @Title 新增指标-查询指标信息接口
+// @Description 查询指标信息接口
+// @Params Source query int true "指标来源;1:同花顺;2:Wind;3:彭博 ..."
+// @Params EdbCode query string true "指标编码"
+// @Success 200 {object} data_manage.EditEdbInfoReq
+// @router /add [post]
+func (this *ThsController) Search() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source, _ := this.GetInt("Source")
+	edbCode := this.GetString("EdbCode")
+	edbCode = strings.Trim(edbCode, "\t")
+	edbCode = strings.Trim(edbCode, " ")
+	edbCode = strings.Replace(edbCode, "\t", "", -1)
+	if source <= 0 {
+		br.Msg = "无效的数据来源"
+		return
+	}
+	if edbCode == "" {
+		br.Msg = "请输入指标ID"
+		return
+	}
+
+	resp := new(models.EdbInfoSearchResp)
+	//判断指标是否存在
+	item, err := models.GetEdbInfoByEdbCode(source, edbCode)
+	if err != nil {
+		if err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "根据指标编码获取指标信息失败,Err:" + err.Error()
+			return
+		}
+	}
+
+	{
+
+		dateNow := time.Now()
+
+		startDate := dateNow.AddDate(-30, 0, 0).Format(utils.FormatDate)
+
+		searchItem := new(models.EdbInfoSearch)
+		if source == utils.DATA_SOURCE_THS {
+			dataItems, err := models.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_THS, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取Ths已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			fmt.Println("ths len:", len(dataItems))
+			if len(dataItems) > 0 {
+				fmt.Println("ths data exist")
+				searchItem.EdbCode = edbCode
+				edbInfoMaxAndMinInfo, err := models.GetEdbInfoMaxAndMinInfo(source, edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取Ths日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = edbInfoMaxAndMinInfo.MinDate
+				searchItem.EndDate = edbInfoMaxAndMinInfo.MaxDate
+			} else {
+				endDate := dateNow.AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
+				searchItem, err = data.GetEdbDataByThs(edbCode, startDate, endDate)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,Err:" + err.Error()
+					return
+				}
+			}
+		} else if source == utils.DATA_SOURCE_WIND {
+			fmt.Println("wind data exist")
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_WIND, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取Wind已存在信息失败,Err:" + err.Error()
+				return
+			}
+			fmt.Println("wind dataItems:", len(dataItems))
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataWindMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取wind日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				endDate := dateNow.Format(utils.FormatDate)
+				searchItem, err = data.GetEdbDataByWind(edbCode, startDate, endDate)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "wind 获取失败,Err:" + err.Error()
+					return
+				}
+			}
+		} else if source == utils.DATA_SOURCE_PB {
+			fmt.Println("pb data exist")
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_PB, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取Pb已存在信息失败,Err:" + err.Error()
+				return
+			}
+			fmt.Println("pb dataItems:", len(dataItems))
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataPbMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取Pb日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				endDate := dateNow.AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDateUnSpace)
+				startDate := dateNow.AddDate(-30, 0, 0).Format(utils.FormatDateUnSpace)
+				searchItem, err = data.GetEdbDataByPb(edbCode, startDate, endDate)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "彭博数据获取失败,Err:" + err.Error()
+					return
+				}
+			}
+		} else if source == utils.DATA_SOURCE_MANUAL { //手工数据指标
+			endDate := dateNow.AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_MANUAL, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取Ths已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			fmt.Println("ths len:", len(dataItems))
+			if len(dataItems) > 0 {
+				fmt.Println("ths data exist")
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataManualMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取Ths日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				searchItem, err = data_manage.GetEdbDataByManual(edbCode, startDate, endDate)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,Err:" + err.Error()
+					return
+				}
+			}
+			//获取指标信息
+			manualInfo, err := models.GetEdbinfoByTradeCode(edbCode)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取手工指标详情失败,Err:" + err.Error()
+				return
+			}
+			if manualInfo != nil {
+				searchItem.Frequency = manualInfo.Frequency
+				searchItem.Unit = manualInfo.Unit
+				searchItem.EdbName = manualInfo.SecName
+			}
+
+		} else if source == utils.DATA_SOURCE_LZ {
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_LZ, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取隆众已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			fmt.Println("ths len:", len(dataItems))
+			if len(dataItems) > 0 {
+				fmt.Println("ths data exist")
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataLzMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取隆众日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				endDate := dateNow.AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
+				searchItem, err = data_manage.GetEdbDataByLz(edbCode, startDate, endDate)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取隆众数据失败,Err:" + err.Error()
+					return
+				}
+			}
+			//获取指标信息
+			lzInfo, err := data_manage.GetLongzhongSurveyProductByCode(edbCode)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取手工指标详情失败,Err:" + err.Error()
+				return
+			}
+			if lzInfo != nil {
+				frequency := lzInfo.Frequency
+				var frequencyStr string
+				if frequency == 1 {
+					frequencyStr = "日度"
+				} else if frequency == 2 {
+					frequencyStr = "周度"
+				} else if frequency == 3 {
+					frequencyStr = "月度"
+				} else if frequency == 4 {
+					frequencyStr = "季度"
+				} else if frequency == 5 {
+					frequencyStr = "年度"
+				} else if frequency == 99 {
+					frequencyStr = "无固定频率"
+				}
+				searchItem.Frequency = frequencyStr
+				searchItem.Unit = lzInfo.UnitName
+				searchItem.EdbName = lzInfo.SampleName + lzInfo.BreedName + lzInfo.QuotaName
+			}
+		} else if source == utils.DATA_SOURCE_YS { //有色网
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_YS, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取Ys已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			fmt.Println("dataItems:", len(dataItems))
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataYsMaxAndMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取YS日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				endDate := dateNow.AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
+				searchItem, err = data_manage.GetEdbDataByYs(edbCode, startDate, endDate)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,GetEdbDataByYs Err:" + err.Error()
+					return
+				}
+				if searchItem.StartDate == "" {
+					minDate, maxDate, _ := data_manage.GetEdbDataYsMaxAndMinDate(edbCode)
+					searchItem.StartDate = minDate
+					searchItem.EndDate = maxDate
+				}
+			}
+
+			//获取指标信息
+			smmInfo, err := data_manage.GetBaseFromSmmIndexByIndexCode(edbCode)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取有色指标详情失败,Err:" + err.Error()
+				return
+			}
+			if smmInfo != nil {
+				searchItem.Frequency = smmInfo.Frequency
+				searchItem.Unit = smmInfo.Unit
+				searchItem.EdbName = smmInfo.IndexName
+			}
+
+		} else if source == utils.DATA_SOURCE_GL { //钢联
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取钢联已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataGlMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取钢联日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				endDate := dateNow.AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
+				searchItem, err = data_manage.GetEdbDataByGl(edbCode, startDate, endDate)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取钢联数据失败,Err:" + err.Error()
+					return
+				}
+			}
+			//获取指标信息
+			glInfo, err := data_manage.GetGlIndexByCode(edbCode)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取钢联指标详情失败,Err:" + err.Error()
+				return
+			}
+			if glInfo != nil {
+				searchItem.Frequency = glInfo.FrequencyName
+				searchItem.Unit = glInfo.UnitName
+				searchItem.EdbName = glInfo.IndexName
+			}
+		} else if source == utils.DATA_SOURCE_ZZ { //郑商所
+			var suffix string
+			if strings.Contains(edbCode, "deal") {
+				suffix = "deal"
+			} else if strings.Contains(edbCode, "buy") {
+				suffix = "buy"
+			} else if strings.Contains(edbCode, "sold") {
+				suffix = "sold"
+			}
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取郑商所已存在信息失败,Err:" + err.Error()
+				return
+			}
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataZzMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取郑商所日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				searchItem, err = data_manage.GetEdbDataByZz(edbCode, suffix, startDate, "")
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,GetEdbDataByZz Err:" + err.Error()
+					return
+				}
+				if searchItem.StartDate == "" {
+					minDate, maxDate, _ := data_manage.GetEdbDataZzMaxOrMinDate(edbCode)
+					searchItem.StartDate = minDate
+					searchItem.EndDate = maxDate
+				}
+			}
+
+			//获取指标信息
+			allInfo, err := data_manage.GetBaseInfoFromZhengzhouByIndexCode(edbCode, suffix)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取郑商所指标详情失败,Err:" + err.Error()
+				return
+			}
+			var zzInfo *data_manage.BaseInfoFromZz
+			if allInfo != nil {
+				zzInfo = allInfo[0]
+			}
+			if zzInfo != nil {
+				searchItem.Frequency = "日度"
+				searchItem.Unit = "手"
+				if suffix == "deal" {
+					searchItem.EdbName = zzInfo.DealName
+				} else if suffix == "buy" {
+					searchItem.EdbName = zzInfo.BuyName
+				} else {
+					searchItem.EdbName = zzInfo.SoldName
+				}
+			}
+		} else if source == utils.DATA_SOURCE_DL { //大商所
+			var suffix string
+			if strings.Contains(edbCode, "deal") {
+				suffix = "deal"
+			} else if strings.Contains(edbCode, "buy") {
+				suffix = "buy"
+			} else if strings.Contains(edbCode, "sold") {
+				suffix = "sold"
+			}
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取大商所已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataDlMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取大商所日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				searchItem, err = data_manage.GetEdbDataByDl(edbCode, suffix, startDate, "")
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,GetEdbDataByDl Err:" + err.Error()
+					return
+				}
+				if searchItem.StartDate == "" {
+					minDate, maxDate, _ := data_manage.GetEdbDataDlMaxOrMinDate(edbCode)
+					searchItem.StartDate = minDate
+					searchItem.EndDate = maxDate
+				}
+			}
+
+			//获取指标信息
+			allInfo, err := data_manage.GetBaseInfoFromDalianByIndexCode(edbCode, suffix)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取大商所指标详情失败,Err:" + err.Error()
+				return
+			}
+			var dlInfo *data_manage.BaseInfoFromDl
+			if allInfo != nil {
+				dlInfo = allInfo[0]
+			}
+			if dlInfo != nil {
+				searchItem.Frequency = "日度"
+				searchItem.Unit = "手"
+				if suffix == "deal" {
+					searchItem.EdbName = dlInfo.DealName
+				} else if suffix == "buy" {
+					searchItem.EdbName = dlInfo.BuyName
+				} else {
+					searchItem.EdbName = dlInfo.SoldName
+				}
+			}
+		} else if source == utils.DATA_SOURCE_SH { //上期所
+			var suffix string
+			if strings.Contains(edbCode, "deal") {
+				suffix = "deal"
+			} else if strings.Contains(edbCode, "buy") {
+				suffix = "buy"
+			} else if strings.Contains(edbCode, "sold") {
+				suffix = "sold"
+			}
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取上期所已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataShMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取上期所日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				searchItem, err = data_manage.GetEdbDataBySh(edbCode, suffix, startDate, "")
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,GetEdbDataBySh Err:" + err.Error()
+					return
+				}
+				if searchItem.StartDate == "" {
+					minDate, maxDate, _ := data_manage.GetEdbDataShMaxOrMinDate(edbCode)
+					searchItem.StartDate = minDate
+					searchItem.EndDate = maxDate
+				}
+			}
+
+			//获取指标信息
+			allInfo, err := data_manage.GetBaseInfoFromShByIndexCode(edbCode, suffix)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取上期所指标详情失败,Err:" + err.Error()
+				return
+			}
+			var shInfo *data_manage.BaseInfoFromSh
+			if allInfo != nil {
+				shInfo = allInfo[0]
+			}
+			if shInfo != nil {
+				searchItem.Frequency = "日度"
+				searchItem.Unit = "手"
+				if suffix == "deal" {
+					searchItem.EdbName = shInfo.DealName
+				} else if suffix == "buy" {
+					searchItem.EdbName = shInfo.BuyName
+				} else {
+					searchItem.EdbName = shInfo.SoldName
+				}
+			}
+		} else if source == utils.DATA_SOURCE_CFFEX { //中金所
+			var suffix string
+			if strings.Contains(edbCode, "deal") {
+				suffix = "deal"
+			} else if strings.Contains(edbCode, "buy") {
+				suffix = "buy"
+			} else if strings.Contains(edbCode, "sold") {
+				suffix = "sold"
+			}
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取中金所已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataCffexMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取中金所日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				searchItem, err = data_manage.GetEdbDataByCffex(edbCode, suffix, startDate, "")
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,GetEdbDataByCffex Err:" + err.Error()
+					return
+				}
+				if searchItem.StartDate == "" {
+					minDate, maxDate, _ := data_manage.GetEdbDataCffexMaxOrMinDate(edbCode)
+					searchItem.StartDate = minDate
+					searchItem.EndDate = maxDate
+				}
+			}
+
+			//获取指标信息
+			allInfo, err := data_manage.GetBaseInfoFromCffexByIndexCode(edbCode, suffix)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取中金所指标详情失败,Err:" + err.Error()
+				return
+			}
+			var cffexInfo *data_manage.BaseInfoFromCffex
+			if allInfo != nil {
+				cffexInfo = allInfo[0]
+			}
+			if cffexInfo != nil {
+				searchItem.Frequency = "日度"
+				searchItem.Unit = "手"
+				if suffix == "deal" {
+					searchItem.EdbName = cffexInfo.DealName
+				} else if suffix == "buy" {
+					searchItem.EdbName = cffexInfo.BuyName
+				} else {
+					searchItem.EdbName = cffexInfo.SoldName
+				}
+			}
+		} else if source == utils.DATA_SOURCE_SHFE { //上期能源
+			var suffix string
+			if strings.Contains(edbCode, "deal") {
+				suffix = "deal"
+			} else if strings.Contains(edbCode, "buy") {
+				suffix = "buy"
+			} else if strings.Contains(edbCode, "sold") {
+				suffix = "sold"
+			}
+			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, utils.EDB_DATA_LIMIT)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取上期能源已存在信息失败,Err:" + err.Error()
+				return
+			}
+
+			if len(dataItems) > 0 {
+				searchItem.EdbCode = edbCode
+				minDate, maxDate, err := data_manage.GetEdbDataShfeMaxOrMinDate(edbCode)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取上期能源日期信息失败,Err:" + err.Error()
+					return
+				}
+				searchItem.DataList = dataItems
+				searchItem.StartDate = minDate
+				searchItem.EndDate = maxDate
+			} else {
+				searchItem, err = data_manage.GetEdbDataByShfe(edbCode, suffix, startDate, "")
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,GetEdbDataByShfe Err:" + err.Error()
+					return
+				}
+				if searchItem.StartDate == "" {
+					minDate, maxDate, _ := data_manage.GetEdbDataShfeMaxOrMinDate(edbCode)
+					searchItem.StartDate = minDate
+					searchItem.EndDate = maxDate
+				}
+			}
+
+			//获取指标信息
+			allInfo, err := data_manage.GetBaseInfoFromShfeByIndexCode(edbCode, suffix)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取上期能源指标详情失败,Err:" + err.Error()
+				return
+			}
+			var shfeInfo *data_manage.BaseInfoFromShfe
+			if allInfo != nil {
+				shfeInfo = allInfo[0]
+			}
+			if shfeInfo != nil {
+				searchItem.Frequency = "日度"
+				searchItem.Unit = "手"
+				if suffix == "deal" {
+					searchItem.EdbName = shfeInfo.DealName
+				} else if suffix == "buy" {
+					searchItem.EdbName = shfeInfo.BuyName
+				} else {
+					searchItem.EdbName = shfeInfo.SoldName
+				}
+			}
+		} else if source == utils.DATA_SOURCE_GIE { //欧洲天然气
+			br.Msg = "无效的数据来源"
+			return
+		} else {
+			br.Msg = "无效的数据来源"
+			return
+		}
+		resp.Status = 2
+		resp.SearchItem = searchItem
+	}
+}

+ 15 - 0
models/base_from_ths.go

@@ -51,3 +51,18 @@ func AddEdbDataFromThs(edbCode string, item *services.EdbDataFromThs) (err error
 	}
 	return
 }
+
+func GetEdbDataByThs(edbCode string, item *services.EdbDataFromThs) (dataList []*EdbInfoSearchData, err error) {
+	AddEdbDataFromThs(edbCode, item)
+
+	size := utils.EDB_DATA_LIMIT
+	dataList, err = GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_THS, size)
+	if err != nil {
+		//utils.FileLogData.Info("GetEdbDataThsByCode Err:%s", err.Error())
+		return
+	}
+	if len(dataList) < 0 {
+		dataList = make([]*EdbInfoSearchData, 0)
+	}
+	return
+}

+ 31 - 0
models/edb_classify.go

@@ -0,0 +1,31 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type EdbClassifySimplify struct {
+	ClassifyId   int    `description:"分类id"`
+	ClassifyName string `description:"分类名称"`
+	ParentId     int
+}
+
+//递归获取所有目录
+func GetClassifyAllByClassifyId(classifyId int) (resultList []*EdbClassifySimplify, err error) {
+	o := orm.NewOrm()
+	for {
+		sql := ` SELECT * FROM edb_classify AS a WHERE a.classify_id=? order by sort asc,classify_id asc`
+		item := new(EdbClassifySimplify)
+		err = o.Raw(sql, classifyId).QueryRow(&item)
+		if err != nil {
+			break
+		}
+		if item.ClassifyId > 0 {
+			resultList = append(resultList, item)
+			classifyId = item.ParentId
+		} else {
+			break
+		}
+	}
+	return resultList, err
+}

+ 20 - 3
models/edb_data_base.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"hongze/hongze_edb_lib/utils"
 	"time"
@@ -29,7 +30,6 @@ type EdbData struct {
 	DataTimestamp int64
 }
 
-
 func GetAddSql(edbInfoId, edbCode, dataTime, timestampStr string, value string) (addSql string) {
 	nowStr := time.Now().Format(utils.FormatDateTime)
 	addSql += "("
@@ -41,7 +41,7 @@ func GetAddSql(edbInfoId, edbCode, dataTime, timestampStr string, value string)
 }
 
 type AddEdbInfoReq struct {
-	EdbCode    string `description:"指标编码"`
+	EdbCode string `description:"指标编码"`
 }
 
 // GetEdbInfoCountByCondition 获取指标数量
@@ -53,4 +53,21 @@ func GetEdbInfoCountByCondition(condition string, pars []interface{}) (count int
 	}
 	err = o.Raw(sql, pars).QueryRow(&count)
 	return
-}
+}
+
+// GetEdbDataAllByEdbCode 根据指标编码获取指标数据列表
+func GetEdbDataAllByEdbCode(edbCode string, source, limit int) (items []*EdbInfoSearchData, err error) {
+	var pars []interface{}
+	pars = append(pars, edbCode)
+	o := orm.NewOrm()
+
+	tableName := GetEdbDataTableName(source)
+	sql := ` SELECT * FROM %s WHERE edb_code=? ORDER BY data_time DESC`
+	if limit > 0 {
+		sql += `  LIMIT ?  `
+		pars = append(pars, limit)
+	}
+	sql = fmt.Sprintf(sql, tableName)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 8 - 0
models/edb_info.go

@@ -174,3 +174,11 @@ func GetLastEdbData(condition string, pars []interface{}, source int) (item *Edb
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return
 }
+
+// GetEdbInfoByEdbCode 根据指标code获取指标信息
+func GetEdbInfoByEdbCode(source int, edbCode string) (item *EdbInfo, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM edb_info WHERE source=? AND edb_code=? `
+	err = o.Raw(sql, source, edbCode).QueryRow(&item)
+	return
+}

+ 19 - 0
models/response.go

@@ -1,6 +1,25 @@
 package models
 
+// AddEdbInfoResp 添加指标
 type AddEdbInfoResp struct {
 	EdbInfoId  int    `description:"指标ID"`
 	UniqueCode string `description:"指标唯一编码"`
 }
+
+// EdbInfoSearchResp
+type EdbInfoSearchResp struct {
+	SearchItem   *EdbInfoSearch `description:"指标分类"`
+	Status       int            `description:"1:数据已存在于弘则数据库,2:新数据"`
+	ClassifyList []*EdbClassifySimplify
+}
+
+//指标检索数据
+type EdbInfoSearch struct {
+	EdbCode   string `description:"指标编码"`
+	StartDate string `description:"起始日期"`
+	EndDate   string `description:"终止日期"`
+	EdbName   string `description:"指标名称"`
+	Unit      string `description:"单位"`
+	Frequency string `description:"频率"`
+	DataList  []*EdbInfoSearchData
+}

+ 7 - 1
utils/constants.go

@@ -64,10 +64,16 @@ var (
 	Hz_Ths_Data_Url  string                                   //同花顺,万得接口服务地址(阿里云windows服务器地址)
 	Hz_Wind_Data_Url = "http://datawind.hzinsights.com:8040/" //万得接口服务地址
 	Hz_Pb_Data_Url   = "http://datapb.hzinsights.com:8040/"   //彭博接口地址
-	EDB_DATA_LIMIT = 10
+	EDB_DATA_LIMIT   = 10
 )
 
 const (
 	DATA_PREFIX  = "hz_data"
 	CHART_PREFIX = "hz_chart"
 )
+
+//数据刷新频率
+const (
+	DATA_REFRESH        = 7 //7个单位,日/周/月/季度/年
+	DATA_END_DATE_LIMIT = 4 //数据结束日期为,当前日期,加上4年时间
+)