diff --git a/dashboard/src2/pages/NewJsiteServer.vue b/dashboard/src2/pages/NewJsiteServer.vue index 402ec48..bd4a6ee 100644 --- a/dashboard/src2/pages/NewJsiteServer.vue +++ b/dashboard/src2/pages/NewJsiteServer.vue @@ -136,10 +136,10 @@

支付成功!

- 您的订单已支付成功,服务器正在创建中。创建并启动需要 3-5 分钟,请耐心等待。 + 您的订单已支付成功,服务器记录已创建。服务器正在后台创建中,创建并启动需要 3-5 分钟,请耐心等待。

- 创建完成后,您将收到通知,也可以在服务器列表中查看状态。 + 您可以在服务器列表中查看服务器状态,创建完成后状态将更新为"Running"。

@@ -267,6 +267,7 @@ export default { success: false, // 支付相关状态 order: null, + server: null, // 服务器记录信息 showPaymentProcessing: false, paymentSuccess: false, isProcessingPayment: false, @@ -400,9 +401,11 @@ export default { console.log('订单创建成功,完整响应:', data); console.log('订单ID:', data.order?.order_id); + console.log('服务器记录:', data.server); // 显示订单支付界面 this.order = data.order; + this.server = data.server; // 保存服务器记录信息 this.showPaymentProcessing = true; // 立即处理支付 @@ -436,7 +439,13 @@ export default { ...(response.order || {}), status: '已支付' }; - this.$emit('success', orderData); + + // 同时发送服务器记录信息 + const serverData = { + ...this.server + }; + + this.$emit('success', { order: orderData, server: serverData }); this.isProcessingPayment = false; this.paymentSuccess = true; @@ -511,7 +520,13 @@ export default { this.stopPaymentCheck(); const orderData = { ...this.order, ...(data.order || {}) }; - this.$emit('success', orderData); + + // 同时发送服务器记录信息 + const serverData = { + ...this.server + }; + + this.$emit('success', { order: orderData, server: serverData }); this.paymentSuccess = true; } diff --git a/jcloud/api/aliyun_server_light.py b/jcloud/api/aliyun_server_light.py index 0c2b1e1..1e99f2a 100644 --- a/jcloud/api/aliyun_server_light.py +++ b/jcloud/api/aliyun_server_light.py @@ -411,7 +411,7 @@ def create_server_order(**kwargs): import random order_id = datetime.now().strftime('%Y%m%d%H%M%S%f')[:-3] + ''.join(random.choices('0123456789', k=6)) - # 创建订单 + # 创建订单记录 order = jingrow.get_pg({ "pagetype": "Order", "order_id": order_id, @@ -420,20 +420,28 @@ def create_server_order(**kwargs): "status": "待支付", "total_amount": total_amount, "title": f"{region_id}", - "description": f"{selected_plan.get('core')}核/{selected_plan.get('memory')}GB/{selected_plan.get('disk_size')}GB, {period}个月", - "server_config": { - "plan_id": plan_id, - "image_id": image_id, - "period": period, - "region_id": region_id, - "monthly_price": monthly_price - } + "description": f"{selected_plan.get('core')}核/{selected_plan.get('memory')}GB/{selected_plan.get('disk_size')}GB, {period}个月" }) - order.insert(ignore_permissions=True) + + # 创建服务器记录 + server = jingrow.get_pg({ + "pagetype": "Jsite Server", + "team": team.name, + "status": "Pending", + "region": region_id, + "system_image": image_id, + "end_date": jingrow.utils.add_months(jingrow.utils.nowdate(), period), + "title": f"{region_id} - {selected_plan.get('core')}核/{selected_plan.get('memory')}GB", + "planid": plan_id, + "period": period, + "order_id": order_id + }) + server.insert(ignore_permissions=True) + jingrow.db.commit() - return {"success": True, "order": order.as_dict()} + return {"success": True, "order": order.as_dict(), "server": server.as_dict()} except Exception as e: jingrow.log_error("创建服务器订单失败", str(e)) @@ -446,12 +454,16 @@ def create_server_async(order_name): if not order: raise Exception("订单不存在") - # 获取配置 - config = order.server_config or {} - plan_id = config.get('plan_id') - image_id = config.get('image_id') - period = config.get('period', 1) - region_id = config.get('region_id', 'cn-shanghai') + # 查找对应的服务器记录(通过订单ID) + server = jingrow.get_pg("Jsite Server", {"order_id": order.order_id}) + if not server: + raise Exception("找不到对应的服务器记录") + + # 从服务器记录中获取配置信息 + region_id = server.region or 'cn-shanghai' + image_id = server.system_image or 'e9363571cf2444aba422b17470285465' + plan_id = server.planid or 'swas.s.c2m1s30b1.linux' + period = server.period or 1 # 调用阿里云API创建实例 result = create_aliyun_instance(plan_id, image_id, period, region_id) @@ -461,30 +473,13 @@ def create_server_async(order_name): instance_id = result['data']['instance_id'] - # 创建服务器记录 - server = jingrow.get_pg({ - "pagetype": "Jsite Server", - "instance_id": instance_id, - "team": order.team, - "order": order.name, - "status": "Running", - "region_id": region_id, - "plan_id": plan_id, - "image_id": image_id, - "period": period, - "monthly_price": config.get('monthly_price', 0), - "total_amount": order.total_amount, - "payment_method": order.payment_method, - "created_at": jingrow.utils.now(), - "expires_at": jingrow.utils.add_months(jingrow.utils.nowdate(), period) - }) - - server.insert(ignore_permissions=True) + # 更新服务器记录状态 + server.status = "Active" + server.instance_id = instance_id + server.save(ignore_permissions=True) # 更新订单状态 order.status = "交易成功" - order.instance_id = instance_id - order.server_record = server.name order.save(ignore_permissions=True) jingrow.db.commit() @@ -493,9 +488,4 @@ def create_server_async(order_name): except Exception as e: jingrow.log_error("服务器创建失败", f"订单 {order_name}: {str(e)}") - # 更新订单状态为失败 - try: - jingrow.db.set_value("Order", order_name, "status", "创建失败") - except: - pass raise e \ No newline at end of file diff --git a/jcloud/jcloud/pagetype/jsite_server/jsite_server.json b/jcloud/jcloud/pagetype/jsite_server/jsite_server.json index c560709..f100f10 100644 --- a/jcloud/jcloud/pagetype/jsite_server/jsite_server.json +++ b/jcloud/jcloud/pagetype/jsite_server/jsite_server.json @@ -9,19 +9,21 @@ "team", "column_break_4", "status", - "plan", + "order_id", "server_section", "instance_id", "cpu", "disk_size", "region", "system_image", + "planid", "column_break_aliyun", "end_date", "memory", "bandwidth", "ip", "running_status", + "period", "ssh_section", "ssh_user", "ssh_port", @@ -55,12 +57,6 @@ "label": "团队", "options": "Team" }, - { - "fieldname": "plan", - "fieldtype": "Link", - "label": "计划", - "options": "Server Plan" - }, { "fetch_from": "virtual_machine.public_ip_address", "fieldname": "ip", @@ -166,11 +162,31 @@ "in_list_view": 1, "label": "运行状态", "read_only": 1 + }, + { + "fieldname": "order_id", + "fieldtype": "Data", + "label": "订单ID", + "read_only": 1 + }, + { + "fieldname": "planid", + "fieldtype": "Data", + "hidden": 1, + "label": "套餐ID", + "read_only": 1 + }, + { + "fieldname": "period", + "fieldtype": "Int", + "hidden": 1, + "label": "购买时长(月)", + "read_only": 1 } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2025-07-26 13:27:00.795541", + "modified": "2025-07-27 22:04:39.820405", "modified_by": "Administrator", "module": "Jcloud", "name": "Jsite Server", diff --git a/jcloud/jcloud/pagetype/jsite_server/jsite_server.py b/jcloud/jcloud/pagetype/jsite_server/jsite_server.py index 7a96902..0c0a705 100644 --- a/jcloud/jcloud/pagetype/jsite_server/jsite_server.py +++ b/jcloud/jcloud/pagetype/jsite_server/jsite_server.py @@ -21,7 +21,9 @@ class JsiteServer(Document): instance_id: DF.Data | None ip: DF.Data | None memory: DF.Data | None - plan: DF.Link | None + order_id: DF.Data | None + period: DF.Int + planid: DF.Data | None region: DF.Data | None root_public_key: DF.Code | None running_status: DF.Data | None