소스 검색

快递同步

ANG YU 4 년 전
부모
커밋
3d298d555c

+ 31 - 10
app/Traits/LogisticSyncTrait.php

@@ -69,16 +69,11 @@ trait LogisticSyncTrait
                     }
                 }
             } 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'];
+                $transfer_status = $this->sortTransferStatusByAcceptTimeDESC($transfer_status);
+                $last_transfer_accept_time = $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) {
+                    if (Carbon::parse($last_transfer_accept_time)->diffInHours(now()) > 24) {
                         $data['exception_status'] = '在途异常';
                     }
                 } else {
@@ -122,7 +117,7 @@ trait LogisticSyncTrait
                                 return 24;
                         }
                     })($orderPackage->order->province);
-                    if (Carbon::parse($last_transfer)->diffInHours(now()) > $SHORT_RESPONSE_HOURS) {
+                    if (Carbon::parse($last_transfer_accept_time)->diffInHours(now()) > $SHORT_RESPONSE_HOURS) {
                         $data['exception_status'] = '在途异常';
                     }
                 }
@@ -136,9 +131,35 @@ trait LogisticSyncTrait
             }
         }
         //如果复核时间>前一天的18.00,则不添加异常信息
-        if ((!empty($sent_at)) &&($sent_at->gt(now()->subDay()->startOfDay()->addHours(18))) && isset($data['exception_status'])) {
+        if ((!empty($sent_at)) && ($sent_at->gt(now()->subDay()->startOfDay()->addHours(18))) && isset($data['exception_status'])) {
             unset($data['exception_status']);
         }
+        //邮政待揽收状态不是在途
+        $logistic_id = $orderPackage->order->logistic_id ?? null;
+        if ((!empty($logistic_id)) && ($logistic_id === 6 || $logistic_id === 88)) {
+            if (!empty($transfer_status)) {
+                $this->sortTransferStatusByAcceptTimeDESC($transfer_status);
+                $last_remark = empty(!$transfer_status[0]['remark']) ? $transfer_status[0]['remark'] : $transfer_status[0]['accept_address'];
+                if (Str::contains($last_remark, ['等待揽收', '商品已下单'])) {
+                    $data['status'] = '已复核';
+                }
+            }
+        }
         return $data;
     }
+
+    /**
+     * @param $transfer_status
+     * @return mixed
+     */
+    private function sortTransferStatusByAcceptTimeDESC($transfer_status)
+    {
+        usort($transfer_status, function ($a, $b) {
+            if ($a['accept_time'] === $b['accept_time']) {
+                return 0;
+            }
+            return ($a['accept_time'] > $b['accept_time']) ? -1 : 1;
+        });
+        return $transfer_status;
+    }
 }

+ 1 - 1
database/factories/OrderPackageFactory.php

@@ -22,11 +22,11 @@ $factory->define(OrderPackage::class, function (Faker $faker) {
         'sent_at' => now()->subHours(1),
         'received_at' => null,
         'transfer_status' => null,
-        'remark' => null,
         'owner_id' => random_int(1, 100),
         'uploaded_to_wms' => '是',
         'sync_routes_flag' => false,
         'is_manual_update' => false,
         'exception_status' => random_int(1,6),
+        'is_delay_deliver' => false,
     ];
 });

+ 91 - 0
tests/Services/OrderPackageReceivedSyncService/TestSetExceptionStatus.php

@@ -0,0 +1,91 @@
+<?php
+
+namespace Tests\Services\OrderPackageReceivedSyncService;
+
+use App\OrderPackage;
+use App\Services\OrderPackageReceivedSyncService;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Tests\TestCase;
+
+class TestSetExceptionStatus extends TestCase
+{
+    protected $order_package_ids;
+
+    /** @var OrderPackageReceivedSyncService $service */
+    public $service;
+
+    function setUp(): void
+    {
+        parent::setUp();
+        $this->service = app(OrderPackageReceivedSyncService::class);
+    }
+
+    public function testReturned()
+    {
+        $this->assertTrue(true);
+    }
+
+    function tearDown(): void
+    {
+        OrderPackage::destroy($this->order_package_ids);
+        parent::tearDown();
+    }
+
+    /**
+     * @test
+     */
+    public function test_邮政待揽收_改_已复核()
+    {
+        $logistic_number = 'GM000001';
+        OrderPackage::query()->where('logistic_number', $logistic_number)->delete();
+
+        $order =  factory(\App\Order::class)->create([
+            'logistic_id' => 6
+        ]);
+
+        $orderPackage = factory(OrderPackage::class)->create([
+            'order_id' => $order->id,
+            'logistic_number' => $logistic_number,
+        ]);
+        $data = [
+            'logistic_number' => $logistic_number,
+            'status' => '在途',
+            'transfer_status' => [
+                [
+                    'accept_time' => now()->subHours(5)->toDateTimeString(),
+                    'accept_address' => '等待揽收中',
+                    'remark' => '',
+                ],
+                [
+                    'accept_time' => now()->subHours(2)->toDateTimeString(),
+                    'accept_address' => '商品已下单',
+                    'remark' => '',
+                ],
+            ],
+        ];
+        $res =  $this->service->setExceptionStatus($data);
+        $this->assertEquals('已复核',$res['status']);
+    }
+
+
+    public function test_如果复核时间大于前一天的18时,则不添加异常信息()
+    {
+        $logistic_number = 'GM000001';
+        OrderPackage::query()->where('logistic_number', $logistic_number)->delete();
+
+
+        $orderPackage = factory(OrderPackage::class)->create([
+            'logistic_number' => $logistic_number,
+            'sent_at' => now()->subDay()->startOfDay()->addHours(19),
+        ]);
+        $data = [
+            'logistic_number' => $logistic_number,
+            'status' => '在途',
+            'exception_status' => '在途异常',
+            'transfer_status' => [],
+        ];
+        $res =  $this->service->setExceptionStatus($data);
+        $this->assertEquals(false,isset($res['exception_status']));
+    }
+}