Enhance VM service management: add service_id and plain_password fields, sync service records, and update related migrations

This commit is contained in:
pbao9
2026-04-16 09:39:52 +07:00
parent bb73d6c5a2
commit d68fda2cf0
11 changed files with 206 additions and 104 deletions
+6 -56
View File
@@ -4,14 +4,11 @@ namespace App\Services\Api\Order;
use App\Enums\Order\OrderStatus;
use App\Helpers\OrderHelper;
use App\Jobs\VirtualMachine\Create\CreateVMJobs;
use App\Jobs\VirtualMachine\Create\CreateVirtualMachineJob;
use App\Models\Addon;
use App\Models\Log as CustomerActivityLog;
use App\Models\ModuleIpAddress;
use App\Models\ModuleVmware;
use App\Models\Order;
use App\Models\OrderItem;
use App\Models\Os;
use App\Models\Service;
use App\Models\ServiceAddon;
use App\Repositories\Api\Invoice\InvoiceRepository;
@@ -239,59 +236,12 @@ class OrderService
private function dispatchVmJob(Order $order, OrderItem $item, Service $service, $customer): void
{
try {
$os = Os::with('osGroup.host')->find($item->os_id);
dispatch(new CreateVirtualMachineJob($item));
if (!$os?->osGroup?->module_host_id) {
Log::warning('dispatchVmJob: OS/OsGroup/Host not found', [
'order_id' => $order->id,
'os_id' => $item->os_id,
]);
return;
}
$ip = ModuleIpAddress::where('module_host_id', $os->osGroup->module_host_id)
->where('status', 0)
->lockForUpdate()
->first();
if (!$ip) {
Log::warning('dispatchVmJob: no available IP', [
'order_id' => $order->id,
'module_host_id' => $os->osGroup->module_host_id,
]);
return;
}
$vmName = $item->server_name ?? ('VM-' . $order->id);
$ip->update(['status' => 1, 'vm_name' => $vmName]);
$moduleVmware = ModuleVmware::create([
'name' => $vmName,
'module_ip_address_id' => $ip->id,
'port' => 22,
'order_id' => $order->id,
'first_payment' => $order->total,
'next_payment' => $order->total,
'next_due_date' => $service->expires_at,
'next_invoice' => 0,
'user' => 'Administrator',
'password' => '',
'hostname' => strtolower($vmName),
'vmware_id' => null,
'os_id' => $item->os_id,
'customer_id' => $customer->id,
'status' => 0,
]);
// Store module_vmware.id as vm_id on Service for quick lookup
$service->update(['vm_id' => (string) $moduleVmware->id]);
dispatch(new CreateVMJobs($moduleVmware->id))->delay(now()->addSeconds(10));
Log::info('dispatchVmJob: CreateVMJobs dispatched', [
'order_id' => $order->id,
'service_id' => $service->id,
'module_vmware_id' => $moduleVmware->id,
Log::info('dispatchVmJob: CreateVirtualMachineJob dispatched', [
'order_id' => $order->id,
'service_id' => $service->id,
'order_item_id' => $item->id,
]);
} catch (Exception $e) {
Log::error('dispatchVmJob: exception', [