Wang Chen před 4 roky
rodič
revize
ac21e28249

+ 69 - 0
app/Cache/Activity/ActivityCache.php

@@ -0,0 +1,69 @@
+<?php
+
+
+namespace App\Cache\Activity;
+
+
+use App\Consts\BaseConst;
+use App\Libs\Utils;
+use Illuminate\Support\Facades\Redis;
+
+class ActivityCache
+{
+    public static function incrActivityPv($activityId, $date)
+    {
+        $cacheKey = Utils::getCacheKey('activity.statsPv', [$activityId, $date]);
+        Redis::incrBy($cacheKey, 1);
+        $ttl = Redis::ttl($cacheKey);
+        if ((int)$ttl < 1) {
+            Redis::expire($cacheKey, BaseConst::ONE_DAY_SECONDS * 3);
+        }
+        return true;
+    }
+
+    public static function zAddActivityUv($activityId, $date, $uid): bool
+    {
+        $cacheKey = Utils::getCacheKey('activity.statUv', [$activityId, $date]);
+        Redis::zAdd($cacheKey, time(), $uid);
+        $ttl = Redis::ttl($cacheKey);
+        if ((int)$ttl < 1) {
+            Redis::expire($cacheKey, BaseConst::ONE_WEEK_SECONDS);
+        }
+
+        return true;
+    }
+
+    /**
+     * 获取pv数
+     * @param $activityId
+     * @param $date
+     * @return int
+     */
+    public static function getActivityPv($activityId, $date): int
+    {
+        $cacheKey = Utils::getCacheKey('activity.statPv', [$activityId, $date]);
+        $exist    = Redis::exists($cacheKey);
+        if (!$exist) {
+            return 0;
+        }
+
+        return (int)Redis::get($cacheKey);
+    }
+
+    /**
+     * 获取uv数
+     * @param $activityId
+     * @param $date
+     * @return int
+     */
+    public static function getActivityUv($activityId, $date): int
+    {
+        $cacheKey = Utils::getCacheKey('activity.statUv', [$activityId, $date]);
+        $exist    = Redis::exists($cacheKey);
+        if (!$exist) {
+            return 0;
+        }
+
+        return (int)Redis::zCount($cacheKey, 0, 99999999999999999999999999);
+    }
+}

+ 6 - 2
app/Cache/CacheKeys.php

@@ -19,11 +19,15 @@ class CacheKeys
      * @var array
      */
     public static $all = [
-        'lock' => [
+        'lock'     => [
             'token' => 'Lock:%s', // 锁,token
         ],
-        'push' => [
+        'push'     => [
             'user' => 'Push:%s'
+        ],
+        'activity' => [
+            'statsPv' => 'Activity:pv:%s:%s',
+            'statsUv' => 'Activity:uv:%s:%s',
         ]
     ];
 }

+ 105 - 0
app/Console/Commands/Activity/ActivityStats.php

@@ -0,0 +1,105 @@
+<?php
+
+
+namespace App\Console\Commands\Activity;
+
+
+use App\Cache\Activity\ActivityCache;
+use App\Modules\Activity\Services\ActivityService;
+use App\Modules\Trade\Services\OrderService;
+use App\Modules\Activity\Models\ActivityStats as ActivityStatsModel;
+use Illuminate\Console\Command;
+
+class ActivityStats extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'activity:stats';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '统计快应用活动相关数据';
+
+    /**
+     * @throws \GuzzleHttp\Exception\GuzzleException
+     */
+    public function handle()
+    {
+        // 获取所有有效快应用
+        $activities = ActivityService::getValidActivities();
+        if (empty($activities)) {
+            return false;
+        }
+
+        // 获取活动统计
+        $activityIds   = array_column($activities, 'id');
+        $activityStats = ActivityStatsModel::getActivityStatsByActivityIds($activityIds);
+
+        $yesterday = date('Y-m-d');
+        foreach ($activities as $activity) {
+            [$activityId, $channelId] = [getProp($activity, 'id'), getProp($activity, 'distribution_channel_id')];
+            [$startAt, $endAt] = [getProp($activity, 'start_time'), getProp($activity, 'end_time')];
+
+            // 获取订单相关数据
+            $orders = OrderService::getOrdersByActivityId($channelId, $startAt, $activityId);
+            if (empty($orders)) {
+                continue;
+            }
+
+            // 订单总数、订单成功数、订单总金额
+            $orderNum        = 0;
+            $successOrderNum = 0;
+            $rechargeAmount  = 0;
+            $paidUids        = [];
+            foreach ($orders as $order) {
+                $uid = (int)getProp($order, 'uid');
+                $orderNum++;
+                if (getProp($order, 'status') === 'PAID') {
+                    $successOrderNum++;
+                    $rechargeAmount += getProp($order, 'price');
+                    if (!in_array($uid, $paidUids, true)) {
+                        $paidUids[] = $uid;
+                    }
+                }
+            }
+
+            // 获取昨日uv、pv
+            $uv = ActivityCache::getActivityUv($activityId, $yesterday);
+            $pv = ActivityCache::getActivityPv($activityId, $yesterday);
+
+            // 更新统计数据
+            $activityStat = collect($activityStats)->firstWhere('activity_id', $activityId);
+            if ($activityStat) {
+                ActivityStatsModel::updateData(['activity_id' => $activityId], [
+                    'success_order_num' => $successOrderNum,
+                    'recharge_amount'   => $rechargeAmount,
+                    'order_num'         => $orderNum,
+                    'paid_user_num'     => count($paidUids),
+                    'uv'                => $uv + (int)getProp($activityStat, 'uv'),
+                    'pv'                => $pv + (int)getProp($activityStat, 'pv'),
+                    'updated_at'        => date('Y-m-d H:i:s'),
+                ]);
+            } else {
+                ActivityStatsModel::insertData([
+                    'activity_id'       => $activityId,
+                    'channel_id'        => $channelId,
+                    'success_order_num' => $successOrderNum,
+                    'recharge_amount'   => $rechargeAmount,
+                    'order_num'         => $orderNum,
+                    'paid_user_num'     => count($paidUids),
+                    'uv'                => $uv,
+                    'pv'                => $pv,
+                    'created_at'        => date('Y-m-d H:i:s'),
+                    'updated_at'        => date('Y-m-d H:i:s'),
+                ]);
+            }
+        }
+    }
+
+}

+ 4 - 0
app/Console/Kernel.php

@@ -23,6 +23,7 @@ class Kernel extends ConsoleKernel
         OppoPushTest::class,
         PushTest::class,
         PushTask::class,
+        Commands\Activity\ActivityStats::class,
         Commands\BookAdjust::class,
         Commands\BookAdjustOne::class,
         Commands\BookSpider::class,
@@ -48,5 +49,8 @@ class Kernel extends ConsoleKernel
     {
         // 推送任务每分钟执行
         $schedule->command('push:task')->everyMinute()->sendOutputTo(storage_path('pushCommand-' . date('Y-m-d')));
+
+        // 每天的活动统计
+        $schedule->command('activity:stats')->dailyAt('01:00');
     }
 }

+ 5 - 7
app/Http/Controllers/QuickApp/Activity/ActivityController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers\QuickApp\Activity;
 
+use App\Cache\Activity\ActivityCache;
 use App\Consts\ErrorConst;
 use App\Http\Controllers\QuickApp\Activity\Transformers\ReBuildData;
 use App\Libs\ApiResponse;
@@ -223,13 +224,10 @@ class ActivityController extends BaseController
             Utils::throwError(ErrorConst::ACTIVITY_IS_END);
         }
 
-        // 活动统计
-        $uv_key_format = 'activity:%s:distribution_channel_id:%s:date:%s:uv';
-        $pv_key_format = 'activity:%s:distribution_channel_id:%s:pv';
-        $uv_key        = sprintf($uv_key_format, $activityId, $channelId, date('Y-m-d'));
-        $pv_key        = sprintf($pv_key_format, $activityId, $channelId);
-        Redis::sadd($uv_key, $uid);
-        Redis::hincrby($pv_key, date('Y-m-d'), 1);
+        // 活动pv、uv统计
+        $date = date('Y-m-d');
+        ActivityCache::incrActivityPv($activityId, $date);
+        ActivityCache::zAddActivityUv($activityId, $date, $uid);
 
         // 获取支付相关信息
         $settingJson     = getProp($activity, 'setting');

+ 3 - 3
app/Http/Controllers/QuickApp/Activity/Transformers/ReBuildData.php

@@ -21,10 +21,10 @@ class ReBuildData
             'endTime'     => getProp($activity, 'end_time'),
             'from'        => $param['from'],
             'activityId'  => getProp($activity, 'id'),
-            'isForever'   => getProp($activity, 'end_time') === '9999-12-30 23:59:59' ? 1 : 0,
+            'isForever'   => getProp($activity, 'end_time') === '9999-12-30 23:59:59' ? '1' : '0',
             'payChannels' => [
-                'ali'    => 1,
-                'wechat' => 1,
+                'ali'    => '1',
+                'wechat' => '1',
             ],
             'products'    => $this->buildProducts($param['products'], $param['settingProducts'])
         ];

+ 11 - 0
app/Modules/Activity/Models/Activity.php

@@ -46,4 +46,15 @@ class Activity extends Model
 
         return self::where('token', $token)->first();
     }
+
+    //获取有效活动
+    public static function getValidActivities()
+    {
+        $result = self::where([
+            ['qapp_account_id', '>', 0],
+            ['end_time', '<=', date('Y-m-d H:i:s')],
+        ])->get();
+
+        return $result ? $result->toArray() : [];
+    }
 }

+ 40 - 0
app/Modules/Activity/Models/ActivityStats.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Modules\Activity\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class ActivityStats extends Model
+{
+    protected $table = 'qapp_activity_stats';
+    protected $fillable = ['id', 'activity_id', 'channel_id', 'success_order_num', 'recharge_amount',
+        'order_num', 'pv', 'uv', 'paid_user_num'];
+
+    public static function getActivityStatsByActivityIds($activityIds)
+    {
+        if (empty($activityIds)) {
+            return [];
+        }
+
+        $result = self::whereIn('activity_id', $activityIds)->get();
+        return $result ? $result->toArray() : [];
+    }
+
+    public static function insertData($data)
+    {
+        if (empty($data)) {
+            return false;
+        }
+
+        return self::insert($data);
+    }
+
+    public static function updateData($where, $data)
+    {
+        if (empty($where) || empty($data)) {
+            return false;
+        }
+
+        return self::where($where)->update($data);
+    }
+}

+ 5 - 0
app/Modules/Activity/Services/ActivityService.php

@@ -327,4 +327,9 @@ GROUP by distribution_channel_id,date(created_at),price";
         }
         return $data;
     }
+
+    public static function getValidActivities()
+    {
+        return Activity::getValidActivities();
+    }
 }

+ 66 - 54
app/Modules/Trade/Models/Order.php

@@ -28,13 +28,13 @@ class Order extends Model
         if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']);
         if (isset($params['activity_id']) && count($params['activity_id']) > 0) $search_obj->whereIn('activity_id', $params['activity_id']);
         if (isset($params['from_type']) && $params['from_type']) $search_obj->where('from_type', $params['from_type']);
-     /*\Log::info('filter_:'.json_encode($params));
-        \Log::info(json_encode($search_obj));
-        \Log::info('my_sql:'.($search_obj->toSql()));*/
+        /*\Log::info('filter_:'.json_encode($params));
+           \Log::info(json_encode($search_obj));
+           \Log::info('my_sql:'.($search_obj->toSql()));*/
 //         \Log::info('my_sql:'.($search_obj->toSql()));
-        if(isset($params['created_at']) && $params['created_at'] ) {
-            \Log::info('created_at--:'.date('Y-m-d 00:00:00',strtotime($params['created_at'])));
-            $search_obj->whereBetween('orders.created_at',[date('Y-m-d 00:00:00',strtotime($params['created_at'])),date('Y-m-d 23:59:59',strtotime($params['created_at']))]);
+        if (isset($params['created_at']) && $params['created_at']) {
+            \Log::info('created_at--:' . date('Y-m-d 00:00:00', strtotime($params['created_at'])));
+            $search_obj->whereBetween('orders.created_at', [date('Y-m-d 00:00:00', strtotime($params['created_at'])), date('Y-m-d 23:59:59', strtotime($params['created_at']))]);
         }
         if ($is_all) {
             return $search_obj->get();
@@ -87,7 +87,7 @@ class Order extends Model
     static function getChannelToday($distribution_channel_id)
     {
         $begin_time = date('Y-m-d');
-        $end_time = date("Y-m-d", strtotime($begin_time) + 86400);
+        $end_time   = date("Y-m-d", strtotime($begin_time) + 86400);
         return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")])
             ->where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
@@ -100,8 +100,8 @@ class Order extends Model
     static function getChannelTodayData($distribution_channel_id)
     {
         $begin_time = date('Y-m-d');
-        $end_time = date('Y-m-d', strtotime($begin_time) + 86400);
-        $paid_info = self::select([DB::Raw("order_type,sum(price) as success_amount,count(1) as paid_num")])
+        $end_time   = date('Y-m-d', strtotime($begin_time) + 86400);
+        $paid_info  = self::select([DB::Raw("order_type,sum(price) as success_amount,count(1) as paid_num")])
             ->where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
             ->where('created_at', '<', $end_time)
@@ -120,31 +120,31 @@ class Order extends Model
             ->toArray();
 
         $ret = [
-            'amount' => 0,
-            'paid_num' => 0,
+            'amount'          => 0,
+            'paid_num'        => 0,
             'total_order_num' => 0,
 
-            'recharge_unpaid_number' => 0,
-            'recharge_paid_number' => 0,
+            'recharge_unpaid_number'  => 0,
+            'recharge_paid_number'    => 0,
             'recharge_success_amount' => 0,
 
-            'year_unpaid_number' => 0,
-            'year_paid_number' => 0,
+            'year_unpaid_number'  => 0,
+            'year_paid_number'    => 0,
             'year_success_amount' => 0
 
         ];
         foreach ($paid_info as $item) {
-            $ret['amount'] += $item['success_amount'];
-            $ret['paid_num'] += $item['paid_num'];
+            $ret['amount']          += $item['success_amount'];
+            $ret['paid_num']        += $item['paid_num'];
             $ret['total_order_num'] += $item['paid_num'];
 
             if ($item['order_type'] == 'RECHARGE') {
-                $ret['recharge_paid_number'] += $item['paid_num'];
+                $ret['recharge_paid_number']    += $item['paid_num'];
                 $ret['recharge_success_amount'] += $item['success_amount'];
             }
 
             if ($item['order_type'] == 'YEAR') {
-                $ret['year_paid_number'] += $item['paid_num'];
+                $ret['year_paid_number']    += $item['paid_num'];
                 $ret['year_success_amount'] += $item['success_amount'];
             }
         }
@@ -162,7 +162,7 @@ class Order extends Model
     static function getChannelDateOrderInfo($distribution_channel_id, $date)
     {
         $begin_time = $date;
-        $end_time = date("Y-m-d", strtotime($begin_time) + 86400);
+        $end_time   = date("Y-m-d", strtotime($begin_time) + 86400);
         return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")])
             ->where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
@@ -222,11 +222,12 @@ class Order extends Model
         if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']);
         return $search_obj->count();
     }
-    static function getByTradeNo($distribution_channel_id,$trade_no)
-    {
-    	return self::where('distribution_channel_id', $distribution_channel_id)->where('trade_no', $trade_no)->first();
+
+    static function getByTradeNo($distribution_channel_id, $trade_no)
+    {
+        return self::where('distribution_channel_id', $distribution_channel_id)->where('trade_no', $trade_no)->first();
     }
-    
+
     //获取派单下的普通用户订单总数
     static function getNormalOrderCount($send_order_id)
     {
@@ -243,7 +244,7 @@ class Order extends Model
     static function getDayPayUserNumByChannelId($distribution_channel_id, $date)
     {
         $begin_time = $date;
-        $end_time = date("Y-m-d", strtotime($date) + 86400);
+        $end_time   = date("Y-m-d", strtotime($date) + 86400);
         return self::where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
             ->where('created_at', '<', $end_time)
@@ -258,7 +259,7 @@ class Order extends Model
     static function getDayVipPayUserNumByChannelId($distribution_channel_id, $date)
     {
         $begin_time = $date;
-        $end_time = date("Y-m-d", strtotime($date) + 86400);
+        $end_time   = date("Y-m-d", strtotime($date) + 86400);
         return self::where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
             ->where('created_at', '<', $end_time)
@@ -272,7 +273,7 @@ class Order extends Model
     static function getDayRechargePayUserNumByChannelId($distribution_channel_id, $date)
     {
         $begin_time = $date;
-        $end_time = date("Y-m-d", strtotime($date) + 86400);
+        $end_time   = date("Y-m-d", strtotime($date) + 86400);
         return self::where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
             ->where('created_at', '<', $end_time)
@@ -285,9 +286,9 @@ class Order extends Model
     //获取指定日期普通充值未支付订单数、支付订单数、总额
     static function getChannelDayTicketRechargeData($distribution_channel_id, $date)
     {
-        $begin_time = $date;
-        $end_time = date("Y-m-d", strtotime($date) + 86400);
-        $paid_info = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")])
+        $begin_time   = $date;
+        $end_time     = date("Y-m-d", strtotime($date) + 86400);
+        $paid_info    = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")])
             ->where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
             ->where('created_at', '<', $end_time)
@@ -302,8 +303,8 @@ class Order extends Model
             ->count();
 
         return [
-            'ticket_recharge_paid_num' => $paid_info->paid_num,
-            'ticket_recharge_amount' => (float)$paid_info->success_amount,
+            'ticket_recharge_paid_num'   => $paid_info->paid_num,
+            'ticket_recharge_amount'     => (float)$paid_info->success_amount,
             'ticket_recharge_unpaid_num' => $unpaid_count
         ];
     }
@@ -311,9 +312,9 @@ class Order extends Model
     //获取指定日期包年充值未支付订单数、支付订单数、总额
     static function getChannelDayYearRechargeData($distribution_channel_id, $date)
     {
-        $begin_time = $date;
-        $end_time = date("Y-m-d", strtotime($date) + 86400);
-        $paid_info = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")])
+        $begin_time   = $date;
+        $end_time     = date("Y-m-d", strtotime($date) + 86400);
+        $paid_info    = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")])
             ->where('distribution_channel_id', $distribution_channel_id)
             ->where('created_at', '>=', $begin_time)
             ->where('created_at', '<', $end_time)
@@ -327,8 +328,8 @@ class Order extends Model
             ->where('status', 'UNPAID')
             ->count();
         return [
-            'year_recharge_paid_num' => $paid_info->paid_num,
-            'year_recharge_amount' => (float)$paid_info->success_amount,
+            'year_recharge_paid_num'   => $paid_info->paid_num,
+            'year_recharge_amount'     => (float)$paid_info->success_amount,
             'year_recharge_unpaid_num' => $unpaid_count
         ];
     }
@@ -337,11 +338,11 @@ class Order extends Model
     static function getChannelDayFirstRechargeData($distribution_channel_id, $date)
     {
         $begin_time = $date;
-        $end_time = date("Y-m-d", strtotime($date) + 86400);
+        $end_time   = date("Y-m-d", strtotime($date) + 86400);
         $first_data = DB::select("select count(distinct uid) count,sum(price) amount from orders a where distribution_channel_id = {$distribution_channel_id} and created_at>'{$begin_time}' and created_at<'{$end_time}' and status ='PAID' and not exists (select uid from orders where a.uid = uid and created_at < '{$begin_time}' and status= 'PAID' and distribution_channel_id = {$distribution_channel_id} limit 1)");
 
         return [
-            "count" => (int)$first_data[0]->count,
+            "count"  => (int)$first_data[0]->count,
             "amount" => (float)$first_data[0]->amount
         ];
     }
@@ -350,7 +351,7 @@ class Order extends Model
     static function getPromotionRegUserRechargeAmount($params = [])
     {
         $send_order_id = isset($params['send_order_id']) ? $params['send_order_id'] : 0;
-        $end_time = isset($params['end_time']) ? $params['end_time'] : date('Y-m-d H:i:s');
+        $end_time      = isset($params['end_time']) ? $params['end_time'] : date('Y-m-d H:i:s');
         if ($send_order_id) {
             $data = DB::select("select sum(price) amount from orders where status='PAID' and created_at <= '{$end_time}' and uid in (select id from users where send_order_id = '{$send_order_id}' )");
             return (float)$data[0]->amount;
@@ -370,7 +371,7 @@ class Order extends Model
 
         $search_obj->where('orders.status', 'PAID');
 
-        $data = $search_obj->select(DB::raw('sum(orders.price) as recharge_amount'), 'official_accounts.nickname', 'official_accounts.appid', 'orders.distribution_channel_id')->get()->toArray();
+        $data                   = $search_obj->select(DB::raw('sum(orders.price) as recharge_amount'), 'official_accounts.nickname', 'official_accounts.appid', 'orders.distribution_channel_id')->get()->toArray();
         $chanenelRechargeAmount = [];
         foreach ($data as $item) {
             $distribution_channel_id = $item['distribution_channel_id'];
@@ -381,7 +382,7 @@ class Order extends Model
         }
 
         foreach ($data as &$dataItem) {
-            $dataItem['date'] = $date;
+            $dataItem['date']       = $date;
             $dataItem['created_at'] = date('Y-m-d H:i:s');
             $dataItem['updated_at'] = date('Y-m-d H:i:s');
             foreach ($chanenelRechargeAmount as $key => $chanenelRechargeAmountItem) {
@@ -405,11 +406,11 @@ class Order extends Model
         $result = $search_obj->get();
 
         $official_accounts_result = DB::table('official_accounts')->select('appid', 'nickname')->get();
-        $temp_official_account = [];
+        $temp_official_account    = [];
         foreach ($official_accounts_result as $official_accounts_result_item) {
             $temp_official_account[$official_accounts_result_item->appid] = $official_accounts_result_item->nickname;
         }
-        $temp_channel = [];
+        $temp_channel               = [];
         $temp_channel_charge_amount = [];
         foreach ($result as $item) {
             if (!isset($temp_channel[$item->distribution_channel_id])) {
@@ -424,9 +425,9 @@ class Order extends Model
             if (!$force_subscribe_users_result) {
                 $force_subscribe_users_result = DB::table('force_subscribe_users')->where('uid', $item->uid)->where('is_subscribed', 0)->select('appid', 'distribution_channel_id')->first();
             }
-            if($force_subscribe_users_result){
+            if ($force_subscribe_users_result) {
                 $temp_channel[$item->distribution_channel_id][$force_subscribe_users_result->appid][] = $item->price;
-            }else{
+            } else {
                 $temp_channel[$item->distribution_channel_id]['unknown'][] = $item->price;
             }
             $temp_channel_charge_amount[$item->distribution_channel_id] += $item->price;
@@ -435,17 +436,28 @@ class Order extends Model
         $finalArray = [];
         foreach ($temp_channel as $key => $temp_channel_item) {
             foreach ($temp_channel_item as $appid => $price) {
-                $finalArray[] = ['date' => $date,
-                    'nickname' => isset($temp_official_account[$appid])?$temp_official_account[$appid]:'unknown',
-                    'appid' => $appid,
-                    'distribution_channel_id' => $key,
-                    'recharge_amount' => array_sum($price),
-                    'channel_recharge_amount' => $temp_channel_charge_amount[$key],
-                    'created_at' => date('Y-m-d H:i:s'),
-                    'updated_at' => date('Y-m-d H:i:s')];
+                $finalArray[] = ['date'                    => $date,
+                                 'nickname'                => isset($temp_official_account[$appid]) ? $temp_official_account[$appid] : 'unknown',
+                                 'appid'                   => $appid,
+                                 'distribution_channel_id' => $key,
+                                 'recharge_amount'         => array_sum($price),
+                                 'channel_recharge_amount' => $temp_channel_charge_amount[$key],
+                                 'created_at'              => date('Y-m-d H:i:s'),
+                                 'updated_at'              => date('Y-m-d H:i:s')];
             }
         }
 
         return $finalArray;
     }
+
+    public static function getOrdersByActivityId($channelId, $createdAt, $activityId)
+    {
+        $result = self::select('uid', 'status', 'price', 'activity_id', 'product_id')
+            ->where('distribution_channel_id', $channelId)
+            ->where('created_at', '>=', $createdAt)
+            ->where('activity_id', $activityId)
+            ->get();
+
+        return $result ? $result->toArray() : [];
+    }
 }

+ 21 - 15
app/Modules/Trade/Services/OrderService.php

@@ -15,8 +15,8 @@ class OrderService
 {
     /**
      * 查询订单
-     * @param  array $params [distribution_channel_id、begin_time、end_time、uid(用户ID)、send_order_id(派单ID)、trade_no(订单号)]
-     * @param  boolean $is_all [是否返回全部,默认否]
+     * @param array   $params [distribution_channel_id、begin_time、end_time、uid(用户ID)、send_order_id(派单ID)、trade_no(订单号)]
+     * @param boolean $is_all [是否返回全部,默认否]
      * @return [type]          [description]
      */
     static function search($params = [], $is_all = false)
@@ -26,7 +26,7 @@ class OrderService
 
     /**
      * 查询订单
-     * @param  array $params [distribution_channel_id、begin_time、end_time、uid(用户ID)、send_order_id(派单ID)、trade_no(订单号)]
+     * @param array $params [distribution_channel_id、begin_time、end_time、uid(用户ID)、send_order_id(派单ID)、trade_no(订单号)]
      */
     static function searchObj($params = [])
     {
@@ -35,7 +35,7 @@ class OrderService
 
     /**
      * 获取订单总额
-     * @param  array $params [distribution_channel_id、begin_time、end_time、uid、send_order_id]
+     * @param array $params [distribution_channel_id、begin_time、end_time、uid、send_order_id]
      */
     static function getAmount($params = [])
     {
@@ -44,7 +44,7 @@ class OrderService
 
     /**
      * 获取付费用户数
-     * @param  array $params [send_order_id]
+     * @param array $params [send_order_id]
      */
     static function getPayUserNum($send_order_id)
     {
@@ -53,7 +53,7 @@ class OrderService
 
     /**
      * 获取VIP付费用户数
-     * @param  array $params [send_order_id]
+     * @param array $params [send_order_id]
      */
     static function getVipPayUserNum($send_order_id)
     {
@@ -62,7 +62,7 @@ class OrderService
 
     /**
      * 获取普通付费用户数
-     * @param  array $params [send_order_id]
+     * @param array $params [send_order_id]
      */
     static function getNormaPayUserNum($send_order_id)
     {
@@ -71,7 +71,7 @@ class OrderService
 
     /**
      *获取派单下的订单总数
-     * @param  array $params [send_order_id]
+     * @param array $params [send_order_id]
      */
     static function getOrderCount($send_order_id)
     {
@@ -80,7 +80,7 @@ class OrderService
 
     /**
      *获取活动下的订单数
-     * @param  array $params [$activity_id]
+     * @param array $params [$activity_id]
      */
     static function getActivityOrderNum($params = [])
     {
@@ -89,7 +89,7 @@ class OrderService
 
     /**
      *获取派单下的普通用户的订单总数
-     * @param  array $params [send_order_id]
+     * @param array $params [send_order_id]
      */
     static function getNormalOrderCount($send_order_id)
     {
@@ -98,7 +98,7 @@ class OrderService
 
     /**
      *获取派单下的VIP用户的订单总数
-     * @param  array $params [send_order_id]
+     * @param array $params [send_order_id]
      */
     static function getVipOrderCount($send_order_id)
     {
@@ -112,7 +112,7 @@ class OrderService
      */
     static function getChannelToday($distribution_channel_id)
     {
-        $data = Order::getChannelToday($distribution_channel_id);
+        $data              = Order::getChannelToday($distribution_channel_id);
         $data['total_num'] = Redis::hget('order_stat:' . $distribution_channel_id, 'order_num_' . date('Y-m-d'));
         return $data;
     }
@@ -135,14 +135,14 @@ class OrderService
      */
     static function getChannelDateOrderInfo($distribution_channel_id, $date)
     {
-        $data = Order::getChannelDateOrderInfo($distribution_channel_id, $date);
+        $data              = Order::getChannelDateOrderInfo($distribution_channel_id, $date);
         $data['total_num'] = Redis::hget('order_stat:' . $distribution_channel_id, 'order_num_' . $date);
         return $data;
     }
 
     /**
      * 获取渠道对应支付通道总额
-     * @param  array $params [distribution_channel_id、begin_time、end_time]
+     * @param array $params [distribution_channel_id、begin_time、end_time]
      * @return array
      * [
      *     'ALIPAY'=>121,
@@ -201,7 +201,13 @@ class OrderService
      * @param $start_time 开始时间
      * @param $end_time 结束时间
      */
-    static function getRechargeAmountGroupByOfficial($date){
+    static function getRechargeAmountGroupByOfficial($date)
+    {
         return Order::getRechargeAmountGroupByOfficialAccount($date);
     }
+
+    public static function getOrdersByActivityId($channelId, $createdAt, $activityId)
+    {
+        return Order::getOrdersByActivityId($channelId, $createdAt, $activityId);
+    }
 }