SyncUpdateCommodityBasSkusTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace Tests\Services\CommodityService;
  3. use App\Commodity;
  4. use App\OracleBasSKU;
  5. use App\Owner;
  6. use App\Services\CommodityService;
  7. use App\Services\common\DataHandlerService;
  8. use App\Services\OwnerService;
  9. use App\ValueStore;
  10. use Carbon\Carbon;
  11. use Illuminate\Support\Facades\DB;
  12. use Tests\TestCase;
  13. class SyncUpdateCommodityBasSkusTest extends TestCase
  14. {
  15. /**
  16. * @var CommodityService $service
  17. */
  18. public $service;
  19. public $bas_skus;
  20. public $updated_at;
  21. public $last_time;
  22. public $commodities;
  23. private $data=[];
  24. public function setUp(): void
  25. {
  26. parent::setUp();
  27. $this->service=app(CommodityService::class);
  28. $owner = factory(Owner::class)->create();
  29. $basSKU = factory(OracleBasSKU::class)->make(['customerid'=>$owner->code,'packid'=>'STANDARD']);
  30. $this->data['owner'] = $owner;
  31. $this->data['basSKU'] = $basSKU;
  32. $this->bas_skus=collect();
  33. $this->bas_skus->add($basSKU);
  34. }
  35. /**
  36. * @test
  37. */
  38. public function testSyncCommodityUpdated()
  39. {
  40. // $this->updated_at = config('sync.commodity_sync.updated_at');
  41. // $this->last_time = ValueStore::query()->where('name',$this->updated_at)->value('value');
  42. // if (!$this->last_time) $time=Carbon::now()->subSeconds(65);
  43. // $this->bas_skus= OracleBasSKU::query()
  44. // ->select('customerid','sku','descr_c','alternate_sku1','alternate_sku2','alternate_sku3','skulength','skuwidth','skuhigh','cube','packid','addtime','edittime')
  45. // ->where('EditTime', '>=', $this->last_time??$time)
  46. // ->whereColumn('EditTime', '<>', 'addTime')
  47. // ->orderByDesc('EditTime')
  48. // ->get();
  49. $this->service->syncUpdateCommodity($this->bas_skus);
  50. $owner_sku_map = [];
  51. $sku = [];
  52. $this->bas_skus->each(function ($addBasSku) use (&$owner_sku_map, &$sku) {
  53. if (!empty($addBasSku['customerid']) && !empty($addBasSku['sku'])) {
  54. $key = "owner_code_{$addBasSku['customerid']}_sku_{$addBasSku['sku']}";
  55. $owner_sku_map[$key] = ['owner_code' => $addBasSku['customerid'], 'sku' => $addBasSku['sku']];
  56. $sku[] = $addBasSku['sku'];
  57. }
  58. });
  59. /**
  60. * @var OwnerService $ownerService
  61. */
  62. $ownerService = app(OwnerService::class);
  63. $owner_codes = (function () use ($owner_sku_map) {
  64. $owner_codes = [];
  65. if (count($owner_sku_map) == 0) return $owner_codes;
  66. foreach ($owner_sku_map as $item) {
  67. $owner_codes[$item['owner_code']] = $item['owner_code'];
  68. }
  69. return $owner_codes;
  70. })();
  71. $owner_id = (function () use ($ownerService, $owner_codes) {
  72. $owners = $ownerService->getOwnerByCodes($owner_codes);
  73. $map = [];
  74. $owners->each(function ($owner) use (&$map) {
  75. $map[] = $owner['id'];
  76. });
  77. return $map;
  78. })();
  79. $this->commodities = Commodity::query()
  80. ->whereIn('owner_id', array_unique($owner_id))
  81. ->whereIn('sku', array_unique($sku))
  82. ->groupBy('owner_id', 'sku')
  83. ->get();
  84. $this->assertNotNull($this->commodities);
  85. $this->assertEquals(count($this->bas_skus),count($this->commodities));
  86. }
  87. public function tearDown(): void
  88. {
  89. // ValueStore::query()->updateOrCreate([
  90. // 'name' => $this->updated_at,
  91. // ], [
  92. // 'name' => $this->updated_at,
  93. // 'value' => $this->last_time,
  94. // ]);
  95. $this->data['owner']->delete();
  96. $commodityIds=[];
  97. foreach ($this->commodities as $commodity){
  98. array_push($commodityIds,$commodity->id);
  99. }
  100. DB::table('commodities')->whereIn('id',$commodityIds)->delete();
  101. DB::table('commodity_barcodes')->whereIn('commodity_id',$commodityIds)->delete();
  102. parent::tearDown(); // TODO: Change the autogenerated stub
  103. }
  104. }