123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <?php
- namespace Tests\Statistic\Http\Controllers;
- use Catch\Base\CatchController;
- use Illuminate\Foundation\Validation\ValidatesRequests;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Modules\User\Http\Controllers\UserTrait;
- class ROITJController extends CatchController
- {
- use ValidatesRequests;
- use UserTrait;
- private function _sql(Request $request)
- {
- $this->validate($request, [
- 'start_at' => 'nullable|date_format:Y-m-d',
- 'end_at' => 'nullable|date_format:Y-m-d|after_or_equal:start_at',
- 'ranse_id' => 'nullable|integer|min:1',
- 'miniprogram_id' => 'nullable|integer|min:1'
- ]);
- $startAt = $request->input('start_at');
- $endAt = $request->input('end_at');
- $ranseId = $request->input('ranse_id');
- $miniprogramId = $request->input('miniprogram_id');
- $roles = $this->listUserRoles();
- $puserId = null;
- $userId = null;
- if ($roles->contains('company')) {
- $puserId = $this->getLoginUserId();
- }
- if ($roles->contains('optimizer')) {
- $userId = $this->getLoginUserId();
- }
- return DB::table('tj_promotion_day_charge')
- ->when($startAt, function ($query, $startAt) {
- return $query->where('day_at', '>=', $startAt);
- })->when($endAt, function ($query, $endAt) {
- return $query->where('day_at', '<=', $endAt);
- })->when($ranseId, function ($query, $ranseId) {
- return $query->where('promotion_id', $ranseId);
- })->when($miniprogramId, function ($query, $miniprogramId) {
- return $query->where('miniprogram_id', $miniprogramId);
- })->when($puserId, function ($query, $puserId) {
- return $query->where('puser_id', $puserId);
- })->when($userId, function ($query, $userId) {
- return $query->where('user_id', $userId);
- })->orderBy('id', 'desc');
- }
- // 推广链接投入产出每日列表
- public function list(Request $request)
- {
- $sql = $this->_sql($request)->select(
- 'day_at', 'user_id', 'puser_id', 'new_user_num', 'new_user_pay_uv',
- 'cost_money', 'new_user_pay_money', 'new_user_vip_pay_money', 'new_user_common_pay_money',
- 'new_user_vip_pay_uv', 'new_user_common_pay_uv', 'miniprogram_id'
- );
- $isExport = $request->integer('is_export', false);
- if ($isExport) {
- $result = $sql->get();
- } else {
- $result = $sql->paginate($request->input('limit', 20));
- }
- if ($result->count()) {
- $users = DB::table('users')
- ->whereIn('id', $result->pluck('user_id'))
- ->select('id', 'username')
- ->get()->keyBy('id');
- $miniprograms = DB::table('miniprogram')
- ->whereIn('id', $result->pluck('miniprogram_id'))
- ->select('id', 'name')
- ->get()->keyBy('id');
- $companyUserName = DB::table('users')
- ->where('id', $result->first()->puser_id)->value('username');
- foreach ($result as $item) {
- // 商户
- $item->company_username = $companyUserName;
- // 优化师
- $item->optimizer_name = $users->get($item->user_id)->username ?? '';
- // 小程序
- $item->miniprogram_name = $miniprograms->get($item->miniprogram_id)->name ?? '';
- // 回本
- $item->huiben = $item->cost_money !== '0.00' ? intval($item->new_user_pay_money * 10000 / $item->cost_money) / 100 . '%' : '0%';
- // 新增用户成本
- $item->new_user_cost_money = $item->new_user_num ? intval($item->cost_money * 100 / $item->new_user_num) / 100 : 0;
- // 新增用户人均充值
- $item->new_user_pay_money_per = $item->new_user_pay_uv ? intval($item->new_user_pay_money * 100 / $item->new_user_pay_uv) / 100 : 0;
- // 会员成本,累计
- $item->vip_money_per = $item->new_user_vip_pay_uv ? intval($item->cost_money * 100 / $item->new_user_vip_pay_uv) / 100 : 0;
- // 充值成本,累计
- $item->common_money_per = $item->new_user_common_pay_uv ? intval($item->cost_money * 100 / $item->new_user_common_pay_uv) / 100 : 0;
- // 会员转化率
- $item->zhuanhua_vip = $item->new_user_num ? intval($item->new_user_vip_pay_uv * 10000 / $item->new_user_num) / 100 . '%' : '0%';
- // 充值转化率
- $item->zhuanhua_common = $item->new_user_num ? intval($item->new_user_common_pay_uv * 10000 / $item->new_user_num) / 100 . '%' : '0%';
- // 总计转化率
- $item->zhuanhua_all = $item->new_user_num ? intval($item->new_user_pay_uv * 10000 / $item->new_user_num) / 100 . '%' : '0%';
- }
- }
- return $result;
- }
- // 推广链接投入产出每日列表综合
- public function listTotal(Request $request)
- {
- $sql = $this->_sql($request)->select('new_user_pay_money', 'cost_money');
- $result = $sql->select(
- DB::raw("sum(new_user_pay_money) as pay_money"),
- DB::raw("sum(cost_money) as cost_money"),
- )->first();
- if ($result) {
- return [
- 'pay_money' => $result->pay_money,
- 'cost_money' => $result->cost_money,
- ];
- } else {
- return [];
- }
- }
- }
|