Kaynağa Gözat

commit 优化

林海 1 gün önce
ebeveyn
işleme
4cb3b69984
1 değiştirilmiş dosya ile 42 ekleme ve 8 silme
  1. 42 8
      app.py

+ 42 - 8
app.py

@@ -2309,12 +2309,23 @@ def get_descendants(parent_id):
     conn = get_db_connection()
     conn = get_db_connection()
     try:
     try:
         with conn.cursor() as cursor:
         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:
             if excluded_list:
-                # Build query with exclusion
                 placeholders = ', '.join(['%s'] * len(excluded_list))
                 placeholders = ', '.join(['%s'] * len(excluded_list))
                 cursor.execute(f"""
                 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
                     FROM family_relation_info r
                     JOIN family_member_info c ON r.child_mid = c.id
                     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})
                     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))
                 """, (parent_id,) + tuple(excluded_list))
             else:
             else:
                 cursor.execute("""
                 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
                     FROM family_relation_info r
                     JOIN family_member_info c ON r.child_mid = c.id
                     JOIN family_member_info c ON r.child_mid = c.id
                     WHERE r.parent_mid = %s AND r.relation_type IN (1, 2)
                     WHERE r.parent_mid = %s AND r.relation_type IN (1, 2)
                     ORDER BY COALESCE(r.child_order, 99999), c.id
                     ORDER BY COALESCE(r.child_order, 99999), c.id
                     LIMIT 20
                     LIMIT 20
                 """, (parent_id,))
                 """, (parent_id,))
-            
+
             children = cursor.fetchall()
             children = cursor.fetchall()
-            
+
+            # 为入继子女生成 adoption_label
             for child in children:
             for child in children:
                 child['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})
             return jsonify({"success": True, "children": children})
     finally:
     finally:
         conn.close()
         conn.close()