chart_common.go 23 KB

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