优化同步

This commit is contained in:
邓皓元 2019-01-23 11:11:21 +08:00
parent ebf28927a4
commit b6f1b69f32
2 changed files with 21 additions and 6 deletions

View File

@ -45,6 +45,13 @@ class LogSyncJob implements ShouldQueue
protected static $carrierOperators = [10 => 0, 11 => 1, 12 => 2];
protected static $payChannels = [10 => 'wx', 11 => 'alipay', 12 => 'bank'];
protected static $orderClasses = [
\App\Models\Virtual\OrderCard::class,
\App\Models\Virtual\OrderRenewalCard::class,
\App\Models\Virtual\OrderRenewalPackageCard::class,
\App\Models\Virtual\OrderFlowPackageCards::class,
];
/**
* Undocumented function
*
@ -151,14 +158,19 @@ class LogSyncJob implements ShouldQueue
unset($relationArray[$key]['order_sn']);
}
$builder = OrderCardPartition::query()->toBase();
$relationArray = array_groupBy($relationArray, 'type');
$sql = $builder->getGrammar()->compileInsert($builder, $relationArray);
foreach ($relationArray as $type => $array) {
$builder = (new $orderClasses[$type])->query()->toBase();
$sql .= " on conflict (type, order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp)) do update set
counts=virtual_order_cards_partition.counts + excluded.counts";
$sql = $builder->getGrammar()->compileInsert($builder, $array);
$sql .= " on conflict (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp)) do update set
counts=virtual_order_cards_partition.counts + excluded.counts";
$builder->connection->insert($sql, Arr::flatten($array, 1));
}
$builder->connection->insert($sql, Arr::flatten($relationArray, 1));
} catch (\Exception $e) {
DB::rollback();
throw $e;

View File

@ -36,7 +36,10 @@ CREATE TABLE virtual_order_renewal_cards PARTITION OF virtual_order_cards_partit
CREATE TABLE virtual_order_renewal_package_cards PARTITION OF virtual_order_cards_partition FOR VALUES IN (2);
CREATE TABLE virtual_order_flows_package_cards PARTITION OF virtual_order_cards_partition FOR VALUES IN (3);
CREATE UNIQUE INDEX "virtual_order_cards_partition_order_id_sim_deleted_at_unique" ON "virtual_order_cards_partition" ("type", order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE UNIQUE INDEX "virtual_order_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE UNIQUE INDEX "virtual_order_renewal_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE UNIQUE INDEX "virtual_order_renewal_package_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE UNIQUE INDEX "virtual_order_flows_package_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE INDEX "virtual_order_cards_timelines_index" ON "virtual_order_cards" USING GIN (timelines_array(sim));
CREATE INDEX "virtual_order_renewal_cards_timelines_index" ON "virtual_order_renewal_cards" USING GIN (timelines_array(sim));