trade_position_analysis_guangzhou.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package data_manage
  2. import (
  3. "eta_gn/eta_task/global"
  4. "eta_gn/eta_task/utils"
  5. "time"
  6. )
  7. func MultiInsertTradeGuangzhouDataToTop(exchange string, startDate, endDate string) (err error) {
  8. // o := orm.NewOrm()
  9. // now := time.Now().Format(utils.FormatDateTime)
  10. //
  11. // //新增买单榜单
  12. // sql1 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  13. //SELECT
  14. // n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,1,0,0,?,?
  15. //FROM
  16. // base_from_trade_guangzhou_data a
  17. // LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  18. // LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  19. //WHERE
  20. // a.data_time between ? and ?
  21. // and c.base_from_trade_guangzhou_classify_id in (7,8)
  22. // and c.index_name like '%持买单量%'
  23. // and c.index_name not like '%日成交持仓排名%'`
  24. // _, err = o.Raw(sql1, now, now, startDate, endDate).Exec()
  25. // if err != nil {
  26. // return
  27. // }
  28. // //新增卖单榜单
  29. // sql2 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  30. //SELECT
  31. // n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,2,0,0,?,?
  32. //FROM
  33. // base_from_trade_guangzhou_data a
  34. // LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  35. // LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  36. //WHERE
  37. // a.data_time between ? and ?
  38. // and c.base_from_trade_guangzhou_classify_id in (7,8)
  39. // and c.index_name like '%持卖单量%'
  40. // and c.index_name not like '%日成交持仓排名%'`
  41. // _, err = o.Raw(sql2, now, now, startDate, endDate).Exec()
  42. // if err != nil {
  43. // return
  44. // }
  45. // //更新买单、卖单榜单排名字段
  46. // sql3 := `update trade_position_guangzhou_top s
  47. //JOIN (
  48. //SELECT
  49. // classify_type,
  50. // deal_short_name,
  51. // data_time,
  52. // deal_type,
  53. // (@row_number := IF(@prev_year = CONCAT_WS( '_', data_time, deal_type, classify_type), @row_number + 1, 1) ) AS row_number,
  54. // @prev_year := CONCAT_WS( '_', data_time, deal_type, classify_type)
  55. //FROM
  56. // trade_position_guangzhou_top,(SELECT @row_number := 0, @prev_year := NULL) r
  57. // where data_time between ? and ?
  58. //ORDER BY
  59. // data_time asc,
  60. // deal_type asc,
  61. // classify_type asc,
  62. // deal_value DESC
  63. // ) t
  64. // ON s.classify_type = t.classify_type AND s.deal_short_name = t.deal_short_name
  65. // AND s.data_time = t.data_time AND s.deal_type = t.deal_type
  66. //SET s.rank = t.row_number where s.data_time between ? and ?;`
  67. //
  68. // _, err = o.Raw(sql3, startDate, endDate, startDate, endDate).Exec()
  69. //o := orm.NewOrm()
  70. now := time.Now().Format(utils.FormatDateTime)
  71. //新增买单榜单
  72. sql1 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  73. SELECT
  74. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,1,0,0,?,?
  75. FROM
  76. base_from_trade_guangzhou_data a
  77. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  78. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  79. WHERE
  80. a.data_time between ? and ?
  81. and c.base_from_trade_guangzhou_classify_id in (7,8)
  82. and c.index_name like '%持买单量%'
  83. and c.index_name not like '%日成交持仓排名%'`
  84. err = global.DEFAULT_DmSQL.Exec(sql1, now, now, startDate, endDate).Error
  85. if err != nil {
  86. return
  87. }
  88. //新增卖单榜单
  89. sql2 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  90. SELECT
  91. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,2,0,0,?,?
  92. FROM
  93. base_from_trade_guangzhou_data a
  94. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  95. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  96. WHERE
  97. a.data_time between ? and ?
  98. and c.base_from_trade_guangzhou_classify_id in (7,8)
  99. and c.index_name like '%持卖单量%'
  100. and c.index_name not like '%日成交持仓排名%'`
  101. err = global.DEFAULT_DmSQL.Exec(sql2, now, now, startDate, endDate).Error
  102. if err != nil {
  103. return
  104. }
  105. //更新买单、卖单榜单排名字段
  106. sql3 := `update trade_position_guangzhou_top s
  107. JOIN (
  108. SELECT
  109. classify_type,
  110. deal_short_name,
  111. data_time,
  112. deal_type,
  113. (@row_number := IF(@prev_year = CONCAT_WS( '_', data_time, deal_type, classify_type), @row_number + 1, 1) ) AS row_number,
  114. @prev_year := CONCAT_WS( '_', data_time, deal_type, classify_type)
  115. FROM
  116. trade_position_guangzhou_top,(SELECT @row_number := 0, @prev_year := NULL) r
  117. where data_time between ? and ?
  118. ORDER BY
  119. data_time asc,
  120. deal_type asc,
  121. classify_type asc,
  122. deal_value DESC
  123. ) t
  124. ON s.classify_type = t.classify_type AND s.deal_short_name = t.deal_short_name
  125. AND s.data_time = t.data_time AND s.deal_type = t.deal_type
  126. SET s.rank = t.row_number where s.data_time between ? and ?;`
  127. err = global.DEFAULT_DmSQL.Exec(sql3, startDate, endDate, startDate, endDate).Error
  128. return
  129. }
  130. // GetTradePositionTopOriginGuangzhouDataTimes 获取榜单原始数据日期-正序
  131. func GetTradePositionTopOriginGuangzhouDataTimes(exchange string) (dates []string, err error) {
  132. // o := orm.NewOrm()
  133. // sql := `SELECT
  134. // DISTINCT a.data_time
  135. //FROM
  136. // base_from_trade_guangzhou_data a
  137. // LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  138. //WHERE
  139. // c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  140. // AND ( c.index_name LIKE '%持买单量%' OR c.index_name LIKE '%持卖单量%' )
  141. // AND c.index_name NOT LIKE '%日成交持仓排名%'
  142. //ORDER BY
  143. // a.data_time asc`
  144. // _, err = o.Raw(sql).QueryRows(&dates)
  145. sql := `SELECT
  146. DISTINCT a.data_time
  147. FROM
  148. base_from_trade_guangzhou_data a
  149. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  150. WHERE
  151. c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  152. AND ( c.index_name LIKE '%持买单量%' OR c.index_name LIKE '%持卖单量%' )
  153. AND c.index_name NOT LIKE '%日成交持仓排名%'
  154. ORDER BY
  155. a.data_time asc`
  156. err = global.DEFAULT_DmSQL.Raw(sql).Find(&dates).Error
  157. return
  158. }
  159. func GetTradePositionOriginGuangzhouClassifyCountByExchangeDataTime(exchange string, startDate, endDate string) (count int64, err error) {
  160. // o := orm.NewOrm()
  161. // sql := `SELECT
  162. // count(DISTINCT n.classify_code, n.contract )
  163. //FROM
  164. // base_from_trade_guangzhou_data a
  165. // LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  166. // LEFT JOIN base_from_trade_guangzhou_contract n ON c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  167. //WHERE
  168. // a.data_time between ? and ?
  169. // AND c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  170. // AND ( c.index_name LIKE '%持买单量%' OR c.index_name LIKE '%持卖单量%' )
  171. // AND c.index_name NOT LIKE '%日成交持仓排名%'
  172. //ORDER BY
  173. // a.value DESC`
  174. // err = o.Raw(sql, startDate, endDate).QueryRow(&count)
  175. sql := `SELECT
  176. count(DISTINCT n.classify_code, n.contract )
  177. FROM
  178. base_from_trade_guangzhou_data a
  179. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  180. LEFT JOIN base_from_trade_guangzhou_contract n ON c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  181. WHERE
  182. a.data_time between ? and ?
  183. AND c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  184. AND ( c.index_name LIKE '%持买单量%' OR c.index_name LIKE '%持卖单量%' )
  185. AND c.index_name NOT LIKE '%日成交持仓排名%'
  186. ORDER BY
  187. a.value DESC`
  188. err = global.DEFAULT_DmSQL.Raw(sql, startDate, endDate).Scan(&count).Error
  189. return
  190. }
  191. func GetFirstBaseFromTradeGuangzhouIndexByDate(exchange string) (item *GetFirstBaseFromTradeIndeDate, err error) {
  192. // o := orm.NewOrm()
  193. // sql := `SELECT
  194. // a.data_time
  195. //FROM
  196. // base_from_trade_guangzhou_data a
  197. // LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  198. //WHERE
  199. // c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  200. // AND ( c.index_name LIKE '%持买单量%' OR c.index_name LIKE '%持卖单量%' )
  201. // AND c.index_name NOT LIKE '%日成交持仓排名%'
  202. //ORDER BY
  203. // a.data_time asc`
  204. // err = o.Raw(sql).QueryRow(&item)
  205. sql := `SELECT
  206. a.data_time
  207. FROM
  208. base_from_trade_guangzhou_data a
  209. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  210. WHERE
  211. c.base_from_trade_guangzhou_classify_id IN ( 7, 8 )
  212. AND ( c.index_name LIKE '%持买单量%' OR c.index_name LIKE '%持卖单量%' )
  213. AND c.index_name NOT LIKE '%日成交持仓排名%'
  214. ORDER BY
  215. a.data_time asc`
  216. err = global.DEFAULT_DmSQL.Raw(sql).First(&item).Error
  217. return
  218. }
  219. func GetTradePositionOriginClassifyGuangzhouByExchangeDataTime(exchange, startDate, endDate string) (list []TradePositionClassifyInfo, err error) {
  220. //o := orm.NewOrm()
  221. //sql := `SELECT DISTINCT classify_code as classify_name, contract as classify_type FROM base_from_trade_guangzhou_contract where trade_date >= ? and trade_date <= ?`
  222. //_, err = o.Raw(sql, startDate, endDate).QueryRows(&list)
  223. sql := `SELECT DISTINCT classify_code as classify_name, contract as classify_type FROM base_from_trade_guangzhou_contract where trade_date >= ? and trade_date <= ?`
  224. err = global.DEFAULT_DmSQL.Raw(sql, startDate, endDate).Find(&list).Error
  225. return
  226. }
  227. func MultiInsertTradeBaseDataToTopGuangzhouByClassify(exchange string, startDate, endDate string, classifyNames, classifyTypes []string) (err error) {
  228. // o := orm.NewOrm()
  229. // now := time.Now().Format(utils.FormatDateTime)
  230. //
  231. // //新增买单榜单
  232. // sql1 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  233. //SELECT
  234. // n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,1,0,0,?,?
  235. //FROM
  236. // base_from_trade_guangzhou_data a
  237. // LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  238. // LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  239. //WHERE
  240. // a.data_time between ? and ?
  241. // and c.base_from_trade_guangzhou_classify_id in (7,8)
  242. // and n.classify_code in (` + utils.GetOrmInReplace(len(classifyNames)) + `) and n.contract in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  243. // and c.index_name like '%持买单量%'
  244. // and c.index_name not like '%日成交持仓排名%'`
  245. // _, err = o.Raw(sql1, now, now, startDate, endDate, classifyNames, classifyTypes).Exec()
  246. // if err != nil {
  247. // return
  248. // }
  249. // //新增卖单榜单
  250. // sql2 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  251. //SELECT
  252. // n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,2,0,0,?,?
  253. //FROM
  254. // base_from_trade_guangzhou_data a
  255. // LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  256. // LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  257. //WHERE
  258. // a.data_time between ? and ?
  259. // and c.base_from_trade_guangzhou_classify_id in (7,8)
  260. // and n.classify_code in (` + utils.GetOrmInReplace(len(classifyNames)) + `) and n.contract in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  261. // and c.index_name like '%持卖单量%'
  262. // and c.index_name not like '%日成交持仓排名%'`
  263. // _, err = o.Raw(sql2, now, now, startDate, endDate, classifyNames, classifyTypes).Exec()
  264. // if err != nil {
  265. // return
  266. // }
  267. // //更新买单、卖单榜单排名字段
  268. // sql3 := `update trade_position_guangzhou_top s
  269. //JOIN (
  270. //SELECT
  271. // classify_type,
  272. // deal_short_name,
  273. // data_time,
  274. // deal_type,
  275. // (@row_number := IF(@prev_year = CONCAT_WS( '_', data_time, deal_type, classify_type), @row_number + 1, 1) ) AS row_number,
  276. // @prev_year := CONCAT_WS( '_', data_time, deal_type, classify_type)
  277. //FROM
  278. // trade_position_guangzhou_top,(SELECT @row_number := 0, @prev_year := NULL) r
  279. // where data_time between ? and ? and classify_type in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  280. //ORDER BY
  281. // data_time asc,
  282. // deal_type asc,
  283. // classify_type asc,
  284. // deal_value DESC
  285. // ) t
  286. // ON s.classify_type = t.classify_type AND s.deal_short_name = t.deal_short_name
  287. // AND s.data_time = t.data_time AND s.deal_type = t.deal_type
  288. //SET s.rank = t.row_number where s.data_time between ? and ? and s.classify_type in (` + utils.GetOrmInReplace(len(classifyTypes)) + `);`
  289. //
  290. // _, err = o.Raw(sql3, startDate, endDate, classifyTypes, startDate, endDate, classifyTypes).Exec()
  291. now := time.Now().Format(utils.FormatDateTime)
  292. //新增买单榜单
  293. sql1 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  294. SELECT
  295. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,1,0,0,?,?
  296. FROM
  297. base_from_trade_guangzhou_data a
  298. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  299. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  300. WHERE
  301. a.data_time between ? and ?
  302. and c.base_from_trade_guangzhou_classify_id in (7,8)
  303. and n.classify_code in (` + utils.GetOrmInReplace(len(classifyNames)) + `) and n.contract in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  304. and c.index_name like '%持买单量%'
  305. and c.index_name not like '%日成交持仓排名%'`
  306. err = global.DEFAULT_DmSQL.Exec(sql1, now, now, startDate, endDate, classifyNames, classifyTypes).Error
  307. if err != nil {
  308. return
  309. }
  310. //新增卖单榜单
  311. sql2 := `INSERT INTO trade_position_guangzhou_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)
  312. SELECT
  313. n.classify_code,n.contract,SUBSTRING_INDEX(c.index_name, '_', 1) AS index_name,a.value,a.qty_sub,a.data_time,2,0,0,?,?
  314. FROM
  315. base_from_trade_guangzhou_data a
  316. LEFT JOIN base_from_trade_guangzhou_index c ON a.base_from_trade_guangzhou_index_id = c.base_from_trade_guangzhou_index_id
  317. LEFT JOIN base_from_trade_guangzhou_contract n on c.base_from_trade_guangzhou_contract_id = n.base_from_trade_guangzhou_contract_id
  318. WHERE
  319. a.data_time between ? and ?
  320. and c.base_from_trade_guangzhou_classify_id in (7,8)
  321. and n.classify_code in (` + utils.GetOrmInReplace(len(classifyNames)) + `) and n.contract in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  322. and c.index_name like '%持卖单量%'
  323. and c.index_name not like '%日成交持仓排名%'`
  324. err = global.DEFAULT_DmSQL.Exec(sql2, now, now, startDate, endDate, classifyNames, classifyTypes).Error
  325. if err != nil {
  326. return
  327. }
  328. //更新买单、卖单榜单排名字段
  329. sql3 := `update trade_position_guangzhou_top s
  330. JOIN (
  331. SELECT
  332. classify_type,
  333. deal_short_name,
  334. data_time,
  335. deal_type,
  336. (@row_number := IF(@prev_year = CONCAT_WS( '_', data_time, deal_type, classify_type), @row_number + 1, 1) ) AS row_number,
  337. @prev_year := CONCAT_WS( '_', data_time, deal_type, classify_type)
  338. FROM
  339. trade_position_guangzhou_top,(SELECT @row_number := 0, @prev_year := NULL) r
  340. where data_time between ? and ? and classify_type in (` + utils.GetOrmInReplace(len(classifyTypes)) + `)
  341. ORDER BY
  342. data_time asc,
  343. deal_type asc,
  344. classify_type asc,
  345. deal_value DESC
  346. ) t
  347. ON s.classify_type = t.classify_type AND s.deal_short_name = t.deal_short_name
  348. AND s.data_time = t.data_time AND s.deal_type = t.deal_type
  349. SET s.rank = t.row_number where s.data_time between ? and ? and s.classify_type in (` + utils.GetOrmInReplace(len(classifyTypes)) + `);`
  350. err = global.DEFAULT_DmSQL.Exec(sql3, startDate, endDate, classifyTypes, startDate, endDate, classifyTypes).Error
  351. return
  352. }