base_from_zz.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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 BaseFromTradeZhengzhouIndex struct {
  11. BaseFromTradeZhengzhouIndexId int `orm:"column(base_from_trade_zhengzhou_index_id);pk"`
  12. Rank int
  13. DealShortName string
  14. DealName string
  15. DealCode string
  16. DealValue string
  17. DealChange int
  18. BuyShortName string
  19. BuyName string
  20. BuyCode string
  21. BuyValue string
  22. BuyChange int
  23. SoldShortName string
  24. SoldName string
  25. SoldCode string
  26. SoldValue string
  27. SoldChange int
  28. Frequency string
  29. ClassifyName string
  30. ClassifyType string
  31. CreateTime time.Time
  32. ModifyTime time.Time
  33. DataTime string
  34. }
  35. type BaseFromZzDataSimple struct {
  36. Id int `orm:"column(base_from_trade_zhengzhou_index_id);pk"`
  37. DealCode string
  38. BuyCode string
  39. SoldCode string
  40. DataTime string
  41. DealValue string
  42. BuyValue string
  43. SoldValue string
  44. }
  45. func GetBaseFromZhengzhouDataAllByIndexCode(indexCode, suffix string) (list []*BaseFromTradeZhengzhouIndex, err error) {
  46. o := orm.NewOrm()
  47. sql := `SELECT * FROM base_from_trade_zhengzhou_index WHERE %s_code=? `
  48. sql = fmt.Sprintf(sql, suffix)
  49. _, err = o.Raw(sql, indexCode).QueryRows(&list)
  50. return
  51. }
  52. func GetZzDataByTradeCode(condition string, pars []interface{}) (item []*BaseFromZzDataSimple, err error) {
  53. sql := ` SELECT * FROM base_from_trade_zhengzhou_index WHERE 1=1 `
  54. o := orm.NewOrm()
  55. if condition != "" {
  56. sql += condition
  57. }
  58. sql += ` ORDER BY data_time DESC `
  59. _, err = o.Raw(sql, pars).QueryRows(&item)
  60. return
  61. }
  62. //新增郑商所指标数据
  63. func AddEdbDataFromZz(edbCode string) (err error) {
  64. var suffix string
  65. if strings.Contains(edbCode, "deal") {
  66. suffix = "deal"
  67. } else if strings.Contains(edbCode, "buy") {
  68. suffix = "buy"
  69. } else if strings.Contains(edbCode, "sold") {
  70. suffix = "sold"
  71. }
  72. o := orm.NewOrm()
  73. zzBaseDataAll, err := GetBaseFromZhengzhouDataAllByIndexCode(edbCode, suffix)
  74. if err != nil && err.Error() != utils.ErrNoRow() {
  75. return
  76. }
  77. var isAdd bool
  78. addSql := ` INSERT INTO edb_data_zz(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  79. existMap := make(map[string]string)
  80. for _, sv := range zzBaseDataAll {
  81. eDate := sv.DataTime
  82. dataTime, err := time.Parse(utils.FormatDate, eDate)
  83. if err != nil {
  84. fmt.Println("time.Parse Err:" + eDate)
  85. return err
  86. }
  87. timestamp := dataTime.UnixNano() / 1e6
  88. timeStr := fmt.Sprintf("%d", timestamp)
  89. if _, ok := existMap[eDate]; !ok {
  90. if suffix == "deal" {
  91. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.DealValue)
  92. } else if suffix == "buy" {
  93. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.BuyValue)
  94. } else {
  95. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.SoldValue)
  96. }
  97. isAdd = true
  98. }
  99. if suffix == "deal" {
  100. existMap[eDate] = sv.DealValue
  101. } else if suffix == "buy" {
  102. existMap[eDate] = sv.BuyValue
  103. } else {
  104. existMap[eDate] = sv.SoldValue
  105. }
  106. }
  107. if isAdd {
  108. addSql = strings.TrimRight(addSql, ",")
  109. utils.FileLog.Info("addSql:" + addSql)
  110. _, err = o.Raw(addSql).Exec()
  111. if err != nil {
  112. return err
  113. }
  114. }
  115. return
  116. }
  117. //刷新郑商所指标数据
  118. func RefreshEdbDataFromZz(edbInfoId int, edbCode, startDate string) (err error) {
  119. source := utils.DATA_SOURCE_ZZ
  120. o := orm.NewOrm()
  121. if err != nil {
  122. return
  123. }
  124. var suffix string
  125. if strings.Contains(edbCode, "deal") {
  126. suffix = "deal"
  127. } else if strings.Contains(edbCode, "buy") {
  128. suffix = "buy"
  129. } else if strings.Contains(edbCode, "sold") {
  130. suffix = "sold"
  131. }
  132. edbInfoIdStr := strconv.Itoa(edbInfoId)
  133. //计算数据
  134. var condition string
  135. var pars []interface{}
  136. if edbCode != "" {
  137. if suffix == "deal" {
  138. condition += " AND deal_code=? "
  139. } else if suffix == "buy" {
  140. condition += " AND buy_code=? "
  141. } else {
  142. condition += " AND sold_code=? "
  143. }
  144. pars = append(pars, edbCode)
  145. }
  146. if startDate != "" {
  147. condition += " AND data_time>=? "
  148. pars = append(pars, startDate)
  149. }
  150. glDataList, err := GetZzDataByTradeCode(condition, pars)
  151. if err != nil {
  152. return err
  153. }
  154. //获取指标所有数据
  155. var existCondition string
  156. var existPars []interface{}
  157. existCondition += " AND edb_info_id=? "
  158. existPars = append(existPars, edbInfoId)
  159. if startDate != "" {
  160. existCondition += " AND data_time>=? "
  161. existPars = append(existPars, startDate)
  162. }
  163. existList, err := GetEdbDataByCondition(source, existCondition, existPars)
  164. if err != nil {
  165. return err
  166. }
  167. existMap := make(map[string]*EdbInfoSearchData)
  168. for _, v := range existList {
  169. existMap[v.DataTime] = v
  170. }
  171. addSql := ` INSERT INTO edb_data_zz(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  172. var isAdd bool
  173. for _, v := range glDataList {
  174. var value string
  175. if suffix == "deal" {
  176. value = v.DealValue
  177. } else if suffix == "buy" {
  178. value = v.BuyValue
  179. } else {
  180. value = v.SoldValue
  181. }
  182. item := v
  183. itemValue := value
  184. if _, ok := existMap[v.DataTime]; !ok {
  185. eDate := item.DataTime
  186. sValue := itemValue
  187. if sValue != "" {
  188. dataTime, err := time.Parse(utils.FormatDate, eDate)
  189. if err != nil {
  190. return err
  191. }
  192. timestamp := dataTime.UnixNano() / 1e6
  193. timeStr := fmt.Sprintf("%d", timestamp)
  194. saveValue := sValue
  195. if findItem, ok := existMap[eDate]; !ok {
  196. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue)
  197. isAdd = true
  198. } else {
  199. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != sValue {
  200. err = ModifyEdbDataById(source, findItem.EdbDataId, sValue)
  201. if err != nil {
  202. return err
  203. }
  204. }
  205. }
  206. }
  207. }
  208. }
  209. if isAdd {
  210. addSql = strings.TrimRight(addSql, ",")
  211. _, err = o.Raw(addSql).Exec()
  212. if err != nil {
  213. return err
  214. }
  215. }
  216. return
  217. }