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; }
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; }
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; }