WorkOrderDetail.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. namespace App;
  3. use App\Traits\ModelTimeFormat;
  4. use Illuminate\Database\Eloquent\Model;
  5. use App\Traits\ModelLogChanging;
  6. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  7. use Illuminate\Database\Eloquent\Relations\HasMany;
  8. use Illuminate\Support\Facades\Auth;
  9. class WorkOrderDetail extends Model
  10. {
  11. use ModelLogChanging;
  12. use ModelTimeFormat;
  13. protected $fillable = [
  14. 'work_order_id',
  15. 'order_issue_type_id', // 工单异常类型
  16. 'type', // 工单
  17. 'price', // 商品价值
  18. 'sku_amount', // 破损sku数
  19. 'type', // 快递异常填写:在途异常,签收未收到
  20. 'last_handler_id', // 上一个处理人
  21. 'reissue_logistic_number', // 补发单号
  22. 'return_logistic_number', // 退回单号 (错漏发:商家填写) (破损:创建时填写)
  23. 'process_progress', // 处理进度 -----------------------------------
  24. // 拦截: 承运商->[已处理,已签收] 宝时审核->[拦截成功,拦截失败]
  25. // 信息更改: 承运商->[已处理,无法更改] 宝时审核->[更改成功,更改失败]
  26. // 快递异常: 承运商->[已处理,已拦截] 宝时审核->[丢件赔偿,签收成功]
  27. // 错漏发: 宝时处理->[已核实] 商家处理->[补发,不补发]
  28. // 破损: 承运商->[核实全部破损,核实部分破损,核实未破损] 宝时终审->[核实全部破损,核实部分破损,核实未破损]
  29. // 快递丢件: 待商家处理 待终审 完结
  30. // -----------------------------------
  31. 'logistic_number', // 快递单号
  32. 'status', // 当前状态
  33. 'remark', // 创建工单时的问题标记
  34. 'tag', // 标记当前工单是否为历史标记
  35. 'receive_address', // 收方信息
  36. 'return_address', // 退回单 寄件人地址
  37. 'return_phone', // 退回单 寄件人联系号码
  38. 'return_name', // 退回单 寄件人姓名
  39. ];
  40. static public $enums = [
  41. 'status' => [
  42. '' => 0,
  43. '宝时处理' => 1,
  44. '货主处理' => 2,
  45. '承运商处理' => 3,
  46. '宝时终审' => 4,
  47. '完成' => 5,
  48. '待货主完结' => 6,
  49. ],
  50. 'last_status' => [
  51. '' => 0,
  52. '宝时处理' => 1,
  53. '货主处理' => 2,
  54. '承运商处理' => 3,
  55. '宝时终审' => 4,
  56. '完成' => 5,
  57. '待货主完结' => 6,
  58. ],
  59. 'tag' => [
  60. '创建' => 0,
  61. '完成' => 1,
  62. '标记' => 2,
  63. ],
  64. 'last_handler' => [
  65. '' => 0,
  66. '商家' => 1,
  67. '承运商' => 2,
  68. '宝时' => 3,
  69. ]
  70. ];
  71. function __construct(array $attributes = [])
  72. {
  73. foreach (self::$enums as &$enum) {
  74. $enum = $enum + array_flip($enum);
  75. }
  76. parent::__construct($attributes);
  77. }
  78. public function getStatusAttribute($value)
  79. {
  80. if (!$value) return '';
  81. return self::$enums['status'][$value];
  82. }
  83. public function setStatusAttribute($value)
  84. {
  85. if (!$value) return;
  86. if (is_numeric($value)) {
  87. $this->attributes['status'] = $value;
  88. } else {
  89. $this->attributes['status'] = self::$enums['status'][$value];
  90. }
  91. }
  92. public function getTagAttribute($value)
  93. {
  94. if (is_numeric($value)) return self::$enums['tag'][$value];
  95. if (!$value) return '';
  96. return self::$enums['tag'][$value];
  97. }
  98. public function setTagAttribute($value)
  99. {
  100. if (!$value) return;
  101. if (is_numeric($value)) {
  102. $this->attributes['tag'] = $value;
  103. } else {
  104. $this->attributes['tag'] = self::$enums['tag'][$value];
  105. }
  106. }
  107. public function getLastStatusAttribute($value)
  108. {
  109. if (!$value) return '';
  110. return self::$enums['last_status'][$value];
  111. }
  112. public function setLastStatusAttribute($value)
  113. {
  114. if (!$value) return;
  115. if (is_numeric($value)) {
  116. $this->attributes['last_status'] = $value;
  117. } else {
  118. $this->attributes['last_status'] = self::$enums['last_status'][$value];
  119. }
  120. }
  121. public function workOrder(): BelongsTo
  122. {
  123. return $this->belongsTo(WorkOrder::class);
  124. }
  125. public function issueType(): BelongsTo
  126. {
  127. return $this->belongsTo(OrderIssueType::class,'order_issue_type_id');
  128. }
  129. // 图片
  130. public function images(): HasMany
  131. {
  132. return $this->hasMany(WorkOrderImage::class);
  133. }
  134. public function getPackageImagesAttribute()
  135. {
  136. return $this->images->where('type', 1);
  137. }
  138. public function getCommodityImagesAttribute()
  139. {
  140. return $this->images->where('type', 2);
  141. }
  142. public function getDealImagesAttribute()
  143. {
  144. return $this->images->where('type', 3);
  145. }
  146. public function getRefundImagesAttribute()
  147. {
  148. return $this->images->where('type', 4);
  149. }
  150. public function logs(): HasMany
  151. {
  152. return $this->hasMany(WorkOrderLog::class);
  153. }
  154. public function commodities(): HasMany
  155. {
  156. return $this->hasMany(WorkOrderCommodities::class);
  157. }
  158. // 未完成历史标记
  159. public function undoneTag(){
  160. if ($this->tag != '完成'){
  161. $this->update(['tag' => 2]);
  162. }
  163. }
  164. // 完成标记
  165. public function end(){
  166. $this->status = 5;
  167. $this->tag = 1;
  168. $this->update();
  169. }
  170. public function changeStatus($status)
  171. {
  172. $this->status = $status;
  173. $this->update();
  174. }
  175. public function changeProcessProgress($process_progress)
  176. {
  177. $this->update(['process_progress' => $process_progress]);
  178. }
  179. /**
  180. * 工单状态 and 处理状态
  181. * @param $status
  182. * @param $process_progress
  183. * @param $last_status
  184. */
  185. public function change($status,$process_progress,$last_status)
  186. {
  187. $user =Auth::user();
  188. $this->status = $status;
  189. $this->last_status = $last_status;
  190. $this->process_progress = $process_progress;
  191. $this->last_handler_id = $user['id'] ?? '';
  192. $this->update();
  193. }
  194. }