예제 #1
0
 public static function earning($stats = [], $adid, $user_id = null)
 {
     $records = [];
     foreach ($stats as $date => $r) {
         $commissions = [];
         $meta = $r['meta'] ?? [];
         if (array_key_exists("country", $meta)) {
             $countryWise = $meta["country"] ?? [];
             foreach ($countryWise as $country => $clicks) {
                 $extra = ['type' => 'both', 'start' => $date, 'end' => $date];
                 if ($user_id) {
                     $extra['publisher'] = \User::first(['_id' => $user_id]);
                 }
                 $comm = \Commission::campaignRate($adid, $commissions, $country, $extra);
                 $earning = \Ad::earning($comm, $clicks);
                 ArrayMethods::add($earning, $r);
             }
         }
         $records[$date] = $r;
     }
     return $records;
 }
예제 #2
0
 public static function total($dq = [], $user = null, $fields = [])
 {
     $name = __CLASS__;
     if (count($fields) === 0) {
         $fields = ['clicks', 'conversions', 'impressions', 'revenue'];
     }
     $project = ['user_id' => 1, '_id' => 0];
     $group = ['_id' => '$user_id'];
     foreach ($fields as $f) {
         $project[$f] = 1;
         $group[$f] = ['$sum' => '$' . $f];
     }
     $match = ['created' => Db::dateQuery($dq['start'], $dq['end'])];
     if (is_array($user)) {
         $keys = ArrayMethods::arrayKeys($user, '_id');
         $match['user_id'] = ['$in' => Db::convertType($keys)];
     } else {
         $match['user_id'] = Db::convertType($user->_id);
     }
     $records = Db::collection($name)->aggregate([['$match' => $match], ['$project' => $project], ['$group' => $group]]);
     $result = [];
     foreach ($records as $r) {
         $obj = Utils::toArray($r);
         $add = [];
         foreach ($fields as $f) {
             $add[$f] = $obj[$f];
         }
         ArrayMethods::add($add, $result);
     }
     return $result;
 }
예제 #3
0
 public static function calTotal($perf)
 {
     $total = ['meta' => []];
     foreach ($perf as $key => $value) {
         ArrayMethods::add($value, $total);
         if (!isset($value['meta']) || !is_array($value['meta'])) {
             continue;
         }
         foreach ($value['meta'] as $k => $v) {
             if (!isset($total['meta'][$k])) {
                 $total['meta'][$k] = [];
             }
             ArrayMethods::add($v, $total['meta'][$k]);
         }
     }
     return $total;
 }