chart_info.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. package future_good
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/shopspring/decimal"
  6. "hongze/hongze_chart_lib/models"
  7. "hongze/hongze_chart_lib/models/data_manage"
  8. efuture_good "hongze/hongze_chart_lib/models/data_manage/future_good"
  9. "hongze/hongze_chart_lib/services/alarm_msg"
  10. "hongze/hongze_chart_lib/services/data"
  11. "hongze/hongze_chart_lib/utils"
  12. "sort"
  13. "strconv"
  14. "time"
  15. )
  16. // GetChartEdbData 获取图表的指标数据
  17. func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping, futureGoodEdbInfoMapping *models.ChartEdbInfoMapping, barChartInfoDateList []data_manage.BarChartInfoDateReq, barChartInfoSort data_manage.BarChartInfoSortReq) (barConfigEdbInfoIdList []data_manage.BarChartInfoEdbItemReq, edbList []*models.ChartEdbInfoMapping, xEdbIdValue []int, yDataList []models.YData, err error) {
  18. edbList = make([]*models.ChartEdbInfoMapping, 0)
  19. if futureGoodEdbInfoMapping == nil {
  20. err = errors.New("商品指标未选取")
  21. return
  22. }
  23. if edbInfoMapping == nil {
  24. err = errors.New("ETA指标未选取")
  25. return
  26. }
  27. // 指标对应的所有数据
  28. edbDataListMap := make(map[int][]*models.EdbDataList)
  29. item := new(data_manage.ChartEdbInfoMapping)
  30. edbInfoMapping.FrequencyEn = data.GetFrequencyEn(edbInfoMapping.Frequency)
  31. if edbInfoMapping.Unit == `无` {
  32. edbInfoMapping.Unit = ``
  33. }
  34. if futureGoodEdbInfoMapping.Unit == `无` {
  35. futureGoodEdbInfoMapping.Unit = ``
  36. }
  37. if chartInfoId <= 0 {
  38. edbInfoMapping.IsAxis = 1
  39. edbInfoMapping.LeadValue = 0
  40. edbInfoMapping.LeadUnit = ""
  41. edbInfoMapping.ChartEdbMappingId = 0
  42. edbInfoMapping.ChartInfoId = 0
  43. edbInfoMapping.IsOrder = false
  44. edbInfoMapping.EdbInfoType = 1
  45. edbInfoMapping.ChartStyle = ""
  46. edbInfoMapping.ChartColor = ""
  47. edbInfoMapping.ChartWidth = 0
  48. futureGoodEdbInfoMapping.IsAxis = 1
  49. futureGoodEdbInfoMapping.LeadValue = 0
  50. futureGoodEdbInfoMapping.LeadUnit = ""
  51. futureGoodEdbInfoMapping.ChartEdbMappingId = 0
  52. futureGoodEdbInfoMapping.ChartInfoId = 0
  53. futureGoodEdbInfoMapping.IsOrder = false
  54. futureGoodEdbInfoMapping.EdbInfoType = 1
  55. futureGoodEdbInfoMapping.ChartStyle = ""
  56. futureGoodEdbInfoMapping.ChartColor = ""
  57. futureGoodEdbInfoMapping.ChartWidth = 0
  58. } else {
  59. edbInfoMapping.LeadUnitEn = data.GetLeadUnitEn(edbInfoMapping.LeadUnit)
  60. futureGoodEdbInfoMapping.LeadUnitEn = data.GetLeadUnitEn(futureGoodEdbInfoMapping.LeadUnit)
  61. }
  62. // 普通的指标数据
  63. {
  64. dataList := make([]*models.EdbDataList, 0)
  65. dataList, err = models.GetEdbDataList(edbInfoMapping.Source, edbInfoMapping.EdbInfoId, startDate, endDate)
  66. edbDataListMap[edbInfoMapping.EdbInfoId] = dataList
  67. item.DataList = dataList
  68. edbList = append(edbList, edbInfoMapping)
  69. barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, data_manage.BarChartInfoEdbItemReq{
  70. EdbInfoId: edbInfoMapping.EdbInfoId,
  71. //Name: edbInfoMapping.EdbName,
  72. Name: "现货价",
  73. NameEn: "Spot Price",
  74. Source: edbInfoMapping.Source,
  75. })
  76. }
  77. nowMonth := time.Now().Month()
  78. // 获取期货指标以及期货数据
  79. futureGoodEdbInfoList, err := efuture_good.GetFutureGoodEdbInfoListByParentId(futureGoodEdbInfoMapping.EdbInfoId)
  80. if err != nil {
  81. return
  82. }
  83. futureGoodMappingList := make([]*models.ChartEdbInfoMapping, 0)
  84. //当前月份之后的月
  85. nextFutureGoodEdbInfoList := make([]*efuture_good.FutureGoodEdbInfo, 0)
  86. for k, v := range futureGoodEdbInfoList {
  87. // 过滤当前月
  88. if v.Month == int(nowMonth) {
  89. continue
  90. }
  91. if v.Month < int(nowMonth) {
  92. nextFutureGoodEdbInfoList = append(nextFutureGoodEdbInfoList, v)
  93. continue
  94. }
  95. newMappingInfo := &models.ChartEdbInfoMapping{
  96. EdbInfoId: v.FutureGoodEdbInfoId,
  97. SourceName: v.Exchange,
  98. Source: utils.CHART_SOURCE_FUTURE_GOOD,
  99. EdbCode: v.FutureGoodEdbCode,
  100. EdbName: v.FutureGoodEdbName,
  101. EdbAliasName: v.FutureGoodEdbName,
  102. EdbNameEn: v.FutureGoodEdbNameEn,
  103. EdbType: edbInfoMapping.EdbType,
  104. Frequency: edbInfoMapping.Frequency,
  105. FrequencyEn: edbInfoMapping.FrequencyEn,
  106. Unit: edbInfoMapping.Unit,
  107. UnitEn: edbInfoMapping.UnitEn,
  108. StartDate: v.StartDate,
  109. EndDate: v.EndDate,
  110. ModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  111. ChartEdbMappingId: v.FutureGoodEdbInfoId,
  112. ChartInfoId: edbInfoMapping.ChartInfoId,
  113. MaxData: v.MaxValue,
  114. MinData: v.MinValue,
  115. IsOrder: edbInfoMapping.IsOrder,
  116. IsAxis: edbInfoMapping.IsAxis,
  117. EdbInfoType: edbInfoMapping.EdbInfoType,
  118. EdbInfoCategoryType: edbInfoMapping.EdbInfoCategoryType,
  119. LeadValue: edbInfoMapping.LeadValue,
  120. LeadUnit: edbInfoMapping.LeadUnit,
  121. LeadUnitEn: edbInfoMapping.LeadUnitEn,
  122. ChartStyle: edbInfoMapping.ChartStyle,
  123. ChartColor: edbInfoMapping.ChartColor,
  124. PredictChartColor: edbInfoMapping.PredictChartColor,
  125. ChartWidth: edbInfoMapping.ChartWidth,
  126. ChartType: edbInfoMapping.ChartType,
  127. LatestDate: v.LatestDate.Format(utils.FormatDateTime),
  128. LatestValue: v.LatestValue,
  129. UniqueCode: futureGoodEdbInfoMapping.UniqueCode + strconv.Itoa(k),
  130. MinValue: v.MinValue,
  131. MaxValue: v.MaxValue,
  132. DataList: nil,
  133. IsNullData: false,
  134. }
  135. futureGoodMappingList = append(futureGoodMappingList, newMappingInfo)
  136. barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, data_manage.BarChartInfoEdbItemReq{
  137. EdbInfoId: newMappingInfo.EdbInfoId,
  138. Name: fmt.Sprint("M+", v.Month),
  139. NameEn: fmt.Sprint("M+", v.Month),
  140. Source: newMappingInfo.Source,
  141. })
  142. }
  143. //当前月份之前的月
  144. for k, v := range nextFutureGoodEdbInfoList {
  145. newMappingInfo := &models.ChartEdbInfoMapping{
  146. EdbInfoId: v.FutureGoodEdbInfoId,
  147. SourceName: v.Exchange,
  148. Source: utils.CHART_SOURCE_FUTURE_GOOD,
  149. EdbCode: v.FutureGoodEdbCode,
  150. EdbName: v.FutureGoodEdbName,
  151. EdbAliasName: v.FutureGoodEdbName,
  152. EdbNameEn: v.FutureGoodEdbNameEn,
  153. EdbType: edbInfoMapping.EdbType,
  154. Frequency: edbInfoMapping.Frequency,
  155. FrequencyEn: edbInfoMapping.FrequencyEn,
  156. Unit: edbInfoMapping.Unit,
  157. UnitEn: edbInfoMapping.UnitEn,
  158. StartDate: v.StartDate,
  159. EndDate: v.EndDate,
  160. ModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  161. ChartEdbMappingId: v.FutureGoodEdbInfoId,
  162. ChartInfoId: edbInfoMapping.ChartInfoId,
  163. MaxData: v.MaxValue,
  164. MinData: v.MinValue,
  165. IsOrder: edbInfoMapping.IsOrder,
  166. IsAxis: edbInfoMapping.IsAxis,
  167. EdbInfoType: edbInfoMapping.EdbInfoType,
  168. EdbInfoCategoryType: edbInfoMapping.EdbInfoCategoryType,
  169. LeadValue: edbInfoMapping.LeadValue,
  170. LeadUnit: edbInfoMapping.LeadUnit,
  171. LeadUnitEn: edbInfoMapping.LeadUnitEn,
  172. ChartStyle: edbInfoMapping.ChartStyle,
  173. ChartColor: edbInfoMapping.ChartColor,
  174. PredictChartColor: edbInfoMapping.PredictChartColor,
  175. ChartWidth: edbInfoMapping.ChartWidth,
  176. ChartType: edbInfoMapping.ChartType,
  177. LatestDate: v.LatestDate.Format(utils.FormatDateTime),
  178. LatestValue: v.LatestValue,
  179. UniqueCode: futureGoodEdbInfoMapping.UniqueCode + "1" + strconv.Itoa(k),
  180. MinValue: v.MinValue,
  181. MaxValue: v.MaxValue,
  182. DataList: nil,
  183. IsNullData: false,
  184. }
  185. futureGoodMappingList = append(futureGoodMappingList, newMappingInfo)
  186. barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, data_manage.BarChartInfoEdbItemReq{
  187. EdbInfoId: newMappingInfo.EdbInfoId,
  188. Name: fmt.Sprint("M+", v.Month),
  189. NameEn: fmt.Sprint("M+", v.Month),
  190. Source: newMappingInfo.Source,
  191. })
  192. }
  193. // 获取数据
  194. for _, v := range futureGoodMappingList {
  195. dataList := make([]*models.EdbDataList, 0)
  196. tmpDataList, tmpErr := efuture_good.GetFutureGoodEdbDataListByDate(v.EdbInfoId, startDate, endDate)
  197. if tmpErr != nil {
  198. return
  199. }
  200. for _, tmpData := range tmpDataList {
  201. dataList = append(dataList, &models.EdbDataList{
  202. EdbDataId: tmpData.FutureGoodEdbDataId,
  203. EdbInfoId: tmpData.FutureGoodEdbInfoId,
  204. DataTime: tmpData.DataTime.Format(utils.FormatDate),
  205. DataTimestamp: tmpData.DataTimestamp,
  206. Value: tmpData.Close,
  207. })
  208. }
  209. edbDataListMap[v.EdbInfoId] = dataList
  210. v.DataList = dataList
  211. }
  212. edbList = append(edbList, futureGoodMappingList...)
  213. xEdbIdValue, yDataList, err = BarChartData(edbList, edbDataListMap, barChartInfoDateList, barChartInfoSort)
  214. return
  215. }
  216. // BarChartData 柱方图的数据处理
  217. func BarChartData(mappingList []*models.ChartEdbInfoMapping, edbDataListMap map[int][]*models.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, barChartInfoSort data_manage.BarChartInfoSortReq) (edbIdList []int, yDataList []models.YData, err error) {
  218. // 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
  219. edbDataMap := make(map[int]map[string]float64)
  220. for edbInfoId, edbDataList := range edbDataListMap {
  221. edbDateData := make(map[string]float64)
  222. for _, edbData := range edbDataList {
  223. edbDateData[edbData.DataTime] = edbData.Value
  224. }
  225. edbDataMap[edbInfoId] = edbDateData
  226. }
  227. // edbIdList 指标展示顺序;x轴的指标顺序
  228. edbIdList = make([]int, 0)
  229. //Sort int `description:"排序类型,0:默认,1:升序,2:降序"`
  230. dateData := make(map[int]float64)
  231. if barChartInfoSort.Sort == 0 {
  232. for _, v := range mappingList {
  233. edbIdList = append(edbIdList, v.EdbInfoId)
  234. }
  235. } else {
  236. lenBarChartInfoDateList := len(barChartInfoDateList)
  237. if barChartInfoSort.DateIndex >= lenBarChartInfoDateList {
  238. err = errors.New("排序日期异常")
  239. return
  240. }
  241. notDataEdbIdList := make([]int, 0) //没有数据的指标id
  242. // 日期配置
  243. barChartInfoDate := barChartInfoDateList[barChartInfoSort.DateIndex]
  244. for edbInfoId, dataList := range edbDataListMap {
  245. if len(dataList) <= 0 {
  246. // 没有数据的指标id
  247. notDataEdbIdList = append(notDataEdbIdList, edbInfoId)
  248. continue
  249. }
  250. findDate := barChartInfoDate.Date
  251. switch barChartInfoDate.Type {
  252. case 1: //最新值
  253. findDate = dataList[len(dataList)-1].DataTime
  254. case 2: //近期几天
  255. findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[len(dataList)-1].DataTime, time.Local)
  256. if tmpErr != nil {
  257. err = tmpErr
  258. return
  259. }
  260. findDateTime = findDateTime.AddDate(0, 0, -barChartInfoDate.Value)
  261. lenData := len(dataList) - 1
  262. for i := lenData; i >= 0; i-- {
  263. currDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[i].DataTime, time.Local)
  264. if tmpErr != nil {
  265. err = tmpErr
  266. return
  267. }
  268. if currDateTime.Equal(findDateTime) || currDateTime.Before(findDateTime) {
  269. findDate = dataList[i].DataTime
  270. break
  271. }
  272. }
  273. case 3: // 固定日期
  274. //最早的日期
  275. minDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
  276. if tmpErr != nil {
  277. err = tmpErr
  278. return
  279. }
  280. //寻找固定日期的数据
  281. findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, barChartInfoDate.Date, time.Local)
  282. if tmpErr != nil {
  283. err = tmpErr
  284. return
  285. }
  286. for tmpDateTime := findDateTime; tmpDateTime.After(minDateTime) || tmpDateTime.Equal(minDateTime); tmpDateTime = tmpDateTime.AddDate(0, 0, -1) {
  287. tmpDate := tmpDateTime.Format(utils.FormatDate)
  288. if _, ok := edbDataMap[edbInfoId][tmpDate]; ok { //如果能找到数据,那么就返回
  289. findDate = tmpDate
  290. break
  291. }
  292. }
  293. default:
  294. err = errors.New(fmt.Sprint("日期类型异常,Type:", barChartInfoDate.Type))
  295. return
  296. }
  297. if tmpValue, ok := edbDataMap[edbInfoId][findDate]; ok {
  298. dateData[edbInfoId] = tmpValue
  299. } else {
  300. // 没有数据的指标id
  301. notDataEdbIdList = append(notDataEdbIdList, edbInfoId)
  302. }
  303. }
  304. //Sort int `description:"排序类型,0:默认,1:升序,2:降序"`
  305. // 排序
  306. dateDataSort := utils.NewMapSorter(dateData)
  307. sort.Sort(dateDataSort)
  308. if barChartInfoSort.Sort == 1 {
  309. // 先将没有数据的指标id放在最前面
  310. if len(notDataEdbIdList) > 0 {
  311. edbIdList = append(edbIdList, notDataEdbIdList...)
  312. }
  313. for _, v := range dateDataSort {
  314. edbIdList = append(edbIdList, v.Key)
  315. }
  316. } else {
  317. for i := len(dateDataSort) - 1; i >= 0; i-- {
  318. edbIdList = append(edbIdList, dateDataSort[i].Key)
  319. }
  320. // 再将没有数据的指标id放在最后面
  321. if len(notDataEdbIdList) > 0 {
  322. edbIdList = append(edbIdList, notDataEdbIdList...)
  323. }
  324. }
  325. }
  326. yDataList = make([]models.YData, 0) //y轴的数据列表
  327. for _, barChartInfoDate := range barChartInfoDateList {
  328. var maxDate time.Time
  329. findDataList := make([]float64, 0) // 当前日期的数据值
  330. noDataIdList := make([]int, 0) // 没有数据的指标id
  331. noDataIdMap := make(map[int]int, 0) // 没有数据的指标map
  332. for _, edbInfoId := range edbIdList {
  333. findDate := barChartInfoDate.Date //需要的日期值
  334. dataList := edbDataListMap[edbInfoId] //指标的所有数据值
  335. if len(dataList) <= 0 {
  336. // 没有数据的指标id
  337. findDataList = append(findDataList, 0)
  338. noDataIdList = append(noDataIdList, edbInfoId)
  339. noDataIdMap[edbInfoId] = edbInfoId
  340. continue
  341. }
  342. switch barChartInfoDate.Type {
  343. case 1: //最新值
  344. dataList := edbDataListMap[edbInfoId]
  345. findDate = dataList[len(dataList)-1].DataTime
  346. case 2: //近期几天
  347. findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[len(dataList)-1].DataTime, time.Local)
  348. if tmpErr != nil {
  349. err = tmpErr
  350. return
  351. }
  352. findDateTime = findDateTime.AddDate(0, 0, -barChartInfoDate.Value)
  353. lenData := len(dataList) - 1
  354. for i := lenData; i >= 0; i-- {
  355. currDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[i].DataTime, time.Local)
  356. if tmpErr != nil {
  357. err = tmpErr
  358. return
  359. }
  360. if currDateTime.Equal(findDateTime) || currDateTime.Before(findDateTime) {
  361. findDate = dataList[i].DataTime
  362. break
  363. }
  364. }
  365. case 3: // 固定日期
  366. //最早的日期
  367. minDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
  368. if tmpErr != nil {
  369. err = tmpErr
  370. return
  371. }
  372. //寻找固定日期的数据
  373. findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, barChartInfoDate.Date, time.Local)
  374. if tmpErr != nil {
  375. err = tmpErr
  376. return
  377. }
  378. for tmpDateTime := findDateTime; tmpDateTime.After(minDateTime) || tmpDateTime.Equal(minDateTime); tmpDateTime = tmpDateTime.AddDate(0, 0, -1) {
  379. tmpDate := tmpDateTime.Format(utils.FormatDate)
  380. if _, ok := edbDataMap[edbInfoId][tmpDate]; ok { //如果能找到数据,那么就返回
  381. findDate = tmpDate
  382. break
  383. }
  384. }
  385. default:
  386. err = errors.New(fmt.Sprint("日期类型异常,Type:", barChartInfoDate.Type))
  387. return
  388. }
  389. findDateTime, _ := time.ParseInLocation(utils.FormatDate, findDate, time.Local)
  390. if maxDate.IsZero() {
  391. maxDate = findDateTime
  392. } else {
  393. if findDateTime.After(maxDate) {
  394. maxDate = findDateTime
  395. }
  396. }
  397. if tmpValue, ok := edbDataMap[edbInfoId][findDate]; ok {
  398. findDataList = append(findDataList, tmpValue)
  399. } else {
  400. findDataList = append(findDataList, 0)
  401. noDataIdList = append(noDataIdList, edbInfoId)
  402. noDataIdMap[edbInfoId] = edbInfoId
  403. }
  404. }
  405. yName := barChartInfoDate.Name
  406. yNameEn := barChartInfoDate.Name
  407. if yName == `` {
  408. if barChartInfoDate.Type == 2 {
  409. yName = strconv.Itoa(barChartInfoDate.Value) + "天前"
  410. if barChartInfoDate.Value == 1 {
  411. yNameEn = strconv.Itoa(barChartInfoDate.Value) + "day ago"
  412. } else {
  413. yNameEn = strconv.Itoa(barChartInfoDate.Value) + " days ago"
  414. }
  415. } else {
  416. yName = maxDate.Format(utils.FormatDate)
  417. yNameEn = maxDate.Format(utils.FormatDate)
  418. }
  419. }
  420. yDate := "0000-00-00"
  421. if !maxDate.IsZero() {
  422. yDate = maxDate.Format(utils.FormatDate)
  423. }
  424. // 数据处理,将没有数据的下标,赋值平均值
  425. {
  426. hasDataIndexList := make([]int, 0)
  427. for dataK, edbInfoId := range edbIdList {
  428. if _, ok := noDataIdMap[edbInfoId]; !ok { // 如果是没有数据的指标id
  429. hasDataIndexList = append(hasDataIndexList, dataK)
  430. }
  431. }
  432. lenHasDataIndex := len(hasDataIndexList)
  433. if lenHasDataIndex > 0 {
  434. for lenHasDataI := 1; lenHasDataI < lenHasDataIndex; lenHasDataI++ {
  435. perK := hasDataIndexList[lenHasDataI-1] //上一个有数据的指标下标
  436. currK := hasDataIndexList[lenHasDataI] //当前有数据的指标下标
  437. preVal := findDataList[perK] //上一个有数据的坐标的值
  438. currVal := findDataList[currK] //当前有数据的指标的值
  439. // 环差值
  440. hcValDeci := decimal.NewFromFloat(currVal).Sub(decimal.NewFromFloat(preVal)).Div(decimal.NewFromInt(int64(currK - perK)))
  441. var tmpI int64
  442. // 将两个中间的数据做平均值补全
  443. for hcI := perK + 1; hcI < currK; hcI++ {
  444. tmpI++
  445. findDataList[hcI], _ = decimal.NewFromFloat(preVal).Add(hcValDeci.Mul(decimal.NewFromInt(tmpI))).RoundCeil(4).Float64()
  446. }
  447. }
  448. }
  449. }
  450. yDataList = append(yDataList, models.YData{
  451. Date: yDate,
  452. Value: findDataList,
  453. NoDataEdbList: noDataIdList,
  454. Color: barChartInfoDate.Color,
  455. Name: yName,
  456. NameEn: yNameEn,
  457. })
  458. }
  459. return
  460. }
  461. // FutureGoodChartInfoRefresh
  462. // @author Roc
  463. // @datetime 2023-2-2 18:44:46
  464. // @description 商品价格曲线图表刷新
  465. func FutureGoodChartInfoRefresh(chartInfoId int) (err error) {
  466. var errMsg string
  467. defer func() {
  468. if err != nil {
  469. go alarm_msg.SendAlarmMsg("ChartInfoRefresh:"+errMsg, 3)
  470. fmt.Println("ChartInfoRefresh Err:" + errMsg)
  471. }
  472. }()
  473. edbInfoMapping, err := models.GetEtaEdbChartEdbMapping(chartInfoId)
  474. if err != nil {
  475. errMsg = "获取需要刷新的ETA指标失败:Err:" + err.Error()
  476. return
  477. }
  478. // 获取期货指标
  479. futureGoodEdbInfoMapping, err := models.GetFutureGoodEdbChartEdbMapping(chartInfoId)
  480. if err != nil {
  481. errMsg = "获取需要刷新的商品期货指标失败:Err:" + err.Error()
  482. return
  483. }
  484. // 获取期货指标以及期货数据
  485. futureGoodEdbInfoList, err := efuture_good.GetFutureGoodEdbInfoListByParentId(futureGoodEdbInfoMapping.EdbInfoId)
  486. if err != nil {
  487. return
  488. }
  489. // 批量刷新ETA指标
  490. err, _ = data.EdbInfoRefreshAllFromBase([]int{edbInfoMapping.EdbInfoId}, false)
  491. if err != nil {
  492. return
  493. }
  494. // 批量刷新期货指标
  495. err = FutureGoodEdbInfoRefreshAllFromBase(futureGoodEdbInfoList, false)
  496. if err != nil {
  497. return
  498. }
  499. return
  500. }