zwxi 1 سال پیش
والد
کامیت
964f9d0c97

+ 153 - 86
controllers/data_manage/edb_info.go

@@ -1697,87 +1697,113 @@ func (this *EdbInfoController) EdbInfoSearch() {
 		}
 		if isAdd {
 			if subSource == utils.DATA_SUB_SOURCE_DATE {
-				//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
+				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
+						}
 
-					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)
+						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
 				}
-				searchItem.StockList = stockList
 			} else {
 				dataList, err := data_manage.GetEdbDataAllByEdbCode(edbCode, source, subSource, utils.EDB_DATA_LIMIT)
 				if err != nil && err.Error() != utils.ErrNoRow() {
@@ -5094,9 +5120,19 @@ func (this *EdbInfoController) EdbInfoExistCheck() {
 	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 := utils.WindDbWsd + sv + ev
+			indexCode := prefix + sv + ev
 			indexCodeArr = append(indexCodeArr, indexCode)
 		}
 	}
@@ -5108,6 +5144,9 @@ func (this *EdbInfoController) EdbInfoExistCheck() {
 	}
 	var existStockCodeArr []string
 	var existEdbCodeArr []string
+	var existClassifyId []int
+	var existIndexId []int
+
 	for _, indexItem := range indexList {
 		for _, sv := range stockCodeArr {
 			for _, ev := range edbCodeArr {
@@ -5116,6 +5155,8 @@ func (this *EdbInfoController) EdbInfoExistCheck() {
 				}
 				if strings.Contains(indexItem.EdbCode, ev) {
 					existEdbCodeArr = append(existEdbCodeArr, ev)
+					existClassifyId = append(existClassifyId, indexItem.ClassifyId)
+					existIndexId = append(existIndexId, indexItem.EdbInfoId)
 				}
 			}
 		}
@@ -5127,6 +5168,9 @@ func (this *EdbInfoController) EdbInfoExistCheck() {
 	}
 	resp.ExistEdbCodeArr = existEdbCodeArr
 	resp.ExistStockCodeArr = existStockCodeArr
+	resp.ExistClassifyId = existClassifyId
+	resp.ExistIndexId = existIndexId
+	resp.ExistEdbInfo = indexList
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
@@ -5174,19 +5218,39 @@ func (this *EdbInfoController) EdbInfoBatchAdd() {
 		return
 	}
 
-	source := utils.DATA_SOURCE_WIND
-	if source <= 0 {
-		br.Msg = "无效的数据来源"
+	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
 	}
-
-	resp := new(data_manage.AddEdbInfoResp)
 
 	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
@@ -5213,14 +5277,17 @@ func (this *EdbInfoController) EdbInfoBatchAdd() {
 		}
 
 		edbInfoItem := new(data_manage.EdbInfo)
-		edbInfoItem.Source = source
-		switch source {
+		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.EdbCode = utils.WindDbWsd + v.StockCode + v.EdbCode
 		edbInfoItem.EdbName = v.EdbName
 		edbInfoItem.Frequency = v.Frequency
 		edbInfoItem.Unit = v.Unit

+ 6 - 0
models/data_manage/edb_data_base.go

@@ -261,6 +261,12 @@ func GetEdbDataTableNameAndSubSource(source, subSource int) (tableName string) {
 		} 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 {

+ 2 - 2
models/data_manage/edb_data_wind_wsd.go

@@ -5,9 +5,9 @@ import (
 	"github.com/beego/beego/v2/client/orm"
 )
 
-func ModifyEdbInfoWindWsdDataStatus(edbInfoId int64, edbCode string) (err error) {
+func ModifyEdbInfoWindWsdDataStatus(source, subSource int, edbInfoId int64, edbCode string) (err error) {
 	o := orm.NewOrmUsingDB("data")
-	tableName := `edb_data_wind_wsd`
+	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()

+ 18 - 6
models/data_manage/edb_info.go

@@ -588,9 +588,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:"重复指标名称"`
 }
 
 // 根据基础指标获取所有关联指标
@@ -1649,9 +1650,12 @@ func GetEdbInfoAdminList(edbType int) (list []int, err error) {
 }
 
 type EdbInfoExistCheckResp struct {
-	IndexExist        bool     `description:"指标是否存在:true,存在,false:不存在"`
-	ExistStockCodeArr []string `description:"存在的证券代码"`
-	ExistEdbCodeArr   []string `description:"存在的指标代码"`
+	IndexExist        bool       `description:"指标是否存在:true,存在,false:不存在"`
+	ExistStockCodeArr []string   `description:"存在的证券代码"`
+	ExistEdbCodeArr   []string   `description:"存在的指标代码"`
+	ExistClassifyId   []int      `description:"存在的分类id"`
+	ExistIndexId      []int      `description:"存在的指标id"`
+	ExistEdbInfo      []*EdbInfo `description:"存在的指标"`
 }
 
 type BatchAddEdbInfoReq struct {
@@ -1686,3 +1690,11 @@ func GetEdbInfoWsdMaxAndMinInfo(source, subSource int, edbCode string) (item *Ed
 	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
+}

+ 1 - 1
services/data/edb_info.go

@@ -3028,7 +3028,7 @@ func EdbInfoWsdAdd(item *data_manage.EdbInfo) (edbInfo *data_manage.EdbInfo, err
 	}
 	edbInfo.EdbInfoId = int(edbInfoId)
 	//保存数据
-	err = data_manage.ModifyEdbInfoWindWsdDataStatus(edbInfoId, item.EdbCode)
+	err = data_manage.ModifyEdbInfoWindWsdDataStatus(source, item.SubSource, edbInfoId, item.EdbCode)
 	if err != nil {
 		errMsg = "保存失败"
 		err = errors.New("修改数据对应指标ID失败,Err:" + err.Error())

+ 1 - 0
utils/constants.go

@@ -359,6 +359,7 @@ const (
 
 const (
 	WindDbWsd = "wsd"
+	ThsDs = "thsds"
 )
 
 const (