base_from_coal.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package models
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "hongze/hongze_edb_lib/utils"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. type BaseFromCoalmineIndex struct {
  11. BaseFromCoalmineCompanyIndexId int
  12. IndexName string `description:"持买单量指标名称"`
  13. IndexCode string `description:"持买单量指标编码"`
  14. DealValue string `description:"成交量"`
  15. DataTime string `description:"数据日期"`
  16. Source string `description:"来源"`
  17. Province string `description:"省份"`
  18. City string `description:"城市"`
  19. GroupName string `description:"集团名称"`
  20. Unit string `description:"单位"`
  21. Frequency string `description:"频率"`
  22. CreateTime string `description:"插入时间"`
  23. ModifyTime string `description:"修改时间"`
  24. }
  25. func GetBaseFromCoalIndexByCode(suffix, indexCode string) (items []*BaseFromCoalmineIndex, err error) {
  26. o := orm.NewOrm()
  27. sql := `SELECT * FROM base_from_coalmine_%s WHERE index_code=? `
  28. sql = fmt.Sprintf(sql, suffix)
  29. _, err = o.Raw(sql, indexCode).QueryRows(&items)
  30. return
  31. }
  32. func GetCoalDataByTradeCode(suffix, condition string, pars []interface{}) (item []*BaseFromCoalmineIndex, err error) {
  33. sql := ` SELECT * FROM base_from_trade_%s WHERE 1=1 `
  34. sql = fmt.Sprintf(sql, suffix)
  35. o := orm.NewOrm()
  36. if condition != "" {
  37. sql += condition
  38. }
  39. sql += ` ORDER BY data_time DESC `
  40. _, err = o.Raw(sql, pars).QueryRows(&item)
  41. return
  42. }
  43. func AddEdbDataFromCoal(edbCode string) (err error) {
  44. var suffix string
  45. if strings.Contains(edbCode, "jsm") {
  46. suffix = "jsm_index"
  47. } else if strings.Contains(edbCode, "company") {
  48. suffix = "company_index"
  49. } else if strings.Contains(edbCode, "firm") {
  50. suffix = "firm_index"
  51. } else if strings.Contains(edbCode, "coastal") {
  52. suffix = "coastal_index"
  53. } else if strings.Contains(edbCode, "inland") {
  54. suffix = "inland_index"
  55. }
  56. o := orm.NewOrm()
  57. coalBaseDataAll, err := GetBaseFromCoalIndexByCode(suffix, edbCode)
  58. if err != nil && err.Error() != utils.ErrNoRow() {
  59. return
  60. }
  61. var isAdd bool
  62. addSql := ` INSERT INTO edb_data_coal(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  63. existMap := make(map[string]string)
  64. for _, sv := range coalBaseDataAll {
  65. eDate := sv.DataTime
  66. dataTime, err := time.Parse(utils.FormatDate, eDate)
  67. if err != nil {
  68. fmt.Println("time.Parse Err:" + eDate)
  69. return err
  70. }
  71. timestamp := dataTime.UnixNano() / 1e6
  72. timeStr := fmt.Sprintf("%d", timestamp)
  73. if _, ok := existMap[eDate]; !ok {
  74. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.DealValue)
  75. isAdd = true
  76. }
  77. existMap[eDate] = sv.DealValue
  78. }
  79. if isAdd {
  80. addSql = strings.TrimRight(addSql, ",")
  81. utils.FileLog.Info("addSql:" + addSql)
  82. _, err = o.Raw(addSql).Exec()
  83. if err != nil {
  84. return err
  85. }
  86. }
  87. return
  88. }
  89. func RefreshEdbDataFromCoal(edbInfoId int, edbCode, startDate string) (err error) {
  90. source := utils.DATA_SOURCE_YS
  91. o := orm.NewOrm()
  92. if err != nil {
  93. return
  94. }
  95. var suffix string
  96. if strings.Contains(edbCode, "jsm") {
  97. suffix = "jsm_index"
  98. } else if strings.Contains(edbCode, "company") {
  99. suffix = "company_index"
  100. } else if strings.Contains(edbCode, "firm") {
  101. suffix = "firm_index"
  102. } else if strings.Contains(edbCode, "coastal") {
  103. suffix = "coastal_index"
  104. } else if strings.Contains(edbCode, "inland") {
  105. suffix = "inland_index"
  106. }
  107. edbInfoIdStr := strconv.Itoa(edbInfoId)
  108. //计算数据
  109. var condition string
  110. var pars []interface{}
  111. if edbCode != "" {
  112. pars = append(pars, edbCode)
  113. }
  114. if startDate != "" {
  115. condition += " AND data_time>=? "
  116. pars = append(pars, startDate)
  117. }
  118. glDataList, err := GetCoalDataByTradeCode(suffix, condition, pars)
  119. //获取指标所有数据
  120. var existCondition string
  121. var existPars []interface{}
  122. existCondition += " AND edb_info_id=? "
  123. existPars = append(existPars, edbInfoId)
  124. if startDate != "" {
  125. existCondition += " AND data_time>=? "
  126. existPars = append(existPars, startDate)
  127. }
  128. existList, err := GetEdbDataByCondition(source, existCondition, existPars)
  129. if err != nil {
  130. return err
  131. }
  132. existMap := make(map[string]*EdbInfoSearchData)
  133. for _, v := range existList {
  134. existMap[v.DataTime] = v
  135. }
  136. addSql := ` INSERT INTO edb_data_coal(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  137. var isAdd bool
  138. for _, v := range glDataList {
  139. var value string
  140. value = v.DealValue
  141. item := v
  142. itemValue := value
  143. if _, ok := existMap[v.DataTime]; !ok {
  144. eDate := item.DataTime
  145. sValue := itemValue
  146. if sValue != "" {
  147. dataTime, err := time.Parse(utils.FormatDate, eDate)
  148. if err != nil {
  149. return err
  150. }
  151. timestamp := dataTime.UnixNano() / 1e6
  152. timeStr := fmt.Sprintf("%d", timestamp)
  153. saveValue := sValue
  154. if findItem, ok := existMap[eDate]; !ok {
  155. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue)
  156. isAdd = true
  157. } else {
  158. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != sValue {
  159. err = ModifyEdbDataById(source, findItem.EdbDataId, sValue)
  160. if err != nil {
  161. return err
  162. }
  163. }
  164. }
  165. }
  166. }
  167. }
  168. if isAdd {
  169. addSql = strings.TrimRight(addSql, ",")
  170. _, err = o.Raw(addSql).Exec()
  171. if err != nil {
  172. return err
  173. }
  174. }
  175. return
  176. }