123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062 |
- <?php
- namespace App\Service;
- use App\Log;
- use App\Models\AdqAccountTrendData;
- use App\Models\DramaSeries;
- use App\Models\Es\AccountDataTrend;
- use App\Models\MpAccountTrendData;
- use App\Models\OfficialAccount;
- use App\Models\OfficialAccountRelation;
- use App\Models\OfficialWebUserActionSetId;
- use App\Models\TencentAdAuth;
- use App\Support\EmailQueue;
- class ActiveFansTrendService
- {
- /**
- * 获取粉丝激活趋势
- * */
- public static function getAdqActiveFansTrend($params, $sortField, $sortType, $page, $pageSize)
- {
- # 表头处理
- $commonHeader = config('activeFans.basic');
- # 获取day1至day150表头
- $daysHeader = [];
- for($i = 0;$i < AdqAccountTrendData::ADQ_ACTIVE_FANS_DAYS;$i++) {
- $title = [
- 'name' => 'DAY'.($i+1),
- 'column' => 'day'.($i+1)
- ];
- $daysHeader[] = $title;
- }
- $header = array_merge($commonHeader, $daysHeader);
- # 查询数据
- if(isset($params['account_id']) && $params['account_id']) {
- list($list, $count) = AdqAccountTrendData::getActiveFansTrend($params, $sortField, $sortType, $page, $pageSize);
- } else {
- # 获取企业下的adq账号
- $accountList = OfficialWebUserActionSetId::select('account_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()->pluck('account_id');
- if(empty($accountList)) return [[], 0, $header];
- list($list, $count) = AdqAccountTrendData::getActiveFansSummaryData(
- $params, $accountList, $sortField, $sortType, $page, $pageSize
- );
- }
- if(empty($list)) return [[], 0, $header];
- # 获取短剧信息
- $playletIds = $list->pluck('playlet_id')->unique();
- $playletData = DramaSeries::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, 1);
- # 首日roi
- $item->first_roi = $item->first_roi * 100 . '%';
- # 用户累计充值金额
- $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 = $item->cost_cover_rate * 100 . '%';
- # 累计付费用户arpu
- $item->paid_user_arpu = round($item->paid_user_arpu / 100, 2);
- # 企微关注人数
- $item->scan_follow_count = intval($item->scan_follow_count);
- # 累计激活下单成本
- $item->pay_user_cost = round($item->pay_user_cost / 100, 2);
- # 查询150天数据
- $dayInfo = [];
- if(isset($params['account_id']) && $params['account_id']) {
- $dayData = AdqAccountTrendData::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('account_id', $params['account_id'])
- ->where(function($query) use($params) {
- if($params['playlet_id'])
- $query->where('playlet_id', $params['playlet_id']);
- })
- ->where('expense_date', $item->expense_date)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date.' +149 day')))
- ->selectRaw("sum(active_fans) as active_fans,sum(pay_money) as pay_money, sum(pay_money_total) as pay_money_total, ref_date")
- ->groupBy(['days_type'])
- ->get();
- 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['active_fans']
- ];
- }
- }
- } else {
- $dayData = AdqAccountTrendData::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('account_id', $item->account_id)
- ->where('playlet_id', $item->playlet_id)
- ->where('expense_date', '>=', $item->expense_date)
- ->where('expense_date', '<=', $item->expense_date_end)
- ->where('ref_date', '<=', strtotime($item->expense_date_end.' +149 day'))
- ->selectRaw("sum(active_fans) as active_fans,sum(pay_money) as pay_money, sum(pay_money_total) as pay_money_total, ref_date, expense_date, plat_order_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]['active_fans'] += $val['active_fans'];
- $paidDataMid[$nd]['pay_money'] += $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] += $payMoneyTotal;
- } else {
- $paidDataMid[$nd]['active_fans'] = $val['active_fans'];
- $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['active_fans']
- ];
- }
- }
- }
- $item->day_info = $dayInfo;
- }
- return [$list, $count, $header];
- }
- /**
- * 从ES获取粉丝激活趋势
- * */
- public static function getActiveFansTrend($params, $sortField, $sortType, $page, $pageSize)
- {
- # 表头处理
- $commonHeader = config('activeFans.basic');
- # 获取day1至day150表头
- $daysHeader = [];
- for($i = 0;$i < AdqAccountTrendData::ADQ_ACTIVE_FANS_DAYS;$i++) {
- $title = [
- 'name' => 'DAY'.($i+1),
- 'column' => 'day'.($i+1)
- ];
- $daysHeader[] = $title;
- }
- $header = array_merge($commonHeader, $daysHeader);
- try {
- # 获取当前登录账号可见的账号范围
- if($params['ad_type'] == 1) { // adq账号
- $authAccountList = PitcherService::adqAccountListForUser(
- $params['admin_id'], $params['sys_group_id'], $params['is_system_admin']
- );
- } elseif ($params['ad_type'] == 2) { // mp账号
- $authAccountList = OfficialAccount::getAccountMpAppIdList(
- $params['admin_id'], $params['sys_group_id'], $params['is_system_admin']
- );
- } else {
- $authAccountList = [];
- }
- if(empty($authAccountList)) return [[], 0, $header];
- # 数据项处理
- if(isset($params['account_id']) && $params['account_id']) {
- $params['account_id'] = explode(',', $params['account_id']);
- foreach ($params['account_id'] as $index=>$accountId) {
- if(!in_array($accountId, $authAccountList)) unset($params['account_id'][$index]);
- }
- if(empty($params['account_id'])) return [[], 0, $header];
- list($list, $count) = AccountDataTrend::getActiveFansTrend($params, $sortField, $sortType, $page, $pageSize);
- } else {
- # 获取企业下的adq账号
- $adqAccountList = OfficialWebUserActionSetId::select('account_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->whereIn('account_id', $authAccountList)
- ->distinct()->pluck('account_id')->toArray();
- # 获取企业下的mp账号
- $mpAccountList = OfficialAccountRelation::selectRaw('app_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->whereIn('app_id', $authAccountList)
- ->distinct()->pluck('app_id')->toArray();
- $accountList = array_merge($adqAccountList, $mpAccountList);
- if(empty($accountList)) return [[], 0, $header];
- list($list, $count) = AccountDataTrend::getActiveFansSummaryData($params, $accountList, $sortField, $sortType, $page, $pageSize);
- }
- if(empty($list)) return [[], 0, $header];
- # 获取短剧信息
- $playletIds = array_unique(array_column($list, 'playlet_id'));
- $playletData = DramaSeries::select('id', 'name')->whereIn('id', $playletIds)
- ->where('sys_group_id', $params['sys_group_id'])
- ->get();
- # 获取对应的mp账号信息
- $mpAccountData = TencentAdAuth::selectRaw('wechat_account_id, account_name')
- ->where('enable', 1)
- ->where('wechat_account_id', '>', '')
- ->get();
- foreach ($list as &$item) {
- # 账号名称处理
- if(is_array($item['account_id'])) {
- $accountCount = count($item['account_id']);
- if($accountCount == 1) {
- $item['account_id'] = $item['account_id'][0];
- $mpAccountInfo = $mpAccountData->where('wechat_account_id', $item['account_id'])->first();
- $item['account_name'] = $mpAccountInfo->account_name ?? $item['account_id'];
- } else {
- $accountNameStr = '';
- foreach ($item['account_id'] as $v) {
- $mpAccountInfo = $mpAccountData->where('wechat_account_id', $v)->first();
- $accountNameStr .= $mpAccountInfo->account_name ?? $v;
- $accountNameStr .= ',';
- }
- $item['account_name'] = trim($accountNameStr, ',');
- }
- } else {
- $mpAccountInfo = $mpAccountData->where('wechat_account_id', $item['account_id'])->first();
- $item['account_name'] = $mpAccountInfo->account_name ?? $item['account_id'];
- }
- # 短剧信息处理
- $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, 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) . '%';
- # 累计付费用户arpu
- $item['paid_user_arpu'] = round($item['paid_user_arpu'] / 100, 2);
- # 企微关注人数
- $item['scan_follow_count'] = intval($item['scan_follow_count']);
- # 累计激活下单成本
- $item['pay_user_cost'] = round($item['pay_user_cost'] / 100, 2);
- # 查询150天数据
- $dayInfo = [];
- if(isset($params['account_id']) && $params['account_id']) {
- # 查询该投放日期的后150天数据
- $dayData = AccountDataTrend::getDataAfterExpense($params, $item['expense_date']);
- 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['active_fans']
- ];
- }
- }
- } else {
- # 获取账号在指定时间范围内的投放效果数据趋势
- $dayData = AccountDataTrend::getDataAfterExpense(
- $params, $item['expense_date'], $item['expense_date_end'], $item['account_id']
- );
- $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_money'] += $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] += $payMoneyTotal;
- } else {
- $paidDataMid[$nd]['active_fans'] = $val['active_fans'];
- $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['active_fans']
- ];
- }
- }
- }
- $item['day_info'] = $dayInfo;
- }
- } catch (\Exception $e) {
- EmailQueue::rPush('粉丝激活趋势列表接口异常', $e->getTraceAsString(), ['xiaohua.hou@kuxuan-inc.com'], '粉丝激活趋势列表接口异常');
- Log::logError('粉丝激活趋势列表接口异常', [
- 'params' => $params,
- 'sort_field' => $sortField,
- 'sort_type' => $sortType,
- 'line' => $e->getLine(),
- 'msg' => $e->getMessage()
- ], 'GetActiveFansTrend');
- return [[], 0, $header];
- }
- return [$list, $count, $header];
- }
- /**
- * 获取粉丝激活趋势
- * */
- public static function getMpActiveFansTrend($params, $sortField, $sortType, $page, $pageSize)
- {
- # 表头处理
- $commonHeader = config('activeFans.mp_basic');
- # 获取day1至day150表头
- $daysHeader = [];
- for($i = 0;$i < MpAccountTrendData::MP_ACTIVE_FANS_DAYS;$i++) {
- $title = [
- 'name' => 'DAY'.($i+1),
- 'column' => 'day'.($i+1)
- ];
- $daysHeader[] = $title;
- }
- $header = array_merge($commonHeader, $daysHeader);
- # 查询数据
- if(isset($params['app_id']) && $params['app_id']) {
- list($list, $count) = MpAccountTrendData::getActiveFansTrend($params, $sortField, $sortType, $page, $pageSize);
- } else {
- # 获取企业下的mp账号
- $accountList = OfficialAccountRelation::selectRaw('app_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()->pluck('app_id');
- if(empty($accountList)) return [[], 0, $header];
- list($list, $count) = MpAccountTrendData::getActiveFansSummaryData(
- $params, $accountList, $sortField, $sortType, $page, $pageSize
- );
- }
- if(empty($list)) return [[], 0, $header];
- # 获取短剧信息
- $playletIds = $list->pluck('playlet_id')->unique();
- $playletData = DramaSeries::select('id', 'name')->whereIn('id', $playletIds)
- ->where('sys_group_id', $params['sys_group_id'])
- ->get();
- # 获取列表中的公众号appId信息
- $appIds = $list->pluck('app_id')->unique();
- $accountData = OfficialAccount::select('mp_app_id', 'mp_name')->whereIn('mp_app_id', $appIds)->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, 1);
- # 首日roi
- $item->first_roi = $item->first_roi * 100 . '%';
- # 用户累计充值金额
- $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 = $item->cost_cover_rate * 100 . '%';
- # 累计付费用户arpu
- $item->paid_user_arpu = round($item->paid_user_arpu / 100, 2);
- # 企微关注人数
- $item->scan_follow_count = intval($item->scan_follow_count);
- # 累计激活下单成本
- $item->pay_user_cost = round($item->pay_user_cost / 100, 2);
- # 公众号名称
- $accountInfo = $accountData->where('mp_app_id', $item->app_id)->first();
- $item->app_name = $accountInfo->mp_name ?? '-';
- # 查询150天数据
- $dayInfo = [];
- if(isset($params['app_id']) && $params['app_id']) {
- $dayData = MpAccountTrendData::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']);
- if($params['playlet_id'])
- $query->where('playlet_id', $params['playlet_id']);
- })
- ->where('app_id', $params['app_id'])
- ->where('expense_date', $item->expense_date)
- ->where('ref_date', '<=', date('Y-m-d', strtotime($item->expense_date.' +149 day')))
- ->selectRaw("sum(active_fans) as active_fans,sum(pay_money) as pay_money, sum(pay_money_total) as pay_money_total, ref_date")
- ->groupBy(['days_type'])
- ->get();
- 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['active_fans']
- ];
- }
- }
- } else {
- $dayData = MpAccountTrendData::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('app_id', $item->app_id)
- ->where('playlet_id', $item->playlet_id)
- ->where('expense_date', '>=', $item->expense_date)
- ->where('expense_date', '<=', $item->expense_date_end)
- ->where('ref_date', '<=', strtotime($item->expense_date_end.' +149 day'))
- ->selectRaw("sum(active_fans) as active_fans,sum(pay_money) as pay_money, sum(pay_money_total) as pay_money_total, ref_date, expense_date, plat_order_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]['active_fans'] += $val['active_fans'];
- $paidDataMid[$nd]['pay_money'] += $val['pay_money'];
- $paidDataMid[$nd]['pay_money_total'] += $payMoneyTotal;
- } else {
- $paidDataMid[$nd]['active_fans'] = $val['active_fans'];
- $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['active_fans']
- ];
- }
- }
- }
- $item->day_info = $dayInfo;
- }
- return [$list, $count, $header];
- }
- /**
- * ADQ投放粉丝激活趋势汇总
- * */
- public static function getAdqFansActiveSummary($params)
- {
- # 表头处理
- $header = config('activeFans.summary');
- # 数据处理
- if(isset($params['account_id']) && $params['account_id']) {
- $accountList = [$params['account_id']];
- } else {
- # 获取企业下的adq账号
- $accountList = OfficialWebUserActionSetId::select('account_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()->pluck('account_id');
- if(empty($accountList)) return [[], $header];
- }
- $data = AdqAccountTrendData::activeFansDataCollect($params, $accountList);
- if(empty($data)) return [[], $header];
- # 获取累计回收金额
- $recycleData = AdqAccountTrendData::getCumulativeMoney($params, $accountList, true, [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";
- # 消耗金额单位处理
- $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->pay_user_cost = round($data->pay_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);
- # 累计付费用户arpu
- $data->paid_user_arpu = round($data->paid_user_arpu / 100, 2);
- # 企微关注人数
- $data->scan_follow_count = intval($data->scan_follow_count);
- return [$data, $header];
- }
- /**
- * 获取投放粉丝激活趋势汇总(ADQ+MP)
- * */
- public static function getFansActiveSummary($params)
- {
- # 表头处理
- $header = config('activeFans.summary');
- # 获取当前登录账号可见的账号范围
- if($params['ad_type'] == 1) { // adq账号
- $authAccountList = PitcherService::adqAccountListForUser(
- $params['admin_id'], $params['sys_group_id'], $params['is_system_admin']
- );
- } elseif ($params['ad_type'] == 1) { // mp账号
- $authAccountList = OfficialAccount::getAccountMpAppIdList(
- $params['admin_id'], $params['sys_group_id'], $params['is_system_admin']
- );
- } else { // adq+mp
- $authAccountList = PitcherService::adAccountList('', $params['sys_group_id'], $params['admin_id'], $params['is_system_admin']);
- $authAccountList = array_column($authAccountList, 'account_id');
- }
- if(empty($authAccountList)) return [[], $header];
- # 数据处理
- if(isset($params['account_id']) && $params['account_id']) {
- $accountList = explode(',', $params['account_id']);
- foreach ($accountList as $index=>$accountId) {
- if(!in_array($accountId, $authAccountList)) unset($accountList[$index]);
- }
- } else {
- # 获取企业下的adq账号
- $adqAccountList = OfficialWebUserActionSetId::select('account_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->whereIn('account_id', $authAccountList)
- ->distinct()->pluck('account_id')->toArray();
- # 获取企业下的mp账号
- $mpAccountList = OfficialAccountRelation::selectRaw('app_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->whereIn('app_id', $authAccountList)
- ->distinct()->pluck('app_id')->toArray();
- $accountList = array_merge($adqAccountList, $mpAccountList);
- }
- if(empty($accountList)) return [[], $header];
- $data = AccountDataTrend::activeFansDataCollect($params, $accountList);
- if(empty($data)) return [[], $header];
- # 获取累计回收金额
- $recycleData = collect(AccountDataTrend::getCumulativeMoney($params, $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";
- # 消耗金额单位处理
- $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['pay_user_cost'] = round($data['pay_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);
- # 累计付费用户arpu
- $data['paid_user_arpu'] = round($data['paid_user_arpu'] / 100, 2);
- # 企微关注人数
- $data['scan_follow_count'] = intval($data['scan_follow_count']);
- return [$data, $header];
- }
- /**
- * MP投放粉丝激活趋势汇总
- * */
- public static function getMpFansActiveSummary($params)
- {
- # 表头处理
- $header = config('activeFans.summary');
- # 数据处理
- if(isset($params['app_id']) && $params['app_id']) {
- $accountList = [$params['app_id']];
- } else {
- # 获取企业下的adq账号
- $accountList = OfficialAccountRelation::selectRaw('app_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()->pluck('app_id');
- if(empty($accountList)) return [[], $header];
- }
- $data = MpAccountTrendData::activeFansDataCollect($params, $accountList);
- if(empty($data)) return [[], $header];
- # 获取累计回收金额
- $recycleData = MpAccountTrendData::getCumulativeMoney($params, $accountList, true, [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";
- # 消耗金额单位处理
- $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->pay_user_cost = round($data->pay_user_cost / 100, 2);
- # 首日下单成本
- $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);
- # 累计付费用户arpu
- $data->paid_user_arpu = round($data->paid_user_arpu / 100, 2);
- # 企微关注人数
- $data->scan_follow_count = intval($data->scan_follow_count);
- return [$data, $header];
- }
- /**
- * Adq账号粉丝激活趋势曲线
- * */
- public static function getAdqActiveFansCurve($params)
- {
- if(isset($params['account_id']) && $params['account_id']) {
- $accountList = [$params['account_id']];
- } else {
- # 获取企业下的adq账号
- $accountList = OfficialWebUserActionSetId::select('account_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()->pluck('account_id');
- if(empty($accountList)) return [];
- }
- # Adq账号数据汇总曲线
- $data = AdqAccountTrendData::getActiveFansCurve($params, $accountList);
- # 获取累计回收金额
- $recycleData = AdqAccountTrendData::getCumulativeMoney($params, $accountList, true);
- if(empty($data)) return [];
- # 数据处理
- foreach($data as $item) {
- # 消耗金额
- $item->paid = $item->paid / 100;
- # 首日roi
- $item->first_roi = $item->first_roi * 100;
- # 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 / $item->pay_money, 4) * 100 : 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 / $item->pay_money, 4) * 100 : 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 / $item->pay_money, 4) * 100 : 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 / $item->pay_money, 4) * 100 : 0;
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- }
- return $data;
- }
- /**
- * 账号粉丝激活趋势曲线(ADQ+MP)
- * */
- public static function getActiveFansCurve($params)
- {
- # 获取当前登录账号可见的账号范围
- if($params['ad_type'] == 1) { // adq账号
- $authAccountList = PitcherService::adqAccountListForUser(
- $params['admin_id'], $params['sys_group_id'], $params['is_system_admin']
- );
- } elseif ($params['ad_type'] == 2) { // mp账号
- $authAccountList = OfficialAccount::getAccountMpAppIdList(
- $params['admin_id'], $params['sys_group_id'], $params['is_system_admin']
- );
- } else { // adq+mp
- $authAccountList = PitcherService::adAccountList('', $params['sys_group_id'], $params['admin_id'], $params['is_system_admin']);
- $authAccountList = array_column($authAccountList, 'account_id');
- }
- if(empty($authAccountList)) return [];
- if(isset($params['account_id']) && $params['account_id']) {
- $accountList = explode(',', $params['account_id']);
- foreach ($accountList as $index=>$accountId) {
- if(!in_array($accountId, $authAccountList)) unset($accountList[$index]);
- }
- } else {
- # 获取企业下的adq账号
- $adqAccountList = OfficialWebUserActionSetId::select('account_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->whereIn('account_id', $authAccountList)
- ->distinct()->pluck('account_id')->toArray();
- # 获取企业下的mp账号
- $mpAccountList = OfficialAccountRelation::selectRaw('app_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->whereIn('app_id', $authAccountList)
- ->distinct()->pluck('app_id')->toArray();
- $accountList = array_merge($adqAccountList, $mpAccountList);
- }
- if(empty($accountList)) return [];
- # 账号数据汇总曲线
- $data = AccountDataTrend::getActiveFansCurve($params, $accountList);
- if(empty($data)) return [];
- # 获取累计回收金额
- $recycleData = collect(AccountDataTrend::getCumulativeMoney($params, $accountList));
- // $recycleData = AdqAccountTrendData::getCumulativeMoney($params, $accountList, true);
- # 数据处理
- foreach($data as &$item) {
- # 消耗金额
- $item['paid'] = $item['paid'] / 100;
- # 首日roi
- $item['first_roi'] = round($item['first_roi'] * 100, 4);
- # 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 / $item['pay_money'], 4) * 100 : 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 / $item['pay_money'], 4) * 100 : 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 / $item['pay_money'], 4) * 100 : 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 / $item['pay_money'], 4) * 100 : 0;
- # 首日新增用户充值金额
- $item['pay_money'] = $item['pay_money'] / 100;
- }
- return $data;
- }
- /**
- * mp账号粉丝激活趋势曲线
- * */
- public static function getMpActiveFansCurve($params)
- {
- if(isset($params['app_id']) && $params['app_id']) {
- $accountList = [$params['app_id']];
- } else {
- # 获取企业下的adq账号
- $accountList = OfficialAccountRelation::selectRaw('app_id')->where('enable', 1)
- ->where('sys_group_id', $params['sys_group_id'])
- ->distinct()->pluck('app_id');
- if(empty($accountList)) return [];
- }
- # mp账号数据汇总曲线
- $data = MpAccountTrendData::getActiveFansCurve($params, $accountList);
- # 获取累计回收金额
- $recycleData = MpAccountTrendData::getCumulativeMoney($params, $accountList, true);
- if(empty($data)) return [];
- # 数据处理
- foreach($data as $item) {
- # 消耗金额
- $item->paid = $item->paid / 100;
- # 首日roi
- $item->first_roi = $item->first_roi * 100;
- # 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 / $item->pay_money, 4) * 100 : 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 / $item->pay_money, 4) * 100 : 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 / $item->pay_money, 4) * 100 : 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 / $item->pay_money, 4) * 100 : 0;
- # 首日新增用户充值金额
- $item->pay_money = $item->pay_money / 100;
- }
- return $data;
- }
- }
|