| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 | <?phpnamespace App\Http\Models;use Illuminate\Database\Eloquent\Builder;use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\Relations\BelongsTo;use Illuminate\Database\Eloquent\SoftDeletes;use Illuminate\Support\Facades\DB;class Site extends Model{    use SoftDeletes;    protected $table = 'sites';    protected $primaryKey = 'id';    protected $guarded = [];    protected $casts = [        'contacts' => 'array',        'area_text' => 'array',        'contract_ids' => 'array'    ];    /**     * 筛选出 除超管用户自己所分配的站点     * @param Builder $query     * @return Builder     */    public function scopeUser(Builder $query)    {        $filterUserIds = [];        $propagandaUserId = request()->input('propagandaUserId');        $propagandaUserId && $filterUserIds[] = $propagandaUserId;        $serverUserId = request()->input('serverUserId');        $serverUserId && $filterUserIds[] = $serverUserId;        $mangerUserId = request()->input('mangerUserId');        $mangerUserId && $filterUserIds[] = $mangerUserId;        $helpUserId = request()->input('helpUserId');        $helpUserId && $filterUserIds[] = $helpUserId;        $optimizeUserId = request()->input('optimizeUserId');        $optimizeUserId && $filterUserIds[] = $optimizeUserId;        $aeUserId = request()->input('aeUserId');        $aeUserId && $filterUserIds[] = $aeUserId;        $planUserId = request()->input('planUserId');        $planUserId && $filterUserIds[] = $planUserId;        $salesUserId = request()->input('salesUserId');        $salesUserId && $filterUserIds[] = $salesUserId;        $optimizationEditingUserId = request()->input('optimizationEditingUserId');        $optimizationEditingUserId && $filterUserIds[] = $optimizationEditingUserId;        $webUserId = request()->input('webUserId');        $webUserId && $filterUserIds[] = $webUserId;        $designUserId = request()->input('designUserId');        $designUserId && $filterUserIds[] = $designUserId;        $user = auth()->user();        if (!$filterUserIds && ($user->is_super || in_array($user->role_id,                    [Role::TYPE_PROPAGANDA,                        Role::TYPE_ARTICLE,                        Role::TYPE_LINK,                        Role::TYPE_MANAGE_LEADER,                        Role::TYPE_SERVER,                        Role::TYPE_financial,                        Role::TYPE_SELLER,                        Role::TYPE_DESIGN_DIRECTOR,                        Role::TYPE_HR,                        Role::TYPE_SOFT_TEXT_SEARCH,                        Role::TYPE_CHONGQING_MANAGER,                        Role::TYPE_QUALITY                    ]))) {            return $query;        }        return $query->whereExists(function (\Illuminate\Database\Query\Builder $builder) use ($user, $filterUserIds) {            if ($filterUserIds) {                $raw = sprintf('SUM(CASE WHEN user_id in (%s) then  1 ELSE  0 end) as total', implode(',', $filterUserIds));                $builder->select(DB::raw($raw))->from('user_has_sites')                    ->whereRaw(sprintf('user_has_sites.site_id=sites.id HAVING total=%s', count($filterUserIds)));            } else {                $builder->select(DB::raw(1))->from('user_has_sites')                    ->whereRaw(sprintf('user_id=%s AND user_has_sites.site_id=sites.id', $user->id));            }        });    }    public function articles()    {        return $this->hasMany(Article::class, 'site_id', 'id');    }    public function linkUrls()    {        return $this->hasManyThrough(            LinkTaskUrl::class,            LinkTaskDetail::class,            'redundant_site_id',            'link_tasks_detail_id',            'id',            'id'        );    }    public function linkDetails()    {        return $this->hasMany(LinkTaskDetail::class, 'redundant_site_id', 'id');    }    public function linkTasks()    {        return $this->hasMany(LinkTask::class, 'site_id', 'id');    }    public function company(): BelongsTo    {        return $this->belongsTo(            Company::class,            'company_id',            'id'        );    }    public function users()    {        return $this->belongsToMany(            User::class,            'user_has_sites',            'site_id',            'user_id'        );    }    public function sitesProcess()    {        return $this->hasMany(SiteProcess::class, 'site_id', 'id');    }    public function server()    {        return $this->hasOne(            Server::class,            'server_id',            'server_id'        );    }    public function siteInfo()    {        return $this->hasOne(SiteInfo::class, 'site_id', 'id');    }    public function sitePayment()    {        return $this->hasOne(SitePayment::class, 'site_id', 'id');    }    public function identifier()    {        return sprintf('R%s-%s', date('Y'), $this->newQuery()->max('id') + 1);    }    public function business()    {        return $this->hasOne(            Business::class,            'id',            'business_id'        );    }    public function renewHistory()    {        return $this->hasMany(SiteRenewHistory::class, 'site_id', 'id');    }    public function socialPublish()    {        return $this->hasMany(SocialPublish::class, 'site_id', 'id');    }    public function projectProgressEditing()    {        return $this->hasOne(ProjectProgressEditing::class, 'site_id', 'id');    }    public function projectProgressPlanner()    {        return $this->hasOne(ProjectProgressPlanner::class, 'site_id', 'id');    }    public function projectProgress()    {        return $this->hasOne(ProjectProgress::class, 'site_id', 'id');    }    public function bqProjectProgress()    {        return $this->hasOne(BqProjectProgress::class, 'site_id', 'id');    }    public function projectProgressCurrentMonth()    {        return $this->hasOne(ProjectProgressCurrentMonth::class, 'site_id', 'id');    }    public function scoreSummary()    {        return $this->hasOne(ScoreSummary::class, 'site_id', 'id');    }    public function processProgress()    {        return $this->hasOne(ProcessProgress::class, 'site_id', 'id');    }    public function projectProgressFlowStage()    {        return $this->hasMany(FlowStage::class, 'site_id', 'id');    }    public function bqFlow()    {        return $this->hasMany(BqFlow::class, 'site_id', 'id');    }    public function projectFlowMemo()    {        return $this->hasMany(ProjectFlowMemo::class, 'site_id', 'id');    }    const NATURE_TYPE = [        ['inx' => 1, 'val' => '上市公司'],        ['inx' => 2, 'val' => '集团公司'],        ['inx' => 3, 'val' => '国企'],        ['inx' => 4, 'val' => '外贸公司'],        ['inx' => 5, 'val' => '工厂'],        ['inx' => 6, 'val' => 'SOHO'],    ];    const STATUS_MAP = [        1 => '建站期',        2 => '实施期',        3 => '服务期',        4 => '建站期暂停',        5 => '续费期',        6 => '已过期',        7 => '已终止',        8 => '实施期暂停',        9 => '网站续费维护',        10 => '未续费',    ];}
 |