ttl = config('cache.expirations.commonFrequent'); $laborReport::$withoutAppends = false; } public function userGroupsCount($start, $end) { $resultByCache = Cache::remember('userGroupsCount_' . $start . '_' . $end, $this->ttl, function () use ($start, $end) { return LaborReport::query()->selectRaw('user_workgroup_id,count(user_workgroup_id) amount') ->with('userWorkgroup', 'laborReportStatus') ->whereDate('created_at', '>=', $start) ->whereDate('created_at', '<', $end) ->groupBy('user_workgroup_id')->get(); }); $resultByCache = $resultByCache->filter(function ($item) { return $item->amount != 0; }); $result = collect(); $resultByCache->each(function ($item) use (&$result) { $result->push( [ 'value' => $item->amount, 'name' => $item->userWorkgroup->name ?? '未进组', 'id' => $item->userWorkgroup->id ?? 10000, ] ); }); return $result->sortBy('id'); } /** * @param $kvPairs * @return array|Builder[]|Collection */ public function get($kvPairs) { switch ($kvPairs['unit']) { case '日': $str = "'%Y-%m-%d'"; break; case '月': $str = "'%Y-%m'"; break; case '年': $str = "'%Y'"; break; default: $str = "'%Y-%m-%d'"; } $queryBuilder = LaborReport::query() ->selectRaw("DATE_FORMAT(created_at,{$str}) as date_target, count(DISTINCT enter_number ) as counter") ->whereBetween('created_at', [$kvPairs['start'], $kvPairs['end']]); if (!empty($kvPairs['userWorkgroupIds'])&&$kvPairs['userWorkgroupIds']!=='all') { $user_workgroup_ids = array_filter(preg_split('/[,, ]+/is', $kvPairs['userWorkgroupIds'])); $queryBuilder->whereIn('user_workgroup_id', $user_workgroup_ids); } return $queryBuilder->groupBy('date_target')->get(); } }