table_day_k.class.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  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. var_dump($fq_price);
  194. if($fq_price==1){//前复权
  195. $sql = " select * from ". $this->table_fullname ." where 1=1 ";
  196. $where =" and day_k_code=".$stock_code." and day_k_date <=".$start_date ;
  197. $sql.=$where;
  198. $orderInfo=" ORDER BY day_k_date desc";
  199. $sql.=$orderInfo;
  200. $limit=" limit ".$traceback_days;
  201. $sql.=$limit;
  202. $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 ";
  203. if($order_info==1){
  204. $sql= $sql. " ORDER BY a.day_k_date desc ";
  205. }else{
  206. $sql= $sql. " ORDER BY a.day_k_date asc";
  207. }
  208. $rs = $this->pdo->sqlQuery($sql);
  209. $r = array();
  210. if($rs){
  211. foreach($rs as $key => $val){
  212. $r[$key] = $this->dataToAttr2($val);
  213. }
  214. return $r;
  215. }else{
  216. return $r;
  217. }
  218. }
  219. else if($fq_price==0)
  220. {//不复权
  221. //查询语句必须用sql_check_input检查参数
  222. $stock_code = $this->pdo->sql_check_input(array('string', $code));
  223. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  224. $where =" and day_k_code=".$stock_code." and day_k_date <=".$start_date ;
  225. $sql.=$where;
  226. $orderInfo=" ORDER BY day_k_date desc";
  227. $sql.=$orderInfo;
  228. $limit=" limit ".$traceback_days;
  229. $sql.=$limit;
  230. if($order_info==1){
  231. $sql= " SELECT a.* FROM "."($sql) a ORDER BY a.day_k_date desc ";
  232. }else{
  233. $sql= " SELECT a.* FROM "."($sql) a ORDER BY a.day_k_date asc";
  234. }
  235. var_dump($sql);
  236. $rs = $this->pdo->sqlQuery($sql);
  237. $r = array();
  238. if($rs){
  239. foreach($rs as $key => $val){
  240. $r[$key] = $this->dataToAttr($val);
  241. }
  242. return $r;
  243. }else{
  244. return $r;
  245. }
  246. }
  247. //var_dump($sql);
  248. }
  249. /***
  250. * @param $code
  251. * @param $start_date
  252. * @param $end_date
  253. * @return array
  254. *
  255. */
  256. public function get_day_k_info($code,$start_date,$end_date,$order_info,$fq_price)
  257. {
  258. //查询语句必须用sql_check_input检查参数
  259. $stock_code = $this->pdo->sql_check_input(array('string', $code));//类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  260. $start_date= $this->pdo->sql_check_input(array('number', $start_date));
  261. $end_date = $this->pdo->sql_check_input(array('number', $end_date));
  262. $fq_price = $this->pdo->sql_check_input(array('number', $fq_price));
  263. if($fq_price==1){//复权
  264. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  265. $where =" and day_k_code=".$stock_code ." and day_k_date>= ".$start_date." and day_k_date<= ".$end_date ;
  266. $sql.=$where;
  267. $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";
  268. if($order_info==1)
  269. {
  270. $order=" order by day_k_date desc";
  271. }
  272. else
  273. {
  274. $order=" order by day_k_date asc";
  275. }
  276. $sql.=$order;
  277. $rs = $this->pdo->sqlQuery($sql);
  278. $r = array();
  279. if($rs){
  280. foreach($rs as $key => $val){
  281. $r[$key] = $this->dataToAttr2($val);
  282. }
  283. return $r;
  284. }else{
  285. return $r;
  286. }
  287. }
  288. else if($fq_price==0)
  289. {
  290. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  291. $where =" and day_k_code=".$stock_code ." and day_k_date>= ".$start_date." and day_k_date<= ".$end_date ;
  292. $sql.=$where;
  293. if($order_info==1)
  294. {
  295. $order=" order by day_k_date desc";
  296. }
  297. else
  298. {
  299. $order=" order by day_k_date asc";
  300. }
  301. $sql.=$order;
  302. $rs = $this->pdo->sqlQuery($sql);
  303. $r = array();
  304. if($rs){
  305. foreach($rs as $key => $val){
  306. $r[$key] = $this->dataToAttr($val);
  307. }
  308. return $r;
  309. }else{
  310. return $r;
  311. }
  312. }
  313. }
  314. /****
  315. * @param $code
  316. * @param $date
  317. * @return array|mixed
  318. * 获取股票的某天和当天的数据
  319. * 当获取某天的数据不存在,返回空,当天的数据不存在,返回最近一个交易日的信息
  320. */
  321. public function get_current_day_k($code,$date)
  322. {
  323. //查询语句必须用sql_check_input检查参数
  324. $stock_code = $this->pdo->sql_check_input(array('string', $code));//类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  325. $sql = "select * from ". $this->table_fullname ." where 1=1 ";
  326. $where =" and day_k_code=".$stock_code ;
  327. if($date==0){//获取的是当天的数据
  328. // $date = (int)(strtotime(date("Y-m-d",time())));
  329. $date=date("Ymd",time());
  330. $where.=" and day_k_date <= ".$date;
  331. }else{//获取某一天的数据
  332. $date = $this->pdo->sql_check_input(array('number', $date));
  333. $where.=" and day_k_date =".$date;
  334. }
  335. $sql.=$where;
  336. $order=" order by day_k_date desc limit 1 ";
  337. $sql.=$order;
  338. $rs = $this->pdo->sqlQuery($sql);
  339. $r = array();
  340. if($rs){
  341. foreach($rs as $key => $val){
  342. $r[$key] = $this->dataToAttr($val);
  343. }
  344. return $r[0];
  345. }else{
  346. return $r;
  347. }
  348. }
  349. }
  350. ?>