浏览代码

数据源新增涌益生猪

xyxie 1 年之前
父节点
当前提交
560b6fd5c9

+ 520 - 0
controllers/data_manage/yongyi_data.go

@@ -0,0 +1,520 @@
+package data_manage
+
+import (
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+// YongyiClassify
+// @Title 涌益咨询数据分类
+// @Description 涌益咨询数据分类接口
+// @Success 200 {object} data_manage.BaseFromYongyiClassify
+// @router /yongyi/classify [get]
+func (this *EdbInfoController) YongyiClassify() {
+	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
+	}
+
+	classifyAll, err := data_manage.GetAllBaseFromYongyiClassify()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+
+	var ret data_manage.BaseFromYongyiClassifyResp
+	ret.List = classifyAll
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = ret
+}
+
+// YongyiData
+// @Title 获取钢联数据
+// @Description 获取钢联数据接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   ClassifyId   query   string  true       "分类id"
+// @Param   Frequency   query   string  true       "频度名称"
+// @Success 200 {object} data_manage.LzFrequency
+// @router /yongyi/index [get]
+func (this *EdbInfoController) YongyiData() {
+	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
+	}
+
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	var startSize int
+
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId < 0 {
+		br.Msg = "请选择分类"
+		br.ErrMsg = "请选择分类"
+		return
+	}
+
+	//获取指标
+	var condition string
+	var pars []interface{}
+
+	if classifyId >= 0 {
+		condition += ` AND classify_id=? `
+		pars = append(pars, classifyId)
+	}
+
+	yongyiList, err := data_manage.GetYongyiIndex(condition, pars)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	resultList := make([]*data_manage.BaseFromYongyiIndexList, 0)
+	for _, v := range yongyiList {
+		product := new(data_manage.BaseFromYongyiIndexList)
+		product.YongyiIndexId = v.YongyiIndexId
+		product.Unit = v.Unit
+		product.IndexCode = v.IndexCode
+		product.IndexName = v.IndexName
+		product.Frequency = v.Frequency
+		product.ModifyTime = v.ModifyTime
+
+		total, err := data_manage.GetYongyiIndexDataCount(v.IndexCode)
+		page := paging.GetPaging(currentIndex, pageSize, total)
+		dataList, err := data_manage.GetYongyiIndexData(v.IndexCode, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
+			return
+		}
+		if dataList == nil {
+			dataList = make([]*data_manage.BaseFromYongyiData, 0)
+		}
+		product.DataList = dataList
+		product.Paging = page
+		resultList = append(resultList, product)
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resultList
+}
+
+// YongyiSearchList
+// @Title Yongyi模糊搜索
+// @Description Yongyi模糊搜索
+// @Param   Keyword   query   string  ture       "关键字搜索"
+// @Success 200 {object} models.BaseResponse
+// @router /yongyi/search_list [get]
+func (this *EdbInfoController) YongyiSearchList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+
+	//关键字
+	/*keyword := this.GetString("Keyword")
+
+	// todo es 模糊搜索
+	list, err := data_manage.GetYongyiItemList(keyword)
+	if err != nil {
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		br.Msg = "获取失败"
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list*/
+}
+
+// YongyiSingleData
+// @Title 获取Yongyi数据
+// @Description 获取Yongyi单条数据接口
+// @Param   IndexCode   query   string  true       "指标唯一编码"
+// @Success 200 {object} models.BaseResponse
+// @router /yongyi/single_data [get]
+func (this *EdbInfoController) YongyiSingleData() {
+	/*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
+	}
+	indexCode := this.GetString("IndexCode")
+	indexInfo, err := data_manage.GetBaseFromYongyiIndexByIndexCode(indexCode)
+	if err != nil {
+		br.Msg = "获取指标信息失败"
+		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+		return
+	}
+	dataList, err := data_manage.GetYongyiIndexDataByCode(indexCode)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	var ret data_manage.BaseFromYongyiSingleDataResp
+	ret.ClassifyId = indexInfo.ClassifyId
+	ret.BaseFromYongyiIndexId = indexInfo.BaseFromYongyiIndexId
+	ret.IndexCode = indexInfo.IndexCode
+	ret.IndexName = indexInfo.IndexName
+	ret.Frequency = indexInfo.Frequency
+	ret.Interface = indexInfo.Interface
+	ret.CreateTime = indexInfo.CreateTime.Format(utils.FormatDateTime)
+	ret.ModifyTime = indexInfo.ModifyTime.Format(utils.FormatDateTime)
+	ret.Unit = indexInfo.Unit
+	ret.Data = dataList
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = ret*/
+}
+
+// ExportYongyiList
+// @Title 导出Yongyi数据
+// @Description 导出Yongyi数据
+// @Param   IndexName   query   string  false       "名称关键词"
+// @Param   IndexCode   query   string  false       "指标唯一编码"
+// @Param   ClassifyId   query   string  true       "分类"
+// @Param   Frequency   query   string  true       "频度"
+// @Param   UnitName   query   string  false       "单位"
+// @Param   ModifyTime   query   string  false       "更新时间"
+// @Success 200  导出成功
+// @router /export/yongyiList [get]
+func (this *EdbInfoController) ExportYongyiList() {
+	/*br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+
+	//typeName := this.GetString("TypeName") //分类
+	//frequency := this.GetString("Frequency")
+
+	indexCode := this.GetString("IndexCode") //指标唯一编码
+	classifyId, _ := this.GetInt("ClassifyId")
+	secNameList := make([]*models.EdbdataExportList, 0)
+
+	dir, _ := os.Executable()
+	exPath := filepath.Dir(dir)
+
+	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
+	xlsxFile := xlsx.NewFile()
+
+	if classifyId >= 0 && indexCode == "" {
+
+		frequencies, err := data_manage.GetYongyiFrequency(classifyId)
+		if err != nil {
+			fmt.Println("GetYongyiFrequency err:", err.Error())
+			utils.FileLog.Info("GetYongyiFrequency err:" + err.Error())
+			return
+		}
+		for _, frequency := range frequencies {
+
+			//获取指标
+			var pars []interface{}
+			pars = append(pars, classifyId)
+			pars = append(pars, frequency)
+			condition := " AND classify_id=? AND frequency=? "
+			secNameList, err := data_manage.GetYongyiIndex(condition, pars)
+			if err != nil {
+				fmt.Println("获取数据失败,Err:" + err.Error())
+				return
+			}
+			if len(secNameList) <= 0 {
+				fmt.Println("secNameList长度为0")
+				return
+			}
+
+			var sheetNew *xlsx.Sheet
+			if *frequency == "" {
+				newFrequency := "无频度"
+				sheetNew, err = xlsxFile.AddSheet(newFrequency)
+			} else {
+				sheetNew, err = xlsxFile.AddSheet(*frequency)
+			}
+
+			if err != nil {
+				fmt.Println("新增Sheet失败", err.Error())
+				return
+			}
+			//sheetNew.SetColWidth()
+			//获取指标数据
+			windRow := sheetNew.AddRow()
+			secNameRow := sheetNew.AddRow()
+			indexCodeRow := sheetNew.AddRow()
+			frequencyRow := sheetNew.AddRow()
+			unitRow := sheetNew.AddRow()
+			lastModifyDateRow := sheetNew.AddRow()
+			//获取分类下指标最大数据量
+			dataMax, err := data_manage.GetYongyiDataMaxCount(classifyId)
+			if err != nil {
+				fmt.Println("获取指标最大数据量失败", err.Error())
+				return
+			}
+			fmt.Println("dataMax:", dataMax)
+			setRowIndex := 6
+			for k, sv := range secNameList {
+				//获取数据
+				dataList, err := data_manage.GetYongyiIndexDataByCode(sv.IndexCode)
+				if err != nil {
+					br.Msg = "获取数据失败"
+					br.ErrMsg = "获取数据失败,Err:" + err.Error()
+					return
+				}
+				if len(dataList) > 0 {
+					windRow.AddCell().SetValue("Yongyi")
+					secNameRow.AddCell().SetValue("指标名称")
+					indexCodeRow.AddCell().SetValue("指标ID")
+					frequencyRow.AddCell().SetValue("频率")
+					unitRow.AddCell().SetValue("单位")
+					lastModifyDateRow.AddCell().SetValue("更新时间")
+
+					secNameRow.AddCell().SetValue(sv.IndexName)
+					indexCodeRow.AddCell().SetValue(sv.IndexCode)
+					frequencyRow.AddCell().SetValue(sv.Frequency)
+
+					unitRow.AddCell().SetValue(sv.Unit)
+					lastModifyDateRow.AddCell().SetValue(sv.ModifyTime)
+
+					windRow.AddCell()
+					windRow.AddCell()
+					secNameRow.AddCell()
+					indexCodeRow.AddCell()
+					frequencyRow.AddCell()
+					unitRow.AddCell()
+					lastModifyDateRow.AddCell()
+					min := k * 3
+					sheetNew.SetColWidth(min, min, 15)
+
+					if len(dataList) <= 0 {
+						for n := 0; n < dataMax; n++ {
+							rowIndex := setRowIndex + n
+							row := sheetNew.Row(rowIndex)
+							row.AddCell()
+							row.AddCell()
+							row.AddCell()
+						}
+					} else {
+						endRowIndex := 0
+						for rk, dv := range dataList {
+							rowIndex := setRowIndex + rk
+							row := sheetNew.Row(rowIndex)
+							displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
+							displayDateCell := row.AddCell()
+							style := new(xlsx.Style)
+							style.ApplyAlignment = true
+							style.Alignment.WrapText = true
+							displayDateCell.SetStyle(style)
+							displayDateCell.SetDate(displayDate)
+
+							row.AddCell().SetValue(dv.Value)
+							row.AddCell()
+							endRowIndex = rowIndex
+						}
+						if len(dataList) < dataMax {
+							dataLen := dataMax - len(dataList)
+							for n := 0; n < dataLen; n++ {
+								rowIndex := (endRowIndex + 1) + n
+								row := sheetNew.Row(rowIndex)
+								row.AddCell()
+								row.AddCell()
+								row.AddCell()
+							}
+						}
+					}
+				}
+			}
+		}
+	} else {
+		frequencies, err := data_manage.GetYongyiFrequencyByCode(indexCode)
+		if err != nil {
+			fmt.Println("GetYongyiFrequencyByCode err:", err.Error())
+			utils.FileLog.Info("GetYongyiFrequencyByCode err:" + err.Error())
+			return
+		}
+		for _, frequency := range frequencies {
+			//获取数据
+			dataList, err := data_manage.GetYongyiIndexDataByCode(indexCode)
+			if err != nil {
+				br.Msg = "获取数据失败"
+				br.ErrMsg = "获取数据失败,Err:" + err.Error()
+				return
+			}
+			if len(dataList) > 0 {
+				name := this.GetString("IndexName")
+				unit := this.GetString("UnitName")
+				modifyTime := this.GetString("ModifyTime")
+
+				var sheet *xlsx.Sheet
+				if *frequency == "" {
+					newFrequency := "无频度"
+					sheet, err = xlsxFile.AddSheet(newFrequency)
+				} else {
+					sheet, err = xlsxFile.AddSheet(*frequency)
+				}
+
+				if err != nil {
+					br.Msg = "新增Sheet失败"
+					br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
+					return
+				}
+				//获取指标数据
+				windRow := sheet.AddRow()
+				windRow.AddCell().SetValue("Yongyi")
+				rowSecName := sheet.AddRow()
+				celSecName := rowSecName.AddCell()
+				celSecName.SetValue("指标名称")
+				cellSenName := rowSecName.AddCell()
+				cellSenName.SetValue(name)
+				indexCodeRow := sheet.AddRow()
+				indexCodeRow.AddCell().SetValue("指标ID")
+				indexCodeRow.AddCell().SetValue(indexCode)
+
+				rowFrequency := sheet.AddRow()
+				celFrequency := rowFrequency.AddCell()
+				celFrequency.SetValue("频率")
+				cellFrequency := rowFrequency.AddCell()
+				cellFrequency.SetValue(*frequency)
+
+				rowUnit := sheet.AddRow()
+				celUnit := rowUnit.AddCell()
+				celUnit.SetValue("单位")
+				cellUnit := rowUnit.AddCell()
+				cellUnit.SetValue(unit)
+
+				rowModifyDate := sheet.AddRow()
+				rowModifyCell := rowModifyDate.AddCell()
+				rowModifyCell.SetValue("更新时间")
+				rowModifyCell = rowModifyDate.AddCell()
+				rowModifyCell.SetValue(modifyTime)
+				dataMax, err := data_manage.GetYongyiIndexDataCount(indexCode)
+				if err != nil {
+					br.Msg = "查询数量失败"
+					br.ErrMsg = "GetYongyiIndexDataCount,Err:" + err.Error()
+					return
+				}
+				if len(dataList) <= 0 {
+					for n := 0; n < dataMax; n++ {
+						rowIndex := 6 + n
+						row := sheet.Row(rowIndex)
+						row.AddCell()
+						row.AddCell()
+						row.AddCell()
+					}
+				} else {
+					endRowIndex := 0
+					for rk, dv := range dataList {
+						rowIndex := 6 + rk
+						row := sheet.Row(rowIndex)
+						displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
+						displayDateCell := row.AddCell()
+						style := new(xlsx.Style)
+						style.ApplyAlignment = true
+						style.Alignment.WrapText = true
+						displayDateCell.SetStyle(style)
+						displayDateCell.SetDate(displayDate)
+
+						row.AddCell().SetValue(dv.Value)
+						row.AddCell()
+						endRowIndex = rowIndex
+					}
+					if len(dataList) < dataMax {
+						dataLen := dataMax - len(dataList)
+						for n := 0; n < dataLen; n++ {
+							rowIndex := (endRowIndex + 1) + n
+							row := sheet.Row(rowIndex)
+							row.AddCell()
+							row.AddCell()
+							row.AddCell()
+						}
+					}
+				}
+			}
+		}
+	}
+
+	err := xlsxFile.Save(downLoadnFilePath)
+	if err != nil {
+		//有指标无数据时先导出一遍空表
+		sheet, err := xlsxFile.AddSheet("无数据")
+		if err != nil {
+			br.Msg = "新增Sheet失败"
+			br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
+			return
+		}
+		rowSecName := sheet.AddRow()
+		celSecName := rowSecName.AddCell()
+		celSecName.SetValue("")
+		err = xlsxFile.Save(downLoadnFilePath)
+		if err != nil {
+			br.Msg = "保存文件失败"
+			br.ErrMsg = "保存文件失败"
+			return
+		}
+	}
+	fileName := `Yongyi数据`
+	if len(secNameList) > 0 {
+		fileName = secNameList[0].ClassifyName
+	}
+	fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
+	this.Ctx.Output.Download(downLoadnFilePath, fileName)
+	defer func() {
+		os.Remove(downLoadnFilePath)
+	}()
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "success"
+	*/
+}

+ 292 - 0
models/data_manage/base_from_yongyi.go

@@ -0,0 +1,292 @@
+package data_manage
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
+)
+
+type BaseFromYongyiIndex struct {
+	YongyiIndexId int `orm:"column(yongyi_index_id);pk"`
+	ClassifyId    int
+	Interface     string
+	IndexCode     string
+	IndexName     string
+	Frequency     string
+	Unit          string
+	Sort          int
+	CreateTime    time.Time
+	ModifyTime    time.Time
+}
+
+type BaseFromYongyiIndexList struct {
+	YongyiIndexId int `orm:"column(yongyi_index_id);pk"`
+	ClassifyId    int
+	Interface     string
+	IndexCode     string
+	IndexName     string
+	Frequency     string
+	Unit          string
+	Sort          int
+	CreateTime    string
+	ModifyTime    string
+	DataList      []*BaseFromYongyiData
+	Paging        *paging.PagingItem `description:"分页数据"`
+}
+
+func GetYongyiIndex(condition string, pars interface{}) (items []*BaseFromYongyiIndexList, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_yongyi_index WHERE 1=1  `
+	if condition != "" {
+		sql += condition
+	}
+	sql += `ORDER BY sort ASC, yongyi_index_id asc`
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func GetYongyiIndexDataCount(indexCode string) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(1) AS count  FROM base_from_yongyi_data WHERE index_code=? `
+	err = o.Raw(sql, indexCode).QueryRow(&count)
+	return
+}
+
+func GetYongyiIndexData(indexCode string, startSize, pageSize int) (items []*BaseFromYongyiData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *  FROM base_from_yongyi_data WHERE index_code=? ORDER BY data_time DESC LIMIT ?,? `
+	_, err = o.Raw(sql, indexCode, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+func GetBaseFromYongyiIndex() (list []*BaseFromYongyiIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_yongyi_index `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+type BaseFromYongyiData struct {
+	YongyiDataId          int `orm:"column(Yongyi_data_id);pk"`
+	BaseFromYongyiIndexId int
+	IndexCode             string
+	DataTime              string
+	Value                 string
+	CreateTime            string
+	ModifyTime            string
+	DataTimestamp         int64
+}
+
+func AddBaseFromYongyiData(item *BaseFromYongyiData) (lastId int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	lastId, err = o.Insert(item)
+	return
+}
+
+func GetBaseFromYongyiDataAll() (list []*BaseFromYongyiData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_yongyi_data `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+func ModifyBaseFromYongyiData(YongyiDataId int, value string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE base_from_yongyi_data SET value=?,modify_time=NOW() WHERE Yongyi_data_id=? `
+	_, err = o.Raw(sql, value, YongyiDataId).Exec()
+	return
+}
+
+func GetBaseFromYongyiIndexByYongyiCode(YongyiCode string) (list []*BaseFromYongyiIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_yongyi_index WHERE interface=? `
+	_, err = o.Raw(sql, YongyiCode).QueryRows(&list)
+	return
+}
+
+func GetBaseFromYongyiMaxOrMinDate(indexCode string) (min_date, max_date string, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date FROM base_from_yongyi_data WHERE index_code=? `
+	err = o.Raw(sql, indexCode).QueryRow(&min_date, &max_date)
+	return
+}
+
+func ModifyBaseFromYongyiMinDateAndMaxDate(baseFromYongyiIndexId int, minDate, maxDate string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` UPDATE base_from_yongyi_index SET start_date=?,end_date=?,modify_time=NOW() WHERE base_from_yongyi_index_id=? `
+	_, err = o.Raw(sql, minDate, maxDate, baseFromYongyiIndexId).Exec()
+	return
+}
+
+func GetBaseFromYongyiDataAllByIndexCode(indexCode string) (list []*BaseFromYongyiData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_yongyi_data WHERE index_code=? `
+	_, err = o.Raw(sql, indexCode).QueryRows(&list)
+	return
+}
+
+func GetBaseFromYongyiIndexByIndexCode(indexCode string) (list *BaseFromYongyiIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_yongyi_index WHERE index_code=? `
+	err = o.Raw(sql, indexCode).QueryRow(&list)
+	return
+}
+
+// GetBaseFromYongyiIndexCountByClassifyIds 获取分类下指标的个数
+func GetBaseFromYongyiIndexCountByClassifyIds(classifyIds []int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	num := len(classifyIds)
+	if num <= 0 {
+		return
+	}
+	sql := `SELECT COUNT(1) AS count FROM base_from_yongyi_index WHERE classify_id IN (` + utils.GetOrmInReplace(num) + `) `
+	err = o.Raw(sql, classifyIds).QueryRow(&count)
+	return
+}
+
+// GetBaseFromYongyiIndexByClassifyId 获取根据分类查询指标
+func GetBaseFromYongyiIndexByClassifyId(classifyId int) (list []*BaseFromYongyiIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_yongyi_index WHERE classify_id =? ORDER BY sort ASC, base_from_yongyi_index_id ASC `
+	_, err = o.Raw(sql, classifyId).QueryRows(&list)
+	return
+}
+
+// GetYongyiIndexAll 用于分类展示
+func GetYongyiIndexAll() (items []*BaseFromYongyiClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT base_from_yongyi_index_id, classify_id, index_name as classify_name, index_code as base_from_yongyi_index_code
+            FROM base_from_yongyi_index ORDER BY sort ASC, base_from_yongyi_index_id ASC `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+// GetBaseFromYongyiIndexByIndexId 根据指标id获取指标信息
+func GetBaseFromYongyiIndexByIndexId(indexId int) (item *BaseFromYongyiIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_yongyi_index WHERE base_from_yongyi_index_id=? `
+	err = o.Raw(sql, indexId).QueryRow(&item)
+	return
+}
+
+// GetBaseFromYongyiIndexMaxSortByClassifyId 根据指标id获取指标信息
+func GetBaseFromYongyiIndexMaxSortByClassifyId(classifyId int) (sort int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT max(sort) FROM base_from_yongyi_index WHERE classify_id=? `
+	err = o.Raw(sql, classifyId).QueryRow(&sort)
+	return
+}
+
+// GetBaseFromYongyiIndexMinSortByClassifyId 获取最小不等于0的排序
+func GetBaseFromYongyiIndexMinSortByClassifyId(classifyId int) (sort int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT min(sort) FROM base_from_yongyi_index WHERE classify_id=? and sort <> 0 `
+	err = o.Raw(sql, classifyId).QueryRow(&sort)
+	return
+}
+
+type BaseFromYongyiIndexType struct {
+	Type2 string `orm:"column(type_2)"`
+	Type3 string `orm:"column(type_3)"`
+}
+
+// GetBaseFromYongyiIndexType 获取历史指标信息类型
+func GetBaseFromYongyiIndexType() (list []BaseFromYongyiIndexType, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT type_2, type_3 from base_from_yongyi_index where type_2 <> "" GROUP BY type_2, type_3`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// MoveBaseFromYongyiIndex 移动指标分类
+func MoveBaseFromYongyiIndex(chartInfoId, classifyId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` UPDATE base_from_yongyi_index
+			SET
+			  classify_id = ?, modify_time=NOW() 
+			WHERE base_from_yongyi_index_id = ?`
+	_, err = o.Raw(sql, classifyId, chartInfoId).Exec()
+	return
+}
+
+// UpdateBaseFromYongyiIndexByClassifyId 根据指标id更新排序
+func UpdateBaseFromYongyiIndexByClassifyId(classifyId, nowSort, prevIndexInfoId int, updateSort string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` update base_from_yongyi_index set sort = ` + updateSort + ` WHERE classify_id=? AND  `
+	if prevIndexInfoId > 0 {
+		sql += ` ( sort > ? or (base_from_yongyi_index_id > ` + fmt.Sprint(prevIndexInfoId) + ` and sort = ` + fmt.Sprint(nowSort) + `))`
+	}
+	_, err = o.Raw(sql, classifyId, nowSort).Exec()
+	return
+}
+
+// MoveUpYongyiIndexBySort 往上移动
+func MoveUpYongyiIndexBySort(classifyId, nextSort, currentSort int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `update base_from_yongyi_index set sort = sort + 1 where classify_id=? and sort >= ? and sort< ?`
+	_, err = o.Raw(sql, classifyId, nextSort, currentSort).Exec()
+	return
+}
+
+// MoveDownYongyiIndexBySort 往下移动
+func MoveDownYongyiIndexBySort(classifyId, prevSort, currentSort int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `update base_from_yongyi_index set sort = sort - 1 where classify_id=? and sort <= ? and sort> ? `
+	_, err = o.Raw(sql, classifyId, prevSort, currentSort).Exec()
+	return
+}
+
+// GetFirstBaseFromYongyiIndexByClassifyId 获取当前分类下,且排序数相同 的排序第一条的数据
+func GetFirstBaseFromYongyiIndexByClassifyId(classifyId int) (item *BaseFromYongyiIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_yongyi_index WHERE classify_id=? order by sort asc,base_from_yongyi_index_id asc limit 1`
+	err = o.Raw(sql, classifyId).QueryRow(&item)
+	return
+}
+
+// Update 更新Yongyi指标基础信息
+func (item *BaseFromYongyiIndex) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(item, cols...)
+	return
+}
+
+// DeleteBaseFromYongyiIndexById 根据指标id删除对应的指标、指标数据
+func DeleteBaseFromYongyiIndexById(YongyiIndexId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	//删除指标
+	sql := `DELETE FROM base_from_yongyi_index WHERE base_from_yongyi_index_id = ? `
+	_, err = to.Raw(sql, YongyiIndexId).Exec()
+	if err != nil {
+		return
+	}
+
+	//删除指标数据
+	sql = `DELETE FROM base_from_yongyi_data WHERE base_from_yongyi_index_id = ? `
+	_, err = to.Raw(sql, YongyiIndexId).Exec()
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+// EditYongyiIndexInfoResp 新增指标的返回
+type EditYongyiIndexInfoResp struct {
+	BaseFromYongyiIndexId int    `description:"指标ID"`
+	IndexCode             string `description:"指标code"`
+}

+ 223 - 0
models/data_manage/base_from_yongyi_classify.go

@@ -0,0 +1,223 @@
+package data_manage
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// BaseFromYongyiClassify Yongyi原始数据分类表
+type BaseFromYongyiClassify struct {
+	ClassifyId      int       `orm:"column(classify_id);pk"`
+	ClassifyName    string    `description:"分类名称"`
+	ParentId        int       `description:"父级id"`
+	SysUserId       int       `description:"创建人id"`
+	SysUserRealName string    `description:"创建人姓名"`
+	Level           int       `description:"层级"`
+	Sort            int       `description:"排序字段,越小越靠前,默认值:10"`
+	ModifyTime      time.Time `description:"修改时间"`
+	CreateTime      time.Time `description:"创建时间"`
+}
+
+// AddBaseFromYongyiClassify 添加Yongyi原始数据分类
+func AddBaseFromYongyiClassify(item *BaseFromYongyiClassify) (lastId int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	lastId, err = o.Insert(item)
+	return
+}
+
+// GetBaseFromYongyiClassifyCount 获取分类名称的个数
+func GetBaseFromYongyiClassifyCount(classifyName string, parentId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT COUNT(1) AS count FROM base_from_yongyi_classify WHERE classify_name=? AND parent_id=? `
+	err = o.Raw(sql, classifyName, parentId).QueryRow(&count)
+	return
+}
+
+// GetBaseFromYongyiClassifyById 通过分类id的获取分类信息
+func GetBaseFromYongyiClassifyById(classifyId int) (item *BaseFromYongyiClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_yongyi_classify WHERE classify_id=? `
+	err = o.Raw(sql, classifyId).QueryRow(&item)
+	return
+}
+
+// EditBaseFromYongyiClassify 修改Yongyi原始数据分类
+func EditBaseFromYongyiClassify(classifyId int, classifyName string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE base_from_yongyi_classify SET classify_name=?,modify_time=NOW() WHERE classify_id=? `
+	_, err = o.Raw(sql, classifyName, classifyId).Exec()
+	return
+}
+
+// UpdateBaseFromYongyiClassifySort 修改Yongyi原始数据分类的排序
+func UpdateBaseFromYongyiClassifySort(classifyId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE base_from_yongyi_classify SET sort=classify_id, modify_time=NOW() WHERE classify_id=? `
+	_, err = o.Raw(sql, classifyId).Exec()
+	return
+}
+
+type BaseFromYongyiClassifyItems struct {
+	ClassifyId      int    `description:"分类ID"`
+	YongyiIndexId   int    `description:"指标类型ID"`
+	YongyiIndexCode string `description:"指标唯一编码"`
+	ClassifyName    string `description:"分类名称"`
+	ParentId        int    `description:"父级id"`
+	Level           int    `description:"层级"`
+	Sort            int    `description:"排序字段,越小越靠前,默认值:10"`
+}
+
+type BaseFromYongyiClassifyNameItems struct {
+	ClassifyId   int    `description:"分类ID"`
+	ClassifyName string `description:"分类名称"`
+	ParentId     int    `description:"父级id"`
+}
+
+type BaseFromYongyiClassifyResp struct {
+	List []*BaseFromYongyiClassifyItems
+}
+
+type BaseFromYongyiClassifyNameResp struct {
+	List []*BaseFromYongyiClassifyNameItems
+}
+
+type BaseFromYongyiClassifyItemsButton struct {
+	AddButton    bool `description:"是否可添加"`
+	OpButton     bool `description:"是否可编辑"`
+	DeleteButton bool `description:"是否可删除"`
+	MoveButton   bool `description:"是否可移动"`
+}
+
+// GetBaseFromYongyiClassifyByParentId 根据上级id获取当下的分类列表数据
+func GetBaseFromYongyiClassifyByParentId(parentId int) (items []*BaseFromYongyiClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_yongyi_classify WHERE parent_id=? order by sort asc,classify_id asc`
+	_, err = o.Raw(sql, parentId).QueryRows(&items)
+	return
+}
+
+// GetAllBaseFromYongyiClassify 获取所有的分类列表数据
+func GetAllBaseFromYongyiClassify() (items []*BaseFromYongyiClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_yongyi_classify order by sort asc,classify_id asc`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+type DeleteBaseFromYongyiClassifyReq struct {
+	ClassifyId int `description:"分类id"`
+	EdbInfoId  int `description:"指标id"`
+}
+
+type BaseFromYongyiClassifyListResp struct {
+	AllNodes      []*BaseFromYongyiClassifyItems
+	CanOpClassify bool `description:"是否允许操作分类"`
+}
+
+type BaseFromYongyiClassifySimplify struct {
+	ClassifyId   int    `description:"分类id"`
+	ClassifyName string `description:"分类名称"`
+	ParentId     int
+}
+
+// GetFirstBaseFromYongyiClassify 获取当前分类下,且排序数相同 的排序第一条的数据
+func GetFirstBaseFromYongyiClassify() (item *BaseFromYongyiClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM base_from_yongyi_classify order by sort asc,classify_id asc limit 1`
+	err = o.Raw(sql).QueryRow(&item)
+	return
+}
+
+// UpdateBaseFromYongyiClassifySortByClassifyId 根据分类id更新排序
+func UpdateBaseFromYongyiClassifySortByClassifyId(parentId, classifyId, nowSort int, updateSort string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` update base_from_yongyi_classify set sort = ` + updateSort + ` WHERE parent_id=? AND sort > ? `
+	if classifyId > 0 {
+		sql += ` or ( classify_id > ` + fmt.Sprint(classifyId) + ` and sort = ` + fmt.Sprint(nowSort) + `)`
+	}
+	_, err = o.Raw(sql, parentId, nowSort).Exec()
+	return
+}
+
+// MoveUpYongyiIndexClassifyBySort 往上移动
+func MoveUpYongyiIndexClassifyBySort(parentId, nextSort, currentSort int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `update base_from_yongyi_classify set sort = sort + 1 where parent_id=? and sort >= ? and sort< ?`
+	_, err = o.Raw(sql, parentId, nextSort, currentSort).Exec()
+	return
+}
+
+// MoveDownYongyiIndexClassifyBySort 往下移动
+func MoveDownYongyiIndexClassifyBySort(parentId, prevSort, currentSort int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `update base_from_yongyi_classify set sort = sort - 1 where parent_id=? and sort <= ? and sort> ? `
+	_, err = o.Raw(sql, parentId, prevSort, currentSort).Exec()
+	return
+}
+
+// GetYongyiIndexClassifyMinSort 获取最小不等于0的排序
+func GetYongyiIndexClassifyMinSort(parentId int) (sort int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `select min(sort) from base_from_yongyi_classify where parent_id=? and sort <> 0 `
+	err = o.Raw(sql, parentId).QueryRow(&sort)
+	return
+}
+
+// Update 更新分类基础信息
+func (BaseFromYongyiClassify *BaseFromYongyiClassify) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(BaseFromYongyiClassify, cols...)
+	return
+}
+
+type AddYongyiClassifyResp struct {
+	ClassifyId int
+}
+
+// DeleteYongyiClassifyByClassifyId 根据分类id删除对应的指标分类
+func DeleteYongyiClassifyByClassifyId(classifyIdList []int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	num := len(classifyIdList)
+	if num <= 0 {
+		return
+	}
+	//删除分类
+	sql := `DELETE FROM base_from_yongyi_classify WHERE classify_id IN (` + utils.GetOrmInReplace(num) + `) `
+	_, err = o.Raw(sql, classifyIdList).Exec()
+	return
+}
+
+// AddYongyiClassifyMulti 批量新增SMM类别
+func AddYongyiClassifyMulti(list []*BaseFromYongyiClassify) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.InsertMulti(1, list)
+	return
+}
+
+// InitYongyiClassifySort 初始化sort值
+func InitYongyiClassifySort() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE base_from_yongyi_classify 
+SET modify_time=NOW(), sort = classify_id`
+	_, err = o.Raw(sql).Exec()
+	return
+}
+
+// InitYongyiIndexClassifyId 历史数据的classifyId值
+func InitYongyiIndexClassifyId() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE base_from_yongyiindex s
+LEFT JOIN (
+SELECT
+	c1.classify_id,
+	CONCAT( c2.classify_name, c1.classify_name ) AS type_name 
+FROM
+	base_from_yongyi_classify c1
+	LEFT JOIN base_from_yongyi_classify c2 ON c1.parent_id = c2.classify_id 
+	) AS t ON CONCAT( s.type_2, s.type_3 ) = t.type_name
+	SET s.classify_id = t.classify_id, s.modify_time=NOW() where s.type_2 <>""`
+	_, err = o.Raw(sql).Exec()
+	return
+}

+ 45 - 0
routers/commentsRouter.go

@@ -2734,6 +2734,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: "ExportYongyiList",
+            Router: `/export/yongyiList`,
+            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: "GlClassify",
@@ -3139,6 +3148,42 @@ 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: "YongyiClassify",
+            Router: `/yongyi/classify`,
+            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: "YongyiData",
+            Router: `/yongyi/index`,
+            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: "YongyiSearchList",
+            Router: `/yongyi/search_list`,
+            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: "YongyiSingleData",
+            Router: `/yongyi/single_data`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:JiaYueEdbSourceController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:JiaYueEdbSourceController"],
         beego.ControllerComments{
             Method: "FrequencyList",