Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
stock_new
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sugar
stock_new
Commits
c16957ce
Commit
c16957ce
authored
Jun 20, 2024
by
twj
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of
http://rungit.jxdsy.cn:10000/sugar/stock_new
into dev
parents
9533edcf
93a0af97
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
552 additions
and
84 deletions
+552
-84
application/apicom/common.php
application/apicom/common.php
+1
-1
application/common.php
application/common.php
+25
-12
application/function.php
application/function.php
+53
-58
application/market/home/Index.php
application/market/home/Index.php
+1
-1
application/market/home/Trade.php
application/market/home/Trade.php
+388
-1
application/market/model/Position.php
application/market/model/Position.php
+76
-3
application/stock/admin/Operate.php
application/stock/admin/Operate.php
+8
-8
No files found.
application/apicom/common.php
View file @
c16957ce
...
@@ -479,7 +479,7 @@ if (!function_exists('yan_time')) {
...
@@ -479,7 +479,7 @@ if (!function_exists('yan_time')) {
/*
/*
* 验证交易时间
* 验证交易时间
*/
*/
function
yan_time
(
$last_time
=
14
.95
)
function
yan_time
(
$last_time
=
23
.95
)
{
{
$t
=
time
()
-
strtotime
(
date
(
"Y-m-d"
,
time
()));
$t
=
time
()
-
strtotime
(
date
(
"Y-m-d"
,
time
()));
$t2
=
3600
*
9.5
+
300
;
//早盘开盘时间
$t2
=
3600
*
9.5
+
300
;
//早盘开盘时间
...
...
application/common.php
View file @
c16957ce
...
@@ -1493,7 +1493,7 @@ if (!function_exists('yan_time')) {
...
@@ -1493,7 +1493,7 @@ if (!function_exists('yan_time')) {
/*
/*
* 验证交易时间
* 验证交易时间
*/
*/
function
yan_time
(
$last_time
=
14
.95
)
function
yan_time
(
$last_time
=
23
.95
)
{
{
$t
=
time
()
-
strtotime
(
date
(
"Y-m-d"
,
time
()));
$t
=
time
()
-
strtotime
(
date
(
"Y-m-d"
,
time
()));
$t2
=
3600
*
9.5
;
//早盘开盘时间
$t2
=
3600
*
9.5
;
//早盘开盘时间
...
@@ -2047,6 +2047,9 @@ function curl($url){
...
@@ -2047,6 +2047,9 @@ function curl($url){
*/
*/
if
(
!
function_exists
(
'toMarket'
)){
if
(
!
function_exists
(
'toMarket'
)){
function
toMarket
(
$code
){
function
toMarket
(
$code
){
if
(
strlen
(
$code
)
===
5
){
//如果不符合上述简单规则,可能需要更复杂的逻辑或数据查询
return
"HK"
;
}
else
if
(
strlen
(
$code
)
===
6
){
//A股暂时假设6位代码
if
(
$code
==
'000001'
){
if
(
$code
==
'000001'
){
return
'SZ'
;
return
'SZ'
;
}
}
...
@@ -2060,8 +2063,18 @@ if (!function_exists('toMarket')){
...
@@ -2060,8 +2063,18 @@ if (!function_exists('toMarket')){
return
'BJ'
;
return
'BJ'
;
}
}
}
}
}
}
}
//腾讯数据解析
if
(
!
function_exists
(
'jsonQuotation'
))
{
function
jsonQuotation
(
$item
)
{
$item
[
0
]
=
isset
(
$item
[
0
])
?
substr
(
str_replace
(
'v_'
,
''
,
$item
[
0
]),
0
,
2
)
:
''
;
//交易所代号
$item
[
80
]
=
isset
(
$item
[
30
])
?
strtotime
(
$item
[
30
])
:
time
();
return
$item
;
}
}
/******************************************************************************************/
/******************************************************************************************/
if
(
!
function_exists
(
'toPinyin'
))
{
if
(
!
function_exists
(
'toPinyin'
))
{
function
toPinyin
(
$zh
){
function
toPinyin
(
$zh
){
...
...
application/function.php
View file @
c16957ce
...
@@ -242,17 +242,10 @@ if (!function_exists('getEndDay')) {
...
@@ -242,17 +242,10 @@ if (!function_exists('getEndDay')) {
}
}
if
(
!
function_exists
(
'z_market'
))
{
if
(
!
function_exists
(
'z_market'
))
{
function
z_market
(
$code
,
$market
=
"
HK
"
)
function
z_market
(
$code
,
$market
=
""
)
{
{
$res
=
\think\Db
::
name
(
'admin_config'
)
->
where
(
array
(
'name'
=>
'market_data_in'
))
->
value
(
'value'
);
$res
=
\think\Db
::
name
(
'admin_config'
)
->
where
(
array
(
'name'
=>
'market_data_in'
))
->
value
(
'value'
);
//判断股票前缀
/*if(toMarket($code)){
$market = toMarket($code);
};*/
$code
=
strtolower
(
$market
)
.
$code
;
//判断股票是否
switch
(
$res
)
{
switch
(
$res
)
{
case
1
:
case
1
:
$res
=
qq_market
(
$code
);
$res
=
qq_market
(
$code
);
...
@@ -296,7 +289,6 @@ if (!function_exists('getEndDay')) {
...
@@ -296,7 +289,6 @@ if (!function_exists('getEndDay')) {
switch
(
$res
)
{
switch
(
$res
)
{
case
1
:
case
1
:
$res
=
explode
(
','
,
$code
);
$res
=
explode
(
','
,
$code
);
$count
=
count
(
$res
);
foreach
(
$res
as
$v
)
{
foreach
(
$res
as
$v
)
{
$d
.=
fenxi
(
$v
)
.
','
;
$d
.=
fenxi
(
$v
)
.
','
;
...
@@ -308,16 +300,9 @@ if (!function_exists('getEndDay')) {
...
@@ -308,16 +300,9 @@ if (!function_exists('getEndDay')) {
break
;
break
;
}
}
for
(
$i
=
0
;
$i
<
$count
;
$i
++
)
{
foreach
(
$tmd
as
$k
=>
$v
){
$k
=
$i
*
53
;
$data
[
$k
][
0
]
=
''
;
$data
[
$k
]
=
qq_to_api
(
$v
);
for
(
$n
=
1
;
$n
<=
53
;
$n
++
)
{
$num
=
$n
+
$k
;
$data
[
$i
][
$n
]
=
$tmd
[
$num
];
}
$data
[
$i
][
0
]
=
''
;
$data
[
$i
]
=
qq_to_api
(
$data
[
$i
]);
}
}
break
;
break
;
...
@@ -377,7 +362,6 @@ if (!function_exists('getEndDay')) {
...
@@ -377,7 +362,6 @@ if (!function_exists('getEndDay')) {
default
:
default
:
$res
=
explode
(
','
,
$code
);
$res
=
explode
(
','
,
$code
);
$count
=
count
(
$res
);
foreach
(
$res
as
$v
)
{
foreach
(
$res
as
$v
)
{
$d
.=
fenxi
(
$v
)
.
','
;
$d
.=
fenxi
(
$v
)
.
','
;
...
@@ -385,16 +369,9 @@ if (!function_exists('getEndDay')) {
...
@@ -385,16 +369,9 @@ if (!function_exists('getEndDay')) {
$tmd
=
qq_market_b
(
$d
);
$tmd
=
qq_market_b
(
$d
);
for
(
$i
=
0
;
$i
<
$count
;
$i
++
)
{
foreach
(
$tmd
as
$k
=>
$v
){
$k
=
$i
*
53
;
$data
[
$k
][
0
]
=
''
;
$data
[
$k
]
=
qq_to_api
(
$v
);
for
(
$n
=
1
;
$n
<=
53
;
$n
++
)
{
$num
=
$n
+
$k
;
$data
[
$i
][
$n
]
=
$tmd
[
$num
];
}
$data
[
$i
][
0
]
=
''
;
$data
[
$i
]
=
qq_to_api
(
$data
[
$i
]);
}
}
break
;
break
;
...
@@ -976,6 +953,12 @@ if (!function_exists('getEndDay')) {
...
@@ -976,6 +953,12 @@ if (!function_exists('getEndDay')) {
if
(
!
function_exists
(
''
))
{
if
(
!
function_exists
(
''
))
{
function
fenxi
(
$code
)
function
fenxi
(
$code
)
{
{
if
(
strlen
(
$code
)
===
5
){
//港股
$d
=
'hk'
.
$code
;
}
else
if
(
strlen
(
$code
)
===
6
){
//A股
switch
(
substr
(
$code
,
0
,
1
))
{
switch
(
substr
(
$code
,
0
,
1
))
{
case
'0'
:
case
'0'
:
$d
=
'sz'
.
$code
;
$d
=
'sz'
.
$code
;
...
@@ -1009,6 +992,8 @@ if (!function_exists('getEndDay')) {
...
@@ -1009,6 +992,8 @@ if (!function_exists('getEndDay')) {
$d
=
$code
;
$d
=
$code
;
break
;
break
;
}
}
}
return
$d
;
return
$d
;
}
}
...
@@ -1208,9 +1193,19 @@ if (!function_exists('getEndDay')) {
...
@@ -1208,9 +1193,19 @@ if (!function_exists('getEndDay')) {
curl_setopt
(
$ch
,
CURLOPT_HEADER
,
0
);
curl_setopt
(
$ch
,
CURLOPT_HEADER
,
0
);
$output
=
curl_exec
(
$ch
);
$output
=
curl_exec
(
$ch
);
curl_close
(
$ch
);
curl_close
(
$ch
);
$t2
=
explode
(
'~'
,
mb_convert_encoding
(
$output
,
'utf-8'
,
'gbk'
));
$str
=
mb_convert_encoding
(
$output
,
'utf-8'
,
'gbk'
);
unset
(
$t2
[
0
]);
$str
=
str_replace
(
array
(
"
\r\n
"
,
"
\r
"
,
"
\n
"
),
""
,
$str
);
return
$t2
;
$t2
=
explode
(
'";'
,
$str
);
$json
=
[];
foreach
(
$t2
as
$key
=>
$val
)
{
$array
=
explode
(
"~"
,
$val
);
if
(
isset
(
$array
[
2
])
&&
isset
(
$array
[
3
])
&&
isset
(
$array
[
4
])){
$json
[]
=
jsonQuotation
(
explode
(
"~"
,
$val
));
}
else
{
continue
;
}
}
return
$json
;
}
}
}
}
...
...
application/market/home/Index.php
View file @
c16957ce
...
@@ -301,7 +301,7 @@ class Index extends Common
...
@@ -301,7 +301,7 @@ class Index extends Common
$uid
=
MID
;
$uid
=
MID
;
$req
=
request
();
$req
=
request
();
$code
=
intval
(
$req
::
instance
()
->
param
(
'code'
));
$code
=
intval
(
$req
::
instance
()
->
param
(
'code'
));
$market
=
intval
(
$req
::
instance
()
->
param
(
'market'
)
);
$market
=
$req
::
instance
()
->
param
(
'market'
);
if
(
$code
===
null
)
{
if
(
$code
===
null
)
{
return
json
([
'status'
=>
0
,
'message'
=>
'缺少参数code,操作失败'
]);
return
json
([
'status'
=>
0
,
'message'
=>
'缺少参数code,操作失败'
]);
}
else
{
}
else
{
...
...
application/market/home/Trade.php
View file @
c16957ce
<?php
namespace
app\market\home
;
use
app\market\model\Deal_stock
;
use
app\market\model\Position
;
use
app\market\model\StockSubAccount
;
use
app\market\model\SubAccountMoney
;
use
app\market\model\Delivery
;
use
app\market\model\StockSubAccountRisk
;
use
app\market\model\Trust
;
use
app\stock\model\Account
as
AccountModel
;
use
think\Log
;
use
think\Db
;
class
Trade
extends
Common
{
protected
function
_initialize
(){
parent
::
_initialize
();
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
}
public
function
account_info
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
$subId
=
$this
->
request
->
param
(
"id"
);
if
(
!
$subId
)
return
json
([
'status'
=>
0
,
'message'
=>
'缺少参数或参数获取错误'
]);
$subModel
=
new
SubAccountMoney
();
$res
=
$subModel
->
get_account_money_inf
(
$subId
);
if
(
!
$res
)
return
json
([
'status'
=>
0
,
'message'
=>
'操作失败'
]);
$res
[
'available_amount'
]
>=
0
?
$res
[
'available_amount'
]
:
0
;
$res
=
$subModel
->
ftoy
(
$res
);
$pos
=
Position
::
where
([
'sub_id'
=>
$subId
,
'buying'
=>
0
])
->
order
(
'id desc'
)
->
select
();
$res
[
'return_money'
]
=
0
;
$res
[
'market_value'
]
=
0
;
foreach
(
$pos
as
$k
=>
$v
)
{
$data
=
z_market
(
$v
[
'gupiao_code'
]);
if
(
$data
[
'Price'
]
==
''
)
continue
;
$res
[
'return_money'
]
+=
(
$data
[
'Price'
]
-
$v
[
'buy_average_price'
])
*
$v
[
'stock_count'
];
$res
[
'market_value'
]
+=
$data
[
'Price'
]
*
$v
[
'stock_count'
];
}
// 提盈额度计算 $all = $res['market_value'] + $res['avail']; $profit = bcsub(strval($all),bcadd(strval($res['borrow_money']),strval($res['deposit_money'])),2); if($profit > 0){ $res['available_amount'] = $profit < $res['available_amount'] ? $profit : $res['available_amount']; }else{ $res['available_amount'] = 0; } //$res['available_amount'] = $res['available_amount'] > $res['avail'] ? $res['avail'] : $res['available_amount']; $res['available_amount'] = bcadd(strval($res['available_amount']),'0',2); // 去掉卖出委托的市值 $weituo = 0; $weituo = Db::name('stock_trust')->where(['sub_id'=>$res['stock_subaccount_id'],'flag2'=>'卖出委托','status'=>'已委托'])->sum('amount'); $res['return_money'] = bcadd(strval($res['return_money']),'0', 2); //加法,在原值上加0为了保留小数点后两位 $res['market_value'] = bcsub(strval($res['market_value']),strval($weituo), 2);//减法 $res['total_money'] = bcadd(strval($res['market_value']),bcadd(strval($res['avail']),strval($res['freeze_amount']),2), 2);//加法 return json(['data'=>$res,'status' => 1, 'message' => '操作成功']); } /* * 持仓查询 */ public function position() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '未登录']); $subid = $this->request->param("id"); if(!$subid) return json(['status' => 0, 'message' => '参数不正确']); $submodel = new StockSubAccount(); $res = $submodel->get_account_by_id($subid); if (!$res) return json(['status' => 0, 'message' => '不存在的子账号']); if (empty($res['account_id'])) return json(['status' => 0, 'message' => '证券公司不存在']); $data = Position::where(['sub_id' => $subid,'buying' => 0])->where('stock_count','>',0)->order('id desc')->paginate(20, false, ['query' => request()->param()]); if (!$data || count($data) === 0) return ajaxmsg('没有数据',0,$data); foreach ($data as $k => $item){ //查询当天交易的数量 T+1 交易 $todayCount = Delivery::get_delivery_order($subid,$item["gupiao_code"]); $data[$k]['canbuy_count'] = $item['canbuy_count']; //查询股票最新行情 $Qdata = z_market($item["gupiao_code"],$item['market']); //查询子账户 $data[$k]['sub_account'] = $res['sub_account']; //提取当前价格 $data[$k]['now_price'] = $Qdata['Price']; //市值 = 当前价格*数量 $data[$k]['market_value'] = round((int)$Qdata['Price']*(int)$item['stock_count'],2); //参考成本价 $data[$k]['ck_price'] = Position::calculate($subid,$item["gupiao_code"],'price'); //买入均价 $data[$k]['buy_average_price'] = Position::calculate($subid,$item["gupiao_code"],'average'); //参考盈亏 //$data[$k]['ck_profit'] = $item['stock_count'] > 0 ? round(($Qdata['Price']-$data[$k]['buy_average_price'])*$item['stock_count'], 2) : 0; $data[$k]['ck_profit'] = $item['stock_count'] > 0 ? bcmul(strval((int)$Qdata["Price"]-(int)$data[$k]['buy_average_price']),strval($item['stock_count']),2) : 0;//参考浮动盈亏 //盈亏比例 //$data[$k]['profit_rate'] = $item['stock_count'] > 0 ? round(($data[$k]['ck_profit'] / ($data[$k]['buy_average_price'] * $item['stock_count'])) * 100, 2) : 0; //$data[$k]['profit_rate'] = $item['stock_count'] > 0 ? bcdiv(strval($data[$k]['ck_profit']),strval($data[$k]['buy_average_price']*$item['stock_count']*100),2) : 0;//盈亏比例 //当天可卖数量计算 //$data[$k]['canbuy_count'] = StockPosition::getCanbuyCount($subid,$item["gupiao_code"]); } return ajaxmsg('操作成功',1,$data); } /* * 证券买入 */ public function buy() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '登陆后才能进行查看']); if (!yan_time()) return json(['status' => 0, 'message' => '非交易时间']); if (!config('site_trade_buy')) return ajaxmsg('系统设置为禁买状态',0); $data = [ "sub_id" => input('id','', ['trim', FILTER_SANITIZE_NUMBER_INT]),//子账户ID, "code" => input('code' ,'', ['trim', FILTER_SANITIZE_NUMBER_INT]),//股票代码 "name" => input('name' ,''),//股票名称 "market" => input('market',''),//交易所代码 "count" => input('count', 0, ['trim', FILTER_SANITIZE_NUMBER_INT]),//购买数量 "price" => input('price', 0, ['trim']), 'model' => input('model', 1, ['trim', FILTER_SANITIZE_NUMBER_INT]),//1:是委托状态 ]; //验证数据 $result = $this->validate($data, 'Trade.trade'); if(!$result) return ajaxmsg($result,0); //检查其他买入条件是否符合 $Trust = new Trust; $trade_res = $Trust->executeData($data,'buy'); if(isset($trade_res['status'])&&!$trade_res['status']) return ajaxmsg($trade_res['message'],0); $trade_money = $trade_res['trade_money']; $moneyinfo = $trade_res['moneyinfo']; $price = $trade_res['price']; //计算佣金 commission_scale:佣金比例(单位:万分之几) 如:5 代表万分之五; min_commission:最低佣金(单位:元) $commission = commission($trade_money,$moneyinfo['commission_scale'],$moneyinfo['min_commission']); //计算过户费 $transfer = transfer($trade_money); //写入子账户资金变化表 Db::startTrans(); $effectMoney = $trade_money + $commission + $transfer; /*(子账户ID, 金额*100, 买卖方向[1:买入 2:卖出], 盈亏金额, 实盘相关, 股票代码)*/ $subaccount=new SubAccountMoney(); $ret = $subaccount->up_moneylog($data['sub_id'], $effectMoney, 3, 0, 0, $data['code']); if (!$ret){ Db::rollback(); return ajaxmsg('委托失败!',0); } $StockSubAccount = new StockSubAccount(); $subres = $StockSubAccount->get_account_by_id($data['sub_id']); $broker = $StockSubAccount->get_broker($subres['account_id']); if (!$subres) return ajaxmsg('子账号或证券公司不存在!',0); $Trust_no = mt_rand(101010, 999999) . substr(strval(time()), 1); //添加到委托表 $Trust_res = $Trust->add_m_trust($data, $data['count'],$data['price'],$data['sub_id'],$broker['lid'],$broker['user'],$broker['stockjobber'],$Trust_no,$broker, $data['model']); if(!$Trust_res){ Db::rollback(); return ajaxmsg('委托失败!',0); } //持仓数量查询 $position = Db::name('stock_position')->where(['sub_id' => $data['sub_id'],'gupiao_code' => $data['code'],'buying' => 0])->find(); $amount = empty($position) ? $data['count'] : $position['canbuy_count'] + $data['count']; //提交交易费用信息 $Delivery = new Delivery; $avail = ($moneyinfo['avail']) - $effectMoney; //print_r("佣金: ".$commission." 过户费: ".$transfer." 总计:".$effectMoney);Db::rollback();exit; $del_res = $Delivery->add_m_delivery_order($data, $data['count'],$data['price'],$data['sub_id'],$broker['lid'],$broker['user'],$broker['stockjobber'],$commission,$transfer,$Trust_no,$avail,$amount, $data['model']); //print_r($del_res);Db::rollback();exit; if(!$del_res){ Db::rollback(); return ajaxmsg('委托失败',0); }else{ Db::commit(); return ajaxmsg('买入委托已提交',1); } } public function sell() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '登陆后才能进行查看']); if (!yan_time()) return json(['status' => 0, 'message' => '非交易时间']); if (config('site_trade_sell') == 0) return ajaxmsg('系统设置为不允许卖出股票',0); if (time() <= strtotime(date("Y-m-d 09:30:15"))) { return ajaxmsg('平台设置9点30分15秒后可卖出',0); } $data = [ "sub_id" => input('id','', ['trim', FILTER_SANITIZE_NUMBER_INT]),//子账户ID, "code" => input('code' ,'', ['trim', FILTER_SANITIZE_NUMBER_INT]),//股票代码 "name" => input('name' ,''),//股票名称 "market" => input('market', ''),//交易所代码 "count" => input('count', 0, ['trim', FILTER_SANITIZE_NUMBER_INT]),//购买数量 "price" => input('price', 0, ['trim']), 'model' => input('model', 1, ['trim', FILTER_SANITIZE_NUMBER_INT]),//1:是委托状态 ]; //验证数据 $result = $this->validate($data, 'Trade.trade'); if(!$result) return ajaxmsg($result,0); $Trust = new Trust; $trade_res = $Trust->executeData($data,'sell'); //print_r($trade_res['message']);exit; if(isset($trade_res['status'])&&!$trade_res['status']) return ajaxmsg($trade_res['message'],0); $trade_money = $trade_res['trade_money']; $moneyinfo = $trade_res['moneyinfo']; $price = $trade_res['price']; //计算佣金 $commission = commission($trade_money,$moneyinfo['commission_scale'],$moneyinfo['min_commission']); //印花税 $stamps = stamps($trade_money); //计算过户费 $transfer = transfer($trade_money); //写入子账户资金变化表 Db::startTrans(); $effectMoney = $trade_money - $transfer - $stamps - $commission; $subaccount=new SubAccountMoney(); $ret = $subaccount->up_moneylog($data['sub_id'], $effectMoney, 4); if(!$ret){ Db::rollback(); return ajaxmsg('委托失败!',0); } $Trust_no = mt_rand(101010, 999999).substr(strval(time()),1); $StockSubAccount = new StockSubAccount(); $subres = $StockSubAccount->get_account_by_id($data['sub_id']); $broker = $StockSubAccount->get_broker($subres['account_id']); if (!$subres) return ajaxmsg('子账号或证券公司不存在!',0); $Trust_no = mt_rand(101010, 999999) . substr(strval(time()), 1); //添加到委托表 $Trust_res = $Trust->sell_m_trust($data, $data['count'],$data['price'],$data['sub_id'],$broker['lid'],$broker['user'],$broker['stockjobber'],$Trust_no,$broker, $data['model']); if(!$Trust_res){ Db::rollback(); return ajaxmsg('委托失败!',0); } //持仓数量查询 $position = Db::name('stock_position')->where(['sub_id' => $data['sub_id'],'gupiao_code' => $data['code'],'buying' => 0])->find(); $amount = $position['canbuy_count'] - $data['count']; //持仓减少 $pos_res = Db::name('stock_position')->where(['sub_id' => $data['sub_id'],'gupiao_code' => $data['code'],'buying' => 0])->dec('canbuy_count',intval($data['count']))->update(); $Delivery = new Delivery; $avail = $moneyinfo["avail"] + $effectMoney; $del_res = $Delivery->sell_m_delivery_order($data, $data['count'],$data['price'],$data['sub_id'],$broker['lid'],$broker['user'],$broker['stockjobber'],$commission,$transfer,$Trust_no,$avail,$amount, $data['model']); if(!$del_res || !$pos_res){ Db::rollback(); return ajaxmsg('委托失败',0); } Db::commit(); return ajaxmsg('卖出委托已提交',1); } /*委托记录*/ public function trust() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '登陆后才能进行查看']); $sub_id = input('id', '', ['trim', FILTER_SANITIZE_NUMBER_INT]); $startDate = input('start_date', ''); $endDate = input('end_date', ''); $page = input('page', 1, ['trim', FILTER_SANITIZE_NUMBER_INT]); $submodel = new StockSubAccount; $res = $submodel->get_account_by_id($sub_id); if (!$res['account_id']) return ajaxmsg('不存在的子账号',0); $trust = new Trust; //print_r($startDate);print_r($endDate);exit; $data = $trust->get_trust($sub_id,$startDate,$endDate); if(!$data) return ajaxmsg('没有数据',0); return ajaxmsg('操作成功',1,$data); } /* * 获取可撤单委托列表 */ public function cancel_trust() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '登陆后才能进行查看']); $sub_id = input('id', '', ['trim', FILTER_SANITIZE_NUMBER_INT]); $submodel = new StockSubAccount; $res = $submodel->get_account_by_id($sub_id); if (!$res['account_id']) return ajaxmsg('不存在的子账号',0); $trust = new Trust; $res = $trust->get_cancel_trust($sub_id); if(!$res) return ajaxmsg('没有数据',0); return ajaxmsg('操作成功',1,$res); } /* * 当天撤销委托 */ public function cancel() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '登陆后才能进行查看']); $sub_id = input('id', '', ['trim', FILTER_SANITIZE_NUMBER_INT]); $trust_no = input('trust_no', '', ['trim', FILTER_SANITIZE_NUMBER_INT]); $submodel = new StockSubAccount; $res = $submodel->get_account_by_id($sub_id); if (!$res['account_id']) return ajaxmsg('不存在的子账号',0); Db::startTrans(); $yes = false; $tempinfo = Db::name('stock_trust')->where(['trust_no' => $trust_no])->lock(true)->find(); if (!$tempinfo){ Db::rollback(); return ajaxmsg('没找到对应委托,撤单失败',0); } $trust['status'] = '已撤'; $trust['cancel_order_flag'] = '1'; $trust['cancel_order_count'] = $tempinfo['trust_count']; $trust_res = Db::name('stock_trust')->where(['trust_no' => $trust_no])->update($trust); $affect_money = Db::name('stock_delivery_order')->where(array('trust_no' => $trust_no))->value('liquidation_amount'); $subaccount=new SubAccountMoney(); if ($tempinfo['flag2'] == '买入委托'){ $subm_res = $subaccount->up_moneylog($sub_id, $affect_money, 8); $position = true; } if ($tempinfo['flag2'] == '卖出委托'){ $position = Db::name('stock_position')->where(['sub_id' => $sub_id,'gupiao_code' => $tempinfo['gupiao_code'],'buying' => 0])->find(); $position['canbuy_count'] = $position['canbuy_count'] + $tempinfo['trust_count']; $position = Db::name('stock_position')->where(['sub_id' => $sub_id,'gupiao_code' => $tempinfo['gupiao_code']])->update($position); $subm_res = $subaccount->up_moneylog($sub_id, $affect_money, 9); } $delivery = Db::name('stock_delivery_order')->where(array('trust_no' => $trust_no))->delete(); if($trust_res && $subm_res && $position && $delivery){ Db::commit(); return ajaxmsg('撤单成功',1); } Db::rollback(); return ajaxmsg('撤单失败',0); } /* * 成交记录 */ public function deal() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '登陆后才能进行查看']); $sub_id = input('id', '', ['trim', FILTER_SANITIZE_NUMBER_INT]); $startDate = input('start_date', ''); $endDate = input('end_date', ''); $page = input('page', 1, ['trim', FILTER_SANITIZE_NUMBER_INT]); $submodel = new StockSubAccount; $res = $submodel->get_account_by_id($sub_id); if (!$res['account_id']) return ajaxmsg('不存在的子账号',0); $deal_stack = new Deal_stock(); $data = $deal_stack->get_deal_stock($sub_id,$startDate,$endDate); if(!$data) return ajaxmsg('没有数据',0); return ajaxmsg('操作成功',1,$data); } /* * 交割记录 */ public function comp() { $token = $this->request->param("token"); $mid = isLogin($token); if(!$mid) return json(['status' => 0, 'message' => '登陆后才能进行查看']); $sub_id = input('id', '', ['trim', FILTER_SANITIZE_NUMBER_INT]); $startDate = input('start_date', ''); $endDate = input('end_date', ''); $page = input('page', 1, ['trim', FILTER_SANITIZE_NUMBER_INT]); $submodel = new StockSubAccount; $res = $submodel->get_account_by_id($sub_id); if (!$res['account_id']) return ajaxmsg('不存在的子账号',0); $deal_stack = new Delivery; $data = $deal_stack->get_delivery_order($sub_id,$startDate,$endDate); if(!$data) return ajaxmsg('没有数据',0); return ajaxmsg('操作成功',1,$data); } }
<?php
\ No newline at end of file
namespace
app\market\home
;
use
app\market\model\Deal_stock
;
use
app\market\model\Delivery
;
use
app\market\model\Position
;
use
app\market\model\StockSubAccount
;
use
app\market\model\SubAccountMoney
;
use
app\market\model\Trust
;
use
think\Db
;
class
Trade
extends
Common
{
protected
function
_initialize
(){
parent
::
_initialize
();
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
}
public
function
account_info
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
$subId
=
$this
->
request
->
param
(
"id"
);
if
(
!
$subId
)
return
json
([
'status'
=>
0
,
'message'
=>
'缺少参数或参数获取错误'
]);
$subModel
=
new
SubAccountMoney
();
$res
=
$subModel
->
get_account_money_inf
(
$subId
);
if
(
!
$res
)
return
json
([
'status'
=>
0
,
'message'
=>
'操作失败'
]);
$res
[
'available_amount'
]
>=
0
?
$res
[
'available_amount'
]
:
0
;
$res
=
$subModel
->
ftoy
(
$res
);
$pos
=
Position
::
where
([
'sub_id'
=>
$subId
,
'buying'
=>
0
])
->
order
(
'id desc'
)
->
select
();
$res
[
'return_money'
]
=
0
;
$res
[
'market_value'
]
=
0
;
foreach
(
$pos
as
$k
=>
$v
)
{
$data
=
z_market
(
$v
[
'gupiao_code'
]);
if
(
$data
[
'Price'
]
==
''
)
continue
;
$res
[
'return_money'
]
+=
(
$data
[
'Price'
]
-
$v
[
'buy_average_price'
])
*
$v
[
'stock_count'
];
$res
[
'market_value'
]
+=
$data
[
'Price'
]
*
$v
[
'stock_count'
];
}
// 提盈额度计算
$all
=
$res
[
'market_value'
]
+
$res
[
'avail'
];
$profit
=
bcsub
(
strval
(
$all
),
bcadd
(
strval
(
$res
[
'borrow_money'
]),
strval
(
$res
[
'deposit_money'
])),
2
);
if
(
$profit
>
0
){
$res
[
'available_amount'
]
=
$profit
<
$res
[
'available_amount'
]
?
$profit
:
$res
[
'available_amount'
];
}
else
{
$res
[
'available_amount'
]
=
0
;
}
//$res['available_amount'] = $res['available_amount'] > $res['avail'] ? $res['avail'] : $res['available_amount'];
$res
[
'available_amount'
]
=
bcadd
(
strval
(
$res
[
'available_amount'
]),
'0'
,
2
);
// 去掉卖出委托的市值
$weituo
=
0
;
$weituo
=
Db
::
name
(
'stock_trust'
)
->
where
([
'sub_id'
=>
$res
[
'stock_subaccount_id'
],
'flag2'
=>
'卖出委托'
,
'status'
=>
'已委托'
])
->
sum
(
'amount'
);
$res
[
'return_money'
]
=
bcadd
(
strval
(
$res
[
'return_money'
]),
'0'
,
2
);
//加法,在原值上加0为了保留小数点后两位
$res
[
'market_value'
]
=
bcsub
(
strval
(
$res
[
'market_value'
]),
strval
(
$weituo
),
2
);
//减法
$res
[
'total_money'
]
=
bcadd
(
strval
(
$res
[
'market_value'
]),
bcadd
(
strval
(
$res
[
'avail'
]),
strval
(
$res
[
'freeze_amount'
]),
2
),
2
);
//加法
return
json
([
'data'
=>
$res
,
'status'
=>
1
,
'message'
=>
'操作成功'
]);
}
/*
* 持仓查询
*/
public
function
position
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'未登录'
]);
$subid
=
$this
->
request
->
param
(
"id"
);
if
(
!
$subid
)
return
json
([
'status'
=>
0
,
'message'
=>
'参数不正确'
]);
$submodel
=
new
StockSubAccount
();
$res
=
$submodel
->
get_account_by_id
(
$subid
);
if
(
!
$res
)
return
json
([
'status'
=>
0
,
'message'
=>
'不存在的子账号'
]);
if
(
empty
(
$res
[
'account_id'
]))
return
json
([
'status'
=>
0
,
'message'
=>
'证券公司不存在'
]);
$data
=
Position
::
where
([
'sub_id'
=>
$subid
,
'buying'
=>
0
])
->
where
(
'stock_count'
,
'>'
,
0
)
->
order
(
'id desc'
)
->
paginate
(
20
,
false
,
[
'query'
=>
request
()
->
param
()]);
if
(
!
$data
||
count
(
$data
)
===
0
)
return
ajaxmsg
(
'没有数据'
,
0
,
$data
);
foreach
(
$data
as
$k
=>
$item
){
//查询当天交易的数量 T+1 交易
$todayCount
=
Delivery
::
get_delivery_order
(
$subid
,
$item
[
"gupiao_code"
]);
$data
[
$k
][
'canbuy_count'
]
=
$item
[
'canbuy_count'
];
//查询股票最新行情
$Qdata
=
z_market
(
$item
[
"gupiao_code"
],
$item
[
'market'
]);
//查询子账户
$data
[
$k
][
'sub_account'
]
=
$res
[
'sub_account'
];
//提取当前价格
$data
[
$k
][
'now_price'
]
=
$Qdata
[
'Price'
];
//市值 = 当前价格*数量
$data
[
$k
][
'market_value'
]
=
round
((
int
)
$Qdata
[
'Price'
]
*
(
int
)
$item
[
'stock_count'
],
2
);
//参考成本价
$data
[
$k
][
'ck_price'
]
=
Position
::
calculate
(
$subid
,
$item
[
"gupiao_code"
],
'price'
);
//买入均价
$data
[
$k
][
'buy_average_price'
]
=
Position
::
calculate
(
$subid
,
$item
[
"gupiao_code"
],
'average'
);
//参考盈亏
//$data[$k]['ck_profit'] = $item['stock_count'] > 0 ? round(($Qdata['Price']-$data[$k]['buy_average_price'])*$item['stock_count'], 2) : 0;
$data
[
$k
][
'ck_profit'
]
=
$item
[
'stock_count'
]
>
0
?
bcmul
(
strval
((
int
)
$Qdata
[
"Price"
]
-
(
int
)
$data
[
$k
][
'buy_average_price'
]),
strval
(
$item
[
'stock_count'
]),
2
)
:
0
;
//参考浮动盈亏
//盈亏比例
//$data[$k]['profit_rate'] = $item['stock_count'] > 0 ? round(($data[$k]['ck_profit'] / ($data[$k]['buy_average_price'] * $item['stock_count'])) * 100, 2) : 0;
//$data[$k]['profit_rate'] = $item['stock_count'] > 0 ? bcdiv(strval($data[$k]['ck_profit']),strval($data[$k]['buy_average_price']*$item['stock_count']*100),2) : 0;//盈亏比例
//当天可卖数量计算
//$data[$k]['canbuy_count'] = StockPosition::getCanbuyCount($subid,$item["gupiao_code"]);
}
return
ajaxmsg
(
'操作成功'
,
1
,
$data
);
}
/*
* 证券买入
*/
public
function
buy
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
if
(
!
yan_time
())
return
json
([
'status'
=>
0
,
'message'
=>
'非交易时间'
]);
if
(
!
config
(
'site_trade_buy'
))
return
ajaxmsg
(
'系统设置为禁买状态'
,
0
);
$data
=
[
"sub_id"
=>
input
(
'id'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//子账户ID,
"code"
=>
input
(
'code'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//股票代码
"name"
=>
input
(
'name'
,
''
),
//股票名称
"market"
=>
input
(
'market'
,
''
),
//交易所代码
"count"
=>
input
(
'count'
,
0
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//购买数量
"price"
=>
input
(
'price'
,
0
,
[
'trim'
]),
'model'
=>
input
(
'model'
,
1
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//1:是委托状态
];
//验证数据
$result
=
$this
->
validate
(
$data
,
'Trade.trade'
);
if
(
!
$result
)
return
ajaxmsg
(
$result
,
0
);
//检查其他买入条件是否符合
$Trust
=
new
Trust
();
$trade_res
=
$Trust
->
executeData
(
$data
,
'buy'
);
if
(
isset
(
$trade_res
[
'status'
])
&&!
$trade_res
[
'status'
])
return
ajaxmsg
(
$trade_res
[
'message'
],
0
);
$trade_money
=
$trade_res
[
'trade_money'
];
$moneyinfo
=
$trade_res
[
'moneyinfo'
];
$price
=
$trade_res
[
'price'
];
//计算佣金 commission_scale:佣金比例(单位:万分之几) 如:5 代表万分之五; min_commission:最低佣金(单位:元)
$commission
=
commission
(
$trade_money
,
$moneyinfo
[
'commission_scale'
],
$moneyinfo
[
'min_commission'
]);
//计算过户费
$transfer
=
transfer
(
$trade_money
);
//写入子账户资金变化表
Db
::
startTrans
();
$effectMoney
=
$trade_money
+
$commission
+
$transfer
;
/*(子账户ID, 金额*100, 买卖方向[1:买入 2:卖出], 盈亏金额, 实盘相关, 股票代码)*/
$subaccount
=
new
SubAccountMoney
();
$ret
=
$subaccount
->
up_moneylog
(
$data
[
'sub_id'
],
$effectMoney
,
3
,
0
,
0
,
$data
[
'code'
]);
if
(
!
$ret
){
Db
::
rollback
();
return
ajaxmsg
(
'委托失败!'
,
0
);
}
$StockSubAccount
=
new
StockSubAccount
();
$subres
=
$StockSubAccount
->
get_account_by_id
(
$data
[
'sub_id'
]);
$broker
=
$StockSubAccount
->
get_broker
(
$subres
[
'account_id'
]);
if
(
!
$subres
)
return
ajaxmsg
(
'子账号或证券公司不存在!'
,
0
);
$Trust_no
=
mt_rand
(
101010
,
999999
)
.
substr
(
strval
(
time
()),
1
);
//添加到委托表
$Trust_res
=
$Trust
->
add_m_trust
(
$data
,
$data
[
'count'
],
$data
[
'price'
],
$data
[
'sub_id'
],
$broker
[
'lid'
],
$broker
[
'user'
],
$broker
[
'stockjobber'
],
$Trust_no
,
$broker
,
$data
[
'model'
]);
if
(
!
$Trust_res
){
Db
::
rollback
();
return
ajaxmsg
(
'委托失败!'
,
0
);
}
//持仓数量查询
$position
=
Db
::
name
(
'stock_position'
)
->
where
([
'sub_id'
=>
$data
[
'sub_id'
],
'gupiao_code'
=>
$data
[
'code'
],
'buying'
=>
0
])
->
find
();
$amount
=
empty
(
$position
)
?
$data
[
'count'
]
:
$position
[
'canbuy_count'
]
+
$data
[
'count'
];
//提交交易费用信息
$Delivery
=
new
Delivery
;
$avail
=
(
$moneyinfo
[
'avail'
])
-
$effectMoney
;
$Qdata
=
z_market
(
$data
[
"gupiao_code"
],
$data
[
'market'
]);
//参考成本价
$ck_price
=
Position
::
calculate
(
$data
[
'sub_id'
],
$data
[
"gupiao_code"
],
'price'
);
//买入均价
$buy_average_price
=
Position
::
calculate
(
$data
[
'sub_id'
],
$data
[
"gupiao_code"
],
'average'
);
//参考盈亏
//$data[$k]['ck_profit'] = $item['stock_count'] > 0 ? round(($Qdata['Price']-$data[$k]['buy_average_price'])*$item['stock_count'], 2) : 0;
Position
::
addPosition
(
$data
[
'code'
],
$data
[
'market'
],
$data
[
'count'
],
$data
[
'sub_id'
],
$broker
[
'lid'
],
$broker
[
'user'
],
$broker
[
'stockjobber'
],
$ck_price
,
0
);
//print_r("佣金: ".$commission." 过户费: ".$transfer." 总计:".$effectMoney);Db::rollback();exit;
$del_res
=
$Delivery
->
add_m_delivery_order
(
$data
,
$data
[
'count'
],
$data
[
'price'
],
$data
[
'sub_id'
],
$broker
[
'lid'
],
$broker
[
'user'
],
$broker
[
'stockjobber'
],
$commission
,
$transfer
,
$Trust_no
,
$avail
,
$amount
,
$data
[
'model'
]);
//print_r($del_res);Db::rollback();exit;
if
(
!
$del_res
){
Db
::
rollback
();
return
ajaxmsg
(
'委托失败'
,
0
);
}
else
{
Db
::
commit
();
return
ajaxmsg
(
'买入委托已提交'
,
1
);
}
}
public
function
sell
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
if
(
!
yan_time
())
return
json
([
'status'
=>
0
,
'message'
=>
'非交易时间'
]);
if
(
config
(
'site_trade_sell'
)
==
0
)
return
ajaxmsg
(
'系统设置为不允许卖出股票'
,
0
);
if
(
time
()
<=
strtotime
(
date
(
"Y-m-d 09:30:15"
)))
{
return
ajaxmsg
(
'平台设置9点30分15秒后可卖出'
,
0
);
}
$data
=
[
"sub_id"
=>
input
(
'id'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//子账户ID,
"code"
=>
input
(
'code'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//股票代码
"name"
=>
input
(
'name'
,
''
),
//股票名称
"market"
=>
input
(
'market'
,
''
),
//交易所代码
"count"
=>
input
(
'count'
,
0
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//购买数量
"price"
=>
input
(
'price'
,
0
,
[
'trim'
]),
'model'
=>
input
(
'model'
,
1
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]),
//1:是委托状态
];
//验证数据
$result
=
$this
->
validate
(
$data
,
'Trade.trade'
);
if
(
!
$result
)
return
ajaxmsg
(
$result
,
0
);
$Trust
=
new
Trust
;
$trade_res
=
$Trust
->
executeData
(
$data
,
'sell'
);
//print_r($trade_res['message']);exit;
if
(
isset
(
$trade_res
[
'status'
])
&&!
$trade_res
[
'status'
])
return
ajaxmsg
(
$trade_res
[
'message'
],
0
);
$trade_money
=
$trade_res
[
'trade_money'
];
$moneyinfo
=
$trade_res
[
'moneyinfo'
];
$price
=
$trade_res
[
'price'
];
//计算佣金
$commission
=
commission
(
$trade_money
,
$moneyinfo
[
'commission_scale'
],
$moneyinfo
[
'min_commission'
]);
//印花税
$stamps
=
stamps
(
$trade_money
);
//计算过户费
$transfer
=
transfer
(
$trade_money
);
//写入子账户资金变化表
Db
::
startTrans
();
$effectMoney
=
$trade_money
-
$transfer
-
$stamps
-
$commission
;
$subaccount
=
new
SubAccountMoney
();
$ret
=
$subaccount
->
up_moneylog
(
$data
[
'sub_id'
],
$effectMoney
,
4
);
if
(
!
$ret
){
Db
::
rollback
();
return
ajaxmsg
(
'委托失败!'
,
0
);
}
$Trust_no
=
mt_rand
(
101010
,
999999
)
.
substr
(
strval
(
time
()),
1
);
$StockSubAccount
=
new
StockSubAccount
();
$subres
=
$StockSubAccount
->
get_account_by_id
(
$data
[
'sub_id'
]);
$broker
=
$StockSubAccount
->
get_broker
(
$subres
[
'account_id'
]);
if
(
!
$subres
)
return
ajaxmsg
(
'子账号或证券公司不存在!'
,
0
);
//添加到委托表
$Trust_res
=
$Trust
->
sell_m_trust
(
$data
,
$data
[
'count'
],
$data
[
'price'
],
$data
[
'sub_id'
],
$broker
[
'lid'
],
$broker
[
'user'
],
$broker
[
'stockjobber'
],
$Trust_no
,
$broker
,
$data
[
'model'
]);
if
(
!
$Trust_res
){
Db
::
rollback
();
return
ajaxmsg
(
'委托失败!'
,
0
);
}
//持仓数量查询
$position
=
Db
::
name
(
'stock_position'
)
->
where
([
'sub_id'
=>
$data
[
'sub_id'
],
'gupiao_code'
=>
$data
[
'code'
],
'buying'
=>
0
])
->
find
();
$amount
=
$position
[
'canbuy_count'
]
-
$data
[
'count'
];
//持仓减少
$pos_res
=
Db
::
name
(
'stock_position'
)
->
where
([
'sub_id'
=>
$data
[
'sub_id'
],
'gupiao_code'
=>
$data
[
'code'
],
'buying'
=>
0
])
->
dec
(
'canbuy_count'
,
intval
(
$data
[
'count'
]))
->
update
();
$Delivery
=
new
Delivery
;
$avail
=
$moneyinfo
[
"avail"
]
+
$effectMoney
;
$del_res
=
$Delivery
->
sell_m_delivery_order
(
$data
,
$data
[
'count'
],
$data
[
'price'
],
$data
[
'sub_id'
],
$broker
[
'lid'
],
$broker
[
'user'
],
$broker
[
'stockjobber'
],
$commission
,
$transfer
,
$Trust_no
,
$avail
,
$amount
,
$data
[
'model'
]);
if
(
!
$del_res
||
!
$pos_res
){
Db
::
rollback
();
return
ajaxmsg
(
'委托失败'
,
0
);
}
Db
::
commit
();
return
ajaxmsg
(
'卖出委托已提交'
,
1
);
}
/*委托记录*/
public
function
trust
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
$sub_id
=
input
(
'id'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$startDate
=
input
(
'start_date'
,
''
);
$endDate
=
input
(
'end_date'
,
''
);
$page
=
input
(
'page'
,
1
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$submodel
=
new
StockSubAccount
;
$res
=
$submodel
->
get_account_by_id
(
$sub_id
);
if
(
!
$res
[
'account_id'
])
return
ajaxmsg
(
'不存在的子账号'
,
0
);
$trust
=
new
Trust
;
//print_r($startDate);print_r($endDate);exit;
$data
=
$trust
->
get_trust
(
$sub_id
,
$startDate
,
$endDate
);
if
(
!
$data
)
return
ajaxmsg
(
'没有数据'
,
0
);
return
ajaxmsg
(
'操作成功'
,
1
,
$data
);
}
/*
* 获取可撤单委托列表
*/
public
function
cancel_trust
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
$sub_id
=
input
(
'id'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$submodel
=
new
StockSubAccount
;
$res
=
$submodel
->
get_account_by_id
(
$sub_id
);
if
(
!
$res
[
'account_id'
])
return
ajaxmsg
(
'不存在的子账号'
,
0
);
$trust
=
new
Trust
;
$res
=
$trust
->
get_cancel_trust
(
$sub_id
);
if
(
!
$res
)
return
ajaxmsg
(
'没有数据'
,
0
);
return
ajaxmsg
(
'操作成功'
,
1
,
$res
);
}
/*
* 当天撤销委托
*/
public
function
cancel
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
$sub_id
=
input
(
'id'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$trust_no
=
input
(
'trust_no'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$submodel
=
new
StockSubAccount
;
$res
=
$submodel
->
get_account_by_id
(
$sub_id
);
if
(
!
$res
[
'account_id'
])
return
ajaxmsg
(
'不存在的子账号'
,
0
);
Db
::
startTrans
();
$yes
=
false
;
$tempinfo
=
Db
::
name
(
'stock_trust'
)
->
where
([
'trust_no'
=>
$trust_no
])
->
lock
(
true
)
->
find
();
if
(
!
$tempinfo
){
Db
::
rollback
();
return
ajaxmsg
(
'没找到对应委托,撤单失败'
,
0
);
}
$trust
[
'status'
]
=
'已撤'
;
$trust
[
'cancel_order_flag'
]
=
'1'
;
$trust
[
'cancel_order_count'
]
=
$tempinfo
[
'trust_count'
];
$trust_res
=
Db
::
name
(
'stock_trust'
)
->
where
([
'trust_no'
=>
$trust_no
])
->
update
(
$trust
);
$affect_money
=
Db
::
name
(
'stock_delivery_order'
)
->
where
(
array
(
'trust_no'
=>
$trust_no
))
->
value
(
'liquidation_amount'
);
$subaccount
=
new
SubAccountMoney
();
if
(
$tempinfo
[
'flag2'
]
==
'买入委托'
){
$subm_res
=
$subaccount
->
up_moneylog
(
$sub_id
,
$affect_money
,
8
);
$position
=
true
;
}
if
(
$tempinfo
[
'flag2'
]
==
'卖出委托'
){
$position
=
Db
::
name
(
'stock_position'
)
->
where
([
'sub_id'
=>
$sub_id
,
'gupiao_code'
=>
$tempinfo
[
'gupiao_code'
],
'buying'
=>
0
])
->
find
();
$position
[
'canbuy_count'
]
=
$position
[
'canbuy_count'
]
+
$tempinfo
[
'trust_count'
];
$position
=
Db
::
name
(
'stock_position'
)
->
where
([
'sub_id'
=>
$sub_id
,
'gupiao_code'
=>
$tempinfo
[
'gupiao_code'
]])
->
update
(
$position
);
$subm_res
=
$subaccount
->
up_moneylog
(
$sub_id
,
$affect_money
,
9
);
}
$delivery
=
Db
::
name
(
'stock_delivery_order'
)
->
where
(
array
(
'trust_no'
=>
$trust_no
))
->
delete
();
if
(
$trust_res
&&
$subm_res
&&
$position
&&
$delivery
){
Db
::
commit
();
return
ajaxmsg
(
'撤单成功'
,
1
);
}
Db
::
rollback
();
return
ajaxmsg
(
'撤单失败'
,
0
);
}
/*
* 成交记录
*/
public
function
deal_stock
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
$sub_id
=
input
(
'id'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$startDate
=
input
(
'start_date'
,
''
);
$endDate
=
input
(
'end_date'
,
''
);
$page
=
input
(
'page'
,
1
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$submodel
=
new
StockSubAccount
;
$res
=
$submodel
->
get_account_by_id
(
$sub_id
);
if
(
!
$res
[
'account_id'
])
return
ajaxmsg
(
'不存在的子账号'
,
0
);
$deal_stack
=
new
Deal_stock
();
$data
=
$deal_stack
->
get_deal_stock
(
$sub_id
,
$startDate
,
$endDate
);
if
(
!
$data
)
return
ajaxmsg
(
'没有数据'
,
0
);
return
ajaxmsg
(
'操作成功'
,
1
,
$data
);
}
/*
* 交割记录
*/
public
function
delivery
()
{
$token
=
$this
->
request
->
param
(
"token"
);
$mid
=
isLogin
(
$token
);
if
(
!
$mid
)
return
json
([
'status'
=>
0
,
'message'
=>
'登陆后才能进行查看'
]);
$sub_id
=
input
(
'id'
,
''
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$startDate
=
input
(
'start_date'
,
''
);
$endDate
=
input
(
'end_date'
,
''
);
$page
=
input
(
'page'
,
1
,
[
'trim'
,
FILTER_SANITIZE_NUMBER_INT
]);
$submodel
=
new
StockSubAccount
;
$res
=
$submodel
->
get_account_by_id
(
$sub_id
);
if
(
!
$res
[
'account_id'
])
return
ajaxmsg
(
'不存在的子账号'
,
0
);
$deal_stack
=
new
Delivery
;
$data
=
$deal_stack
->
get_delivery_order
(
$sub_id
,
$startDate
,
$endDate
);
if
(
!
$data
)
return
ajaxmsg
(
'没有数据'
,
0
);
return
ajaxmsg
(
'操作成功'
,
1
,
$data
);
}
}
\ No newline at end of file
application/market/model/Position.php
View file @
c16957ce
...
@@ -200,6 +200,24 @@ class Position extends Model{
...
@@ -200,6 +200,24 @@ class Position extends Model{
$res
[
'profit_rate'
]
=
round
(
$res
[
'ck_profit'
]
/
(
$res
[
'buy_average_price'
]
*
$res
[
'canbuy_count'
])
*
100
,
2
);
//盈亏比例
$res
[
'profit_rate'
]
=
round
(
$res
[
'ck_profit'
]
/
(
$res
[
'buy_average_price'
]
*
$res
[
'canbuy_count'
])
*
100
,
2
);
//盈亏比例
return
$res
;
return
$res
;
}
}
/*
* 返回子账号和股票代码对应的持仓
* $sub_id 子账号
* $code 股票代码
*/
public
static
function
getCodePosition
(
$sub_id
,
$code
){
$res
=
Db
::
name
(
'stock_position'
)
->
where
([
'sub_id'
=>
$sub_id
,
'gupiao_code'
=>
$code
])
->
where
([
'buying'
=>
0
])
->
find
();
if
(
empty
(
$res
)){
return
false
;}
$info
=
z_market
(
$code
);
$res
[
'now_price'
]
=
$info
[
"current_price"
];
$res
[
'market_value'
]
=
$info
[
"current_price"
]
*
$res
[
'canbuy_count'
];
//最新市值
$res
[
'ck_profit'
]
=
round
((
$info
[
"current_price"
]
-
$res
[
'buy_average_price'
])
*
$res
[
'canbuy_count'
],
2
);
//参考浮动盈亏
$res
[
'profit_rate'
]
=
round
(
$res
[
'ck_profit'
]
/
(
$res
[
'buy_average_price'
]
*
$res
[
'canbuy_count'
])
*
100
,
2
);
//盈亏比例
return
$res
;
}
/*
/*
* 返回子账号和股票代码对应持仓的可卖数量
* 返回子账号和股票代码对应持仓的可卖数量
* $sub_id 子账号
* $sub_id 子账号
...
@@ -316,9 +334,9 @@ class Position extends Model{
...
@@ -316,9 +334,9 @@ class Position extends Model{
* $user 证券账户
* $user 证券账户
* $soure 证券来源
* $soure 证券来源
*/
*/
public
function
add_m_position
(
$stockinfo
,
$count
,
$sub_id
,
$lid
,
$user
,
$soure
,
$ck_price
,
$model
,
$Trust_no
){
public
function
add_m_position
(
$stockinfo
,
$count
,
$sub_id
,
$lid
,
$user
,
$soure
,
$ck_price
,
$model
,
$Trust_no
=
0
){
$position_res
=
$this
->
get_code_p
osition
(
$sub_id
,
$stockinfo
[
"code"
]);
$position_res
=
self
::
getCodeP
osition
(
$sub_id
,
$stockinfo
[
"code"
]);
if
(
empty
(
$position_res
)){
if
(
empty
(
$position_res
)){
if
(
$model
==
2
){
if
(
$model
==
2
){
$data
=
array
();
$data
=
array
();
...
@@ -326,6 +344,7 @@ class Position extends Model{
...
@@ -326,6 +344,7 @@ class Position extends Model{
$data
[
0
][
'lid'
]
=
$lid
;
$data
[
0
][
'lid'
]
=
$lid
;
$data
[
0
][
'soruce'
]
=
$soure
;
$data
[
0
][
'soruce'
]
=
$soure
;
$data
[
0
][
'login_name'
]
=
$user
;
$data
[
0
][
'login_name'
]
=
$user
;
$data
[
0
][
'market'
]
=
toMarket
(
$stockinfo
[
"code"
]);
$data
[
0
][
'gupiao_code'
]
=
$stockinfo
[
"code"
];
$data
[
0
][
'gupiao_code'
]
=
$stockinfo
[
"code"
];
$data
[
0
][
'gupiao_name'
]
=
$stockinfo
[
"name"
];
$data
[
0
][
'gupiao_name'
]
=
$stockinfo
[
"name"
];
$data
[
0
][
'count'
]
=
$count
;
$data
[
0
][
'count'
]
=
$count
;
...
@@ -338,7 +357,7 @@ class Position extends Model{
...
@@ -338,7 +357,7 @@ class Position extends Model{
$data
[
0
][
'market_value'
]
=
$stockinfo
[
"current_price"
]
*
$count
;
//最新市值
$data
[
0
][
'market_value'
]
=
$stockinfo
[
"current_price"
]
*
$count
;
//最新市值
$data
[
0
][
'ck_profit'
]
=
round
((
$stockinfo
[
"current_price"
]
-
$ck_price
)
*
$count
,
3
);
//参考浮动盈亏
$data
[
0
][
'ck_profit'
]
=
round
((
$stockinfo
[
"current_price"
]
-
$ck_price
)
*
$count
,
3
);
//参考浮动盈亏
$data
[
0
][
'profit_rate'
]
=
round
(
$data
[
0
][
'ck_profit'
]
/
(
$ck_price
*
$count
)
*
100
,
2
);
//盈亏比例
$data
[
0
][
'profit_rate'
]
=
round
(
$data
[
0
][
'ck_profit'
]
/
(
$ck_price
*
$count
)
*
100
,
2
);
//盈亏比例
$data
[
0
][
'trust_no'
]
=
$Trust_no
;
//盈亏比例
//
$data[0]['trust_no'] = $Trust_no;//盈亏比例
$data
[
0
][
'buying'
]
=
0
;
//买入成功
$data
[
0
][
'buying'
]
=
0
;
//买入成功
$data
[
0
][
'selling'
]
=
0
;
//1、在途卖出
$data
[
0
][
'selling'
]
=
0
;
//1、在途卖出
$data
[
0
][
'gudong_code'
]
=
""
;
//股东代码 无法模拟暂时空
$data
[
0
][
'gudong_code'
]
=
""
;
//股东代码 无法模拟暂时空
...
@@ -391,6 +410,60 @@ class Position extends Model{
...
@@ -391,6 +410,60 @@ class Position extends Model{
return
$result
;
return
$result
;
}
}
/*
* 存储模拟持仓记录
* $data 持仓数据
* $sub_id 子账号
* $lid 安全模式id号
* $user 证券账户
* $soure 证券来源
*/
public
static
function
addPosition
(
$code
,
$market
,
$count
,
$sub_id
,
$lid
,
$user
,
$soure
,
$ck_price
,
$Trust_no
)
{
//if(!$count) return false;
//$canbuy = self::getCanbuyCount($sub_id,$code);
$position
=
self
::
getCodePosition
(
$sub_id
,
$code
);
$canbuy_count
=
$position
[
'canbuy_count'
]
+
$count
;
$stockinfo
=
z_market
(
$code
,
$market
);
$data
=
array
();
$data
[
0
][
'sub_id'
]
=
$sub_id
;
$data
[
0
][
'lid'
]
=
$lid
;
$data
[
0
][
'soruce'
]
=
$soure
;
$data
[
0
][
'login_name'
]
=
$user
;
$data
[
0
][
'gupiao_code'
]
=
$stockinfo
[
"code"
];
$data
[
0
][
'gupiao_name'
]
=
$stockinfo
[
"name"
];
$data
[
0
][
'count'
]
=
$count
;
$data
[
0
][
'stock_count'
]
=
$position
[
'stock_count'
]
+
$count
;
$data
[
0
][
'canbuy_count'
]
=
$position
[
'canbuy_count'
]
+
$count
;
$data
[
0
][
'ck_price'
]
=
self
::
calculate
(
$sub_id
,
$code
,
'price'
);
//参考成本价
dump
(
$data
[
0
][
'ck_price'
]);
die
;
$data
[
0
][
'buy_average_price'
]
=
self
::
calculate
(
$sub_id
,
$code
,
'average'
);
//买入均价
$data
[
0
][
'ck_profit_price'
]
=
''
;
//参考盈亏成本价
$data
[
0
][
'now_price'
]
=
$stockinfo
[
"current_price"
];
//'当前价'
$data
[
0
][
'market_value'
]
=
$stockinfo
[
"current_price"
]
*
$count
;
//最新市值
$data
[
0
][
'ck_profit'
]
=
$count
>
0
?
bcmul
(
strval
(
$stockinfo
[
"current_price"
]
-
$ck_price
),
strval
(
$count
),
2
)
:
0
;
//参考浮动盈亏
$data
[
0
][
'profit_rate'
]
=
$count
>
0
&&
$ck_price
>
0
?
bcdiv
(
strval
(
$data
[
0
][
'ck_profit'
]),
strval
(
$ck_price
*
$count
*
100
),
2
)
:
0
;
//盈亏比例
$data
[
0
][
'buying'
]
=
0
;
//买入成功
$data
[
0
][
'selling'
]
=
0
;
//1、在途卖出
$data
[
0
][
'gudong_code'
]
=
""
;
//股东代码 无法模拟暂时空
$data
[
0
][
'type'
]
=
$stockinfo
[
"exchange_code"
];
//帐号类别
$data
[
0
][
'market'
]
=
toMarket
(
$code
);
//股票类别
$data
[
0
][
'jigou_type'
]
=
1
;
$data
[
0
][
'jiyisuo'
]
=
toMarket
(
$code
)
==
"HK"
?
"港交所"
:
toMarket
(
$code
)
==
'SZ'
?
"深交所"
:
"上交所"
;
//交易所
$data
[
0
][
'info'
]
=
""
;
/***********************************************************************************/
if
(
TRUST_MODEL_TIME
===
1
){
// 交易模式为T+1时,不能立即更新可卖数量
unset
(
$data
[
0
][
'canbuy_count'
]);
}
/***********************************************************************************/
if
(
!
empty
(
$position
)){
$result
=
self
::
where
([
'id'
=>
$position
[
'id'
]])
->
update
(
$data
[
0
]);
}
else
{
$result
=
self
::
strict
(
false
)
->
insert
(
$data
[
0
],
true
);
}
return
$result
;
}
public
static
function
calculate
(
$sub_id
,
$code
,
$variable
)
public
static
function
calculate
(
$sub_id
,
$code
,
$variable
)
{
{
if
(
!
$sub_id
||
!
$code
||
!
$variable
)
return
0
;
if
(
!
$sub_id
||
!
$code
||
!
$variable
)
return
0
;
...
...
application/stock/admin/Operate.php
View file @
c16957ce
...
@@ -203,7 +203,7 @@ class Operate extends Admin{
...
@@ -203,7 +203,7 @@ class Operate extends Admin{
$model
=
new
SubMoneyRecord
();
$model
=
new
SubMoneyRecord
();
$xlsData
=
$model
->
get_record
(
$map
,
$order
,
$listRows
);
$xlsData
=
$model
->
get_record
(
$map
,
$order
,
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'create_time'
]
=
date
(
'Y-m-d h:i'
,
$value
[
'create_time'
]);
$xlsData
->
items
[
$key
][
'create_time'
]
=
date
(
'Y-m-d h:i'
,
$value
[
'create_time'
]);
};
};
$title
=
"资金流水"
;
$title
=
"资金流水"
;
$arrHeader
=
array
(
'子账户ID'
,
'子账户'
,
'影响金额'
,
'账户余额'
,
'资金类型'
,
'详情'
,
'变动日期'
);
$arrHeader
=
array
(
'子账户ID'
,
'子账户'
,
'影响金额'
,
'账户余额'
,
'资金类型'
,
'详情'
,
'变动日期'
);
...
@@ -334,7 +334,7 @@ class Operate extends Admin{
...
@@ -334,7 +334,7 @@ class Operate extends Admin{
->
where
(
$map
)
->
where
(
$map
)
->
order
(
$order
)
->
paginate
(
$listRows
);
->
order
(
$order
)
->
paginate
(
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'deal_date'
]
=
date
(
'Y-m-d'
,
$value
[
'deal_date'
]);
$xlsData
->
items
[
$key
][
'deal_date'
]
=
date
(
'Y-m-d'
,
$value
[
'deal_date'
]);
};
};
$title
=
"历史成交"
;
$title
=
"历史成交"
;
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'成交日期'
,
'成交时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交编号'
,
'成交价格'
,
'成交数量'
,
'成交金额'
,
'买卖标志'
,
'状态说明'
);
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'成交日期'
,
'成交时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交编号'
,
'成交价格'
,
'成交数量'
,
'成交金额'
,
'买卖标志'
,
'状态说明'
);
...
@@ -433,7 +433,7 @@ class Operate extends Admin{
...
@@ -433,7 +433,7 @@ class Operate extends Admin{
->
order
(
$order
)
->
order
(
$order
)
->
paginate
(
$listRows
);
->
paginate
(
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
$xlsData
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
};
};
$title
=
"历史委托"
;
$title
=
"历史委托"
;
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'委托日期'
,
'委托时间'
,
'委托编号'
,
'委托价格'
,
'委托数量
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'委托日期'
,
'委托时间'
,
'委托编号'
,
'委托价格'
,
'委托数量
...
@@ -529,7 +529,7 @@ ume','amount','cancel_order_count','status');
...
@@ -529,7 +529,7 @@ ume','amount','cancel_order_count','status');
->
where
(
$map
)
->
where
(
$map
)
->
order
(
$order
)
->
paginate
(
$listRows
);
->
order
(
$order
)
->
paginate
(
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
$xlsData
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
};
};
//$type_arr=['5'=>'免息配资','1'=>'按天配资','2'=>'按周配资','3'=>'按月配资','4'=>'免费体验','6'=>'模拟操盘'];
//$type_arr=['5'=>'免息配资','1'=>'按天配资','2'=>'按周配资','3'=>'按月配资','4'=>'免费体验','6'=>'模拟操盘'];
...
@@ -637,7 +637,7 @@ ume','amount','cancel_order_count','status');
...
@@ -637,7 +637,7 @@ ume','amount','cancel_order_count','status');
->
order
(
$order
)
->
order
(
$order
)
->
paginate
(
$listRows
);
->
paginate
(
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
$xlsData
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
};
};
$title
=
"当日暂时未成交委托"
;
$title
=
"当日暂时未成交委托"
;
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'委托日期'
,
'委托时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交数量'
,
'成交金额'
,
'撤单数量'
,
'状态说明'
);
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'委托日期'
,
'委托时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交数量'
,
'成交金额'
,
'撤单数量'
,
'状态说明'
);
...
@@ -810,7 +810,7 @@ ume','amount','cancel_order_count','status');
...
@@ -810,7 +810,7 @@ ume','amount','cancel_order_count','status');
->
where
(
$map
)
->
where
(
$map
)
->
order
(
$order
)
->
paginate
(
$listRows
);
->
order
(
$order
)
->
paginate
(
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'deal_date'
]
=
date
(
'Y-m-d'
,
$value
[
'deal_date'
]);
$xlsData
->
items
[
$key
][
'deal_date'
]
=
date
(
'Y-m-d'
,
$value
[
'deal_date'
]);
};
};
$title
=
"当日成交"
;
$title
=
"当日成交"
;
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'成交日期'
,
'成交时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交编号'
,
'成交价格'
,
'成交数量'
,
'成交金额'
,
'买卖标志'
,
'状态说明'
);
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'成交日期'
,
'成交时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交编号'
,
'成交价格'
,
'成交数量'
,
'成交金额'
,
'买卖标志'
,
'状态说明'
);
...
@@ -1032,7 +1032,7 @@ ume','amount','cancel_order_count','status');
...
@@ -1032,7 +1032,7 @@ ume','amount','cancel_order_count','status');
->
where
(
't.status'
,
'='
,
'已撤'
)
->
where
(
't.status'
,
'='
,
'已撤'
)
->
order
(
$order
)
->
paginate
(
$listRows
);
->
order
(
$order
)
->
paginate
(
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
$xlsData
->
items
[
$key
][
'trust_date'
]
=
date
(
'Y-m-d'
,
$value
[
'trust_date'
]);
};
};
$title
=
"撤单查询"
;
$title
=
"撤单查询"
;
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'委托日期'
,
'委托时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交数量'
,
'成交金额'
,
'撤单数量'
,
'状态说明'
);
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'委托日期'
,
'委托时间'
,
'委托编号'
,
'委托价格'
,
'委托数量'
,
'成交数量'
,
'成交金额'
,
'撤单数量'
,
'状态说明'
);
...
@@ -1135,7 +1135,7 @@ ume','amount','cancel_order_count','status');
...
@@ -1135,7 +1135,7 @@ ume','amount','cancel_order_count','status');
->
order
(
$order
)
->
order
(
$order
)
->
paginate
(
$listRows
);
->
paginate
(
$listRows
);
foreach
(
$xlsData
as
$key
=>
$value
){
foreach
(
$xlsData
as
$key
=>
$value
){
$xlsData
->
items
->
items
[
$key
][
'deal_date'
]
=
date
(
'Y-m-d'
,
$value
[
'deal_date'
]);
$xlsData
->
items
[
$key
][
'deal_date'
]
=
date
(
'Y-m-d'
,
$value
[
'deal_date'
]);
};
};
$title
=
"交割单"
;
$title
=
"交割单"
;
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'成交日期'
,
'业务名称'
,
'成交价格'
,
'成交数量'
,
'剩余数量'
,
'成交金额'
,
'清算金额'
,
'剩余金额'
,
'印花税'
,
'过户费'
,
'净佣金'
,
'委托编号'
,
'成交编号'
);
$arrHeader
=
array
(
'子账户ID'
,
'手机号'
,
'子账户'
,
'交易账户名'
,
'证券代码'
,
'证券名称'
,
'成交日期'
,
'业务名称'
,
'成交价格'
,
'成交数量'
,
'剩余数量'
,
'成交金额'
,
'清算金额'
,
'剩余金额'
,
'印花税'
,
'过户费'
,
'净佣金'
,
'委托编号'
,
'成交编号'
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment