main #2

Merged
jingrow merged 250 commits from main into v1 2026-01-13 22:45:50 +08:00
4 changed files with 79 additions and 56 deletions
Showing only changes of commit e9f327af93 - Show all commits

View File

@ -136,10 +136,10 @@
</div>
<h3 class="text-xl font-medium text-gray-900 mb-2">支付成功</h3>
<p class="text-gray-600 mb-4">
您的订单已支付成功服务器正在创建中创建并启动需要 3-5 分钟请耐心等待
您的订单已支付成功服务器记录已创建服务器正在后台创建中创建并启动需要 3-5 分钟请耐心等待
</p>
<p class="text-gray-500 text-sm">
创建完成后将收到通知可以在服务器列表中查看状态
您可以在服务器列表中查看服务器状态创建完成后状态将更新为"Running"
</p>
</div>
@ -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;
}

View File

@ -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

View File

@ -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",

View File

@ -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