WorkOrder.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace App;
  3. use App\Traits\ModelTimeFormat;
  4. use Illuminate\Database\Eloquent\Builder;
  5. use Illuminate\Database\Eloquent\Model;
  6. use App\Traits\ModelLogChanging;
  7. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  8. use Illuminate\Database\Eloquent\SoftDeletes;
  9. use Illuminate\Support\Facades\Gate;
  10. class WorkOrder extends Model
  11. {
  12. use ModelLogChanging;
  13. use ModelTimeFormat;
  14. use SoftDeletes;
  15. // 工单 信息
  16. protected $fillable = [
  17. 'status', // 状态
  18. 'creator_id', // 创建人
  19. 'reviewer_id', // 审核人
  20. 'order_issue_type_id', // 问题件类型
  21. 'work_order_type_id', // 工单类型
  22. 'grad', // 紧急等级
  23. 'remark', // 工单信息描述
  24. 'outer_table_name', // 链接表名
  25. 'review_at', // 审核时间
  26. 'order_id', // 订单id
  27. 'uniquely_tag', // 唯一标识
  28. ];
  29. static public $enums = [
  30. 'status' => [
  31. '' => 0,
  32. '待审核' => 1,
  33. '已处理' => 2,
  34. ],
  35. 'grad' => [
  36. '' => 0,
  37. '一般' => 1,
  38. '重要' => 2,
  39. '紧急' => 3,
  40. '重要且紧急' => 4,
  41. ],
  42. ];
  43. function __construct(array $attributes = [])
  44. {
  45. foreach (self::$enums as &$enum) {
  46. $enum = $enum + array_flip($enum);
  47. }
  48. parent::__construct($attributes);
  49. }
  50. public function getStatusAttribute($value)
  51. {
  52. if (!$value) return '';
  53. return self::$enums['status'][$value];
  54. }
  55. public function setStatusAttribute($value)
  56. {
  57. if (!$value) return 0;
  58. if (is_numeric($value)) {
  59. $this->attributes['status'] = $value;
  60. } else {
  61. $this->attributes['status'] = self::$enums['status'][$value];
  62. }
  63. }
  64. public function getGradAttribute($value)
  65. {
  66. if (!$value) return '';
  67. return self::$enums['grad'][$value];
  68. }
  69. public function setGradAttribute($value)
  70. {
  71. if (!$value) return 0;
  72. if (is_numeric($value)) {
  73. $this->attributes['grad'] = $value;
  74. } else {
  75. $this->attributes['grad'] = self::$enums['grad'][$value];
  76. }
  77. }
  78. // 创建人
  79. public function creator(): BelongsTo
  80. {
  81. return $this->belongsTo(User::class, 'creator_id');
  82. }
  83. // 审核人
  84. public function reviewer(): BelongsTo
  85. {
  86. return $this->belongsTo(User::class, 'reviewer_id');
  87. }
  88. // 关联订单
  89. public function order(): BelongsTo
  90. {
  91. return $this->belongsTo(Order::class);
  92. }
  93. // 工单类型
  94. public function type(): BelongsTo
  95. {
  96. return $this->BelongsTo(WorkOrderType::class,'work_order_type_id');
  97. }
  98. // 生成问题件类型
  99. public function issueType():BelongsTo
  100. {
  101. return $this->belongsTo(OrderIssueType::class,'order_issue_type_id');
  102. }
  103. /** 对应问题件 */
  104. public function orderIssue(): BelongsTo
  105. {
  106. return $this->belongsTo(OrderIssue::class,'order_id','order_id');
  107. }
  108. public function scopeFilter($query, $filters)
  109. {
  110. return $filters->apply($query);
  111. }
  112. /** 默认 with 参数 */
  113. public function scopeDefaultWith($query)
  114. {
  115. $query->with(['type','issueType','creator','reviewer','order'=>function($query){
  116. /** @var $query Builder */
  117. $query->with('packages','logistic');
  118. },'orderIssue'=>function($query){
  119. /** @var $query Builder */
  120. $query->with(['issueType','logs'=>function($query){
  121. if (Gate::denies('订单管理-问题件-客户不可见')){
  122. $query->with('user')->orderByDesc('created_at');
  123. } else{
  124. $query->with('user')->where('tag','=',0)->orderByDesc('created_at');
  125. }
  126. }]);
  127. }]);
  128. $query->with(['type', 'creator', 'order' => function ($query) {
  129. /** @var $query Builder */
  130. $query->with(['packages', 'issue'=>function($query){
  131. /** @var $query Builder */
  132. $query->with(['issueType','logs'=>function($query){
  133. if (Gate::denies('订单管理-问题件-客户不可见')){
  134. $query->with('user')->orderByDesc('created_at');
  135. } else{
  136. $query->with('user')->where('tag','=',0)->orderByDesc('created_at');
  137. }
  138. }]);
  139. }, 'logistic']);
  140. }, 'reviewer','issueType']);
  141. }
  142. }