|
|
@@ -2309,12 +2309,23 @@ def get_descendants(parent_id):
|
|
|
conn = get_db_connection()
|
|
|
try:
|
|
|
with conn.cursor() as cursor:
|
|
|
+ # 先获取父节点名字(用于"入继至xx"标注)
|
|
|
+ cursor.execute(
|
|
|
+ "SELECT simplified_name, name FROM family_member_info WHERE id = %s",
|
|
|
+ (parent_id,)
|
|
|
+ )
|
|
|
+ parent_row = cursor.fetchone()
|
|
|
+ parent_display = (parent_row.get('simplified_name') or parent_row.get('name') or '') if parent_row else ''
|
|
|
+
|
|
|
if excluded_list:
|
|
|
- # Build query with exclusion
|
|
|
placeholders = ', '.join(['%s'] * len(excluded_list))
|
|
|
cursor.execute(f"""
|
|
|
- SELECT c.id, c.name, c.simplified_name, c.name_word, c.name_word_generation, c.former_name, c.childhood_name,
|
|
|
- EXISTS(SELECT 1 FROM family_relation_info WHERE parent_mid = c.id AND relation_type IN (1, 2)) as has_children
|
|
|
+ SELECT c.id, c.name, c.simplified_name, c.name_word, c.name_word_generation,
|
|
|
+ c.former_name, c.childhood_name,
|
|
|
+ r.sub_relation_type,
|
|
|
+ COALESCE(r.child_order, 99999) AS child_order,
|
|
|
+ EXISTS(SELECT 1 FROM family_relation_info
|
|
|
+ WHERE parent_mid = c.id AND relation_type IN (1, 2)) as has_children
|
|
|
FROM family_relation_info r
|
|
|
JOIN family_member_info c ON r.child_mid = c.id
|
|
|
WHERE r.parent_mid = %s AND r.relation_type IN (1, 2) AND c.id NOT IN ({placeholders})
|
|
|
@@ -2323,20 +2334,43 @@ def get_descendants(parent_id):
|
|
|
""", (parent_id,) + tuple(excluded_list))
|
|
|
else:
|
|
|
cursor.execute("""
|
|
|
- SELECT c.id, c.name, c.simplified_name, c.name_word, c.name_word_generation, c.former_name, c.childhood_name,
|
|
|
- EXISTS(SELECT 1 FROM family_relation_info WHERE parent_mid = c.id AND relation_type IN (1, 2)) as has_children
|
|
|
+ SELECT c.id, c.name, c.simplified_name, c.name_word, c.name_word_generation,
|
|
|
+ c.former_name, c.childhood_name,
|
|
|
+ r.sub_relation_type,
|
|
|
+ COALESCE(r.child_order, 99999) AS child_order,
|
|
|
+ EXISTS(SELECT 1 FROM family_relation_info
|
|
|
+ WHERE parent_mid = c.id AND relation_type IN (1, 2)) as has_children
|
|
|
FROM family_relation_info r
|
|
|
JOIN family_member_info c ON r.child_mid = c.id
|
|
|
WHERE r.parent_mid = %s AND r.relation_type IN (1, 2)
|
|
|
ORDER BY COALESCE(r.child_order, 99999), c.id
|
|
|
LIMIT 20
|
|
|
""", (parent_id,))
|
|
|
-
|
|
|
+
|
|
|
children = cursor.fetchall()
|
|
|
-
|
|
|
+
|
|
|
+ # 为入继子女生成 adoption_label
|
|
|
for child in children:
|
|
|
child['children'] = []
|
|
|
-
|
|
|
+ if child.get('sub_relation_type') == 3:
|
|
|
+ # 查亲生父(sub_type=2 优先,否则取 sub_type=0)
|
|
|
+ cursor.execute("""
|
|
|
+ SELECT p.simplified_name, p.name
|
|
|
+ FROM family_relation_info r
|
|
|
+ JOIN family_member_info p ON r.parent_mid = p.id
|
|
|
+ WHERE r.child_mid = %s AND r.sub_relation_type != 3
|
|
|
+ ORDER BY r.sub_relation_type DESC
|
|
|
+ LIMIT 1
|
|
|
+ """, (child['id'],))
|
|
|
+ bio_p = cursor.fetchone()
|
|
|
+ bio_name = (bio_p['simplified_name'] or bio_p['name']) if bio_p else None
|
|
|
+ if bio_name and parent_display:
|
|
|
+ child['adoption_label'] = f"出继自{bio_name},入继至{parent_display}"
|
|
|
+ elif bio_name:
|
|
|
+ child['adoption_label'] = f"出继自{bio_name}"
|
|
|
+ else:
|
|
|
+ child['adoption_label'] = "出继"
|
|
|
+
|
|
|
return jsonify({"success": True, "children": children})
|
|
|
finally:
|
|
|
conn.close()
|