123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- <?php
- namespace 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 => '未续费',
- ];
- }
|