chart_common.go 22 KB

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