WorkOrder.php 4.1 KB

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