123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <?php
- /**
- * Created by PhpStorm.
- * User: hp
- * Date: 2017/12/1
- * Time: 14:17
- */
- namespace App\Http\Controllers\Manage\SendOrder;
- use App\Http\Controllers\Channel\BaseController;
- use App\Http\Controllers\Manage\SendOrder\Transformers\SendOrderBookDayStatTransformer;
- use App\Modules\Book\Models\BookUvStat;
- use App\Modules\Book\Services\BookConfigService;
- use App\Modules\SendOrder\Services\SendOrderForceDayStatService;
- use DB;
- use Illuminate\Http\Request;
- use Log;
- use Redis;
- class SendOrderForceDayStatsController extends BaseController
- {
- /**
- * @apiDefine sendOrder 派单
- */
- /**
- * @apiVersion 1.0.0
- * @api {GET} getBookSendOrderDayStats 获取派单统计
- * @apiGroup sendOrder
- * @apiName sendOrderDayStats
- */
- function getGroupByBook(Request $request)
- {
- $begin_time = $request->has('begin_time') && $request->input('begin_time') ? $request->input('begin_time') : '';
- $end_time = $request->has('end_time') && $request->input('end_time') ? $request->input('end_time') : '';
- $gender = $request->input('gender','');
- $data = SendOrderForceDayStatService::getSendOrderDayStatsByBook(compact('begin_time', 'end_time','gender'));
- return response()->collection(new SendOrderBookDayStatTransformer(), $data);
- }
- /**
- * @apiVersion 1.0.0
- * @api {GET} exportBookSendOrderDayStats 获取派单统计
- * @apiGroup sendOrder
- * @apiName exportBookSendOrderDayStats
- */
- function exportGroupByBook(Request $request)
- {
- $end_time = $request->has('end_time') && $request->input('end_time') ? $request->input('end_time') : '';
- $begin_time = $request->has('begin_time') && $request->input('begin_time') ? $request->input('begin_time') : '';
- $gender = $request->input('gender','');
- $data = SendOrderForceDayStatService::getSendOrderDayStatsByBook(compact('begin_time', 'end_time','gender'));
- header("Content-type:application/vnd.ms-excel");
- header("Content-Disposition:attachment;filename=" . "书籍数据" . date("YmdHis") . ".csv");
- echo iconv("UTF-8", "GBK", "\"书本名称\",\"男女频\",\"派单数\",\"充值总额\",\"成功订单数\",\"PV\",\"UV\",\"充值总额/UV\",\"注册用户/UV\",\"订单总数\",\"订单成功率\"\r\n");
- foreach ($data as $item) {
- echo("\"" . mb_convert_encoding($item->book_name, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding(($item->pid==1)?'男':'女', "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($item->send_order_num, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($item->sum_recharge_amount, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($item->sum_paid_num, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($item->sum_pv, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($item->sum_uv, "GBK", "UTF-8") . "\",");
- $total_send_order_count = $item->sum_paid_num + $item->sum_unpaid_num;
- if (0 == $item->sum_uv) {
- $recharge_persent_result = '100%';
- $register_persent_result = '100%';
- } else {
- $recharge_persent_result = round(($item->sum_recharge_amount / $item->sum_uv) * 100, 2) . '%';
- $register_persent_result = round(($item->sum_register_user_num / $item->sum_uv) * 100, 2) . '%';
- }
- if (0 == $total_send_order_count) {
- $success_order_persent_result = '0%';
- } else {
- $success_order_persent_result = round(($item->sum_paid_num / $total_send_order_count) * 100, 2) . '%';
- }
- echo("\"" . mb_convert_encoding($recharge_persent_result, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($register_persent_result, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($total_send_order_count, "GBK", "UTF-8") . "\",");
- echo("\"" . $success_order_persent_result . "\"\r\n");
- }
- exit();
- }
- //注册用户/UV比值大于85%的派单链接的强关转化(强关用户数/注册用户数量)、付费转化(付费用户数/强关粉丝)、注册用户ARPU值(充值/注册用户)
- function newUserArpu(Request $request)
- {
- $begin_time = $request->has('begin_time') && $request->input('begin_time') ? $request->input('begin_time') : '';
- $end_time = $request->has('end_time') && $request->input('end_time') ? $request->input('end_time') : '';
- $bid = $request->has('bid') && $request->input('bid') ? $request->input('bid') : '';
- $data = DB::select("select avg(sum_recharge_amount) avg_recharge_amount,avg(sum_force_user_num) avg_force_user_num,avg(sum_register_user_num) avg_register_user_num,avg(sum_pay_user_num) avg_pay_user_num
- from (select t.* from (select sum(recharge_amount) as sum_recharge_amount,sum(force_user_num) sum_force_user_num,
- sum(register_user_num) sum_register_user_num,sum(pay_user_num) sum_pay_user_num,sum(uv) sum_uv from send_orders_force_day_stats
- where total_uv > 20 and date >='{$begin_time}' and date <= '{$end_time}' and bid = '{$bid}'
- group by send_order_id) as t ) as tt where sum_register_user_num/sum_uv > 0.85");
- return response()->success([
- 'sub_per_register' => $data[0]->avg_register_user_num ? round(100 * $data[0]->avg_force_user_num / $data[0]->avg_register_user_num, 2) . '%' : 0,
- 'pay_per_sub' => $data[0]->avg_force_user_num ? round(100 * $data[0]->avg_pay_user_num / $data[0]->avg_force_user_num, 2) . '%' : 0,
- 'arpu' => $data[0]->avg_register_user_num ? round($data[0]->avg_recharge_amount / $data[0]->avg_register_user_num, 2) : 0
- ]);
- }
- function deepReadRecordData(Request $request)
- {
- $bid = $request->input('bid');
- if (empty($bid)) {
- return response()->error('LACK_PARAM');
- }
- $total_count = $this->getCount($bid);
- $count = $request->input('count');
- if (!$count) {
- $count = $total_count;
- }
- $book = BookConfigService::getBookById($bid);
- if ($count == $total_count) {
- $info = $this->getReadRecordDataFromRedis($bid);
- } else {
- $info = $this->getReadRecordDataFromDB($bid, $count);
- }
- $info['total_count'] = $total_count;
- $info['now_count'] = $count;
- $info['book_name'] = $book->book_name;
- return response()->success($info);
- }
- private function getReadRecordDataFromRedis($bid)
- {
- $key = 'book:' . $bid . ':deepread:uv';
- $total = Redis::scard($key);
- $forseq = 30;
- $uv = [];
- $chapter = [];
- for ($i = 1; $i <= $forseq; $i++) {
- $chapter_key = 'book:' . $bid . ':chapterseq:' . $i;
- $uv[] = (int)Redis::scard($chapter_key);
- $chapter[] = '第' . $i . '章';
- }
- return ['chapter' => $chapter, 'uv' => $uv, 'total_uv' => $total];
- }
- private function getReadRecordDataFromDB($bid, $count)
- {
- $info = BookUvStat::where('bid', $bid)->where('count', $count)->orderBy('chapter_seq')->select('bid', 'chapter_seq', 'chapter_uv', 'total_uv', 'count')->get();
- if (!$info) {
- return [];
- }
- $data = [];
- foreach ($info as $v) {
- $data['total_uv'] = $v->total_uv;
- $data['uv'][] = $v->chapter_uv;
- $data['chapter'][] = '第' . $v->chapter_seq . '章';
- }
- return $data;
- }
- public function resetDeepReadRecordData(Request $request)
- {
- $bid = $request->input('bid');
- $key = 'book:' . $bid . ':deepread:uv';
- $total = Redis::scard($key);
- $forseq = 30;
- $info = BookUvStat::where('bid', $bid)->select('count')->orderBy('count', 'desc')->first();
- $count = 1;
- if ($info && !empty($info->count)) {
- $count = $info->count + 1;
- }
- $data = [];
- for ($i = 1; $i <= $forseq; $i++) {
- $chapter_key = 'book:' . $bid . ':chapterseq:' . $i;
- $temp = (int)Redis::scard($chapter_key);
- $data[] = ['bid' => $bid, 'chapter_seq' => $i, 'total_uv' => $total, 'chapter_uv' => $temp,
- 'count' => $count, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')];
- Redis::del($chapter_key);
- }
- DB::table('book_uv_stats')->insert($data);
- Redis::del($key);
- return response()->success();
- }
- private function getCount($bid)
- {
- $info = BookUvStat::where('bid', $bid)->select('count')->orderBy('count', 'desc')->first();
- $count = 1;
- if ($info && !empty($info->count)) {
- $count = $info->count + 1;
- }
- return $count;
- }
- }
|