68 lines
2.2 KiB
PHP
68 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Virtual\Jobs;
|
|
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Bus\Queueable;
|
|
use App\Models\Real\RealVirtual;
|
|
use Dipper\Foundation\Bus\Dispatchable;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use App\Domains\Real\Repositories\OrderRepository as RealOrderRepository;
|
|
use App\Domains\Virtual\Repositories\OrderRepository as VirtualOrderRepository;
|
|
|
|
class CreateRealVirtualRelation implements ShouldQueue
|
|
{
|
|
use Queueable, Dispatchable;
|
|
|
|
protected $virtualOrderId;
|
|
protected $realOrderIds;
|
|
|
|
public function __construct($virtualOrderId, $realOrderIds)
|
|
{
|
|
$this->virtualOrderId = $virtualOrderId;
|
|
$this->realOrderIds = $realOrderIds;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function handle(RealOrderRepository $realOrderRepository, VirtualOrderRepository $virtualOrderRepository)
|
|
{
|
|
$select = ['id', 'company_id', 'package_id'];
|
|
|
|
if (!$virtualOrder = $virtualOrderRepository->select($select)->find($this->virtualOrderId)) {
|
|
return ;
|
|
}
|
|
|
|
$realOrders = $realOrderRepository->select($select)->whereIn('id', $this->realOrderIds)->get();
|
|
|
|
if (empty($realOrders)) {
|
|
return ;
|
|
}
|
|
|
|
$array = [];
|
|
|
|
foreach ($realOrders as $value) {
|
|
$k = implode(',', [$value['company_id'], $value['package_id'], $virtualOrder['company_id'], $virtualOrder['package_id']]);
|
|
$array[$k] = [
|
|
'real_company_id' => $value['company_id'],
|
|
'real_package_id' => $value['package_id'],
|
|
'virtual_company_id' => $virtualOrder['company_id'],
|
|
'virtual_package_id' => $virtualOrder['package_id'],
|
|
'counts' => 1,
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
}
|
|
|
|
$builder = RealVirtual::query()->toBase();
|
|
|
|
$sql = $builder->getGrammar()->compileInsert($builder, $array);
|
|
|
|
$sql .= ' on conflict (real_company_id,real_package_id,virtual_company_id,virtual_package_id) do update set
|
|
counts=real_virtual_relations.counts+excluded.counts,
|
|
updated_at=excluded.updated_at';
|
|
|
|
$builder->connection->insert($sql, Arr::flatten($array, 1));
|
|
}
|
|
}
|