From 7c9bd63c60e49a2c19652433f0b468ef6e4e3de9 Mon Sep 17 00:00:00 2001 From: yujj128 Date: Tue, 14 Oct 2025 15:47:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E7=AD=94=E7=A4=BA=E4=BE=8B=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0,=E4=BA=BA=E5=91=98=E6=9D=83=E9=99=90=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main_service.py | 4 +++- util/load_ddl_doc.py | 4 ++-- util/q_and_a_dict.py | 41 +++++++++++++++++++++++++++++++++++++-- util/train_ddl.py | 46 ++++++++++++++++++++++---------------------- 4 files changed, 67 insertions(+), 28 deletions(-) diff --git a/main_service.py b/main_service.py index 772715e..5003a3c 100644 --- a/main_service.py +++ b/main_service.py @@ -221,7 +221,9 @@ def run_sql_2(id: str, sql: str): def verify_user(): try: id = request.args.get("user_id") - users = config('ALLOWED_USERS', cast=list, default=[]) + users = config('ALLOWED_USERS', default='') + users = users.split(',') + logger.info(f"allowed users {users}") for user in users: if user == id: return jsonify({"type": "success", "verify": True}) diff --git a/util/load_ddl_doc.py b/util/load_ddl_doc.py index e43e081..5ba028b 100644 --- a/util/load_ddl_doc.py +++ b/util/load_ddl_doc.py @@ -2,8 +2,8 @@ from service.cus_vanna_srevice import CustomVanna from util import train_ddl from util import q_and_a_dict table_ddls = [ - train_ddl.person_ddl_sql,train_ddl.user_status_ddl, - train_ddl.user_attendance_ddl,train_ddl.person_ac_area, + train_ddl.person_database_ddl,train_ddl.person_status_ddl, + train_ddl.person_attendance_ddl,train_ddl.person_ac_area, train_ddl.org_orgs_ddl ] diff --git a/util/q_and_a_dict.py b/util/q_and_a_dict.py index 40837b1..d3be371 100644 --- a/util/q_and_a_dict.py +++ b/util/q_and_a_dict.py @@ -261,6 +261,43 @@ question_and_answer = [ GROUP BY o.name ORDER BY "人数" DESC LIMIT 1000 ''' - } - + }, + { + "question": "数信中心员工年龄段分布图", + "answer": ''' + SELECT + CASE + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 2000 THEN '00后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1990 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 2000 THEN '90后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1980 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 1990 THEN '80后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1970 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 1980 THEN '70后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1960 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 1970 THEN '60后' + ELSE '其他年龄段' + END AS "age_group", + COUNT(*) AS "person_count" + FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p + WHERE "dr" = 0 + AND "birthday" IS NOT NULL + AND "birthday" != '' + AND internal_dept IN ( + SELECT "id" + FROM "IUAP_APDOC_BASEDOC"."org_orgs" + WHERE "parentid" IN ( + SELECT "id" + FROM "IUAP_APDOC_BASEDOC"."org_orgs" + WHERE "name" LIKE '数信中心' + ) + ) + GROUP BY + CASE + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 2000 THEN '00后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1990 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 2000 THEN '90后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1980 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 1990 THEN '80后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1970 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 1980 THEN '70后' + WHEN CAST(SUBSTR("birthday", 1, 4) AS INT) >= 1960 AND CAST(SUBSTR("birthday", 1, 4) AS INT) < 1970 THEN '60后' + ELSE '其他年龄段' + END + ORDER BY "age_group" ASC LIMIT 1000 + ''' + }, ] diff --git a/util/train_ddl.py b/util/train_ddl.py index b238cf8..a57da6f 100644 --- a/util/train_ddl.py +++ b/util/train_ddl.py @@ -1,3 +1,13 @@ +train_document=''' + 语法为达梦数据库语法; + 查询地址,籍贯,公司,单位时,尽量使用like查询; + 查询人员信息时,由于数据表字段过多。只需要展示人员关键信息字段,id,工号,姓名,单位以及用户问题中需要查询的字段; + 表字段信息以及字段枚举信息在values下,注意相关字段枚举值的转换; + 查询单位时,通过orgs表查询,且需要基于parentID查询单位下的子单位; + 查询内部单位时,则可以直接查询人员信息表,通过like模糊查询; + + ''' + person_database_ddl = """ { @@ -116,14 +126,14 @@ person_database_ddl = """ { "name": "internal_dept", "type": "VARCHAR(108)", - "comment": "内部部门", + "comment": "内部部门ID", "role": "dimension", "tags": ["组织信息", "内部架构"] }, { "name": "input_dept", "type": "VARCHAR(108)", - "comment": "录入部门", + "comment": "录入部门ID", "role": "dimension", "tags": ["操作部门", "组织信息"] }, @@ -137,7 +147,7 @@ person_database_ddl = """ { "name": "internal_unit", "type": "VARCHAR(108)", - "comment": "内部单位", + "comment": "内部单位ID", "role": "dimension", "tags": ["组织信息", "内部架构"] }, @@ -163,7 +173,7 @@ person_database_ddl = """ "role": "dimension", "tags": ["主键", "ID标识"] }, - + { "name": "dr", "type": "INT", @@ -189,7 +199,7 @@ person_database_ddl = """ "role": "dimension", "tags": ["租户信息", "系统隔离"] }, - + { "name": "create_time", "type": "DATETIME(39)", @@ -204,8 +214,8 @@ person_database_ddl = """ "role": "dimension", "tags": ["时间信息", "系统记录"] }, - - + + { "name": "to_dept", "type": "VARCHAR(600)", @@ -445,40 +455,31 @@ person_database_ddl = """ { "from": "input_dept", "to_table": "IUAP_APDOC_BASEDOC.org_orgs", - "to_field": "id", + "to_field": ["id","parentid"], "type": "foreign_key", "comment": "关联部门表" }, { "from": "internal_dept", "to_table": "IUAP_APDOC_BASEDOC.org_orgs", - "to_field": "id", + "to_field": ["id","parentid"], "type": "foreign_key", "comment": "关联部门表" }, { "from": "internal_unit", "to_table": "IUAP_APDOC_BASEDOC.org_orgs", - "to_field": "id", + "to_field": ["id","parentid"], "type": "foreign_key", "comment": "关联部门表" }, ], - + "tags": ["人员管理", "人力资源", "审批流程", "基本信息", "工作信息"], } """ -train_document=''' - 语法为达梦数据库语法; - 查询地址,籍贯,公司,单位时,尽量使用like查询; - 查询人员信息时,由于数据表字段过多。只需要展示人员关键信息字段,id,工号,姓名,单位以及用户问题中需要查询的字段; - 表字段信息以及字段枚举信息在values下,注意相关字段枚举值的转换; - 查询单位时,通过orgs表查询,且需要基于parentID查询单位下的子单位; - 查询内部单位时,则可以直接查询人员信息表,通过like模糊查询; - ''' - person_attendance_rule_ddl=''' { "db_name":"YJOA_APPSERVICE_DB", @@ -549,7 +550,7 @@ person_attendance_rule_ddl=''' } ''' -user_status_ddl=''' +person_status_ddl=''' { "db_name":"YJOA_APPSERVICE_DB", "table_name": "t_yj_person_status", @@ -633,7 +634,7 @@ user_status_ddl=''' } ''' -user_attendance_ddl = ''' +person_attendance_ddl = ''' { "db_name": "YJOA_APPSERVICE_DB", "table_name": "t_yj_person_attendance", @@ -919,7 +920,6 @@ person_ac_area = ''' } ''' - org_orgs_ddl = ''' { "db_name":"IUAP_APDOC_BASEDOC",