chart_common.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hongze_chart_lib/models"
  6. "hongze/hongze_chart_lib/models/data_manage"
  7. future_goodServ "hongze/hongze_chart_lib/services/data/future_good"
  8. "hongze/hongze_chart_lib/utils"
  9. "strings"
  10. "time"
  11. )
  12. // CommonChartInfoDetailFromUniqueCode
  13. // @Title 根据编码获取图表详情
  14. // @Description 根据编码获取图表详情接口
  15. // @Param UniqueCode query int true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  16. // @Param IsCache query bool true "是否走缓存,默认false"
  17. // @Success 200 {object} data_manage.ChartInfoDetailFromUniqueCodeResp
  18. // @router /common/detail [get]
  19. func (this *ChartController) CommonChartInfoDetailFromUniqueCode() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. this.Data["json"] = br
  23. this.ServeJSON()
  24. }()
  25. uniqueCode := this.GetString("UniqueCode")
  26. if uniqueCode == "" {
  27. br.Msg = "参数错误"
  28. br.ErrMsg = "参数错误,uniqueCode is empty"
  29. return
  30. }
  31. key := utils.HZ_CHART_LIB_DETAIL + uniqueCode
  32. resp := new(models.ChartInfoDetailResp)
  33. //判断是否有缓存
  34. if utils.Re == nil {
  35. if utils.Re == nil && utils.Rc.IsExist(key) {
  36. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  37. err := json.Unmarshal(data, &resp)
  38. if err == nil && resp != nil {
  39. br.Ret = 200
  40. br.Success = true
  41. br.Msg = "获取成功"
  42. br.Data = resp
  43. fmt.Println("source redis")
  44. return
  45. }
  46. }
  47. }
  48. }
  49. chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
  50. if err != nil {
  51. if err.Error() == utils.ErrNoRow() {
  52. br.Msg = "该图已被删除,请刷新页面"
  53. br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
  54. return
  55. }
  56. br.Msg = "获取失败"
  57. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  58. return
  59. }
  60. switch chartInfo.Source {
  61. case utils.CHART_SOURCE_DEFAULT:
  62. resp, isOk, msg, errMsg := GetChartInfoDetailFromUniqueCode(chartInfo, key)
  63. if !isOk {
  64. br.Msg = msg
  65. br.ErrMsg = errMsg
  66. return
  67. }
  68. br.Ret = 200
  69. br.Success = true
  70. br.Msg = "获取成功"
  71. br.Data = resp
  72. case utils.CHART_SOURCE_FUTURE_GOOD:
  73. resp, isOk, msg, errMsg := GetFutureGoodChartInfoDetailFromUniqueCode(chartInfo, key)
  74. if !isOk {
  75. br.Msg = msg
  76. br.ErrMsg = errMsg
  77. return
  78. }
  79. br.Ret = 200
  80. br.Success = true
  81. br.Msg = "获取成功"
  82. br.Data = resp
  83. default:
  84. br.Msg = "错误的图表"
  85. br.ErrMsg = "错误的图表"
  86. return
  87. }
  88. }
  89. // GetFutureGoodChartInfoDetailFromUniqueCode 根据编码获取图表详情
  90. func GetFutureGoodChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
  91. resp = new(models.ChartInfoDetailResp)
  92. chartInfoId := chartInfo.ChartInfoId
  93. startDate := chartInfo.StartDate
  94. endDate := chartInfo.EndDate
  95. // 兼容日期错误
  96. {
  97. if strings.Count(startDate, "-") == 1 {
  98. startDate = startDate + "-01"
  99. }
  100. if strings.Count(endDate, "-") == 1 {
  101. endDate = endDate + "-01"
  102. }
  103. }
  104. edbInfoMapping, err := models.GetEtaEdbChartEdbMapping(chartInfoId)
  105. if err != nil {
  106. msg = "获取失败"
  107. errMsg = "获取图表,现货指标信息失败,Err:" + err.Error()
  108. return
  109. }
  110. futureGoodEdbInfoMapping, err := models.GetFutureGoodEdbChartEdbMapping(chartInfoId)
  111. if err != nil {
  112. msg = "获取失败"
  113. errMsg = "获取图表的期货商品指标信息失败,Err:" + err.Error()
  114. return
  115. }
  116. // 商品价格曲线图的一些配置
  117. var barConfig data_manage.BarChartInfoReq
  118. barChartInfoDateList := make([]data_manage.BarChartInfoDateReq, 0)
  119. barChartInfoSort := data_manage.BarChartInfoSortReq{}
  120. if chartInfo.BarConfig == `` {
  121. msg = "商品价格曲线图未配置"
  122. errMsg = "商品价格曲线图未配置"
  123. return
  124. }
  125. err = json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
  126. if err != nil {
  127. msg = "商品价格曲线图配置异常"
  128. errMsg = "商品价格曲线图配置异常"
  129. return
  130. }
  131. barChartInfoDateList = barConfig.DateList
  132. barChartInfoSort = barConfig.Sort
  133. // 获取图表中的指标数据
  134. barConfigEdbInfoIdList, edbList, xEdbIdValue, yDataList, err := future_goodServ.GetChartEdbData(chartInfoId, startDate, endDate, edbInfoMapping, futureGoodEdbInfoMapping, barChartInfoDateList, barChartInfoSort)
  135. if err != nil {
  136. msg = "获取失败"
  137. errMsg = "获取图表,指标信息失败,Err:" + err.Error()
  138. return
  139. }
  140. warnEdbList := make([]string, 0)
  141. if len(edbList) <= 0 {
  142. msg = "商品价格曲线图表指标异常"
  143. errMsg = "商品价格曲线图表异常"
  144. return
  145. }
  146. baseEdbInfo := edbList[0] //现货指标
  147. for _, v := range edbList {
  148. if v.IsNullData {
  149. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  150. }
  151. // 指标别名
  152. if barConfigEdbInfoIdList != nil && len(barConfigEdbInfoIdList) > 0 {
  153. for _, reqEdb := range barConfigEdbInfoIdList {
  154. if v.EdbInfoId == reqEdb.EdbInfoId {
  155. v.EdbAliasName = reqEdb.Name
  156. v.EdbAliasNameEn = reqEdb.NameEn
  157. }
  158. }
  159. }
  160. }
  161. chartInfo.UnitEn = baseEdbInfo.UnitEn
  162. resp.ChartInfo = chartInfo
  163. resp.EdbInfoList = edbList
  164. resp.XEdbIdValue = xEdbIdValue
  165. resp.YDataList = yDataList
  166. //resp.BarChartInfo = barConfig
  167. //resp.Status = true
  168. // 将数据加入缓存
  169. if utils.Re == nil {
  170. data, _ := json.Marshal(resp)
  171. utils.Rc.Put(key, data, 2*time.Hour)
  172. }
  173. isOk = true
  174. return
  175. }
  176. // FutureGoodChartInfoRefresh
  177. // @Title 商品价格图表刷新接口
  178. // @Description 商品价格图表刷新接口
  179. // @Param UniqueCode query string true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  180. // @Success Ret=200 刷新成功
  181. // @router /future_good/refresh [get]
  182. func (this *ChartController) FutureGoodChartInfoRefresh() {
  183. br := new(models.BaseResponse).Init()
  184. chartId := 0
  185. defer func() {
  186. // 添加日志
  187. if chartId > 0 {
  188. shareChartRefreshLogInfo := &models.ShareChartRefreshLog{
  189. Ip: this.Ctx.Input.IP(),
  190. ChartId: chartId,
  191. CreateTime: time.Now(),
  192. }
  193. models.AddShareChartRefreshLog(shareChartRefreshLogInfo)
  194. }
  195. this.Data["json"] = br
  196. this.ServeJSON()
  197. }()
  198. uniqueCode := this.GetString("UniqueCode")
  199. if uniqueCode == "" {
  200. br.Msg = "参数错误"
  201. br.ErrMsg = "参数错误,uniqueCode is empty"
  202. return
  203. }
  204. chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
  205. if err != nil {
  206. if err.Error() == utils.ErrNoRow() {
  207. br.Msg = "该图已被删除,请刷新页面"
  208. br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
  209. return
  210. }
  211. br.Msg = "获取失败"
  212. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  213. return
  214. }
  215. chartId = chartInfo.ChartInfoId
  216. err = future_goodServ.FutureGoodChartInfoRefresh(chartInfo.ChartInfoId)
  217. if err != nil {
  218. br.Msg = "刷新失败"
  219. br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  220. return
  221. }
  222. //err = data.ChartInfoRefresh(chartInfo.ChartInfoId)
  223. //if err != nil {
  224. // br.Msg = "刷新失败"
  225. // br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  226. // return
  227. //}
  228. //err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
  229. //if err != nil {
  230. // br.Msg = "刷新失败"
  231. // br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  232. // return
  233. //}
  234. //清除数据缓存
  235. key := utils.HZ_CHART_LIB_DETAIL + uniqueCode
  236. if utils.Re == nil {
  237. utils.Rc.Delete(key)
  238. }
  239. br.Ret = 200
  240. br.Success = true
  241. br.Msg = "刷新成功"
  242. }