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
98775249
Commit
98775249
authored
Jun 19, 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
a3b91047
6e986590
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
277 additions
and
10 deletions
+277
-10
application/common.php
application/common.php
+37
-3
application/market/home/Trade.php
application/market/home/Trade.php
+1
-1
application/market/model/Position.php
application/market/model/Position.php
+22
-0
application/market/model/Trust.php
application/market/model/Trust.php
+182
-5
application/market/validate/Trade.php
application/market/validate/Trade.php
+34
-0
application/stock/admin/Subaccount.php
application/stock/admin/Subaccount.php
+1
-1
No files found.
application/common.php
View file @
98775249
...
...
@@ -2160,8 +2160,8 @@ if(!function_exists('get_between')) {
}
/*
* 通过API接口获取行情
*/
* 通过API接口获取行情
*/
if
(
!
function_exists
(
'getApiStock'
))
{
/**
* @param $code
...
...
@@ -2209,4 +2209,38 @@ if(!function_exists('get_between')) {
}
}
}
\ No newline at end of file
}
/*
* 计算佣金
*/
if
(
!
function_exists
(
'commission'
))
{
function
commission
(
$money
,
$scale
,
$min
){
$commission
=
round
((
$money
*
$scale
)
/
10000
,
2
);
//佣金
$commission
=
$commission
<
$min
?
$min
:
$commission
;
return
$commission
;
}
}
/*
* 计算印花税
*/
if
(
!
function_exists
(
'stamps'
))
{
function
stamps
(
$money
){
$stamps
=
round
(
$money
*
config
(
'stamp_duty'
)
/
1000
,
2
);
return
$stamps
??
0
;
}
}
/*
* 计算过户费
*/
if
(
!
function_exists
(
'transfer'
))
{
function
transfer
(
$money
){
if
(
!
config
(
'transfer_fee'
)
||
config
(
'transfer_fee'
)
==
0
){
//当该值未设置或值为0时表示关闭,则返回0
return
0
;
}
elseif
(
config
(
'transfer_fee'
)
>
1
){
//当值大于1时表示具体数值,则返回该数值
return
config
(
'transfer_fee'
);
}
else
{
$transfer
=
round
((
$money
/
1000
)
*
config
(
'transfer_fee'
),
2
)
??
0
;
}
return
$transfer
;
}
}
application/market/home/Trade.php
View file @
98775249
This diff is collapsed.
Click to expand it.
application/market/model/Position.php
View file @
98775249
...
...
@@ -391,5 +391,27 @@ class Position extends Model{
return
$result
;
}
public
static
function
calculate
(
$sub_id
,
$code
,
$variable
)
{
if
(
!
$sub_id
||
!
$code
||
!
$variable
)
return
0
;
switch
(
$variable
)
{
case
'price'
:
$order
=
Db
::
name
(
'stock_delivery_order'
)
->
where
([
'sub_id'
=>
$sub_id
,
'gupiao_code'
=>
$code
,
'status'
=>
1
,
'business_name'
=>
'证券买入'
]);
$amount
=
$order
->
sum
(
'liquidation_amount'
);
$volume
=
$order
->
sum
(
'volume'
);
$result
=
bcdiv
(
strval
(
$amount
),
strval
(
$volume
),
3
);
break
;
case
'average'
:
$order
=
Db
::
name
(
'stock_delivery_order'
)
->
where
([
'sub_id'
=>
$sub_id
,
'gupiao_code'
=>
$code
,
'status'
=>
1
,
'business_name'
=>
'证券买入'
]);
$amount
=
$order
->
sum
(
'residual_quantity'
);
$volume
=
$order
->
sum
(
'volume'
);
$result
=
bcdiv
(
strval
(
$amount
),
strval
(
$volume
),
3
);
break
;
default
:
$result
=
0
;
break
;
}
return
$result
;
}
}
\ No newline at end of file
application/market/model/Trust.php
View file @
98775249
...
...
@@ -15,6 +15,7 @@ class Trust extends Model{
protected
$table
=
'__STOCK_TRUST__'
;
// 自动写入时间戳
protected
$autoWriteTimestamp
=
true
;
/*
* 存储委托记录
* $data 持仓数据
...
...
@@ -224,11 +225,11 @@ class Trust extends Model{
* 返回子账号当日委托
* $sub_id 子账号
*/
public
function
get_trust_day
(
$sub_id
){
$time
=
strtotime
(
date
(
'y-m-d'
,
time
()));
$res
=
Db
::
name
(
'stock_trust'
)
->
where
([
'sub_id'
=>
$sub_id
,
'trust_date'
=>
$time
])
->
select
();
return
$res
;
}
public
function
get_trust_day
(
$sub_id
){
$time
=
strtotime
(
date
(
'y-m-d'
,
time
()));
$res
=
Db
::
name
(
'stock_trust'
)
->
where
([
'sub_id'
=>
$sub_id
,
'trust_date'
=>
$time
])
->
select
();
return
$res
;
}
/*
* 返回子账号委托
* $sub_id 子账号
...
...
@@ -291,4 +292,180 @@ class Trust extends Model{
return
$result
;
}
// 买入时检查
public
function
executeData
(
$data
,
$trustModel
)
{
//检测是否为禁买股票
$res
=
self
::
checkStatus
(
$data
[
'code'
]);
if
(
$res
)
return
[
'status'
=>
0
,
'message'
=>
'该股票禁止交易'
];
//判断购买数量书否正确
if
((
$data
[
'count'
]
%
100
)
!=
0
)
return
[
'status'
=>
0
,
'message'
=>
'交易数量必须是100的整数倍'
];
$bs_res
=
Db
::
name
(
'stock_borrow'
)
->
where
(
array
(
'stock_subaccount_id'
=>
$data
[
'subid'
]))
->
find
();
if
(
empty
(
$bs_res
))
{
return
[
'status'
=>
0
,
'message'
=>
'没有对应的配资'
];
}
if
(
$bs_res
[
'end_time'
]
<=
time
()){
return
[
'status'
=>
0
,
'message'
=>
'该账户已逾期,请先续期'
];
}
if
(
$trustModel
==
'buy'
){
return
self
::
trustBuy
(
$data
,
$bs_res
);
}
if
(
$trustModel
==
'sell'
){
return
self
::
trustSell
(
$data
);
}
}
public
function
trustBuy
(
$data
,
$bs_res
)
{
//查询股票最新行情
$Qdata
=
z_market
(
$data
[
'code'
]);
$price
=
$data
[
'price'
]
<=
0
?
$Qdata
[
'Price'
]
:
$data
[
'price'
];
//判断股票价格是否符号购买条件
if
(
config
(
'stock_buy_price'
)
>
0
)
{
if
(
$price
<
config
(
'stock_buy_price'
))
{
return
[
'status'
=>
0
,
'message'
=>
'系统设定低于'
.
config
(
'stock_buy_price'
)
.
'元一股的股票不能购买'
];
}
}
//检查卖量是否正常
$trade_money
=
self
::
checkTranMoney
(
$Qdata
,
$data
[
'count'
],
$price
);
if
(
$trade_money
<=
0
)
return
[
'status'
=>
0
,
'message'
=>
'卖量不足或网络错误'
];
//判断卖量和股票限额
$res
=
self
::
checkPositionSum
(
$Qdata
,
$data
[
'sub_id'
],
$data
[
'code'
],
$trade_money
);
if
(
isset
(
$res
[
'status'
]))
{
return
[
'status'
=>
0
,
'message'
=>
'该股票超过了单支股票最大购买限额'
];
}
//检查子账户余额
$moneymodel
=
new
SubAccountMoney
();
$moneyinfo
=
$moneymodel
->
get_account_money
(
$data
[
'sub_id'
]);
if
(
$moneyinfo
[
'avail'
]
<
$trade_money
){
return
[
'status'
=>
0
,
'message'
=>
'购买资金不足'
];
}
// 免息配资结束当天不能买入
if
(
$bs_res
[
'type'
]
==
5
)
{
if
(
$bs_res
[
'end_time'
]
<
time
()
+
23
*
3600
)
{
return
[
'status'
=>
0
,
'message'
=>
'免息配资结束当天不能买入'
];
}
}
// 设置试用配资第二天不能再买入
if
(
$bs_res
[
'type'
]
==
4
)
{
if
(
$bs_res
[
'end_time'
]
<
time
()
+
23
*
3600
)
{
return
[
'status'
=>
0
,
'message'
=>
'试用配资结束当天不能买入'
];
}
}
$risk
=
new
StockSubAccountRisk
;
$risk_res
=
$risk
->
get_risk
(
$data
[
'sub_id'
]);
if
(
$risk_res
[
'prohibit_open'
]
==
0
){
return
[
'status'
=>
0
,
'message'
=>
'您被禁止开新仓,请联系管理员咨询原因'
];
}
$retData
[
'trade_money'
]
=
$trade_money
;
$retData
[
'moneyinfo'
]
=
$moneyinfo
;
$retData
[
'price'
]
=
$price
;
return
$retData
;
}
//卖出时检查
public
function
trustSell
(
$data
)
{
//查询股票最新行情
$Qdata
=
z_market
(
$data
[
'code'
]);
$price
=
$data
[
'price'
]
<=
0
?
$Qdata
[
'Price'
]
:
$data
[
'price'
];
if
(
config
(
'site_trade_sell'
)
==
0
)
{
return
array
(
'status'
=>
0
,
'message'
=>
'系统设置不允许卖出股票'
);
}
//检测股票可卖数量
$poscount
=
Position
::
get_canbuy_count
(
$data
[
'sub_id'
],
$data
[
'code'
]);
if
(
$poscount
<
$data
[
'count'
])
{
return
[
'status'
=>
0
,
'message'
=>
'可卖股票不足'
];
}
//当股票跌停时买一至买五价格为空
if
(
intval
(
$Qdata
[
"Bp1"
])
<=
0
||
intval
(
$Qdata
[
'Bv1'
]
*
100
)
<
$data
[
'count'
]){
return
[
'status'
=>
0
,
'message'
=>
'当前买盘不足,无法即时成交!'
];
}
//检查子账户余额
$moneymodel
=
new
SubAccountMoney
();
$moneyinfo
=
$moneymodel
->
get_account_money
(
$data
[
'sub_id'
]);
$trade_money
=
0
;
if
(
$data
[
'price'
]
>
0
&&
$data
[
'model'
]
==
1
){
//model = 1 是委托状态
$trade_money
=
intval
(
$data
[
'count'
])
*
intval
(
$data
[
'price'
]);
}
else
{
$price
=
$Qdata
[
'Price'
];
//如果没有委托价格使用下面的公式
$trade_money
=
intval
(
$data
[
'count'
])
*
intval
(
$price
);
}
$retData
[
'trade_money'
]
=
$trade_money
;
$retData
[
'moneyinfo'
]
=
$moneyinfo
;
$retData
[
'price'
]
=
$price
;
return
$retData
;
}
/*查询禁买股票列表*/
public
function
checkStatus
(
$code
)
{
$res
=
Db
::
name
(
'stock_list'
)
->
where
([
'code'
=>
$code
,
'status'
=>
0
])
->
find
();
return
$res
;
}
/*
* 验证卖量是否正常
*/
public
function
checkTranMoney
(
$Qdata
,
$count
,
$price
)
{
$trade_money
=
0
;
if
(
!
(
empty
(
$price
)))
{
$trade_money
=
$count
*
$price
;
}
else
{
$price
=
0
;
$v_arr
[
1
]
=
$Qdata
[
'Sv1'
]
*
100
;
$v_arr
[
2
]
=
$Qdata
[
'Sv2'
]
*
100
;
$v_arr
[
3
]
=
$Qdata
[
'Sv3'
]
*
100
;
$v_arr
[
4
]
=
$Qdata
[
'Sv4'
]
*
100
;
$v_arr
[
5
]
=
$Qdata
[
'Sv5'
]
*
100
;
$p_arr
[
1
]
=
$Qdata
[
'Sp1'
];
$p_arr
[
2
]
=
$Qdata
[
'Sp2'
];
$p_arr
[
3
]
=
$Qdata
[
'Sp3'
];
$p_arr
[
4
]
=
$Qdata
[
'Sp4'
];
$p_arr
[
5
]
=
$Qdata
[
'Sp5'
];
$tmd
=
0
;
foreach
(
$v_arr
as
$key
=>
$v
){
$tmd
=
$tmd
+
$v
;
if
(
$count
<=
$tmd
){
$sum_money
=
0
;
$sum_count
=
$count
;
for
(
$i
=
1
;
$i
<
$key
;
$i
++
){
$sum_money
+=
$v_arr
[
$i
]
*
$p_arr
[
$i
];
$sum_count
-=
$v_arr
[
$i
];
}
$trade_money
=
$sum_money
+
(
$sum_count
*
$p_arr
[
$key
]);
$price
=
round
(
$trade_money
/
$count
,
2
);
$trade_money
=
$count
*
$price
;
break
;
}
}
}
return
$trade_money
??
0
;
}
/*
* 返回子账号单只股票持仓数量
* $subid 子账号 $code 股票代码
*/
public
function
checkPositionSum
(
$Qdata
,
$subid
,
$code
,
$trade_money
)
{
$res
=
Db
::
name
(
'stock_list'
)
->
where
([
'code'
=>
$code
,
'status'
=>
1
])
->
find
();
//判断是否超过该只股票限额
$pos
=
Db
::
name
(
'stock_position'
)
->
where
([
'sub_id'
=>
$subid
,
'gupiao_code'
=>
$code
,
'buying'
=>
0
])
->
sum
(
'stock_count'
);
if
(
isset
(
$res
[
'quota'
])
&&
(
$res
[
'quota'
]
<
((
$pos
*
$Qdata
[
'Price'
])
+
$trade_money
)))
{
return
[
'status'
=>
0
,
'message'
=>
'该股票超过了单支股票最大购买限额'
];
}
return
;
}
}
\ No newline at end of file
application/market/validate/Trade.php
0 → 100644
View file @
98775249
<?php
namespace
app\apicom\validate
;
use
think\Validate
;
class
Trade
extends
Validate
{
protected
$rule
=
[
'id'
=>
'require|number'
,
'code'
=>
'require|number|length:6'
,
'market'
=>
'require|in:SH,SZ,BJ'
,
'count'
=>
'require|number|gt:0'
,
'price'
=>
'require'
,
];
protected
$message
=
[
'id.require'
=>
'参数格式错误'
,
'code.require'
=>
'参数格式错误'
,
'code.number'
=>
'参数格式错误'
,
'code.length'
=>
'参数格式错误'
,
'count.require'
=>
'请填写委托股数'
,
'count.number'
=>
'委托股数格式错误'
,
'count.gt'
=>
'委托股数格式错误'
,
'market.require'
=>
'参数格式错误'
,
'market.in'
=>
'参数格式错误'
,
];
protected
$scene
=
[
'trade'
=>
[
'id'
,
'code'
,
'market'
,
'count'
,
'price'
],
];
}
application/stock/admin/Subaccount.php
View file @
98775249
...
...
@@ -117,7 +117,7 @@ class Subaccount extends Admin
$data
=
$this
->
request
->
post
();
//获取证券账户信息
$commission
=
AccountModel
::
getAccountByID
(
$data
[
'account_id'
]);
if
(
$commission
[
'broker'
]
==
-
1
){
//如果选择的券商类型为-1
if
(
$commission
[
'broker'
]
<
0
){
//如果选择的券商类型为-1
$data
[
'relation_type'
]
=
0
;
//选择的账户模式为模拟账户
}
else
{
$data
[
'relation_type'
]
=
1
;
//选择的账户模式为实盘账户
...
...
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