Эх сурвалжийг харах

fix:新增指标数据接口

Roc 2 жил өмнө
parent
commit
61dbfeebf2

+ 38 - 4
controllers/report.go

@@ -419,9 +419,9 @@ func (c *ReportController) ListReportV2() {
 // GetReportInfoV2
 // @Title 获取报告详情
 // @Description 获取报告详情
-// @Param research_report_id query int true "报告ID"
+// @Param report_id query int true "报告ID"
 // @Param   mobile   query   string  true       "用户手机号(加密后的)"
-// @Success 200 {object} report.ResearchReportInfo
+// @Success 200 {object} report.ReportDetail
 // @router /getReportInfo/v2 [get]
 func (c *ReportControllerCommon) GetReportInfoV2() {
 	reportId, _ := c.GetInt("report_id")
@@ -454,9 +454,9 @@ func (c *ReportControllerCommon) GetReportInfoV2() {
 // GetResearchReportChapterV2
 // @Title 获取章节详情接口
 // @Description 获取章节详情
-// @Param ResearchReportTypeId query int true "章节ID"
+// @Param report_chapter_id query int true "章节ID"
 // @Param   mobile   query   string  false       "用户手机号(加密后的)"
-// @Success 200 {object} report.ResearchReportTypeContentInfo
+// @Success 200 {object} report.ReportChapterDetail
 // @router /getReportChapterInfo/v2 [get]
 func (c *ReportControllerCommon) GetResearchReportChapterV2() {
 	reportChapterId, _ := c.GetInt("report_chapter_id")
@@ -485,3 +485,37 @@ func (c *ReportControllerCommon) GetResearchReportChapterV2() {
 	}
 	c.OkDetailed(chapterDetail, "获取成功")
 }
+
+// GetTickerData
+// @Title 获取报告详情获取指标数据接口
+// @Description 获取报告详情获取指标数据接口
+// @Param report_chapter_id query int true "章节ID"
+// @Success 200 {object} report.TickerData
+// @router /getTickerData [get]
+func (c *ReportControllerCommon) GetTickerData() {
+	reportChapterId, _ := c.GetInt("report_chapter_id")
+	if reportChapterId < 1 {
+		c.FailWithMessage("请传入章节id")
+		return
+	}
+	mobile := c.GetString("mobile")
+	if mobile == "" {
+		c.FailWithMessage("mobile 必传")
+		return
+	}
+	var dateTxt = []byte(mobile)
+	resultDe := utils.DesBase64Decrypt(dateTxt)
+	deMobile := string(resultDe)
+	if deMobile == "" {
+		c.FailWithMessage("手机号加密格式错误")
+		return
+	}
+
+	tickerData, err, errMsg := logic.GetTickerData(reportChapterId)
+	if err != nil {
+		//c.FailWithMessage(errMsg)
+		c.FailWithMessageErr(errMsg, err.Error())
+		return
+	}
+	c.OkDetailed(tickerData, "获取成功")
+}

+ 104 - 0
logic/report.go

@@ -10,9 +10,11 @@ import (
 	"hongze/hongze_open_api/models/tables/chart_permission_search_key_word_mapping"
 	"hongze/hongze_open_api/models/tables/company_product"
 	"hongze/hongze_open_api/models/tables/company_report_permission"
+	"hongze/hongze_open_api/models/tables/daily_base_column"
 	"hongze/hongze_open_api/models/tables/rddp/classify"
 	"hongze/hongze_open_api/models/tables/rddp/report"
 	"hongze/hongze_open_api/models/tables/rddp/report_chapter"
+	"hongze/hongze_open_api/models/tables/rddp/report_chapter_ticker"
 	"hongze/hongze_open_api/models/tables/report_chapter_type"
 	"hongze/hongze_open_api/models/tables/wx_user"
 	"hongze/hongze_open_api/services/company"
@@ -525,11 +527,29 @@ func GetChapterDetail(mobile string, reportChapterId int) (reportChapterDetail r
 		reportChapterItem.ContentSub = html.UnescapeString(reportChapter.ContentSub)
 	}
 
+	//请求指标数据的参数
+	tickerDataParams := ``
+	{
+		nonceStr := common.GetRandString(10)
+		timeUnix := strconv.FormatInt(time.Now().Unix(), 10)
+		postData := make(map[string]string)
+		reportChapterIdStr := strconv.Itoa(reportChapterId)
+		parameter := "report_chapter_id=" + reportChapterIdStr + "&nonce_str=" + nonceStr + "&timestamp=" + timeUnix
+		postData["mobile"] = encryptMobile
+		postData["report_chapter_id"] = reportChapterIdStr
+		postData["appid"] = utils.ReportAppid
+		postData["nonce_str"] = nonceStr
+		postData["timestamp"] = timeUnix
+		sign := utils.GetSign(postData)
+		tickerDataParams = parameter + "&sign=" + sign
+	}
+
 	reportChapterDetail = reportResp.ReportChapterDetail{
 		ReportChapterItem:     reportChapterItem,
 		ReportChapterMenuList: chapterMenu,
 		AuthOk:                authOk,
 		PermissionCheck:       permissionCheckInfo,
+		TickerDataParams:      tickerDataParams,
 		//LikeNum:               0,
 		//LikeEnabled:           0,
 	}
@@ -648,3 +668,87 @@ func CheckReportPermission(userInfo *wx_user.WxUser, reportId int, productAuthOk
 	authOk, permissionCheckInfo, _, err = company.GetCheckPermission(userInfo.CompanyId, int(userInfo.UserId), permissionIds)
 	return
 }
+
+// GetTickerData 获取指标数据
+func GetTickerData(reportChapterId int) (ret reportResp.TickerData, err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Critical(fmt.Sprintf("GetTickerData:  err:%s, errMsg:%s", 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
+	}
+
+	var list []reportResp.TickerDataItem
+	if len(tickers) > 0 {
+		var tickerNames []string
+		for _, v := range tickers {
+			tickerNames = append(tickerNames, v.Ticker)
+		}
+		var dataList []*daily_base_column.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
+		}
+		chapterTypeInfo, tErr := report_chapter_type.GetTickerTitleByTypeId(chapter.TypeId)
+		if tErr != nil {
+			errMsg = tErr.Error()
+			err = errors.New("查询章节类型失败")
+			return
+		}
+		if len(dataList) >= 0 {
+			for _, v := range dataList {
+				temp := reportResp.TickerDataItem{
+					Date:           v.Date,
+					Ticker:         v.Ticker,
+					BaseColumnName: v.BaseColumnName,
+				}
+				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)
+			}
+		}
+
+		tickerTitle := reportResp.TickerTitleData{
+			TickerTitle:           chapterTypeInfo.TickerTitle,
+			ReportChapterTypeId:   int(chapterTypeInfo.ReportChapterTypeId),
+			ReportChapterTypeName: chapterTypeInfo.ReportChapterTypeName,
+			DataTableImage:        fmt.Sprintf("http://hongze.oss-cn-shanghai.aliyuncs.com/data_table/%s.png", chapterTypeInfo.ReportChapterTypeKey),
+		}
+
+		ret = reportResp.TickerData{
+			List:        list,
+			TickerTitle: tickerTitle,
+		}
+	}
+	return
+}

+ 29 - 2
models/response/report/report.go

@@ -105,8 +105,9 @@ type ReportChapterDetail struct {
 	PermissionCheck       PermissionCheckInfo `json:"permission_check"`
 	ReportChapterMenuList []ReportChapterMenu `json:"report_chapter_menu_list"`
 	AuthOk                bool                `json:"auth_ok"`
-	LikeNum               int64               `description:"点赞总数" json:"like_num"`
-	LikeEnabled           int8                `description:"是否已点赞: 0-未点赞 1-已点赞" json:"like_enabled"`
+	TickerDataParams      string              `json:"ticker_data_param" description:"指标数据参数"`
+	LikeNum               int64               `description:"点赞总数" json:"-"`
+	LikeEnabled           int8                `description:"是否已点赞: 0-未点赞 1-已点赞" json:"-"`
 }
 
 // ReportChapterMenu 报告章节里面的菜单
@@ -158,3 +159,29 @@ func (rc ReportChapterMenuList) Less(i, j int) bool {
 func (rc ReportChapterMenuList) Swap(i, j int) {
 	rc[i], rc[j] = rc[j], rc[i]
 }
+
+// TickerDataItem 指标数据
+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"`
+}
+
+// TickerTitleData 指标标题数据
+type TickerTitleData struct {
+	TickerTitle           string `json:"ticker_title"`
+	ReportChapterTypeId   int    `json:"report_chapter_type_id"`
+	ReportChapterTypeName string `json:"report_chapter_type_name"`
+	DataTableImage        string `json:"data_table_image"`
+}
+
+// TickerData 指标数据返回
+type TickerData struct {
+	List        []TickerDataItem `json:"list"`
+	TickerTitle TickerTitleData  `json:"ticker_title"`
+}

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

@@ -0,0 +1,118 @@
+package daily_base_column
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_open_api/utils"
+)
+
+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"`
+}
+
+// GetDataByBaseColumnTickers17 获取数据指标
+func GetDataByBaseColumnTickers17(tickers []string) (list []*TickerDataItem, err error) {
+	lenNum := len(tickers)
+	if lenNum <= 0 {
+		return
+	}
+	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 (` + utils.GetOrmInReplace(lenNum) + `)
+GROUP BY
+ dbc.base_column_ticker`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, tickers).QueryRows(&list)
+	return
+}
+
+// GetDataByBaseColumnTickers 获取数据指标
+func GetDataByBaseColumnTickers(tickers []string) (list []*TickerDataItem, err error) {
+	lenNum := len(tickers)
+	if lenNum <= 0 {
+		return
+	}
+	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 (` + utils.GetOrmInReplace(lenNum) + `)
+GROUP BY
+ dbc.base_column_ticker`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, tickers).QueryRows(&list)
+	return
+}

+ 8 - 0
models/tables/rddp/report_chapter/report_chapter.go

@@ -82,3 +82,11 @@ func GetListByReportIdTypeIds(reportId int, typeIds []int, classifyNameFirst str
 	_, err = o.Raw(sql, reportId, typeIds).QueryRows(&list)
 	return
 }
+
+// GetTypeIdById 根据ID获取章节类型
+func GetTypeIdById(id int) (info *ReportChapter, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM report_chapter WHERE  report_chapter_id = ? AND publish_state = 2 `
+	err = o.Raw(sql, id).QueryRow(&info)
+	return
+}

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

@@ -0,0 +1,23 @@
+package report_chapter_ticker
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type ReportChapterTicker struct {
+	Id              int       `orm:"column(id);pk" description:"id"`
+	ReportChapterId int       ``
+	Sort            int       ``
+	Ticker          string    ``
+	CreateTime      time.Time `` //创建时间
+	UpdateTime      time.Time `` //修改时间
+}
+
+// GetTickerByChapterId
+func GetTickerByChapterId(reportChapterId int) (list []*ReportChapterTicker, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM report_chapter WHERE  report_chapter_id = ?  `
+	_, err = o.Raw(sql, reportChapterId).QueryRows(&list)
+	return
+}

+ 9 - 1
models/tables/report_chapter_type/report_chapter_type.go

@@ -42,7 +42,7 @@ func GetEffectTypes() (list []*ReportChapterType, err error) {
 func GetEffectTypeID() (chapterIds []int, err error) {
 	var chapterList []*ReportChapterType
 	o := orm.NewOrm()
-	sql := `SELECT * FROM report_chapter_type WHERE is_show=?  `
+	sql := `SELECT * FROM report_chapter_type WHERE is_show=? `
 	_, err = o.Raw(sql, 1).QueryRows(&chapterList)
 	if err != nil {
 		return
@@ -54,3 +54,11 @@ func GetEffectTypeID() (chapterIds []int, err error) {
 	}
 	return
 }
+
+// GetTickerTitleByTypeId 根据类型获取指标标题
+func GetTickerTitleByTypeId(id int) (chapterType *ReportChapterType, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM report_chapter_type WHERE report_chapter_type_id=? `
+	err = o.Raw(sql, id).QueryRow(&chapterType)
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -115,4 +115,13 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:ReportControllerCommon"] = append(beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:ReportControllerCommon"],
+        beego.ControllerComments{
+            Method: "GetTickerData",
+            Router: `/getTickerData`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
 }

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
swagger/swagger.json


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 1 - 29
swagger/swagger.yml


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно