Преглед изворни кода

新增wsd数据保存接口

tuoling805 пре 1 година
родитељ
комит
6fe7cf8758
3 измењених фајлова са 327 додато и 0 уклоњено
  1. 154 0
      controllers/data_manage/edb_info.go
  2. 37 0
      models/data_manage/edb_info.go
  3. 136 0
      services/data/edb_info.go

+ 154 - 0
controllers/data_manage/edb_info.go

@@ -5055,3 +5055,157 @@ func (this *EdbInfoController) EdbInfoExistCheck() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// 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
+	}
+
+	source := utils.DATA_SOURCE_WIND
+	if source <= 0 {
+		br.Msg = "无效的数据来源"
+		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.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 = source
+		switch source {
+		case utils.DATA_SOURCE_WIND:
+			edbInfoItem.SourceName = "wind"
+		}
+		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
+		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
+}

+ 37 - 0
models/data_manage/edb_info.go

@@ -46,6 +46,10 @@ type EdbInfo struct {
 	Calendar         string  `description:"公历/农历" orm:"default(公历);"`
 	DataDateType     string  `orm:"column(data_date_type);size(255);null;default(交易日)"`
 	ManualSave       int     `description:"是否有手动保存过上下限: 0-否; 1-是"`
+	SubSource        int     `description:"子数据来源:0:经济数据库,1:日期序列"`
+	SubSourceName    string  `description:"子数据来源名称"`
+	IndicatorCode    string  `description:"指标代码"`
+	StockCode        string  `description:"证券代码"`
 }
 type EdbInfoFullClassify struct {
 	*EdbInfo
@@ -1807,3 +1811,36 @@ type EdbInfoExistCheckResp struct {
 	ExistStockCodeArr []string `description:"存在的证券代码"`
 	ExistEdbCodeArr   []string `description:"存在的指标代码"`
 }
+
+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
+}

+ 136 - 0
services/data/edb_info.go

@@ -3115,3 +3115,139 @@ func GetChartMenuTreeRecursive(list []*data_manage.ChartClassifyItems, parentId
 	}
 	return res
 }
+
+// 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.ModifyEdbInfoDataStatus(edbInfoId, source, 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
+}