Zhouzhendong 5 лет назад
Родитель
Сommit
b80cab7786

+ 54 - 2
app/Http/Controllers/TestController.php

@@ -38,6 +38,8 @@ use App\OrderPackage;
 use App\OrderPackageCommodities;
 use App\OrderTracking;
 use App\Owner;
+use App\OwnerPriceOperation;
+use App\OwnerPriceOperationItem;
 use App\Package;
 use App\Process;
 use App\ProcessDaily;
@@ -61,6 +63,7 @@ use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\OrderTrackingOwnerService;
 use App\Services\OrderTrackingService;
+use App\Services\OwnerPriceOperationService;
 use App\Services\OwnerService;
 use App\Services\ShopService;
 use App\Services\StoreService;
@@ -89,6 +92,7 @@ use Illuminate\Support\Facades\Redis;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Str;
 use Maatwebsite\Excel\Facades\Excel;
+use Mockery\Mock;
 use PhpMyAdmin\Server\Status\Data;
 use Ramsey\Collection\Collection;
 use Zttp\Zttp;
@@ -156,8 +160,56 @@ sql;
     }
     public function zzd()
     {
-        $a = DB::connection("oracle")->select(DB::raw("select * from BAS_CUSTOMER"));
-        dd(array_column($a,"descr_c"));
+        $model4 = factory(OwnerPriceOperation::class)->create([
+            "operation_type"=>"出库",   //操作类型
+            "strategy"      =>"特征",         //策略
+        ]);
+        $pieces = Unit::query()->where("name","件")->first();
+        $box = Unit::query()->where("name","箱")->first();
+        $single = Unit::query()->where("name","单")->first();
+        if (!$pieces){
+            $pieces = factory(Unit::class)->create(["name"=>"件"]);
+        }
+        if (!$box){
+            $box = factory(Unit::class)->create(["name"=>"箱"]);
+        }
+        if (!$single){
+            $single = factory(Unit::class)->create(["name"=>"单"]);
+        }
+        $item8 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model4->id,
+            "strategy"                          => "起步",
+            "unit_id"                           => $box->id,
+            "unit_price"                        => 5.5,
+        ]);
+        $item9 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model4->id,
+            "strategy"                          =>"默认",
+            "unit_id"                           => $box->id,
+            "unit_price"                        => 5.6,
+        ]);
+        $item10 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model4->id,
+            "strategy"                          =>"特征",
+            "unit_id"                           => $box->id,
+            "unit_price"                        => 5.7,
+        ]);
+        $owner = factory(Owner::class)->create([
+            "user_owner_group_id" => 1,
+        ]);
+        $model4->ownerPriceOperationOwners()->sync([$owner->id]);
+
+        $commodity = factory(Commodity::class)->create([
+            'sku' => md5(date('Ymd').\Illuminate\Support\Str::random(3)),
+            'owner_id' => $owner->id,
+            "pack_spec" => 3
+        ]);
+        $result = app(OwnerPriceOperationService::class)
+            ->matching(["packages"=>
+                [["commodity"=>"测试","amount"=>57,"sku"=>$commodity->sku]]]
+                ,[],
+                $owner->id,"出库");
+        dd($result);
     }
 
     public function zzd1()

+ 5 - 5
app/Services/OwnerPriceOperationService.php

@@ -159,15 +159,15 @@ Class OwnerPriceOperationService
             return -7;
         }*/
         foreach ($rules as $rule){
-            if (!$rule->ownerOutStorageRules)continue;
+            if (!$rule->items)continue;
             if ($rule->strategy == '特征'){
-                $bool = app("FeatureService")->matchFeature($rule->feature,$columnMapping,$matchObject);
+                $bool = true;//app("FeatureService")->matchFeature($rule->feature,$columnMapping,$matchObject);
                 if ($bool === true){
-                    $money = $this->matchItem($rule->ownerOutStorageRules,$columnMapping,$matchObject,$units,$owner_id,$type=='入库' ? true : false);
+                    $money = $this->matchItem($rule->items,$columnMapping,$matchObject,$units,$owner_id,$type=='入库' ? true : false);
                     if ($money>0)return $money;
                 };
             }else{
-                $money = $this->matchItem($rule->ownerOutStorageRules,$columnMapping,$matchObject,$units,$owner_id,$type=='入库' ? true : false);
+                $money = $this->matchItem($rule->items,$columnMapping,$matchObject,$units,$owner_id,$type=='入库' ? true : false);
                 if ($money>0)return $money;
             };
         }
@@ -250,7 +250,7 @@ Class OwnerPriceOperationService
                     }
                     break;
                 default:
-                    if ($isIn)continue;
+                    if ($isIn)break;
                     if ($unitName && $unitName != $units[$rule->unit_id])return -3; //校验单位是否一致
 
                     $money = $rule->amount * $rule->unit_price;

+ 0 - 17
database/factories/OwnerPriceOperationItemInFactory.php

@@ -1,17 +0,0 @@
-<?php
-
-/** @var \Illuminate\Database\Eloquent\Factory $factory */
-
-use Faker\Generator as Faker;
-
-$factory->define(\App\OwnerPriceOperationItemIn::class, function (Faker $faker)use(&$unit){
-    $strategy = ['默认','特征'];
-    return [
-        "owner_price_operation_id"          => factory(\App\OwnerPriceOperation::class),         //作业计费ID
-        "strategy"                          => $strategy[array_rand($strategy)],         //策略
-        "amount"                            => mt_rand(0,100),                           //起步数
-        "unit_id"                           => factory(\App\Unit::class),//单位ID
-        "unit_price"                        => mt_rand(10,100) / 12,                       //单价
-        "feature"                           => \Illuminate\Support\Str::random(6),                          //特征
-    ];
-});

+ 2 - 2
database/factories/OwnerPriceOperationItemOutFactory.php → database/factories/OwnerPriceOperationItemService.php

@@ -2,10 +2,10 @@
 
 /** @var \Illuminate\Database\Eloquent\Factory $factory */
 
-use App\OwnerPriceOperationItemOut;
+use App\OwnerPriceOperationItem;
 use Faker\Generator as Faker;
 
-$factory->define(OwnerPriceOperationItemOut::class, function (Faker $faker) {
+$factory->define(OwnerPriceOperationItem::class, function (Faker $faker) {
     $strategy = ['默认','特征'];
     return [
         "owner_price_operation_id"          => factory(\App\OwnerPriceOperation::class),         //作业计费ID

+ 11 - 11
tests/Services/OwnerOutStorageRuleService/OwnerOutStorageRuleServiceTest.php → tests/Services/OwnerPriceOperationItemService/OwnerPriceOperationItemServiceTest.php

@@ -1,25 +1,25 @@
 <?php
 
 
-namespace Tests\Services\OwnerOutStorageRuleService;
+namespace Tests\Services\OwnerPriceOperationItemService;
 
 
-use App\OwnerOutStorageRule;
 use App\OwnerPriceOperation;
-use App\Services\OwnerOutStorageRuleService;
+use App\OwnerPriceOperationItem;
+use App\Services\OwnerPriceOperationItemService;
 use App\Unit;
 use Tests\TestCase;
 
-class OwnerOutStorageRuleServiceTest extends  TestCase
+class OwnerPriceOperationItemServiceTest extends  TestCase
 {
-    /** @var OwnerOutStorageRuleService */
+    /** @var OwnerPriceOperationItemService */
     public $service;
     public $data;
 
     protected function setUp(): void
     {
         parent::setUp();
-        $this->service = app(OwnerOutStorageRuleService::class);
+        $this->service = app(OwnerPriceOperationItemService::class);
 
         $this->data["units"] = [];
         $unit1 = Unit::query()->where("name","件")->first();
@@ -41,11 +41,11 @@ class OwnerOutStorageRuleServiceTest extends  TestCase
 
         $this->data["ownerPriceOperations"] = [$ownerPriceOperation->toArray()];
         $this->data["models"] = [];
-        $this->data["models"][] = factory(OwnerOutStorageRule::class)->create([
+        $this->data["models"][] = factory(OwnerPriceOperationItem::class)->create([
             "owner_price_operation_id" => $ownerPriceOperation->id,
             "unit_id" => $unit1->id,
         ])->toArray();
-        $this->data["models"][] = factory(OwnerOutStorageRule::class)->create([
+        $this->data["models"][] = factory(OwnerPriceOperationItem::class)->create([
             "owner_price_operation_id" => $ownerPriceOperation->id,
             "unit_id" => $unit2->id,
         ])->toArray();
@@ -71,7 +71,7 @@ class OwnerOutStorageRuleServiceTest extends  TestCase
             "amount" => 50
         ]);
         $this->assertEquals(1,$result);
-        $expected = OwnerOutStorageRule::query()->find($model["id"]);
+        $expected = OwnerPriceOperationItem::query()->find($model["id"]);
         $this->assertEquals(99,$expected->priority);
         $this->assertEquals(1.33,$expected->unit_price);
         $this->assertEquals(50,$expected->amount);
@@ -98,7 +98,7 @@ class OwnerOutStorageRuleServiceTest extends  TestCase
      */
     public function testFindUpdate()
     {
-        $model = OwnerOutStorageRule::query()->find($this->data["models"][0]["id"]);
+        $model = OwnerPriceOperationItem::query()->find($this->data["models"][0]["id"]);
         $result = $this->service->findUpdate($model,[
             "unit_price" => 0.566,
         ]);
@@ -129,7 +129,7 @@ class OwnerOutStorageRuleServiceTest extends  TestCase
     {
         Unit::destroy(array_column($this->data["units"],"id"));
         OwnerPriceOperation::destroy(array_column($this->data["ownerPriceOperations"],"id"));
-        OwnerOutStorageRule::destroy(array_column($this->data["models"],"id"));
+        OwnerPriceOperationItem::destroy(array_column($this->data["models"],"id"));
         parent::tearDown();
     }
 }

+ 65 - 49
tests/Services/OwnerPriceOperationService/OwnerPriceOperationServiceTest.php

@@ -5,9 +5,8 @@ namespace Tests\Services\OwnerPriceOperationService;
 
 use App\Commodity;
 use App\Owner;
-use App\OwnerInStorageRule;
-use App\OwnerOutStorageRule;
 use App\OwnerPriceOperation;
+use App\OwnerPriceOperationItem;
 use App\Services\FeatureService;
 use App\Services\OwnerPriceOperationService;
 use App\Unit;
@@ -59,58 +58,86 @@ class OwnerPriceOperationServiceTest extends  TestCase
         ]);
         $this->data["models"] = [$model1->toArray(),$model2->toArray(),$model3->toArray(),$model4->toArray()];
 
-        $in1 = factory(OwnerInStorageRule::class)->create([
-            "owner_price_operation_id"  => $model1->id, //作业计费ID
-            "amount"                    => 5,                   //计量
-            "unit_id"                   => $pieces->id,//单位ID
-            "unit_price"                => 2.22,               //单价
-        ]);
-        $in2 = factory(OwnerInStorageRule::class)->create([
-            "owner_price_operation_id"  => $model2->id, //作业计费ID
-            "amount"                    => 5,                   //计量
-            "unit_id"                   => $box->id,//单位ID
-            "unit_price"                => 3.22,               //单价
-        ]);
-        $out1 = factory(OwnerOutStorageRule::class)->create([
-            "owner_price_operation_id"          => $model3->id,
-            "strategy"                          =>"起步",
-            "amount"                            =>6,
+        $item1 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model1->id,
+            "strategy"                          => "默认",
+            "amount"                            => 6,
             "unit_id"                           => $box->id,
             "unit_price"                        => 2.22,
         ]);
-        $out4 = factory(OwnerOutStorageRule::class)->create([
+        $item2 = factory(OwnerPriceOperationItem::class)->create([
             "owner_price_operation_id"          => $model3->id,
-            "strategy"                          => "默认",
+            "strategy"                          => "特征",
+            "amount"                            => 6,
             "unit_id"                           => $box->id,
             "unit_price"                        => 3.22,
         ]);
-        $out5 = factory(OwnerOutStorageRule::class)->create([
+        $item3 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model2->id,
+            "strategy"                          =>"默认",
+            "amount"                            => 6,
+            "unit_id"                           => $box->id,
+            "unit_price"                        => 4.22,
+        ]);
+        $item4 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model2->id,
+            "strategy"                          =>"特征",
+            "amount"                            => 6,
+            "unit_id"                           => $box->id,
+            "unit_price"                        => 5.1,
+        ]);
+        $item5 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model3->id,
+            "strategy"                          => "起步",
+            "amount"                            => 6,
+            "unit_id"                           => $box->id,
+            "unit_price"                        => 5.2,
+        ]);
+        $item6 = factory(OwnerPriceOperationItem::class)->create([
+            "owner_price_operation_id"          => $model3->id,
+            "strategy"                          =>"默认",
+            "amount"                            => 6,
+            "unit_id"                           => $box->id,
+            "unit_price"                        => 5.3,
+        ]);
+        $item7 = factory(OwnerPriceOperationItem::class)->create([
             "owner_price_operation_id"          => $model3->id,
             "strategy"                          =>"特征",
+            "amount"                            => 6,
             "unit_id"                           => $box->id,
-            "unit_price"                        => 4.22,
+            "unit_price"                        => 5.4,
         ]);
-        $out6 = factory(OwnerOutStorageRule::class)->create([
+        $item8 = factory(OwnerPriceOperationItem::class)->create([
             "owner_price_operation_id"          => $model4->id,
-            "strategy"                          =>"起步",
+            "strategy"                          => "起步",
             "amount"                            => 6,
             "unit_id"                           => $box->id,
-            "unit_price"                        => 5.1,
+            "unit_price"                        => 5.5,
         ]);
-        $out7 = factory(OwnerOutStorageRule::class)->create([
+        $item9 = factory(OwnerPriceOperationItem::class)->create([
             "owner_price_operation_id"          => $model4->id,
-            "strategy"                          => "默认",
+            "strategy"                          =>"默认",
+            "amount"                            => 6,
             "unit_id"                           => $box->id,
-            "unit_price"                        => 5.2,
+            "unit_price"                        => 5.6,
         ]);
-        $out8 = factory(OwnerOutStorageRule::class)->create([
+        $item10 = factory(OwnerPriceOperationItem::class)->create([
             "owner_price_operation_id"          => $model4->id,
             "strategy"                          =>"特征",
+            "amount"                            => 6,
             "unit_id"                           => $box->id,
-            "unit_price"                        => 5.3,
+            "unit_price"                        => 5.7,
         ]);
-        $this->data["in"] = [$in1->toArray(),$in2->toArray()];
-        $this->data["out"] = [$out1->toArray(),$out4->toArray(),$out5->toArray(),$out6->toArray(),$out7->toArray(),$out8->toArray()];
+        $this->data["item"] = [$item1->toArray(),
+            $item2->toArray(),
+            $item3->toArray(),
+            $item4->toArray(),
+            $item5->toArray(),
+            $item6->toArray(),
+            $item7->toArray(),
+            $item8->toArray(),
+            $item9->toArray(),
+            $item10->toArray()];
         $owner = factory(Owner::class)->create([
             "user_owner_group_id" => 1,
         ]);
@@ -131,26 +158,16 @@ class OwnerPriceOperationServiceTest extends  TestCase
     /**
      * @group customer
      */
-    public function testMatchRule()
+    public function testMatching()
     {
         $this->partialMock(FeatureService::class,function ($mock){
             /** @var Mock $mock */
             $mock->shouldReceive("matchFeature")->andReturn(true);
         });
-        $result = $this->service->matchRule(["packages"=>[["commodity"=>"测试","amount"=>55,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"入库");
-        $this->assertEquals(12.88,$result);
-        $result = $this->service->matchRule(["packages"=>[["commodity"=>"测试","amount"=>57,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"出库");
-        $this->assertEquals(99.5,$result);
-    }
-    /**
-     * @group customer
-     */
-    public function testMatchRule1()
-    {
-        $result = $this->service->matchRule(["packages"=>[["commodity"=>"测试","amount"=>56,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"入库");
-        $this->assertEquals(26.64,$result);
-        $result = $this->service->matchRule(["packages"=>[["commodity"=>"测试","amount"=>58,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"出库");
-        $this->assertEquals(58.4,$result);
+        $result = $this->service->matching(["packages"=>[["commodity"=>"测试","amount"=>55,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"入库");
+        $this->assertEquals(96.9,$result);
+        $result = $this->service->matching(["packages"=>[["commodity"=>"测试","amount"=>57,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"出库");
+        $this->assertEquals(107.1,$result);
     }
 
     public function tearDown(): void
@@ -162,8 +179,7 @@ class OwnerPriceOperationServiceTest extends  TestCase
             $model->id = $d["id"];
             $model->ownerPriceOperationOwners()->sync([]);
         }
-        OwnerInStorageRule::destroy(array_column($this->data["in"],"id"));
-        OwnerOutStorageRule::destroy(array_column($this->data["out"],"id"));
+        OwnerPriceOperationItem::destroy(array_column($this->data["item"],"id"));
         Owner::destroy(array_column($this->data["owners"],"id"));
         Commodity::destroy(array_column($this->data["commodities"],"id"));
         parent::tearDown();