[已处理,已签收] 宝时审核->[`无法拦截`,`成功已退回,不赔偿`,`拦截在途丢件,赔偿`] // 信息更改: 承运商->[已处理,无法更改] 宝时审核->[更改成功,更改失败] // 快递异常: 承运商->[已处理,已拦截] 宝时审核->[丢件赔偿,签收成功] // 错漏发: 宝时处理->[已核实] 商家处理->[补发,不补发] // 破损: 承运商->[核实全部破损,核实部分破损,核实未破损] 宝时终审->[核实全部破损,核实部分破损,核实未破损] // 快递丢件: 待商家处理 待终审 完结 // ----------------------------------- 'type', // 快递异常填写:在途异常,签收未收到 'status', // 审核状态 'review_at', // 审核时间 'uniquely_tag', // 唯一标识 'remark', // 工单信息描述 'work_order_status', // 1 为创建状态 0 为处理状态 'logistic_tag', // 待承运商处理标记 0 为默认状态 1无 2 滞 3新 'bao_shi_tag', // 待宝时处理标记 0 为默认状态 1无 2 滞 3新 'owner_tag', // 待货主处理标记 0 为默认状态 1无 2 滞 3新 "is_new_rejecting", // 回库标记 'created_at', 'rejecting_status', // 退回状态 'logistic_indemnity_money', // 承运商赔偿金额 'logistic_express_remission', // 承运商减免 'bao_shi_indemnity_money', // 宝时赔偿金额 'bao_shi_express_remission', // 宝时减免 'user_owner_group_id', 'custom_rejected_status', // 自定义退回标记 ]; /** * @var int 默认 */ public static $DEFAULT_STATUS = 0; /** * @var int 宝时处理 */ public static $BAO_SHI_HANDLER_STATUS = 1; /** * @var int 货主处理 */ public static $OWNER_HANDLER_STATUS = 2; /** * @var int 承运商处理 */ public static $LOGISTIC_HANDLER_STATUS = 3; /** * @var int 宝时终审 */ public static $BAO_SHI_REVIEW_STATUS = 4; /** * @var int 完成 */ public static $END_STATUS = 5; /** * @var int 待货主完结 */ public static $TO_BO_OWNER_END_STATUS = 6; /** * @var int `新`标记 */ public static $NEW_TAG = 3; /** * @var int `滞`标记 */ public static $STRAND_TAG = 2; /** * @var int `无`标记 */ public static $NO_STATE_TAG = 1; /** * @var int 默认标记 */ public static $DEFAULT_TAG = 0; static public $enums = [ 'status' => [ '' => 0, '宝时处理' => 1, '货主处理' => 2, '承运商处理' => 3, '宝时终审' => 4, '完成' => 5, '待货主完结' => 6, ], 'last_status' => [ '' => 0, '宝时处理' => 1, '货主处理' => 2, '承运商处理' => 3, '宝时终审' => 4, '完成' => 5, '待货主完结' => 6, ], 'is_new_rejecting' => [ '' => 0, '回库' => 1, ], ]; function __construct(array $attributes = []) { foreach (self::$enums as &$enum) { $enum = $enum + array_flip($enum); } parent::__construct($attributes); } public function getIsNewRejectingAttribute($value) { if (!$value) return ''; return self::$enums['is_new_rejecting'][$value]; } public function setIsNewRejectingAttribute($value) { if (!$value) return; if (is_numeric($value)) { $this->attributes['is_new_rejecting'] = $value; } else { $this->attributes['is_new_rejecting'] = self::$enums['is_new_rejecting'][$value]; } } public function getStatusAttribute($value) { if (!$value) return ''; return self::$enums['status'][$value]; } public function setStatusAttribute($value) { if (!$value) return; if (is_numeric($value)) { $this->attributes['status'] = $value; } else { $this->attributes['status'] = self::$enums['status'][$value]; } } public function getLastStatusAttribute($value) { if (!$value) return ''; return self::$enums['last_status'][$value]; } public function setLastStatusAttribute($value) { if (!$value) return; if (is_numeric($value)) { $this->attributes['last_status'] = $value; } else { $this->attributes['last_status'] = self::$enums['last_status'][$value]; } } // 关联订单 public function order(): BelongsTo { return $this->belongsTo(Order::class); } // 关联货主 public function owner(): BelongsTo { return $this->belongsTo(Owner::class, 'owner_id'); } // 关联承运商 public function logistic(): BelongsTo { return $this->belongsTo(Logistic::class); } // 创建人 public function creator(): BelongsTo { return $this->belongsTo(User::class, 'creator_id'); } public function lastHandler(): BelongsTo { return $this->belongsTo(User::class, 'last_handler_id'); } // 审核人 public function reviewer(): BelongsTo { return $this->belongsTo(User::class, 'reviewer_id'); } // 生成问题件类型 public function issueType(): BelongsTo { return $this->belongsTo(OrderIssueType::class, 'order_issue_type_id'); } // 对应问题件 public function orderIssue(): BelongsTo { return $this->belongsTo(OrderIssue::class, 'order_id', 'order_id'); } public function details(): HasMany { return $this->hasMany(WorkOrderDetail::class); } public function orderDetail(): BelongsTo { return $this->belongsTo(OrderDetail::class,'order_id','order_id'); } public function userWorkGroups(): BelongsToMany { return $this->belongsToMany(UserWorkgroup::class,'work_order_user_workgroup'); } public function userOwnerGroup(): BelongsTo { return $this->BelongsTo(UserOwnerGroup::class); } public function detail(): BelongsTo { return $this->belongsTo(WorkOrderDetail::class,'work_order_detail_id','id'); } public function scopeFilter($query, $filters) { return $filters->apply($query); } public function orderIssueRejectedBills(): HasMany { return $this->hasMany(OrderIssueRejectedBill::class,'order_id','order_id'); } /** 默认 with 参数 */ public function scopeDefaultWith($query) { $query->with($this->defaultWith()); } public function defaultWith(): array { return ['owner', 'logistic', 'issueType', 'creator', 'lastHandler','orderDetail','orderIssueRejectedBills.rejectedBill.items', 'userWorkGroups','details' => function ($query) { return $query->with(['commodities.commodity', 'logs' => function ($query) { if(Gate::denies('订单管理-工单处理-宝时编辑')){ return $query->with('creator')->orderByDesc('created_at'); } else { return $query->with('creator')->where('tag','!=','1')->orderByDesc('created_at'); } }, 'images.uploadFile', 'issueType', 'processLogs' => function ($query) { return $query->with('user')->orderByDesc('created_at'); }]); }, 'reviewer', 'order'=> function($query){ return $query->with('packages.commodities.commodity','shop','warehouse'); }, 'orderIssue' => function ($query) { /** @var Builder $query */ $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'); } }]); }]; } public function loadDefaultWith() { $this->loadMissing($this->defaultWith()); } public function notification() { $user = Auth::user(); $this->loadMissing('owner', 'order'); $remark = $this->remark; $ownerName = $this->owner->name ?? ''; $clientCode = $this->order->client_code ?? ''; $msg = $user["name"] . "建立了新工单
" . $ownerName . ":" . $clientCode . "
" . $remark; NotificationService::SingleRegister($msg, $clientCode, "订单管理-问题件"); } public function saveWorkOrderDetail($params) { $param = (new WorkOrderDetail($params))->getAttributes(); $this->details()->create($param); $this->loadMissing('details'); } // 工单完结 public function end() { $this->update(['status' => 5, 'work_order_status' => 0]); } /** * 工单状态 */ public function changeStatus($status) { $this->status = $status; $this->update(); } /** * 处理进度 */ public function changeProcessProgress($process_progress) { $this->update(['process_progress' => $process_progress]); } /** * 工单状态 and 处理状态 and 处理人 * @param $status * @param $process_progress * @param $last_status */ public function change($status, $process_progress, $last_status) { $this->last_status = $last_status; $this->status = $status; $this->process_progress = $process_progress; $this->last_handler_id = Auth::id(); $this->update(); } public function syncIntercept() { if ($this->status === '完成') return; /** @var WorkOrderDetail $detail */ $detail = $this->details()->where('order_issue_type_id', $this->order_issue_type_id) ->whereIn('status', [1, 2, 3, 4, 5]) ->orderByDesc('created_at')->first(); if (!$detail) return; $process_progress = '成功已退回,不赔偿'; $detail->update([ 'status' => WorkOrder::$TO_BO_OWNER_END_STATUS, 'process_progress' => $process_progress, 'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS, ]); $this->update([ 'status' => WorkOrder::$TO_BO_OWNER_END_STATUS, 'process_progress' => $process_progress, 'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS, 'owner_tag' => WorkOrder::$STRAND_TAG, 'logistic_tag' => WorkOrder::$DEFAULT_TAG, 'bao_shi_tag' => WorkOrder::$DEFAULT_TAG, ]); app(WorkOrderLogService::class)->createLog($detail, '终审', '自动终审'); } }