diff --git a/jcloud/api/aliyun_server_light.py b/jcloud/api/aliyun_server_light.py index f384fe5..fbb0a48 100644 --- a/jcloud/api/aliyun_server_light.py +++ b/jcloud/api/aliyun_server_light.py @@ -882,6 +882,22 @@ def create_server_order(**kwargs): # 生成订单号 order_id = datetime.now().strftime('%Y%m%d%H%M%S%f')[:-3] + ''.join(random.choices('0123456789', k=6)) + # 构建业务参数 + biz_params = { + "plan_id": plan_id, + "image_id": image_id, + "period": period, + "region_id": region_id, + "monthly_price": monthly_price, + "total_amount": total_amount, + "plan_info": { + "core": selected_plan.get('core'), + "memory": selected_plan.get('memory'), + "disk_size": selected_plan.get('disk_size'), + "bandwidth": selected_plan.get('bandwidth') + } + } + # 创建订单记录 order = jingrow.get_pg({ "pagetype": "Order", @@ -891,33 +907,14 @@ 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}个月" + "description": f"{selected_plan.get('core')}核/{selected_plan.get('memory')}GB/{selected_plan.get('disk_size')}GB, {period}个月", + "biz_params": json.dumps(biz_params, ensure_ascii=False) }) order.insert(ignore_permissions=True) - # 创建服务器记录 - server = jingrow.get_pg({ - "pagetype": "Jsite Server", - "team": team.name, - "order_id": order_id, - "status": "Pending", - "region": region_id, - "image_id": 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, - "plan_price": monthly_price, - "cpu": selected_plan.get('core'), - "memory": selected_plan.get('memory'), - "disk_size": selected_plan.get('disk_size'), - "bandwidth": selected_plan.get('bandwidth') - }) - server.insert(ignore_permissions=True) - jingrow.db.commit() - return {"success": True, "order": order.as_dict(), "server": server.as_dict()} + return {"success": True, "order": order.as_dict()} except Exception as e: jingrow.log_error("创建服务器订单失败", str(e)) @@ -953,6 +950,17 @@ def create_server_renew_order(**kwargs): # 生成唯一订单号 order_id = datetime.now().strftime('%Y%m%d%H%M%S%f')[:-3] + ''.join(random.choices('0123456789', k=6)) + # 构建业务参数 + biz_params = { + "server": server, + "renewal_months": renewal_months, + "plan_price": plan_price, + "total_amount": total_amount, + "instance_id": server_pg.instance_id, + "region_id": server_pg.region, + "plan_id": server_pg.planid + } + # 创建订单记录 order = jingrow.get_pg({ "pagetype": "Order", @@ -962,7 +970,8 @@ def create_server_renew_order(**kwargs): "status": "待支付", "total_amount": total_amount, "title": server_pg.instance_id, - "description": str(renewal_months) # 存储续费月数 + "description": str(renewal_months), # 存储续费月数 + "biz_params": json.dumps(biz_params, ensure_ascii=False) }) order.insert(ignore_permissions=True) @@ -1057,6 +1066,25 @@ def create_server_upgrade_order(**kwargs): # 生成唯一订单号 order_id = datetime.now().strftime('%Y%m%d%H%M%S%f')[:-3] + ''.join(random.choices('0123456789', k=6)) + # 构建业务参数 + biz_params = { + "server": server, + "new_plan_id": new_plan_id, + "current_plan_price": current_plan_price, + "new_plan_price": new_plan_price, + "remaining_days": remaining_days, + "upgrade_amount": upgrade_amount, + "instance_id": server_pg.instance_id, + "region_id": server_pg.region, + "current_plan_id": server_pg.planid, + "new_plan_info": { + "core": new_plan.get('core'), + "memory": new_plan.get('memory'), + "disk_size": new_plan.get('disk_size'), + "bandwidth": new_plan.get('bandwidth') + } + } + # 创建订单记录 order = jingrow.get_pg({ "pagetype": "Order", @@ -1066,7 +1094,8 @@ def create_server_upgrade_order(**kwargs): "status": "待支付", "total_amount": upgrade_amount, "title": server_pg.instance_id, - "description": new_plan_id # 存储新套餐ID + "description": new_plan_id, # 存储新套餐ID + "biz_params": json.dumps(biz_params, ensure_ascii=False) }) order.insert(ignore_permissions=True) @@ -1097,18 +1126,24 @@ def renew_server(order_name): if not order: raise Exception("订单不存在") - # 从订单中获取信息 - instance_id = order.title # 实例ID - renewal_months = int(order.description) # 续费月数 + # 从biz_params中读取业务参数 + biz_params = json.loads(order.biz_params) if order.biz_params else {} + server_name = biz_params.get("server") + renewal_months = biz_params.get("renewal_months", 1) + instance_id = biz_params.get("instance_id") + region_id = biz_params.get("region_id", "cn-shanghai") - # 查找服务器记录获取区域信息 - server = jingrow.get_pg("Jsite Server", {"instance_id": instance_id}) + if not server_name or not instance_id: + raise Exception("订单中缺少必要的服务器信息") + + # 查找服务器记录 + server = jingrow.get_pg("Jsite Server", server_name) if not server: raise Exception("找不到对应的服务器记录") # 调用阿里云API续费 manager = _get_manager() - result = manager.renew_instance(instance_id, renewal_months, server.region) + result = manager.renew_instance(instance_id, renewal_months, region_id) if not result or not result.get('success'): raise Exception(f"阿里云续费失败: {result.get('message', '未知错误')}") @@ -1136,17 +1171,23 @@ def upgrade_server(order_name): if not order: raise Exception("订单不存在") - # 从订单中获取信息 - instance_id = order.title # 实例ID - new_plan_id = order.description # 新套餐ID + # 从biz_params中读取业务参数 + biz_params = json.loads(order.biz_params) if order.biz_params else {} + server_name = biz_params.get("server") + new_plan_id = biz_params.get("new_plan_id") + instance_id = biz_params.get("instance_id") + region_id = biz_params.get("region_id", "cn-shanghai") - # 查找服务器记录获取区域信息 - server = jingrow.get_pg("Jsite Server", {"instance_id": instance_id}) + if not server_name or not new_plan_id or not instance_id: + raise Exception("订单中缺少必要的服务器升级信息") + + # 查找服务器记录 + server = jingrow.get_pg("Jsite Server", server_name) if not server: raise Exception("找不到对应的服务器记录") # 调用阿里云API升级实例 - result = upgrade_aliyun_instance(instance_id, new_plan_id, server.region) + result = upgrade_aliyun_instance(instance_id, new_plan_id, region_id) # 打印result到后台日志 jingrow.log_error("阿里云升级实例结果", f"订单 {order_name} 的升级结果: {result}") @@ -1154,6 +1195,17 @@ def upgrade_server(order_name): if not result or not result.get('success'): raise Exception(f"阿里云升级失败: {result.get('message', '未知错误')}") + # 更新服务器记录中的套餐信息 + new_plan_info = biz_params.get("new_plan_info", {}) + if new_plan_info: + server.planid = new_plan_id + server.cpu = new_plan_info.get("core") + server.memory = new_plan_info.get("memory") + server.disk_size = new_plan_info.get("disk_size") + server.bandwidth = new_plan_info.get("bandwidth") + server.plan_price = biz_params.get("new_plan_price", 0) + server.save(ignore_permissions=True) + # 更新订单状态 order.status = "交易成功" order.save(ignore_permissions=True) @@ -1181,16 +1233,17 @@ def create_aliyun_server(order_name): if not order: raise Exception("订单不存在") - # 查找对应的服务器记录(通过订单ID) - server = jingrow.get_pg("Jsite Server", {"order_id": order.order_id}) - if not server: - raise Exception("找不到对应的服务器记录") + # 从biz_params中读取业务参数 + biz_params = json.loads(order.biz_params) if order.biz_params else {} + plan_id = biz_params.get("plan_id") + image_id = biz_params.get("image_id") + period = biz_params.get("period", 1) + region_id = biz_params.get("region_id", "cn-shanghai") + monthly_price = biz_params.get("monthly_price", 0) + plan_info = biz_params.get("plan_info", {}) - # 从服务器记录中获取配置信息 - region_id = server.region - image_id = server.image_id or 'e9363571cf2444aba422b17470285465' - plan_id = server.planid or 'swas.s.c2m1s30b1.linux' - period = server.period or 1 + if not plan_id or not image_id: + raise Exception("订单中缺少必要的服务器配置信息") # 调用阿里云API创建实例 result = create_aliyun_instance(plan_id, image_id, period, region_id) @@ -1204,10 +1257,26 @@ def create_aliyun_server(order_name): # 阿里云API返回的是instance_ids数组,取第一个实例ID instance_id = result['data']['instance_ids'][0] - # 更新服务器记录状态 - server.status = "Running" - server.instance_id = instance_id - server.save(ignore_permissions=True) + # 创建本地服务器记录 + server = jingrow.get_pg({ + "pagetype": "Jsite Server", + "team": order.team, + "order_id": order.order_id, + "status": "Running", + "instance_id": instance_id, + "region": region_id, + "image_id": image_id, + "end_date": jingrow.utils.add_months(jingrow.utils.nowdate(), period), + "title": f"{region_id} - {plan_info.get('core', '')}核/{plan_info.get('memory', '')}GB", + "planid": plan_id, + "period": period, + "plan_price": monthly_price, + "cpu": plan_info.get('core'), + "memory": plan_info.get('memory'), + "disk_size": plan_info.get('disk_size'), + "bandwidth": plan_info.get('bandwidth') + }) + server.insert(ignore_permissions=True) # 更新订单状态 order.status = "交易成功"