request = $request; } public function taskFilters($inputs): Builder { $builder = LinkTask::query()->scopes(['user']); !empty($inputs['siteId']) && $filters[] = ['site_id', '=', $inputs['siteId']]; !empty($inputs['keyword']) && $filters[] = ['url', 'like', '%' . $inputs['keyword'] . '%']; !empty($inputs['status']) && $filters[] = ['status', '=', $inputs['status']]; return $builder->where($filters ?? []); } public function taskItemsTransform($items) { array_walk($items, function ($item) { $item->typeTitle = $item->type_title; $item->worker_name = $item->worker->username ?? ''; $item->site_title = $item->site->cn_title ?? ''; $item->status_title = $item->status_with_css; }); return $items; } public function demo(Request $request) { return $this->request->input(); } public function syncLinkTasksUrl($urls, $linkTaskDetailId) { $ids = array_column($urls, 'id'); $linkUrlIds = LinkTaskUrl::query()->where(['link_tasks_detail_id' => $linkTaskDetailId])->pluck('id')->toArray(); $diff = array_diff($linkUrlIds, $ids); if ($diff) LinkTaskUrl::destroy($diff); $insert = []; foreach ($urls as $item) { if (!$item['id']) { $insert[] = ['link_tasks_detail_id' => $linkTaskDetailId, 'url' => $item['url'], 'created_at' => date('Y-m-d H:i:s')]; } else { LinkTaskUrl::query()->where(['id' => $item['id']])->update(['url' => $item['url']]); } } if ($insert) { LinkTaskUrl::query()->insert($insert); } return response()->json(['message' => '操作成功']); } /** * 条件查询过滤 构造器 * @param $inputs * @return Builder */ public function calcFilter($inputs): Builder { $builder = LinkTask::query(); !empty($inputs['start_at']) && $filters[] = ['audit_at', '>=', $inputs['start_at']]; !empty($inputs['end_at']) && $filters[] = ['audit_at', '<=', $inputs['end_at']]; return $builder->where($filters ?? [])->whereHas('worker', function (Builder $query) use ($inputs) { if (!empty($inputs['keyword'])) { $query->where('username', 'like', '%' . $inputs['keyword'] . '%'); } }); } /** * 返回兼职人员作为键值 URL数量的数组 * @param $items * @return array */ // public function calc($items) // { // //work => task => detail => url // $workerIdMapTaskIdsStr = array_column($items, 'task_ids', 'worker_id'); //获取兼职人员与任务ids的映射 // // $taskIds = explode(',', implode(',', array_column($items, 'task_ids'))); //获取符合条件的所有任务id // // $taskDetailRecords = LinkTaskDetail::query()->whereIn('task_id', $taskIds)->get(); //获取与人物关联的任务详情记录 // // $DetailIdMapTaskId = $taskDetailRecords->pluck('task_id', 'id')->toArray(); //获取link_tasks_detail_id与task_id的映射 // // $workerIdMapDetailId = []; // 处理workerId 与 link_tasks_detail_id 映射 // foreach ($workerIdMapTaskIdsStr as $workerId => $taskIdsStr) { // $tempTaskIds = explode(',', $taskIdsStr); // foreach ($DetailIdMapTaskId as $detailId => $taskId) { // if (in_array($taskId, $tempTaskIds)) { // $workerIdMapDetailId[$workerId][] = $detailId; // } // } // } // //获取演示地址url 审核通过的 // $taskUrls = LinkTaskUrl::query()->where(['status' => 5])->whereIn('link_tasks_detail_id', $taskDetailRecords->pluck('id')->toArray()) // ->get()->groupBy('link_tasks_detail_id'); // $workerMapUrl = []; //work_id与url数量的映射 // $detailIdMapWorkerId = $this->arrayFlip($workerIdMapDetailId); // foreach ($taskUrls as $link_tasks_detail_id => $urls) { // /**@var \Illuminate\Database\Eloquent\Collection $urls */ //将同一个workId数量累计 // $workerMapUrl[$detailIdMapWorkerId[$link_tasks_detail_id]] = $urls->count() + ($workerMapUrl[$detailIdMapWorkerId[$link_tasks_detail_id]] ?? 0); // } // return $workerMapUrl; // } /** * 键值互换 * @param $slices * @return array */ public function arrayFlip($slices) { $result = []; foreach ($slices as $key => $slice) { foreach ($slice as $item) { $result[$item] = $key; } } return $result; } public function calcHistoryFilter($inputs, $filters): Builder { $builder = LinkTask::query()->whereHas('worker', function (Builder $builder) use ($inputs) { if ($inputs['keyword']) { $builder->where('username', 'like', '%' . $inputs['keyword'] . '%'); } }); !empty($inputs['start_at']) && $filters[] = ['audit_at', '>=', $inputs['start_at']]; !empty($inputs['end_at']) && $filters[] = ['audit_at', '<=', $inputs['end_at']]; $builder->where($filters); return $builder; } public function taskSave($linkTaskId, $taskValidated, $linkIds, &$groupId, $releaseAt = null) { $taskValidated['optimize_page_ids']=is_array($taskValidated['optimize_page_ids'])?json_encode($taskValidated['optimize_page_ids']):null; if ($linkTaskId == 0) { //添加 $taskValidated['creator_id'] = Auth::id(); $taskValidated['status'] = empty($taskValidated['worker_id']) ? 1 : 2; //待分配或任务中 } $taskValidated['expired_at'] = date('Y-m-d H:i:s', strtotime('+1 day')); if ($linkTaskId > 0) { $result = LinkTask::query()->where(['id' => $linkTaskId])->first(); if (!$result) { return response()->json(['message' => '信息不存在'], 400); } $result->update($taskValidated); /**@var \Illuminate\Database\Eloquent\Model|object|static|null $result */ } else { if ($groupId > 0) { //后面的几个任务 //只针对批量发布时间的 $taskValidated['group_id'] = $groupId; $taskValidated['release_at'] = $releaseAt; $taskValidated['title'] =$taskValidated['title'].'-'.date('Ymd',strtotime($releaseAt)); } $result = LinkTask::query()->create($taskValidated); if ($groupId == 0) {//第一次是 0 //只针对批量发布时间的 $groupId = $result->id; $result->update(['group_id' => $groupId,'release_at'=>$releaseAt,'title'=>$taskValidated['title'].'-'.date('Ymd',strtotime($releaseAt))]); } /**@var \Illuminate\Database\Eloquent\Model|object|static|null $result */ } //获取审核通过的外链detail 的账号密码邮箱等信息 赋值给最新分配的 外链detail $LinkTaskDetailIdMapList = LinkTaskDetail::query()->selectRaw('username,email,password,url,link_id') ->whereIn('link_id', $linkIds) ->where(['redundant_site_id' => $result->site_id, 'status' => 5, 'enable' => 1]) // ->whereNotExists(function (Builder $builder) { // $builder->select(DB::raw(1))->from('link_tasks') // ->whereRaw('link_tasks_detail.task_id=link_tasks.id AND (link_tasks.status in (4) OR link_tasks.deleted_at is not null)'); // }) ->get()->keyBy('link_id')->toArray(); $linkMap = Link::query()->whereIn('id', $linkIds)->get()->keyBy('id')->toArray(); $relateTaskDetail = []; foreach ($linkIds as $linkId) { $relateTaskDetail[$linkId] = ($LinkTaskDetailIdMapList[$linkId] ?? []) + [ 'redundant_site_id' => $result->site_id, 'status' => 3,//status 3 待处理 'enable' => 1, 'link_type' => Link::TYPES[($linkMap[$linkId]['type'] ?? 0)] ?? '', 'link_url' => $linkMap[$linkId]['url'] ?? '', ]; } $result->links()->sync($relateTaskDetail); return null; } }