瀏覽代碼

fix:新增外部数据指标

Roc 10 月之前
父節點
當前提交
c6c8be376e

+ 1 - 1
controllers/data_manage/bloomberg_data.go

@@ -357,7 +357,7 @@ func (this *BloombergDataController) NameCheck() {
 	}
 
 	// 重名校验
-	edbList, e := data_manage.GetEdbInfoByNameArr(indexNames)
+	edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
 	if e != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "获取重名指标失败, Err: " + e.Error()

+ 145 - 144
controllers/data_manage/business_data.go

@@ -54,9 +54,9 @@ func (c *EdbBusinessController) SourceList() {
 // @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Param   Frequency   query   string  true       "频度"
 // @Param   Source   query   int  true       "来源"
-// @Param   KeyWord   query   string  true       "编码/名称关键词"
+// @Param   Keywords   query   string  true       "编码/名称关键词"
 // @Success 200 {object} models.DataListResp
-// @router /business_data/index/list [get]
+// @router /business_data/list [get]
 func (c *EdbBusinessController) List() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -65,7 +65,7 @@ func (c *EdbBusinessController) List() {
 	}()
 	pageSize, _ := c.GetInt("PageSize")
 	currentIndex, _ := c.GetInt("CurrentIndex")
-	keyword := c.GetString("KeyWord")
+	keywords := c.GetString("Keywords")
 	frequency := c.GetString("Frequency")
 	source, _ := c.GetInt("Source") //分类
 
@@ -81,12 +81,12 @@ func (c *EdbBusinessController) List() {
 	var condition string
 	var pars []interface{}
 
-	if keyword != "" {
-		keywordSlice := strings.Split(keyword, " ")
+	if keywords != "" {
+		keywordSlice := strings.Split(keywords, " ")
 		if len(keywordSlice) > 0 {
 			tmpConditionSlice := make([]string, 0)
 			tmpConditionSlice = append(tmpConditionSlice, ` a.index_name like ? or a.index_code like ? `)
-			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
+			pars = utils.GetLikeKeywordPars(pars, keywords, 2)
 
 			for _, v := range keywordSlice {
 				if v == ` ` || v == `` {
@@ -99,7 +99,7 @@ func (c *EdbBusinessController) List() {
 
 		} else {
 			condition += ` a.index_name like ? or a.index_code like ? `
-			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
+			pars = utils.GetLikeKeywordPars(pars, keywords, 2)
 		}
 	}
 
@@ -146,7 +146,7 @@ func (c *EdbBusinessController) List() {
 // AddCheck
 // @Title 新增校验
 // @Description 新增校验
-// @Param	request	body data_manage.BloombergSourceBatchAddCheckReq true "type json string"
+// @Param	request	body request.BusinessDataBatchAddCheckReq true "type json string"
 // @Success 200 string "操作成功"
 // @router /business_data/add_check [post]
 func (c *EdbBusinessController) AddCheck() {
@@ -186,11 +186,10 @@ func (c *EdbBusinessController) AddCheck() {
 		existMap[v.EdbCode] = v
 	}
 
-	// 非全选-不需要频率等筛选条件
-	bloombergOb := new(data_manage.BaseFromBloombergIndex)
+	list := make([]*data_manage.BaseFromBusinessIndexItem, 0)
 	obj := data_manage.BaseFromBusinessIndex{}
-
 	if !req.ListAll {
+		// 非全选-不需要频率等筛选条件
 		if codeLen == 0 {
 			br.Msg = "请选择指标"
 			return
@@ -204,74 +203,157 @@ func (c *EdbBusinessController) AddCheck() {
 		cond := fmt.Sprintf(` AND %s IN (%s)`, data_manage.BaseFromBusinessIndexCols.IndexCode, utils.GetOrmInReplace(codeLen))
 		pars := make([]interface{}, 0)
 		pars = append(pars, req.IndexCodes)
-		list, e := obj.GeItemsByCondition(cond, pars, 0)
+		list, e = obj.GeItemsByCondition(cond, pars, 0)
 		if e != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取Bloomberg原始指标列表失败, Err: " + e.Error()
 			return
 		}
-		resp := make([]*data_manage.BaseFromBloombergIndexItem, 0)
-		for _, v := range list {
-			t := data_manage.FormatBaseFromBloombergIndex2Item(v)
-			ed := existMap[v.IndexCode]
-			if ed != nil {
-				t.EdbExist = 1
-				t.EdbInfoId = ed.EdbInfoId
-				t.EdbUniqueCode = ed.UniqueCode
-				t.EdbClassifyId = ed.ClassifyId
+	} else {
+		// 全选-需要频率等筛选条件
+		condition := ``
+		pars := make([]interface{}, 0)
+
+		// 筛选项
+		req.Keywords = strings.TrimSpace(req.Keywords)
+		if req.Keywords != "" {
+			keywordSlice := strings.Split(req.Keywords, " ")
+			if len(keywordSlice) > 0 {
+				tmpConditionSlice := make([]string, 0)
+				tmpConditionSlice = append(tmpConditionSlice, ` a.index_name like ? or a.index_code like ? `)
+				pars = utils.GetLikeKeywordPars(pars, req.Keywords, 2)
+
+				for _, v := range keywordSlice {
+					if v == ` ` || v == `` {
+						continue
+					}
+					tmpConditionSlice = append(tmpConditionSlice, ` a.index_name like ? or a.index_code like ? `)
+					pars = utils.GetLikeKeywordPars(pars, v, 2)
+				}
+				condition += ` AND (` + strings.Join(tmpConditionSlice, " or ") + `)`
+
+			} else {
+				condition += ` a.index_name like ? or a.index_code like ? `
+				pars = utils.GetLikeKeywordPars(pars, req.Keywords, 2)
 			}
-			resp = append(resp, t)
 		}
 
-		br.Data = resp
-		br.Msg = "校验成功"
-		br.Ret = 200
-		br.Success = true
-		return
+		if req.Frequency != "" {
+			condition += ` AND a.frequency = ? `
+			pars = append(pars, req.Frequency)
+		}
+
+		if req.Source > 0 {
+			condition += ` AND a.source = ? `
+			pars = append(pars, req.Source)
+		}
+
+		// 排除对应指标
+		if codeLen > 0 {
+			condition += fmt.Sprintf(` AND a.%s NOT IN (%s)`, data_manage.BaseFromBloombergIndexCols.IndexCode, utils.GetOrmInReplace(codeLen))
+			pars = append(pars, req.IndexCodes)
+		}
+		// 查询max+1个指标
+		list, e = obj.GeItemsByCondition(condition, pars, codeMax+1)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取外部原始指标列表失败, Err: " + e.Error()
+			return
+		}
 	}
 
-	// 全选-需要频率等筛选条件
-	cond := ``
-	pars := make([]interface{}, 0)
-	// 筛选项
-	req.Keywords = strings.TrimSpace(req.Keywords)
-	if req.Keywords != "" {
-		cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ?)`, data_manage.BaseFromBloombergIndexCols.IndexCode, data_manage.BaseFromBloombergIndexCols.IndexName)
-		kw := fmt.Sprint("%", req.Keywords, "%")
-		pars = append(pars, kw, kw)
+	if len(list) > codeMax {
+		br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
+		return
 	}
-	if req.Frequency != "" {
-		cond += fmt.Sprintf(` AND %s = ?`, data_manage.BaseFromBloombergIndexCols.Frequency)
-		pars = append(pars, req.Frequency)
+
+	resp := make([]*data_manage.BaseFromBusinessIndexItem, 0)
+	for _, v := range list {
+		if v.EdbInfoId > 0 {
+			v.EdbExist = 1
+		}
+		resp = append(resp, v)
 	}
-	// 排除对应指标
-	if codeLen > 0 {
-		cond += fmt.Sprintf(` AND %s NOT IN (%s)`, data_manage.BaseFromBloombergIndexCols.IndexCode, utils.GetOrmInReplace(codeLen))
-		pars = append(pars, req.IndexCodes)
+
+	br.Data = resp
+	br.Msg = "校验成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// NameCheck
+// @Title 重名校验
+// @Description 批量新增
+// @Param	request	body data_manage.AddEdbInfoReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /business_data/name_check [post]
+func (c *EdbBusinessController) NameCheck() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
 	}
-	// 查询max+1个指标
-	list, e := bloombergOb.GetItemsByCondition(cond, pars, []string{}, orderRule, codeMax+1)
-	if e != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取Bloomberg原始指标列表失败, Err: " + e.Error()
+	var req []*data_manage.AddEdbInfoReq
+	if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
 		return
 	}
-	if len(list) > codeMax {
-		br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
+	if len(req) == 0 {
+		br.Msg = "请选择指标"
 		return
 	}
 
-	resp := make([]*data_manage.BaseFromBloombergIndexItem, 0)
-	for _, v := range list {
-		t := data_manage.FormatBaseFromBloombergIndex2Item(v)
-		ed := existMap[v.IndexCode]
-		if ed != nil {
-			t.EdbExist = 1
-			t.EdbInfoId = ed.EdbInfoId
-			t.EdbUniqueCode = ed.UniqueCode
-			t.EdbClassifyId = ed.ClassifyId
+	type NameCheckResult struct {
+		EdbCode string
+		EdbName string
+		Exist   bool
+	}
+	indexNames := make([]string, 0)
+	resp := make([]*NameCheckResult, 0)
+	for _, v := range req {
+		v.EdbCode = strings.TrimSpace(v.EdbCode)
+		if v.EdbCode == "" {
+			br.Msg = "指标ID不可为空"
+			return
+		}
+		v.EdbName = strings.TrimSpace(v.EdbName)
+		if v.EdbName == "" {
+			br.Msg = "请输入指标名称"
+			return
+		}
+		indexNames = append(indexNames, v.EdbName)
+		resp = append(resp, &NameCheckResult{
+			EdbCode: v.EdbCode,
+			EdbName: v.EdbName,
+		})
+	}
+
+	// 重名校验
+	edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
+		return
+	}
+	nameExists := make(map[string]bool)
+	for _, v := range edbList {
+		nameExists[v.EdbName] = true
+	}
+	if len(nameExists) > 0 {
+		for _, v := range resp {
+			v.Exist = nameExists[v.EdbName]
 		}
-		resp = append(resp, t)
 	}
 
 	br.Data = resp
@@ -359,9 +441,9 @@ func (c *EdbBusinessController) BatchAdd() {
 		}
 	}
 
-	// 限定同一时间最多批量新增30个指标
+	// 限定同一时间最多批量新增100个指标
 	for _, v := range req {
-		var r data.BloombergIndexSource2EdbReq
+		var r data.BusinessIndexSource2EdbReq
 		r.EdbCode = v.EdbCode
 		r.EdbName = v.EdbName
 		r.Frequency = v.Frequency
@@ -370,7 +452,7 @@ func (c *EdbBusinessController) BatchAdd() {
 		r.AdminId = sysUser.AdminId
 		r.AdminRealName = sysUser.RealName
 
-		edbInfo, e, errMsg, skip := data.BloombergIndexSource2Edb(r)
+		edbInfo, e, errMsg, skip := data.BusinessIndexSource2Edb(r)
 		if e != nil {
 			br.Msg = "操作失败"
 			if errMsg != "" {
@@ -425,84 +507,3 @@ func (c *EdbBusinessController) BatchAdd() {
 	br.Success = true
 	br.IsAddLog = true
 }
-
-// NameCheck
-// @Title 重名校验
-// @Description 批量新增
-// @Param	request	body data_manage.AddEdbInfoReq true "type json string"
-// @Success 200 string "操作成功"
-// @router /business_data/name_check [post]
-func (c *EdbBusinessController) NameCheck() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		if br.ErrMsg == "" {
-			br.IsSendEmail = false
-		}
-		c.Data["json"] = br
-		c.ServeJSON()
-	}()
-	sysUser := c.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-	var req []*data_manage.AddEdbInfoReq
-	if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + e.Error()
-		return
-	}
-	if len(req) == 0 {
-		br.Msg = "请选择指标"
-		return
-	}
-
-	type NameCheckResult struct {
-		EdbCode string
-		EdbName string
-		Exist   bool
-	}
-	indexNames := make([]string, 0)
-	resp := make([]*NameCheckResult, 0)
-	for _, v := range req {
-		v.EdbCode = strings.TrimSpace(v.EdbCode)
-		if v.EdbCode == "" {
-			br.Msg = "指标ID不可为空"
-			return
-		}
-		v.EdbName = strings.TrimSpace(v.EdbName)
-		if v.EdbName == "" {
-			br.Msg = "请输入指标名称"
-			return
-		}
-		indexNames = append(indexNames, v.EdbName)
-		resp = append(resp, &NameCheckResult{
-			EdbCode: v.EdbCode,
-			EdbName: v.EdbName,
-		})
-	}
-
-	// 重名校验
-	edbList, e := data_manage.GetEdbInfoByNameArr(indexNames)
-	if e != nil {
-		br.Msg = "操作失败"
-		br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
-		return
-	}
-	nameExists := make(map[string]bool)
-	for _, v := range edbList {
-		nameExists[v.EdbName] = true
-	}
-	if len(nameExists) > 0 {
-		for _, v := range resp {
-			v.Exist = nameExists[v.EdbName]
-		}
-	}
-
-	br.Data = resp
-	br.Msg = "操作成功"
-	br.Ret = 200
-	br.Success = true
-}

+ 4 - 1
models/data_manage/base_from_business_index.go

@@ -143,6 +143,9 @@ type BaseFromBusinessIndexItem struct {
 	CreateTime              string `description:"创建时间"`
 	ModifyTime              string `description:"修改时间"`
 	EdbInfoId               int    `description:"eta指标库的id"`
+	EdbUniqueCode           string `description:"指标库唯一编码"`
+	EdbClassifyId           int    `description:"指标库分类ID"`
+	EdbExist                int    `description:"指标库是否已添加:0-否;1-是"`
 }
 
 func (m *BaseFromBusinessIndex) GetPageItemsByCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*BaseFromBusinessIndexItem, err error) {
@@ -158,7 +161,7 @@ func (m *BaseFromBusinessIndex) GetPageItemsByCondition(condition string, pars [
 }
 
 func (m *BaseFromBusinessIndex) GeItemsByCondition(condition string, pars []interface{}, limitSize int) (items []*BaseFromBusinessIndexItem, err error) {
-	sql := `select * FROM base_from_business_index AS a LEFT JOIN edb_info b on a.index_code=b.edb_code WHERE 1=1 AND b.source=?`
+	sql := `select a.*,b.edb_info_id,b.unique_code as edb_unique_code,b.classify_id as edb_classify_id FROM base_from_business_index AS a LEFT JOIN edb_info b on a.index_code=b.edb_code WHERE 1=1 AND b.source=?`
 	if condition != "" {
 		sql += condition
 	}

+ 3 - 3
models/data_manage/edb_info.go

@@ -1910,13 +1910,13 @@ func GetEdbInfoCount(source int, edbCode string) (count int, err error) {
 }
 
 // GetEdbInfoByNameArr 根据名称获取指标
-func GetEdbInfoByNameArr(names []string) (items []*EdbInfo, err error) {
+func GetEdbInfoByNameArr(names []string, edbInfoType int) (items []*EdbInfo, err error) {
 	if len(names) == 0 {
 		return
 	}
 	o := orm.NewOrmUsingDB("data")
-	sql := fmt.Sprintf(`SELECT edb_info_id, edb_code, edb_name FROM edb_info WHERE edb_name IN (%s)`, utils.GetOrmInReplace(len(names)))
-	_, err = o.Raw(sql, names).QueryRows(&items)
+	sql := fmt.Sprintf(`SELECT edb_info_id, edb_code, edb_name FROM edb_info WHERE edb_name IN (%s) AND edb_info_type = ? `, utils.GetOrmInReplace(len(names)))
+	_, err = o.Raw(sql, names, edbInfoType).QueryRows(&items)
 	return
 }
 

+ 1 - 1
models/data_manage/request/business_data.go

@@ -5,7 +5,7 @@ type BusinessDataListReq struct {
 	PageSize     int    `form:"PageSize"`
 	CurrentIndex int    `form:"CurrentIndex"`
 	Frequency    string `form:"Frequency" description:"频度"`
-	Source       string `form:"Source" description:"来源id"`
+	Source       int    `form:"Source" description:"来源id"`
 	Keywords     string `form:"Keywords" description:"指标ID/指标名称"`
 	ListAll      bool   `form:"ListAll" description:"列表全选"`
 }

+ 61 - 0
services/data/base_from_business.go

@@ -0,0 +1,61 @@
+package data
+
+import (
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
+	"fmt"
+)
+
+type BusinessIndexSource2EdbReq struct {
+	EdbCode       string
+	EdbName       string
+	Frequency     string
+	Unit          string
+	ClassifyId    int
+	AdminId       int
+	AdminRealName string
+}
+
+// BusinessIndexSource2Edb 新增彭博数据源到指标库
+func BusinessIndexSource2Edb(req BusinessIndexSource2EdbReq) (edb *data_manage.EdbInfo, err error, errMsg string, skip bool) {
+	if req.EdbCode == "" {
+		err = fmt.Errorf("指标ID为空")
+		return
+	}
+	defer func() {
+		if err != nil {
+			tips := fmt.Sprintf("BusinessIndexSource2Edb新增失败, Err: %s", err.Error())
+			fmt.Println(tips)
+			utils.FileLog.Info(tips)
+		}
+	}()
+	source := utils.DATA_SOURCE_BUSINESS
+
+	// 是否新增过指标
+	exist, e := data_manage.GetEdbInfoByEdbCode(source, req.EdbCode)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = fmt.Errorf("获取指标是否存在失败, err: %s", e.Error())
+		return
+	}
+	if exist != nil {
+		skip = true
+		return
+	}
+
+	// 开始结束时间
+	var startDate, endDate string
+
+	// 新增指标库
+	edbInfo, e, msg, _ := EdbInfoAdd(source, utils.DATA_SUB_SOURCE_EDB, req.ClassifyId, req.EdbCode, req.EdbName, req.Frequency, req.Unit, startDate, endDate, req.AdminId, req.AdminRealName)
+	if e != nil {
+		errMsg = msg
+		err = fmt.Errorf("EdbInfo: 新增指标失败, err: %s", e.Error())
+		return
+	}
+	edb = edbInfo
+
+	// 新增es
+	go AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
+
+	return
+}

+ 5 - 0
services/data/edb_info.go

@@ -1720,6 +1720,11 @@ func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr, newBase
 
 // EdbInfoAdd 添加指标到指标库
 func EdbInfoAdd(source, subSource, classifyId int, edbCode, edbName, frequency, unit, startDate, endDate string, sysUserId int, sysUserRealName string) (edbInfo *data_manage.EdbInfo, err error, errMsg string, isSendEmail bool) {
+
+	if source == utils.DATA_SOURCE_BUSINESS {
+		return
+	}
+
 	isSendEmail = true
 	//判断指标名称是否存在
 	var condition string