Browse Source

添加新增获修改问题件事件与监听器

ANG YU 5 years ago
parent
commit
bedabf7123

+ 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');
+    }
+}

+ 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',
+        ],
     ];
 
     /**

+ 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,
+    ];
+});

+ 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);
+    }
+}

+ 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());
+    }
+}