Site.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <?php
  2. namespace App\Http\Models;
  3. use Illuminate\Database\Eloquent\Builder;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  6. use Illuminate\Database\Eloquent\SoftDeletes;
  7. use Illuminate\Support\Facades\DB;
  8. class Site extends Model
  9. {
  10. use SoftDeletes;
  11. protected $table = 'sites';
  12. protected $primaryKey = 'id';
  13. protected $guarded = [];
  14. protected $casts = [
  15. 'contacts' => 'array',
  16. 'area_text' => 'array',
  17. 'contract_ids' => 'array'
  18. ];
  19. /**
  20. * 筛选出 除超管用户自己所分配的站点
  21. * @param Builder $query
  22. * @return Builder
  23. */
  24. public function scopeUser(Builder $query)
  25. {
  26. $filterUserIds = [];
  27. $propagandaUserId = request()->input('propagandaUserId');
  28. $propagandaUserId && $filterUserIds[] = $propagandaUserId;
  29. $serverUserId = request()->input('serverUserId');
  30. $serverUserId && $filterUserIds[] = $serverUserId;
  31. $mangerUserId = request()->input('mangerUserId');
  32. $mangerUserId && $filterUserIds[] = $mangerUserId;
  33. $helpUserId = request()->input('helpUserId');
  34. $helpUserId && $filterUserIds[] = $helpUserId;
  35. $optimizeUserId = request()->input('optimizeUserId');
  36. $optimizeUserId && $filterUserIds[] = $optimizeUserId;
  37. $aeUserId = request()->input('aeUserId');
  38. $aeUserId && $filterUserIds[] = $aeUserId;
  39. $planUserId = request()->input('planUserId');
  40. $planUserId && $filterUserIds[] = $planUserId;
  41. $salesUserId = request()->input('salesUserId');
  42. $salesUserId && $filterUserIds[] = $salesUserId;
  43. $optimizationEditingUserId = request()->input('optimizationEditingUserId');
  44. $optimizationEditingUserId && $filterUserIds[] = $optimizationEditingUserId;
  45. $webUserId = request()->input('webUserId');
  46. $webUserId && $filterUserIds[] = $webUserId;
  47. $designUserId = request()->input('designUserId');
  48. $designUserId && $filterUserIds[] = $designUserId;
  49. $user = auth()->user();
  50. if (!$filterUserIds && ($user->is_super || in_array($user->role_id,
  51. [Role::TYPE_PROPAGANDA,
  52. Role::TYPE_ARTICLE,
  53. Role::TYPE_LINK,
  54. Role::TYPE_MANAGE_LEADER,
  55. Role::TYPE_SERVER,
  56. Role::TYPE_financial,
  57. Role::TYPE_SELLER,
  58. Role::TYPE_DESIGN_DIRECTOR,
  59. Role::TYPE_HR,
  60. Role::TYPE_SOFT_TEXT_SEARCH,
  61. Role::TYPE_CHONGQING_MANAGER,
  62. Role::TYPE_QUALITY
  63. ]))) {
  64. return $query;
  65. }
  66. return $query->whereExists(function (\Illuminate\Database\Query\Builder $builder) use ($user, $filterUserIds) {
  67. if ($filterUserIds) {
  68. $raw = sprintf('SUM(CASE WHEN user_id in (%s) then 1 ELSE 0 end) as total', implode(',', $filterUserIds));
  69. $builder->select(DB::raw($raw))->from('user_has_sites')
  70. ->whereRaw(sprintf('user_has_sites.site_id=sites.id HAVING total=%s', count($filterUserIds)));
  71. } else {
  72. $builder->select(DB::raw(1))->from('user_has_sites')
  73. ->whereRaw(sprintf('user_id=%s AND user_has_sites.site_id=sites.id', $user->id));
  74. }
  75. });
  76. }
  77. public function articles()
  78. {
  79. return $this->hasMany(Article::class, 'site_id', 'id');
  80. }
  81. public function linkUrls()
  82. {
  83. return $this->hasManyThrough(
  84. LinkTaskUrl::class,
  85. LinkTaskDetail::class,
  86. 'redundant_site_id',
  87. 'link_tasks_detail_id',
  88. 'id',
  89. 'id'
  90. );
  91. }
  92. public function linkDetails()
  93. {
  94. return $this->hasMany(LinkTaskDetail::class, 'redundant_site_id', 'id');
  95. }
  96. public function linkTasks()
  97. {
  98. return $this->hasMany(LinkTask::class, 'site_id', 'id');
  99. }
  100. public function company(): BelongsTo
  101. {
  102. return $this->belongsTo(
  103. Company::class,
  104. 'company_id',
  105. 'id'
  106. );
  107. }
  108. public function users()
  109. {
  110. return $this->belongsToMany(
  111. User::class,
  112. 'user_has_sites',
  113. 'site_id',
  114. 'user_id'
  115. );
  116. }
  117. public function sitesProcess()
  118. {
  119. return $this->hasMany(SiteProcess::class, 'site_id', 'id');
  120. }
  121. public function server()
  122. {
  123. return $this->hasOne(
  124. Server::class,
  125. 'server_id',
  126. 'server_id'
  127. );
  128. }
  129. public function siteInfo()
  130. {
  131. return $this->hasOne(SiteInfo::class, 'site_id', 'id');
  132. }
  133. public function sitePayment()
  134. {
  135. return $this->hasOne(SitePayment::class, 'site_id', 'id');
  136. }
  137. public function identifier()
  138. {
  139. return sprintf('R%s-%s', date('Y'), $this->newQuery()->max('id') + 1);
  140. }
  141. public function business()
  142. {
  143. return $this->hasOne(
  144. Business::class,
  145. 'id',
  146. 'business_id'
  147. );
  148. }
  149. public function renewHistory()
  150. {
  151. return $this->hasMany(SiteRenewHistory::class, 'site_id', 'id');
  152. }
  153. public function socialPublish()
  154. {
  155. return $this->hasMany(SocialPublish::class, 'site_id', 'id');
  156. }
  157. public function projectProgressEditing()
  158. {
  159. return $this->hasOne(ProjectProgressEditing::class, 'site_id', 'id');
  160. }
  161. public function projectProgressPlanner()
  162. {
  163. return $this->hasOne(ProjectProgressPlanner::class, 'site_id', 'id');
  164. }
  165. public function projectProgress()
  166. {
  167. return $this->hasOne(ProjectProgress::class, 'site_id', 'id');
  168. }
  169. public function bqProjectProgress()
  170. {
  171. return $this->hasOne(BqProjectProgress::class, 'site_id', 'id');
  172. }
  173. public function projectProgressCurrentMonth()
  174. {
  175. return $this->hasOne(ProjectProgressCurrentMonth::class, 'site_id', 'id');
  176. }
  177. public function scoreSummary()
  178. {
  179. return $this->hasOne(ScoreSummary::class, 'site_id', 'id');
  180. }
  181. public function processProgress()
  182. {
  183. return $this->hasOne(ProcessProgress::class, 'site_id', 'id');
  184. }
  185. public function projectProgressFlowStage()
  186. {
  187. return $this->hasMany(FlowStage::class, 'site_id', 'id');
  188. }
  189. public function bqFlow()
  190. {
  191. return $this->hasMany(BqFlow::class, 'site_id', 'id');
  192. }
  193. public function projectFlowMemo()
  194. {
  195. return $this->hasMany(ProjectFlowMemo::class, 'site_id', 'id');
  196. }
  197. const NATURE_TYPE = [
  198. ['inx' => 1, 'val' => '上市公司'],
  199. ['inx' => 2, 'val' => '集团公司'],
  200. ['inx' => 3, 'val' => '国企'],
  201. ['inx' => 4, 'val' => '外贸公司'],
  202. ['inx' => 5, 'val' => '工厂'],
  203. ['inx' => 6, 'val' => 'SOHO'],
  204. ];
  205. const STATUS_MAP = [
  206. 1 => '建站期',
  207. 2 => '实施期',
  208. 3 => '服务期',
  209. 4 => '建站期暂停',
  210. 5 => '续费期',
  211. 6 => '已过期',
  212. 7 => '已终止',
  213. 8 => '实施期暂停',
  214. 9 => '网站续费维护',
  215. 10 => '未续费',
  216. ];
  217. }