update
This commit is contained in:
@@ -79,12 +79,16 @@ class CustomerServiceProvisioningService
|
||||
$service = Service::where('customer_id', $customer->id)->where('id', $serviceId)->first();
|
||||
abort_if(!$service, 404, 'Không tìm thấy dịch vụ');
|
||||
|
||||
return DB::transaction(function () use ($service, $data) {
|
||||
$vmFields = ['os_id', 'vm_cpu', 'vm_ram_mb', 'vm_disk_gb', 'vm_ip', 'vm_dns', 'vm_user', 'vm_password', 'vm_port'];
|
||||
return DB::transaction(function () use ($customer, $service, $data) {
|
||||
$vmFields = ['virtual_machine_id', 'os_id', 'vm_cpu', 'vm_ram_mb', 'vm_disk_gb', 'vm_ip', 'vm_dns', 'vm_user', 'vm_password', 'vm_port'];
|
||||
|
||||
$service->fill(collect($data)->except(['price', ...$vmFields])->all());
|
||||
$service->save();
|
||||
|
||||
if (!empty($data['virtual_machine_id'])) {
|
||||
$this->assignVirtualMachine($service, $customer, (int) $data['virtual_machine_id']);
|
||||
}
|
||||
|
||||
if (array_key_exists('price', $data) && $data['price'] !== null && $service->orderItem) {
|
||||
$service->orderItem->update(['price' => $data['price']]);
|
||||
}
|
||||
@@ -117,6 +121,49 @@ class CustomerServiceProvisioningService
|
||||
});
|
||||
}
|
||||
|
||||
private function assignVirtualMachine(Service $service, Customer $customer, int $virtualMachineId): void
|
||||
{
|
||||
$vm = VirtualMachines::with('datacenter')->findOrFail($virtualMachineId);
|
||||
$current = $service->vmware;
|
||||
|
||||
if ($current && ($current->virtual_machine_id === $vm->id || $current->vmware_id === $vm->vm_id)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$takenBy = DB::table('module_vmware as mv')
|
||||
->join('services as s', 's.vm_id', '=', 'mv.id')
|
||||
->where(fn($q) => $q->where('mv.virtual_machine_id', $vm->id)->orWhere('mv.vmware_id', $vm->vm_id))
|
||||
->where('s.id', '!=', $service->id)
|
||||
->value('s.id');
|
||||
abort_if($takenBy, 422, "VM {$vm->name} đang gán cho dịch vụ #{$takenBy}.");
|
||||
|
||||
if ($current) {
|
||||
$current->update([
|
||||
'virtual_machine_id' => $vm->id,
|
||||
'vmware_id' => $vm->vm_id,
|
||||
'name' => $vm->name,
|
||||
'vcenter_id' => $vm->datacenter->vcenter_id ?? null,
|
||||
'cpu' => $vm->cpu,
|
||||
'ram_mb' => $vm->ram_mb,
|
||||
'ip' => $vm->ip,
|
||||
]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$price = (int) ($service->orderItem->price ?? 0);
|
||||
$vmId = $this->createModuleVmwareIfNeeded(
|
||||
['virtual_machine_id' => $vm->id, 'server_name' => $service->server_name],
|
||||
$customer,
|
||||
$service->orderItem?->order,
|
||||
$price,
|
||||
$service->expires_at ?? now(),
|
||||
);
|
||||
|
||||
ModuleVmware::where('id', $vmId)->update(['service_id' => $service->id]);
|
||||
$service->update(['vm_id' => $vmId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gửi email nhắc gia hạn dịch vụ cho khách hàng.
|
||||
*/
|
||||
@@ -285,7 +332,7 @@ class CustomerServiceProvisioningService
|
||||
});
|
||||
}
|
||||
|
||||
private function createModuleVmwareIfNeeded(array $data, Customer $customer, Order $order, int $basePrice, string|Carbon $expiresAt): ?int
|
||||
private function createModuleVmwareIfNeeded(array $data, Customer $customer, ?Order $order, int $basePrice, string|Carbon $expiresAt): ?int
|
||||
{
|
||||
if (empty($data['virtual_machine_id'])) {
|
||||
return null;
|
||||
@@ -298,7 +345,7 @@ class CustomerServiceProvisioningService
|
||||
['virtual_machine_id' => $vm->id],
|
||||
[
|
||||
'customer_id' => $customer->id,
|
||||
'order_id' => $order->id,
|
||||
'order_id' => $order?->id,
|
||||
'name' => $vm->name,
|
||||
'vmware_id' => $vm->vm_id,
|
||||
'vcenter_id' => $vcenterId,
|
||||
|
||||
Reference in New Issue
Block a user