query.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package edb_info
  2. import (
  3. "fmt"
  4. "hongze/hongze_yb/global"
  5. "hongze/hongze_yb/models/tables/edb_data"
  6. "hongze/hongze_yb/utils"
  7. "time"
  8. )
  9. // GetEdbInfoById 主键获取指标信息
  10. func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
  11. err = global.MYSQL["data"].Where("edb_info_id = ? ", edbInfoId).First(&item).Error
  12. return
  13. }
  14. // GetEdbInfoAllCalculateByEdbInfoIdList 根据指标id集合 获取基础指标对应的所有计算指标
  15. func GetEdbInfoAllCalculateByEdbInfoIdList(edbInfoIdList []int) (list []*EdbInfo, err error) {
  16. num := len(edbInfoIdList)
  17. if num <= 0 {
  18. return
  19. }
  20. sql := ` SELECT b.* FROM edb_info_calculate_mapping AS a
  21. INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
  22. WHERE a.from_edb_info_id IN (?)
  23. GROUP BY a.edb_info_id
  24. ORDER BY a.edb_info_id ASC `
  25. err = global.MYSQL["data"].Raw(sql, edbInfoIdList).Scan(&list).Error
  26. return
  27. }
  28. // GetEdbInfoByIdList 根据指标id集合 获取 指标列表
  29. func GetEdbInfoByIdList(edbInfoIdList []int) (items []*EdbInfo, err error) {
  30. num := len(edbInfoIdList)
  31. if num <= 0 {
  32. return
  33. }
  34. sql := ` SELECT * FROM edb_info WHERE edb_info_id IN (?) `
  35. err = global.MYSQL["data"].Raw(sql, edbInfoIdList).Scan(&items).Error
  36. return
  37. }
  38. // GetRefreshEdbInfoFromBase 查询基础指标
  39. func GetRefreshEdbInfoFromBase(edbInfoId, source int) (baseEdbInfoArr, calculateInfoArr []*EdbInfo, err error) {
  40. calculateList, err := GetEdbInfoCalculateMap(edbInfoId)
  41. if err != nil && err != utils.ErrNoRow {
  42. return
  43. }
  44. for _, item := range calculateList {
  45. if item.EdbInfoId == edbInfoId { // 如果查出来关联的指标就是自己的话,那么就过滤
  46. continue
  47. }
  48. if item.EdbType == 1 {
  49. baseEdbInfoArr = append(baseEdbInfoArr, item)
  50. } else {
  51. calculateInfoArr = append(calculateInfoArr, item)
  52. newBaseEdbInfoArr, newCalculateInfoArr, _ := GetRefreshEdbInfoFromBase(item.EdbInfoId, item.Source)
  53. baseEdbInfoArr = append(baseEdbInfoArr, newBaseEdbInfoArr...)
  54. calculateInfoArr = append(calculateInfoArr, newCalculateInfoArr...)
  55. }
  56. }
  57. return
  58. }
  59. // GetEdbInfoCalculateMap 获取计算指标关联信息
  60. func GetEdbInfoCalculateMap(edbInfoId int) (list []*EdbInfo, err error) {
  61. sql := ` SELECT b.* FROM edb_info_calculate_mapping AS a
  62. INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
  63. WHERE a.edb_info_id=? ORDER BY sort ASC `
  64. err = global.MYSQL["data"].Raw(sql, edbInfoId).Scan(&list).Error
  65. return
  66. }
  67. // GetPredictEdbInfoAllCalculate 根据基础预测指标id集合 获取 所有的普通指标列表数据
  68. func GetPredictEdbInfoAllCalculate(edbInfoIdList []int) (list []*EdbInfo, err error) {
  69. num := len(edbInfoIdList)
  70. if num <= 0 {
  71. return
  72. }
  73. sql := ` SELECT b.* FROM predict_edb_conf AS a
  74. INNER JOIN edb_info AS b ON a.source_edb_info_id=b.edb_info_id
  75. WHERE a.predict_edb_info_id IN (?)
  76. GROUP BY a.source_edb_info_id
  77. ORDER BY a.source_edb_info_id ASC `
  78. err = global.MYSQL["data"].Raw(sql, edbInfoIdList).Scan(&list).Error
  79. return
  80. }
  81. type EdbInfoSearchData struct {
  82. DataTime string `description:"数据日期"`
  83. Value float64 `description:"数据"`
  84. }
  85. // GetEdbDataListAll order:1升序,其余值为降序
  86. func GetEdbDataListAll(condition string, pars []interface{}, source, order int) (items []*EdbInfoSearchData, err error) {
  87. items = make([]*EdbInfoSearchData, 0)
  88. sql := ``
  89. tableName := edb_data.GetEdbDataTableName(source)
  90. sql = ` SELECT * FROM %s WHERE 1=1 `
  91. sql = fmt.Sprintf(sql, tableName)
  92. if condition != "" {
  93. sql += condition
  94. }
  95. if order == 1 {
  96. sql += ` ORDER BY data_time ASC `
  97. } else {
  98. sql += ` ORDER BY data_time DESC `
  99. }
  100. type EdbInfoSearchDataOriginTime struct {
  101. DataTime time.Time `description:"数据日期"`
  102. Value float64 `description:"数据"`
  103. }
  104. queryList := make([]*EdbInfoSearchDataOriginTime, 0)
  105. err = global.MYSQL["data"].Raw(sql, pars...).Scan(&queryList).Error
  106. for i := range queryList {
  107. items = append(items, &EdbInfoSearchData{
  108. DataTime: queryList[i].DataTime.Format(utils.FormatDate),
  109. Value: queryList[i].Value,
  110. })
  111. }
  112. return
  113. }