chart_common.go 22 KB

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