浏览代码

获取指标数据接口

xiexiaoyuan 3 年之前
父节点
当前提交
82b1f802ea

+ 22 - 0
controller/report/report.go

@@ -168,4 +168,26 @@ func Search(c *gin.Context) {
 	}
 	response.OkData("查询成功", data, c)
 	return
+}
+
+func TickerData(c *gin.Context)  {
+	reqReportChapterId := c.DefaultQuery("report_chapter_id", "")
+	if reqReportChapterId == ""{
+		response.Fail("请输入章节ID", c)
+		return
+	}
+	reportChapterId, err := strconv.Atoi(reqReportChapterId)
+	if err != nil {
+		response.Fail("章节ID格式有误", c)
+		return
+	}
+	userinfo := userService.GetInfoByClaims(c)
+
+	chapterDetail, err := report.GetTickerData(userinfo, reportChapterId)
+	if err != nil {
+		response.Fail(err.Error(), c)
+		return
+	}
+	response.OkData("查询成功", chapterDetail, c )
+	return
 }

+ 11 - 0
models/response/report.go

@@ -131,4 +131,15 @@ type EsReportItem struct {
 	ReportChapterId    int    `description:"报告章节Id"`
 	ReportId           int    `description:"报告Id"`
 	Title              string `description:"标题"`
+}
+
+type TickerDataItem struct {
+	Date             string        `json:"date"`
+	Ticker			 string        `json:"ticker"`
+	BaseColumnName   string        `json:"base_column_name"`
+	TickerValue      float64       `json:"ticker_value"`
+	LastValue        float64       `json:"last_value"`
+	DdValue          float64       `json:"dd_value"`
+	WwValue          float64       `json:"ww_value"`
+	MmValue          float64       `json:"mm_value"`
 }

+ 21 - 0
models/tables/daily_base_column/daily_base_column.go

@@ -0,0 +1,21 @@
+package daily_base_column
+
+import "time"
+
+type DailyBaseColumn struct {
+	BaseColumnId int `gorm:"column:base_column_id" db:"base_column_id" json:"base_column_id" form:"base_column_id"`
+	TableName1 string `gorm:"column:table_name" db:"table_name" json:"table_name" form:"table_name"`
+	BaseColumnName string `gorm:"column:base_column_name" db:"base_column_name" json:"base_column_name" form:"base_column_name"` //基础列名称
+	BaseColumnChapterType string `gorm:"column:base_column_chapter_type" db:"base_column_chapter_type" json:"base_column_chapter_type" form:"base_column_chapter_type"` //基础列类型
+	BaseColumnTicker string `gorm:"column:base_column_ticker" db:"base_column_ticker" json:"base_column_ticker" form:"base_column_ticker"`
+	Enabled int8 `gorm:"column:enabled" db:"enabled" json:"enabled" form:"enabled"`
+	CreatedTime time.Time `gorm:"column:created_time" db:"created_time" json:"created_time" form:"created_time"` //创建时间
+	LastUpdatedTime int64 `gorm:"column:last_updated_time" db:"last_updated_time" json:"last_updated_time" form:"last_updated_time"`
+	Freq string `gorm:"column:freq" db:"freq" json:"freq" form:"freq"`
+	Catalog string `gorm:"column:catalog" db:"catalog" json:"catalog" form:"catalog"`
+	ReportChapterTypeId int64 `gorm:"column:report_chapter_type_id" db:"report_chapter_type_id" json:"report_chapter_type_id" form:"report_chapter_type_id"` //分类id
+}
+
+func (d *DailyBaseColumn) TableName() string  {
+	return "daily_base_column"
+}

+ 97 - 0
models/tables/daily_base_column/query.go

@@ -0,0 +1,97 @@
+package daily_base_column
+
+import (
+	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/models/response"
+)
+
+// GetDataByBaseColumnTickers17 获取数据指标
+func GetDataByBaseColumnTickers17(tickers []string) (list []*response.TickerDataItem, err error) {
+	sql :=`SELECT
+ ifnull(max(doo.date), max(dd.date)) AS date,
+ dbc.base_column_ticker AS ticker,
+ dbc.base_column_name,
+ ifnull(
+  (
+   SELECT
+
+   VALUE
+
+   FROM
+    daily_data
+   WHERE
+    ticker = dbc.base_column_ticker
+   AND date = ifnull(max(doo.date), max(dd.date))
+  ),
+  (
+   SELECT
+
+   VALUE
+
+   FROM
+    daily_original
+   WHERE
+    ticker = dbc.base_column_ticker
+   AND date = ifnull(max(doo.date), max(dd.date))
+  )
+ ) AS ticker_value,
+ ifnull(
+  (
+   SELECT
+
+   VALUE
+
+   FROM
+    daily_data
+   WHERE
+    ticker = dbc.base_column_ticker
+   AND date < ifnull(max(doo.date), max(dd.date))
+   ORDER BY
+    date DESC
+   LIMIT 1
+  ),
+  (
+   SELECT
+
+   VALUE
+
+   FROM
+    daily_original
+   WHERE
+    ticker = dbc.base_column_ticker
+   AND date < ifnull(max(doo.date), max(dd.date))
+   ORDER BY
+    date DESC
+   LIMIT 1
+  )
+ ) AS last_value
+FROM
+ daily_base_column AS dbc
+LEFT JOIN daily_data AS dd ON dbc.base_column_ticker = dd.ticker
+LEFT JOIN daily_original AS doo ON dbc.base_column_ticker = doo.ticker
+WHERE
+ dbc.base_column_ticker IN ?
+GROUP BY
+ dbc.base_column_ticker`
+	err = global.DEFAULT_MYSQL.Raw(sql, tickers).Scan(&list).Error
+	return
+}
+
+// GetDataByBaseColumnTickers 获取数据指标
+func GetDataByBaseColumnTickers(tickers []string) (list []*response.TickerDataItem, err error) {
+	sql :=`select ifnull(max(doo.date),max(dd.date)) as date,dbc.base_column_ticker as ticker,dbc.base_column_name ,
+            ifnull((select value from daily_data where ticker = dbc.base_column_ticker and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = dbc.base_column_ticker and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1)) as ticker_value,
+            ifnull((select value from daily_data where ticker = concat(dbc.base_column_ticker,'_dd') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = concat(dbc.base_column_ticker,'_dd') and date <= ifnull(max(doo.date),max(dd.date))and value is not null order by date desc limit 1)) as dd_value,
+            ifnull((select value from daily_data where ticker = concat(dbc.base_column_ticker,'_ww') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = concat(dbc.base_column_ticker,'_ww') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1)) as ww_value,
+            ifnull((select value from daily_data where ticker = concat(dbc.base_column_ticker,'_mm') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1),(select value from daily_original where ticker = concat(dbc.base_column_ticker,'_mm') and date <= ifnull(max(doo.date),max(dd.date)) and value is not null order by date desc limit 1)) as mm_value
+       from
+			 daily_base_column AS dbc
+LEFT JOIN daily_data AS dd ON dbc.base_column_ticker = dd.ticker
+LEFT JOIN daily_original AS doo ON dbc.base_column_ticker = doo.ticker
+WHERE
+ dbc.base_column_ticker IN ?
+GROUP BY
+ dbc.base_column_ticker`
+	err = global.DEFAULT_MYSQL.Raw(sql, tickers).Scan(&list).Error
+	return
+}

+ 11 - 0
models/tables/rddp/report_chapter/query.go

@@ -83,4 +83,15 @@ func GetReportIdsByTypeIdsAndClass(typeIds []int, classifyNameFirst string) (rep
 		reportIds = append(reportIds, v.ReportId)
 	}
 	return
+}
+
+// GetTypeIdById 根据ID获取章节类型
+func GetTypeIdById(id int) (info *ReportChapter, err error)  {
+	err = global.MYSQL["rddp"].Model(ReportChapter{}).Select("report_chapter_id, type_id").
+		Where("report_chapter_id = ? AND publish_state = 2 ", id).
+		First(&info).Error
+	if err == utils.ErrNoRow {
+		err = nil
+	}
+	return
 }

+ 15 - 0
models/tables/rddp/report_chapter_ticker/query.go

@@ -0,0 +1,15 @@
+package report_chapter_ticker
+
+import (
+	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/utils"
+)
+
+// GetTickerByChapterId 根据章节ID获取指标列表
+func GetTickerByChapterId(reportChapterId int) (list []*reportChapterTicker, err error)  {
+	err = global.MYSQL["rddp"].Model(reportChapterTicker{}).Where("report_chapter_id = ?", reportChapterId).Order("sort asc, id asc").Scan(&list).Error
+	if err == utils.ErrNoRow {
+		err = nil
+	}
+	return
+}

+ 16 - 0
models/tables/rddp/report_chapter_ticker/report_chapter_ticker.go

@@ -0,0 +1,16 @@
+package report_chapter_ticker
+
+import "time"
+
+type reportChapterTicker struct {
+	Id                  int		  `gorm:"primaryKey;column:report_chapter_id;type:int(10) unsigned;not null" json:"-"`
+	ReportChapterId     int       `gorm:"column:report_chapter_id;type:int(10) unsigned;not null" json:"report_chapter_id"`
+	Sort				int       `gorm:"column:sort;type:int(10);not null;default:0"  json:"sort"`
+	Ticker              string    `gorm:"column:ticker;type:varchar(50);not null;default:''" json:"ticker"`
+	CreateTime          time.Time `gorm:"column:create_time;type:datetime"  json:"create_time"`                                         //创建时间
+	UpdateTime          time.Time `gorm:"column:update_time;type:datetime"  json:"update_time"`                                         //修改时间
+}
+
+func (r *reportChapterTicker) TableName() string {
+	return "report_chapter_ticker"
+}

+ 13 - 0
models/tables/report_chapter_type/query.go

@@ -46,3 +46,16 @@ func GetTypeIDByReportChapterTypeName(name string) (chapterIds []int, err error
 	return
 }
 
+// GetTickerTitleByTypeId 根据类型获取指标标题
+func GetTickerTitleByTypeId(id int) (title string, err error)  {
+	var chapterType *ReportChapterType
+	err = global.DEFAULT_MYSQL.Model(ReportChapterType{}).Select("ticker_title").Where("report_chapter_type_id=?", id).First(&chapterType).Error
+	if err != nil {
+		if err == utils.ErrNoRow {
+			err = nil
+		}
+		return
+	}
+	title = chapterType.TickerTitle
+	return
+}

+ 1 - 0
routers/report.go

@@ -10,6 +10,7 @@ func InitReport(r *gin.Engine)  {
 	rGroup := r.Group("api/report").Use(middleware.Token())
 	rGroup.GET("/detail", report.Detail)
 	rGroup.GET("/chapter/detail", report.ChapterDetail)
+	rGroup.GET("/chapter/ticker", report.TickerData)
 	rGroup.GET("/list", report.List)
 	rGroup.GET("/collect", report.CollectReportList)
 	rGroup.GET("/search", report.Search)

+ 70 - 1
services/report/report.go

@@ -10,9 +10,11 @@ import (
 	"hongze/hongze_yb/models/tables/chart_permission"
 	"hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
 	"hongze/hongze_yb/models/tables/chart_permission_search_key_word_mapping"
+	"hongze/hongze_yb/models/tables/daily_base_column"
 	"hongze/hongze_yb/models/tables/rddp/classify"
 	"hongze/hongze_yb/models/tables/rddp/report"
 	"hongze/hongze_yb/models/tables/rddp/report_chapter"
+	"hongze/hongze_yb/models/tables/rddp/report_chapter_ticker"
 	"hongze/hongze_yb/models/tables/report_chapter_type"
 	"hongze/hongze_yb/models/tables/report_chapter_type_permission"
 	"hongze/hongze_yb/services/company"
@@ -20,6 +22,7 @@ import (
 	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/utils"
 	"html"
+	"strconv"
 	"time"
 )
 
@@ -577,4 +580,70 @@ func SearchReport(user user.UserInfo, keyWord string, pageIndex, pageSize int)(r
 	ret.List = reportList
 	ret.Paging = response.GetPaging(pageIndex, pageSize, int(total))
 	return
-}
+}
+
+// GetTickerData 获取指标数据
+func GetTickerData(user user.UserInfo, reportChapterId int) (list []*response.TickerDataItem, err error) {
+	var errMsg string
+	defer func() {
+		if err != nil {
+			global.LOG.Critical(fmt.Sprintf("GetTickerData: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
+		}
+	}()
+	
+	//查询章节类型
+	chapter, err := report_chapter.GetTypeIdById(reportChapterId)
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("查询章节失败")
+		return
+	}
+
+	if chapter.ReportChapterId == 0 {
+		err = errors.New("章节不存在或者未发布")
+		return
+	}
+	
+	tickers, err := report_chapter_ticker.GetTickerByChapterId(reportChapterId)
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("查询章节指标失败")
+		return
+	}
+
+	if len(tickers) > 0 {
+		var tickerNames []string
+		for _, v := range tickers {
+			tickerNames = append(tickerNames, v.Ticker)
+		}
+		var dataList []*response.TickerDataItem
+		if chapter.TypeId == 17 {
+			dataList, err = daily_base_column.GetDataByBaseColumnTickers17(tickerNames)
+		}else{
+			dataList, err = daily_base_column.GetDataByBaseColumnTickers(tickerNames)
+		}
+		if err != nil {
+			errMsg = err.Error()
+			err = errors.New("查询指标数据失败")
+			return
+		}
+
+		if len(dataList) >= 0 {
+			for _, v := range dataList {
+				temp := new(response.TickerDataItem)
+				temp.BaseColumnName = v.BaseColumnName
+				temp.Ticker = v.Ticker
+				temp.Date = v.Date
+				temp.TickerValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f",v.TickerValue), 2)
+				temp.LastValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f",v.LastValue), 2)
+				temp.MmValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.MmValue), 2)
+				temp.DdValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.DdValue), 2)
+				temp.WwValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.WwValue), 2)
+
+				list = append(list, temp)
+			}
+		}
+	}
+	return
+}
+