123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2019/4/29 0029
- * Time: 17:16
- */
- namespace App\Http\Logics\Admin;
- use App\Http\Models\Link;
- use App\Http\Models\LinkTask;
- use App\Http\Models\LinkTaskDetail;
- use App\Http\Models\LinkTaskUrl;
- use App\Http\Models\User;
- use \Illuminate\Database\Eloquent\Builder;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\DB;
- class LinkLogic
- {
- protected $request;
- public function __construct(Request $request)
- {
- $this->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;
- }
- }
|