123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236 |
- <?php
- /**
- * Created by PhpStorm.
- * User: shensong
- * Date: 2022/9/18
- * Time: 21:21
- */
- namespace App\Service;
- use App\Log;
- use App\Models\AdqPlayletTrendData;
- use App\Models\DramaSeries;
- use App\Models\Es\PlayletAccountDataTrend;
- use App\Models\OfficialAccount;
- use App\Models\PlayletAccountTrendData;
- use App\Models\Report\PlayletDataTrend;
- use App\Models\MpPlayletTrendData;
- class ShortPlayDataTrendService
- {
- public static function adqShortPlayDataTrendList($params, $page, $pageSize, $sortField, $sortType)
- {
- # 表头处理
- $commonHeader = config('shortPlayDataTrendHeader.basic');
- # 获取day1至day150表头
- $daysHeader = [];
- for($i = 0;$i < AdqPlayletTrendData::PLAYLET_TREND_DATA_RECORD_DAYS;$i++) {
- $title = [
- 'name' => 'DAY'.($i+1),
- 'column' => 'day'.($i+1)
- ];
- $daysHeader[] = $title;
- }
- $header = array_merge($commonHeader, $daysHeader);
- # 查询数据
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- list($list, $count) = AdqPlayletTrendData::getShortPlayDataTrendTrend($params, $sortField, $sortType, $page, $pageSize);
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- if(empty($playletIdList)) return [0, [], $header];
- list($list, $count) = AdqPlayletTrendData::getShortPlayDataTrendSummaryData(
- $params, $playletIdList, $sortField, $sortType, $page, $pageSize
- );
- }
- if(empty($list)) return [0, [], $header];
- # 获取短剧信息
- $playletIds = $list->pluck('playlet_id')->unique();
- $playletData = DramaSeries::query()
- ->select('id', 'name')
- ->whereIn('id', $playletIds)
- ->where('sys_group_id', $params['sys_group_id'])
- ->get();
- foreach ($list as $item) {
- # 短剧信息处理
- $playletInfo = $playletData->where('id', $item->playlet_id)->first();
- $item->playlet_name = $playletInfo->name ?? '-';
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- unset($item->expense_date_end);
- }
- # 消耗金额单位处理
- $item->paid = $item->paid / 100;
- # 企微关注成本
- $item->follow_cost = round($item->follow_cost / 100, 2);
- # 首日roi
- $item->first_roi = round($item->first_roi * 100, 2) . '%';
- # 用户累计充值金额
- $item->pay_money_total = $item->pay_money_total / 100;
- # 首日下单成本
- $item->first_charge_user_cost = round($item->first_charge_user_cost / 100, 2);
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- # 当天新增用户arpu
- $item->day_paid_user_arpu = round($item->day_paid_user_arpu / 100, 2);
- # 总回本率
- $item->cost_cover_rate = round($item->cost_cover_rate * 100, 2) . '%';
- # 企微关注人数
- $item->scan_follow_count = intval($item->scan_follow_count);
- # 查询150天数据
- $dayInfo = [];
- $dayData = AdqPlayletTrendData::query()
- ->where('enable', 1)
- ->where(function($query) use ($params) {
- if(isset($params['plat_order_type']) && is_numeric($params['plat_order_type']))
- $query->where('plat_order_type', $params['plat_order_type']);
- })
- ->where('playlet_id', $item->playlet_id);
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $dayData = $dayData->where('expense_date', '=', $item->expense_date)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date.' +149 day')));
- } else {
- $dayData = $dayData->where('expense_date', '>=', $item->expense_date)
- ->where('expense_date', '<=', $item->expense_date_end)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date_end.' +149 day')));
- }
- $dayData = $dayData->selectRaw("sum(pay_user) as pay_user,sum(pay_money) as pay_money, sum(pay_money_total) as pay_money_total, ref_date, expense_date, days_type")
- ->groupBy(['days_type'])
- ->get();
- $paidDataMid = [];
- $payMoneyTotal = 0;
- if(!empty($dayData)){
- foreach($dayData as $val){
- $nd = (strtotime($val['ref_date']) - strtotime($val['expense_date'])) / 86400;
- $payMoneyTotal+=$val['pay_money'];
- if(isset($paidDataMid[$nd])) {
- $paidDataMid[$nd]['pay_user'] += $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] += $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] += $payMoneyTotal;
- } else {
- $paidDataMid[$nd]['pay_user'] = $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] = $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] = $payMoneyTotal;
- }
- }
- foreach ($paidDataMid as $i=>$v) {
- $new_roi = $item->paid ? round($v['pay_money'] / 100 / $item->paid, 4) * 100 . '%' : '0%';
- $total_roi = $item->paid ? round($v['pay_money_total'] / 100 / $item->paid, 4) * 100 . '%' : '0%';
- $income_times = $item->pay_money ? round($v['pay_money_total'] / 100 / $item->pay_money, 2) : '0%';
- $dayInfo[$i] = [
- 'days' => 'day' . ($i+1),
- 'pay_money' => round($v['pay_money']/100, 2),
- 'new_roi' => $new_roi,
- 'total_roi' => $total_roi,
- 'income_times' => $income_times,
- 'charge_user' => $v['pay_user']
- ];
- }
- }
- $item->day_info = $dayInfo;
- }
- return [$count, $list, $header];
- }
- public static function adqSummaryOfShortDramaDataTrends($params)
- {
- # 表头处理
- $header = config('shortPlayDataTrendHeader.summary');
- # 数据处理
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $data = AdqPlayletTrendData::shortPlayDataTrendCollect($params, [$params['playlet_id']]);
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- $data = AdqPlayletTrendData::shortPlayDataTrendCollect($params, $playletIdList);
- }
- if(empty($data)) return [[], $header];
- # 获取累计回收金额
- $recycleData = AdqPlayletTrendData::getShortPlayDataTrendCumulativeMoney($params, $playletIdList);
- # 获取首日累计回收金额
- $firstDayRecycleData = AdqPlayletTrendData::getShortPlayDataTrendFirstDayCumulativeMoney($params, $playletIdList);
- # 3天累计回收金额
- $threeDaysInfo = $recycleData->where('days_type', 3)->first();
- $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- $data['three_days_rate'] = $firstDayRecycleData['three_days_pay_money'] ? round($threeDaysMoney / $firstDayRecycleData['three_days_pay_money'], 2) : 0;
- # 获取7天累计回收金额
- $sevenDaysInfo = $recycleData->where('days_type', 7)->first();
- $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- $data['seven_days_rate'] = $firstDayRecycleData['seven_days_pay_money'] ? round($sevenDaysMoney / $firstDayRecycleData['seven_days_pay_money'], 2) : 0;
- # 获取15天累计回收金额
- $fifteenDaysInfo = $recycleData->where('days_type', 15)->first();
- $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- $data['fifteen_days_rate'] = $firstDayRecycleData['fifteen_days_pay_money'] ? round($fifteenDaysMoney / $firstDayRecycleData['fifteen_days_pay_money'], 2) : 0;
- # 获取30天累计回收金额
- $thirtyDaysInfo = $recycleData->where('days_type', 30)->first();
- $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- $data['thirty_days_rate'] = $firstDayRecycleData['thirty_days_pay_money'] ? round($thirtyDaysMoney / $firstDayRecycleData['thirty_days_pay_money'], 2) : 0;
- # 消耗金额单位处理
- $data['paid'] = $data['paid'] / 100;
- # 企微关注成本
- $data['follow_cost'] = round($data['follow_cost'] / 100, 1);
- # 首日roi
- $data['first_roi'] = round($data['first_roi'] * 100, 2) . '%';
- # 总回本率
- $data['cost_cover_rate'] = round($data['cost_cover_rate'] * 100, 2) . '%';
- # 首日新增用户充值金额
- $data['pay_money'] = $data['pay_money'] / 100;
- # 用户累计充值金额
- $data['pay_money_total'] = $data['pay_money_total'] / 100;
- # 首日下单成本
- $data['first_charge_user_cost'] = round($data['first_charge_user_cost'] / 100, 2);
- # 累计下单成本
- $data['charge_user_cost'] = round($data['charge_user_cost'] / 100, 2);
- # 首日付费用户arpu
- $data['day_paid_user_arpu'] = round($data['day_paid_user_arpu'] / 100, 2);
- # 企微关注人数
- $data['scan_follow_count'] = intval($data['scan_follow_count']);
- # 短剧
- $data['playlet_name'] = '汇总';
- return [$data, $header];
- }
- public static function adqShortPlayDataTrendCurve($params)
- {
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- if(empty($playletIdList)) return [];
- }
- # Adq账号数据汇总曲线
- $data = AdqPlayletTrendData::getShortPlayDataTrendCurve($params, $playletIdList);
- # 获取累计回收金额
- $recycleData = AdqPlayletTrendData::getShortPlayDataTrendCumulativeMoney($params, $playletIdList, true);
- if(empty($data)) return [];
- # 数据处理
- foreach($data as $item) {
- # 消耗金额
- $item->paid = $item->paid / 100;
- # 首日roi
- $item->first_roi = round($item->first_roi * 100, 2);
- # 3天累计回收金额
- $threeDaysInfo = $recycleData->where('days_type', 3)->where('expense_date', $item->expense_date)->first();
- $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- $item->three_days_rate = $item->pay_money ? round($threeDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取7天累计回收金额
- $sevenDaysInfo = $recycleData->where('days_type', 7)->where('expense_date', $item->expense_date)->first();
- $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- $item->seven_days_rate = $item->pay_money ? round($sevenDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取15天累计回收金额
- $fifteenDaysInfo = $recycleData->where('days_type', 15)->where('expense_date', $item->expense_date)->first();
- $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- $item->fifteen_days_rate = $item->pay_money ? round($fifteenDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取30天累计回收金额
- $thirtyDaysInfo = $recycleData->where('days_type', 30)->where('expense_date', $item->expense_date)->first();
- $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- $item->thirty_days_rate = $item->pay_money ? round($thirtyDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- $item->day_paid_user_arpu = empty($item->day_paid_user_arpu) ? 0 : round($item->day_paid_user_arpu/100, 2);
- $item->first_charge_user_cost = empty($item->first_charge_user_cost) ? 0 : round($item->first_charge_user_cost/100, 2);
- }
- return $data;
- }
- public static function mpShortPlayDataTrendList($params, $page, $pageSize, $sortField, $sortType)
- {
- # 表头处理
- $commonHeader = config('shortPlayDataTrendHeader.basic');
- # 获取day1至day150表头
- $daysHeader = [];
- for($i = 0;$i < MpPlayletTrendData::PLAYLET_TREND_DATA_RECORD_DAYS;$i++) {
- $title = [
- 'name' => 'DAY'.($i+1),
- 'column' => 'day'.($i+1)
- ];
- $daysHeader[] = $title;
- }
- $header = array_merge($commonHeader, $daysHeader);
- # 查询数据
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- list($list, $count) = MpPlayletTrendData::getShortPlayDataTrendTrend($params, $sortField, $sortType, $page, $pageSize);
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- if(empty($playletIdList)) return [0, [], $header];
- list($list, $count) = MpPlayletTrendData::getShortPlayDataTrendSummaryData(
- $params, $playletIdList, $sortField, $sortType, $page, $pageSize
- );
- }
- if(empty($list)) return [0, [], $header];
- # 获取短剧信息
- $playletIds = $list->pluck('playlet_id')->unique();
- $playletData = DramaSeries::query()
- ->select('id', 'name')
- ->whereIn('id', $playletIds)
- ->where('sys_group_id', $params['sys_group_id'])
- ->get();
- foreach ($list as $item) {
- # 短剧信息处理
- $playletInfo = $playletData->where('id', $item->playlet_id)->first();
- $item->playlet_name = $playletInfo->name ?? '-';
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- unset($item->expense_date_end);
- }
- # 消耗金额单位处理
- $item->paid = $item->paid / 100;
- # 企微关注成本
- $item->follow_cost = round($item->follow_cost / 100, 1);
- # 首日roi
- $item->first_roi = round($item->first_roi * 100, 2) . '%';
- # 用户累计充值金额
- $item->pay_money_total = $item->pay_money_total / 100;
- # 首日下单成本
- $item->first_charge_user_cost = round($item->first_charge_user_cost / 100, 2);
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- # 当天新增用户arpu
- $item->day_paid_user_arpu = round($item->day_paid_user_arpu / 100, 2);
- # 总回本率
- $item->cost_cover_rate = round($item->cost_cover_rate * 100, 2) . '%';
- # 企微关注人数
- $item->scan_follow_count = intval($item->scan_follow_count);
- # 查询150天数据
- $dayInfo = [];
- $dayData = MpPlayletTrendData::query()
- ->where('enable', 1)
- ->where(function($query) use ($params) {
- if(isset($params['plat_order_type']) && is_numeric($params['plat_order_type']))
- $query->where('plat_order_type', $params['plat_order_type']);
- })
- ->where('playlet_id', $item->playlet_id);
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $dayData = $dayData->where('expense_date', '=', $item->expense_date)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date.' +149 day')));
- } else {
- $dayData = $dayData->where('expense_date', '>=', $item->expense_date)
- ->where('expense_date', '<=', $item->expense_date_end)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date_end.' +149 day')));
- }
- $dayData = $dayData->selectRaw("sum(pay_user) as pay_user,sum(pay_money) as pay_money, sum(pay_money_total) as pay_money_total, ref_date, expense_date, days_type")
- ->groupBy(['days_type'])
- ->get();
- $paidDataMid = [];
- $payMoneyTotal = 0;
- if(!empty($dayData)){
- foreach($dayData as $val){
- $nd = (strtotime($val['ref_date']) - strtotime($val['expense_date'])) / 86400;
- $payMoneyTotal += $val['pay_money'];
- if(isset($paidDataMid[$nd])) {
- $paidDataMid[$nd]['pay_user'] += $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] += $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] += $payMoneyTotal;
- // $paidDataMid[$nd]['pay_money_total'] += $val['pay_money_total'];
- } else {
- $paidDataMid[$nd]['pay_user'] = $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] = $val['pay_money'];
- // $paidDataMid[$nd]['pay_money_total'] = $val['pay_money_total'];
- $paidDataMid[$nd]['pay_money_total'] = $payMoneyTotal;
- }
- }
- foreach ($paidDataMid as $i=>$v) {
- $new_roi = $item->paid ? round($v['pay_money'] / 100 / $item->paid, 4) * 100 . '%' : '0%';
- $total_roi = $item->paid ? round($v['pay_money_total'] / 100 / $item->paid, 4) * 100 . '%' : '0%';
- $income_times = $item->pay_money ? round($v['pay_money_total'] / 100 / $item->pay_money, 2) : '0%';
- $dayInfo[$i] = [
- 'days' => 'day' . ($i+1),
- 'pay_money' => round($v['pay_money']/100, 2),
- 'new_roi' => $new_roi,
- 'total_roi' => $total_roi,
- 'income_times' => $income_times,
- 'charge_user' => $v['pay_user']
- ];
- }
- }
- $item->day_info = $dayInfo;
- }
- return [$count, $list, $header];
- }
- public static function mpSummaryOfShortDramaDataTrends($params)
- {
- # 表头处理
- $header = config('shortPlayDataTrendHeader.summary');
- # 数据处理
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $data = MpPlayletTrendData::shortPlayDataTrendCollect($params, [$params['playlet_id']]);
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- $data = MpPlayletTrendData::shortPlayDataTrendCollect($params, $playletIdList);
- }
- if(empty($data)) return [[], $header];
- # 获取累计回收金额
- $recycleData = MpPlayletTrendData::getShortPlayDataTrendCumulativeMoney($params, $playletIdList);
- # 获取首日累计回收金额
- $firstDayRecycleData = MpPlayletTrendData::getShortPlayDataTrendFirstDayCumulativeMoney($params, $playletIdList);
- // # 3天累计回收金额
- // $threeDaysInfo = $recycleData->where('days_type', 3)->first();
- // $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- // $data->three_days_rate = $data->pay_money ? round($threeDaysMoney / $data->pay_money, 4) * 100 . "%" : "0%";
- // # 获取7天累计回收金额
- // $sevenDaysInfo = $recycleData->where('days_type', 7)->first();
- // $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- // $data->seven_days_rate = $data->pay_money ? round($sevenDaysMoney / $data->pay_money, 4) * 100 . "%" : "0%";
- // # 获取15天累计回收金额
- // $fifteenDaysInfo = $recycleData->where('days_type', 15)->first();
- // $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- // $data->fifteen_days_rate = $data->pay_money ? round($fifteenDaysMoney / $data->pay_money, 4) * 100 . "%" : "0%";
- // # 获取30天累计回收金额
- // $thirtyDaysInfo = $recycleData->where('days_type', 30)->first();
- // $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- // $data->thirty_days_rate = $data->pay_money ? round($thirtyDaysMoney / $data->pay_money, 4) * 100 . "%" : "0%";
- // # 消耗金额单位处理
- // $data->paid = $data->paid / 100;
- // # 企微关注成本
- // $data->follow_cost = round($data->follow_cost / 100, 1);
- // # 首日roi
- // $data->first_roi = $data->first_roi * 100 . '%';
- // # 总回本率
- // $data->cost_cover_rate = $data->cost_cover_rate * 100 . '%';
- // # 首日新增用户充值金额
- // $data->pay_money = $data->pay_money / 100;
- // # 用户累计充值金额
- // $data->pay_money_total = $data->pay_money_total / 100;
- // # 首日下单成本
- // $data->first_charge_user_cost = round($data->first_charge_user_cost / 100, 2);
- // # 累计下单成本
- // $data->charge_user_cost = round($data->charge_user_cost / 100, 2);
- // # 首日付费用户arpu
- // $data->day_paid_user_arpu = round($data->day_paid_user_arpu / 100, 2);
- // # 企微关注人数
- // $data->scan_follow_count = intval($data->scan_follow_count);
- // # 短剧
- // $data->playlet_name = '汇总';
- # 3天累计回收金额
- $threeDaysInfo = $recycleData->where('days_type', 3)->first();
- $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- $data['three_days_rate'] = $firstDayRecycleData['three_days_pay_money'] ? round($threeDaysMoney / $firstDayRecycleData['three_days_pay_money'], 2) : 0;
- # 获取7天累计回收金额
- $sevenDaysInfo = $recycleData->where('days_type', 7)->first();
- $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- $data['seven_days_rate'] = $firstDayRecycleData['seven_days_pay_money'] ? round($sevenDaysMoney / $firstDayRecycleData['seven_days_pay_money'], 2) : 0;
- # 获取15天累计回收金额
- $fifteenDaysInfo = $recycleData->where('days_type', 15)->first();
- $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- $data['fifteen_days_rate'] = $firstDayRecycleData['fifteen_days_pay_money'] ? round($fifteenDaysMoney / $firstDayRecycleData['fifteen_days_pay_money'], 2) : 0;
- # 获取30天累计回收金额
- $thirtyDaysInfo = $recycleData->where('days_type', 30)->first();
- $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- $data['thirty_days_rate'] = $firstDayRecycleData['thirty_days_pay_money'] ? round($thirtyDaysMoney / $firstDayRecycleData['thirty_days_pay_money'], 2) : 0;
- # 消耗金额单位处理
- $data['paid'] = $data['paid'] / 100;
- # 企微关注成本
- $data['follow_cost'] = round($data['follow_cost'] / 100, 1);
- # 首日roi
- $data['first_roi'] = round($data['first_roi'] * 100, 2) . '%';
- # 总回本率
- $data['cost_cover_rate'] = round($data['cost_cover_rate'] * 100, 2) . '%';
- # 首日新增用户充值金额
- $data['pay_money'] = $data['pay_money'] / 100;
- # 用户累计充值金额
- $data['pay_money_total'] = $data['pay_money_total'] / 100;
- # 首日下单成本
- $data['first_charge_user_cost'] = round($data['first_charge_user_cost'] / 100, 2);
- # 累计下单成本
- $data['charge_user_cost'] = round($data['charge_user_cost'] / 100, 2);
- # 首日付费用户arpu
- $data['day_paid_user_arpu'] = round($data['day_paid_user_arpu'] / 100, 2);
- # 企微关注人数
- $data['scan_follow_count'] = intval($data['scan_follow_count']);
- # 短剧
- $data['playlet_name'] = '汇总';
- return [$data, $header];
- }
- public static function mpShortPlayDataTrendCurve($params)
- {
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- if(empty($playletIdList)) return [];
- }
- # Adq账号数据汇总曲线
- $data = MpPlayletTrendData::getShortPlayDataTrendCurve($params, $playletIdList);
- # 获取累计回收金额
- $recycleData = MpPlayletTrendData::getShortPlayDataTrendCumulativeMoney($params, $playletIdList, true);
- if(empty($data)) return [];
- # 数据处理
- foreach($data as $item) {
- # 消耗金额
- $item->paid = $item->paid / 100;
- # 首日roi
- $item->first_roi = round($item->first_roi * 100, 2);
- # 3天累计回收金额
- $threeDaysInfo = $recycleData->where('days_type', 3)->where('expense_date', $item->expense_date)->first();
- $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- $item->three_days_rate = $item->pay_money ? round($threeDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取7天累计回收金额
- $sevenDaysInfo = $recycleData->where('days_type', 7)->where('expense_date', $item->expense_date)->first();
- $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- $item->seven_days_rate = $item->pay_money ? round($sevenDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取15天累计回收金额
- $fifteenDaysInfo = $recycleData->where('days_type', 15)->where('expense_date', $item->expense_date)->first();
- $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- $item->fifteen_days_rate = $item->pay_money ? round($fifteenDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取30天累计回收金额
- $thirtyDaysInfo = $recycleData->where('days_type', 30)->where('expense_date', $item->expense_date)->first();
- $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- $item->thirty_days_rate = $item->pay_money ? round($thirtyDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- $item->day_paid_user_arpu = empty($item->day_paid_user_arpu) ? 0 : round($item->day_paid_user_arpu/100, 2);
- $item->first_charge_user_cost = empty($item->first_charge_user_cost) ? 0 : round($item->first_charge_user_cost/100, 2);
- }
- return $data;
- }
- public static function shortPlayDataTrendList($params, $page, $pageSize, $sortField, $sortType)
- {
- # 表头处理
- $commonHeader = config('shortPlayDataTrendHeader.basic');
- # 获取day1至day150表头
- $daysHeader = [];
- for($i = 0;$i < PlayletDataTrend::PLAYLET_TREND_DATA_RECORD_DAYS;$i++) {
- $title = [
- 'name' => 'DAY'.($i+1),
- 'column' => 'day'.($i+1)
- ];
- $daysHeader[] = $title;
- }
- $header = array_merge($commonHeader, $daysHeader);
- # 查询数据
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- list($list, $count) = PlayletDataTrend::getShortPlayDataTrendTrend($params, $sortField, $sortType, $page, $pageSize);
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- if(empty($playletIdList)) return [0, [], $header];
- list($list, $count) = PlayletDataTrend::getShortPlayDataTrendSummaryData(
- $params, $playletIdList, $sortField, $sortType, $page, $pageSize
- );
- }
- if(empty($list)) return [0, [], $header];
- # 获取短剧信息
- $playletIds = $list->pluck('playlet_id')->unique();
- $playletData = DramaSeries::query()
- ->select('id', 'name')
- ->whereIn('id', $playletIds)
- ->where('sys_group_id', $params['sys_group_id'])
- ->get();
- foreach ($list as $item) {
- # 短剧信息处理
- $playletInfo = $playletData->where('id', $item->playlet_id)->first();
- $item->playlet_name = $playletInfo->name ?? '-';
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- unset($item->expense_date_end);
- }
- # 消耗金额单位处理
- $item->paid = $item->paid / 100;
- # 企微关注成本
- $item->follow_cost = round($item->follow_cost / 100, 1);
- # 首日roi
- $item->first_roi = round($item->first_roi * 100, 2) . '%';
- # 用户累计充值金额
- $item->pay_money_total = $item->pay_money_total / 100;
- # 首日下单成本
- $item->first_charge_user_cost = round($item->first_charge_user_cost / 100, 2);
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- # 当天新增用户arpu
- $item->day_paid_user_arpu = round($item->day_paid_user_arpu / 100, 2);
- # 总回本率
- $item->cost_cover_rate = round($item->cost_cover_rate * 100, 2) . '%';
- # 企微关注人数
- $item->scan_follow_count = intval($item->scan_follow_count);
- # 查询150天数据
- $dayInfo = [];
- $dayData = PlayletDataTrend::query()
- ->where('enable', 1)
- ->where(function($query) use ($params) {
- if(isset($params['plat_order_type']) && is_numeric($params['plat_order_type']))
- $query->where('plat_order_type', $params['plat_order_type']);
- })
- ->where('playlet_id', $item->playlet_id);
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $dayData = $dayData->where('expense_date', '=', $item->expense_date)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date.' +149 day')));
- } else {
- $dayData = $dayData->where('expense_date', '>=', $item->expense_date)
- ->where('expense_date', '<=', $item->expense_date_end)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date_end.' +149 day')));
- }
- $dayData = $dayData->selectRaw("sum(pay_user) as pay_user,sum(pay_money) as pay_money, sum(pay_money_total) as pay_money_total, ref_date, expense_date, days_type")
- ->groupBy(['days_type'])
- ->get();
- $paidDataMid = [];
- $payMoneyTotal = 0;
- if(!empty($dayData)){
- foreach($dayData as $val){
- $nd = (strtotime($val['ref_date']) - strtotime($val['expense_date'])) / 86400;
- $payMoneyTotal+=$val['pay_money'];
- if(isset($paidDataMid[$nd])) {
- $paidDataMid[$nd]['pay_user'] += $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] += $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] += $payMoneyTotal;
- } else {
- $paidDataMid[$nd]['pay_user'] = $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] = $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] = $payMoneyTotal;
- }
- }
- foreach ($paidDataMid as $i=>$v) {
- $new_roi = $item->paid ? round($v['pay_money'] / 100 / $item->paid, 4) * 100 . '%' : '0%';
- $total_roi = $item->paid ? round($v['pay_money_total'] / 100 / $item->paid, 4) * 100 . '%' : '0%';
- $income_times = $item->pay_money ? round($v['pay_money_total'] / 100 / $item->pay_money, 2) : '0%';
- $dayInfo[$i] = [
- 'days' => 'day' . ($i+1),
- 'pay_money' => round($v['pay_money']/100, 2),
- 'new_roi' => $new_roi,
- 'total_roi' => $total_roi,
- 'income_times' => $income_times,
- 'charge_user' => $v['pay_user']
- ];
- }
- }
- $item->day_info = $dayInfo;
- }
- return [$count, $list, $header];
- }
- public static function summaryOfShortDramaDataTrends($params)
- {
- # 表头处理
- $header = config('shortPlayDataTrendHeader.summary');
- # 数据处理
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $data = PlayletDataTrend::shortPlayDataTrendCollect($params, [$params['playlet_id']]);
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- $data = PlayletDataTrend::shortPlayDataTrendCollect($params, $playletIdList);
- }
- if(empty($data)) return [[], $header];
- # 获取累计回收金额
- $recycleData = PlayletDataTrend::getShortPlayDataTrendCumulativeMoney($params, $playletIdList);
- # 获取首日累计回收金额
- $firstDayRecycleData = PlayletDataTrend::getShortPlayDataTrendFirstDayCumulativeMoney($params, $playletIdList);
- # 3天累计回收金额
- $threeDaysInfo = $recycleData->where('days_type', 3)->first();
- $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- $data['three_days_rate'] = $firstDayRecycleData['three_days_pay_money'] ? round($threeDaysMoney / $firstDayRecycleData['three_days_pay_money'], 2) : 0;
- # 获取7天累计回收金额
- $sevenDaysInfo = $recycleData->where('days_type', 7)->first();
- $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- $data['seven_days_rate'] = $firstDayRecycleData['seven_days_pay_money'] ? round($sevenDaysMoney / $firstDayRecycleData['seven_days_pay_money'], 2) : 0;
- # 获取15天累计回收金额
- $fifteenDaysInfo = $recycleData->where('days_type', 15)->first();
- $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- $data['fifteen_days_rate'] = $firstDayRecycleData['fifteen_days_pay_money'] ? round($fifteenDaysMoney / $firstDayRecycleData['fifteen_days_pay_money'], 2) : 0;
- # 获取30天累计回收金额
- $thirtyDaysInfo = $recycleData->where('days_type', 30)->first();
- $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- $data['thirty_days_rate'] = $firstDayRecycleData['thirty_days_pay_money'] ? round($thirtyDaysMoney / $firstDayRecycleData['thirty_days_pay_money'], 2) : 0;
- # 消耗金额单位处理
- $data['paid'] = $data['paid'] / 100;
- # 企微关注成本
- $data['follow_cost'] = round($data['follow_cost'] / 100, 1);
- # 首日roi
- $data['first_roi'] = round($data['first_roi'] * 100, 2) . '%';
- # 总回本率
- $data['cost_cover_rate'] = round($data['cost_cover_rate'] * 100, 2) . '%';
- # 首日新增用户充值金额
- $data['pay_money'] = $data['pay_money'] / 100;
- # 用户累计充值金额
- $data['pay_money_total'] = $data['pay_money_total'] / 100;
- # 首日下单成本
- $data['first_charge_user_cost'] = round($data['first_charge_user_cost'] / 100, 2);
- # 累计下单成本
- $data['charge_user_cost'] = round($data['charge_user_cost'] / 100, 2);
- # 首日付费用户arpu
- $data['day_paid_user_arpu'] = round($data['day_paid_user_arpu'] / 100, 2);
- # 企微关注人数
- $data['scan_follow_count'] = intval($data['scan_follow_count']);
- # 短剧
- $data['playlet_name'] = '汇总';
- return [$data, $header];
- }
- public static function shortPlayDataTrendCurve($params)
- {
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- if(empty($playletIdList)) return [];
- }
- # Adq账号数据汇总曲线
- $data = PlayletDataTrend::getShortPlayDataTrendCurve($params, $playletIdList);
- # 获取累计回收金额
- $recycleData = PlayletDataTrend::getShortPlayDataTrendCumulativeMoney($params, $playletIdList, true);
- if(empty($data)) return [];
- # 数据处理
- foreach($data as $item) {
- # 消耗金额
- $item->paid = $item->paid / 100;
- # 首日roi
- $item->first_roi = round($item->first_roi * 100, 2);
- # 3天累计回收金额
- $threeDaysInfo = $recycleData->where('days_type', 3)->where('expense_date', $item->expense_date)->first();
- $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- $item->three_days_rate = $item->pay_money ? round($threeDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取7天累计回收金额
- $sevenDaysInfo = $recycleData->where('days_type', 7)->where('expense_date', $item->expense_date)->first();
- $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- $item->seven_days_rate = $item->pay_money ? round($sevenDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取15天累计回收金额
- $fifteenDaysInfo = $recycleData->where('days_type', 15)->where('expense_date', $item->expense_date)->first();
- $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- $item->fifteen_days_rate = $item->pay_money ? round($fifteenDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 获取30天累计回收金额
- $thirtyDaysInfo = $recycleData->where('days_type', 30)->where('expense_date', $item->expense_date)->first();
- $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- $item->thirty_days_rate = $item->pay_money ? round($thirtyDaysMoney * 100 / $item->pay_money, 2) : 0;
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- $item->day_paid_user_arpu = empty($item->day_paid_user_arpu) ? 0 : round($item->day_paid_user_arpu/100, 2);
- $item->first_charge_user_cost = empty($item->first_charge_user_cost) ? 0 : round($item->first_charge_user_cost/100, 2);
- }
- return $data;
- }
- public static function shortPlayDataTrendListByAccount($params, $page, $pageSize, $sortField, $sortType)
- {
- $sortField = self::getSortField($sortField);
- # 表头处理
- $commonHeader = config('shortPlayDataTrendHeader.basic');
- # 获取day1至day60表头
- $daysHeader = [];
- for($i = 0;$i < PlayletAccountTrendData::PLAYLET_TREND_DATA_RECORD_DAYS;$i++) {
- $title = [
- 'name' => 'DAY'.($i+1),
- 'column' => 'day'.($i+1)
- ];
- $daysHeader[] = $title;
- }
- $header = array_merge($commonHeader, $daysHeader);
- # 查询当前登录用户可见投放账号列表
- if(!empty($params['ad_type'])) {
- if(2 == $params['ad_type']) {
- $accountList = OfficialAccount::getAccountMpAppIdList($params['admin_id'], $params['sys_group_id']
- , $params['is_system_admin']);
- } else {
- $accountList = PitcherService::adqAccountListForUser($params['admin_id'], $params['sys_group_id']
- , $params['is_system_admin']);
- }
- } else {
- $accountList = PitcherService::adAccountList(null, $params['sys_group_id'], $params['admin_id']
- , $params['is_system_admin']);
- $accountList = array_column($accountList, 'account_id');
- }
- if(empty($accountList)){
- return [0, [], $header];
- }
- # 查询数据
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- list($list, $count) = PlayletAccountDataTrend::getShortPlayDataTrend($params, $sortField, $sortType
- , $page, $pageSize, $accountList);
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id')->toArray();
- if(empty($playletIdList)) return [0, [], $header];
- list($list, $count) = PlayletAccountDataTrend::getShortPlayDataTrendSummaryData($params, $playletIdList
- , $sortField, $sortType, $page, $pageSize, $accountList
- );
- }
- if(empty($list)) return [0, [], $header];
- # 获取短剧信息
- $playletIds = array_unique(array_column($list, 'playlet_id'));
- $playletData = DramaSeries::query()
- ->select('id', 'name')
- ->whereIn('id', $playletIds)
- ->where('sys_group_id', $params['sys_group_id'])
- ->get();
- foreach ($list as &$item) {
- # 短剧信息处理
- $playletInfo = $playletData->where('id', $item['playlet_id'])->first();
- $item['playlet_name'] = $playletInfo->name ?? '-';
- # 消耗金额单位处理
- $item['paid'] = $item['paid'] / 100;
- # 企微关注成本
- $item['follow_cost'] = round($item['follow_cost'] / 100, 2);
- # 首日roi
- $item['first_roi'] = round($item['first_roi'] * 100, 2) . '%';
- # 用户累计充值金额
- $item['pay_money_total'] = $item['pay_money_total'] / 100;
- # 首日下单成本
- $item['first_charge_user_cost'] = round($item['first_charge_user_cost'] / 100, 2);
- # 首日新增用户充值金额
- $item['pay_money'] = $item['pay_money'] / 100;
- # 当天新增用户arpu
- $item['day_paid_user_arpu'] = round($item['day_paid_user_arpu'] / 100, 2);
- # 总回本率
- $item['cost_cover_rate'] = round($item['cost_cover_rate'] * 100, 2) . '%';
- # 企微关注人数
- $item['scan_follow_count'] = intval($item['scan_follow_count']);
- # 首单充值金额
- $item['day_first_pay_money'] = $item['day_first_pay_money'] / 100;
- # 首单roi
- $item['first_pay_roi'] = round($item['first_pay_roi'] * 100) . '%';
- # 企微加粉人数
- $item['followers_number'] = intval($item['followers_number']);
- # 企微加粉成本
- $item['followers_cost'] = round($item['followers_cost'] / 100, 2);
- # 查询150天数据
- $dayInfo = [];
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $dayData = PlayletAccountDataTrend::getDataAfterExpense($params, $item['expense_date'], null,
- $item['playlet_id'], $accountList);
- if(!empty($dayData)){
- foreach($dayData as $val){
- $nd = (strtotime($val['ref_date']) - strtotime($item['expense_date'])) / 86400;
- $new_roi = $item['paid'] ? round($val['pay_money'] / 100 / $item['paid'], 4) * 100 . '%' : '0%';
- $total_roi = $item['paid'] ? round($val['pay_money_total'] / 100 / $item['paid'], 4) * 100 . '%' : '0%';
- $income_times = $item['pay_money'] ? round($val['pay_money_total'] / 100 / $item['pay_money'], 2) : 0;
- $dayInfo[$nd] = [
- 'days' => 'day' . ($nd+1),
- 'pay_money' => round($val['pay_money']/100, 2),
- 'new_roi' => $new_roi,
- 'total_roi' => $total_roi,
- 'income_times' => $income_times,
- 'charge_user' => $val['pay_user']
- ];
- }
- }
- } else {
- $dayData = PlayletAccountDataTrend::getDataAfterExpense($params, $item['expense_date'], $item['expense_date_end'],
- $item['playlet_id'], $accountList);
- $paidDataMid = [];
- $payMoneyTotal = 0;
- if(!empty($dayData)){
- foreach($dayData as $val){
- $nd = (strtotime($val['ref_date']) - strtotime($val['expense_date'])) / 86400;
- $payMoneyTotal += $val['pay_money'];
- if(isset($paidDataMid[$nd])) {
- $paidDataMid[$nd]['active_fans'] += $val['active_fans'];
- $paidDataMid[$nd]['pay_user'] += $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] += $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] += $payMoneyTotal;
- } else {
- $paidDataMid[$nd]['active_fans'] = $val['active_fans'];
- $paidDataMid[$nd]['pay_user'] = $val['pay_user'];
- $paidDataMid[$nd]['pay_money'] = $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] = $payMoneyTotal;
- }
- }
- foreach ($paidDataMid as $i=>$v) {
- $new_roi = $item['paid'] ? round($v['pay_money'] / 100 / $item['paid'], 4) * 100 . '%' : '0%';
- $total_roi = $item['paid'] ? round($v['pay_money_total'] / 100 / $item['paid'], 4) * 100 . '%' : '0%';
- $income_times = $item['pay_money'] ? round($v['pay_money_total'] / 100 / $item['pay_money'], 2) : 0;
- $dayInfo[$i] = [
- 'days' => 'day' . ($i+1),
- 'pay_money' => round($v['pay_money']/100, 2),
- 'new_roi' => $new_roi,
- 'total_roi' => $total_roi,
- 'income_times' => $income_times,
- 'charge_user' => $v['pay_user']
- ];
- }
- }
- }
- $item['day_info'] = $dayInfo;
- }
- return [$count, $list, $header];
- }
- public static function summaryOfShortDramaDataTrendsByAccount($params)
- {
- # 表头处理
- $header = config('shortPlayDataTrendHeader.summary');
- # 查询当前登录用户可见投放账号列表
- if(!empty($params['ad_type'])) {
- if(2 == $params['ad_type']) {
- $accountList = OfficialAccount::getAccountMpAppIdList($params['admin_id'], $params['sys_group_id'], $params['is_system_admin']);
- } else {
- $accountList = PitcherService::adqAccountListForUser($params['admin_id'], $params['sys_group_id'], $params['is_system_admin']);
- }
- } else {
- $accountList = PitcherService::adAccountList(null, $params['sys_group_id'], $params['admin_id'], $params['is_system_admin']);
- $accountList = array_column($accountList, 'account_id');
- }
- if(empty($accountList)){
- return [[], $header];
- }
- # 数据处理
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $data = PlayletAccountDataTrend::shortPlayDataTrendCollect($params, [$params['playlet_id']], $accountList);
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- $data = PlayletAccountDataTrend::shortPlayDataTrendCollect($params, $playletIdList, $accountList);
- }
- if(empty($data)) return [[], $header];
- # 获取累计回收金额
- $recycleData = collect(PlayletAccountDataTrend::getCumulativeMoney($params, $playletIdList, $accountList, [1, 3, 7, 15, 30]));
- # 3日消耗最早日期和最晚日期
- $threeDaysBegin = $recycleData->where('days_type', 3)->min('expense_date');
- $threeDaysEnd = $recycleData->where('days_type', 3)->max('expense_date');
- # 首日新增用户累计充值金额
- $threeDaysFirstPaid = $recycleData->where('expense_date', '>=', $threeDaysBegin)
- ->where('expense_date', '<=', $threeDaysEnd)->where('days_type', 1)
- ->sum('pay_money');
- # 3天累计回收金额
- $threeDaysMoney = $recycleData->where('days_type', 3)->sum('pay_money_total');
- $data['three_days_rate'] = $threeDaysFirstPaid ? round($threeDaysMoney / $threeDaysFirstPaid, 2) : "0";
- # 7日消耗最早日期和最晚日期
- $sevenDaysBegin = $recycleData->where('days_type', 7)->min('expense_date');
- $sevenDaysEnd = $recycleData->where('days_type', 7)->max('expense_date');
- # 首日新增用户累计充值金额
- $sevenDaysFirstPaid = $recycleData->where('expense_date', '>=', $sevenDaysBegin)
- ->where('expense_date', '<=', $sevenDaysEnd)->where('days_type', 1)
- ->sum('pay_money');
- # 7天累计回收金额
- $sevenDaysMoney = $recycleData->where('days_type', 7)->sum('pay_money_total');
- $data['seven_days_rate'] = $sevenDaysFirstPaid ? round($sevenDaysMoney / $sevenDaysFirstPaid, 2) : "0";
- # 15日消耗最早日期和最晚日期
- $fifteenDaysBegin = $recycleData->where('days_type', 15)->min('expense_date');
- $fifteenDaysEnd = $recycleData->where('days_type', 15)->max('expense_date');
- # 首日新增用户累计充值金额
- $fifteenDaysFirstPaid = $recycleData->where('expense_date', '>=', $fifteenDaysBegin)
- ->where('expense_date', '<=', $fifteenDaysEnd)->where('days_type', 1)
- ->sum('pay_money');
- # 15天累计回收金额
- $fifteenDaysMoney = $recycleData->where('days_type', 15)->sum('pay_money_total');
- $data['fifteen_days_rate'] = $fifteenDaysFirstPaid ? round($fifteenDaysMoney / $fifteenDaysFirstPaid, 2) : "0";
- # 30日消耗最早日期和最晚日期
- $thirtyDaysBegin = $recycleData->where('days_type', 30)->min('expense_date');
- $thirtyDaysEnd = $recycleData->where('days_type', 30)->max('expense_date');
- # 首日新增用户累计充值金额
- $thirtyDaysFirstPaid = $recycleData->where('expense_date', '>=', $thirtyDaysBegin)
- ->where('expense_date', '<=', $thirtyDaysEnd)->where('days_type', 1)
- ->sum('pay_money');
- # 30天累计回收金额
- $thirtyDaysMoney = $recycleData->where('days_type', 30)->sum('pay_money_total');
- $data['thirty_days_rate'] = $thirtyDaysFirstPaid ? round($thirtyDaysMoney / $thirtyDaysFirstPaid, 2) : "0";
- // # 3天累计回收金额
- // $threeDaysInfo = $recycleData->where('days_type', 3)->first();
- // $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- // $data['three_days_rate'] = $firstDayRecycleData['three_days_pay_money'] ?
- // round($threeDaysMoney / $firstDayRecycleData['three_days_pay_money'], 2) : 0;
- // # 获取7天累计回收金额
- // $sevenDaysInfo = $recycleData->where('days_type', 7)->first();
- // $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- // $data['seven_days_rate'] = $firstDayRecycleData['seven_days_pay_money'] ?
- // round($sevenDaysMoney / $firstDayRecycleData['seven_days_pay_money'], 2) : 0;
- // # 获取15天累计回收金额
- // $fifteenDaysInfo = $recycleData->where('days_type', 15)->first();
- // $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- // $data['fifteen_days_rate'] = $firstDayRecycleData['fifteen_days_pay_money'] ?
- // round($fifteenDaysMoney / $firstDayRecycleData['fifteen_days_pay_money'], 2) : 0;
- // # 获取30天累计回收金额
- // $thirtyDaysInfo = $recycleData->where('days_type', 30)->first();
- // $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- // $data['thirty_days_rate'] = $firstDayRecycleData['thirty_days_pay_money'] ?
- // round($thirtyDaysMoney / $firstDayRecycleData['thirty_days_pay_money'], 2) : 0;
- # 消耗金额单位处理
- $data['paid'] = $data['paid'] / 100;
- # 企微关注成本
- $data['follow_cost'] = round($data['follow_cost'] / 100, 1);
- # 首日roi
- $data['first_roi'] = round($data['first_roi'] * 100, 2) . '%';
- # 总回本率
- $data['cost_cover_rate'] = round($data['cost_cover_rate'] * 100, 2) . '%';
- # 首日新增用户充值金额
- $data['pay_money'] = $data['pay_money'] / 100;
- # 用户累计充值金额
- $data['pay_money_total'] = $data['pay_money_total'] / 100;
- # 首日下单成本
- $data['first_charge_user_cost'] = round($data['first_charge_user_cost'] / 100, 2);
- # 累计下单成本
- // $data['charge_user_cost'] = round($data['charge_user_cost'] / 100, 2);
- # 首日付费用户arpu
- $data['day_paid_user_arpu'] = round($data['day_paid_user_arpu'] / 100, 2);
- # 企微关注人数
- $data['scan_follow_count'] = intval($data['scan_follow_count']);
- # 短剧
- $data['playlet_name'] = '汇总';
- # 企微加粉人数
- $data['followers_number'] = intval($data['followers_number']);
- # 企微加粉成本
- $data['followers_cost'] = round($data['followers_cost'] / 100, 2);
- return [$data, $header];
- }
- public static function shortPlayDataTrendCurveByAccount($params)
- {
- # 查询当前登录用户可见投放账号列表
- if(!empty($params['ad_type'])) {
- if(2 == $params['ad_type']) {
- $accountList = OfficialAccount::getAccountMpAppIdList($params['admin_id'], $params['sys_group_id'], $params['is_system_admin']);
- } else {
- $accountList = PitcherService::adqAccountListForUser($params['admin_id'], $params['sys_group_id'], $params['is_system_admin']);
- }
- } else {
- $accountList = PitcherService::adAccountList(null, $params['sys_group_id'], $params['admin_id'], $params['is_system_admin']);
- $accountList = array_column($accountList, 'account_id');
- }
- if(empty($accountList)){
- return [];
- }
- if(isset($params['playlet_id']) && $params['playlet_id']) {
- $playletIdList = [$params['playlet_id']];
- } else {
- # 获取企业下的adq账号
- $playletIdList = DramaSeries::query()
- ->select('id')
- ->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()
- ->pluck('id');
- if(empty($playletIdList)) return [];
- }
- # Adq账号数据汇总曲线
- $data = PlayletAccountDataTrend::getAccountDataCurve($params, $playletIdList, $accountList);
- # 获取累计回收金额
- $recycleData = collect(PlayletAccountDataTrend::getCumulativeMoney($params, $playletIdList, $accountList, [3, 7, 15, 30]));
- if(empty($data)) return [];
- # 数据处理
- foreach($data as &$item) {
- # 消耗金额
- $item['paid'] = $item['paid'] / 100;
- # 首日roi
- $item['first_roi'] = round($item['first_roi'] * 100, 2);
- # 3天累计回收金额
- $threeDaysInfo = $recycleData->where('days_type', 3)->where('expense_date', $item['expense_date'])->first();
- $threeDaysMoney = $threeDaysInfo->pay_money_total ?? 0;
- $item['three_days_rate'] = $item['pay_money'] ? round($threeDaysMoney * 100 / $item['pay_money'], 2) : 0;
- # 获取7天累计回收金额
- $sevenDaysInfo = $recycleData->where('days_type', 7)->where('expense_date', $item['expense_date'])->first();
- $sevenDaysMoney = $sevenDaysInfo->pay_money_total ?? 0;
- $item['seven_days_rate'] = $item['pay_money'] ? round($sevenDaysMoney * 100 / $item['pay_money'], 2) : 0;
- # 获取15天累计回收金额
- $fifteenDaysInfo = $recycleData->where('days_type', 15)->where('expense_date', $item['expense_date'])->first();
- $fifteenDaysMoney = $fifteenDaysInfo->pay_money_total ?? 0;
- $item['fifteen_days_rate'] = $item['pay_money'] ? round($fifteenDaysMoney * 100 / $item['pay_money'], 2) : 0;
- # 获取30天累计回收金额
- $thirtyDaysInfo = $recycleData->where('days_type', 30)->where('expense_date', $item['expense_date'])->first();
- $thirtyDaysMoney = $thirtyDaysInfo->pay_money_total ?? 0;
- $item['thirty_days_rate'] = $item['pay_money'] ? round($thirtyDaysMoney * 100 / $item['pay_money'], 2) : 0;
- # 首日新增用户充值金额
- $item['pay_money'] = $item['pay_money'] / 100;
- $item['day_paid_user_arpu'] = empty($item['day_paid_user_arpu']) ? 0 : round($item['day_paid_user_arpu']/100, 2);
- $item['first_charge_user_cost'] = empty($item['first_charge_user_cost']) ? 0 : round($item['first_charge_user_cost']/100, 2);
- $item['cost_cover_rate'] = round($item['cost_cover_rate'] * 100, 2);
- }
- return $data;
- }
- /**
- * 总表排序字段处理
- * */
- public static function getSortField($field)
- {
- $data = [
- 'expense_date' => '_key',
- 'paid' => 'day_paid_bucket > day_paid',
- 'scan_follow_count' => 'scan_follow_count_bucket > day_scan_follow_count',
- 'follow_cost' => 'follow_cost',
- 'first_roi' => 'first_roi',
- 'pay_money' => 'day_pay_money_bucket > day_pay_money',
- 'pay_money_total' => 'pay_money_total',
- 'pay_user' => 'day_pay_user_bucket > day_pay_user',
- 'pay_user_total' => 'pay_user_total',
- 'pay_count' => 'day_pay_count_bucket > day_pay_count',
- 'pay_count_total' => 'pay_count_total',
- 'first_charge_user_cost' => 'first_charge_user_cost',
- 'cost_cover_rate' => 'cost_cover_rate',
- 'day_paid_user_arpu' => 'day_paid_user_arpu'
- ];
- return isset($data[$field]) ? $data[$field] : 'day_paid_bucket > day_paid';
- }
- }
|