LD 5 лет назад
Родитель
Сommit
ac82da2309

+ 11 - 3
app/Services/CommodityService.php

@@ -238,10 +238,10 @@ Class CommodityService
         $redundantCommodityBarcodes=new Collection();
         foreach($commodityBarcodes as $commodityBarcode){//清除数组中 已经在商品有的条码,清除商品条码中,不在数组中的条码
             $hasMatch=false;
-            for($i=0;$i<count($barcodes);$i++){
-                if($barcodes[$i]==$commodityBarcode['code']){
+            foreach($barcodes as $key=>$barcode){
+                if($barcodes[$key]==$commodityBarcode['code']){
                     $hasMatch=true;
-                    unset($barcodes[$i]);
+                    unset($barcodes[$key]);
                     break;
                 }
             }
@@ -257,5 +257,13 @@ Class CommodityService
         }
         return $commodity;
     }
+    public function destroyWithOffspring(Commodity $commodity)
+    {
+        $barcodesIds=$commodity->barcodes->map(function ($barcode){
+            return $barcode['id'];
+        });
+        CommodityBarcode::destroy($barcodesIds);
+        $commodity->delete();
+    }
 
 }

+ 1 - 1
app/Services/OwnerService.php

@@ -22,7 +22,7 @@ Class OwnerService
      */
     public function getSelection(array $column = ['id', 'name'])
     {
-        return $this->cacheService->getOrExecute('OwnersAll_IdName',function()use($column){
+        return $this->cacheService->getOrExecute('OwnersAll_IdName'.md5(json_encode($column)),function()use($column){
             return Owner::filterAuthorities()->select($column)->get();
         },config('cache.expirations.owners'));
 

+ 2 - 1
public/t.php

@@ -1,3 +1,4 @@
 <?php
 
-echo ($a=3);
+$ar=[5,3,22];
+echo array_key_last($ar);

+ 54 - 3
tests/Services/CommodityService/SyncBarcodesTest.php

@@ -16,11 +16,14 @@ class InsertMany_onCommoditiesTest extends TestCase
 
     /** @var CommodityService $service */
     public $service;
+    /** @var CommodityBarcodeService $commodityBarcodeService */
+    public $commodityBarcodeService;
     public $data=[];
     public function setUp(): void
     {
         parent::setUp();
         $this->service = app('CommodityService');
+        $this->commodityBarcodeService = app('CommodityBarcodeService');
         ($this->data['commodity']=(new Commodity(['owner_id'=>1,'sku'=>md5(microtime(true))])))->save();
         $this->data['barcodes']=['A1','B1','C2'];
         $this->data['commodityBarcodes']=new Collection();
@@ -28,17 +31,65 @@ class InsertMany_onCommoditiesTest extends TestCase
             'commodity_id'=>$this->data['commodity']['id'],
             'barcodes'=>$this->data['barcodes']
         ];
-        $this->service->insertMany_onCommodities([$inputs]);
+        $this->commodityBarcodeService->insertMany_onCommodities([$inputs]);
     }
 
-    public function testInsert(){
+    public function testLessBarcodesCommodity(){
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $lastCode=array_pop($this->data['barcodes']);
+        $this->data['barcodesStr']=implode(',',$this->data['barcodes']);
+        $this->service->syncBarcodes($this->data['barcodesStr'], $this->data['commodity']->owner_id, $this->data['commodity']->sku);
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $nullCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$lastCode)
+            ->first();
+        $this->assertEquals(null,$nullCommodityBarcode);
+
+    }
+    public function testMoreBarcodesCommodity(){
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $this->data['barcodes'][] = $newCode='FF';
+        $this->data['barcodesStr']=implode(',',$this->data['barcodes']);
+        $this->service->syncBarcodes($this->data['barcodesStr'], $this->data['commodity']->owner_id, $this->data['commodity']->sku);
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $additionalCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$newCode)
+            ->get();
+        $this->assertEquals(1,$additionalCommodityBarcode->count());
+
+    }
+    public function testDiffMoreBarcodesCommodity(){
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $this->data['barcodes'][] = $newCode='FF';
+        $firstCode=array_shift($this->data['barcodes']);
+        $this->data['barcodesStr']=implode(',',$this->data['barcodes']);
+        $this->service->syncBarcodes($this->data['barcodesStr'], $this->data['commodity']->owner_id, $this->data['commodity']->sku);
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $additionalCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$newCode)
+            ->get();
+        $nullCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$firstCode)
+            ->first();
+        $this->assertEquals(1,$additionalCommodityBarcode->count());
+        $this->assertEquals(null,$nullCommodityBarcode);
 
     }
 
 
     public function tearDown(): void
     {
-        $this->data['commodity']->delete();
+        $this->service->destroyWithOffspring($this->data['commodity']);
         CommodityBarcode::destroy($this->data['commodityBarcodes']->map(function ($commodityBarcode){
             return $commodityBarcode['id'];
         }));