Kaynağa Gözat

Merge branch 'ETA_1.4.4'

zwxi 1 yıl önce
ebeveyn
işleme
7179464123

+ 581 - 105
controllers/data_manage/edb_info.go

@@ -43,8 +43,8 @@ func (this *EdbInfoController) EdbInfoSearch() {
 	edbCode = strings.Trim(edbCode, "\t")
 	edbCode = strings.Trim(edbCode, " ")
 	edbCode = strings.Replace(edbCode, "\t", "", -1)
-
-	subSource := utils.DATA_SUB_SOURCE_EDB
+	stockCode := this.GetString("StockCode")
+	subSource, _ := this.GetInt("SubSource")
 
 	if source <= 0 {
 		br.Msg = "无效的数据来源"
@@ -155,76 +155,59 @@ func (this *EdbInfoController) EdbInfoSearch() {
 
 		searchItem := new(data_manage.EdbInfoSearch)
 		if source == utils.DATA_SOURCE_THS {
-			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_THS, utils.DATA_SUB_SOURCE_EDB, 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.GetEdbDataThsMaxOrMinDate(edbCode)
-				if err != nil {
+			fmt.Println("subSource:", subSource)
+			if subSource == utils.DATA_SUB_SOURCE_EDB {
+				dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_THS, subSource, utils.EDB_DATA_LIMIT)
+				if err != nil && err.Error() != utils.ErrNoRow() {
 					br.Msg = "获取失败"
-					br.ErrMsg = "获取Ths日期信息失败,Err:" + err.Error()
+					br.ErrMsg = "获取Ths已存在信息失败,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.GetEdbDataByThs(edbCode, startDate, endDate)
-				//if err != nil {
-				//	br.Msg = "获取失败"
-				//	br.ErrMsg = "获取失败,Err:" + err.Error()
-				//	return
-				//}
-				respItem, err := data.AddEdbData(source, edbCode)
-				if err != nil {
-					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.GetEdbDataThsMaxOrMinDate(edbCode)
+					if err != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取Ths日期信息失败,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.GetEdbDataByThs(edbCode, startDate, endDate)
+					//if err != nil {
+					//	br.Msg = "获取失败"
+					//	br.ErrMsg = "获取失败,Err:" + err.Error()
+					//	return
+					//}
+					respItem, err := data.AddEdbData(source, edbCode)
+					if err != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取失败,Err:" + err.Error()
+						return
+					}
+					if respItem.Ret != 200 {
+						br.Msg = "未搜索到该指标"
+						br.ErrMsg = respItem.ErrMsg + ";EdbCode:" + edbCode
+						return
+					}
+					isAdd = true
 				}
-				if respItem.Ret != 200 {
-					br.Msg = "未搜索到该指标"
-					br.ErrMsg = respItem.ErrMsg + ";EdbCode:" + edbCode
+			} else if subSource == utils.DATA_SUB_SOURCE_DATE {
+				if stockCode == "" {
+					br.Msg = "请输入证券代码"
 					return
 				}
-				isAdd = true
-			}
-		} else if source == utils.DATA_SOURCE_WIND {
-			fmt.Println("wind data exist")
-			dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_WIND, utils.DATA_SUB_SOURCE_EDB, 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()
+				if edbCode == "" {
+					br.Msg = "请输入指标代码"
 					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
-				//}
-				respItem, err := data.AddEdbData(source, edbCode)
+				respItem, err := data.AddEdbDataThsDs(source, stockCode, edbCode)
 				if err != nil {
 					br.Msg = "获取失败"
 					br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -233,6 +216,8 @@ func (this *EdbInfoController) EdbInfoSearch() {
 				if respItem.Ret != 200 {
 					if respItem.Ret == 421 {
 						br.Msg = "该渠道已超过添加上限"
+					} else if respItem.Ret == 4052 {
+						br.Msg = "该指标已下架"
 					} else {
 						br.Msg = "未搜索到该指标"
 					}
@@ -240,6 +225,58 @@ func (this *EdbInfoController) EdbInfoSearch() {
 					return
 				}
 				isAdd = true
+			} else {
+				br.Msg = "无效的渠道来源"
+				return
+			}
+		} else if source == utils.DATA_SOURCE_WIND {
+			fmt.Println("subSource:", subSource)
+			if subSource == utils.DATA_SUB_SOURCE_EDB {
+				dataItems, err := data_manage.GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_WIND, subSource, 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
+					//}
+					respItem, err := data.AddEdbData(source, edbCode)
+					if err != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取失败,Err:" + err.Error()
+						return
+					}
+					if respItem.Ret != 200 {
+						if respItem.Ret == 421 {
+							br.Msg = "该渠道已超过添加上限"
+						} else if respItem.Ret == 4052 {
+							br.Msg = "该指标已下架"
+						} else {
+							br.Msg = "未搜索到该指标"
+						}
+						br.ErrMsg = respItem.ErrMsg + ";EdbCode:" + edbCode
+						return
+					}
+					isAdd = true
+				}
 			}
 		} else if source == utils.DATA_SOURCE_PB || source == utils.DATA_SOURCE_PB_FINANCE {
 			fmt.Println("pb data exist")
@@ -1623,32 +1660,143 @@ func (this *EdbInfoController) EdbInfoSearch() {
 			}
 		}
 		if isAdd {
-			dataList, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, subSource, utils.EDB_DATA_LIMIT)
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取数据失败,GetEdbDataAllByEdbCode Err:" + err.Error()
-				return
-			}
-			searchItem.DataList = dataList
+			if subSource == utils.DATA_SUB_SOURCE_DATE {
+				if source == utils.DATA_SOURCE_WIND {
+					//wsdData := windWsdRespItem.Data
+					//var buf bytes.Buffer
+					//// 创建一个encoder并指定目标为buf
+					//enc := gob.NewEncoder(&buf)
+					//
+					//// 将data编码到buf中
+					//err = enc.Encode(wsdData)
+					//if err != nil {
+					//	br.Msg = "获取失败"
+					//	br.ErrMsg = "获取数据失败,wind wsd encoding GOB Err:" + err.Error()
+					//	return
+					//}
+					//
+					//wsdDataMap := make(map[string]map[string]interface{})
+					//err = json.Unmarshal(buf.Bytes(), &wsdDataMap)
+					//if err != nil {
+					//	br.Msg = "获取失败"
+					//	br.ErrMsg = "获取数据失败,wind wsd json.Unmarshal Err:" + err.Error()
+					//	return
+					//}
+					//
+					//stockList := make([]*data_manage.StockInfo, 0)
+					//
+					//dataList := make([]*data_manage.EdbInfoSearchData, 0)
+					//for wk, wv := range wsdDataMap {
+					//	for vk, vv := range wv {
+					//		wkInt, err := strconv.ParseInt(wk, 10, 64)
+					//		if err != nil {
+					//			br.Msg = "获取失败"
+					//			br.ErrMsg = "获取数据失败,转换日期类型失败 Err:" + err.Error()
+					//			return
+					//		}
+					//
+					//		vk = strings.ToLower(vk)
+					//		wkInt = wkInt / 1000
+					//		t := time.Unix(wkInt, 0)
+					//		dateTime := t.Format(utils.FormatDate)
+					//		//saveVal := utils.SubFloatToString(val, 20)
+					//		if vv == nil {
+					//			continue
+					//		}
+					//		var saveVal string
+					//		switch vt := vv.(type) {
+					//		case int:
+					//			saveVal = strconv.Itoa(vt)
+					//		case float64:
+					//			saveVal = utils.SubFloatToFloatStr(vt, 20)
+					//		case string:
+					//			saveVal = vt
+					//		}
+					//
+					//		dataItem := new(data_manage.EdbInfoSearchData)
+					//		dataItem.Value = saveVal
+					//		dataItem.DataTime = dateTime
+					//		dataList = append(dataList, dataItem)
+					//		if len(dataList) >= 10 {
+					//			break
+					//		}
+					//	}
+					//}
+					//searchItem.StockList = stockList
+
+					stockList := make([]*data_manage.StockInfo, 0)
+					edbCodeArr := strings.Split(edbCode, ",")
+					for _, v := range edbCodeArr {
+						indexCode := utils.WindDbWsd + stockCode + v
+
+						dataList, err := data_manage.GetEdbDataAllByEdbCodeAndSubSource(indexCode, source, utils.DATA_SUB_SOURCE_DATE, utils.EDB_DATA_LIMIT)
+						if err != nil && err.Error() != utils.ErrNoRow() {
+							br.Msg = "获取失败"
+							br.ErrMsg = "获取数据失败,GetEdbDataAllByEdbCode Err:" + err.Error()
+							return
+						}
+
+						stockInfo := new(data_manage.StockInfo)
+						stockInfo.StockCode = stockCode
+						stockInfo.EdbCode = v
+						stockInfo.DataList = dataList
+						stockList = append(stockList, stockInfo)
+					}
+					searchItem.StockList = stockList
+				} else if source == utils.DATA_SOURCE_THS {
+					stockList := make([]*data_manage.StockInfo, 0)
+					edbCodeArr := strings.Split(edbCode, ",")
+					for _, v := range edbCodeArr {
+						indexCode := utils.ThsDs + stockCode + v
+
+						dataList, err := data_manage.GetEdbDataAllByEdbCodeAndSubSource(indexCode, source, utils.DATA_SUB_SOURCE_DATE, utils.EDB_DATA_LIMIT)
+						if err != nil && err.Error() != utils.ErrNoRow() {
+							br.Msg = "获取失败"
+							br.ErrMsg = "获取数据失败,GetEdbDataAllByEdbCode Err:" + err.Error()
+							return
+						}
+
+						stockInfo := new(data_manage.StockInfo)
+						stockInfo.StockCode = stockCode
+						stockInfo.EdbCode = v
+						stockInfo.DataList = dataList
+						stockList = append(stockList, stockInfo)
+					}
+					searchItem.StockList = stockList
+				} else {
+					br.Msg = "来源错误"
+					br.ErrMsg = "来源错误"
+					return
+				}
+			} else {
+				dataList, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, subSource, 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.GetEdbInfoMaxAndMinInfo(source, subSource, edbCode)
-			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
-			}
+				edbInfoMaxAndMinInfo, err := data_manage.GetEdbInfoMaxAndMinInfo(source, subSource, edbCode)
+				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(source, edbCode)
-			if edbInfoItem != nil {
-				searchItem.EdbName = edbInfoItem.EdbName
+				//edb指标信息
+				edbInfoItem, err := data_manage.GetEdbInfoByEdbCode(source, edbCode)
+				if edbInfoItem != nil {
+					searchItem.EdbName = edbInfoItem.EdbName
+				}
 			}
+
 		}
 		resp.Status = 2
 		resp.SearchItem = searchItem
@@ -1776,20 +1924,58 @@ func (this *EdbInfoController) EdbInfoList() {
 	dataCondition += ` AND edb_info_id=? `
 	dataPars = append(dataPars, edbInfoItem.EdbInfoId)
 
-	dataCount, err := data_manage.GetEdbDataCountByCondition(dataCondition, dataPars, edbInfoItem.Source, edbInfoItem.SubSource)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取指标信息失败"
-		br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
-		return
-	}
-	page = paging.GetPaging(currentIndex, pageSize, dataCount)
-	dataList, err := data_manage.GetEdbDataListByCondition(dataCondition, dataPars, edbInfoItem.Source, edbInfoItem.SubSource, pageSize, startSize)
-	if err != nil {
-		br.Msg = "获取指标信息失败"
-		br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
-		return
+	if edbInfoItem.SubSource == utils.DATA_SUB_SOURCE_DATE {
+		if edbInfoItem.Source == utils.DATA_SOURCE_WIND {
+			dataCount, err := data_manage.GetEdbWsdDataCountByCondition(dataCondition, dataPars, edbInfoItem.Source)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取指标信息失败"
+				br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
+				return
+			}
+			page = paging.GetPaging(currentIndex, pageSize, dataCount)
+			dataList, err := data_manage.GetEdbWsdDataListByCondition(dataCondition, dataPars, edbInfoItem.Source, pageSize, startSize)
+			if err != nil {
+				br.Msg = "获取指标信息失败"
+				br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
+				return
+			}
+			edbInfoItem.DataList = dataList
+		} else if edbInfoItem.Source == utils.DATA_SOURCE_THS {
+			dataCount, err := data_manage.GetTHsDsDataCountByCondition(dataCondition, dataPars, edbInfoItem.Source)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取指标信息失败"
+				br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
+				return
+			}
+			page = paging.GetPaging(currentIndex, pageSize, dataCount)
+			dataList, err := data_manage.GetThsDsDataListByCondition(dataCondition, dataPars, edbInfoItem.Source, pageSize, startSize)
+			if err != nil {
+				br.Msg = "获取指标信息失败"
+				br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
+				return
+			}
+			edbInfoItem.DataList = dataList
+		} else {
+			br.Msg = "指标数据源id错误"
+			br.ErrMsg = "指标数据源id错误"
+			return
+		}
+	} else {
+		dataCount, err := data_manage.GetEdbDataCountByCondition(dataCondition, dataPars, edbInfoItem.Source, edbInfoItem.SubSource)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取指标信息失败"
+			br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
+			return
+		}
+		page = paging.GetPaging(currentIndex, pageSize, dataCount)
+		dataList, err := data_manage.GetEdbDataListByCondition(dataCondition, dataPars, edbInfoItem.Source, edbInfoItem.SubSource, pageSize, startSize)
+		if err != nil {
+			br.Msg = "获取指标信息失败"
+			br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
+			return
+		}
+		edbInfoItem.DataList = dataList
 	}
-	edbInfoItem.DataList = dataList
 
 	// 获取指标插入配置
 	{
@@ -3018,18 +3204,29 @@ func (this *ChartInfoController) EdbInfoData() {
 
 	startDate := this.GetString("StartDate")
 	endDate := this.GetString("EndDate")
-	startDate, endDate = utils.GetDateByDateType(dateType, startDate, endDate)
+	startYear, _ := this.GetInt("StartYear")
 
 	edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
 	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Ret = 200
+			return
+		}
 		br.Msg = "获取失败"
-		br.Msg = "获取失败,Err:" + err.Error()
+		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-	dataList, err := data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfoId, startDate, endDate)
+	maxYear := 0
+	if edbInfo.LatestDate != "" {
+		latestDateT, _ := time.Parse(utils.FormatDate, edbInfo.LatestDate)
+		maxYear = latestDateT.Year()
+	}
+	dataList := make([]*data_manage.EdbDataList, 0)
+	startDate, endDate = utils.GetDateByDateTypeV2(dateType, startDate, endDate, startYear, maxYear)
+	dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfoId, startDate, endDate)
 	if err != nil {
 		br.Msg = "获取失败"
-		br.Msg = "获取失败,Err:" + err.Error()
+		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
 	fullEdb := new(data_manage.EdbInfoFullClassify)
@@ -3044,7 +3241,6 @@ func (this *ChartInfoController) EdbInfoData() {
 	fullEdb.ClassifyList = classifyList
 	resp.EdbInfo = fullEdb
 	resp.DataList = dataList
-
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
@@ -4672,3 +4868,283 @@ func (this *EdbInfoController) ChartImageSet() {
 	br.Success = true
 	br.Msg = "保存成功"
 }
+
+// EdbInfoAdd
+// @Title 指标批量保存接口
+// @Description 指标批量保存接口
+// @Param	request	body data_manage.BatchAddEdbInfoReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /edb_info/batch/add [post]
+func (this *EdbInfoController) EdbInfoBatchAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	deleteCache := true
+	cacheKey := "CACHE_EDB_INFO_BATCH_ADD_" + strconv.Itoa(sysUser.AdminId)
+	defer func() {
+		if deleteCache {
+			utils.Rc.Delete(cacheKey)
+		}
+	}()
+	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
+		deleteCache = false
+		br.Msg = "系统处理中,请稍后重试!"
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		return
+	}
+	var req data_manage.BatchAddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	resp := new(data_manage.AddEdbInfoResp)
+
+	var edbNames string
+	for _, v := range req.BatchList {
+		edbNames += "'" + v.EdbName + "',"
+	}
+	edbNames = strings.Trim(edbNames, ",")
+	infoList, err := data_manage.GetEdbInfoByNames(edbNames)
+	if err != nil {
+		br.Msg = "查询指标名称重复错误!"
+		br.ErrMsg = "GetEdbInfoByNames,Err:" + err.Error()
+		return
+	}
+	if len(infoList) > 0 {
+		for _, v := range infoList {
+			resp.ExistEdbName = append(resp.ExistEdbName, v.EdbName)
+		}
+		br.Data = resp
+		br.Msg = "指标名称重复!"
+		br.ErrMsg = "指标名称重复"
+		return
+	}
+
+	for k, v := range req.BatchList {
+		v.EdbName = strings.Trim(v.EdbName, " ")
+		v.EdbCode = strings.Trim(v.EdbCode, " ")
+		v.StockCode = strings.Trim(v.StockCode, " ")
+
+		if v.Source <= 0 {
+			br.Msg = "无效的数据来源"
+			return
+		}
+
+		if v.EdbCode == "" {
+			br.Msg = "指标ID不能为空"
+			return
+		}
+
+		if v.StockCode == "" {
+			br.Msg = "证券代码不能为空"
+			return
+		}
+
+		if v.EdbName == "" {
+			br.Msg = "指标名称不能为空"
+			return
+		}
+
+		if v.Frequency == "" {
+			br.Msg = "频率不能为空"
+			return
+		}
+
+		if v.ClassifyId <= 0 {
+			br.Msg = "请选择分类"
+			return
+		}
+
+		edbInfoItem := new(data_manage.EdbInfo)
+		edbInfoItem.Source = v.Source
+		switch v.Source {
+		case utils.DATA_SOURCE_WIND:
+			edbInfoItem.SourceName = "wind"
+			edbInfoItem.EdbCode = utils.WindDbWsd + v.StockCode + v.EdbCode
+		case utils.DATA_SOURCE_THS:
+			edbInfoItem.SourceName = "ths"
+			edbInfoItem.EdbCode = utils.ThsDs + v.StockCode + v.EdbCode
+		}
+		edbInfoItem.SubSource = 1
+		edbInfoItem.SubSourceName = "日期序列"
+		edbInfoItem.EdbName = v.EdbName
+		edbInfoItem.Frequency = v.Frequency
+		edbInfoItem.Unit = v.Unit
+		edbInfoItem.ClassifyId = v.ClassifyId
+		edbInfoItem.SysUserId = sysUser.AdminId
+		edbInfoItem.SysUserRealName = sysUser.RealName
+		edbInfoItem.IndicatorCode = v.EdbCode
+		edbInfoItem.StockCode = v.StockCode
+
+		// 指标入库
+		edbInfo, err, errMsg, isSendEmail := data.EdbInfoWsdAdd(edbInfoItem)
+		if err != nil {
+			br.Msg = "保存失败"
+			if errMsg != `` {
+				br.Msg = errMsg
+			}
+			br.ErrMsg = err.Error()
+			br.IsSendEmail = isSendEmail
+			return
+		}
+		//新增操作日志
+		{
+			edbLog := new(data_manage.EdbInfoLog)
+			edbLog.EdbInfoId = edbInfo.EdbInfoId
+			edbLog.SourceName = edbInfo.SourceName
+			edbLog.Source = edbInfo.Source
+			edbLog.EdbCode = edbInfo.EdbCode
+			edbLog.EdbName = edbInfo.EdbName
+			edbLog.ClassifyId = edbInfo.ClassifyId
+			edbLog.SysUserId = sysUser.AdminId
+			edbLog.SysUserRealName = sysUser.RealName
+			edbLog.CreateTime = time.Now()
+			edbLog.Content = string(this.Ctx.Input.RequestBody)
+			edbLog.Status = "新增指标"
+			edbLog.Method = this.Ctx.Input.URI()
+			go data_manage.AddEdbInfoLog(edbLog)
+		}
+
+		if k <= 0 {
+			resp.EdbInfoId = edbInfo.EdbInfoId
+			resp.UniqueCode = edbInfo.UniqueCode
+		}
+	}
+
+	//// 试用平台更新用户累计新增指标数
+	//adminItem, e := system.GetSysAdminById(sysUser.AdminId)
+	//if e != nil {
+	//	br.Msg = "操作失败"
+	//	br.ErrMsg = "获取系统用户数据失败,Err:" + err.Error()
+	//	return
+	//}
+	//if utils.BusinessCode == utils.BusinessCodeSandbox && adminItem.DepartmentName == "ETA试用客户" {
+	//	go func() {
+	//		var r etaTrialService.EtaTrialUserReq
+	//		r.Mobile = adminItem.Mobile
+	//		_, _ = etaTrialService.UpdateUserIndexNum(r)
+	//	}()
+	//}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+	br.IsAddLog = true
+}
+
+// EdbInfoExistCheck
+// @Title 新增指标-检验指标是否存在接口
+// @Description 新增指标-检验指标是否存在接口
+// @Param   Source   query   int  true       "来源:1:同花顺,2:wind"
+// @Param   SubSource   query   int  true       "子数据来源:0:经济数据库,1:日期序列"
+// @Param   EdbCode   query   string  false       "指标编码/指标代码"
+// @Param   StockCode   query   string  false       "证券代码"
+// @Success 200 {object} data_manage.EdbInfoExistCheckResp
+// @router /edb_info/exist/check [get]
+func (this *EdbInfoController) EdbInfoExistCheck() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		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)
+	subSource, _ := this.GetInt("SubSource")
+	stockCode := this.GetString("StockCode")
+
+	if source <= 0 {
+		br.Msg = "无效的数据来源"
+		return
+	}
+
+	if edbCode == "" {
+		br.Msg = "请输入指标ID"
+		return
+	}
+
+	if source != utils.DATA_SOURCE_WIND && source != utils.DATA_SOURCE_THS {
+		br.Msg = "无效的数据来源"
+		return
+	}
+	if subSource != utils.DATA_SUB_SOURCE_DATE {
+		br.Msg = "无效的数据库来源"
+		return
+	}
+
+	var indexCodeArr []string
+	edbCodeArr := strings.Split(edbCode, ",")
+	stockCodeArr := strings.Split(stockCode, ",")
+
+	var prefix string
+	if source == utils.DATA_SOURCE_WIND {
+		prefix = utils.WindDbWsd
+	} else if source == utils.DATA_SOURCE_THS {
+		prefix = utils.ThsDs
+	} else {
+		br.Msg = "来源错误"
+		br.ErrMsg = "来源错误"
+		return
+	}
+	for _, sv := range stockCodeArr {
+		for _, ev := range edbCodeArr {
+			indexCode := prefix + sv + ev
+			indexCodeArr = append(indexCodeArr, indexCode)
+		}
+	}
+	indexList, err := data_manage.GetEdbInfoByEdbCodeList(source, indexCodeArr)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "校验指标是否存在失败"
+		br.ErrMsg = "校验指标是否存在失败,Err:" + err.Error()
+		return
+	}
+	var existStockCodeArr []string
+	var existEdbCodeArr []string
+	var existClassifyId []int
+	var existIndexId []int
+
+	for _, indexItem := range indexList {
+		for _, sv := range stockCodeArr {
+			for _, ev := range edbCodeArr {
+				if strings.Contains(indexItem.EdbCode, sv) {
+					existStockCodeArr = append(existStockCodeArr, sv)
+				}
+				if strings.Contains(indexItem.EdbCode, ev) {
+					existEdbCodeArr = append(existEdbCodeArr, ev)
+					existClassifyId = append(existClassifyId, indexItem.ClassifyId)
+					existIndexId = append(existIndexId, indexItem.EdbInfoId)
+				}
+			}
+		}
+	}
+
+	resp := new(data_manage.EdbInfoExistCheckResp)
+	if len(indexList) > 0 {
+		resp.IndexExist = true
+	}
+	resp.ExistEdbCodeArr = existEdbCodeArr
+	resp.ExistStockCodeArr = existStockCodeArr
+	resp.ExistClassifyId = existClassifyId
+	resp.ExistIndexId = existIndexId
+	resp.ExistEdbInfo = indexList
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 48 - 3
models/data_manage/edb_data_base.go

@@ -12,11 +12,16 @@ func GetEdbDataTableName(source, subSource int) (tableName string) {
 	switch source {
 	case utils.DATA_SOURCE_THS:
 		tableName = "edb_data_ths"
-	case utils.DATA_SOURCE_WIND:
-		if subSource == utils.DATA_SUB_SOURCE_EDB {
-			tableName = "edb_data_wind"
+		if subSource == utils.DATA_SUB_SOURCE_DATE {
+			tableName = "edb_data_ths_ds"
 		} else {
+			tableName = "edb_data_ths"
+		}
+	case utils.DATA_SOURCE_WIND:
+		if subSource == utils.DATA_SUB_SOURCE_DATE {
 			tableName = "edb_data_wind_wsd"
+		} else {
+			tableName = "edb_data_wind"
 		}
 	case utils.DATA_SOURCE_PB, utils.DATA_SOURCE_PB_FINANCE: //彭博经济数据、彭博财务数据
 		tableName = "edb_data_pb"
@@ -205,3 +210,43 @@ func GetEdbDataBaseByCodeAndDate(source, subSource int, edbCode string, startDat
 	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
 	return
 }
+
+func GetEdbDataAllByEdbCodeAndSubSource(edbCode string, source, subSource, limit int) (items []*EdbInfoSearchData, err error) {
+	var pars []interface{}
+	pars = append(pars, edbCode)
+	o := orm.NewOrmUsingDB("data")
+
+	tableName := GetEdbDataTableNameAndSubSource(source, subSource)
+	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
+}
+
+// GetEdbDataTableName 指标数据->存储表
+func GetEdbDataTableNameAndSubSource(source, subSource int) (tableName string) {
+	switch source {
+	case utils.DATA_SOURCE_WIND:
+		if subSource == utils.DATA_SUB_SOURCE_EDB {
+			tableName = "edb_data_wind"
+		} else {
+			tableName = "edb_data_wind_wsd"
+		}
+	case utils.DATA_SOURCE_THS:
+		if subSource == utils.DATA_SUB_SOURCE_EDB {
+			tableName = "edb_data_ths"
+		} else {
+			tableName = "edb_data_ths_ds"
+		}
+	default:
+		edbSource := EdbSourceIdMap[source]
+		if edbSource != nil {
+			tableName = edbSource.TableName
+		}
+	}
+	return
+}

+ 63 - 0
models/data_manage/edb_data_ths_ds.go

@@ -0,0 +1,63 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func ModifyEdbInfoThsDsDataStatus(edbInfoId int64, edbCode string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	tableName := `edb_data_ths_ds`
+	sql := ` UPDATE %s SET edb_info_id=?,modify_time=NOW() WHERE edb_code=? `
+	sql = fmt.Sprintf(sql, tableName)
+	_, err = o.Raw(sql, edbInfoId, edbCode).Exec()
+	return
+}
+
+// GetEdbDataList 获取指标的数据(日期正序返回)
+func GetEdbDataThsDsList(endInfoId int, startDate, endDate string) (list []*EdbDataList, err error) {
+	tableName := `edb_data_ths_ds`
+	var pars []interface{}
+	sql := `SELECT edb_data_id,edb_info_id,data_time,value,data_timestamp FROM %s WHERE edb_info_id=? `
+	if startDate != "" {
+		sql += ` AND data_time>=? `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql += ` AND data_time<=? `
+		pars = append(pars, endDate)
+	}
+
+	sql += ` ORDER BY data_time ASC `
+	sql = fmt.Sprintf(sql, tableName)
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql, endInfoId, pars).QueryRows(&list)
+	return
+}
+
+func GetTHsDsDataCountByCondition(condition string, pars []interface{}, source int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	tableName := `edb_data_ths_ds`
+	sql := ` SELECT COUNT(1) AS count FROM %s WHERE 1=1 `
+	sql = fmt.Sprintf(sql, tableName)
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func GetThsDsDataListByCondition(condition string, pars []interface{}, source, pageSize, startSize int) (item []*EdbData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	tableName := `edb_data_ths_ds`
+	sql := ` SELECT * FROM %s WHERE 1=1 `
+	sql = fmt.Sprintf(sql, tableName)
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY data_time DESC `
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	return
+}

+ 63 - 0
models/data_manage/edb_data_wind_wsd.go

@@ -0,0 +1,63 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func ModifyEdbInfoWindWsdDataStatus(source, subSource int, edbInfoId int64, edbCode string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	tableName := GetEdbDataTableNameAndSubSource(source, subSource)
+	sql := ` UPDATE %s SET edb_info_id=?,modify_time=NOW() WHERE edb_code=? `
+	sql = fmt.Sprintf(sql, tableName)
+	_, err = o.Raw(sql, edbInfoId, edbCode).Exec()
+	return
+}
+
+// GetEdbDataList 获取指标的数据(日期正序返回)
+func GetEdbDataWsdList(endInfoId int, startDate, endDate string) (list []*EdbDataList, err error) {
+	tableName := `edb_data_wind_wsd`
+	var pars []interface{}
+	sql := `SELECT edb_data_id,edb_info_id,data_time,value,data_timestamp FROM %s WHERE edb_info_id=? `
+	if startDate != "" {
+		sql += ` AND data_time>=? `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql += ` AND data_time<=? `
+		pars = append(pars, endDate)
+	}
+
+	sql += ` ORDER BY data_time ASC `
+	sql = fmt.Sprintf(sql, tableName)
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql, endInfoId, pars).QueryRows(&list)
+	return
+}
+
+func GetEdbWsdDataCountByCondition(condition string, pars []interface{}, source int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	tableName := `edb_data_wind_wsd`
+	sql := ` SELECT COUNT(1) AS count FROM %s WHERE 1=1 `
+	sql = fmt.Sprintf(sql, tableName)
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func GetEdbWsdDataListByCondition(condition string, pars []interface{}, source, pageSize, startSize int) (item []*EdbData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	tableName := `edb_data_wind_wsd`
+	sql := ` SELECT * FROM %s WHERE 1=1 `
+	sql = fmt.Sprintf(sql, tableName)
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY data_time DESC `
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	return
+}

+ 61 - 3
models/data_manage/edb_info.go

@@ -111,6 +111,7 @@ type EdbInfoSearch struct {
 	Unit      string `description:"单位"`
 	Frequency string `description:"频率"`
 	DataList  []*EdbInfoSearchData
+	StockList []*StockInfo `description:"时序数据"`
 }
 
 type EdbInfoSearchData struct {
@@ -574,9 +575,10 @@ func ModifyCalculateEdbInfo(item *EditEdbInfoReq) (err error) {
 }
 
 type AddEdbInfoResp struct {
-	EdbInfoId  int    `description:"指标ID"`
-	UniqueCode string `description:"指标唯一编码"`
-	ClassifyId int    `description:"分类id"`
+	EdbInfoId    int      `description:"指标ID"`
+	UniqueCode   string   `description:"指标唯一编码"`
+	ClassifyId   int      `description:"分类id"`
+	ExistEdbName []string `description:"重复指标名称"`
 }
 
 // 根据基础指标获取所有关联指标
@@ -1566,3 +1568,59 @@ func GetEdbInfoAdminList(edbType int) (list []int, err error) {
 	_, err = o.Raw(sql, edbType).QueryRows(&list)
 	return
 }
+
+type StockInfo struct {
+	StockCode string
+	EdbCode   string
+	DataList  []*EdbInfoSearchData
+}
+
+type BatchAddEdbInfoReq struct {
+	BatchList []*BatchAddEdbInfo
+}
+
+type BatchAddEdbInfo struct {
+	Source     int    `description:"来源id"`
+	EdbName    string `description:"指标名称"`
+	Frequency  string `description:"频率"`
+	Unit       string `description:"单位"`
+	ClassifyId int    `description:"分类id"`
+	StockCode  string `description:"证券代码"`
+	EdbCode    string `description:"指标编码"`
+}
+
+func GetEdbInfoWsdMaxAndMinInfo(source, subSource int, edbCode string) (item *EdbInfoMaxAndMinInfo, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ``
+	tableName := GetEdbDataTableNameAndSubSource(source, subSource)
+	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 %s WHERE edb_code=? `
+	sql = fmt.Sprintf(sql, tableName)
+	err = o.Raw(sql, edbCode).QueryRow(&item)
+	if err != nil {
+		return
+	}
+
+	var latest_value float64
+	sql = ` SELECT value AS latest_value FROM %s WHERE edb_code=? ORDER BY data_time DESC LIMIT 1 `
+	sql = fmt.Sprintf(sql, tableName)
+	err = o.Raw(sql, edbCode).QueryRow(&latest_value)
+	item.LatestValue = latest_value
+	return
+}
+
+// GetEdbInfoByNames 根据名称获取普通的指标
+func GetEdbInfoByNames(edbNames string) (items []*EdbInfoList, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM edb_info WHERE edb_name IN (` + edbNames + `) AND edb_info_type = 0 `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+type EdbInfoExistCheckResp struct {
+	IndexExist        bool       `description:"指标是否存在:true,存在,false:不存在"`
+	ExistStockCodeArr []string   `description:"存在的证券代码"`
+	ExistEdbCodeArr   []string   `description:"存在的指标代码"`
+	ExistClassifyId   []int      `description:"存在的分类id"`
+	ExistIndexId      []int      `description:"存在的指标id"`
+	ExistEdbInfo      []*EdbInfo `description:"存在的指标"`
+}

+ 18 - 0
routers/commentsRouter.go

@@ -583,6 +583,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "EdbInfoBatchAdd",
+            Router: `/edb_info/batch/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "EdbChartList",
@@ -628,6 +637,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "EdbInfoExistCheck",
+            Router: `/edb_info/exist/check`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_mobile/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "EdbInfoFilterByEs",

+ 30 - 0
services/data/base_edb_lib.go

@@ -301,3 +301,33 @@ func HttpPost(url, postData string, params ...string) ([]byte, error) {
 	fmt.Println("HttpPost:" + string(b))
 	return b, err
 }
+
+// AddEdbData 新增指标数据
+func AddEdbDataWindWsd(source int, stockCode, edbCode string) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = edbCode
+	param["StockCode"] = stockCode
+	param["Source"] = source
+	urlStr := `wind/wsd/add`
+	if urlStr == "" {
+		err = fmt.Errorf("未实现该指标的刷新接口,请联系管理员")
+		return
+	}
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}
+
+// AddEdbDataThsDs 新增指标数据
+func AddEdbDataThsDs(source int, stockCode, edbCode string) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = edbCode
+	param["StockCode"] = stockCode
+	param["Source"] = source
+	urlStr := `ths/ds/add`
+	if urlStr == "" {
+		err = fmt.Errorf("未实现该指标的刷新接口,请联系管理员")
+		return
+	}
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}

+ 136 - 0
services/data/edb_info.go

@@ -1542,3 +1542,139 @@ func getEdbRuleTitle(edbInfo, parentEdbInfo *data_manage.EdbInfo, childList []da
 
 	return
 }
+
+// EdbInfoAdd 添加指标到指标库
+func EdbInfoWsdAdd(item *data_manage.EdbInfo) (edbInfo *data_manage.EdbInfo, err error, errMsg string, isSendEmail bool) {
+	isSendEmail = true
+	//判断指标名称是否存在
+	var condition string
+	var pars []interface{}
+
+	condition += " AND edb_name=? "
+	pars = append(pars, item.EdbName)
+
+	count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	if err != nil {
+		errMsg = "判断指标名称是否存在失败"
+		err = errors.New("判断指标名称是否存在失败,Err:" + err.Error())
+		return
+	}
+
+	if count > 0 {
+		errMsg = "指标名称已存在,请重新填写"
+		err = errors.New(errMsg)
+		isSendEmail = false
+		return
+	}
+
+	source := item.Source
+
+	edbInfo = new(data_manage.EdbInfo)
+	edbInfo.Source = source
+	sourceNameMap := map[int]string{
+		utils.DATA_SOURCE_THS:                 "同花顺",
+		utils.DATA_SOURCE_WIND:                "wind",
+		utils.DATA_SOURCE_PB:                  "彭博",
+		utils.DATA_SOURCE_PB_FINANCE:          "彭博财务",
+		utils.DATA_SOURCE_MANUAL:              "手工数据",
+		utils.DATA_SOURCE_LZ:                  "隆众",
+		utils.DATA_SOURCE_YS:                  "SMM",
+		utils.DATA_SOURCE_GL:                  "钢联",
+		utils.DATA_SOURCE_ZZ:                  "郑商所",
+		utils.DATA_SOURCE_DL:                  "大商所",
+		utils.DATA_SOURCE_SH:                  "上期所",
+		utils.DATA_SOURCE_CFFEX:               "中金所",
+		utils.DATA_SOURCE_SHFE:                "上期能源",
+		utils.DATA_SOURCE_GIE:                 "欧洲天然气",
+		utils.DATA_SOURCE_LT:                  "路透",
+		utils.DATA_SOURCE_COAL:                "中国煤炭网",
+		utils.DATA_SOURCE_GOOGLE_TRAVEL:       "our world in data",
+		utils.DATA_SOURCE_MYSTEEL_CHEMICAL:    "钢联化工",
+		utils.DATA_SOURCE_EIA_STEO:            "EIA STEO报告",
+		utils.DATA_SOURCE_COM_TRADE:           "UN",
+		utils.DATA_SOURCE_SCI:                 "SCI",
+		utils.DATA_SOURCE_BAIINFO:             "BAIINFO",
+		utils.DATA_SOURCE_STOCK_PLANT:         "存量装置",
+		utils.DATA_SOURCE_NATIONAL_STATISTICS: "国家统计局",
+		utils.DATA_SOURCE_FUBAO:               "富宝数据",
+	}
+
+	sourceName, ok := sourceNameMap[source]
+	if !ok {
+		edbSource := data_manage.EdbSourceIdMap[source]
+		if edbSource != nil {
+			sourceName = edbSource.SourceName
+		}
+		if sourceName == "" {
+			errMsg = "指标来源异常"
+			err = errors.New(errMsg)
+			return
+		}
+	}
+	edbInfo.SourceName = sourceName
+
+	edbType := 1 //基础指标
+	if source == utils.DATA_SOURCE_STOCK_PLANT {
+		edbType = 2 //计算指标
+	}
+	//从缓存中获取
+	serverUrl := ``
+	if edbInfo.Source == utils.DATA_SOURCE_WIND {
+		windCacheKey := utils.CACHE_WIND_URL + ":" + item.EdbCode
+		serverUrl, _ = utils.Rc.RedisString(windCacheKey)
+		if serverUrl == `` {
+			if len(utils.Hz_Data_WIND_Url_List) >= 1 {
+				serverUrl = utils.Hz_Data_WIND_Url_List[len(utils.Hz_Data_WIND_Url_List)-1] //默认是最后一个服务器地址
+			}
+		}
+	}
+	//获取该层级下最大的排序数
+	maxSort, err := GetEdbClassifyMaxSort(item.ClassifyId, 0)
+	if err != nil {
+		errMsg = "获取失败"
+		err = errors.New("查询排序信息失败,Err:" + err.Error())
+		return
+	}
+
+	edbInfo.EdbCode = item.EdbCode
+	edbInfo.EdbName = item.EdbName
+	edbInfo.EdbNameSource = item.EdbName
+	edbInfo.Frequency = item.Frequency
+	edbInfo.Unit = item.Unit
+	edbInfo.ClassifyId = item.ClassifyId
+	edbInfo.SysUserId = item.SysUserId
+	edbInfo.SysUserRealName = item.SysUserRealName
+	edbInfo.CreateTime = time.Now()
+	edbInfo.ModifyTime = time.Now()
+	edbInfo.ServerUrl = serverUrl
+	edbInfo.Sort = maxSort + 1
+	edbInfo.DataDateType = `交易日`
+	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+	edbInfo.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
+	edbInfo.EdbType = edbType
+	edbInfo.SubSource = item.SubSource
+	edbInfo.SubSourceName = "日期序列"
+	edbInfo.IndicatorCode = item.IndicatorCode
+	edbInfo.StockCode = item.StockCode
+	edbInfoId, err := data_manage.AddEdbInfo(edbInfo)
+	if err != nil {
+		errMsg = "保存失败"
+		err = errors.New("保存失败,Err:" + err.Error())
+		return
+	}
+	edbInfo.EdbInfoId = int(edbInfoId)
+	//保存数据
+	err = data_manage.ModifyEdbInfoWindWsdDataStatus(source, item.SubSource, edbInfoId, item.EdbCode)
+	if err != nil {
+		errMsg = "保存失败"
+		err = errors.New("修改数据对应指标ID失败,Err:" + err.Error())
+		return
+	}
+	maxAndMinItem, _ := data_manage.GetEdbInfoWsdMaxAndMinInfo(source, item.SubSource, item.EdbCode)
+	if maxAndMinItem != nil {
+		err = data_manage.ModifyEdbInfoMaxAndMinInfo(int(edbInfoId), maxAndMinItem)
+	}
+	//添加es
+	AddOrEditEdbInfoToEs(int(edbInfoId))
+	return
+}

+ 5 - 0
utils/constants.go

@@ -388,3 +388,8 @@ const (
 	UserLoginSalt = "MiQM9yusNA9T2uIH"         // 用户登录盐值
 	DesKeySalt    = "JMCqSoUrTAmyNNIRb0TtlrPk" // DesKey盐值
 )
+
+const (
+	WindDbWsd = "wsd"
+	ThsDs = "thsds"
+)