with(['order']) ->where('logistic_number', $logistic_number) ->first(); if ($orderPackage->exception_status === '单号异常' || $orderPackage->exception_status === '无法获取路由') {//这种类型的单,不需要再更新状态 return $data; } /**执行该方法时,默认没有异常, *1. 之前有异常的件, * 1.1 新的状态是无异常的可以更新为正常 * 1.2 新的状态是异常的可以更新为对应异常 *2. 之前无异常 * 2.1 新的状态无异常更新为无异常 * 2.2 新的状态异常更新为对应异常 */ $data['exception_status'] = ''; $created_at = Carbon::parse($orderPackage->created_at); //当天的16:30 $transfer_status = $data['transfer_status'] ?? []; if (empty($orderPackage->sent_at)) {//没复核 if (empty($transfer_status)) {//没有路由信息 //延迟发货 $created_at_clone = deep_copy($created_at); if ($created_at->gt($created_at_clone->startOfDay()->addHours(16)->addMinutes(30))) {//下午16的单 $created_at_clone = deep_copy($created_at); if ($created_at_clone->addDay()->endOfDay()->lt(now())) {//超过第二天的24时 $created_at_clone = deep_copy($created_at); $data['exception_status'] = '延迟发货'; $data['is_delay_deliver'] = true; } } else { if ($created_at_clone->endOfDay()->lt(now())) {//超过当天的24时 $data['exception_status'] = '延迟发货'; $data['is_delay_deliver'] = true; } } } else { //虚拟揽件 // $data['exception_status'] = '虚拟揽件'; //没有复核但是有路由信息 21-09-10 取消虚拟揽件状态 } } else {//复核过 if (empty($transfer_status)) {//没有路由信息 /** @var Carbon $temp_time */ $temp_time = $orderPackage->weighed_at?:$orderPackage->sent_at;//揽收异常以称重时间优先 没有称重以发出时间 if (now()->gt($temp_time->addDay()->startOfDay()->addHours(6))) {//当前时间大于复核时间的第二天6点 if (empty($orderPackage->weighed_at)) {//没有称重 $data['exception_status'] = '疑似库内丢件'; } else {//有称重 $data['exception_status'] = '揽件异常'; } } } else {//有路由信息 usort($transfer_status, function ($a, $b) { if ($a['accept_time'] === $b['accept_time']) { return 0; } return ($a['accept_time'] > $b['accept_time']) ? -1 : 1; }); $last_transfer = $transfer_status[0]['accept_time']; $last_remark = empty(!$transfer_status[0]['remark'])?$transfer_status[0]['remark']:$transfer_status[0]['accept_address']; if (count($transfer_status) < 3) {//三条以内的不管地区 时间限制为24h if (Carbon::parse($last_transfer)->diffInHours(now()) > 24) { $data['exception_status'] = '在途异常'; } } else { $SHORT_RESPONSE_HOURS = (function ($province) { switch ($province) { case '浙江省': case '江苏省': case '上海': case '安徽省': return 24; case '北京': case '天津': case '江西省': case '湖北省': case '湖南省': case '广东省': case '福建省': case '山东省': case '河北省': case '河南省': case '山西省': case '四川省': case '陕西省': case '重庆': case '广西壮族自治区': case '贵州省': case '云南省': case '海南省': case '吉林省': case '黑龙江省': case '辽宁省': return 72; case '青海省': case '宁夏回族自治区': case '甘肃省': case '内蒙古自治区': case '新疆维吾尔自治区': case '西藏自治区': return 120; default: return 24; } })($orderPackage->order->province); if (Carbon::parse($last_transfer)->diffInHours(now()) > $SHORT_RESPONSE_HOURS) { $data['exception_status'] = '在途异常'; } } if (($data['exception_status']??''==='在途异常')&& ($data['status']=== '派送中')) { $data['exception_status'] = '派送异常'; } if (Str::contains($last_remark,['代收','快递柜','驿站','自提柜','丰巢','快递小屋','合作点','快递超市','签收'])) { $data['exception_status'] = ''; $data['status'] = '已签收'; } } } return $data; } }