chart_common.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714
  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. "hongze/hongze_chart_lib/models/data_manage/future_good"
  8. "hongze/hongze_chart_lib/models/data_manage/future_good/request"
  9. "hongze/hongze_chart_lib/models/data_manage/future_good/response"
  10. line_equationReq "hongze/hongze_chart_lib/models/data_manage/line_equation/request"
  11. line_featureReq "hongze/hongze_chart_lib/models/data_manage/line_feature/request"
  12. "hongze/hongze_chart_lib/services/data"
  13. correlationServ "hongze/hongze_chart_lib/services/data/correlation"
  14. future_goodServ "hongze/hongze_chart_lib/services/data/future_good"
  15. "hongze/hongze_chart_lib/services/data/line_equation"
  16. lineFeatureServ "hongze/hongze_chart_lib/services/data/line_feature"
  17. "hongze/hongze_chart_lib/utils"
  18. "strconv"
  19. "strings"
  20. "time"
  21. )
  22. // CommonChartInfoDetailFromUniqueCode
  23. // @Title 根据编码获取图表详情
  24. // @Description 根据编码获取图表详情接口
  25. // @Param UniqueCode query int true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  26. // @Param IsCache query bool true "是否走缓存,默认false"
  27. // @Success 200 {object} data_manage.ChartInfoDetailFromUniqueCodeResp
  28. // @router /common/detail [get]
  29. func (this *ChartController) CommonChartInfoDetailFromUniqueCode() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. uniqueCode := this.GetString("UniqueCode")
  36. if uniqueCode == "" {
  37. br.Msg = "参数错误"
  38. br.ErrMsg = "参数错误,uniqueCode is empty"
  39. return
  40. }
  41. key := utils.HZ_CHART_LIB_DETAIL + uniqueCode
  42. resp := new(models.ChartInfoDetailResp)
  43. // 图表水印
  44. conf, e := models.GetBusinessConf()
  45. if e != nil {
  46. br.Msg = "获取失败"
  47. br.ErrMsg = "获取配置信息失败, Err: " + e.Error()
  48. return
  49. }
  50. //判断是否有缓存
  51. if utils.Re == nil {
  52. if utils.Re == nil && utils.Rc.IsExist(key) {
  53. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  54. err := json.Unmarshal(data, &resp)
  55. if err == nil && resp != nil {
  56. if conf[models.BusinessConfWatermarkChart] == "true" && conf[models.BusinessConfCompanyWatermark] != "" {
  57. resp.WaterMark = conf[models.BusinessConfCompanyWatermark]
  58. }
  59. br.Ret = 200
  60. br.Success = true
  61. br.Msg = "获取成功"
  62. br.Data = resp
  63. fmt.Println("source redis")
  64. return
  65. }
  66. }
  67. }
  68. }
  69. chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
  70. if err != nil {
  71. if err.Error() == utils.ErrNoRow() {
  72. br.Msg = "该图已被删除,请刷新页面"
  73. br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
  74. return
  75. }
  76. br.Msg = "获取失败"
  77. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  78. return
  79. }
  80. //var resp interface{}
  81. var isOk bool
  82. var msg, errMsg string
  83. switch chartInfo.Source {
  84. case utils.CHART_SOURCE_DEFAULT:
  85. resp, isOk, msg, errMsg = GetChartInfoDetailFromUniqueCode(chartInfo, key)
  86. case utils.CHART_SOURCE_FUTURE_GOOD:
  87. resp, isOk, msg, errMsg = GetFutureGoodChartInfoDetailFromUniqueCode(chartInfo, key)
  88. case utils.CHART_SOURCE_FUTURE_GOOD_PROFIT:
  89. resp, isOk, msg, errMsg = GetFutureGoodProfitChartInfoDetailFromUniqueCode(chartInfo, key)
  90. case utils.CHART_SOURCE_CORRELATION, utils.CHART_SOURCE_ROLLING_CORRELATION:
  91. resp, isOk, msg, errMsg = GetCorrelationChartInfoDetailFromUniqueCode(chartInfo, key)
  92. case utils.CHART_SOURCE_LINE_EQUATION:
  93. resp, isOk, msg, errMsg = GetLineEquationChartInfoDetailFromUniqueCode(chartInfo, key)
  94. case utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION, utils.CHART_SOURCE_LINE_FEATURE_PERCENTILE, utils.CHART_SOURCE_LINE_FEATURE_FREQUENCY:
  95. resp, isOk, msg, errMsg = GetLineFeatureChartInfoDetailFromUniqueCode(chartInfo, key)
  96. default:
  97. br.Msg = "错误的图表"
  98. br.ErrMsg = "错误的图表"
  99. return
  100. }
  101. if !isOk {
  102. br.Msg = msg
  103. br.ErrMsg = errMsg
  104. return
  105. }
  106. if conf[models.BusinessConfWatermarkChart] == "true" && conf[models.BusinessConfCompanyWatermark] != "" {
  107. resp.WaterMark = conf[models.BusinessConfCompanyWatermark]
  108. }
  109. br.Ret = 200
  110. br.Success = true
  111. br.Msg = "获取成功"
  112. br.Data = resp
  113. }
  114. // GetFutureGoodChartInfoDetailFromUniqueCode 根据编码获取图表详情
  115. func GetFutureGoodChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
  116. resp = new(models.ChartInfoDetailResp)
  117. chartInfoId := chartInfo.ChartInfoId
  118. startDate := chartInfo.StartDate
  119. endDate := chartInfo.EndDate
  120. // 兼容日期错误
  121. {
  122. if strings.Count(startDate, "-") == 1 {
  123. startDate = startDate + "-01"
  124. }
  125. if strings.Count(endDate, "-") == 1 {
  126. endDate = endDate + "-01"
  127. }
  128. }
  129. edbInfoMapping, err := models.GetEtaEdbChartEdbMapping(chartInfoId)
  130. if err != nil {
  131. msg = "获取失败"
  132. errMsg = "获取图表,现货指标信息失败,Err:" + err.Error()
  133. return
  134. }
  135. futureGoodEdbInfoMapping, err := models.GetFutureGoodEdbChartEdbMapping(chartInfoId)
  136. if err != nil {
  137. msg = "获取失败"
  138. errMsg = "获取图表的期货商品指标信息失败,Err:" + err.Error()
  139. return
  140. }
  141. // 商品价格曲线图的一些配置
  142. var barConfig data_manage.BarChartInfoReq
  143. barChartInfoDateList := make([]data_manage.BarChartInfoDateReq, 0)
  144. //barChartInfoSort := data_manage.BarChartInfoSortReq{}
  145. if chartInfo.BarConfig == `` {
  146. msg = "商品价格曲线图未配置"
  147. errMsg = "商品价格曲线图未配置"
  148. return
  149. }
  150. err = json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
  151. if err != nil {
  152. msg = "商品价格曲线图配置异常"
  153. errMsg = "商品价格曲线图配置异常"
  154. return
  155. }
  156. barChartInfoDateList = barConfig.DateList
  157. //barChartInfoSort = barConfig.Sort
  158. // 获取图表中的指标数据
  159. barConfigEdbInfoIdList, edbList, xEdbIdValue, xDataList, yDataList, err := future_goodServ.GetChartEdbData(chartInfoId, startDate, endDate, edbInfoMapping, futureGoodEdbInfoMapping, barChartInfoDateList)
  160. if err != nil {
  161. msg = "获取失败"
  162. errMsg = "获取图表,指标信息失败,Err:" + err.Error()
  163. return
  164. }
  165. warnEdbList := make([]string, 0)
  166. if len(edbList) <= 0 {
  167. msg = "商品价格曲线图表指标异常"
  168. errMsg = "商品价格曲线图表异常"
  169. return
  170. }
  171. baseEdbInfo := edbList[0] //现货指标
  172. for _, v := range edbList {
  173. if v.IsNullData {
  174. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  175. }
  176. // 指标别名
  177. if barConfigEdbInfoIdList != nil && len(barConfigEdbInfoIdList) > 0 {
  178. for _, reqEdb := range barConfigEdbInfoIdList {
  179. if v.EdbInfoId == reqEdb.EdbInfoId {
  180. v.EdbAliasName = reqEdb.Name
  181. v.EdbAliasNameEn = reqEdb.NameEn
  182. }
  183. }
  184. }
  185. }
  186. chartInfo.UnitEn = baseEdbInfo.UnitEn
  187. // 图表的指标来源
  188. sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
  189. chartInfo.ChartSource = strings.Join(sourceNameList, ",")
  190. chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
  191. resp.ChartInfo = chartInfo
  192. resp.EdbInfoList = edbList
  193. resp.XEdbIdValue = xEdbIdValue
  194. resp.YDataList = yDataList
  195. resp.XDataList = xDataList
  196. //resp.BarChartInfo = barConfig
  197. //resp.Status = true
  198. // 将数据加入缓存
  199. if utils.Re == nil {
  200. data, _ := json.Marshal(resp)
  201. utils.Rc.Put(key, data, 2*time.Hour)
  202. }
  203. isOk = true
  204. return
  205. }
  206. // GetFutureGoodProfitChartInfoDetailFromUniqueCode 根据编码获取商品利润图表详情
  207. func GetFutureGoodProfitChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
  208. resp = new(models.ChartInfoDetailResp)
  209. chartInfoId := chartInfo.ChartInfoId
  210. // 商品利润曲线图的一些配置
  211. var extraConf request.ChartInfoReq
  212. err := json.Unmarshal([]byte(chartInfo.ExtraConfig), &extraConf)
  213. if err != nil {
  214. msg = "商品利润曲线图配置异常"
  215. errMsg = "商品利润曲线图配置异常,Err:" + err.Error()
  216. return
  217. }
  218. edbList := make([]*models.ChartEdbInfoMapping, 0)
  219. edbInfoMapping, err := models.GetEtaEdbChartEdbMapping(chartInfoId)
  220. if err != nil {
  221. msg = "获取失败"
  222. errMsg = "获取商品利润图表,基础指标信息失败,Err:" + err.Error()
  223. return
  224. }
  225. edbList = append(edbList, edbInfoMapping)
  226. futureGoodEdbInfoMappingList, err := models.GetFutureGoodEdbChartEdbMappingList(chartInfoId)
  227. if err != nil {
  228. msg = "获取失败"
  229. errMsg = "获取商品利润图表,商品指标信息失败,Err:" + err.Error()
  230. return
  231. }
  232. edbList = append(edbList, futureGoodEdbInfoMappingList...)
  233. if len(edbList) <= 0 {
  234. msg = "商品利润曲线图表指标异常"
  235. errMsg = "商品利润曲线图表指标异常"
  236. return
  237. }
  238. xDataList := make([]models.XData, 0)
  239. yDataList := make([]models.YData, 0)
  240. // 查找商品利润图表的扩展信息
  241. chartInfoFutureGoodProfit := new(future_good.ChartInfoFutureGoodProfit)
  242. if err = chartInfoFutureGoodProfit.GetItemById(chartInfo.ChartInfoId); err != nil {
  243. msg = "获取失败"
  244. errMsg = "获取基础相关性图表信息失败, Err: " + err.Error()
  245. return
  246. }
  247. err = json.Unmarshal([]byte(chartInfoFutureGoodProfit.XValue), &xDataList)
  248. if err != nil {
  249. msg = "获取失败"
  250. errMsg = "转换X轴数据失败, Err: " + err.Error()
  251. return
  252. }
  253. err = json.Unmarshal([]byte(chartInfoFutureGoodProfit.YValue), &yDataList)
  254. if err != nil {
  255. msg = "获取失败"
  256. errMsg = "转换Y轴数据失败, Err: " + err.Error()
  257. return
  258. }
  259. warnEdbList := make([]string, 0)
  260. baseEdbInfo := edbList[0] //现货指标
  261. for _, v := range edbList {
  262. if v.IsNullData {
  263. warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
  264. }
  265. }
  266. chartInfo.UnitEn = baseEdbInfo.UnitEn
  267. resp.ChartInfo = chartInfo
  268. resp.EdbInfoList = edbList
  269. resp.DataResp = response.ProfitFutureGoodChartResp{
  270. YDataList: yDataList,
  271. XDataList: xDataList,
  272. ProfitName: chartInfoFutureGoodProfit.ProfitName,
  273. ProfitNameEn: chartInfoFutureGoodProfit.ProfitNameEn,
  274. Extra: extraConf,
  275. }
  276. // 将数据加入缓存
  277. if utils.Re == nil {
  278. data, _ := json.Marshal(resp)
  279. utils.Rc.Put(key, data, 2*time.Hour)
  280. }
  281. isOk = true
  282. return
  283. }
  284. // GetLineEquationChartInfoDetailFromUniqueCode 根据编码获取拟合方程图表详情
  285. func GetLineEquationChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
  286. resp = new(models.ChartInfoDetailResp)
  287. //chartInfoId := chartInfo.ChartInfoId
  288. if chartInfo.ExtraConfig == `` {
  289. msg = "获取失败"
  290. errMsg = "获取配置信息失败"
  291. return
  292. }
  293. var lineChartInfoConfig line_equationReq.LineChartInfoReq
  294. err := json.Unmarshal([]byte(chartInfo.ExtraConfig), &lineChartInfoConfig)
  295. if err != nil {
  296. msg = "获取失败"
  297. errMsg = "获取图表配置信息失败, Err:" + err.Error()
  298. return
  299. }
  300. var getAData, getBData, getR2Data bool
  301. switch lineChartInfoConfig.Source {
  302. case utils.CHART_MULTIPLE_GRAPH_LINE_EQUATION_ONE:
  303. getAData = true
  304. case utils.CHART_MULTIPLE_GRAPH_LINE_EQUATION_TWO:
  305. getBData = true
  306. case utils.CHART_MULTIPLE_GRAPH_LINE_EQUATION_THREE:
  307. getR2Data = true
  308. }
  309. edbList, dataResp, err, errMsg := line_equation.GetChartEdbData(chartInfo.ChartInfoId, lineChartInfoConfig, getAData, getBData, getR2Data)
  310. if err != nil {
  311. if errMsg == `` {
  312. errMsg = "获取失败"
  313. }
  314. return
  315. }
  316. var resultResp interface{}
  317. switch lineChartInfoConfig.Source {
  318. case utils.CHART_MULTIPLE_GRAPH_LINE_EQUATION_ONE:
  319. resultResp = dataResp.AData
  320. case utils.CHART_MULTIPLE_GRAPH_LINE_EQUATION_TWO:
  321. resultResp = dataResp.BData
  322. case utils.CHART_MULTIPLE_GRAPH_LINE_EQUATION_THREE:
  323. resultResp = dataResp.R2Data
  324. }
  325. //chartInfo.UnitEn = baseEdbInfo.UnitEn
  326. // 图表的指标来源
  327. sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
  328. chartInfo.ChartSource = strings.Join(sourceNameList, ",")
  329. chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
  330. resp.ChartInfo = chartInfo
  331. resp.DataResp = resultResp
  332. resp.EdbInfoList = edbList
  333. // 将数据加入缓存
  334. if utils.Re == nil {
  335. data, _ := json.Marshal(resp)
  336. utils.Rc.Put(key, data, 2*time.Hour)
  337. }
  338. isOk = true
  339. return
  340. }
  341. // GetLineFeatureChartInfoDetailFromUniqueCode 根据编码获取统计特征图表详情
  342. func GetLineFeatureChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
  343. resp = new(models.ChartInfoDetailResp)
  344. // 获取图表关联指标
  345. edbMappingList, err := models.GetChartEdbMappingList(chartInfo.ChartInfoId)
  346. if err != nil {
  347. msg = "获取失败"
  348. errMsg = "获取图表关联指标信息失败,Err:" + err.Error()
  349. return
  350. }
  351. if len(edbMappingList) != 1 {
  352. msg = "获取失败"
  353. errMsg = fmt.Sprint("获取图表关联指标信息异常,数量:", len(edbMappingList))
  354. return
  355. }
  356. edbMapping := edbMappingList[0]
  357. var edbList []*models.ChartEdbInfoMapping
  358. var resultResp interface{}
  359. switch chartInfo.Source {
  360. case utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION:
  361. calculateValue, tmpErr := strconv.Atoi(chartInfo.ExtraConfig)
  362. if tmpErr != nil {
  363. msg = "获取失败"
  364. errMsg = "格式化配置项失败,Err:" + tmpErr.Error()
  365. return
  366. }
  367. edbList, resultResp, err, msg = lineFeatureServ.GetStandardDeviationData(0, edbMapping, calculateValue)
  368. case utils.CHART_SOURCE_LINE_FEATURE_PERCENTILE:
  369. var percentileConfig line_featureReq.Percentile
  370. err = json.Unmarshal([]byte(chartInfo.ExtraConfig), &percentileConfig)
  371. if err != nil {
  372. msg = "获取失败"
  373. errMsg = "格式化配置项失败,Err:" + err.Error()
  374. return
  375. }
  376. edbList, resultResp, err, msg = lineFeatureServ.GetPercentileData(0, edbMapping, percentileConfig.CalculateValue, percentileConfig.CalculateUnit)
  377. case utils.CHART_SOURCE_LINE_FEATURE_FREQUENCY:
  378. var frequencyDistributionConfig line_featureReq.FrequencyDistribution
  379. err = json.Unmarshal([]byte(chartInfo.ExtraConfig), &frequencyDistributionConfig)
  380. if err != nil {
  381. msg = "获取失败"
  382. errMsg = "格式化配置项失败,Err:" + err.Error()
  383. return
  384. }
  385. // 获取图表中的指标数据
  386. edbList, resultResp, err, errMsg = lineFeatureServ.GetFrequencyDistributionData(0, edbMapping, frequencyDistributionConfig.DateType, frequencyDistributionConfig.FrequencyValue, frequencyDistributionConfig.StartDate, frequencyDistributionConfig.EndDate)
  387. default:
  388. msg = `错误的图表`
  389. errMsg = fmt.Sprint("错误的图表来源,source", chartInfo.Source)
  390. return
  391. }
  392. if err != nil {
  393. if msg == `` {
  394. msg = "获取失败"
  395. }
  396. errMsg = "获取图表,指标信息失败,Err:" + err.Error()
  397. return
  398. }
  399. //chartInfo.UnitEn = baseEdbInfo.UnitEn
  400. // 图表的指标来源
  401. sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
  402. chartInfo.ChartSource = strings.Join(sourceNameList, ",")
  403. chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
  404. resp.ChartInfo = chartInfo
  405. resp.DataResp = resultResp
  406. resp.EdbInfoList = edbList
  407. // 将数据加入缓存
  408. if utils.Re == nil {
  409. data, _ := json.Marshal(resp)
  410. utils.Rc.Put(key, data, 2*time.Hour)
  411. }
  412. isOk = true
  413. return
  414. }
  415. // FutureGoodChartInfoRefresh
  416. // @Title 商品价格图表刷新接口
  417. // @Description 商品价格图表刷新接口
  418. // @Param UniqueCode query string true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  419. // @Success Ret=200 刷新成功
  420. // @router /future_good/refresh [get]
  421. func (this *ChartController) FutureGoodChartInfoRefresh() {
  422. br := new(models.BaseResponse).Init()
  423. chartId := 0
  424. defer func() {
  425. // 添加日志
  426. if chartId > 0 {
  427. shareChartRefreshLogInfo := &models.ShareChartRefreshLog{
  428. Ip: this.Ctx.Input.IP(),
  429. ChartId: chartId,
  430. CreateTime: time.Now(),
  431. }
  432. models.AddShareChartRefreshLog(shareChartRefreshLogInfo)
  433. }
  434. this.Data["json"] = br
  435. this.ServeJSON()
  436. }()
  437. uniqueCode := this.GetString("UniqueCode")
  438. if uniqueCode == "" {
  439. br.Msg = "参数错误"
  440. br.ErrMsg = "参数错误,uniqueCode is empty"
  441. return
  442. }
  443. chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
  444. if err != nil {
  445. if err.Error() == utils.ErrNoRow() {
  446. br.Msg = "该图已被删除,请刷新页面"
  447. br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
  448. return
  449. }
  450. br.Msg = "获取失败"
  451. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  452. return
  453. }
  454. chartId = chartInfo.ChartInfoId
  455. err = future_goodServ.FutureGoodChartInfoRefresh(chartInfo.ChartInfoId)
  456. if err != nil {
  457. br.Msg = "刷新失败"
  458. br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  459. return
  460. }
  461. //err = data.ChartInfoRefresh(chartInfo.ChartInfoId)
  462. //if err != nil {
  463. // br.Msg = "刷新失败"
  464. // br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  465. // return
  466. //}
  467. //err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
  468. //if err != nil {
  469. // br.Msg = "刷新失败"
  470. // br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  471. // return
  472. //}
  473. //清除数据缓存
  474. key := utils.HZ_CHART_LIB_DETAIL + uniqueCode
  475. if utils.Re == nil {
  476. utils.Rc.Delete(key)
  477. }
  478. br.Ret = 200
  479. br.Success = true
  480. br.Msg = "刷新成功"
  481. }
  482. // GetCorrelationChartInfoDetailFromUniqueCode 根据编码获取相关性图表详情
  483. func GetCorrelationChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (resp *models.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
  484. resp = new(models.ChartInfoDetailResp)
  485. chartInfoId := chartInfo.ChartInfoId
  486. startDate := chartInfo.StartDate
  487. endDate := chartInfo.EndDate
  488. // 兼容日期错误
  489. {
  490. if strings.Count(startDate, "-") == 1 {
  491. startDate = startDate + "-01"
  492. }
  493. if strings.Count(endDate, "-") == 1 {
  494. endDate = endDate + "-01"
  495. }
  496. }
  497. // 相关性图表信息
  498. correlationChart := new(data_manage.ChartInfoCorrelation)
  499. if e := correlationChart.GetItemById(chartInfoId); e != nil {
  500. msg = "获取失败"
  501. errMsg = "获取图表相关性信息失败, Err:" + e.Error()
  502. return
  503. }
  504. // 获取指标信息
  505. edbInfoMappingA, e := models.GetChartEdbMappingByEdbInfoId(correlationChart.EdbInfoIdFirst)
  506. if e != nil {
  507. msg = "获取失败"
  508. errMsg = "获取相关性图表, A指标mapping信息失败, Err:" + e.Error()
  509. return
  510. }
  511. edbInfoMappingB, e := models.GetChartEdbMappingByEdbInfoId(correlationChart.EdbInfoIdSecond)
  512. if e != nil {
  513. msg = "获取失败"
  514. errMsg = "获取相关性图表, B指标mapping信息失败, Err:" + e.Error()
  515. return
  516. }
  517. var dataResp interface{} // 绘图数据返回(目前是滚动相关性的图)
  518. var xEdbIdValue []int
  519. var xDateTimeValue []string
  520. var yDataList []models.YData
  521. switch chartInfo.Source {
  522. case utils.CHART_SOURCE_CORRELATION: // 相关性图
  523. moveUnitDays, ok := utils.FrequencyDaysMap[correlationChart.CalculateUnit]
  524. if !ok {
  525. msg = "错误的分析周期"
  526. errMsg = "相关性图表数据有误"
  527. return
  528. }
  529. startDate := time.Now().AddDate(0, 0, -correlationChart.CalculateValue*moveUnitDays).Format(utils.FormatDate)
  530. endDate := time.Now().Format(utils.FormatDate)
  531. xEdbIdValue, yDataList, e = correlationServ.GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, startDate, endDate)
  532. if e != nil {
  533. msg = "获取失败"
  534. errMsg = "获取相关性图表, 图表计算值失败, Err:" + e.Error()
  535. return
  536. }
  537. case utils.CHART_SOURCE_ROLLING_CORRELATION: // 滚动相关性图
  538. startDate, endDate := utils.GetDateByDateType(correlationChart.DateType, correlationChart.StartDate.Format(utils.FormatDate), correlationChart.EndDate.Format(utils.FormatDate))
  539. xDateTimeValue, yDataList, e = correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.CalculateValue, correlationChart.CalculateUnit, startDate, endDate)
  540. dataResp = models.RollingCorrelationChartDataResp{
  541. XDateTimeValue: xDateTimeValue,
  542. YDataList: yDataList,
  543. }
  544. }
  545. // 完善指标信息
  546. edbList, e := correlationServ.GetChartEdbInfoFormat(chartInfo.ChartInfoId, edbInfoMappingA, edbInfoMappingB)
  547. if e != nil {
  548. msg = "获取失败"
  549. errMsg = "获取相关性图表, 完善指标信息失败, Err:" + e.Error()
  550. return
  551. }
  552. // 图表的指标来源
  553. sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
  554. chartInfo.ChartSource = strings.Join(sourceNameList, ",")
  555. chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
  556. correlationInfo := new(models.CorrelationInfo)
  557. correlationInfo.LeadValue = correlationChart.LeadValue
  558. correlationInfo.LeadUnit = correlationChart.LeadUnit
  559. correlationInfo.StartDate = correlationChart.StartDate.Format(utils.FormatDate)
  560. correlationInfo.EndDate = correlationChart.EndDate.Format(utils.FormatDate)
  561. correlationInfo.LeadValue = correlationChart.LeadValue
  562. correlationInfo.EdbInfoIdFirst = correlationChart.EdbInfoIdFirst
  563. correlationInfo.EdbInfoIdSecond = correlationChart.EdbInfoIdSecond
  564. resp.ChartInfo = chartInfo
  565. resp.EdbInfoList = edbList
  566. resp.XEdbIdValue = xEdbIdValue
  567. resp.YDataList = yDataList
  568. resp.CorrelationChartInfo = correlationInfo
  569. resp.DataResp = dataResp
  570. // 将数据加入缓存
  571. if utils.Re == nil {
  572. d, _ := json.Marshal(resp)
  573. _ = utils.Rc.Put(key, d, 2*time.Hour)
  574. }
  575. isOk = true
  576. return
  577. }
  578. // CorrelationChartInfoRefresh
  579. // @Title 商品价格图表刷新接口
  580. // @Description 商品价格图表刷新接口
  581. // @Param UniqueCode query string true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  582. // @Success Ret=200 刷新成功
  583. // @router /correlation/refresh [get]
  584. func (this *ChartController) CorrelationChartInfoRefresh() {
  585. br := new(models.BaseResponse).Init()
  586. chartId := 0
  587. defer func() {
  588. // 添加日志
  589. if chartId > 0 {
  590. shareChartRefreshLogInfo := &models.ShareChartRefreshLog{
  591. Ip: this.Ctx.Input.IP(),
  592. ChartId: chartId,
  593. CreateTime: time.Now(),
  594. }
  595. models.AddShareChartRefreshLog(shareChartRefreshLogInfo)
  596. }
  597. this.Data["json"] = br
  598. this.ServeJSON()
  599. }()
  600. uniqueCode := this.GetString("UniqueCode")
  601. if uniqueCode == "" {
  602. br.Msg = "参数错误"
  603. br.ErrMsg = "参数错误,uniqueCode is empty"
  604. return
  605. }
  606. chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
  607. if err != nil {
  608. if err.Error() == utils.ErrNoRow() {
  609. br.Msg = "该图已被删除,请刷新页面"
  610. br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
  611. return
  612. }
  613. br.Msg = "获取失败"
  614. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  615. return
  616. }
  617. chartId = chartInfo.ChartInfoId
  618. err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
  619. if err != nil {
  620. br.Msg = "刷新失败"
  621. br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  622. return
  623. }
  624. //// 刷新相关性图表
  625. //if e := correlationServ.ChartInfoRefresh(chartInfo.ChartInfoId); e != nil {
  626. // br.Msg = "刷新失败"
  627. // br.ErrMsg = "刷新相关性图表失败, Err:" + e.Error()
  628. // return
  629. //}
  630. //清除数据缓存
  631. key := utils.HZ_CHART_LIB_DETAIL + uniqueCode
  632. if utils.Re == nil {
  633. _ = utils.Rc.Delete(key)
  634. }
  635. br.Ret = 200
  636. br.Success = true
  637. br.Msg = "刷新成功"
  638. }