123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- namespace App\Services\Client;
- use App\Models\AgentInfo;
- use App\Models\CoachUser;
- use App\Models\Project;
- use App\Models\ProjectCate;
- class ProjectService
- {
- /**
- * 获取项目列表
- */
- public function getProjectList($areaCode, $projectCateId = null, $type = 'normal')
- {
- // 根据区域代码获取代理商
- $agent = $this->findAvailableAgent($areaCode);
- // 获取项目列表
- if ($agent) {
- dd($agent->cates());
- $projects = Project::where('state', 'enable')
- ->where('agent_id', $agent->id)
- ->paginate(10);
- } else {
- $projectCate = ProjectCate::find($projectCateId);
- $projects = $projectCate?->services;
- }
- return $projects;
- }
- /**
- * 获取项目详情
- */
- public function getProjectDetail($projectId, $areaCode)
- {
- // 根据区域代码获取代理商
- $agent = $this->findAvailableAgent($areaCode);
- // 查询系统项目
- $project = Project::where('state', 'enable')->find($projectId);
- if (! $project) {
- throw new \Exception('项目不存在');
- }
- if ($agent) {
- // 查询代理商项目
- $project = $agent->projects()->where('project_id', $projectId)->first();
- $project->agent_id = $agent->id;
- }
- return $project;
- }
- /**
- * 获取技师开通的项目列表
- */
- public function getCoachProjectList($coachId, $areaCode, $projectCateId)
- {
- // 查询技师信息
- $coach = CoachUser::where('id', $coachId)
- ->where('state', 'enable')
- ->find($coachId);
- if (! $coach) {
- throw new \Exception('技师不存在');
- }
- $coachInfo = $coach->info;
- if (! $coachInfo) {
- throw new \Exception('技师信息不存在');
- }
- if ($coachInfo->state !== 'approved') {
- throw new \Exception('技师未通过审核');
- }
- $coachQual = $coach->qual;
- if (! $coachQual) {
- throw new \Exception('技师资格证书不存在');
- }
- if ($coachQual->state !== 'approved') {
- throw new \Exception('技师资格证书未通过审核');
- }
- $coachReal = $coach->real;
- if (! $coachReal) {
- throw new \Exception('技师实名认证记录不存在');
- }
- if ($coachReal->state !== 'approved') {
- throw new \Exception('技师实名认证未通过审核');
- }
- // 获取技师开通的项目ID列表
- $projectIds = $coach->projects()->where('state', 'enable')->pluck('project_id');
- // 根据区域代码获取代理商
- $agent = $this->findAvailableAgent($areaCode);
- if ($agent) {
- $agentCate = $agent->cates()->where('project_cate_id', $projectCateId)->first();
- $projectIds = $agentCate->projects()->whereIn('project_id', $projectIds)->pluck('project_id');
- }
- return $coach->projects()->with('basicInfo')->whereIn('project_id', $projectIds)->get();
- }
- /**
- * 递归查找可用的代理商
- *
- * @param string $areaCode 区域代码
- * @return Agent|null
- */
- private function findAvailableAgent($areaCode)
- {
- // 先查找当前区域的代理商
- $agent = AgentInfo::where('area_code', $areaCode)
- ->where('state', 'enable')
- ->first();
- if ($agent) {
- return $agent;
- }
- // 如果找不到,且区域代码长度大于2,则向上查找
- if (strlen($areaCode) > 2) {
- // 去掉最后两位,获取上级区域代码
- $parentAreaCode = substr($areaCode, 0, -2);
- return $this->findAvailableAgent($parentAreaCode);
- }
- return null;
- }
- }
|