zwxi 1 年之前
父節點
當前提交
4e5263f55d

+ 183 - 9
controllers/data_manage/edb_info.go

@@ -5368,8 +5368,8 @@ func (this *EdbInfoController) SmmExistCheck() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	selectAll, err := this.GetBool("SelectAll",false)
-	if err!= nil {
+	selectAll, err := this.GetBool("SelectAll", false)
+	if err != nil {
 		br.Msg = "参数解析失败"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
@@ -5382,18 +5382,25 @@ func (this *EdbInfoController) SmmExistCheck() {
 	edbCode = strings.Trim(edbCode, " ")
 	edbCode = strings.Replace(edbCode, "\t", "", -1)
 
+	selectCode := this.GetString("SelectCode")
+	selectCode = strings.Trim(selectCode, "\t")
+	selectCode = strings.Trim(selectCode, " ")
+	selectCode = strings.Replace(selectCode, "\t", "", -1)
+
 	var edbCodeArr []string
+	var codeArr []string
 
 	if selectAll {
+		// 如果勾了列表全选,那么EdbCode传的就是排除的code
 		var condition string
 		var pars []interface{}
 
 		if types != "" {
-			typeArr := strings.Split(types,",")
+			typeArr := strings.Split(types, ",")
 			for i, v := range typeArr {
 				typeStr := "type_"
 				typeStr += fmt.Sprintf("%d", i+1)
-				condition += " AND "+typeStr+" =? "
+				condition += " AND " + typeStr + " =? "
 				pars = append(pars, v)
 			}
 		}
@@ -5408,15 +5415,12 @@ func (this *EdbInfoController) SmmExistCheck() {
 			}
 		}
 
-
 		if frequency != "" {
 			condition += " AND frequency = ? "
 			pars = append(pars, frequency)
 		}
 
-		sortStr := " modify_time desc "
-
-		indexList, err := data_manage.GetSmmIndexDataList(condition, sortStr, pars, 1, 1000)
+		indexList, err := data_manage.GetSmmIndexDataListNoPage(condition, pars)
 		if err != nil {
 			br.Msg = "获取指标列表失败"
 			br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
@@ -5424,10 +5428,20 @@ func (this *EdbInfoController) SmmExistCheck() {
 		}
 
 		for _, v := range indexList {
-			edbCodeArr = append(edbCodeArr, v.IndexCode)
+			codeArr = append(codeArr, v.IndexCode)
 		}
 
+		noUseCodeArr := strings.Split(edbCode, ",")
+
+		for _, code := range codeArr {
+			// 检查code是否在noUseCodeArr数组中
+			if !utils.ArrContainsStr(noUseCodeArr, code) {
+				// 如果不在,将其添加到结果数组中
+				edbCodeArr = append(edbCodeArr, code)
+			}
+		}
 	} else {
+		//未勾选全选EdbCode就是需要的code
 		edbCodeArr = strings.Split(edbCode, ",")
 	}
 
@@ -5474,3 +5488,163 @@ func (this *EdbInfoController) SmmExistCheck() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// EdbInfoSearch
+// @Title 新增指标-查询指标信息接口-smm
+// @Description 新增指标-查询指标信息接口-smm
+// @Param   Source   query   int  true       "来源:1:同花顺,2:wind,3:彭博"
+// @Param   SubSource   query   int  true       "子数据来源:0:经济数据库,1:日期序列"
+// @Param   EdbCode   query   string  false       "指标编码/指标代码"
+// @Param   StockCode   query   string  false       "证券代码"
+// @Success 200 {object} data_manage.EdbInfoSearchResp
+// @router /edb_info/smm/search [get]
+func (this *EdbInfoController) EdbInfoSmmSearch() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	selectAll, err := this.GetBool("SelectAll", false)
+	if err != nil {
+		br.Msg = "参数解析失败"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	types := this.GetString("Types")
+	frequency := this.GetString("Frequency")
+	dataState := this.GetString("DataState")
+	edbCode := this.GetString("EdbCode")
+	edbCode = strings.Trim(edbCode, "\t")
+	edbCode = strings.Trim(edbCode, " ")
+	edbCode = strings.Replace(edbCode, "\t", "", -1)
+
+	selectCode := this.GetString("SelectCode")
+	selectCode = strings.Trim(selectCode, "\t")
+	selectCode = strings.Trim(selectCode, " ")
+	selectCode = strings.Replace(selectCode, "\t", "", -1)
+
+	var edbCodeArr []string
+	var codeArr []string
+
+	if selectAll {
+		// 如果勾了列表全选,那么EdbCode传的就是排除的code
+		var condition string
+		var pars []interface{}
+
+		if types != "" {
+			typeArr := strings.Split(types, ",")
+			for i, v := range typeArr {
+				typeStr := "type_"
+				typeStr += fmt.Sprintf("%d", i+1)
+				condition += " AND " + typeStr + " =? "
+				pars = append(pars, v)
+			}
+		}
+
+		if dataState != "" {
+			if dataState == "normal" {
+				condition += " AND (data_state = 'normal' OR data_state = '') "
+				pars = append(pars)
+			} else {
+				condition += " AND data_state = ? "
+				pars = append(pars, dataState)
+			}
+		}
+
+		if frequency != "" {
+			condition += " AND frequency = ? "
+			pars = append(pars, frequency)
+		}
+
+		indexList, err := data_manage.GetSmmIndexDataListNoPage(condition, pars)
+		if err != nil {
+			br.Msg = "获取指标列表失败"
+			br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
+			return
+		}
+
+		for _, v := range indexList {
+			codeArr = append(codeArr, v.IndexCode)
+		}
+
+		noUseCodeArr := strings.Split(edbCode, ",")
+
+		for _, code := range codeArr {
+			// 检查code是否在noUseCodeArr数组中
+			if !utils.ArrContainsStr(noUseCodeArr, code) {
+				// 如果不在,将其添加到结果数组中
+				edbCodeArr = append(edbCodeArr, code)
+			}
+		}
+	} else {
+		//未勾选全选EdbCode就是需要的code
+		edbCodeArr = strings.Split(edbCode, ",")
+	}
+
+	if len(edbCodeArr) > 30 {
+		br.Msg = "最多只能选择30个指标"
+		return
+	}
+
+	if len(edbCodeArr) <= 0 {
+		br.Msg = "无符合指标或指标代码错误"
+		return
+	}
+
+	resp := new(data_manage.EdbInfoSearchResp)
+
+	searchItem := new(data_manage.EdbInfoSearch)
+	//todo
+	smmInfo, err := data_manage.GetBaseFromSmmIndexByIndexCodes(edbCodeArr)
+	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
+	}
+	{
+		dataList, err := data_manage.GetEdbDataAllByEdbCodes(edbCodeArr, utils.EDB_DATA_LIMIT)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,GetEdbDataAllByEdbCode Err:" + err.Error()
+			return
+		}
+		searchItem.DataList = dataList
+
+		edbInfoMaxAndMinInfo, err := data_manage.GetSmmEdbInfoMaxAndMinInfo(edbCodeArr)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,GetEdbInfoMaxAndMinInfo Err:" + err.Error()
+			return
+		}
+		searchItem.EdbCode = edbCode
+		searchItem.DataList = dataList
+		if edbInfoMaxAndMinInfo != nil {
+			searchItem.StartDate = edbInfoMaxAndMinInfo.MinDate
+			searchItem.EndDate = edbInfoMaxAndMinInfo.MaxDate
+		}
+
+		//edb指标信息
+		edbInfoItem, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_YS, edbCode)
+		if edbInfoItem != nil {
+			searchItem.EdbName = edbInfoItem.EdbName
+		}
+	}
+	resp.Status = 2
+	resp.SearchItem = searchItem
+
+
+	if resp.SearchItem.DataList == nil || len(resp.SearchItem.DataList) <= 0 {
+		br.Msg = "目标指标无有效值,请重新搜索"
+		br.Data = resp
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 18 - 0
models/data_manage/base_from_smm.go

@@ -406,4 +406,22 @@ func GetBaseFromSmmIndexTypeList() (list []BaseFromSmmIndexTypeList, err error)
 type TypeListRespItem struct {
 	Type string
 	Child []TypeListRespItem
+}
+
+func GetSmmIndexDataListNoPage(condition string, pars []interface{}) (items []*BaseFromSmmIndexItem, err error) {
+	sql := `select * FROM base_from_smm_index
+               WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func GetBaseFromSmmIndexByIndexCodes(indexCodes []string) (list *BaseFromSmmIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_smm_index WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `)`
+	err = o.Raw(sql, indexCodes).QueryRow(&list)
+	return
 }

+ 14 - 0
models/data_manage/edb_data_base.go

@@ -275,3 +275,17 @@ func GetEdbDataTableNameAndSubSource(source, subSource int) (tableName string) {
 	}
 	return
 }
+
+func GetEdbDataAllByEdbCodes(edbCodes []string, limit int) (items []*EdbInfoSearchData, err error) {
+	var pars []interface{}
+	pars = append(pars, edbCodes)
+	o := orm.NewOrmUsingDB("data")
+
+	sql := ` SELECT * FROM edb_data_ys WHERE edb_code IN (`+ utils.GetOrmInReplace(len(edbCodes)) +`) ORDER BY data_time DESC`
+	if limit > 0 {
+		sql += `  LIMIT ?  `
+		pars = append(pars, limit)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 17 - 0
models/data_manage/edb_info.go

@@ -1700,3 +1700,20 @@ func GetEdbInfoByNames(edbNames string) (items []*EdbInfoList, err error) {
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+func GetSmmEdbInfoMaxAndMinInfo(edbCodes []string) (item *EdbInfoMaxAndMinInfo, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ``
+
+	sql = ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(value) AS min_value,MAX(value) AS max_value FROM edb_data_ys WHERE edb_code IN (` + utils.GetOrmInReplace(len(edbCodes)) + `)`
+	err = o.Raw(sql, edbCodes).QueryRow(&item)
+	if err != nil {
+		return
+	}
+
+	var latest_value float64
+	sql = ` SELECT value AS latest_value FROM edb_data_ys WHERE edb_code IN (` + utils.GetOrmInReplace(len(edbCodes)) + `) ORDER BY data_time DESC LIMIT 1 `
+	err = o.Raw(sql, edbCodes).QueryRow(&latest_value)
+	item.LatestValue = latest_value
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -2581,6 +2581,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "EdbInfoSmmSearch",
+            Router: `/edb_info/smm/search`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "TraceEdbInfo",

+ 10 - 0
utils/common.go

@@ -2208,4 +2208,14 @@ func PascalToSnake(s string) string {
 	}
 
 	return string(result)
+}
+
+// ArrContainsStr函数检查一个字符串是否在字符串数组中
+func ArrContainsStr(arr []string, str string) bool {
+	for _, v := range arr {
+		if v == str {
+			return true
+		}
+	}
+	return false
 }