Files
echart/inc/getData.inc.php
T
simonandClaude Code 7e57cae242 refactor: 全面代码重构与项目结构整理
安全性:
- 所有SQL查询改用参数化查询(db_query),防止SQL注入
- TUSHARE_API_TOKEN集中到config.php常量,移除硬编码和多份拷贝
- getBasic.inc.php中$_REQUEST输出到JS时添加htmlspecialchars转义

代码组织:
- 21个页面文件移至charts/子目录,根目录仅保留入口文件
- ajax.inc.php拆分:esfTradeDaily/esfListDaily迁至getEstate.inc.php
- getBasic.inc.php拆分:HTML组件函数迁至新建的widgets.inc.php
- 前端依赖去重:移除lib/echarts.min.js、libai/3.4.16.js、research/js/3.4.16.js

规范化:
- AJAX响应格式统一为jsonResponse()标准封装
- 前端全局变量统一为window.chartConfig对象模式
- 修复PHP 8.4 Deprecated警告(getEstateData、getStockHistoryDataByTS参数顺序)
- html/head.php中jQuery/CSS路径改为绝对路径,修复charts/子目录加载问题

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-05-26 08:20:33 +08:00

252 lines
7.5 KiB
PHP

<?php
include_once __DIR__."/config.php";
/*
上证指数:000001.SH
深证成指:399001.SZ
中小板指: 399005.SZ
创业板指:399006.SZ
*/
function getIndexData($ts_code,$day_st,$day_end){
$mysqli = get_mysqli_connection();
$sql = "select trade_date, close from index_hist_pro where ts_code = ? and trade_date >= ?";
$params = [$ts_code, $day_st];
if($day_end) {
$sql .= " and trade_date <= ?";
$params[] = $day_end;
}
$sql .= " order by trade_date asc";
$result = db_query($mysqli, $sql, $params);
$tDate=$idx=$data=array();
if($result && $result->num_rows>0) {
#$data = $result->fetch_all();
while($row=$result->fetch_assoc()){
$trade_date=substr($row['trade_date'],0,4).'-'.substr($row['trade_date'],4,2).'-'.substr($row['trade_date'],6,2);
$trade_date1=strtotime($row['trade_date']);
array_push($tDate,$trade_date);
array_push($idx,$row['close']);
array_push($data,array("value"=>array($trade_date,round($row['close'],2))));
}
}
#Free result and close connection.
$result->free();
$mysqli->close();
return array('tDate'=>$tDate,'idx'=>$idx,'data'=>$data);
}
/*
#LX: 序号 1-6,分别代表基金,QFII, 社保,券商,保险,信托
#share: vposition 市值 f10, sahreHDnum 股数 f9
*/
function getIhData($lx,$share,$day_st,$day_end){
$mysqli = get_mysqli_connection();
if($share=='ShareHDNum' ) $shareSel="sum(f9)/100000000"; //持股数
elseif($share=='vPosition') $shareSel="sum(f10)/100000000"; //持股额
elseif($share=='VSRatio') $shareSel='f10/f9'; //每股价格
$sql = "select ih_date,$shareSel as ttl from ih_by_ts_code_ext where tp = ? and ih_date >= ?";
$params = [$lx, $day_st];
if($day_end) {
$sql .= " and ih_date <= ?";
$params[] = $day_end;
}
$sql .= " group by ih_date order by ih_date";
$result = db_query($mysqli, $sql, $params);
//echo $sql;
$tDate=$idx=$data=array();
if($result && $result->num_rows>0) {
#$data = $result->fetch_all();
while($row=$result->fetch_assoc()){
array_push($tDate,$row['ih_date']);
array_push($idx,$row['ttl']);
array_push($data,array("value"=>array($row['ih_date'],$row['ttl'])));
}
}
#Free result and close connection.
$result->free();
$mysqli->close();
return array('tDate'=>$tDate,'idx'=>$idx,'data'=>$data);
}
function lxDefine($lx){
switch($lx){
case 1: return "公募基金";
case 2: return "QFII";
case 3: return "社保基金";
case 4: return "券商持仓";
case 5: return "保险持仓";
case 6: return "信托持仓";
}
}
/*
上证指数:000001.SH
深证成指:399001.SZ
中小板指: 399005.SZ
创业板指:399006.SZ
*/
function codetocode($code){
switch($code){
case 'sh':
return '000001.SH';
case 'sz':
return '399001.SZ';
case 'zx':
return '399005.SZ';
case 'cy':
return '399006.SZ';
case 'all':
return '000002.SH';
}
}
/**
* @param $code
* @return string|void
*/
function codeToName($code){
switch($code){
case 'sh':
return '上证';
case 'sz':
return '深证';
case 'zx':
return '中小板';
case 'cy':
return '创业板';
case 'all':
return 'A股';
}
}
/**
* 名称 类型 描述
trade_date str 交易日期
ggt_ss float 港股通(上海)
ggt_sz float 港股通(深圳)
hgt float 沪股通(百万元)
sgt float 深股通(百万元)
north_money float 北向资金(百万元)
south_money float 南向资金(百万元)
* @param $code
* @return false|string
*/
function hsgtConv($code){
switch ($code){
case 'ggt_ss':
return '港股通(上海)';
case 'ggt_sz':
return '港股通(深圳)';
case 'hgt':
return '沪股通';
case 'sgt':
return '深股通';
case 'north_money':
return '北向资金';
case 'south_money':
return '南向资金';
default:
return false;
}
}
function hkholdConv($code){
switch ($code){
case 'ratio':
return '持股比例(%)';
case 'vol':
return '持股数(万)';
default:
return false;
}
}
/*
#item: f9:持股数 f10:持股额 f11:占总股本比例 f12:占流通股比例
#LX: tp字段: 序号 1-6,分别代表基金,QFII, 社保,券商,保险,信托
*/
function getIhDataByStock($ts_code,$item,$lx,$day_st,$day_end){
$mysqli = get_mysqli_connection();
switch(strtoupper($item)){
case 'F9':
$item_sel = 'sum(f9)/10000';
break;
case 'F10':
$item_sel = 'sum(f10)/10000';
break;
case 'F11':
case 'F12':
$item_sel = "sum($item)";
break;
}
$sql = "select ts_code,ih_date,$item_sel as ttl from ih_by_ts_code_ext where ts_code = ? and ih_date > ?";
$params = [$ts_code, $day_st];
if($day_end) {
$sql .= " and ih_date < ?";
$params[] = $day_end;
}
if($lx) {
$sql .= " and tp = ?";
$params[] = $lx;
}
$sql .= " group by ih_date order by ih_date asc";
$result = db_query($mysqli, $sql, $params);
#echo $sql;
$tDate=$idx=$data=array();
if($result && $result->num_rows>0) {
#$data = $result->fetch_all();
while($row=$result->fetch_assoc()){
array_push($tDate,$row['ih_date']);
array_push($idx,$row['ttl']);
array_push($data,array("value"=>array($row['ih_date'],$row['ttl'])));
}
}
$data_last= round($idx[count($idx)-1],1);
$data_max= round(max($idx),1);
$data_min= round(min($idx),1);
if(count($idx)>0) $data_avg= round(array_sum($idx)/count($idx),1);
else $data_avg=null;
#Free result and close connection.
$result->free();
$mysqli->close();
return array('tDate'=>$tDate,'idx'=>$idx,'data'=>$data,'data_max'=>$data_max,'data_min'=>$data_min,'data_avg'=>$data_avg,'data_last'=>$data_last);
}
function getMoneyFlowData($itm, $day_st,$day_end, $stacked){
$mysqli = get_mysqli_connection();
$allowed_cols = ['ggt_ss','ggt_sz','hgt','sgt','north_money','south_money'];
if(!in_array($itm, $allowed_cols)) return array('tDate'=>[],'data'=>[],'data_max'=>0,'data_min'=>0,'data_avg'=>0,'data_last'=>0);
if($stacked==1) $tb = 'moneyflow_hsgt_pro_ext';
else $tb = 'moneyflow_hsgt_pro';
$sql = "select trade_date, $itm as itm from $tb where trade_date >= ?";
$params = [$day_st];
if($day_end) {
$sql .= " and trade_date <= ?";
$params[] = $day_end;
}
$sql .= " order by trade_date asc";
$result = db_query($mysqli, $sql, $params);
$tDate=$data=array();
if($result && $result->num_rows>0) {
while($row=$result->fetch_assoc()){
$trade_date=date('Y-m-d',strtotime($row['trade_date']));
array_push($tDate,$row['itm']/100);
array_push($data,array("value"=>array($trade_date,round($row['itm']/100,2))));
}
}
#Free result and close connection.
$result->free();
$mysqli->close();
$data_last= round($tDate[count($tDate)-1],2);
$data_max= round(max($tDate),2);
$data_min= round(min($tDate),2);
if(count($tDate)>0) $data_avg= round(array_sum($tDate)/count($tDate),2);
return array('tDate'=>$tDate,'data'=>$data,'data_max'=>$data_max,'data_min'=>$data_min,'data_avg'=>$data_avg,'data_last'=>$data_last);
}
?>