| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- namespace App\Services;
- use App\LaborReport;
- use Carbon\Carbon;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Database\Eloquent\Collection;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Str;
- use App\Traits\ServiceAppAop;
- class LaborReportsCountingRecordService
- {
- use ServiceAppAop;
- private $ttl;
- public function __construct(LaborReport $laborReport)
- {
- $this->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();
- }
- }
|