query.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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.EdbType == 1 {
  46. baseEdbInfoArr = append(baseEdbInfoArr, item)
  47. } else {
  48. calculateInfoArr = append(calculateInfoArr, item)
  49. newBaseEdbInfoArr, newCalculateInfoArr, _ := GetRefreshEdbInfoFromBase(item.EdbInfoId, item.Source)
  50. baseEdbInfoArr = append(baseEdbInfoArr, newBaseEdbInfoArr...)
  51. calculateInfoArr = append(calculateInfoArr, newCalculateInfoArr...)
  52. }
  53. }
  54. return
  55. }
  56. // GetEdbInfoCalculateMap 获取计算指标关联信息
  57. func GetEdbInfoCalculateMap(edbInfoId int) (list []*EdbInfo, err error) {
  58. sql := ` SELECT b.* FROM edb_info_calculate_mapping AS a
  59. INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
  60. WHERE a.edb_info_id=? ORDER BY sort ASC `
  61. err = global.MYSQL["data"].Raw(sql, edbInfoId).Scan(&list).Error
  62. return
  63. }
  64. // GetPredictEdbInfoAllCalculate 根据基础预测指标id集合 获取 所有的普通指标列表数据
  65. func GetPredictEdbInfoAllCalculate(edbInfoIdList []int) (list []*EdbInfo, err error) {
  66. num := len(edbInfoIdList)
  67. if num <= 0 {
  68. return
  69. }
  70. sql := ` SELECT b.* FROM predict_edb_conf AS a
  71. INNER JOIN edb_info AS b ON a.source_edb_info_id=b.edb_info_id
  72. WHERE a.predict_edb_info_id IN (?)
  73. GROUP BY a.source_edb_info_id
  74. ORDER BY a.source_edb_info_id ASC `
  75. err = global.MYSQL["data"].Raw(sql, edbInfoIdList).Scan(&list).Error
  76. return
  77. }
  78. type EdbInfoSearchData struct {
  79. DataTime string `description:"数据日期"`
  80. Value float64 `description:"数据"`
  81. }
  82. // GetEdbDataListAll order:1升序,其余值为降序
  83. func GetEdbDataListAll(condition string, pars []interface{}, source, order int) (items []*EdbInfoSearchData, err error) {
  84. items = make([]*EdbInfoSearchData, 0)
  85. sql := ``
  86. tableName := edb_data.GetEdbDataTableName(source)
  87. sql = ` SELECT * FROM %s WHERE 1=1 `
  88. sql = fmt.Sprintf(sql, tableName)
  89. if condition != "" {
  90. sql += condition
  91. }
  92. if order == 1 {
  93. sql += ` ORDER BY data_time ASC `
  94. } else {
  95. sql += ` ORDER BY data_time DESC `
  96. }
  97. type EdbInfoSearchDataOriginTime struct {
  98. DataTime time.Time `description:"数据日期"`
  99. Value float64 `description:"数据"`
  100. }
  101. queryList := make([]*EdbInfoSearchDataOriginTime, 0)
  102. err = global.MYSQL["data"].Raw(sql, pars...).Scan(&queryList).Error
  103. for i := range queryList {
  104. items = append(items, &EdbInfoSearchData{
  105. DataTime: queryList[i].DataTime.Format(utils.FormatDate),
  106. Value: queryList[i].Value,
  107. })
  108. }
  109. return
  110. }