vd/app/Domains/Virtual/Jobs/CreateRealVirtualRelation.php
2019-03-14 09:28:33 +08:00

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'],
'times' => 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
times=real_virtual_relations.times+excluded.times,
updated_at=excluded.updated_at';
$builder->connection->insert($sql, Arr::flatten($array, 1));
}
}