12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2020/3/5 0005
- * Time: 14:19
- */
- namespace App\Http\Controllers\Admin\Plan;
- use App\Exports\BasicExport;
- use App\Http\Controllers\Controller;
- use App\Http\Models\GoogleTrendsKeyword;
- use App\Http\Models\Mailbox;
- use App\Http\Models\Role;
- use App\Http\Models\ScheduledTasks;
- use App\Http\Models\User;
- use App\Http\Models\WeekTaskHistory;
- use App\Http\Models\WeekTaskInfo;
- use App\Http\Services\SendMessageService;
- use Illuminate\Http\Request;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Contracts\View\Factory;
- use Illuminate\View\View;
- use Illuminate\Http\JsonResponse;
- /**
- * 任务计划
- * Class TaskController
- * @package App\Http\Controllers\Admin\Plan
- */
- class TaskController extends Controller
- {
- //当前任务和下周任务 根据 type 区别
- public function index(Request $request, $userId = 0)
- {
- $weekTaskInfo = WeekTaskInfo::query();
- $type = $request->input('type');
- $dutyId = $request->input('duty_id');
- if (!empty($dutyId)) {
- $weekTaskInfo->where('duty_id', $dutyId);
- }
- if ($userId != 0) {
- $weekTaskInfo->where('duty_id', auth()->user()->id);
- }
- $type = $type == 'next' ? 'next' : 'now';
- $condition = ['type' => $type];
- list($web, $design, $exam, $siteExam, $site, $seo, $allUserList) = $this->getTaskByUserList();
- $taskInfoList = $weekTaskInfo->where($condition)
- ->orderBy('deadline', 'asc')
- ->get()->groupBy('user_type')
- ->map(function (Collection $item) {
- return $item->groupBy('day')->toArray();
- })->toArray();
- $user = User::query()->where('status', 1)->pluck('nickname', 'id');
- $condList = DB::table('week_task_cond')->pluck('name', 'id')->toArray();
- foreach ($taskInfoList as $key => $value) {
- foreach ($value as $kk => $vv) {
- foreach ($vv as $kkk => $vvv) {
- if (substr($vvv['user_type'], 0, 3) == 'wfp') {
- $vv[$kkk]['user_name'] = '未分配';
- } else {
- $vv[$kkk]['user_name'] = $user[$vvv['user_type']] ?? '';
- }
- $vv[$kkk]['cond_name'] = $condList[$vvv['cond_id']] ?? '';
- $vv[$kkk]['web_name'] = $web[$vvv['web_id']] ?? '';
- $vv[$kkk]['design_name'] = $design[$vvv['design_id']] ?? '';
- $vv[$kkk]['duty_name'] = $allUserList[$vvv['duty_id']] ?? '';
- }
- $value[$kk] = $vv;
- }
- $taskInfoList[$key] = $value;
- }
- $taskStaffList = [
- 'web' => [],
- 'design' => [],
- 'exam' => [],
- 'site-exam' => [],
- 'site' => [],
- 'seo' => [],
- ];
- //前端
- $taskStaffList['web']['wfp-web'] = '未分配';
- foreach ($web as $key => $item) {
- $taskStaffList['web'][$key] = $item;
- }
- //设计
- $taskStaffList['design']['wfp-design'] = '未分配';
- foreach ($design as $key => $item) {
- $taskStaffList['design'][$key] = $item;
- }
- //seo质检
- $taskStaffList['exam']['wfp-exam'] = '未分配';
- foreach ($exam as $key => $item) {
- $taskStaffList['exam'][$key] = $item;
- }
- //建站质检
- $taskStaffList['site-exam']['wfp-site-exam'] = '未分配';
- foreach ($siteExam as $key => $item) {
- $taskStaffList['site-exam'][$key] = $item;
- }
- //策划部
- $taskStaffList['site']['wfp-site'] = '未分配';
- foreach ($site as $key => $item) {
- $taskStaffList['site'][$key] = $item;
- }
- //优化部
- $taskStaffList['seo']['wfp-seo'] = '未分配';
- foreach ($seo as $key => $item) {
- $taskStaffList['seo'][$key] = $item;
- }
- $weekDateList = $this->getWeek(time());
- $weekDate = [];
- foreach ($weekDateList as $item) {
- $weekDate[] = $item['date'];
- }
- return view('admin/plan/task', [
- 'allUserList' => $allUserList,
- 'designerList' => $design,
- 'webList' => $web,
- 'taskInfoList' => $taskInfoList,
- 'type' => $type,
- 'dutyId' => $dutyId,
- 'taskStaffList' => $taskStaffList,
- 'is_user' => $userId,
- 'weekDate' => $weekDate,
- ]);
- }
- /**
- * 添加任务页面
- * @param $taskId
- * @param $auth
- * @return Factory|View
- */
- public function addTask($taskId, $auth)
- {
- $auth = explode(':', $auth);
- $condList = DB::table('week_task_cond')
- ->where('type', $auth[0])
- ->pluck('name', 'id')
- ->toArray();
- if ($auth[4] == 1) {
- $differenceCondId = WeekTaskInfo::query()
- ->where('id', $taskId)
- ->value('cond_id');
- $condIds = DB::table('week_task_cond')
- ->where('id', $differenceCondId)
- ->pluck('name', 'id')
- ->toArray();
- //兼容
- foreach ($condList as $key => $value) {
- foreach ($condIds as $kk => $vv) {
- if ($key !== $kk) {
- $condList[$kk] = $vv;
- }
- }
- }
- }
- list($web, $design, $exam, $siteExam, $site, $seo, $allUserList) = $this->getTaskByUserList();
- $weekTaskInfo = WeekTaskInfo::query()->where('id', $taskId)->first();
- $user = auth()->user();
- return view('admin/plan/add_task', [
- 'condList' => $condList,
- 'web' => $web,
- 'design' => $design,
- 'exam' => $exam,
- 'siteExam' => $siteExam,
- 'site' => $site,
- 'seo' => $seo,
- 'allUserList' => $allUserList,
- 'role' => 'wfp-' . $auth[0],
- 'type' => $auth[1],
- 'taskId' => $taskId,
- 'weekTaskInfo' => $weekTaskInfo,
- 'week' => date('w'),
- 'day' => $auth[2],
- 'role_id' => $user->role_id,
- 'user_id' => $auth[3],
- ]);
- }
- /**
- * 保存
- * @param Request $request
- * @param int $taskId
- * @return JsonResponse
- */
- public function saveTask(Request $request, $taskId = 0)
- {
- $data = [];
- $type = $request->input('type');
- $role = $request->input('role');
- $condId = $request->input('cond_id');
- if (empty($condId)) {
- return response()->json(['message' => '请选择任务类型'], 400);
- }
- $data['cond_id'] = $condId;
- $describe = $request->input('describe') ?? '';
- if (empty($describe)) {
- return response()->json(['message' => '请填写任务描述'], 400);
- }
- $data['describe'] = $describe;
- $userType = $request->input('user_type') ?? $role;
- $data['user_type'] = $userType;
- $dutyId = $request->input('duty_id');
- if (empty($dutyId)) {
- return response()->json(['message' => '请填写负责人'], 400);
- }
- $data['duty_id'] = $dutyId;
- $designId = $request->input('design_id') ?? 0;
- if (!empty($designId) && $designId == 'wfp-design') {
- $data['design_id'] = null;
- } else {
- $data['design_id'] = $designId;
- }
- $webId = $request->input('web_id') ?? 0;
- if (!empty($webId) && $webId == 'wfp-web') {
- $data['web_id'] = null;
- } else {
- $data['web_id'] = $webId;
- }
- $checkScore = $request->input('check_score') ?? 0;
- $data['check_score'] = $checkScore;
- $remark = $request->input('remark');
- if (in_array($condId, [5, 1]) && !$remark) {
- return response()->json(['message' => '请填写上测试站链接'], 400);
- }
- if ($condId == 16 && !$remark) {
- return response()->json(['message' => '请填写上内页链接'], 400);
- }
- $data['remark'] = $remark;
- $day = $request->input('day');
- if (substr($userType, 0, 3) == 'wfp') {
- $day = 0;
- }
- $user = auth()->user();
- $deadline = $request->input('deadline');
- if (empty($taskId)) {
- if (empty($deadline)) {
- return response()->json(['message' => '请填写上最后期限时间'], 400);
- }
- if (strtotime($deadline) == strtotime(date('Y-m-d')) || strtotime($deadline) < strtotime(date('Y-m-d'))) {
- return response()->json(['message' => '不允许创建截止时间为当天或小于当天的任务'], 400);
- }
- $data['deadline'] = $deadline;
- } else {
- if (!in_array($user->role_id, [14, 27])) {
- if (empty($deadline)) {
- return response()->json(['message' => '请填写上最后期限时间'], 400);
- } else {
- $data['deadline'] = $deadline;
- }
- }
- }
- $data['day'] = $day;
- $data['type'] = $type;
- $data['created_at'] = date('Y-m-d H:i:s');
- if (empty($taskId)) {
- $id = WeekTaskInfo::query()->insertGetId($data);
- $this->createTask($id);
- } else {
- unset($data['created_at']);
- WeekTaskInfo::query()->where('id', $taskId)->update($data);
- $this->createTask($taskId);
- }
- return response()->json(['message' => '操作成功']);
- }
- /**
- * 自动创建设计任务
- * @param $taskId
- * @param int $status
- */
- public function createTask($taskId, $status = 0)
- {
- $weekTaskInfo = WeekTaskInfo::query()->where('id', $taskId)->first();
- //筛选出最近2个礼拜的时间排除周末
- $dayList = $this->getDay();
- $data['describe'] = $weekTaskInfo->describe ?? '';
- $data['duty_id'] = $weekTaskInfo->duty_id ?? 0;
- $data['web_id'] = $weekTaskInfo->web_id ?? 0;
- $data['design_id'] = $weekTaskInfo->design_id ?? 0;
- $data['created_at'] = date('Y-m-d H:i:s');
- $data['remark'] = $weekTaskInfo->remark ?? '';
- //前端 首页切片创建时 创建 设计 移动端设计(历史任务和当前任务都没有才创建)
- $taskHistory = WeekTaskHistory::query()->where(['cond_id' => 18, 'describe' => $weekTaskInfo->describe])->first();
- $task = WeekTaskInfo::query()->where(['cond_id' => 18, 'describe' => $weekTaskInfo->describe])->first();
- if (in_array($weekTaskInfo->cond_id, [1]) && !$taskHistory && !$task) {
- $data['user_type'] = 'wfp-design';
- $data['type'] = 'now';
- $data['status'] = '';
- $data['day'] = 0;
- $data['cond_id'] = '18';
- $data['deadline'] = $dayList[2];
- WeekTaskInfo::query()->insert($data);
- }
- //完成时触发
- if ($status == 1) {
- //前端 测试站检查触 发建站质检的 测试站检查 (暂停)
- /* if (in_array($weekTaskInfo->cond_id, [5]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 66, 'describe' => $weekTaskInfo->describe])->exists()) {
- $data['user_type'] = 'wfp-site-exam';
- $data['type'] = 'now';
- $data['status'] = '';
- $data['day'] = 0;
- $data['cond_id'] = '66';
- $data['deadline'] = $dayList[1];
- WeekTaskInfo::query()->insert($data);
- }*/
- //前端 首页切片、内页切片
- if (in_array($weekTaskInfo->cond_id, [1, 16]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 65, 'describe' => $weekTaskInfo->describe])->exists()) {
- $data['user_type'] = 'wfp-site-exam';
- $data['type'] = 'now';
- $data['status'] = '';
- $data['day'] = 0;
- $data['cond_id'] = '65';
- $data['deadline'] = $dayList[1];
- WeekTaskInfo::query()->insert($data);
- }
- //建站质检 上线表格检查 触发seo质检 上线前质检
- /* if (in_array($weekTaskInfo->cond_id, [67]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 70, 'describe' => $weekTaskInfo->describe])->exists()) {
- $data['user_type'] = 'wfp-exam';
- $data['type'] = 'now';
- $data['status'] = '';
- $data['day'] = 0;
- $data['cond_id'] = '70';
- $data['deadline'] = $dayList[0];
- WeekTaskInfo::query()->insert($data);
- }*/
- //建站质检 上线后检查表 触发seo质检 上线后质检
- if (in_array($weekTaskInfo->cond_id, [68]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 71, 'describe' => $weekTaskInfo->describe])->exists()) {
- //延时任务
- $data['user_type'] = 'wfp-exam';
- $data['type'] = 'now';
- $data['status'] = '';
- $data['day'] = 0;
- $data['cond_id'] = '71';
- unset($data['deadline']);
- ScheduledTasks::query()->insert($data);//入库定时拉取
- }
- //建站质检 中的 上线表格检查 点击完成 三天后在 SEO质检 中自动生成 上线前质检 任务,且任务时限为三天
- if (in_array($weekTaskInfo->cond_id, [67]) && $weekTaskInfo->status == 'ok' && !ScheduledTasks::query()->where(['cond_id' => 70, 'describe' => $weekTaskInfo->describe])->exists()) {
- //延时任务
- $data['user_type'] = 'wfp-exam';
- $data['type'] = 'now';
- $data['status'] = '';
- $data['day'] = 0;
- $data['cond_id'] = '70';
- unset($data['deadline']);
- ScheduledTasks::query()->insert($data);//入库定时拉取
- }
- //前端百千读取读取 触发 建站质检的百千还原度检查
- if (in_array($weekTaskInfo->cond_id, [74]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 75, 'describe' => $weekTaskInfo->describe])->exists()) {
- $data['user_type'] = 'wfp-site-exam';
- $data['type'] = 'now';
- $data['status'] = '';
- $data['day'] = 0;
- $data['cond_id'] = '75';
- $data['deadline'] = $dayList[1];
- WeekTaskInfo::query()->insert($data);
- }
- //接单关键词查询完成发送短信给销售
- if (in_array($weekTaskInfo->cond_id, [87]) && $weekTaskInfo->status == 'ok') {
- $result = GoogleTrendsKeyword::query()->where('keyword', $weekTaskInfo->describe)->first();
- if (!empty($result)) {
- //自动创建任务并发短信给优化
- $sendMessageService = new SendMessageService();
- $user = User::query()->where('id', $weekTaskInfo->duty_id)->first();
- if (!empty($user->phone)) {
- $sendMessageService->sendMessage($user->phone, $weekTaskInfo->describe ?? '', 2);
- }
- }
- }
- }
- }
- public function condItems(Request $request)
- {
- $condId = $request->input('condId');
- $taskItems = DB::table('week_task_items')->where(['cond_id' => $condId])->get()->toArray();
- return response()->json(['data' => $taskItems]);
- }
- public function del(Request $request)
- {
- $taskId = $request->input('taskId');
- $user = auth()->user();
- if (!in_array($user->role_id, [14, 27])) {
- WeekTaskInfo::query()->where(['id' => $taskId])->delete();
- return response()->json(['message' => '操作成功']);
- } else {
- return response()->json(['message' => '操作失败'], 400);
- }
- }
- public function release(Request $request)
- {
- $taskId = $request->input('taskId');
- $type = $request->input('type');
- WeekTaskInfo::query()->where(['id' => $taskId])->update(['user_type' => 'wfp-' . $type, 'day' => 0]);
- return response()->json(['message' => '操作成功']);
- }
- public function changeStatus(Request $request)
- {
- $taskId = $request->input('taskId');
- $statusType = $request->input('statusType');
- $type = $request->input('type');
- if ($statusType == 'ok') {
- //完成
- $update = ['status' => $statusType, 'type' => $type, 'complete' => date('Y-m-d H:i:s')];
- } else {
- $update = ['status' => $statusType, 'type' => $type, 'complete' => null];
- }
- $weekTaskInfo = WeekTaskInfo::query()->where(['id' => $taskId])->first();
- if (!empty($weekTaskInfo)) {
- WeekTaskInfo::query()->where(['id' => $taskId])->update($update);
- $this->createTask($taskId, 1);
- //通知后台邮箱
- $user = User::query()->where('id', $weekTaskInfo->user_type)->value('nickname') ?? '';
- $string = $user . ' 完成了 ' . '" ' . $weekTaskInfo->describe . ' "' . ' 这个任务';
- Mailbox::query()->insert(['message' => $string, 'user_id' => $weekTaskInfo->duty_id]);
- }
- return response()->json(['message' => '操作成功']);
- }
- //任务迁移
- public function migrate()
- {
- WeekTaskInfo::query()->where(['type' => 'now', 'status' => 'ok'])->delete();
- WeekTaskInfo::query()->where(['type' => 'now'])->whereNotIn('user_type', ['wfp-web', 'wfp-design', 'wfp-exam', 'wfp-site-exam', 'wfp-site', 'wfp-seo'])->update(['day' => 1]);
- WeekTaskInfo::query()->where(['type' => 'next'])->update(['type' => 'now']);
- return response()->json(['message' => '操作成功,清刷新当前任务的页面']);
- }
- //任务历史
- public function taskHistory(Request $request)
- {
- if (!$request->ajax()) {
- //采编、项目经理
- $userList = User::query()->where('status', 1)->whereIn('role_id', [2, 25, 26, 29])->get();
- $webList = User::query()->where('status', 1)->whereIn('role_id', [14, 27])->get();
- return view('admin/plan/task_history', [
- 'user' => $userList ?? [],
- 'web' => $webList,
- ]);
- }
- $pageSize = $request->input('pageSize') ?? TABLE_PAGE_SIZE;
- //$builder = WeekTaskHistory::query()->with(['designer', 'dutyMan', 'webMan']);
- $builder = WeekTaskHistory::query();
- if ($insertDate = $request->input('insert_date')) {
- $builder->whereDate('insert_date', '=', $insertDate);
- }
- if ($desc = $request->input('desc')) {
- $builder->where('describe', 'like', '%' . $desc . '%');
- }
- if ($user_type = $request->input('user_type')) {
- $builder->where('user_type', '=', $user_type);
- }
- if ($duty_id = $request->input('duty_id')) {
- $builder->where('duty_id', '=', $duty_id);
- }
- $articles = $builder->where($condition ?? [])->orderByDesc('id')
- ->paginate($pageSize);
- $items = $articles->items();
- $userList = User::query()->pluck('nickname', 'id');
- $roles = Role::query()->pluck('name', 'id');
- $mapCondScore = DB::table('week_task_cond')->pluck('score', 'id')->toArray();
- if ($insertDate && $user_type) {
- $totalScore = 0;
- } else {
- $totalScore = '';
- }
- $overdueList = [];
- $array = [];
- array_walk($items,
- function ($item) use (&$userList, &$mapCondScore, &$totalScore, &$insertDate, &$user_type, &$count, &$array, &$roles, &$overdueList) {
- if ($item->slices_number != 0) {
- $item->cond_name = $item->cond_name . '*' . $item->slices_number;
- }
- if (empty($item->cond_item_id)) {
- $item->cond_item_id = 0;
- }
- $item->beOverdueDay = '';
- if ($item->status !== 'ok' && $item->deadline && strtotime($item->deadline) < strtotime(date('Y-m-d'))) {
- $beOverdueDay = (strtotime(date('Y-m-d')) - strtotime($item->deadline)) / 3600 / 24;
- $item->beOverdueDay = '逾期' . round($beOverdueDay) . '天';
- /* $overdueList[] = [
- 'user_id' => $item->user_type ?? '',
- 'day' => $beOverdueDay,
- ];*/
- }
- $item->completeBeOverdueDay = '';
- if ($item->status == 'ok' && $item->complete && strtotime(date('Y-m-d', strtotime($item->complete))) > strtotime($item->deadline)) {
- $completeBeOverdueDay = (strtotime(date('Y-m-d', strtotime($item->complete))) - strtotime($item->deadline)) / 3600 / 24;
- $item->completeBeOverdueDay = '逾期' . round($completeBeOverdueDay) . '天';
- $overdueList[] = [
- 'user_id' => $item->user_type ?? '',
- 'day' => $completeBeOverdueDay,
- 'task' => $item->id,
- ];
- }
- $item->deadline = substr($item->deadline, 0, 10);
- //$item->complete = substr($item->complete, 0, 10);
- $item->cond_item_list = DB::table('week_task_items')->where('cond_id', $item->cond_id)->pluck('name', 'id')->toArray() ?? [];
- $item->username = $userList[$item->user_type] ?? '';
- $item->role_id = User::query()->where('id', $item->user_type)->first()->role_id ?? '';
- $item->role_type = $roles[$item->role_id] ?? '';
- $item->designerName = $userList[$item->design_id] ?? '';
- $item->dutyName = $userList[$item->duty_id] ?? '';
- $item->webName = $userList[$item->web_id] ?? '';
- $item->statusTitle = WeekTaskInfo::StatusMap[$item->status] ?? '';
- if ($item->status == 'ok' && $insertDate && $user_type) {
- //切片数量,没有默认为1
- if ($item->slices_number == 0) {
- $slicesNumber = 1;
- } else {
- $slicesNumber = $item->slices_number;
- }
- if ($item['cond_id'] == 16) {
- $totalScore = floatval(bcadd(($mapCondScore[$item['cond_id']] ?? 0) * $slicesNumber, $totalScore, 2));
- } else {
- $totalScore = floatval(bcadd($mapCondScore[$item['cond_id']] ?? 0, $totalScore, 2));
- }
- $array[] = $item->cond_id;
- }
- });
- if (!empty($array)) {
- //过滤null
- foreach ($array as $key => $v) {
- if (empty($v)) {
- $array[$key] = 15;
- }
- }
- $result = array_count_values($array);
- $list = [];
- foreach ($result as $key => $value) {
- $list[$key]['key'] = $key;
- $list[$key]['value'] = $value;
- }
- $condIdList = WeekTaskHistory::query()->groupBy('cond_id', 'cond_name')->pluck('cond_name', 'cond_id')->toArray();
- foreach ($list as $key => $value) {
- $list[$key]['cond'] = $condIdList[$value['key']];
- }
- $string = '';
- foreach ($list as $key => $value) {
- $string .= $value['cond'] . ':' . $value['value'] . ' ';
- }
- }
- $webs = User::query()->where('role_id', 14)->pluck('id')->toArray();
- $design = User::query()->where('role_id', 27)->pluck('id')->toArray();
- $webOverdueDay = 0;
- $webTask = 0;
- $designOverdueDay = 0;
- $designTask = 0;
- foreach ($overdueList as $value) {
- if (in_array($value['user_id'], $webs)) {
- $webOverdueDay += $value['day'];
- $webTask++;
- }
- if (in_array($value['user_id'], $design)) {
- $designOverdueDay += $value['day'];
- $designTask++;
- }
- }
- return response()->json([
- 'rows' => $items,
- 'total' => $articles->total(),
- 'totalScore' => $totalScore,
- 'listCount' => $string ?? '',
- 'webOverdueDay' => $webOverdueDay,
- 'webTask' => $webTask,
- 'designOverdueDay' => $designOverdueDay,
- 'designTask' => $designTask,
- ]);
- }
- public function historyExport(Request $request)
- {
- $request = $request->all();
- $builder = WeekTaskHistory::query();
- if (!empty($request['duty_id'])) {
- $builder->where('duty_id', $request['duty_id']);
- }
- if (!empty($request['user_type'])) {
- $builder->where('user_type', $request['user_type']);
- }
- if (!empty($request['desc'])) {
- $builder->where('describe', 'like', '%' . $request['desc'] . '%');
- }
- if (!empty($request['insert_date'])) {
- $builder->whereDate('insert_date', '=', $request['insert_date']);
- } else {
- $builder->whereDate('insert_date', '=', date("Y-m-d", strtotime("-1 day")));
- }
- $userList = User::query()->pluck('nickname', 'id');
- $roles = Role::query()->pluck('name', 'id');
- $items = $builder->orderByDesc('id')->get();
- $overdueList = [];
- foreach ($items as $item) {
- $item->beOverdueDay = '';
- if ($item->status !== 'ok' && $item->deadline && strtotime($item->deadline) < strtotime(date('Y-m-d'))) {
- $beOverdueDay = (strtotime(date('Y-m-d')) - strtotime($item->deadline)) / 3600 / 24;
- $item->beOverdueDay = '逾期' . round($beOverdueDay) . '天';
- }
- $item->completeBeOverdueDay = '';
- if ($item->status == 'ok' && $item->complete && strtotime(date('Y-m-d', strtotime($item->complete))) > strtotime($item->deadline)) {
- $completeBeOverdueDay = (strtotime(date('Y-m-d', strtotime($item->complete))) - strtotime($item->deadline)) / 3600 / 24;
- $item->completeBeOverdueDay = '逾期' . round($completeBeOverdueDay) . '天';
- $overdueList[] = [
- 'user_id' => $item->user_type ?? '',
- 'day' => $completeBeOverdueDay,
- 'task' => $item->id,
- ];
- }
- $item->deadline = substr($item->deadline, 0, 10);
- $item->username = $userList[$item->user_type] ?? '';
- $item->role_id = User::query()->where('id', $item->user_type)->first()->role_id ?? '';
- $item->role_type = $roles[$item->role_id] ?? '';
- $item->designerName = $userList[$item->design_id] ?? '';
- $item->dutyName = $userList[$item->duty_id] ?? '';
- $item->webName = $userList[$item->web_id] ?? '';
- $item->statusTitle = WeekTaskInfo::StatusMap[$item->status] ?? '';
- }
- $result = [];
- foreach ($items as $key => $item) {
- if ($item->status == 'ok') {
- $status = '完成';
- } else {
- $status = '未完成';
- }
- if ($item->check_score == 0) {
- $evaluation = '未评价';
- } elseif ($item->check_score == 1) {
- $evaluation = '非常满意';
- } elseif ($item->check_score == 2) {
- $evaluation = '满意';
- } elseif ($item->check_score == 3) {
- $evaluation = '一般';
- } else {
- $evaluation = '';
- }
- $data = [
- 'date' => $item->insert_date,
- 'user' => $userList[$item->user_type] ?? [],
- 'user_type' => $roles[$item->role_id] ?? '',
- 'describe' => $item->describe ?? '',
- 'dutyMan' => $item->dutyName ?? '',
- 'designerName' => $item->designerName ?? '',
- 'webMan' => $item->webName ?? '',
- 'cond_name' => $item->cond_name ?? '',
- 'deadline' => $item->deadline ?? '',
- 'remark' => $item->remark ?? '',
- 'beOverdueDay' => $item->beOverdueDay,
- 'status' => $status,
- 'complete' => $item->complete,
- 'completeBeOverdueDay' => $item->completeBeOverdueDay,
- 'evaluation' => $evaluation,
- ];
- $result[] = $data;
- }
- array_unshift($result, ['时间', '用户', '类型', '任务描述', '负责人', '设计', '前端', '检查类型', '截止时间', '备注', '逾期时长', '状态', '完成时间', '完成逾期时长', '检查反馈']);
- return (new BasicExport($result))->download(sprintf('任务历史记录%s.xls', date('YmdHis')));
- }
- public function historyUpdate(Request $request, $id)
- {
- $checkScore = $request->input('check_score');
- if (!$request->ajax()) {
- $weekTaskHistory = WeekTaskHistory::query()->where('id', $id)->first() ?? '';
- return view('admin/plan/task_history_update', [
- 'weekTaskHistory' => $weekTaskHistory,
- ]);
- }
- $result = WeekTaskHistory::query()->where('id', $id)->update(['check_score' => $checkScore]);
- if (!empty($result)) {
- return response()->json(['message' => '操作成功']);
- }
- }
- public function rank(Request $request, $type)
- {
- $userList = User::query()->where('role_id', $type)->where('status', 1)->pluck('nickname', 'id')->toArray();
- $userId = User::query()->where('role_id', $type)->where('status', 1)->value('id');
- if ($type == 14) {
- $auth = 'web';
- } else {
- $auth = 'design';
- }
- list($cond, $condList) = $this->getWeekTaskCondList($auth);
- $user = $request->input('user') ?? $userId;
- $date = $request->input('date') ?? date('Y-m');
- $userRank = [];
- foreach ($userList as $key => $item) {
- //这个月
- $thisMonth = $this->getSunday($date);
- list($thisMonth, $thisMonthSum) = $this->getRankList($thisMonth, $key, $condList, $cond, $userList);
- $data = [
- 'user' => $item,
- 'rank' => $thisMonthSum,
- ];
- $userRank[] = $data;
- }
- array_multisort(array_column($userRank, 'rank'), SORT_DESC, $userRank);
- //这个月
- $thisMonth = $this->getSunday($date);
- list($thisMonth, $thisMonthSum) = $this->getRankList($thisMonth, $user, $condList, $cond, $userList);
- return view('admin.plan.rank', [
- 'type' => $type,
- 'userList' => $userList,
- 'user' => $user,
- 'rank' => $userRank,
- 'date' => $date,
- 'list' => $thisMonth,
- ]);
- }
- public function getRankList($dateList, $user, $condList, $cond, $userList)
- {
- $result = [];
- foreach ($dateList as $key => $value) {
- $condition = [
- ['status', '=', 'ok'],
- ['user_type', '=', $user],
- ['insert_date', '=', $value],
- ];
- $historyList1 = WeekTaskHistory::query()
- ->select('cond_id', DB::raw('COUNT(id) as complete_total'), DB::raw('SUM(slices_number) as complete_slices_total'))
- ->whereIn('cond_id', $condList)
- ->where($condition)
- ->groupBy('cond_id')
- ->get()->toArray();
- $list1 = [];
- foreach ($historyList1 as $kk => $vv) {
- $list1[$vv['cond_id']] = $vv['complete_total'];
- }
- $list2 = [];
- foreach ($historyList1 as $kk => $vv) {
- $list2[$vv['cond_id']] = $vv['complete_slices_total'];
- }
- $condition = [
- ['user_type', '=', $user],
- ['insert_date', '=', $value],
- ];
- $historyList = WeekTaskHistory::query()
- ->select('cond_id', 'user_type', 'cond_name', 'insert_date', DB::raw('COUNT(id) as total'), DB::raw('SUM(slices_number) as slices_total'))
- ->whereIn('cond_id', $condList)
- ->where($condition)
- ->groupBy('cond_id', 'user_type', 'cond_name', 'insert_date')
- ->get()->toArray();
- foreach ($historyList as $kkk => $vvv) {
- $historyList[$kkk]['user'] = $userList[$vvv['user_type']] ?? '';
- $historyList[$kkk]['complete_total'] = $list1[$vvv['cond_id']] ?? 0;
- $historyList[$kkk]['complete_slices_total'] = $list2[$vvv['cond_id']] ?? 0;
- }
- $result[] = $historyList;
- }
- $res = [];
- foreach ($result as $key => $value) {
- foreach ($value as $kk => $vv) {
- $res[] = $vv;
- }
- }
- foreach ($cond as $key => $value) {
- $cond[$key]['user'] = '';
- $cond[$key]['complete_total'] = 0;
- $cond[$key]['complete_slices_total'] = 0;
- $cond[$key]['count'] = 0;
- $cond[$key]['end_date'] = '';
- $cond[$key]['slices_number'] = 0;
- foreach ($res as $kk => $vv) {
- if ($value['id'] == $vv['cond_id']) {
- $cond[$key]['user'] = $vv['user'];
- $cond[$key]['complete_total'] += $vv['complete_total'];
- $cond[$key]['complete_slices_total'] += $vv['complete_slices_total'];
- $cond[$key]['count'] += $vv['total'];
- $cond[$key]['end_date'] = $vv['insert_date'];
- $cond[$key]['slices_number'] += $vv['slices_total'];
- }
- }
- }
- $sum = 0;
- foreach ($cond as $key => $item) {
- $sum += ($item['score'] * $item['complete_total']);
- /* if ($item['id'] == 16) {
- $sum += ($item['score'] * $item['complete_slices_total']);
- } else {
- $sum += ($item['score'] * $item['complete_total']);
- }*/
- }
- return [$cond, $sum];
- }
- public function getSunday($month = '')
- {
- if (empty($month)) {
- $month = date("Y-m");
- }
- $maxDay = date('t', strtotime($month . "-01"));
- $mondays = array();
- for ($i = 1; $i <= $maxDay; $i++) {
- if (date('w', strtotime($month . "-" . $i)) == 0) {
- $mondays[] = $month . "-" . ($i > 9 ? '' : '0') . $i;
- }
- }
- if (count($mondays) > 4) {
- array_shift($mondays);
- }
- return $mondays;
- }
- public function getWeekTaskCondList($type = 'web')
- {
- $cond = DB::table('week_task_cond')
- ->where('type', $type)->get()->toJson();
- $cond = json_decode($cond, true) ?? [];
- $condList = DB::table('week_task_cond')
- ->where('type', $type)->pluck('id')->toArray() ?? [];
- return [$cond, $condList];
- }
- /**
- * 部门人员列表
- * @return array
- */
- public function getTaskByUserList()
- {
- $web = User::query()->where('status', 1)
- ->where('role_id', Role::TYPE_WEB)
- ->pluck('nickname', 'id')->toArray();
- $design = User::query()->where('status', 1)
- ->where('role_id', Role::TYPE_DESIGNER)
- ->pluck('nickname', 'id')->toArray();
- $exam = User::query()->where('status', 1)
- ->whereIn('role_id', [Role::TYPE_OPTIMIZER, Role::TYPE_MANAGE_HELPER])
- ->pluck('nickname', 'id')->toArray();
- $siteExam = User::query()->where('status', 1)
- ->where('role_id', Role::TYPE_QUALITY)
- ->pluck('nickname', 'id')->toArray();
- $site = User::query()->where('status', 1)
- ->whereIn('role_id', [Role::TYPE_MANAGE_HELPER, Role::TYPE_AE])
- ->pluck('nickname', 'id')->toArray();
- $seo = User::query()->where('status', 1)
- ->whereIn('role_id', [Role::TYPE_OPTIMIZER, Role::TYPE_OPTIMIZATION_EDITING])
- ->pluck('nickname', 'id')->toArray();
- $web['wfp-web'] = '未分配';
- $design['wfp-design'] = '未分配';
- $exam['wfp-exam'] = '未分配';
- $siteExam['wfp-site-exam'] = '未分配';
- $site['wfp-site'] = '未分配';
- $seo['wfp-seo'] = '未分配';
- ksort($web);
- ksort($design);
- ksort($exam);
- ksort($siteExam);
- ksort($site);
- ksort($seo);
- //负责人
- $allUserList = User::query()
- ->where('status', 1)
- ->whereIn('role_id', [1, 2, 6, 16, 17, 18, 25, 26, 29, 30, 32])
- ->orderBy('role_id', 'asc')
- ->pluck('nickname', 'id')->toArray();
- $allUserList[0] = '未分配';
- ksort($allUserList);
- return [$web, $design, $exam, $siteExam, $site, $seo, $allUserList];
- }
- public function getDay()
- {
- //筛选出最近2个礼拜的时间排除周末
- $days = 12;
- $dayList = [];
- for ($i = 1; $i <= $days; $i++) {
- $day = date('Y-m-d', strtotime(date('Y-m-d')) + 86400 * $i);
- $result = $this->isWeekend($day);
- if (!$result) {
- $dayList[] = $day;
- }
- }
- return $dayList;
- }
- public function isWeekend($date)
- {
- if ((date('w', strtotime($date)) == 6) || (date('w', strtotime($date)) == 0)) {
- return true;
- } else {
- return false;
- }
- }
- function getWeek($time, $format = "Y-m-d")
- {
- //最近一个礼拜的日期
- $week = date('w', $time);
- $weekList = array('星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六');
- //星期日排到末位
- if (empty($week)) {
- $week = 7;
- }
- $data = [];
- for ($i = 0; $i <= 6; $i++) {
- $day = '+' . ($i + 1 - $week - 1) . ' days';
- $data[$i]['date'] = date($format, strtotime($day, $time));
- $data[$i]['week'] = $weekList[$i];
- }
- return $data;
- }
- }
|