where(['site_id' => $siteId]) ->with('infoList')->orderBy('sort')->get(); foreach ($stageList as $item) { if ($item->expected_date) { $item->expected_date = date('Y-m-d', strtotime($item->expected_date)); } if ($item->complete_date) { $item->complete_date = date('Y-m-d', strtotime($item->complete_date)); } $item->extension = explode(',', $item->extension); } $roleScope = array_keys(FlowInfoTpl::RoleScope); unset($roleScope[1]); //删除客户 $userList = User::query()->select(['id', 'nickname', 'role_id'])->whereIn('role_id', $roleScope) ->get()->toArray(); $site = Site::query()->select(['cn_title'])->find($siteId); $userList[] = ['id' => -1, 'role_id' => -1, 'nickname' => $site->cn_title ?? '站点名称']; $deploy = SiteProcess::query()->where([['process_id', '=', 7], ['active', '=', 2], ['site_id', '=', $siteId]])->whereNotNull('deploy')->value('deploy'); return view('admin.flow.index', [ 'siteId' => $siteId, 'stageList' => $stageList, 'userList' => $userList, 'authUser' => auth()->user(), 'domain' => $deploy['domain'] ?? '', ]); } //流程保存 public function flowSave(Request $request, $siteId) { $dataList = $request->input('dataList') ?? []; $where = ['site_id' => $siteId]; $stepIds = array_column($dataList, 'step_id'); $stageIds = FlowStage::query()->where($where)->pluck('id')->toArray(); $delIds = array_diff($stageIds, $stepIds); if ($delIds) { FlowStage::query()->where($where)->whereIn('id', $delIds)->delete(); } $stageTplList = FlowInfoTpl::query()->get(); $mapInfoIds = FlowInfo::query()->select(['id', 'stage_id'])->where($where)->get()->groupBy('stage_id')->toArray(); $reqInfoList = []; foreach ($dataList as $item) { foreach ($item['children'] as $v) { $reqInfoList[] = [ 'except_range_date' => $v['except_range_date'], 'info_id' => $v['info_id'] ?? 0, 'step_id' => $item['step_id'], 'step_title' => $item['step_title'], ]; } } $scopeInfoList = FlowInfo::query()->selectRaw('id,except_range_date')->get(); $modifyInfo = [ 'info_id' => 0, 'except_range_date' => null, 'step_title' => '', ]; foreach ($reqInfoList as $item) { foreach ($scopeInfoList as $v) { if ($item['info_id'] == $v->id && !empty($item['except_range_date']) && ($item['except_range_date'] != $v->except_range_date)) { $modifyInfo = [ 'info_id' => $item['info_id'], 'except_range_date' => $item['except_range_date'], 'step_title' => $item['step_title'], ]; break; } } } $isUpdate = false; $nextDate = null; $stageExcept = [ 'collect' => null, 'schema' => null, 'homepage' => null, 'insidePage' => null, 'wholeOffer' => null, 'testSite' => null, 'keyword' => null, 'seo' => null, 'online' => null ]; foreach ($dataList as $step) { $stepChildren = $step['children'] ?? []; if (!empty($step['extension'])) { $extension = implode(',', $step['extension']); } else { $extension = ''; } if (empty($step['step_id'])) { $stage = FlowStage::query()->create([ 'title' => $step['step_title'], 'expected_date' => $step['expected_date'], 'complete_date' => $step['complete_date'], 'extension' => $extension, 'site_id' => $siteId, 'sort' => $this->getStageSort($stageTplList, $step['step_title']) ]); foreach ($stepChildren as $item) { FlowInfo::query()->create([ 'site_id' => $siteId, 'stage_id' => $stage->id, 'except_range_date' => $item['except_range_date'], 'detail_list' => ($item['children'] ?? []), ]); } } else { $infoIds = array_column($mapInfoIds[$step['step_id']] ?? [], 'id'); $dataInfoIds = array_column($stepChildren, 'info_id'); $infoDelIds = array_diff($infoIds, $dataInfoIds); if ($infoIds) { FlowInfo::query()->where($where)->whereIn('id', $infoDelIds)->delete(); } $updateData = [ 'title' => $step['step_title'], 'expected_date' => $step['expected_date'], 'complete_date' => $step['complete_date'], 'extension' => $extension, ]; FlowStage::query()->where(['id' => $step['step_id']])->update($updateData); foreach ($stepChildren as $item) { if (empty($item['info_id'])) { FlowInfo::query()->create([ 'site_id' => $siteId, 'stage_id' => $step['step_id'], 'except_range_date' => $item['except_range_date'], 'detail_list' => ($item['children'] ?? []), ]); } else { $exceptDate = $item['except_range_date']; // $exceptDate = null; if ($step['step_title'] == "项目资料搜集") { $stageExcept['collect'] = $item['except_range_date']; } if ($step['step_title'] == "网站架构" && $stageExcept['collect']) { if ($isUpdate) { $exceptDate = $stageExcept['schema'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['collect']))); } else { $stageExcept['schema'] = $item['except_range_date']; } } if ($step['step_title'] == "首页设计" && $stageExcept['schema']) { if ($isUpdate) { $exceptDate = $stageExcept['homepage'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['schema']))); } else { $stageExcept['homepage'] = $item['except_range_date']; } } if ($step['step_title'] == "内页设计" && $stageExcept['homepage']) { if ($isUpdate) { $exceptDate = $stageExcept['insidePage'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['homepage']))); } else { $stageExcept['insidePage'] = $item['except_range_date']; } // dd($exceptDate); } if ($step['step_title'] == "整站资料提供" && $stageExcept['schema']) { if ($isUpdate) { $exceptDate = $stageExcept['wholeOffer'] = date('Y-m-d', strtotime('+4 week', strtotime($stageExcept['schema']))); } else { $stageExcept['wholeOffer'] = $item['except_range_date']; } } if ($step['step_title'] == "测试站" && $stageExcept['insidePage']) { if ($isUpdate) { $exceptDate = $stageExcept['testSite'] = date('Y-m-d', strtotime('+4 week', strtotime($stageExcept['insidePage']))); } else { $stageExcept['testSite'] = $item['except_range_date']; } } if ($step['step_title'] == "关键词" && $stageExcept['insidePage']) { if ($isUpdate) { $exceptDate = $stageExcept['keyword'] = date('Y-m-d', strtotime('+4 week', strtotime($stageExcept['insidePage']))); } else { $stageExcept['keyword'] = $item['except_range_date']; } } if ($step['step_title'] == "SEO完善" && $stageExcept['testSite']) { if ($isUpdate) { $exceptDate = $stageExcept['seo'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['testSite']))); } else { $stageExcept['seo'] = $item['except_range_date']; } } if ($step['step_title'] == "上线" && $stageExcept['seo']) { if ($isUpdate) { $exceptDate = $stageExcept['online'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['seo']))); } else { $stageExcept['online'] = $item['except_range_date']; } } // if ($isUpdate) { // $exceptDate= $nextDate = $this->computeDate($step['step_title'], $nextDate); // } if ($item['info_id'] == $modifyInfo['info_id']) { // $exceptDate = $nextDate = $modifyInfo['except_range_date'];//一定有值 $isUpdate = true; } FlowInfo::query()->where(['id' => $item['info_id']])->update([ 'except_range_date' => $exceptDate, 'detail_list' => json_encode($item['children'] ?? []), ]); } } } } return response()->json(['message' => '操作成功']); } //流程清空 public function flowClear($siteId) { FlowStage::query()->where(['site_id' => $siteId])->delete(); FlowInfo::query()->where(['site_id' => $siteId])->delete(); } //初始化流程 public function initFlow($siteId) { $site = Site::query()->select(['created_at'])->find($siteId); if (!$site) { return response()->json(['message' => '站点信息不存在'], 400); } $site = $site->toArray(); $stageTplList = FlowStageTpl::query()->with('infoTplList')->get(); if (FlowStage::query()->where(['site_id' => $siteId])->exists()) { return response()->json(['message' => '流程已初始化'], 400); } $userIds = DB::table('user_has_sites')->where(['site_id' => $siteId])->pluck('user_id')->toArray(); $userList = User::query()->select(['id', 'role_id'])->whereIn('id', $userIds)->get()->toArray(); $datetime = date('Y-m-d H:i:s'); $stageExcept = [ 'collect' => null, 'schema' => null, 'homepage' => null, 'insidePage' => null, 'wholeOffer' => null, 'testSite' => null, 'keyword' => null, 'seo' => null, 'online' => null ]; foreach ($stageTplList as $item) { $stage = FlowStage::query()->create([ 'sort' => $item->sort, 'title' => $item->title, 'site_id' => $siteId, ]); $insertData = []; foreach ($item->infoTplList as $info) { $detailList = $info->detail_list; foreach ($detailList as &$detail) { $duty_man = $detail['duty_man'] ?? []; $detail['duty_user'] = $this->getUserIdsByRoleIds($userList, $duty_man); } $exceptDate = null; if ($item->title == "项目资料搜集") { $exceptDate = $stageExcept['collect'] = date('Y-m-d', strtotime($site['created_at'])); } if ($item->title == "网站架构" && $stageExcept['collect']) { $exceptDate = $stageExcept['schema'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['collect']))); } if ($item->title == "首页设计" && $stageExcept['schema']) { $exceptDate = $stageExcept['homepage'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['schema']))); } if ($item->title == "内页设计" && $stageExcept['homepage']) { $exceptDate = $stageExcept['insidePage'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['homepage']))); } if ($item->title == "整站资料提供" && $stageExcept['schema']) { $exceptDate = $stageExcept['wholeOffer'] = date('Y-m-d', strtotime('+4 week', strtotime($stageExcept['schema']))); } if ($item->title == "测试站" && $stageExcept['insidePage']) { $exceptDate = $stageExcept['testSite'] = date('Y-m-d', strtotime('+4 week', strtotime($stageExcept['insidePage']))); } if ($item->title == "关键词" && $stageExcept['insidePage']) { $exceptDate = $stageExcept['keyword'] = date('Y-m-d', strtotime('+4 week', strtotime($stageExcept['insidePage']))); } if ($item->title == "SEO完善" && $stageExcept['testSite']) { $exceptDate = $stageExcept['seo'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['testSite']))); } if ($item->title == "上线" && $stageExcept['seo']) { $exceptDate = $stageExcept['online'] = date('Y-m-d', strtotime('+1 week', strtotime($stageExcept['seo']))); } $insertData[] = [ 'site_id' => $siteId, 'stage_id' => $stage->id, 'detail_list' => json_encode(array_values($detailList)), 'except_range_date' => $exceptDate, 'created_at' => $datetime, 'updated_at' => $datetime, ]; } FlowInfo::query()->insert($insertData); } return response()->json(['message' => '操作成功']); } public function getStageSort($stageTpl, $stageTitle) { foreach ($stageTpl as $item) { if ($item->title === $stageTitle) { return $item->sort; } } return 0; } private function computeDate($stepTitle, $prevDate) { $preTime = strtotime($prevDate); if ($stepTitle == "项目资料搜集") { return $prevDate; } if ($stepTitle == "网站架构") { return date('Y-m-d', strtotime('+1 week', $preTime)); } if ($stepTitle == "首页设计") { return date('Y-m-d', strtotime('+1 week', $preTime)); } if ($stepTitle == "内页设计") { return date('Y-m-d', strtotime('+1 week', $preTime)); } if ($stepTitle == "整站资料提供") { return date('Y-m-d', strtotime('+2 week', $preTime)); } if ($stepTitle == "测试站") { return date('Y-m-d', strtotime('+4 week', $preTime)); } if ($stepTitle == "关键词") { return date('Y-m-d', strtotime('+0 week', $preTime)); } if ($stepTitle == "SEO完善") { return date('Y-m-d', strtotime('+1 week', $preTime)); } if ($stepTitle == "上线") { return date('Y-m-d', strtotime('+1 week', $preTime)); } return null; } protected function getUserIdsByRoleIds(&$scopes, $roleIds) { $userIds = []; foreach ($scopes as $scope) { if (in_array($scope['role_id'], $roleIds)) { $userIds[] = $scope['id']; } } if (in_array(-1, $roleIds)) { $userIds[] = -1; } return $userIds; } }