Forráskód Böngészése

Merge branch 'yang' of ssh://was.baoshi56.com:10022/var/git/bswas

LD 5 éve
szülő
commit
8cf288826c

+ 38 - 0
app/Events/AddOrUpdateOrderIssues.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Events;
+
+use Illuminate\Broadcasting\Channel;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Broadcasting\PresenceChannel;
+use Illuminate\Broadcasting\PrivateChannel;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+
+class AddOrUpdateOrderIssues
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    public $order_ids;
+
+    /**
+     * AddOrderIssues constructor.
+     * @param $logisticNumbers
+     */
+    public function __construct($logisticNumbers)
+    {
+        $this->order_ids = $logisticNumbers;
+    }
+
+
+    /**
+     * Get the channels the event should broadcast on.
+     *
+     * @return \Illuminate\Broadcasting\Channel|array
+     */
+    public function broadcastOn()
+    {
+        return new PrivateChannel('channel-name');
+    }
+}

+ 4 - 2
app/Http/Controllers/PackageLogisticController.php

@@ -27,7 +27,9 @@ class PackageLogisticController extends Controller
         $paginateParams = $request->input();
         $orderPackages = OrderPackage::query()
             ->filter($filters)
-            ->whereIn('owner_id', $owner_ids)->with(['order.logistic', 'order.owner'])->orderByDesc('id')->paginate($request->paginate ?? 50);
+            ->whereIn('owner_id', $owner_ids)->with(['order.logistic', 'order.owner', 'order.issue' => function ($query) {
+                $query->with(['issueType', 'logs.user']);
+            }])->orderByDesc('id')->paginate($request->paginate ?? 50);
         $logistics = Logistic::all();
         $owners = Owner::find($owner_ids);
         return view('package.logistic.index', compact('orderPackages', 'logistics', 'owners', 'paginateParams'));
@@ -35,6 +37,6 @@ class PackageLogisticController extends Controller
 
     public function update(Request $request)
     {
-        OrderPackage::query()->where('id',$request['id'])->update($request->only('exception_type'));
+        OrderPackage::query()->where('id', $request['id'])->update($request->only('exception_type'));
     }
 }

+ 1 - 1
app/Http/Controllers/TestController.php

@@ -1203,7 +1203,7 @@ where purch.islower=1');
 
     public function order_packages_exception_type_sync()
     {
-        $count = OrderPackage::query()->where('status', '派送异常')->update(['exception_type' => '派件异常']);
+        $count = OrderPackage::query()->where('status', '派送异常')->update(['exception_type' => '派件异常','exception' => '是']);
         dump('更新了: '.$count);
     }
 }

+ 10 - 2
app/Jobs/LogisticZopSync.php

@@ -86,7 +86,14 @@ class LogisticZopSync implements ShouldQueue
             $resultItem['status'] = null;
             $resultItem['transfer_status'] = [];
         }
-        $resultItem = $this->setExceptionType($resultItem, $lastRoute?$lastRoute->scanDate / 1000:null);
+        if (!array_key_exists('status', $resultItem)) {
+            $resultItem['status'] = null;
+            $resultItem['transfer_status'] = [];
+        }
+        try {
+            $resultItem = $this->setExceptionType($resultItem, $lastRoute ? $lastRoute->scanDate / 1000 : null);
+        } catch (\Exception $e) {
+        }
         if ($resultItem['status'] == null) {
             unset($resultItem['status']);
             unset($resultItem['transfer_status']);
@@ -146,7 +153,7 @@ class LogisticZopSync implements ShouldQueue
                 case '西藏自治区':
                     return 168;
                 default:
-                    break;
+                    return 72;
             }
         })($orderPackage->order->province);
         $SENDING_RESPONSE_HOURS = 48;
@@ -236,6 +243,7 @@ class LogisticZopSync implements ShouldQueue
                 $resultItem['received_at'] = Carbon::parse($lastRoute->scanDate / 1000)->toDateTimeString();
                 break;
             default:
+                $resultItem['status'] = '无';
                 break;
         }
         return $resultItem;

+ 41 - 0
app/Listeners/AddOrUpdateOrderIssuesListener.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\AddOrUpdateOrderIssues;
+use App\OrderPackage;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Queue\InteractsWithQueue;
+
+class AddOrUpdateOrderIssuesListener
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param AddOrUpdateOrderIssues $event
+     * @return void
+     */
+    public function handle(AddOrUpdateOrderIssues $event)
+    {
+        $order_ids = $event->order_ids;
+        OrderPackage::query()
+            ->whereIn('order_id', $order_ids)
+            ->whereHas('order.issue.issueType', function ($query) {
+                $query->whereNotIn('name', ['拦截', '信息更改', '其他', '错漏发', '仓库问题', '二次加工', '全检问题', '系统问题', '快递方式更改']);
+            })
+            ->update([
+                'exception_type' => '其他',
+                'exception' => '是',
+            ]);
+    }
+}

+ 3 - 0
app/Providers/EventServiceProvider.php

@@ -35,6 +35,9 @@ class EventServiceProvider extends ServiceProvider
         'App\Events\SendEmailEvent' => [
             'App\Listeners\SendEmailListener'
         ],
+        'App\Events\AddOrUpdateOrderIssues' => [
+            'App\Listeners\AddOrUpdateOrderIssuesListener',
+        ],
     ];
 
     /**

+ 3 - 3
app/Services/OrderPackageReceivedSyncService.php

@@ -90,7 +90,7 @@ class OrderPackageReceivedSyncService
             if (isset($data['received_at'])) $orderPackage->received_at = $data['received_at'];
             if (isset($data['exception'])) $orderPackage->exception = $data['exception'];
             if (isset($data['transfer_status'])) $orderPackage->transfer_status = $data['transfer_status'];
-            if (isset($data['exception_type'])) $orderPackage->exception = $data['exception_type'];
+            if (isset($data['exception_type'])) $orderPackage->exception_type = $data['exception_type'];
             $orderPackage->save();
         }
     }
@@ -110,11 +110,11 @@ class OrderPackageReceivedSyncService
         if (Carbon::now()->lte($initDate)) {//当前时间小于等于初始化时间
             //初始化查询一个月的数据,exception为否
             $query = $query->where('created_at', '>=', $initDate->subDays((int)config('api_logistic.days'))->toDateTimeString())
-                ->where('exception', '否')
+//                ->where('exception', '否')
                 ->whereNull('received_at');
         } else {//当前时间大于初始化时间,exception为否且未收货
             $query = $query->where('created_at', '>=', $initDate->toDateTimeString())
-                ->where('exception', '否')
+//                ->where('exception', '否')
                 ->whereNull('received_at');
         }
         return $this->buildData($query->get(), $data);

+ 2 - 2
config/api_logistic.php

@@ -106,6 +106,6 @@ return [
         'x-appKey' => 'c51c718eb899e9f706979',
         'appSecret' => '9f664e3ab08049874aa417720840161a',
     ],
-    'init_date' => '2021-04-07 23:59:59',
-    'days' => 2,
+    'init_date' => '2021-04-14 23:59:59',
+    'days' => 4,
 ];

+ 13 - 0
database/factories/OrderIssueTypeFactory.php

@@ -0,0 +1,13 @@
+<?php
+
+/** @var Factory $factory */
+
+use App\OrderIssueType;
+use Faker\Generator as Faker;
+use Illuminate\Database\Eloquent\Factory;
+
+$factory->define(OrderIssueType::class, function (Faker $faker) {
+    return [
+        'name' => $faker->name,
+    ];
+});

+ 14 - 11
resources/views/package/logistic/index.blade.php

@@ -5,12 +5,12 @@
     <span id="nav2">
         @component('package.menu')@endcomponent
     </span>
-    <div id="list">
+    <div id="list" class="d-none">
         <div class="container-fluid">
             <div id="form_div"></div>
             <table class="table table-striped table-sm text-nowrap table-hover">
                 <tr>
-                    <th>异常类型修改</th>
+                    <th>异常类型</th>
                     <th>序号</th>
                     <th>单号</th>
                     <th>状态</th>
@@ -19,15 +19,16 @@
                     <th>发出日期</th>
                     <th>收货日期</th>
                     <th>称重日期</th>
-                    <th>异常标记</th>
-                    <th>异常说明</th>
-                    <th>异常类型</th>
                     <th>快递路由</th>
-                    <th>客服备注</th>
+                    <th>情况说明</th>
+                    <th>问题类别</th>
+                    <th>说明</th>
+                    <th>操作者</th>
+                    <th>时间</th>
                 </tr>
                 <tr v-for="(package,i) in packages" @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
                     <td>
-                        <select v-model="package.exception_type" @change="package.showEditButton = true">
+                        <select class="form-control-sm" v-model="package.exception_type" @change="package.showEditButton = true">
                             <option :disabled="!exception_editable" v-for="(value,index) in exception_types" :value="value" :name="value" :key="index">@{{ value }}</option>
                         </select>
                         <button class="btn btn-info btn-sm text-white mr-1" @click="updateExceptionType(package)" v-if="package.showEditButton">
@@ -41,9 +42,6 @@
                     <td>@{{ package.sent_at }}</td>
                     <td>@{{ package.received_at }}</td>
                     <td>@{{ package.weighed_at }}</td>
-                    <td>@{{ package.exception }}</td>
-                    <td>@{{ package.exception_message }}</td>
-                    <td>@{{ package.exception_type }}</td>
                     <td>
                         <div v-if="package.transfer_status && package.transfer_status.length>0" class="text-overflow-warp-200 up" :id="'route-'+i">
                             <p v-for="route in package.transfer_status">
@@ -60,7 +58,11 @@
                             </label>
                         </div>
                     </td>
-                    <td>@{{ package.remark }}</td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue">@{{ package.order.issue.result_explain }}</td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.issue_type">@{{ package.order.issue.issue_type.name }}</td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span v-for="log in package.order.issue.logs">@{{ log.content }}<br></span></td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span v-for="log in package.order.issue.logs">@{{ log.user.name }}<br></span></td>
+                    <td class="text-overflow-warp-200 " v-if="package.order && package.order.issue && package.order.issue.logs.length >0"><span v-for="log in package.order.issue.logs">@{{ log.created_at }}<br></span></td>
                 </tr>
             </table>
             <div class="text-info h5 btn btn">{{$orderPackages->count()}}/{{$orderPackages->total()}}</div>
@@ -122,6 +124,7 @@
                 });
             },
             mounted() {
+                $('#list').removeClass('d-none');
                 let _this = this;
                 $(".up").slideUp();
                 let data = [

+ 66 - 0
tests/Feature/AddOrUpdateOrderIssuesListenerTest.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace Tests\Feature;
+
+use App\Events\AddOrUpdateOrderIssues;
+use App\Order;
+use App\OrderIssue;
+use App\OrderIssueType;
+use App\OrderPackage;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class AddOrUpdateOrderIssuesListenerTest extends TestCase
+{
+    protected $order;
+    protected $orderPackage;
+    protected $orderIssueType;
+    protected $orderIssue;
+
+    protected function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        OrderIssueType::query()->truncate();
+    }
+
+
+    protected function tearDown(): void
+    {
+        try {
+            $this->order->delete();
+            $this->orderPackage->delete();
+            $this->orderIssueType->delete();
+            $this->orderIssue->delete();
+        } catch (\Exception $e) {
+        }
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+
+
+    /**
+     * @test
+     */
+    public function update_type_test()
+    {
+        $this->order = $order = factory(Order::class)->create();
+        $this->orderPackage = $orderPackage = factory(OrderPackage::class)->create(['order_id' => $order->id]);
+        $this->orderIssueType = $orderIssueType = factory(OrderIssueType::class)->create(['name' => '破损']);
+        $this->orderIssue = $orderIssue = factory(OrderIssue::class)->create(['order_id' => $order->id, 'order_issue_type_id' => $orderIssueType->id]);
+        event(new AddOrUpdateOrderIssues([$orderPackage->order_id]));
+        $this->assertEquals('其他', $orderPackage->refresh()->exception_type);
+    }
+
+    /**
+     * @test
+     */
+    public function not_update_type_test()
+    {
+        $this->order = $order = factory(Order::class)->create();
+        $this->orderPackage = $orderPackage = factory(OrderPackage::class)->create(['order_id' => $order->id]);
+        $this->orderIssueType = $orderIssueType = factory(OrderIssueType::class)->create(['name' => '拦截']);
+        $this->orderIssue = $orderIssue = factory(OrderIssue::class)->create(['order_id' => $order->id, 'order_issue_type_id' => $orderIssueType->id]);
+        event(new AddOrUpdateOrderIssues([$orderPackage->order_id]));
+        $this->assertEquals('无', $orderPackage->refresh()->exception_type);
+    }
+}

+ 10 - 0
tests/Feature/LogisticZopSyncTest.php

@@ -216,4 +216,14 @@ class LogisticZopSyncTest extends TestCase
     {
         return json_encode([]);
     }
+
+    /**
+     * @test
+     */
+    public function arr_test()
+    {
+        $data = [];
+        $data['aa'] = "vbbb";
+        dd(array_key_exists('aa',$data));
+    }
 }

+ 5 - 4
tests/Services/LogisticQiaoSFService/LogisticQiaoSFServiceTest.php

@@ -22,10 +22,11 @@ class LogisticQiaoSFServiceTest extends TestCase
      */
     public function testGet()
     {
-        factory(\App\OrderPackage::class)->create(['logistic_number' => 'SF1335376515904',]);
-        factory(\App\OrderPackage::class)->create(['logistic_number' => 'SF2050377278135',]);
-        factory(\App\OrderPackage::class)->create(['logistic_number' => 'SF2060390000049',]);
-        $response = $this->logisticQiaoSFService->get(['SF1335376515904', 'SF2050377278135', 'SF2060390000049']);
+//        factory(\App\OrderPackage::class)->create(['logistic_number' => 'SF1335376515904',]);
+//        factory(\App\OrderPackage::class)->create(['logistic_number' => 'SF2050377278135',]);
+//        factory(\App\OrderPackage::class)->create(['logistic_number' => 'SF2060390000049',]);
+        $response = $this->logisticQiaoSFService->get(['SF1306128321691']);
+        dd($response);
         $this->assertCount(3, $response);
     }
 }

+ 36 - 34
tests/Services/OrderPackageReceivedSyncService/TestSyncLogisticRouteApi.php

@@ -35,43 +35,45 @@ class TestSyncLogisticRouteApi extends TestCase
      */
     public function testUpdate()
     {
-        $orderPackage1 = factory(OrderPackage::class)->create(['logistic_number' => 'SF1038651915891', 'exception' => '否', 'received_at' => null,]);
-        $orderPackage2 = factory(OrderPackage::class)->create(['logistic_number' => 'SF1038651413847', 'exception' => '否', 'received_at' => null,]);
-        $orderPackage3 = factory(OrderPackage::class)->create(['logistic_number' => 'SF1038611050071', 'exception' => '否', 'received_at' => null,]);
-        $orderPackage4 = factory(OrderPackage::class)->create(['logistic_number' => '73228021907536', 'exception' => '否', 'received_at' => null,]);
-        $orderPackage5 = factory(OrderPackage::class)->create(['logistic_number' => '73228022816494', 'exception' => '否', 'received_at' => null,]);
+        $orderPackage1 = factory(OrderPackage::class)->create(['logistic_number' => 'SF1306128321691', 'exception' => '否', 'received_at' => null,]);
+//        $orderPackage2 = factory(OrderPackage::class)->create(['logistic_number' => 'SF1038651413847', 'exception' => '否', 'received_at' => null,]);
+//        $orderPackage3 = factory(OrderPackage::class)->create(['logistic_number' => 'SF1038611050071', 'exception' => '否', 'received_at' => null,]);
+//        $orderPackage4 = factory(OrderPackage::class)->create(['logistic_number' => '73228021907536', 'exception' => '否', 'received_at' => null,]);
+//        $orderPackage5 = factory(OrderPackage::class)->create(['logistic_number' => '73228022816494', 'exception' => '否', 'received_at' => null,]);
         $this->order_package_ids [] = $orderPackage1->id;
-        $this->order_package_ids [] = $orderPackage2->id;
-        $this->order_package_ids [] = $orderPackage3->id;
-        $this->order_package_ids [] = $orderPackage4->id;
-        $this->order_package_ids [] = $orderPackage5->id;
+//        $this->order_package_ids [] = $orderPackage2->id;
+//        $this->order_package_ids [] = $orderPackage3->id;
+//        $this->order_package_ids [] = $orderPackage4->id;
+//        $this->order_package_ids [] = $orderPackage5->id;
 
-        $this->service->syncLogisticRouteApi(['SF' => ['SF1038651915891', 'SF1038651413847', 'SF1038611050071']]);
-        $this->service->syncLogisticRouteApi(['ZTO' => ['73228021907536', '73228022816494']]);
+        $this->service->syncLogisticRouteApi(['SF' => ['SF1306128321691']]);
+//        $this->service->syncLogisticRouteApi(['ZTO' => ['73228021907536', '73228022816494']]);
+//        dd(OrderPackage::query()->where('logistic_number','SF1306128321691')->get()->toArray());
         $this->assertDatabaseHas('order_packages',[
-            'logistic_number' => 'SF1038651915891',
-            'status' => '已收件',
-            'exception' => '否',
-        ]);
-        $this->assertDatabaseHas('order_packages',[
-            'logistic_number' => 'SF1038651413847',
-            'status' => '已收件',
-            'exception' => '否',
-        ]);
-        $this->assertDatabaseHas('order_packages',[
-            'logistic_number' => 'SF1038611050071',
-            'status' => '已收件',
-            'exception' => '否',
-        ]);
-        $this->assertDatabaseHas('order_packages',[
-            'logistic_number' => '73228021907536',
-            'status' => '已收件',
-            'exception' => '否',
-        ]);
-        $this->assertDatabaseHas('order_packages',[
-            'logistic_number' => '73228022816494',
-            'status' => '已收件',
-            'exception' => '否',
+            'logistic_number' => 'SF1306128321691',
+            'status' => '派送异常',
+            'exception' => '是',
+            "exception_type" => "派件异常"
         ]);
+//        $this->assertDatabaseHas('order_packages',[
+//            'logistic_number' => 'SF1038651413847',
+//            'status' => '已收件',
+//            'exception' => '否',
+//        ]);
+//        $this->assertDatabaseHas('order_packages',[
+//            'logistic_number' => 'SF1038611050071',
+//            'status' => '已收件',
+//            'exception' => '否',
+//        ]);
+//        $this->assertDatabaseHas('order_packages',[
+//            'logistic_number' => '73228021907536',
+//            'status' => '已收件',
+//            'exception' => '否',
+//        ]);
+//        $this->assertDatabaseHas('order_packages',[
+//            'logistic_number' => '73228022816494',
+//            'status' => '已收件',
+//            'exception' => '否',
+//        ]);
     }
 }

+ 3 - 6
tests/Services/OrderPackageReceivedSyncService/TestUpdate.php

@@ -72,23 +72,20 @@ class TestUpdate extends TestCase
         $this->assertDatabaseHas('order_packages',[
             'logistic_number' => 'SF1038651915891',
             'status' => '派送中',
-            'received_at' => Carbon::now(),
+            'received_at' => Carbon::now()->toDateTimeString(),
             'exception' => '否',
-            'transfer_status' => '快件正在派送',
         ]);
         $this->assertDatabaseHas('order_packages',[
             'logistic_number' => 'SF1038651413847',
             'status' => '派送中',
-            'received_at' => Carbon::now(),
+            'received_at' => Carbon::now()->toDateTimeString(),
             'exception' => '否',
-            'transfer_status' => '快件正在派送',
         ]);
         $this->assertDatabaseHas('order_packages',[
             'logistic_number' => 'SF1038611050071',
             'status' => '派送中',
-            'received_at' => Carbon::now(),
+            'received_at' => Carbon::now()->toDateTimeString(),
             'exception' => '否',
-            'transfer_status' => '快件正在派送',
         ]);
     }
 }

+ 45 - 0
tests/Unit/OrderPackageTest.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace Tests\Unit;
+
+use App\Order;
+use App\OrderIssue;
+use App\OrderPackage;
+use Tests\TestCase;
+
+class OrderPackageTest extends TestCase
+{
+    protected $order;
+    protected $orderPackage;
+    protected $orderIssue;
+
+    protected function tearDown(): void
+    {
+        $this->order->delete();
+        $this->orderPackage->delete();
+        $this->orderIssue->delete();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+
+
+    /**
+     * A basic unit test example.
+     *
+     * @return void
+     */
+    public function testExample()
+    {
+        $this->assertTrue(true);
+    }
+
+    /**
+     * @test
+     */
+    public function has_one_through_order_issue()
+    {
+        $order = factory(Order::class)->create();
+        $orderPackage = factory(OrderPackage::class)->create(['order_id' =>$order->id]);
+        $orderIssue = factory(OrderIssue::class)->create(['order_id' =>$order->id]);
+        dd($orderPackage->refresh()->loadMissing('order.issue')->toArray());
+    }
+}