50,'first_recharge_bookcoin'=>9000,'secondChargeAmount'=>50,'second_recharge_bookcoin'=>9000], ['first_recharge_amount'=>50,'first_recharge_bookcoin'=>9000,'secondChargeAmount'=>30,'second_recharge_bookcoin'=>3000], ['first_recharge_amount'=>30,'first_recharge_bookcoin'=>3000,'secondChargeAmount'=>50,'second_recharge_bookcoin'=>9000], ['first_recharge_amount'=>30,'first_recharge_bookcoin'=>3000,'secondChargeAmount'=>30,'second_recharge_bookcoin'=>3000], ); $books = BookConfig::whereIn('is_on_shelf',[1,2])->get(); foreach ($books as $book){ if($book->charge_type == 'BOOK'){ continue; } foreach ($params as $param){ //dump($book->name); $this->simulationDeduction($book,$param); } } } public function simulationDeduction($book,$param){ $price_rate = 0.04;//默认4毛 echo('千字价位为:'.$price_rate); $give_bookcoin = 80; $prediction = array(); $prediction['bid'] = $book->bid; $seq=$book->vip_seq; $blance = 0; $prediction['first_recharge_amount'] = $param['first_recharge_amount']; $blance += $param['first_recharge_bookcoin'] + $give_bookcoin; $prediction['balance_after_first_recharge'] = $blance; //dump('首充金额:'.$prediction['first_recharge_amount'].'首充后余额:'.$blance.'首充章节'.$seq); while($blance>0) { $chapter = Chapter::getChapterByBidAndSeq($book->bid, $seq); if ($chapter) { $price = $this->getPrice($chapter,$price_rate); $real_fee = $chapter->size*$price_rate; if($price>$blance){break;} $blance -= $price; //dump("第{$seq}章节,共{$chapter->size}字数,应收{$real_fee},实际收费{$price},扣费后余额为{$blance}"); $seq++; } else { break; } } if($chapter){ $prediction['sec_chapter_id'] = $chapter->id; $prediction['sec_chapter_seq'] = $chapter->sequence; $prediction['sec_chapter_name'] = $chapter->name; $prediction['balance_before_sec_recharge'] = $blance; $prediction['sec_recharge_amount'] = $param['secondChargeAmount']; $blance += $param['second_recharge_bookcoin'] + $give_bookcoin; $prediction['balance_after_sec_recharge'] = $blance; //dump('二充金额:'.$prediction['sec_recharge_amount'].'二充前余额:'.$prediction['balance_before_sec_recharge'].'二充后余额:'.$blance.'二充章节'.$seq); while($blance>0) { $chapter = Chapter::getChapterByBidAndSeq($book->bid, $seq); if ($chapter) { $price = $this->getPrice($chapter,$price_rate); $real_fee = $chapter->size*$price_rate; if($price>$blance){break;} $blance -= $price; //dump("第{$seq}章节,共{$chapter->size}字数,应收{$real_fee},实际收费{$price},扣费后余额为{$blance}"); $seq++; } else { break; } } if($chapter){ $prediction['third_chapter_id'] = $chapter->id; $prediction['third_chapter_seq'] = $chapter->sequence; $prediction['third_chapter_name'] = $chapter->name; $prediction['balance_before_third_recharge'] = $blance; }else{ $prediction['third_chapter_id'] = ''; $prediction['third_chapter_seq'] = ''; $prediction['third_chapter_name'] = ''; $prediction['balance_before_third_recharge'] = ''; } //dump('三充前余额:'.$prediction['balance_before_third_recharge'].'二充章节'.$seq); }else{ $prediction['sec_chapter_id'] = ''; $prediction['sec_chapter_seq'] = ''; $prediction['sec_chapter_name'] = ''; $prediction['balance_after_first_recharge'] = ''; $prediction['balance_before_sec_recharge'] = ''; $prediction['sec_recharge_amount'] = ''; $prediction['third_chapter_id'] = ''; $prediction['third_chapter_seq'] = ''; $prediction['third_chapter_name'] = ''; $prediction['balance_after_sec_recharge'] = ''; $prediction['balance_before_third_recharge'] = ''; } BookRechargeExpectedPositions::updateOrCreate([ 'bid'=>$prediction['bid'], 'first_recharge_amount'=>$prediction['first_recharge_amount'], 'sec_recharge_amount'=>$prediction['sec_recharge_amount'], ] ,$prediction); } public static function getPrice($chapter,$price_rate){ $fee = ceil($chapter->size * $price_rate); if($fee >189) $fee = 189; if($fee <37) $fee = 37; return $fee; } }