Files
echart/inc/getData.inc.php
simonandClaude Opus 4.7 080d6da44c refactor: 前端库清理、页面废弃、DB→API 数据源替换
- 删除重复库文件:lib/DataTables-2/、lib/echarts/、libai/、css/fontawesome/ 等 179 个冗余文件
- 下载外部 CDN 到本地:Mermaid、AOS、Google Fonts(Inter/Noto Serif SC/Noto Sans SC)
- 所有第三方库统一到 lib/,按库名-版本号命名
- 更新 8 个 research HTML 文件引用路径

- stock_his_pro → /api/stockbasic/(getStockHist、recentPrice)
- stock_all_pro → /api/stockinfo/(tscodeToName)
- index_hist_pro → /api/indexDatas/(getIndexData)
- 新增 callDoorcomeApi() 共享函数
- 被替换表的 DB 查询代码完全删除,无回退

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 15:50:39 +08:00

239 lines
7.3 KiB
PHP

<?php
include_once __DIR__."/config.php";
include_once __DIR__."/functions.inc.php";
/*
上证指数:000001.SH
深证成指:399001.SZ
中小板指: 399005.SZ
创业板指:399006.SZ
*/
function getIndexData($ts_code,$day_st,$day_end){
$tDate=$idx=$data=array();
$ds = preg_replace('/\D/', '', $day_st);
$de = $day_end ? preg_replace('/\D/', '', $day_end) : date('Ymd');
$resp = callDoorcomeApi('indexDatas', ['tscode' => $ts_code, 'start_date' => $ds, 'end_date' => $de]);
if ($resp && is_array($resp)) {
foreach ($resp as $row) {
$d = substr($row['trade_date'],0,4).'-'.substr($row['trade_date'],4,2).'-'.substr($row['trade_date'],6,2);
array_push($tDate, $d);
array_push($idx, $row['close']);
array_push($data, ["value" => [$d, round($row['close'], 2)]]);
}
}
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);
}
?>