belongsTo(Order::class, 'order_id', 'id'); } public function rejectedBills(): BelongsToMany { return $this->belongsToMany(RejectedBill::class,'order_issue_rejected_bill','order_issue_id','logistic_number_return','id','logistic_number_return'); } public function orderIssueRejectedBills(): HasMany { return $this->hasMany(OrderIssueRejectedBill::class,'order_id','order_id'); } public function issueType(): BelongsTo { return $this->belongsTo('App\OrderIssueType', 'order_issue_type_id', 'id'); } public function logs(): HasMany { return $this->hasMany('App\OrderIssueProcessLog', 'order_issue_id', 'id'); } public function top(): HasOne { return $this->hasOne('App\OrderIssueOnTop', 'order_issue_id', 'id'); } public function userWorkGroup(): BelongsTo { return $this->belongsTo('App\UserWorkgroup', 'user_workgroup_id', 'id'); } public function userOwnerGroup(): BelongsTo { return $this->belongsTo(UserOwnerGroup::class); } public function secondOrder(): HasOne { return $this->hasOne('App\Order', 'client_code', 'second_client_no'); } public function orderDetail(): HasOne { return $this->hasOne(OrderDetail::class,'order_id','order_id'); } public function getCreateLogAttribute() { return $this->logs->where('type', '创建')->first(); } public function getEndLogAttribute() { return $this->logs->where('type', '结束')->last(); } public function getProcessingTimeAttribute(): ?string { $createLogs = $this->getCreateLogAttribute(); $endLogs = $this->getEndLogAttribute(); if (($createLogs ?? false) && ($endLogs ?? false)) { $time = date_diff($createLogs->created_at, $endLogs->created_at); return $time->format('%a天, %h小时'); } return null; } public function getCreateUserAttribute() { $createLog = $this->getCreateLogAttribute(); return $createLog->user->name ?? ''; } public function getEndUserAttribute() { $createLog = $this->getEndLogAttribute(); return $createLog->user->name ?? ''; } public function delete() { $this->logs()->delete(); $this->top()->delete(); return parent::delete(); } public function deleteSafe() { return parent::delete(); } public function scopeFilter($query, $filters) { return $filters->apply($query); } public function scopeDefaultWith($query) { $this->scopeJsonWith($query); return $query->with(['top']) ->selectRaw('order_issues.* ,order_issue_on_tops.id top_id ,order_issue_on_tops.remark,order_issue_on_tops.updated_at top_update') ->leftJoin('order_issue_on_tops', 'order_issue_on_tops.order_issue_id', '=', 'order_issues.id') ->whereNull('order_issue_on_tops.deleted_at') ->orderBy('order_issue_on_tops.updated_at', 'desc') ->orderBy('order_issues.id', 'desc'); } public function scopeJsonWith($query) { return $query->with(['issueType', 'logs' => function ($query){ if (Gate::denies('订单管理-问题件-客户不可见')){ $query->with('user')->orderByDesc('created_at'); } else{ $query->with('user')->where('tag','=',0)->orderByDesc('created_at'); } },'order'=>function($query){ $query->with(['shop', 'logistic', 'owner','warehouse', 'packages.commodities.commodity.barcodes']); },'secondOrder'=>function($query){ $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity.barcodes']); },'orderIssueRejectedBills.rejectedBill'=>function($query){ $query->with(['owner','logistic','user','items.quality']); },'userWorkgroups'=>function($query){ $query->withTrashed(); },'userOwnerGroup','orderDetail']); } public function userWorkgroups(): BelongsToMany { return $this->belongsToMany(UserWorkgroup::class); } // 库内拦截 public function intercept(): bool { return $this->update(['is_intercept' => 1]); } public function syncWorkOrder(){ $workOrder = WorkOrder::query()->where('order_id',$this->order_id)->orderByDesc('created_at')->first(); if (!$workOrder) return ; $workOrder->update(['rejecting_status' => $this->rejecting_status]); if ($this->rejecting_status !== '全部退回') return; /** @var WorkOrder $workOrder */ $workOrder = WorkOrder::query()->whereHas('issueType',function($query){ $query->where('name','拦截'); })->where('order_id',$this->order_id)->orderByDesc('created_at')->first(); if (!$workOrder) return ; $workOrder->syncIntercept(); } }