| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 | <?phpnamespace App\Http\Controllers\Manage\Book;use Illuminate\Http\Request;use App\Http\Controllers\Controller;use App\Modules\Book\Models\BookCp;use App\Modules\Book\Models\BookConfig;use DB;use App\Modules\Subscribe\Models\BookOrder;use Illuminate\Support\Facades\Storage;class CpBookController extends Controller{    /**     * @apiDefine BookCP 图书CP模块     */    /**     * @apiVersion 1.0.0     * @apiDescription 获取所有cp     * @api {get} bookcp/getAllCp 获取所有cp     * @apiGroup BookCP     * @apiName getAllCp     * @apiSuccess {int}         code          态码     * @apiSuccess {String}      msg           信息     * @apiSuccess {object}      data          结果集     * @apiSuccessExample {json} Success-Response:     *     HTTP/1.1 200 OK     *       {     *           code: 0,     *           msg: "",     *           data: [     *               "quyuewang",     *               "tianya",     *               "zhongtian",     *               "ycsd",     *               "zhizihuan",     *               "timeread",     *               "shuhai",     *           ]     *       }     */    public function getAllCp(){        $cps = BookCp::select('cp')->get()->pluck('cp');        return response()->success($cps);    }    /**     * @apiVersion 1.0.0     * @apiDescription cp统计数据     * @api {get} bookcp/cpTotal cp统计数据     * @apiGroup BookCP     * @apiName cpTotal     * @apiParam   {String}      cp            cp名称     * @apiParam   {String}      [export]      要导出需要传值等于1     * @apiSuccess {int}         code          态码     * @apiSuccess {String}      msg           信息     * @apiSuccess {object}      data          结果集     * @apiSuccess {object}      data.cp_source     cp名称     * @apiSuccess {object}      data.count         图书数量     * @apiSuccess {object}      data.bids          bids(每日数据需要传递的参数)     * @apiSuccess {object}      data.yesterday     昨日订阅量     * @apiSuccess {object}      data.month         本月订阅量     * @apiSuccess {object}      data.prev_month    上月订阅量     * @apiSuccess {object}      data.today    上月订阅量     * @apiSuccessExample {json} Success-Response:     *     HTTP/1.1 200 OK     *       {     *           code: 0,     *           msg: "",     *           data: [     *               {     *                   cp_source: "17k",     *                   bids: "21,22,582,583,584,591,612,629,634,635,637,638,639,641,642,843,844",     *                   count: 17,     *                   yesterday: "68194",     *                   month: "660188",     *                   prev_month: "55172"     *               }     *           ]     *       }     */    public function cpTotal2(Request $request){        $cp = $request->input('cp');        $res = BookConfig::select('cp_source',DB::raw('GROUP_CONCAT(bid) as bids'),DB::raw('count(*) as count'))->where('cp_source','!=','');        if($cp){            $res = $res->where('cp_source','like','%'.$cp.'%');        }        $res = $res->groupBy('cp_source')->get();        //return $res;        $yesterday = date('Y-m-d',time()-86400);        $today = date('Y-m-d');        $tomorrow = date('Y-m-d',time()+86400);        $month = date('Y-m').'-01';        $prev_month = date('Y-m',strtotime('-1 month')).'-01';        $next_month = date('Y-m',strtotime('+1 month')).'-01';        //echo $next_month;        $sql = '(select ifnull(sum(fee),0) as %s from chapter_order_total where bid in (%s) and day BETWEEN "%s" and "%s") %s';        $book_sql = '(select ifnull(sum(fee),0) as %s from book_orders where bid in (%s) and created_at BETWEEN "%s" and "%s") %s';        //BookOrder::join('book_config','book_orders.bid','=','book_config.bid')->select()->get();        foreach ($res as &$v){            $yesterday_sql = sprintf($sql,'yesterday',$v->bids,$yesterday,$today,'a');            $month_sql = sprintf($sql,'month',$v->bids,$month,$next_month,'b');            $prev_month_sql = sprintf($sql,'prev_month',$v->bids,$prev_month,$month,'c');            $total_sql = 'select * from ('.$yesterday_sql.' join '.$month_sql.' join '.$prev_month_sql.')';            $temp_res = DB::connection('chapter_order_mysql')->select($total_sql);            $book_yesterday_sql = sprintf($book_sql,'yesterday',$v->bids,$yesterday,$today,'a');            $book_month_sql = sprintf($book_sql,'month',$v->bids,$month,$next_month,'b');            $book_prev_month_sql = sprintf($book_sql,'prev_month',$v->bids,$prev_month,$month,'c');            $book_total_sql = 'select * from ('.$book_yesterday_sql.' join '.$book_month_sql.' join '.$book_prev_month_sql.')';            $book_temp_res = DB::select($book_total_sql);            $v->yesterday = (int)$book_temp_res[0]->yesterday+(int)$temp_res[0]->yesterday;            $v->month = (int)$book_temp_res[0]->month+(int)$temp_res[0]->month;            $v->prev_month = (int)$book_temp_res[0]->prev_month+(int)$temp_res[0]->prev_month;            $v->today = '-';            $temp_res = null;            $total_sql = null;        }        if($request->input('export')){            $filename = 'cptotal'.date('YmdHis').'.csv';            Storage::append($filename,mb_convert_encoding("书籍数量,今日订阅量,昨日订阅量,本月订阅量,上月订阅量",'gbk'));            $str = '';            foreach ($res as $val){                $str .= "{$val->count},{$val->today},{$val->yesterday},{$val->month},{$val->prev_month}\r\n";            }            Storage::append($filename,mb_convert_encoding($str,'gbk'));            return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);        }        return response()->success($res);    }    public function cpTotal(Request $request){        $cp = $request->input('cp');        $sql_format = ' SELECT "-" as today,a.bids,a.cp_source,a.count,a.yesterday,a.yesterday_charge_balance,a.yesterday_reward_balance,b.`month`,b.month_charge_balance,b.month_reward_balance,c.prev_month,c.prev_month_charge_balance,c.prev_month_reward_balance from((SELECT SUM(a.fee) as yesterday,sum(reward_balance) as yesterday_reward_balance,sum(charge_balance) as yesterday_charge_balance,b.cp_source,count(*) as `count`,GROUP_CONCAT(b.bid) as bids from book_order_statistical a join book_configs  b on  a.bid=b.bid  where a.`day` = "%s" and %s GROUP BY b.cp_source) a join (SELECT SUM(a.fee)as `month`,sum(reward_balance) as month_reward_balance,sum(charge_balance) as month_charge_balance,b.cp_source from book_order_statistical a join book_configs  b on  a.bid=b.bid  where a.`day` >= "%s" and a.`day` < "%s" and %s GROUP BY b.cp_source) bon a.cp_source = b.cp_source JOIN (SELECT SUM(a.fee) as prev_month,sum(reward_balance) as prev_month_reward_balance,sum(charge_balance) as prev_month_charge_balance,b.cp_source from book_order_statistical a join book_configs  b on  a.bid=b.bid  where a.`day` >= "%s" and a.`day`< "%s" and %s GROUP BY b.cp_source) c on a.cp_source = c.cp_source) ';        $yesterday = date('Y-m-d',time()-86400);        $today = date('Y-m-d');        $tomorrow = date('Y-m-d',time()+86400);        $month = date('Y-m').'-01';        $now_month = date('n');        if($now_month == 1){            $year = date('Y');            $prev_month = ($year-1).'-12-01';        }else{            $year = date('Y');            $prev_month = ($year).'-'.($now_month-1).'-01';        }        //$prev_month = date('Y-m',strtotime('-1 month')).'-01';        $next_month = date('Y-m',strtotime('+1 month')).'-01';        if($cp){            $where = 'b.cp_source like '.'"%'.$cp.'%"';        }else{            $where = '1=1';        }        $sql = sprintf($sql_format,$yesterday,$where,$month,$next_month,$where,$prev_month,$month,$where);        $res = DB::select($sql);        if($request->input('export')){            $filename = 'cptotal'.date('YmdHis').'.csv';            Storage::append($filename,mb_convert_encoding("书籍数量,今日订阅量,昨日订阅量,昨日订阅量充值币,昨日订阅量赠送币,本月订阅量,本月订阅量充值币,本月订阅量赠送币,上月订阅量,上月订阅量充值币,上月订阅量赠送币",'gbk'));            $str = '';            foreach ($res as $val){                $str .= "{$val->count},{$val->today},                {$val->yesterday},{$val->yesterday_charge_balance},{$val->yesterday_reward_balance},                {$val->month},{$val->month_charge_balance},{$val->month_reward_balance},                {$val->prev_month},{$val->prev_month_charge_balance},{$val->prev_month_reward_balance}\r\n";            }            Storage::append($filename,mb_convert_encoding($str,'gbk'));            return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);        }        return response()->success($res);    }    /**     * @apiVersion 1.0.0     * @apiDescription cp每日数据     * @api {get} bookcp/everyDayCpTotal cp每日数据     * @apiGroup BookCP     * @apiName everyDayCpTotal     * @apiParam   {String}      cp            cp名称     * @apiParam   {String}      bids          bids(cp统计数据返回的bids)     * @apiParam   {String}      [export]      要导出需要传值等于1     * @apiParam   {String}      page          页码     * @apiParam   {String}      pagesize      每页数据     * @apiSuccess {int}         code          态码     * @apiSuccess {String}      msg           信息     * @apiSuccess {object}      data          结果集     * @apiSuccess {object}      data.list.fee      订阅量     * @apiSuccess {object}      data.list.day      图书数量量     * @apiSuccess {object}      data.meta.last_page      最后意一页     * @apiSuccess {object}      data.meta.current_page   当前页     * @apiSuccessExample {json} Success-Response:     *     HTTP/1.1 200 OK     *       {     *           code: 0,     *           msg: "",     *           data: {     *              list:[     *               {     *                   fee: "96",     *                   day: "2017-12-21"     *               },     *               {     *                   fee: "1262",     *                   day: "2017-12-22"     *               },     *               {     *                   fee: "382",     *                   day: "2017-12-24"     *               },     *           ],     *           meta{     *               last_page:3,     *               current_page:1     *            }     *           }     *       }     */    public function everyDayCpTotal(Request $request){        $cp = $request->input('cp');        $bids = $request->input('bids');        $page = (int)$request->input('page',1);        $pagesize = (int)$request->input('pagesize',15);        $start = ($page-1)*$pagesize;        $sql = 'select sum(fee) as fee,`day` from chapter_order_total where bid in ('.$bids.') group by `day` limit '.$start.','.$pagesize;        $count_sql = 'select count(*) as count from (select sum(fee) as fee,`day` from chapter_order_total where bid in ('.$bids.') group by `day`) a';        if($request->input('export')){            $book_order_bids = $this->getBookOrderBid();            $this_book_bid = array_intersect($book_order_bids,explode(',',$bids));            $sqls = 'select sum(fee) as fee,`day` from chapter_order_total where bid in ('.$bids.') group by `day`';            $res = DB::connection('chapter_order_mysql')->select($sqls);            if($this_book_bid){                $book_order_res = BookOrder::whereIn('bid',$this_book_bid)                    ->select(DB::raw('date(created_at) as day'),DB::raw('sum(fee) as fee'))                    ->groupBy(DB::raw('date(created_at)'))                    ->get();                foreach ($res as &$v){                    foreach ($book_order_res as $value){                        if($v->day == $value->day){                            $v->fee = $v->fee+$value->fee;                        }                        continue;                    }                }            }            $filename = 'cptotal'.date('YmdHis').'.csv';            Storage::append($filename,mb_convert_encoding("日期,订阅量",'gbk'));            $str = '';            foreach ($res as $val){                $str .= "{$val->day},{$val->fee}\r\n";            }            Storage::append($filename,mb_convert_encoding($str,'gbk'));            return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);        }        $count =  DB::connection('chapter_order_mysql')->select($count_sql);        $res = DB::connection('chapter_order_mysql')->select($sql);        $book_order_bids = $this->getBookOrderBid();        $this_book_bid = array_intersect($book_order_bids,explode(',',$bids));        if($this_book_bid){            $book_order_res = BookOrder::whereIn('bid',$this_book_bid)                ->select(DB::raw('date(created_at) as day'),DB::raw('sum(fee) as fee'))                ->groupBy(DB::raw('date(created_at)'))                ->get();            foreach ($res as &$v){                foreach ($book_order_res as $value){                    if($v->day == $value->day){                        $v->fee = $v->fee+$value->fee;                    }                    continue;                }            }        }        $data = [            'meta'=>['last_page'=>ceil($count[0]->count/$pagesize),'current_page'=>$page],            'list'=>$res        ];        return response()->success($data);    }    /**     * @apiVersion 1.0.0     * @apiDescription cp图书统计数据     * @api {get} bookcp/bookCpTotal cp图书统计数据     * @apiGroup BookCP     * @apiName bookCpTotal     * @apiParam   {String}      cp            cp名称     * @apiParam   {String}      [export]      要导出需要传值等于1     * @apiParam   {String}      bids          bids(cp统计数据返回的bids)     * @apiSuccess {int}         code          态码     * @apiSuccess {String}      msg           信息     * @apiSuccess {object}      data          结果集     * @apiSuccess {object}      data.book_name         书名     * @apiSuccess {object}      data.bid           bid     * @apiSuccess {object}      data.yesterday     昨日订阅量     * @apiSuccess {object}      data.month         本月订阅量     * @apiSuccess {object}      data.prev_month    上月订阅量     * @apiSuccess {object}      data.today    上月订阅量     * @apiSuccessExample {json} Success-Response:     *     HTTP/1.1 200 OK     *       {     *           code: 0,     *           msg: "",     *           data: {     *                yesterday: "32",     *                month: "2762",     *                prev_month: "0",     *                book_name: "将军在上",     *                today: "-",     *                bid: "21"     *           },     *           }     *       }     */    public function bookCpTotal(Request $request){        $bids = $request->input('bids');        $yesterday = date('Y-m-d',time()-86400);        $today = date('Y-m-d');        $tomorrow = date('Y-m-d',time()+86400);        $month = date('Y-m').'-01';        $prev_month = date('Y-m',strtotime('-1 month')).'-01';        $next_month = date('Y-m',strtotime('+1 month')).'-01';        $sql_format = '(select ifnull(sum(fee),0) as %s from chapter_order_total where bid = %s and day BETWEEN "%s" and "%s") %s';        $book_sql_format = '(select ifnull(sum(fee),0) as %s from book_orders where bid = %s and date(created_at) BETWEEN "%s" and "%s") %s';        $book_array = explode(',',$bids);        $res = [];        $book_order_bids = $this->getBookOrderBid();        for ($i = 0;$i<count($book_array);$i++ ){            $yesterday_sql = sprintf($sql_format,'yesterday',$book_array[$i],$yesterday,$today,'a');            $month_sql = sprintf($sql_format,'month',$book_array[$i],$month,$next_month,'b');            $prev_month_sql = sprintf($sql_format,'prev_month',$book_array[$i],$prev_month,$month,'c');            $total_sql = 'select * from ('.$yesterday_sql.' join '.$month_sql.' join '.$prev_month_sql.'              join (select book_name from chapter_order_total where bid='.$book_array[$i].' limit 1) d            )';            $temp_res = DB::connection('chapter_order_mysql')->select($total_sql);            if(in_array($book_array[$i],$book_order_bids)){                $book_yesterday_sql = sprintf($book_sql_format,'yesterday',$book_array[$i],$yesterday,$today,'a');                $book_month_sql = sprintf($book_sql_format,'month',$book_array[$i],$month,$next_month,'b');                $book_prev_month_sql = sprintf($book_sql_format,'prev_month',$book_array[$i],$prev_month,$month,'c');                $book_total_sql = 'select * from ('.$book_yesterday_sql.' join '.$book_month_sql.' join '.$book_prev_month_sql.'              join (select book_name from chapter_order_total where bid='.$book_array[$i].' limit 1) d            )';                $book_temp_res = DB::connection('chapter_order_mysql')->select($book_total_sql);                $temp_res[0]->yesterday = $book_temp_res[0]->yesterday;                $temp_res[0]->yesterday = $book_temp_res[0]->month;                $temp_res[0]->yesterday = $book_temp_res[0]->prev_month;                $temp_res[0]->yesterday = $book_temp_res[0]->book_name;            }            $res[$i]['yesterday'] = $temp_res[0]->yesterday;            $res[$i]['month'] = $temp_res[0]->month;            $res[$i]['prev_month'] = $temp_res[0]->prev_month;            $res[$i]['book_name'] = $temp_res[0]->book_name;            $res[$i]['today'] = '-';            $res[$i]['bid'] = $book_array[$i];            $temp_res = null;        }        if($request->input('export')){            $filename = 'cptotal'.date('YmdHis').'.csv';            Storage::append($filename,mb_convert_encoding("书籍ID,书名,今日订阅量,昨日订阅量,本月订阅量,上月订阅量",'gbk'));            $str = '';            foreach ($res as $val){                $str .= "{$val['bid']},{$val['book_name']},{$val['today']},{$val['yesterday']},{$val['month']},{$val['prev_month']}\r\n";            }            Storage::append($filename,mb_convert_encoding($str,'gbk'));            return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);        }        return response()->success($res);    }    /**     * @apiVersion 1.0.0     * @apiDescription cp每本书数据     * @api {get} bookcp/everyBookTotal cp每本书数据     * @apiGroup BookCP     * @apiName everyBookTotal     * @apiParam   {String}      bid           bid     * @apiParam   {String}      [export]      要导出需要传值等于1     * @apiParam   {String}      page          页码     * @apiParam   {String}      pagesize      每页数据     * @apiSuccess {int}         code          态码     * @apiSuccess {String}      msg           信息     * @apiSuccess {object}      data          结果集     * @apiSuccess {object}      data.list.fee      订阅量     * @apiSuccess {object}      data.list.day      图书数量量     * @apiSuccess {object}      data.meta.last_page      最后意一页     * @apiSuccess {object}      data.meta.current_page   当前页     * @apiSuccessExample {json} Success-Response:     *     HTTP/1.1 200 OK     *       {     *           code: 0,     *           msg: "",     *           data: {     *              list:[     *               {     *                   fee: "96",     *                   day: "2017-12-21"     *               },     *               {     *                   fee: "1262",     *                   day: "2017-12-22"     *               },     *               {     *                   fee: "382",     *                   day: "2017-12-24"     *               },     *           ],     *           meta{     *               last_page:3,     *               current_page:1     *            }     *           }     *       }     */    public function everyBookTotal(Request $request){        $bid = $request->input('bid');        $page = (int)$request->input('page',1);        $pagesize = (int)$request->input('pagesize',15);        $start = ($page-1)*$pagesize;        $data = [];        if(in_array($bid,$this->getBookOrderBid())){            $book_sql = 'select sum(fee) as fee,date(created_at) as `day`  from book_orders where bid='.$bid.' group by date(created_at) limit '.$start.','.$pagesize;            $count_sql = 'select count(*) as count from (select sum(fee) as fee  from book_orders where bid='.$bid.' group by date(created_at)) a';            $temp_res = DB::select($book_sql);            $count = DB::select($count_sql);            $data = [                'meta'=>['last_page'=>ceil($count[0]->count/$pagesize),'current_page'=>$page],                'list'=>$temp_res            ];        }else{            $sql = 'select sum(fee) as fee,`day`  from chapter_order_total where bid='.$bid.' group by `day` limit '.$start.','.$pagesize;            $count_sql = 'select count(*) as count from (select sum(fee) as fee,day  from chapter_order_total where bid='.$bid.' group by `day`) a';            $temp_res = DB::connection('chapter_order_mysql')->select($sql);            $count = DB::connection('chapter_order_mysql')->select($count_sql);            $data = [                'meta'=>['last_page'=>ceil($count[0]->count/$pagesize),'current_page'=>$page],                'list'=>$temp_res            ];        }        if($request->input('export')){            $filename = 'cptotal'.date('YmdHis').'.csv';            Storage::append($filename,mb_convert_encoding("日期,订阅量",'gbk'));            $str = '';            foreach ($data['list'] as $val){                $str .= "{$val->day},{$val->fee}\r\n";            }            Storage::append($filename,mb_convert_encoding($str,'gbk'));            return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);        }        return response()->success($data);    }    protected  function getBookOrderBid(){        static $book_order_bid = null;        if(is_null($book_order_bid)){            $book_order_bid_obj = BookOrder::select(DB::raw('DISTINCT bid'))->get();            foreach ($book_order_bid_obj as $v){                $book_order_bid[] = $v->bid;            }        }        return $book_order_bid;    }}
 |