更新Jsite Server字段,新建服务器时点击确认创建后同时创建支付订单和Jsite Server记录
This commit is contained in:
parent
207190822f
commit
e9f327af93
@ -136,10 +136,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<h3 class="text-xl font-medium text-gray-900 mb-2">支付成功!</h3>
|
<h3 class="text-xl font-medium text-gray-900 mb-2">支付成功!</h3>
|
||||||
<p class="text-gray-600 mb-4">
|
<p class="text-gray-600 mb-4">
|
||||||
您的订单已支付成功,服务器正在创建中。创建并启动需要 3-5 分钟,请耐心等待。
|
您的订单已支付成功,服务器记录已创建。服务器正在后台创建中,创建并启动需要 3-5 分钟,请耐心等待。
|
||||||
</p>
|
</p>
|
||||||
<p class="text-gray-500 text-sm">
|
<p class="text-gray-500 text-sm">
|
||||||
创建完成后,您将收到通知,也可以在服务器列表中查看状态。
|
您可以在服务器列表中查看服务器状态,创建完成后状态将更新为"Running"。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -267,6 +267,7 @@ export default {
|
|||||||
success: false,
|
success: false,
|
||||||
// 支付相关状态
|
// 支付相关状态
|
||||||
order: null,
|
order: null,
|
||||||
|
server: null, // 服务器记录信息
|
||||||
showPaymentProcessing: false,
|
showPaymentProcessing: false,
|
||||||
paymentSuccess: false,
|
paymentSuccess: false,
|
||||||
isProcessingPayment: false,
|
isProcessingPayment: false,
|
||||||
@ -400,9 +401,11 @@ export default {
|
|||||||
|
|
||||||
console.log('订单创建成功,完整响应:', data);
|
console.log('订单创建成功,完整响应:', data);
|
||||||
console.log('订单ID:', data.order?.order_id);
|
console.log('订单ID:', data.order?.order_id);
|
||||||
|
console.log('服务器记录:', data.server);
|
||||||
|
|
||||||
// 显示订单支付界面
|
// 显示订单支付界面
|
||||||
this.order = data.order;
|
this.order = data.order;
|
||||||
|
this.server = data.server; // 保存服务器记录信息
|
||||||
this.showPaymentProcessing = true;
|
this.showPaymentProcessing = true;
|
||||||
|
|
||||||
// 立即处理支付
|
// 立即处理支付
|
||||||
@ -436,7 +439,13 @@ export default {
|
|||||||
...(response.order || {}),
|
...(response.order || {}),
|
||||||
status: '已支付'
|
status: '已支付'
|
||||||
};
|
};
|
||||||
this.$emit('success', orderData);
|
|
||||||
|
// 同时发送服务器记录信息
|
||||||
|
const serverData = {
|
||||||
|
...this.server
|
||||||
|
};
|
||||||
|
|
||||||
|
this.$emit('success', { order: orderData, server: serverData });
|
||||||
|
|
||||||
this.isProcessingPayment = false;
|
this.isProcessingPayment = false;
|
||||||
this.paymentSuccess = true;
|
this.paymentSuccess = true;
|
||||||
@ -511,7 +520,13 @@ export default {
|
|||||||
this.stopPaymentCheck();
|
this.stopPaymentCheck();
|
||||||
|
|
||||||
const orderData = { ...this.order, ...(data.order || {}) };
|
const orderData = { ...this.order, ...(data.order || {}) };
|
||||||
this.$emit('success', orderData);
|
|
||||||
|
// 同时发送服务器记录信息
|
||||||
|
const serverData = {
|
||||||
|
...this.server
|
||||||
|
};
|
||||||
|
|
||||||
|
this.$emit('success', { order: orderData, server: serverData });
|
||||||
|
|
||||||
this.paymentSuccess = true;
|
this.paymentSuccess = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -411,7 +411,7 @@ def create_server_order(**kwargs):
|
|||||||
import random
|
import random
|
||||||
order_id = datetime.now().strftime('%Y%m%d%H%M%S%f')[:-3] + ''.join(random.choices('0123456789', k=6))
|
order_id = datetime.now().strftime('%Y%m%d%H%M%S%f')[:-3] + ''.join(random.choices('0123456789', k=6))
|
||||||
|
|
||||||
# 创建订单
|
# 创建订单记录
|
||||||
order = jingrow.get_pg({
|
order = jingrow.get_pg({
|
||||||
"pagetype": "Order",
|
"pagetype": "Order",
|
||||||
"order_id": order_id,
|
"order_id": order_id,
|
||||||
@ -420,20 +420,28 @@ def create_server_order(**kwargs):
|
|||||||
"status": "待支付",
|
"status": "待支付",
|
||||||
"total_amount": total_amount,
|
"total_amount": total_amount,
|
||||||
"title": f"{region_id}",
|
"title": f"{region_id}",
|
||||||
"description": f"{selected_plan.get('core')}核/{selected_plan.get('memory')}GB/{selected_plan.get('disk_size')}GB, {period}个月",
|
"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
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
order.insert(ignore_permissions=True)
|
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()
|
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:
|
except Exception as e:
|
||||||
jingrow.log_error("创建服务器订单失败", str(e))
|
jingrow.log_error("创建服务器订单失败", str(e))
|
||||||
@ -446,12 +454,16 @@ def create_server_async(order_name):
|
|||||||
if not order:
|
if not order:
|
||||||
raise Exception("订单不存在")
|
raise Exception("订单不存在")
|
||||||
|
|
||||||
# 获取配置
|
# 查找对应的服务器记录(通过订单ID)
|
||||||
config = order.server_config or {}
|
server = jingrow.get_pg("Jsite Server", {"order_id": order.order_id})
|
||||||
plan_id = config.get('plan_id')
|
if not server:
|
||||||
image_id = config.get('image_id')
|
raise Exception("找不到对应的服务器记录")
|
||||||
period = config.get('period', 1)
|
|
||||||
region_id = config.get('region_id', 'cn-shanghai')
|
# 从服务器记录中获取配置信息
|
||||||
|
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创建实例
|
# 调用阿里云API创建实例
|
||||||
result = create_aliyun_instance(plan_id, image_id, period, region_id)
|
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']
|
instance_id = result['data']['instance_id']
|
||||||
|
|
||||||
# 创建服务器记录
|
# 更新服务器记录状态
|
||||||
server = jingrow.get_pg({
|
server.status = "Active"
|
||||||
"pagetype": "Jsite Server",
|
server.instance_id = instance_id
|
||||||
"instance_id": instance_id,
|
server.save(ignore_permissions=True)
|
||||||
"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)
|
|
||||||
|
|
||||||
# 更新订单状态
|
# 更新订单状态
|
||||||
order.status = "交易成功"
|
order.status = "交易成功"
|
||||||
order.instance_id = instance_id
|
|
||||||
order.server_record = server.name
|
|
||||||
order.save(ignore_permissions=True)
|
order.save(ignore_permissions=True)
|
||||||
|
|
||||||
jingrow.db.commit()
|
jingrow.db.commit()
|
||||||
@ -493,9 +488,4 @@ def create_server_async(order_name):
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
jingrow.log_error("服务器创建失败", f"订单 {order_name}: {str(e)}")
|
jingrow.log_error("服务器创建失败", f"订单 {order_name}: {str(e)}")
|
||||||
# 更新订单状态为失败
|
|
||||||
try:
|
|
||||||
jingrow.db.set_value("Order", order_name, "status", "创建失败")
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
raise e
|
raise e
|
||||||
@ -9,19 +9,21 @@
|
|||||||
"team",
|
"team",
|
||||||
"column_break_4",
|
"column_break_4",
|
||||||
"status",
|
"status",
|
||||||
"plan",
|
"order_id",
|
||||||
"server_section",
|
"server_section",
|
||||||
"instance_id",
|
"instance_id",
|
||||||
"cpu",
|
"cpu",
|
||||||
"disk_size",
|
"disk_size",
|
||||||
"region",
|
"region",
|
||||||
"system_image",
|
"system_image",
|
||||||
|
"planid",
|
||||||
"column_break_aliyun",
|
"column_break_aliyun",
|
||||||
"end_date",
|
"end_date",
|
||||||
"memory",
|
"memory",
|
||||||
"bandwidth",
|
"bandwidth",
|
||||||
"ip",
|
"ip",
|
||||||
"running_status",
|
"running_status",
|
||||||
|
"period",
|
||||||
"ssh_section",
|
"ssh_section",
|
||||||
"ssh_user",
|
"ssh_user",
|
||||||
"ssh_port",
|
"ssh_port",
|
||||||
@ -55,12 +57,6 @@
|
|||||||
"label": "团队",
|
"label": "团队",
|
||||||
"options": "Team"
|
"options": "Team"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname": "plan",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "计划",
|
|
||||||
"options": "Server Plan"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fetch_from": "virtual_machine.public_ip_address",
|
"fetch_from": "virtual_machine.public_ip_address",
|
||||||
"fieldname": "ip",
|
"fieldname": "ip",
|
||||||
@ -166,11 +162,31 @@
|
|||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "运行状态",
|
"label": "运行状态",
|
||||||
"read_only": 1
|
"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,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2025-07-26 13:27:00.795541",
|
"modified": "2025-07-27 22:04:39.820405",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Jcloud",
|
"module": "Jcloud",
|
||||||
"name": "Jsite Server",
|
"name": "Jsite Server",
|
||||||
|
|||||||
@ -21,7 +21,9 @@ class JsiteServer(Document):
|
|||||||
instance_id: DF.Data | None
|
instance_id: DF.Data | None
|
||||||
ip: DF.Data | None
|
ip: DF.Data | None
|
||||||
memory: 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
|
region: DF.Data | None
|
||||||
root_public_key: DF.Code | None
|
root_public_key: DF.Code | None
|
||||||
running_status: DF.Data | None
|
running_status: DF.Data | None
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user