edb_data_quarter.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package data_manage
  2. import (
  3. "fmt"
  4. "hongze/hongze_task/utils"
  5. "rdluck_tools/orm"
  6. "sort"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. func GetEdbDataQuarterCount(edbInfoId int) (count int, err error) {
  12. o := orm.NewOrm()
  13. o.Using("data")
  14. hsql := `SELECT COUNT(1) AS count FROM edb_data_quarter WHERE edb_info_id=? `
  15. err = o.Raw(hsql, edbInfoId).QueryRow(&count)
  16. return
  17. }
  18. //指标季度数据计算
  19. func RefreshCalculateQuarter(edbInfoId, source int, edbCode string) (err error) {
  20. o := orm.NewOrm()
  21. o.Using("data")
  22. o.Begin()
  23. defer func() {
  24. if err != nil {
  25. fmt.Println("Err:", err)
  26. o.Rollback()
  27. } else {
  28. o.Commit()
  29. }
  30. }()
  31. edbInfoIdStr := strconv.Itoa(edbInfoId)
  32. startDate := time.Now().AddDate(-2, -2, 0).Format(utils.FormatDate)
  33. //计算数据
  34. var condition string
  35. var pars []interface{}
  36. condition += " AND edb_info_id=? "
  37. pars = append(pars, edbInfoId)
  38. condition += " AND data_time>=? "
  39. pars = append(pars, startDate)
  40. dataList, err := GetEdbDataListAll(condition, pars, source, 0)
  41. if err != nil {
  42. return err
  43. }
  44. //计算数据
  45. var existCondition string
  46. var existPars []interface{}
  47. existCondition += " AND edb_info_id=? "
  48. existPars = append(existPars, edbInfoId)
  49. existCondition += " AND data_time>=? "
  50. existPars = append(existPars, startDate)
  51. existDataList, err := GetEdbDataListAll(existCondition, existPars, utils.DATA_SOURCE_QUARTER, 0)
  52. if err != nil {
  53. return err
  54. }
  55. existMap := make(map[string]float64)
  56. for _, v := range existDataList {
  57. existMap[v.DataTime] = v.Value
  58. }
  59. var yearArr []int
  60. yearMap := make(map[int]int)
  61. dataMap := make(map[string]*EdbInfoSearchData)
  62. for _, v := range dataList {
  63. //日其中获取年
  64. itemDate, err := time.Parse(utils.FormatDate, v.DataTime)
  65. if err != nil {
  66. return err
  67. }
  68. year := itemDate.Year()
  69. if _, ok := yearMap[year]; !ok {
  70. yearArr = append(yearArr, year)
  71. yearMap[year] = year
  72. }
  73. dataMap[v.DataTime] = v
  74. }
  75. sort.Sort(sort.Reverse(sort.IntSlice(yearArr)))
  76. addSql := ` INSERT INTO edb_data_quarter(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  77. var isAdd bool
  78. yearLen := len(yearArr)
  79. fmt.Println(yearArr)
  80. for yk, yv := range yearArr {
  81. currentYear := yv
  82. hsql := `SELECT * FROM holiday WHERE year=? `
  83. currentHolidayObj := new(Holiday)
  84. err = o.Raw(hsql, currentYear).QueryRow(&currentHolidayObj)
  85. if err != nil {
  86. return err
  87. }
  88. nextIndex := yk + 1
  89. if nextIndex < yearLen {
  90. nextYear := yearArr[nextIndex]
  91. fmt.Println("year:", currentYear, nextYear)
  92. nextHolidayObj := new(Holiday)
  93. hsql := `SELECT * FROM holiday WHERE year=? `
  94. err = o.Raw(hsql, nextYear).QueryRow(&nextHolidayObj)
  95. if err != nil {
  96. return err
  97. }
  98. nextHolidayStr := nextHolidayObj.HolidayDate.Format(utils.FormatDate)
  99. currentHolidayStr := currentHolidayObj.HolidayDate.Format(utils.FormatDate)
  100. if findItem, ok := dataMap[nextHolidayStr]; ok {
  101. timestamp := currentHolidayObj.HolidayDate.UnixNano() / 1e6
  102. timestampStr := fmt.Sprintf("%d", timestamp)
  103. if _, ok := existMap[currentHolidayStr]; !ok {
  104. addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
  105. isAdd = true
  106. }
  107. }
  108. nextMinDate := strconv.Itoa(nextYear) + "-01-01"
  109. nextMaxDate := strconv.Itoa(nextYear) + "-12-31"
  110. currentMinDate := strconv.Itoa(currentYear) + "-01-01"
  111. currentMaxDate := strconv.Itoa(currentYear) + "-12-31"
  112. i := 0
  113. for {
  114. i--
  115. nextHolidayFormat := nextHolidayObj.HolidayDate.AddDate(0, 0, i)
  116. currentHolidayFormat := currentHolidayObj.HolidayDate.AddDate(0, 0, i)
  117. nextHolidayStr := nextHolidayFormat.Format(utils.FormatDate)
  118. currentHolidayStr := currentHolidayFormat.Format(utils.FormatDate)
  119. fmt.Println("currentHolidayStr:", currentHolidayStr, nextHolidayStr)
  120. if findItem, ok := dataMap[nextHolidayStr]; ok {
  121. timestamp := currentHolidayFormat.UnixNano() / 1e6
  122. timestampStr := fmt.Sprintf("%d", timestamp)
  123. if _, ok := existMap[currentHolidayStr]; !ok {
  124. addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
  125. isAdd = true
  126. }
  127. }
  128. //fmt.Println("nextHolidayStr:", nextHolidayStr,nextMinDate)
  129. if nextHolidayStr == nextMinDate || currentHolidayStr == currentMinDate {
  130. fmt.Println("min跳出循环:" + nextMinDate)
  131. break
  132. }
  133. }
  134. n := 0
  135. for {
  136. n++
  137. nextHolidayFormat := nextHolidayObj.HolidayDate.AddDate(0, 0, n)
  138. currentHolidayFormat := currentHolidayObj.HolidayDate.AddDate(0, 0, n)
  139. nextHolidayStr := nextHolidayFormat.Format(utils.FormatDate)
  140. currentHolidayStr := currentHolidayFormat.Format(utils.FormatDate)
  141. fmt.Println("currentHolidayStr:", currentHolidayStr, nextHolidayStr)
  142. if findItem, ok := dataMap[nextHolidayStr]; ok {
  143. timestamp := currentHolidayFormat.UnixNano() / 1e6
  144. timestampStr := fmt.Sprintf("%d", timestamp)
  145. if _, ok := existMap[currentHolidayStr]; !ok {
  146. addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
  147. isAdd = true
  148. }
  149. }
  150. //fmt.Println("nextHolidayStr:", nextHolidayStr,nextMaxDate)
  151. if nextHolidayStr == nextMaxDate || currentHolidayStr == currentMaxDate {
  152. fmt.Println("max跳出循环:" + nextMaxDate)
  153. break
  154. }
  155. }
  156. }
  157. }
  158. fmt.Println("isAdd", isAdd)
  159. if isAdd {
  160. addSql = strings.TrimRight(addSql, ",")
  161. utils.FileLog.Info(addSql)
  162. _, err = o.Raw(addSql).Exec()
  163. fmt.Println("err:", err)
  164. if err != nil {
  165. return err
  166. }
  167. }
  168. return
  169. }