|
|
@@ -1702,73 +1702,106 @@ def search_member():
|
|
|
keyword = data.get('keyword', '').strip()
|
|
|
search_type = data.get('search_type', 'name') # name | former_name | childhood_name | name_word
|
|
|
|
|
|
- if not keyword:
|
|
|
- return jsonify({"success": False, "message": "请输入搜索关键词"})
|
|
|
-
|
|
|
conn = get_db_connection()
|
|
|
try:
|
|
|
with conn.cursor() as cursor:
|
|
|
- like = f'%{keyword}%'
|
|
|
- # 根据搜索类型构建 WHERE 子句
|
|
|
- if search_type == 'former_name':
|
|
|
- where_clause = "fmi.former_name LIKE %s"
|
|
|
- where_params = (like,)
|
|
|
- order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
- elif search_type == 'childhood_name':
|
|
|
- where_clause = "fmi.childhood_name LIKE %s"
|
|
|
- where_params = (like,)
|
|
|
- order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
- elif search_type == 'name_word':
|
|
|
- where_clause = "fmi.name_word LIKE %s"
|
|
|
- where_params = (like,)
|
|
|
- order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
- else: # name(默认:姓名搜索)
|
|
|
- where_clause = "fmi.name LIKE %s OR fmi.simplified_name LIKE %s OR fmi.former_name LIKE %s"
|
|
|
- where_params = (like, like, like)
|
|
|
- order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
+ if keyword:
|
|
|
+ like = f'%{keyword}%'
|
|
|
+ # 根据搜索类型构建 WHERE 子句
|
|
|
+ if search_type == 'former_name':
|
|
|
+ where_clause = "fmi.former_name LIKE %s"
|
|
|
+ where_params = (like,)
|
|
|
+ order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
+ elif search_type == 'childhood_name':
|
|
|
+ where_clause = "fmi.childhood_name LIKE %s"
|
|
|
+ where_params = (like,)
|
|
|
+ order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
+ elif search_type == 'name_word':
|
|
|
+ where_clause = "fmi.name_word LIKE %s"
|
|
|
+ where_params = (like,)
|
|
|
+ order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
+ else: # name(默认:姓名搜索)
|
|
|
+ where_clause = "fmi.name LIKE %s OR fmi.simplified_name LIKE %s OR fmi.former_name LIKE %s"
|
|
|
+ where_params = (like, like, like)
|
|
|
+ order_params = (keyword, keyword, f'{keyword}%', f'{keyword}%')
|
|
|
|
|
|
- cursor.execute(f"""
|
|
|
- SELECT
|
|
|
- fmi.id,
|
|
|
- fmi.name,
|
|
|
- fmi.simplified_name,
|
|
|
- fmi.name_word_generation,
|
|
|
- fmi.former_name,
|
|
|
- fmi.childhood_name,
|
|
|
- fmi.name_word,
|
|
|
- -- 父亲:优先非入继父(sub_type != 3),取第一条
|
|
|
- (SELECT p.name FROM family_relation_info r
|
|
|
- JOIN family_member_info p ON r.parent_mid = p.id
|
|
|
- WHERE r.child_mid = fmi.id AND r.relation_type = 1
|
|
|
- ORDER BY CASE WHEN COALESCE(r.sub_relation_type,0)=3 THEN 1 ELSE 0 END, r.id
|
|
|
- LIMIT 1) AS father_name,
|
|
|
- (SELECT p.simplified_name FROM family_relation_info r
|
|
|
- JOIN family_member_info p ON r.parent_mid = p.id
|
|
|
- WHERE r.child_mid = fmi.id AND r.relation_type = 1
|
|
|
- ORDER BY CASE WHEN COALESCE(r.sub_relation_type,0)=3 THEN 1 ELSE 0 END, r.id
|
|
|
- LIMIT 1) AS father_simplified_name,
|
|
|
- -- 出继标注
|
|
|
- (SELECT CONCAT(
|
|
|
- '出继自',
|
|
|
- COALESCE(pbio.simplified_name, pbio.name, '?'),
|
|
|
- ',入继至',
|
|
|
- COALESCE(padopt.simplified_name, padopt.name, '?'))
|
|
|
- FROM family_relation_info rbio
|
|
|
- JOIN family_member_info pbio ON rbio.parent_mid = pbio.id
|
|
|
- JOIN family_relation_info radopt ON radopt.child_mid = fmi.id AND radopt.sub_relation_type = 3
|
|
|
- JOIN family_member_info padopt ON radopt.parent_mid = padopt.id
|
|
|
- WHERE rbio.child_mid = fmi.id AND rbio.sub_relation_type = 2
|
|
|
- LIMIT 1) AS adoption_note
|
|
|
- FROM family_member_info fmi
|
|
|
- WHERE {where_clause}
|
|
|
- GROUP BY fmi.id
|
|
|
- ORDER BY
|
|
|
- CASE WHEN fmi.name = %s THEN 1
|
|
|
- WHEN fmi.simplified_name = %s THEN 2
|
|
|
- WHEN fmi.name LIKE %s THEN 3
|
|
|
- WHEN fmi.simplified_name LIKE %s THEN 4
|
|
|
- ELSE 5 END
|
|
|
- """, (*where_params, *order_params))
|
|
|
+ cursor.execute(f"""
|
|
|
+ SELECT
|
|
|
+ fmi.id,
|
|
|
+ fmi.name,
|
|
|
+ fmi.simplified_name,
|
|
|
+ fmi.name_word_generation,
|
|
|
+ fmi.former_name,
|
|
|
+ fmi.childhood_name,
|
|
|
+ fmi.name_word,
|
|
|
+ -- 父亲:优先非入继父(sub_type != 3),取第一条
|
|
|
+ (SELECT p.name FROM family_relation_info r
|
|
|
+ JOIN family_member_info p ON r.parent_mid = p.id
|
|
|
+ WHERE r.child_mid = fmi.id AND r.relation_type = 1
|
|
|
+ ORDER BY CASE WHEN COALESCE(r.sub_relation_type,0)=3 THEN 1 ELSE 0 END, r.id
|
|
|
+ LIMIT 1) AS father_name,
|
|
|
+ (SELECT p.simplified_name FROM family_relation_info r
|
|
|
+ JOIN family_member_info p ON r.parent_mid = p.id
|
|
|
+ WHERE r.child_mid = fmi.id AND r.relation_type = 1
|
|
|
+ ORDER BY CASE WHEN COALESCE(r.sub_relation_type,0)=3 THEN 1 ELSE 0 END, r.id
|
|
|
+ LIMIT 1) AS father_simplified_name,
|
|
|
+ -- 出继标注
|
|
|
+ (SELECT CONCAT(
|
|
|
+ '出继自',
|
|
|
+ COALESCE(pbio.simplified_name, pbio.name, '?'),
|
|
|
+ ',入继至',
|
|
|
+ COALESCE(padopt.simplified_name, padopt.name, '?'))
|
|
|
+ FROM family_relation_info rbio
|
|
|
+ JOIN family_member_info pbio ON rbio.parent_mid = pbio.id
|
|
|
+ JOIN family_relation_info radopt ON radopt.child_mid = fmi.id AND radopt.sub_relation_type = 3
|
|
|
+ JOIN family_member_info padopt ON radopt.parent_mid = padopt.id
|
|
|
+ WHERE rbio.child_mid = fmi.id AND rbio.sub_relation_type = 2
|
|
|
+ LIMIT 1) AS adoption_note
|
|
|
+ FROM family_member_info fmi
|
|
|
+ WHERE {where_clause}
|
|
|
+ GROUP BY fmi.id
|
|
|
+ ORDER BY
|
|
|
+ CASE WHEN fmi.name = %s THEN 1
|
|
|
+ WHEN fmi.simplified_name = %s THEN 2
|
|
|
+ WHEN fmi.name LIKE %s THEN 3
|
|
|
+ WHEN fmi.simplified_name LIKE %s THEN 4
|
|
|
+ ELSE 5 END
|
|
|
+ """, (*where_params, *order_params))
|
|
|
+ else:
|
|
|
+ cursor.execute("""
|
|
|
+ SELECT
|
|
|
+ fmi.id,
|
|
|
+ fmi.name,
|
|
|
+ fmi.simplified_name,
|
|
|
+ fmi.name_word_generation,
|
|
|
+ fmi.former_name,
|
|
|
+ fmi.childhood_name,
|
|
|
+ fmi.name_word,
|
|
|
+ (SELECT p.name FROM family_relation_info r
|
|
|
+ JOIN family_member_info p ON r.parent_mid = p.id
|
|
|
+ WHERE r.child_mid = fmi.id AND r.relation_type = 1
|
|
|
+ ORDER BY CASE WHEN COALESCE(r.sub_relation_type,0)=3 THEN 1 ELSE 0 END, r.id
|
|
|
+ LIMIT 1) AS father_name,
|
|
|
+ (SELECT p.simplified_name FROM family_relation_info r
|
|
|
+ JOIN family_member_info p ON r.parent_mid = p.id
|
|
|
+ WHERE r.child_mid = fmi.id AND r.relation_type = 1
|
|
|
+ ORDER BY CASE WHEN COALESCE(r.sub_relation_type,0)=3 THEN 1 ELSE 0 END, r.id
|
|
|
+ LIMIT 1) AS father_simplified_name,
|
|
|
+ (SELECT CONCAT(
|
|
|
+ '出继自',
|
|
|
+ COALESCE(pbio.simplified_name, pbio.name, '?'),
|
|
|
+ ',入继至',
|
|
|
+ COALESCE(padopt.simplified_name, padopt.name, '?'))
|
|
|
+ FROM family_relation_info rbio
|
|
|
+ JOIN family_member_info pbio ON rbio.parent_mid = pbio.id
|
|
|
+ JOIN family_relation_info radopt ON radopt.child_mid = fmi.id AND radopt.sub_relation_type = 3
|
|
|
+ JOIN family_member_info padopt ON radopt.parent_mid = padopt.id
|
|
|
+ WHERE rbio.child_mid = fmi.id AND rbio.sub_relation_type = 2
|
|
|
+ LIMIT 1) AS adoption_note
|
|
|
+ FROM family_member_info fmi
|
|
|
+ ORDER BY fmi.name_word_generation ASC, fmi.id ASC
|
|
|
+ LIMIT 30
|
|
|
+ """)
|
|
|
members = cursor.fetchall()
|
|
|
|
|
|
if not members:
|