Last active
June 22, 2018 06:22
-
-
Save dzwillpower/10221546 to your computer and use it in GitHub Desktop.
代码片段
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** 注册外接设别插拔的广播*/ | |
IntentFilter localIntentFilter = new IntentFilter(); | |
localIntentFilter.addAction("android.intent.action.MEDIA_UNMOUNTED"); | |
localIntentFilter.addAction("android.intent.action.MEDIA_MOUNTED"); | |
localIntentFilter.addAction("android.intent.action.MEDIA_REMOVED"); | |
localIntentFilter.addAction("android.intent.action.MEDIA_BAD_REMOVAL"); | |
localIntentFilter.addDataScheme("file"); | |
registerReceiver(this.mReceiver, localIntentFilter); | |
/** Stirng 中空格的写法 */ | |
<string name="channel_all">全    部</string> |
Orange881
commented
Jun 22, 2018
Calculation();
}
// 执行计算
private function Calculation()
{
DB::connection('mysql_read')->table('transaction_configs')->whereBetween('created_at',[$this->lastHour(true),$this->lastHour(false)])->orderBy('id')->chunk(1000, function( $list ) {
foreach( $list as $val ){
if( bccomp( $val->service,0,8) > 0 ){
$rebate = $this->BidPrice($val);
Log::info('手续费返还这算 price___'.$rebate);
if( bccomp($rebate,0,8) > 0 ){
//$this->toRecharge($val,$rebate); // 每小时统计充值
$this->testRecord($val,$rebate); //测试只统计不充值
}
}
}
});
}
// 测试只记录
private function testRecord( $transaction,$rebate )
{
$nowTime = Carbon::now();
$user = User::find( $transaction->user_id );
$parentUser = User::find( $user->pid );
$parentBalance = Finance::firstOrCreate(['user_id'=>$user->pid,'currency_id'=>config('services.im.id')]);
$userBalance = Finance::firstOrCreate(['user_id'=>$user->id,'currency_id'=>config('services.im.id')]);
$userRebate = $this->rebateNum( $userBalance->balance,true,$rebate );
$returnLog[] = [
'user_id' => $user->id,
'source_uid' => $user->id,
'transaction_id' => $transaction->id,
'rebate_balance' => $userRebate,
'status' => ReturnFee::Status_Issued,
'created_at' => $nowTime,
'updated_at' => $nowTime
];
# 返利上级用户
$parentReturnLog = [
'user_id' => $parentUser->id,
'source_uid' => $user->id,
'transaction_id' => $transaction->id,
'rebate_balance' => 0,
'created_at' => $nowTime,
'updated_at' => $nowTime
];
# 父级 imx 余额 小于
if( bccomp(10000,$parentBalance->balance,8) > 0 ){
$parentReturnLog['status'] = -1;
}else if( Carbon::parse($parentUser->created_at)->addMonth(3)->lt($nowTime) ){
$parentReturnLog['status'] = -2;
}else{
$parentRebate = $this->rebateNum( $parentBalance->balance,false,$rebate );
$financeLog[] = [
'user_id'=>$parentBalance->user_id,
'currency_id'=> config('services.im.id'),
'balance' => $parentRebate,
'type' => FinanceLog::Type_Expend,
'txid' => FinanceLog::Txid_FriendTrading,
'old_balance' => $parentBalance->balance,
'created_at' => $nowTime,
'updated_at' => $nowTime
];
$parentReturnLog['status'] = ReturnFee::Status_Issued;
$parentReturnLog['rebate_balance'] = $parentRebate;
}
$returnLog[] = $parentReturnLog;
ReturnFee::insert( $returnLog );
}
// 充值到账户并添加充值记录
private function toRecharge( $transaction,$rebate )
{
$user = User::find( $transaction->user_id );
$parentUser = User::find( $user->pid );
$parentBalance = Finance::firstOrCreate(['user_id'=>$user->pid,'currency_id'=>config('services.im.id')]);
$userBalance = Finance::firstOrCreate(['user_id'=>$user->id,'currency_id'=>config('services.im.id')]);
$transaction = DB::transaction(function () use ( $parentBalance, $userBalance,$rebate,$transaction,$user,$parentUser ) {
$nowTime = Carbon::now();
# 返利 交易用户
$userRebate = $this->rebateNum( $userBalance->balance,true,$rebate );
DB::update('update finances set balance = convert(balance + ?,decimal(38,8)) where id = ?', [$userRebate, $userBalance->id]);
$financeLog[] = [
'user_id'=>$userBalance->user_id,
'currency_id'=> config('services.im.id'),
'balance' => $userRebate,
'type' => FinanceLog::Type_Expend,
'txid' => FinanceLog::Txid_ReturnFee,
'old_balance' => $userBalance->balance,
'created_at' => $nowTime,
'updated_at' => $nowTime
];
$returnLog[] = [
'user_id' => $user->id,
'source_uid' => $user->id,
'transaction_id' => $transaction->id,
'rebate_balance' => $userRebate,
'status' => ReturnFee::Status_Issued,
'created_at' => $nowTime,
'updated_at' => $nowTime
];
# 返利上级用户
$parentReturnLog = [
'user_id' => $parentUser->id,
'source_uid' => $user->id,
'transaction_id' => $transaction->id,
'rebate_balance' => 0,
'created_at' => $nowTime,
'updated_at' => $nowTime
];
# 父级 imx 余额 小于
if( bccomp(10000,$parentBalance->balance,8) > 0 ){
$parentReturnLog['status'] = -1;
}else if( Carbon::parse($parentUser->created_at)->addMonth(3)->lt($nowTime) ){
$parentReturnLog['status'] = -2;
}else{
$parentRebate = $this->rebateNum( $parentBalance->balance,false,$rebate );
DB::update('update finances set balance = convert(balance + ?,decimal(38,8)) where id = ?', [$parentRebate, $parentBalance->id]);
$financeLog[] = [
'user_id'=>$parentBalance->user_id,
'currency_id'=> config('services.im.id'),
'balance' => $parentRebate,
'type' => FinanceLog::Type_Expend,
'txid' => FinanceLog::Txid_FriendTrading,
'old_balance' => $parentBalance->balance,
'created_at' => $nowTime,
'updated_at' => $nowTime
];
$parentReturnLog['status'] = ReturnFee::Status_Issued;
$parentReturnLog['rebate_balance'] = $parentRebate;
}
FinanceLog::insert( $financeLog );
$returnLog[] = $parentReturnLog;
ReturnFee::insert( $returnLog );
});
}
// 折算价格
private function BidPrice( $transaction )
{
Log::info(var_export($transaction,1));
# 类型是 买 且对币是 imx
if( $transaction->type == Transaction::Type_Buy && $transaction->c_id == config('services.imx.id') ){
Log::info('1:'.$transaction->service);
return $transaction->service;
# 类型是 卖 且主币是 imx
}else if( $transaction->type == Transaction::Type_Sell && $transaction->m_id == config('services.imx.id') ){
Log::info('2:'.$transaction->service);
return $transaction->service;
}else {
//FIXME 未考虑 USDT-币 不存在的情况 上新币需兼顾这里
if( $transaction->m_id == config('services.im.id') ){
$usdtPrice = $this->avgPrice( $transaction->m_id,$transaction->c_id );
}else{
if( $transaction->type == Transaction::Type_Buy ){
$usdtPrice = $this->avgPrice( config('services.usdt.id'),$transaction->c_id );
}else{
$usdtPrice = $this->avgPrice( config('services.usdt.id'),$transaction->m_id );
}
}
$usdtCount = bcmul($transaction->service,$usdtPrice,8);
$imxPrice = $this->avgPrice( config('services.usdt.id'),config('services.im.id') );
Log::info('3:'.bcdiv($usdtCount,$imxPrice,8));
return bcdiv($usdtCount,$imxPrice,8);
}
}
// 币对的一小时平均成交价
private function avgPrice( $m_id,$c_id )
{
return Cache::remember('hour_fee_avg_price_' .$m_id.'_'.$c_id , 40, function () use ( $m_id,$c_id ) {
$info = DB::connection('mysql_read')->table('transaction_configs')->whereBetween('created_at',[$this->lastHour(true),$this->lastHour(false)])
->where( 'type',Transaction::Type_Buy )
->where( 'm_id',$m_id )->where( 'c_id',$c_id )
->selectRaw('SUM(count) as counts,SUM(price) as prices')
->first();
Log::info('m_id'.$m_id.' c_id '.$c_id.' '. $info->counts.'___'.$info->prices);
# 当前币对不存在交易时取该币对的最新成交价
if( empty($info->counts) ) {
$matchcoin = Matchcoin::where('mId',$m_id)->where('cId',$c_id)->first();
return Cache::get( 'matchcoin_price_new_' . $matchcoin->id );
}else{
return bcdiv($info->counts,$info->prices,8);
}
});
}
private function rebateNum($blance,$type,$rebate)
{
if( !$type ){
$rebate = bcmul($rebate,0.02,8);
Log::info('20% price'.$rebate);
}
$dobule = bcmul($blance,2,8);
# 超出所持有的两倍则以两倍返还
return bccomp($rebate,$dobule,8) >= 0 ? $dobule : $rebate;
}
// 前一个小时的开始结束时间
private function lastHour( $start = true)
{
$hour = date('H');
$hour = $hour > 0 ? $hour - 1 : $hour;
if( $start ){
return Carbon::parse($hour.':00:00');
}else{
return Carbon::parse($hour.':59:59');
}
}
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment