| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | <?phpnamespace App\Console\Commands\Book;use Illuminate\Console\Command;use App\Modules\Book\Models\Chapter;use App\Modules\Book\Models\Book;use App\Modules\Book\Models\BookConfig;use App\Modules\Book\Models\BookRechargeExpectedPositions;class BookRechargePredict extends Command{    /**     * The name and signature of the console command.     *     * @var string     */    protected $signature = 'book_recharge_predict';    /**     * The console command description.     *     * @var string     */    protected $description = '书籍充值预测';    /**     * Create a new command instance.     *     * @return void     */    public function __construct()    {        parent::__construct();    }    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        $params = array(            ['first_recharge_amount'=>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;    }}
 |