GetUpdateModelByWmsOrderHeadersTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. namespace Tests\Services\OrderService\GetUpdateOrderModelByWMSOrderHeadersTest;
  3. use App\Batch;
  4. use App\Logistic;
  5. use App\OracleBasCode;
  6. use App\OracleDOCOrderHeader;
  7. use App\Order;
  8. use App\Owner;
  9. use App\Services\OrderService;
  10. use App\Shop;
  11. use App\Warehouse;
  12. use Tests\TestCase;
  13. class GetUpdateModelByWmsOrderHeadersTest extends TestCase
  14. {
  15. /**
  16. * @var OrderService $service
  17. */
  18. private $service;
  19. private $data = [];
  20. public function setUp(): void
  21. {
  22. parent::setUp();
  23. $this->service = app('OrderService');
  24. $owners = factory(Owner::class)->times(1)->create();
  25. $logistics = factory(Logistic::class)->times(2)->create();
  26. $wareHouses = factory(Warehouse::class)->times(3)->create();
  27. $shops = collect();
  28. foreach ($owners as $owner) {
  29. $shops = $shops->concat(factory(Shop::class)->times(rand(3,5))->create(['owner_id'=>$owner->id]));
  30. }
  31. $batches = factory(Batch::class)->times(10)->create();
  32. $orders = collect();
  33. $orderHeaders = collect();
  34. foreach ($owners as $owner) {
  35. $count = rand(2,10);
  36. for ($i =0 ;$i<=$count;$i++){
  37. $shop = $shops->where('owner_id',$owner->id)->random();
  38. $warehouse = $wareHouses->random();
  39. $logistic = $logistics->random();
  40. $batch = $batches->random();
  41. $orderHeader = factory(OracleDOCOrderHeader::class)->make([
  42. 'warehouseid'=>$warehouse->code,
  43. 'waveno'=>$batch->code,
  44. 'customerid'=>$owner->code,
  45. 'userdefine1'=>$logistic->code,
  46. 'issuepartyname' => $shop->name,
  47. ]);
  48. $oracleBASCode = factory(OracleBasCode::class)->make();
  49. $orderType = factory(OracleBasCode::class)->make();
  50. $orderHeader->setRelation('oracleBASCode',$oracleBASCode);
  51. $orderHeader->setRelation('orderType',$orderType);
  52. $orderHeaders = $orderHeaders->push($orderHeader);
  53. $order = factory(Order::class)->create([
  54. 'code' => $orderHeader->orderno,
  55. 'batch_id' =>$batch->id,
  56. 'warehouse_id' => $warehouse->id,
  57. 'logistic_id' => $logistic->id,
  58. 'shop_id' => $shop->id,
  59. 'owner_id' => $owner->id
  60. ]);
  61. $orders->push($order);
  62. }
  63. }
  64. $this->data = [
  65. 'warehouses' => $wareHouses,
  66. 'batches' => $batches,
  67. 'owners' => $owners,
  68. 'logistics' => $logistics,
  69. 'shops' => $shops,
  70. 'orders' => $orders,
  71. 'orderHeaders' => $orderHeaders
  72. ];
  73. }
  74. /**
  75. * @test 测试
  76. */
  77. public function getUpdateModelByWmsOrderHeader()
  78. {
  79. $update_models = $this->service->getUpdateOrderModelByWMSOrderHeaders(
  80. $this->data['orderHeaders'],
  81. $this->data['orders'],
  82. $this->data['warehouses'],
  83. $this->data['owners'],
  84. $this->data['logistics'],
  85. $this->data['shops'],
  86. $this->data['batches']
  87. );
  88. $this->assertEquals($update_models->count(),count($this->data['orders']));
  89. $this->assertEquals(count($this->data['orders']),count($update_models));
  90. }
  91. /**
  92. * @test 部分Order与OrderHeaders相同
  93. */
  94. public function orderPortionIsEquals()
  95. {
  96. $orders = $this->data['orders']->random(1);
  97. foreach ($orders as $order) {
  98. $orderHeader = $this->data['orderHeaders']->where('orderno',$order->code)->first();
  99. $orderHeader->oracleBASCode->codename_c = '订单完成';
  100. $order->update([
  101. 'consignee_name' => $orderHeader['c_contact'],
  102. 'consignee_phone' =>$orderHeader['c_tel2'] ?? $orderHeader['c_tel1'] ,
  103. 'province' =>$orderHeader['c_province'] ,
  104. 'city' =>$orderHeader['c_city'] ,
  105. 'district' =>$orderHeader['c_district'] ,
  106. 'address' => $orderHeader['c_address1'],
  107. 'client_code' =>$orderHeader['soreference1'] ,
  108. 'wms_edittime' => $orderHeader['edittime'] ,
  109. 'wms_status' =>$orderHeader->oracleBASCode->codename_c?? "",
  110. 'order_type' =>$orderHeader->orderType->codename_c?? "",
  111. 'created_at' => $orderHeader['addtime'],
  112. ]);
  113. }
  114. $orders = Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->get();
  115. $update_params = $this->service->getUpdateOrderModelByWMSOrderHeaders(
  116. $this->data['orderHeaders'],
  117. $orders,
  118. $this->data['warehouses'],
  119. $this->data['owners'],
  120. $this->data['logistics'],
  121. $this->data['shops'],
  122. $this->data['batches']
  123. );
  124. // $this->assertEquals($update_params->count(),$orders->count());
  125. $this->assertOrderHeadersAndUpdateParams($this->data['orderHeaders'],$update_params);
  126. }
  127. public function assertOrderHeadersAndUpdateParams($orderHeaders,$update_params){
  128. foreach ($update_params as $update_param) {
  129. $warehouse = Warehouse::find($update_param['warehouse_id']);
  130. $batch = Batch::find($update_param['batch_id']);
  131. $owner = Owner::find($update_param['owner_id']);
  132. $logistic = Logistic::find($update_param['logistic_id']);
  133. $shop = Shop::find($update_param['shop_id']);
  134. $orderHeader = $orderHeaders->where('orderno',$update_param['code'])->first();
  135. $this->assertNotEmpty($orderHeader);
  136. $this->assertEquals($orderHeader['warehouseid'], $warehouse->code);
  137. $this->assertEquals($orderHeader['waveno'],$batch->code);
  138. $this->assertEquals($orderHeader['customerid'],$owner->code);
  139. $this->assertEquals($orderHeader['userdefine1'],$logistic->code);
  140. $this->assertEquals($orderHeader['issuepartyname'],$shop->name);
  141. $this->assertEquals($orderHeader->oracleBASCode->codename_c ?? '',$update_param['wms_status']);
  142. $this->assertEquals($orderHeader->orderType->codename_c ?? '',$update_param['order_type']);
  143. }
  144. }
  145. protected function tearDown(): void
  146. {
  147. Order::query()->whereIn('code',data_get($this->data['orderHeaders'],'*.orderno'))->delete();
  148. Warehouse::destroy(data_get($this->data['warehouses'],'*.id'));
  149. Batch::destroy(data_get($this->data['batches'],'*.id'));
  150. Owner::destroy(data_get($this->data['owners'],'*.id'));
  151. Logistic::query()->whereIn('id',data_get($this->data['logistics'],'*.id'))->forceDelete();
  152. Shop::destroy(data_get($this->data['shops'],'*.id'));
  153. parent::tearDown(); // TODO: Change the autogenerated stub
  154. }
  155. }