table_day_k.class.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 王刚涛
  5. * Date: 2020/11/24
  6. * Time: 14:51
  7. */
  8. class Table_day_k extends Table {
  9. protected $base = ""; //分表的后缀日期,在进行数据库操作的时候"Table_day_k_".$base
  10. protected $table_name = "day_k";//表名,不带前缀,前缀在config中定义
  11. protected $table_id = "day_k_id";//指定ID字段名称,必须
  12. protected $table_status = '';//指定状态字段名称,如果有
  13. protected $table_order = '';//指定排序字段名称,如果有
  14. //数据库结构
  15. protected function struct(){
  16. $attr = array();
  17. $attr['id'] = 'day_k_id';
  18. $attr['timestamp'] = 'day_k_timestamp';
  19. $attr['date'] = 'day_k_date';
  20. $attr['code'] = 'day_k_code';
  21. $attr['name'] = 'day_k_name';
  22. $attr['open_price'] = 'day_k_open_price';
  23. $attr['close_price'] = 'day_k_close_price';
  24. $attr['highest_price'] = 'day_k_highest_price';
  25. $attr['lowest_price'] = 'day_k_lowest_price';
  26. $attr['increase_price'] = 'day_k_increase_price';
  27. $attr['increase_ratio'] = 'day_k_increase_ratio';
  28. $attr['turnover'] = 'day_k_turnover';
  29. $attr['amount'] = 'day_k_amount';
  30. $attr['value'] = 'day_k_value';
  31. $attr['m5'] = 'day_k_m5';
  32. $attr['m10'] = 'day_k_m10';
  33. $attr['m20'] = 'day_k_m20';
  34. $attr['m30'] = 'day_k_m30';
  35. $attr['m60'] = 'day_k_m60';
  36. $attr['m233'] = 'day_k_m233';
  37. $attr['tradable_amount'] = 'day_k_tradable_amount';
  38. $attr['tradable_value'] = 'day_k_tradable_value';
  39. $attr['total_amount'] = 'day_k_total_amount';
  40. $attr['total_value'] = 'day_k_total_amount';
  41. $attr['profitable'] = 'day_k_profitable';
  42. $attr['pb'] = 'day_k_pb';
  43. $attr['pe_static'] = 'day_k_pe_static';
  44. $attr['pe_dynamic'] = 'day_k_pe_dynamic';
  45. $attr['pe_ttm'] = 'day_k_pe_ttm';
  46. return $attr;
  47. }
  48. //用于连表查询之后的结(前复权表和日k表)
  49. protected function struct1(){
  50. $attr = array();
  51. $attr['id'] = 'day_k_id';
  52. $attr['timestamp'] = 'day_k_timestamp';
  53. $attr['date'] = 'day_k_date';
  54. $attr['code'] = 'day_k_code';
  55. $attr['name'] = 'day_k_name';
  56. $attr['open_price'] = 'day_k_open_price';
  57. $attr['close_price'] = 'day_k_close_price';
  58. $attr['highest_price'] = 'day_k_highest_price';
  59. $attr['lowest_price'] = 'day_k_lowest_price';
  60. $attr['increase_price'] = 'day_k_increase_price';
  61. $attr['increase_ratio'] = 'day_k_increase_ratio';
  62. $attr['turnover'] = 'day_k_turnover';
  63. $attr['amount'] = 'day_k_amount';
  64. $attr['value'] = 'day_k_value';
  65. $attr['m5'] = 'day_k_m5';
  66. $attr['m10'] = 'day_k_m10';
  67. $attr['m20'] = 'day_k_m20';
  68. $attr['m30'] = 'day_k_m30';
  69. $attr['m60'] = 'day_k_m60';
  70. $attr['m233'] = 'day_k_m233';
  71. $attr['tradable_amount'] = 'day_k_tradable_amount';
  72. $attr['tradable_value'] = 'day_k_tradable_value';
  73. $attr['total_amount'] = 'day_k_total_amount';
  74. $attr['total_value'] = 'day_k_total_amount';
  75. $attr['profitable'] = 'day_k_profitable';
  76. $attr['pb'] = 'day_k_pb';
  77. $attr['pe_static'] = 'day_k_pe_static';
  78. $attr['pe_dynamic'] = 'day_k_pe_dynamic';
  79. $attr['pe_ttm'] = 'day_k_pe_ttm';
  80. //前复权表
  81. $attr['qfq_id'] = 'day_k_qfq_id';
  82. $attr['qfq_timestamp'] = 'day_k_qfq_timestamp';
  83. $attr['qfq_date'] = 'day_k_qfq_date';
  84. $attr['qfq_code'] = 'day_k_qfq_code';
  85. $attr['qfq_name'] = 'day_k_qfq_name';
  86. $attr['qfq_open_price'] = 'day_k_qfq_open_price';
  87. $attr['qfq_close_price'] = 'day_k_qfq_close_price';
  88. $attr['qfq_highest_price'] = 'day_k_qfq_highest_price';
  89. $attr['qfq_lowest_price'] = 'day_k_qfq_lowest_price';
  90. $attr['qfq_turnover'] = 'day_k_qfq_turnover';
  91. $attr['qfq_amount'] = 'day_k_qfq_amount';
  92. return $attr;
  93. }
  94. //从数据库取出的数据转化键值后输出
  95. protected function dataToAttr2($data){
  96. $r = array();
  97. foreach($this->struct1() as $k => $v){
  98. $r[$k] = $data[$v];
  99. }
  100. return $r;
  101. }
  102. /****
  103. * @param $attr
  104. * @return mixed
  105. * 王刚涛
  106. */
  107. public function add($attr){
  108. $param = array (
  109. 'day_k_timestamp ' => array('number', $attr['timestamp']),
  110. 'day_k_date' => array('number', $attr['date']),
  111. 'day_k_code' => array('string', $attr['code']),
  112. 'day_k_name' => array('string', $attr['name']),
  113. 'day_k_open_price' => array('number', $attr['open_price']),
  114. 'day_k_close_price' => array('number', $attr['close_price']),
  115. 'day_k_highest_price' => array('number', $attr['highest_price']),
  116. 'day_k_lowest_price' => array('number', $attr['lowest_price']),
  117. 'day_k_amount' => array('number', $attr['amount']),
  118. 'day_k_value' => array('number', $attr['value']),
  119. 'day_k_increase_price' => array('number', $attr['increase_price']),// 涨跌价
  120. 'day_k_increase_ratio' => array('number', $attr['increase_ratio']),// 涨跌幅
  121. 'day_k_turnover' => array('number', $attr['turnover']),// 换手率
  122. 'day_k_pe_ttm' => array('number', $attr['pe_ttm']),
  123. 'day_k_tradable_value' => array('number', $attr['tradable_value']),
  124. 'day_k_total_value' => array('number', $attr['total_value']),
  125. 'day_k_pb' => array('number', $attr['pb']),
  126. 'day_k_pe_dynamic' => array('number', $attr['pe_dynamic']),
  127. 'day_k_pe_static' => array('number', $attr['pe_static']),
  128. );
  129. return $this->pdo->sqlinsert($this->table_fullname, $param);
  130. }
  131. /****
  132. * @param $attr
  133. * @return mixed
  134. *插入当天的数据
  135. */
  136. public function insert($attr){
  137. $param = array (
  138. 'day_k_date' => array('number', strtotime($attr['date'])),
  139. 'day_k_code' => array('number', $attr['code']),
  140. 'day_k_name' => array('string', $attr['name']),
  141. 'day_k_open_price' => array('number', $attr['open_price']),
  142. 'day_k_highest_price' => array('number', $attr['highest_price']),
  143. 'day_k_lowest_price' => array('number', $attr['lowest_price']),
  144. 'day_k_value' => array('number', $attr['value']),
  145. 'day_k_amount' => array('number', $attr['amount']),
  146. 'day_k_close_price' => array('number', $attr['close_price']),
  147. 'day_k_close_price_qfq' => array('number', $attr['close_price_qfq']),
  148. 'day_k_increase_price' => array('number', $attr['increase_price']),
  149. 'day_k_increase_value' => array('number', $attr['increase_value']),
  150. 'day_k_turnover' => array('number', $attr['turnover']),
  151. );
  152. $msg=$this->pdo->sqlinsert($this->table_fullname, $param);
  153. return $msg;
  154. }
  155. /***
  156. * @param $attr
  157. * @return mixed
  158. * day_k的历史数据
  159. */
  160. public function HistoryDayK($attr){
  161. $param = array (
  162. 'day_k_timestamp ' => array('number', $attr['timestamp']),
  163. 'day_k_date' => array('number', $attr['date']),
  164. 'day_k_code' => array('string', $attr['code']),
  165. 'day_k_name' => array('string', $attr['name']),
  166. 'day_k_open_price' => array('number', $attr['open_price']),
  167. 'day_k_highest_price' => array('number', $attr['highest_price']),
  168. 'day_k_lowest_price' => array('number', $attr['lowest_price']),
  169. 'day_k_close_price' => array('number', $attr['close_price']),
  170. 'day_k_value' => array('number', $attr['value']),
  171. 'day_k_amount' => array('number', $attr['amount']),
  172. 'day_k_increase_price' => array('number', $attr['increase_price']),
  173. 'day_k_increase_ratio' => array('number', $attr['increase_ratio']),
  174. );
  175. $msg=$this->pdo->sqlinsert($this->table_fullname, $param);
  176. return $msg;
  177. }
  178. /****
  179. * @param $code
  180. * @param $start_date
  181. * @param $traceback_days
  182. * @param $order
  183. * @return array
  184. * wanggangtao
  185. * 获取最近n天的数据
  186. */
  187. public function stock_recent_days($code,$start_date,$traceback_days,$order_info,$fq_price)
  188. {
  189. $stock_code = $this->pdo->sql_check_input(array('string', $code));//类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  190. $start_date= $this->pdo->sql_check_input(array('number', $start_date));
  191. $traceback_days = $this->pdo->sql_check_input(array('number', $traceback_days));
  192. $fq_price = $this->pdo->sql_check_input(array('number', $fq_price));
  193. if($fq_price==1){//前复权
  194. $sql = " select * from ". $this->table_fullname ." where 1=1 ";
  195. $where =" and day_k_code=".$stock_code." and day_k_date <=".$start_date ;
  196. $sql.=$where;
  197. $orderInfo=" ORDER BY day_k_date desc";
  198. $sql.=$orderInfo;
  199. $limit=" limit ".$traceback_days;
  200. $sql.=$limit;
  201. $sql=" select* from(".$sql.")a left join boniu_day_k_qfq b on a.day_k_code=b.day_k_qfq_code and b.day_k_qfq_date=a.day_k_date ";
  202. if($order_info==1){
  203. $sql= $sql. " ORDER BY a.day_k_date desc ";
  204. }else{
  205. $sql= $sql. " ORDER BY a.day_k_date asc";
  206. }
  207. $rs = $this->pdo->sqlQuery($sql);
  208. $r = array();
  209. if($rs){
  210. foreach($rs as $key => $val){
  211. $r[$key] = $this->dataToAttr2($val);
  212. }
  213. return $r;
  214. }else{
  215. return $r;
  216. }
  217. }
  218. else if($fq_price==0)
  219. {//不复权
  220. //查询语句必须用sql_check_input检查参数
  221. $stock_code = $this->pdo->sql_check_input(array('string', $code));
  222. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  223. $where =" and day_k_code=".$stock_code." and day_k_date <=".$start_date ;
  224. $sql.=$where;
  225. $orderInfo=" ORDER BY day_k_date desc";
  226. $sql.=$orderInfo;
  227. $limit=" limit ".$traceback_days;
  228. $sql.=$limit;
  229. if($order_info==1){
  230. $sql= " SELECT a.* FROM "."($sql) a ORDER BY a.day_k_date desc ";
  231. }else{
  232. $sql= " SELECT a.* FROM "."($sql) a ORDER BY a.day_k_date asc";
  233. }
  234. $rs = $this->pdo->sqlQuery($sql);
  235. $r = array();
  236. if($rs){
  237. foreach($rs as $key => $val){
  238. $r[$key] = $this->dataToAttr($val);
  239. }
  240. return $r;
  241. }else{
  242. return $r;
  243. }
  244. }
  245. //var_dump($sql);
  246. }
  247. /***
  248. * @param $code
  249. * @param $start_date
  250. * @param $end_date
  251. * @return array
  252. *
  253. */
  254. public function get_day_k_info($code,$start_date,$end_date,$order_info,$fq_price)
  255. {
  256. //查询语句必须用sql_check_input检查参数
  257. $stock_code = $this->pdo->sql_check_input(array('string', $code));//类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  258. $start_date= $this->pdo->sql_check_input(array('number', $start_date));
  259. $end_date = $this->pdo->sql_check_input(array('number', $end_date));
  260. $fq_price = $this->pdo->sql_check_input(array('number', $fq_price));
  261. if($fq_price==1){//复权
  262. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  263. $where =" and day_k_code=".$stock_code ." and day_k_date>= ".$start_date." and day_k_date<= ".$end_date ;
  264. $sql.=$where;
  265. $sql="select* from(".$sql.")a left join boniu_day_k_qfq b on a.day_k_code=b.day_k_qfq_code and b.day_k_qfq_date=a.day_k_date";
  266. if($order_info==1)
  267. {
  268. $order=" order by day_k_date desc";
  269. }
  270. else
  271. {
  272. $order=" order by day_k_date asc";
  273. }
  274. $sql.=$order;
  275. $rs = $this->pdo->sqlQuery($sql);
  276. $r = array();
  277. if($rs){
  278. foreach($rs as $key => $val){
  279. $r[$key] = $this->dataToAttr2($val);
  280. }
  281. return $r;
  282. }else{
  283. return $r;
  284. }
  285. }
  286. else if($fq_price==0)
  287. {
  288. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  289. $where =" and day_k_code=".$stock_code ." and day_k_date>= ".$start_date." and day_k_date<= ".$end_date ;
  290. $sql.=$where;
  291. if($order_info==1)
  292. {
  293. $order=" order by day_k_date desc";
  294. }
  295. else
  296. {
  297. $order=" order by day_k_date asc";
  298. }
  299. $sql.=$order;
  300. $rs = $this->pdo->sqlQuery($sql);
  301. $r = array();
  302. if($rs){
  303. foreach($rs as $key => $val){
  304. $r[$key] = $this->dataToAttr($val);
  305. }
  306. return $r;
  307. }else{
  308. return $r;
  309. }
  310. }
  311. }
  312. /****
  313. * @param $code
  314. * @param $date
  315. * @return array|mixed
  316. * 获取股票的某天和当天的数据
  317. * 当获取某天的数据不存在,返回空,当天的数据不存在,返回最近一个交易日的信息
  318. */
  319. public function get_current_day_k($code,$date)
  320. {
  321. //查询语句必须用sql_check_input检查参数
  322. $stock_code = $this->pdo->sql_check_input(array('string', $code));//类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  323. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  324. $where =" and day_k_code=".$stock_code ;
  325. if($date==0){//获取的是当天的数据
  326. // $date = (int)(strtotime(date("Y-m-d",time())));
  327. $date=date("Ymd",time());
  328. $where.=" and day_k_date <= ".$date;
  329. }else{//获取某一天的数据
  330. $date = $this->pdo->sql_check_input(array('number', $date));
  331. $where.=" and day_k_date =".$date;
  332. }
  333. $sql.=$where;
  334. $order=" order by day_k_date desc limit 1 ";
  335. $sql.=$order;
  336. $rs = $this->pdo->sqlQuery($sql);
  337. $r = array();
  338. if($rs){
  339. foreach($rs as $key => $val){
  340. $r[$key] = $this->dataToAttr($val);
  341. }
  342. return $r[0];
  343. }else{
  344. return $r;
  345. }
  346. }
  347. }
  348. ?>