edb_data_lz.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package data_manage
  2. import (
  3. "fmt"
  4. "hongze/hongze_task/utils"
  5. "rdluck_tools/orm"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. type lzSurveyData struct {
  11. DataTime string `orm:"column(data_time)" description:"日期"`
  12. InputValue string `orm:"column(input_value)" description:"值"`
  13. }
  14. func GetLzSurveyDataByTradeCode(condition string, pars []interface{}) (item []*lzSurveyData, err error) {
  15. sql := ` SELECT a.* FROM longzhong_survey_data AS a
  16. INNER JOIN longzhong_survey_product AS b ON a.survey_product_id=b.survey_product_id
  17. WHERE 1=1 `
  18. o := orm.NewOrm()
  19. o.Using("edb")
  20. if condition != "" {
  21. sql += condition
  22. }
  23. sql += ` ORDER BY a.data_time DESC `
  24. _, err = o.Raw(sql, pars).QueryRows(&item)
  25. return
  26. }
  27. func GetEdbDataLzByCodeAndDate(edbCode string, startDate string) (count int, err error) {
  28. o := orm.NewOrm()
  29. o.Using("data")
  30. sql := ` SELECT COUNT(1) AS count FROM edb_data_lz WHERE edb_code=? AND data_time=? `
  31. err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
  32. return
  33. }
  34. func ModifyEdbDataLz(edbInfoId int64, dataTime, value string) (err error) {
  35. o := orm.NewOrm()
  36. o.Using("data")
  37. sql := ` UPDATE edb_data_lz SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
  38. _, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
  39. return
  40. }
  41. //刷新隆众指标数据
  42. func RefreshEdbDataByLz(edbInfoId int, edbCode, startDate, endDate string) (err error) {
  43. o := orm.NewOrm()
  44. o.Using("data")
  45. o.Begin()
  46. defer func() {
  47. if err != nil {
  48. o.Rollback()
  49. } else {
  50. o.Commit()
  51. }
  52. }()
  53. if err != nil {
  54. return
  55. }
  56. edbInfoIdStr := strconv.Itoa(edbInfoId)
  57. //计算数据
  58. var condition string
  59. var pars []interface{}
  60. if edbCode != "" {
  61. condition += " AND b.lz_code=? "
  62. pars = append(pars, edbCode)
  63. }
  64. if startDate != "" {
  65. condition += " AND a.data_time>=? "
  66. pars = append(pars, startDate)
  67. }
  68. if endDate != "" {
  69. condition += " AND a.data_time<=? "
  70. pars = append(pars, endDate)
  71. }
  72. lzDataList, err := GetLzSurveyDataByTradeCode(condition, pars)
  73. addSql := ` INSERT INTO edb_data_lz(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  74. var isAdd bool
  75. for _, v := range lzDataList {
  76. item := v
  77. count, err := GetEdbDataLzByCodeAndDate(edbCode, v.DataTime)
  78. if err != nil && err.Error() != utils.ErrNoRow() {
  79. return err
  80. }
  81. if count <= 0 {
  82. nowStr := time.Now().Format(utils.FormatDateTime)
  83. eDate := item.DataTime
  84. sValue := item.InputValue
  85. dataTime, err := time.Parse(utils.FormatDate, eDate)
  86. if err != nil {
  87. return err
  88. }
  89. timestamp := dataTime.UnixNano() / 1e6
  90. timeStr := fmt.Sprintf("%d", timestamp)
  91. addSql += "("
  92. addSql += edbInfoIdStr + "," + "'" + edbCode + "'" + "," + "'" + eDate + "'" + "," + sValue + "," + "'" + nowStr + "'" +
  93. "," + "'" + nowStr + "'" + "," + "1" + "," + "'" + timeStr + "'"
  94. addSql += "),"
  95. isAdd = true
  96. } else {
  97. err = ModifyEdbDataLz(int64(edbInfoId), v.DataTime, v.InputValue)
  98. if err != nil {
  99. return err
  100. }
  101. }
  102. }
  103. if isAdd {
  104. addSql = strings.TrimRight(addSql, ",")
  105. _, err = o.Raw(addSql).Exec()
  106. if err != nil {
  107. return err
  108. }
  109. }
  110. maxAndMinItem, err := GetEdbInfoMaxAndMinInfo(utils.DATA_SOURCE_LZ, edbCode)
  111. if err != nil {
  112. return err
  113. }
  114. if maxAndMinItem != nil {
  115. err = ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  116. if err != nil {
  117. return err
  118. }
  119. }
  120. return
  121. }