Kaynağa Gözat

Merge branch 'liuzj-1000967-dev' into liuzj-06-29

# Conflicts:
#	modules/Channel/routes/route.php
liuzejian 1 yıl önce
ebeveyn
işleme
5e6289ef6d

+ 13 - 14
app/Console/Commands/Statistic/CompanyDayCharge.php

@@ -49,20 +49,19 @@ class CompanyDayCharge extends Command
                     DB::raw("sum(if(status <> 'unpaid' and order_type not in ('coin', 'first_coin'), 1, 0)) as vip_pay_count"),
                     DB::raw("sum(if(status <> 'unpaid' and order_type not in ('coin', 'first_coin'), 1, 0)) as vip_pay_count"),
                     DB::raw("sum(if(status = 'unpaid' and order_type not in ('coin', 'first_coin'), 1, 0)) as vip_unpay_count"),
                     DB::raw("sum(if(status = 'unpaid' and order_type not in ('coin', 'first_coin'), 1, 0)) as vip_unpay_count"),
                 )->first();
                 )->first();
-            if($info) {
-                DB::table('tj_company_day_charge')
-                    ->insert([
-                        'day_at' => $date,
-                        'pay_money' => $info->pay_money,
-                        'common_pay_count' => $info->common_pay_count,
-                        'common_unpay_count' => $info->common_unpay_count,
-                        'vip_pay_count' => $info->vip_pay_count,
-                        'vip_unpay_count' => $info->vip_unpay_count,
-                        'company_uid' => $companyUid,
-                        'created_at' => $now,
-                        'updated_at' => $now,
-                    ]);
-            }
+            DB::table('tj_company_day_charge')
+                ->insert([
+                    'day_at' => $date,
+                    'pay_money' => $info->pay_money ?? 0,
+                    'common_pay_count' => $info->common_pay_count ?? 0,
+                    'common_unpay_count' => $info->common_unpay_count ?? 0,
+                    'vip_pay_count' => $info->vip_pay_count ?? 0,
+                    'vip_unpay_count' => $info->vip_unpay_count ?? 0,
+                    'company_uid' => $companyUid,
+                    'created_at' => $now,
+                    'updated_at' => $now,
+                ]);
+
         }
         }
 
 
     }
     }

+ 12 - 15
app/Console/Commands/Statistic/CompanyMonthCharge.php

@@ -54,21 +54,18 @@ class CompanyMonthCharge extends Command
                     DB::raw("sum(vip_unpay_count) as vip_unpay_count"),
                     DB::raw("sum(vip_unpay_count) as vip_unpay_count"),
                     DB::raw("sum(vip_pay_count) as vip_pay_count"),
                     DB::raw("sum(vip_pay_count) as vip_pay_count"),
                 )->first();
                 )->first();
-            $now = date('Y-m-d H:i:s');
-            if($info) {
-                DB::table('tj_company_month_charge')
-                    ->insert([
-                        'month_at' => $month,
-                        'pay_money' => $info->pay_money,
-                        'common_pay_count' => $info->common_pay_count,
-                        'common_unpay_count' => $info->common_unpay_count,
-                        'vip_pay_count' => $info->vip_pay_count,
-                        'vip_unpay_count' => $info->vip_unpay_count,
-                        'company_uid' => $companyUid,
-                        'created_at' => $now,
-                        'updated_at' => $now,
-                    ]);
-            }
+            DB::table('tj_company_month_charge')
+                ->insert([
+                    'month_at' => $month,
+                    'pay_money' => $info->pay_money ?? 0,
+                    'common_pay_count' => $info->common_pay_count ?? 0,
+                    'common_unpay_count' => $info->common_unpay_count ?? 0,
+                    'vip_pay_count' => $info->vip_pay_count ?? 0,
+                    'vip_unpay_count' => $info->vip_unpay_count ?? 0,
+                    'company_uid' => $companyUid,
+                    'created_at' => $now,
+                    'updated_at' => $now,
+                ]);
         }
         }
     }
     }
 }
 }

+ 6 - 5
app/Console/Commands/Statistic/OptimizerMonthCharge.php

@@ -59,7 +59,12 @@ class OptimizerMonthCharge extends Command
                 ->get();
                 ->get();
             $insertData = [];
             $insertData = [];
             foreach ($result as $item) {
             foreach ($result as $item) {
-                $info = (array)$item;
+                $info['pay_money'] = $item->pay_money ?? 0;
+                $info['common_pay_count'] = $item->common_pay_count ?? 0;
+                $info['common_unpay_count'] = $item->common_unpay_count ?? 0;
+                $info['vip_unpay_count'] = $item->vip_unpay_count ?? 0;
+                $info['vip_pay_count'] = $item->vip_pay_count ?? 0;
+                $info['miniprogram_id'] = $item->miniprogram_id ?? 0;
                 $info['created_at'] = $info['updated_at'] = $now;
                 $info['created_at'] = $info['updated_at'] = $now;
                 $info['month_at'] = $month;
                 $info['month_at'] = $month;
                 $info['user_id'] = $userId;
                 $info['user_id'] = $userId;
@@ -70,9 +75,5 @@ class OptimizerMonthCharge extends Command
             DB::table('tj_optimizer_month_charge')
             DB::table('tj_optimizer_month_charge')
                 ->insert($insertData);
                 ->insert($insertData);
         }
         }
-
-
-        DB::table('tj_optimizer_month_charge')
-            ->insert($insertData);
     }
     }
 }
 }

+ 58 - 0
app/Console/Commands/Statistic/PromotionDayCharge.php

@@ -81,6 +81,64 @@ class PromotionDayCharge extends Command
             DB::table('tj_optimizer_day_charge')
             DB::table('tj_optimizer_day_charge')
                 ->insert($items->values()->toArray());
                 ->insert($items->values()->toArray());
         }
         }
+
+
+        DB::table('promotions')
+            ->leftJoin('users', 'users.id', '=' , 'promotions.uid')
+            ->select('promotions.id', 'promotions.uid', 'promotions.miniprogram_id', 'users.pid as puid')
+            ->orderBy('promotions.id')
+            ->chunk(100, function ($items) use ($date){
+                $promotionIds = $items->pluck('id');
+                $now = date('Y-m-d H:i:s');
+                $alreadyExistsPromotionIds = DB::table('tj_promotion_day_charge')
+                    ->where('day_at', $date)
+                    ->whereIn('promotion_id', $promotionIds)
+                    ->select('promotion_id')
+                    ->get()->pluck('promotion_id');
+                foreach ($items as $item) {
+                    if($alreadyExistsPromotionIds->contains($item->id)) {
+                        continue;
+                    }
+                    DB::table('tj_promotion_day_charge')
+                        ->insert([
+                            'promotion_id' => $item->id, 'day_at' => $date,
+                            'created_at' => $now, 'updated_at' => $now,
+                            'user_id' => $item->uid, 'puser_id' => $item->puid,
+                            'miniprogram_id' => $item->miniprogram_id
+                        ]);
+                }
+            });
+
+        DB::table('users')
+            ->join('user_has_roles', 'users.id', 'user_has_roles.user_id')
+            ->where(['user_has_roles.role_id' => 2, 'users.deleted_at' => 0])
+            ->distinct()
+            ->select('users.id', 'users.pid')
+            ->orderBy('users.id')
+            ->chunk(50, function ($items) use($date) {
+                $now = date('Y-m-d H:i:s');
+                foreach ($items as $item) {
+                    $miniprogramIds = DB::table('user_has_miniprograms')
+                        ->where('uid', $item->id)
+                        ->where('is_enabled', 1)
+                        ->select('miniprogram_id')
+                        ->get()->pluck('miniprogram_id');
+                    foreach ($miniprogramIds as $miniprogramId) {
+                        if(DB::table('tj_optimizer_day_charge')
+                            ->where([
+                                'day_at' => $date,
+                                'user_id' => $item->id, 'miniprogram_id' => $miniprogramId,
+                            ])->exists()) {
+                            continue;
+                        }
+                        DB::table('tj_optimizer_day_charge')
+                            ->insert([
+                                'day_at' => $date, 'user_id' => $item->id, 'miniprogram_id' => $miniprogramId,
+                                'puser_id' => $item->pid, 'created_at' => $now, 'updated_at' => $now
+                            ]);
+                    }
+                }
+            });
     }
     }
 
 
     /**
     /**

+ 29 - 0
modules/Channel/Http/Controllers/CompanyUserController.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace Modules\Channel\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+
+class CompanyUserController extends CatchController
+{
+    /**
+     * 商户列表
+     * @param Request $request
+     */
+    public function list(Request $request) {
+        $username = $request->input('username');
+        return DB::table('users')
+            ->join('user_has_roles','users.id', 'user_has_roles.user_id')
+            ->when($username, function ($query, $username){
+                return $query->where('users.username', 'like', '%'. $username. '%');
+            })
+            ->where([
+                'user_has_roles.role_id' => 1,
+                'users.status' => 1,
+                'users.deleted_at' => 0
+            ])->select('users.username', 'users.id')
+            ->get();
+    }
+}

+ 5 - 0
modules/Channel/routes/route.php

@@ -2,6 +2,7 @@
 
 
 use Illuminate\Support\Facades\Route;
 use Illuminate\Support\Facades\Route;
 use Modules\Channel\Http\Controllers\AdvertiserController;
 use Modules\Channel\Http\Controllers\AdvertiserController;
+use Modules\Channel\Http\Controllers\CompanyUserController;
 use Modules\Channel\Http\Controllers\PayTemplateController;
 use Modules\Channel\Http\Controllers\PayTemplateController;
 use Modules\Channel\Http\Controllers\UserMiniprogramController;
 use Modules\Channel\Http\Controllers\UserMiniprogramController;
 use Modules\Channel\Http\Controllers\WechatOpenPlatformController;
 use Modules\Channel\Http\Controllers\WechatOpenPlatformController;
@@ -49,6 +50,10 @@ Route::prefix('channel')->group(function () {
     Route::any('miniprogram/use_list', [\Modules\Channel\Http\Controllers\OrdersController::class, 'userUseList']);
     Route::any('miniprogram/use_list', [\Modules\Channel\Http\Controllers\OrdersController::class, 'userUseList']);
     Route::any('promotions/users', [\Modules\Channel\Http\Controllers\OrdersController::class, 'promotionsUsers']);
     Route::any('promotions/users', [\Modules\Channel\Http\Controllers\OrdersController::class, 'promotionsUsers']);
 
 
+    Route::prefix('companyUser')->group(function(){
+        Route::get('list', [CompanyUserController::class, 'list']);
+    });
+
 
 
     /**
     /**
      * 第三方开放平台
      * 第三方开放平台

+ 8 - 8
modules/Statistic/Http/Controllers/ChargeTJController.php

@@ -71,8 +71,8 @@ class ChargeTJController extends CatchController
         foreach ($result as $item) {
         foreach ($result as $item) {
             $item->common_pay_money_per = $item->common_pay_uv ? bcdiv($item->common_pay_money, $item->common_pay_uv ,2 ) : 0;
             $item->common_pay_money_per = $item->common_pay_uv ? bcdiv($item->common_pay_money, $item->common_pay_uv ,2 ) : 0;
             $item->vip_pay_money_per = $item->vip_pay_uv ? bcdiv($item->vip_pay_money, $item->vip_pay_uv ,2 ) : 0;
             $item->vip_pay_money_per = $item->vip_pay_uv ? bcdiv($item->vip_pay_money, $item->vip_pay_uv ,2 ) : 0;
-            $item->common_pay_rate = $item->common_pay_count ? bcdiv($item->common_pay_count,100 * ($item->common_pay_count + $item->common_unpay_count) ,2 ) . '%' : 0 .'%';
-            $item->vip_pay_rate = $item->vip_pay_count ? bcdiv($item->vip_pay_count ,100 * ($item->vip_pay_count + $item->vip_unpay_count), 2 ) . '%' : 0 .'%';
+            $item->common_pay_rate = $item->common_pay_count ? bcdiv(100 * $item->common_pay_count, ($item->common_pay_count + $item->common_unpay_count) ,2 ) . '%' : 0 .'%';
+            $item->vip_pay_rate = $item->vip_pay_count ? bcdiv(100 * $item->vip_pay_count , ($item->vip_pay_count + $item->vip_unpay_count), 2 ) . '%' : 0 .'%';
             $item->username = $users->get($item->user_id)->username ?? '';
             $item->username = $users->get($item->user_id)->username ?? '';
             $item->miniprogram_name = $miniprograms->get($item->miniprogram_id)->name ?? '';
             $item->miniprogram_name = $miniprograms->get($item->miniprogram_id)->name ?? '';
         }
         }
@@ -173,8 +173,8 @@ class ChargeTJController extends CatchController
             $info->common_unpay_count = intval($info->common_unpay_count);
             $info->common_unpay_count = intval($info->common_unpay_count);
             $info->vip_pay_count = intval($info->vip_pay_count);
             $info->vip_pay_count = intval($info->vip_pay_count);
             $info->vip_unpay_count = intval($info->vip_unpay_count);
             $info->vip_unpay_count = intval($info->vip_unpay_count);
-            $info->company_pay_rate = $info->common_pay_count ? bcdiv($info->common_pay_count,($info->common_pay_count + $info->common_unpay_count) * 100,  2) . '%' : '0%';
-            $info->vip_pay_rate = $info->vip_pay_count ? bcdiv($info->vip_pay_count, ($info->vip_pay_count + $info->vip_unpay_count) * 100, 2) . '%' : '0%';
+            $info->company_pay_rate = $info->common_pay_count ? bcdiv($info->common_pay_count * 100,($info->common_pay_count + $info->common_unpay_count),  2) . '%' : '0%';
+            $info->vip_pay_rate = $info->vip_pay_count ? bcdiv($info->vip_pay_count * 100, ($info->vip_pay_count + $info->vip_unpay_count), 2) . '%' : '0%';
         }
         }
         return $info;
         return $info;
     }
     }
@@ -211,8 +211,8 @@ class ChargeTJController extends CatchController
             $info->common_unpay_count = intval($info->common_unpay_count);
             $info->common_unpay_count = intval($info->common_unpay_count);
             $info->vip_pay_count = intval($info->vip_pay_count);
             $info->vip_pay_count = intval($info->vip_pay_count);
             $info->vip_unpay_count = intval($info->vip_unpay_count);
             $info->vip_unpay_count = intval($info->vip_unpay_count);
-            $info->company_pay_rate = $info->common_pay_count ? bcdiv($info->common_pay_count,($info->common_pay_count + $info->common_unpay_count) * 100,  2) . '%' : '0%';
-            $info->vip_pay_rate = $info->vip_pay_count ? bcdiv($info->vip_pay_count, ($info->vip_pay_count + $info->vip_unpay_count) * 100, 2) . '%' : '0%';
+            $info->company_pay_rate = $info->common_pay_count ? bcdiv($info->common_pay_count * 100,($info->common_pay_count + $info->common_unpay_count),  2) . '%' : '0%';
+            $info->vip_pay_rate = $info->vip_pay_count ? bcdiv($info->vip_pay_count * 100, ($info->vip_pay_count + $info->vip_unpay_count), 2) . '%' : '0%';
         }
         }
         return $info;
         return $info;
     }
     }
@@ -253,8 +253,8 @@ class ChargeTJController extends CatchController
             'vip_unpay_count' => $info->vip_unpay_count ?? 0 + $currentMonthInfo->vip_unpay_count ?? 0,
             'vip_unpay_count' => $info->vip_unpay_count ?? 0 + $currentMonthInfo->vip_unpay_count ?? 0,
             'vip_pay_count' => $info->vip_pay_count ?? 0 + $currentMonthInfo->vip_pay_count ?? 0,
             'vip_pay_count' => $info->vip_pay_count ?? 0 + $currentMonthInfo->vip_pay_count ?? 0,
         ];
         ];
-        $result->company_pay_rate = $result->common_pay_count ? bcdiv($result->common_pay_count,($result->common_pay_count + $result->common_unpay_count) * 100,  2) . '%' : '0%';
-        $result->vip_pay_rate = $result->vip_pay_count ? bcdiv($result->vip_pay_count,($result->vip_pay_count + $result->vip_unpay_count) * 100,  2) . '%' : '0%';
+        $result->company_pay_rate = $result->common_pay_count ? bcdiv($result->common_pay_count * 100,($result->common_pay_count + $result->common_unpay_count),  2) . '%' : '0%';
+        $result->vip_pay_rate = $result->vip_pay_count ? bcdiv($result->vip_pay_count * 100,($result->vip_pay_count + $result->vip_unpay_count),  2) . '%' : '0%';
 
 
         return $result;
         return $result;
     }
     }

+ 9 - 4
modules/Statistic/Http/Controllers/ROITJController.php

@@ -19,7 +19,8 @@ class ROITJController extends CatchController
             'start_at' => 'nullable|date_format:Y-m-d',
             'start_at' => 'nullable|date_format:Y-m-d',
             'end_at' => 'nullable|date_format:Y-m-d|after_or_equal:start_at',
             'end_at' => 'nullable|date_format:Y-m-d|after_or_equal:start_at',
             'ranse_id' => 'nullable|integer|min:1',
             'ranse_id' => 'nullable|integer|min:1',
-            'miniprogram_id' => 'nullable|integer|min:1'
+            'miniprogram_id' => 'nullable|integer|min:1',
+            'puser_id' => 'nullable|integer|min:1'
         ]);
         ]);
 
 
         $startAt = $request->input('start_at');
         $startAt = $request->input('start_at');
@@ -35,6 +36,9 @@ class ROITJController extends CatchController
         if ($roles->contains('optimizer')) {
         if ($roles->contains('optimizer')) {
             $userId = $this->getLoginUserId();
             $userId = $this->getLoginUserId();
         }
         }
+        if($roles->contains('administrator')) {
+            $puserId = $request->input('puser_id');
+        }
 
 
         return DB::table('tj_promotion_day_charge')
         return DB::table('tj_promotion_day_charge')
             ->when($startAt, function ($query, $startAt) {
             ->when($startAt, function ($query, $startAt) {
@@ -75,15 +79,16 @@ class ROITJController extends CatchController
                 ->whereIn('id', $result->pluck('miniprogram_id'))
                 ->whereIn('id', $result->pluck('miniprogram_id'))
                 ->select('id', 'name')
                 ->select('id', 'name')
                 ->get()->keyBy('id');
                 ->get()->keyBy('id');
-            $companyUserName = DB::table('users')
-                ->where('id', $result->first()->puser_id)->value('username');
+            $companyUserNames = DB::table('users')
+                ->whereIn('id', $result->pluck('puser_id'))->select('id','username')
+                ->get()->keyBy('id');
             $promotions = DB::table('promotions')
             $promotions = DB::table('promotions')
                 ->whereIn('id', $result->pluck('promotion_id'))
                 ->whereIn('id', $result->pluck('promotion_id'))
                 ->select('id', 'name')
                 ->select('id', 'name')
                 ->get()->keyBy('id');
                 ->get()->keyBy('id');
             foreach ($result as $item) {
             foreach ($result as $item) {
                 // 商户
                 // 商户
-                $item->company_username = $companyUserName;
+                $item->company_username = $companyUserNames->get($item->puser_id)->username ?? '';
                 // 优化师
                 // 优化师
                 $item->optimizer_name = $users->get($item->user_id)->username ?? '';
                 $item->optimizer_name = $users->get($item->user_id)->username ?? '';
                 // 小程序
                 // 小程序

+ 19 - 0
tests/Channel/Http/Controllers/CompanyUserControllerTest.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace Tests\Channel\Http\Controllers;
+
+use Modules\Channel\Http\Controllers\CompanyUserController;
+use PHPUnit\Framework\TestCase;
+use Tests\UsedTestCase;
+
+class CompanyUserControllerTest extends UsedTestCase
+{
+
+    public function testList()
+    {
+        $res = $this->withHeaders([
+            'Authorization' => 'Bearer '. $this->token,
+        ])->json('get','http://localhost/api/channel/companyUser/list');
+        $this->dumpJson($res);
+    }
+}

+ 19 - 0
tests/Console/Commands/Statistic/PromotionDayChargeTest.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace Tests\Console\Commands\Statistic;
+
+use App\Console\Commands\Statistic\PromotionDayCharge;
+use PHPUnit\Framework\TestCase;
+
+class PromotionDayChargeTest extends \Tests\TestCase
+{
+
+    public function testHandle()
+    {
+        for($i = 0; $i > -27; $i--) {
+            $date = date('Y-m-d', strtotime(sprintf('%s day', $i)));
+            $data[] = 'php artisan Statistic:CompanyDayCharge --date='.$date;
+        }
+        dump(join(' && ', $data));
+    }
+}

+ 1 - 1
tests/Statistic/Http/Controllers/ROITJControllerTest.php

@@ -14,7 +14,7 @@ class ROITJControllerTest extends UsedTestCase
             'Authorization' => 'Bearer '. $this->token,
             'Authorization' => 'Bearer '. $this->token,
         ])->json('get','http://localhost/api/statistic/roi/list', [
         ])->json('get','http://localhost/api/statistic/roi/list', [
 //            'user_id' => 10,
 //            'user_id' => 10,
-            'limit' => 3,
+//            'limit' => 3,
 //            'start_at' => '2023-06-03',
 //            'start_at' => '2023-06-03',
 //            'end_at' => '2023-06-04',
 //            'end_at' => '2023-06-04',
         ]);
         ]);