Skip to content

Instantly share code, notes, and snippets.

@dzwillpower
Last active June 22, 2018 06:22
Show Gist options
  • Save dzwillpower/10221546 to your computer and use it in GitHub Desktop.
Save dzwillpower/10221546 to your computer and use it in GitHub Desktop.
代码片段
/** 注册外接设别插拔的广播*/
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">全&#160;&#160;&#160;&#160;部</string>
@Orange881
Copy link

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