From 22740d5bf07329334ef4c0e8ef13e6774b5deff9 Mon Sep 17 00:00:00 2001 From: jingrow Date: Tue, 5 Aug 2025 04:24:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=9F=9F=E5=90=8D=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=97=B6=E5=A2=9E=E5=8A=A0=E6=9B=B4=E6=96=B0=E6=89=80?= =?UTF-8?q?=E6=9C=89=E8=80=85=E6=A8=A1=E6=9D=BF=E5=B9=B6=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jcloud/api/domain_west.py | 184 +++++++++++++++++++++++++++++++++++++- 1 file changed, 180 insertions(+), 4 deletions(-) diff --git a/jcloud/api/domain_west.py b/jcloud/api/domain_west.py index 991e9ff..c9af74c 100644 --- a/jcloud/api/domain_west.py +++ b/jcloud/api/domain_west.py @@ -2646,11 +2646,182 @@ def sync_domain_info_from_west(**data): real_data = real_info_response.get("data", {}) if real_info_response.get("result") == 200 else {} + # 获取当前域名记录的团队信息 + domain_pg = jingrow.get_pg("Jsite Domain", {"domain": domain}) + if not domain_pg: + return {"status": "error", "message": "本地未找到该域名记录"} + + # 从域名记录获取团队信息 + team_name = domain_pg.team + if not team_name: + return {"status": "error", "message": "域名记录中未找到团队信息"} + + team = jingrow.get_pg("Team", team_name) + if not team: + return {"status": "error", "message": "未找到团队信息"} + + # 同步Domain Owner信息 + domain_owner_name = None + if real_data: + # 从实名信息中提取c_sysid和所有者信息 + c_sysid = real_data.get("c_sysid") + owner_info = real_data.get("owner", {}) + + # 添加调试日志 + jingrow.log_error(f"Domain Owner同步调试", f"域名: {domain}, c_sysid: {c_sysid}, owner_info: {owner_info}") + jingrow.log_error(f"real_data完整信息", f"real_data: {real_data}") + + if c_sysid: + # 如果owner_info为空,使用real_data中的所有者字段 + if not owner_info: + owner_info = real_data + + if owner_info: + # 根据c_sysid查找是否已存在Domain Owner - 只按c_sysid查找,不限制团队 + existing_owners = jingrow.get_all( + "Domain Owner", + {"c_sysid": c_sysid}, + ["name", "team"] + ) + + # 添加调试日志 + jingrow.log_error(f"Domain Owner查找结果", f"c_sysid: {c_sysid}, 域名团队: {team.name}, 找到记录数: {len(existing_owners)}") + if existing_owners: + jingrow.log_error(f"找到的Domain Owner", f"名称: {existing_owners[0].name}, 原团队: {existing_owners[0].team or '空'}") + else: + jingrow.log_error(f"未找到Domain Owner", f"将创建新的") + + if existing_owners: + # 更新已存在的Domain Owner + domain_owner_name = existing_owners[0].name + existing_team = existing_owners[0].team + jingrow.log_error(f"Domain Owner更新逻辑", f"找到现有记录: {domain_owner_name}, 原团队: {existing_team}, 当前团队: {team.name}") + try: + domain_owner_pg = jingrow.get_pg("Domain Owner", domain_owner_name) + if domain_owner_pg: + # 更新团队信息(如果不同或为空) + if not domain_owner_pg.team or domain_owner_pg.team != team.name: + old_team = domain_owner_pg.team or "空" + jingrow.log_error(f"Domain Owner团队更新", f"从 {old_team} 更新为 {team.name}") + domain_owner_pg.team = team.name + + # 更新所有者信息 + owner_name = owner_info.get("dom_org_m") or owner_info.get("dom_ln_m", "") + owner_info.get("dom_fn_m", "") + domain_owner_pg.fullname = owner_name + domain_owner_pg.r_status = 1 # 已实名认证 + + # 根据类型更新不同字段 + c_regtype = "E" if owner_info.get("dom_org_m") else "I" + domain_owner_pg.c_regtype = c_regtype + + if c_regtype == "E": # 企业 + domain_owner_pg.c_org_m = owner_info.get("dom_org_m", "") + domain_owner_pg.c_org = owner_info.get("dom_org", "") + domain_owner_pg.c_ln_m = owner_info.get("dom_ln_m", "") + domain_owner_pg.c_fn_m = owner_info.get("dom_fn_m", "") + domain_owner_pg.c_ln = owner_info.get("dom_ln", "") + domain_owner_pg.c_fn = owner_info.get("dom_fn", "") + domain_owner_pg.title = owner_info.get("dom_org_m", "") + else: # 个人 + domain_owner_pg.c_ln_m = owner_info.get("dom_ln_m", "") + domain_owner_pg.c_fn_m = owner_info.get("dom_fn_m", "") + domain_owner_pg.c_ln = owner_info.get("dom_ln", "") + domain_owner_pg.c_fn = owner_info.get("dom_fn", "") + domain_owner_pg.title = owner_info.get("dom_ln_m", "") + owner_info.get("dom_fn_m", "") + + # 更新地址信息 + domain_owner_pg.c_st_m = owner_info.get("dom_st_m", "") + domain_owner_pg.c_ct_m = owner_info.get("dom_ct_m", "") + domain_owner_pg.c_adr_m = owner_info.get("dom_adr_m", "") + domain_owner_pg.c_pc = owner_info.get("dom_pc", "") + domain_owner_pg.c_st = owner_info.get("dom_st", "") + domain_owner_pg.c_ct = owner_info.get("dom_ct", "") + domain_owner_pg.c_adr = owner_info.get("dom_adr", "") + domain_owner_pg.c_em = owner_info.get("dom_em", "") + domain_owner_pg.c_ph = owner_info.get("dom_ph", "") + domain_owner_pg.c_ph_type = "0" # 默认为手机 + + domain_owner_pg.save(ignore_permissions=True) + jingrow.log_error(f"Domain Owner更新成功", f"名称: {domain_owner_name}") + except Exception as e: + jingrow.log_error(f"更新Domain Owner失败", f"域名: {domain}, c_sysid: {c_sysid}, 错误: {str(e)}") + else: + # 创建新的Domain Owner + jingrow.log_error(f"Domain Owner创建逻辑", f"未找到现有记录,将创建新记录,c_sysid: {c_sysid}, 域名团队: {team.name}") + try: + # 判断所有者类型(个人或企业) + c_regtype = "E" if owner_info.get("dom_org_m") else "I" + + # 生成所有者名称 + owner_name = owner_info.get("dom_org_m") or owner_info.get("dom_ln_m", "") + owner_info.get("dom_fn_m", "") + + # 构建Domain Owner数据 + owner_data = { + "pagetype": "Domain Owner", + "team": team.name, # 使用当前团队 + "c_sysid": c_sysid, + "c_regtype": c_regtype, + "fullname": owner_name, + "c_co": "CN", + "cocode": "+86", + "reg_contact_type": "cg", + "r_status": 1, # 已实名认证 + "title": owner_name + } + + # 根据类型设置不同字段 + if c_regtype == "E": # 企业 + owner_data.update({ + "c_org_m": owner_info.get("dom_org_m", ""), + "c_org": owner_info.get("dom_org", ""), + "c_ln_m": owner_info.get("dom_ln_m", ""), + "c_fn_m": owner_info.get("dom_fn_m", ""), + "c_ln": owner_info.get("dom_ln", ""), + "c_fn": owner_info.get("dom_fn", ""), + "title": owner_info.get("dom_org_m", "") + }) + else: # 个人 + owner_data.update({ + "c_ln_m": owner_info.get("dom_ln_m", ""), + "c_fn_m": owner_info.get("dom_fn_m", ""), + "c_ln": owner_info.get("dom_ln", ""), + "c_fn": owner_info.get("dom_fn", ""), + "title": owner_info.get("dom_ln_m", "") + owner_info.get("dom_fn_m", "") + }) + + # 设置地址信息 + owner_data.update({ + "c_st_m": owner_info.get("dom_st_m", ""), + "c_ct_m": owner_info.get("dom_ct_m", ""), + "c_adr_m": owner_info.get("dom_adr_m", ""), + "c_pc": owner_info.get("dom_pc", ""), + "c_st": owner_info.get("dom_st", ""), + "c_ct": owner_info.get("dom_ct", ""), + "c_adr": owner_info.get("dom_adr", ""), + "c_em": owner_info.get("dom_em", ""), + "c_ph": owner_info.get("dom_ph", ""), + "c_ph_type": "0" # 默认为手机 + }) + + # 设置证件信息(如果有) + if owner_info.get("dom_idtype"): + owner_data["c_idtype_gswl"] = owner_info.get("dom_idtype") + if owner_info.get("dom_idnum"): + owner_data["c_idnum_gswl"] = owner_info.get("dom_idnum") + + # 创建Domain Owner记录 + domain_owner_pg = jingrow.get_pg(owner_data) + domain_owner_pg.insert(ignore_permissions=True) + domain_owner_name = domain_owner_pg.name + jingrow.log_error(f"Domain Owner创建成功", f"名称: {domain_owner_name}, c_sysid: {c_sysid}") + + except Exception as e: + jingrow.log_error(f"创建Domain Owner失败", f"域名: {domain}, c_sysid: {c_sysid}, 错误: {str(e)}") + domain_owner_name = None + # 更新本地域名记录 try: - domain_pg = jingrow.get_pg("Jsite Domain", {"domain": domain}) - if not domain_pg: - return {"status": "error", "message": "本地未找到该域名记录"} + # domain_pg 已经在前面获取过了,直接使用 # 更新基本信息 - 从实名信息中获取 if real_data: @@ -2665,6 +2836,10 @@ def sync_domain_info_from_west(**data): domain_pg.dns_host4 = real_data.get("dns_host4", "") domain_pg.dns_host5 = real_data.get("dns_host5", "") domain_pg.dns_host6 = real_data.get("dns_host6", "") + + # 更新Domain Owner + if domain_owner_name: + domain_pg.domain_owner = domain_owner_name # 更新DNS解析记录 if dns_data and "items" in dns_data: @@ -2699,7 +2874,8 @@ def sync_domain_info_from_west(**data): "message": "域名信息同步成功", "data": { "dns_records": dns_data, - "real_info": real_data + "real_info": real_data, + "domain_owner": domain_owner_name } }