Compare commits
5 Commits
a248724c3b
...
d869507c37
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d869507c37 | ||
|
|
775bdac66d | ||
|
|
7c9bd63c60 | ||
|
|
2183c492db | ||
|
|
a915896f3e |
@@ -217,6 +217,24 @@ def run_sql_2(id: str, sql: str):
|
|||||||
return jsonify({"type": "sql_error", "error": str(e)})
|
return jsonify({"type": "sql_error", "error": str(e)})
|
||||||
|
|
||||||
|
|
||||||
|
@app.flask_app.route("/yj_sqlbot/api/v0/verify", methods=["GET"])
|
||||||
|
def verify_user():
|
||||||
|
try:
|
||||||
|
id = request.args.get("user_id")
|
||||||
|
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})
|
||||||
|
else:
|
||||||
|
return jsonify({"type": "success", "verify": False})
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"verify user failed:{e}")
|
||||||
|
return jsonify({"type": "error", "error": str(e)})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
app.run(host='0.0.0.0', port=8084, debug=False)
|
app.run(host='0.0.0.0', port=8084, debug=False)
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ from service.cus_vanna_srevice import CustomVanna
|
|||||||
from util import train_ddl
|
from util import train_ddl
|
||||||
from util import q_and_a_dict
|
from util import q_and_a_dict
|
||||||
table_ddls = [
|
table_ddls = [
|
||||||
train_ddl.person_ddl_sql,train_ddl.user_status_ddl,
|
train_ddl.person_database_ddl,train_ddl.person_status_ddl,
|
||||||
train_ddl.user_attendance_ddl,train_ddl.person_ac_area,
|
train_ddl.person_attendance_ddl,train_ddl.person_ac_area,
|
||||||
train_ddl.org_orgs_ddl
|
train_ddl.org_orgs_ddl
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -214,13 +214,18 @@ question_and_answer = [
|
|||||||
{
|
{
|
||||||
"question": "数信中心下各个处室分别有多少人",
|
"question": "数信中心下各个处室分别有多少人",
|
||||||
"answer": '''
|
"answer": '''
|
||||||
SELECT o.name AS "处室名称", COUNT(p.id) AS "人数"
|
SELECT o.name AS "处室名称", COUNT(p.id) AS "人数"
|
||||||
FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
|
FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
|
||||||
JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id
|
JOIN IUAP_APDOC_BASEDOC.org_orgs o ON p.internal_dept = o.id
|
||||||
WHERE o.parentid IN (SELECT id FROM IUAP_APDOC_BASEDOC.org_orgs WHERE name LIKE '%数信中心%')
|
WHERE p.internal_dept IN (
|
||||||
|
SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
|
||||||
|
START WITH "name" LIKE '%数信中心%'
|
||||||
|
CONNECT BY PRIOR "id" = "parentid"
|
||||||
|
)
|
||||||
AND p.dr = 0
|
AND p.dr = 0
|
||||||
GROUP BY o.name
|
GROUP BY o.name
|
||||||
ORDER BY "人数" DESC LIMIT 1000
|
ORDER BY "人数" DESC
|
||||||
|
LIMIT 1000
|
||||||
'''
|
'''
|
||||||
}, {
|
}, {
|
||||||
"question": "张三9月在林芝工作有多少天",
|
"question": "张三9月在林芝工作有多少天",
|
||||||
@@ -267,6 +272,43 @@ question_and_answer = [
|
|||||||
WHERE ps."status" = '1006'
|
WHERE ps."status" = '1006'
|
||||||
AND ps."date_value" LIKE '2025-09%' LIMIT 1000
|
AND ps."date_value" LIKE '2025-09%' 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"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
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
|
||||||
|
'''
|
||||||
|
},
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
person_ddl_sql = """
|
train_document='''
|
||||||
|
语法为达梦数据库语法;
|
||||||
|
查询地址,籍贯,公司,单位时,尽量使用like查询;
|
||||||
|
查询人员信息时,由于数据表字段过多。只需要展示人员关键信息字段,id,工号,姓名,单位以及用户问题中需要查询的字段;
|
||||||
|
表字段信息以及字段枚举信息在values下,注意相关字段枚举值的转换;
|
||||||
|
查询单位时,通过orgs表查询,且需要基于parentID查询递归查询单位下的子单位;
|
||||||
|
查询内部单位时,则可以直接查询人员信息表,通过like模糊查询;
|
||||||
|
没有明确说明查询外部单位,都默认查询通过orgs查询单位;
|
||||||
|
'''
|
||||||
|
|
||||||
|
person_database_ddl = """
|
||||||
|
|
||||||
{
|
{
|
||||||
"db_name":"YJOA_APPSERVICE_DB",
|
"db_name":"YJOA_APPSERVICE_DB",
|
||||||
@@ -116,14 +126,14 @@ person_ddl_sql = """
|
|||||||
{
|
{
|
||||||
"name": "internal_dept",
|
"name": "internal_dept",
|
||||||
"type": "VARCHAR(108)",
|
"type": "VARCHAR(108)",
|
||||||
"comment": "内部部门",
|
"comment": "内部部门ID",
|
||||||
"role": "dimension",
|
"role": "dimension",
|
||||||
"tags": ["组织信息", "内部架构"]
|
"tags": ["组织信息", "内部架构"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "input_dept",
|
"name": "input_dept",
|
||||||
"type": "VARCHAR(108)",
|
"type": "VARCHAR(108)",
|
||||||
"comment": "录入部门",
|
"comment": "录入部门ID",
|
||||||
"role": "dimension",
|
"role": "dimension",
|
||||||
"tags": ["操作部门", "组织信息"]
|
"tags": ["操作部门", "组织信息"]
|
||||||
},
|
},
|
||||||
@@ -137,7 +147,7 @@ person_ddl_sql = """
|
|||||||
{
|
{
|
||||||
"name": "internal_unit",
|
"name": "internal_unit",
|
||||||
"type": "VARCHAR(108)",
|
"type": "VARCHAR(108)",
|
||||||
"comment": "内部单位",
|
"comment": "内部单位ID",
|
||||||
"role": "dimension",
|
"role": "dimension",
|
||||||
"tags": ["组织信息", "内部架构"]
|
"tags": ["组织信息", "内部架构"]
|
||||||
},
|
},
|
||||||
@@ -163,7 +173,7 @@ person_ddl_sql = """
|
|||||||
"role": "dimension",
|
"role": "dimension",
|
||||||
"tags": ["主键", "ID标识"]
|
"tags": ["主键", "ID标识"]
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "dr",
|
"name": "dr",
|
||||||
"type": "INT",
|
"type": "INT",
|
||||||
@@ -189,7 +199,7 @@ person_ddl_sql = """
|
|||||||
"role": "dimension",
|
"role": "dimension",
|
||||||
"tags": ["租户信息", "系统隔离"]
|
"tags": ["租户信息", "系统隔离"]
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "create_time",
|
"name": "create_time",
|
||||||
"type": "DATETIME(39)",
|
"type": "DATETIME(39)",
|
||||||
@@ -204,8 +214,8 @@ person_ddl_sql = """
|
|||||||
"role": "dimension",
|
"role": "dimension",
|
||||||
"tags": ["时间信息", "系统记录"]
|
"tags": ["时间信息", "系统记录"]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "to_dept",
|
"name": "to_dept",
|
||||||
"type": "VARCHAR(600)",
|
"type": "VARCHAR(600)",
|
||||||
@@ -445,42 +455,34 @@ person_ddl_sql = """
|
|||||||
{
|
{
|
||||||
"from": "input_dept",
|
"from": "input_dept",
|
||||||
"to_table": "IUAP_APDOC_BASEDOC.org_orgs",
|
"to_table": "IUAP_APDOC_BASEDOC.org_orgs",
|
||||||
"to_field": "id",
|
"to_field": ["id","parentid"],
|
||||||
"type": "foreign_key",
|
"type": "foreign_key",
|
||||||
"comment": "关联部门表"
|
"comment": "关联部门表"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"from": "internal_dept",
|
"from": "internal_dept",
|
||||||
"to_table": "IUAP_APDOC_BASEDOC.org_orgs",
|
"to_table": "IUAP_APDOC_BASEDOC.org_orgs",
|
||||||
"to_field": "id",
|
"to_field": ["id","parentid"],
|
||||||
"type": "foreign_key",
|
"type": "foreign_key",
|
||||||
"comment": "关联部门表"
|
"comment": "关联部门表"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"from": "internal_unit",
|
"from": "internal_unit",
|
||||||
"to_table": "IUAP_APDOC_BASEDOC.org_orgs",
|
"to_table": "IUAP_APDOC_BASEDOC.org_orgs",
|
||||||
"to_field": "id",
|
"to_field": ["id","parentid"],
|
||||||
"type": "foreign_key",
|
"type": "foreign_key",
|
||||||
"comment": "关联部门表"
|
"comment": "关联部门表"
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
"tags": ["人员管理", "人力资源", "审批流程", "基本信息", "工作信息"],
|
"tags": ["人员管理", "人力资源", "审批流程", "基本信息", "工作信息"],
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
train_document='''
|
|
||||||
语法为达梦数据库语法;
|
|
||||||
查询地址,籍贯,公司,单位时,尽量使用like查询;
|
|
||||||
查询人员信息时,由于数据表字段过多。只需要展示人员关键信息字段,id,工号,姓名,单位以及用户问题中需要查询的字段;
|
|
||||||
表字段信息以及字段枚举信息在values下,注意相关字段枚举值的转换;
|
|
||||||
查询单位时,通过orgs表查询,且需要基于parentID查询递归查询单位下的子单位;
|
|
||||||
查询内部单位时,则可以直接查询人员信息表,通过like模糊查询;
|
|
||||||
没有明确说明查询外部单位,都默认查询通过orgs查询单位;
|
|
||||||
'''
|
|
||||||
|
|
||||||
rule_ddl='''
|
|
||||||
|
person_attendance_rule_ddl='''
|
||||||
{
|
{
|
||||||
"db_name":"YJOA_APPSERVICE_DB",
|
"db_name":"YJOA_APPSERVICE_DB",
|
||||||
"table_name": "t_yj_person_attendance_rules",
|
"table_name": "t_yj_person_attendance_rules",
|
||||||
@@ -550,7 +552,7 @@ rule_ddl='''
|
|||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
user_status_ddl='''
|
person_status_ddl='''
|
||||||
{
|
{
|
||||||
"db_name":"YJOA_APPSERVICE_DB",
|
"db_name":"YJOA_APPSERVICE_DB",
|
||||||
"table_name": "t_yj_person_status",
|
"table_name": "t_yj_person_status",
|
||||||
@@ -634,7 +636,7 @@ user_status_ddl='''
|
|||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
user_attendance_ddl = '''
|
person_attendance_ddl = '''
|
||||||
{
|
{
|
||||||
"db_name": "YJOA_APPSERVICE_DB",
|
"db_name": "YJOA_APPSERVICE_DB",
|
||||||
"table_name": "t_yj_person_attendance",
|
"table_name": "t_yj_person_attendance",
|
||||||
@@ -771,6 +773,72 @@ user_attendance_ddl = '''
|
|||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
person_rules_ddl = '''
|
||||||
|
{
|
||||||
|
"db_name": "YJOA_APPSERVICE_DB",
|
||||||
|
"table_name": "t_yj_person_rules",
|
||||||
|
"table_comment": "人员考勤规则关联表,关联人员与考勤规则",
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"type": "VARCHAR(50)",
|
||||||
|
"comment": "主键ID",
|
||||||
|
"role": "dimension",
|
||||||
|
"tags": ["主键", "ID标识"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "person_id",
|
||||||
|
"type": "VARCHAR(50)",
|
||||||
|
"comment": "人员ID",
|
||||||
|
"role": "dimension",
|
||||||
|
"tags": ["人员标识", "外键"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "person_name",
|
||||||
|
"type": "VARCHAR(50)",
|
||||||
|
"comment": "人员姓名",
|
||||||
|
"role": "dimension",
|
||||||
|
"tags": ["人员信息", "姓名"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rules_id",
|
||||||
|
"type": "VARCHAR(50)",
|
||||||
|
"comment": "考勤规则ID",
|
||||||
|
"role": "dimension",
|
||||||
|
"tags": ["规则标识", "外键"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dr",
|
||||||
|
"type": "CHAR(2)",
|
||||||
|
"comment": "删除标志",
|
||||||
|
"value": {
|
||||||
|
"0": "正常",
|
||||||
|
"1": "删除"
|
||||||
|
},
|
||||||
|
"role": "dimension",
|
||||||
|
"tags": ["状态标识", "软删除", "枚举"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"relationships": [
|
||||||
|
{
|
||||||
|
"from": "person_id",
|
||||||
|
"to_table": "t_yj_person_database",
|
||||||
|
"to_field": "id",
|
||||||
|
"type": "foreign_key",
|
||||||
|
"comment": "关联人员基本信息表"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "rules_id",
|
||||||
|
"to_table": "t_yj_person_attendance_rules",
|
||||||
|
"to_field": "id",
|
||||||
|
"type": "foreign_key",
|
||||||
|
"comment": "关联考勤规则表"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": ["人员考勤", "规则关联", "关系映射", "考勤管理"]
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
|
||||||
person_ac_position = '''
|
person_ac_position = '''
|
||||||
{
|
{
|
||||||
"db_name":"YJOA_APPSERVICE_DB",
|
"db_name":"YJOA_APPSERVICE_DB",
|
||||||
@@ -800,8 +868,13 @@ person_ac_position = '''
|
|||||||
"type": "foreign_key",
|
"type": "foreign_key",
|
||||||
"comment": "关联门禁区域关系表"
|
"comment": "关联门禁区域关系表"
|
||||||
},
|
},
|
||||||
],
|
{
|
||||||
|
"from": "position",
|
||||||
|
"to_table": "t_yj_person_ac_area",
|
||||||
|
"to_field": "area",
|
||||||
|
"type": "foreign_key",
|
||||||
|
"comment": "关联门禁区域关系表"
|
||||||
|
},
|
||||||
"tags": ["门禁控制点","门禁位置"]
|
"tags": ["门禁控制点","门禁位置"]
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
@@ -834,7 +907,11 @@ person_ac_area = '''
|
|||||||
"1":"北京",
|
"1":"北京",
|
||||||
"2":"成都",
|
"2":"成都",
|
||||||
"3":"秭归",
|
"3":"秭归",
|
||||||
"5":"林芝"
|
"4":"林芝市区",
|
||||||
|
"5":"拉萨",
|
||||||
|
"6":"米林",
|
||||||
|
"7":"派镇",
|
||||||
|
"8":"墨脱",
|
||||||
},
|
},
|
||||||
"role": "dimension",
|
"role": "dimension",
|
||||||
"tags": ["门禁所属地区"]
|
"tags": ["门禁所属地区"]
|
||||||
@@ -845,7 +922,6 @@ person_ac_area = '''
|
|||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
org_orgs_ddl = '''
|
org_orgs_ddl = '''
|
||||||
{
|
{
|
||||||
"db_name":"IUAP_APDOC_BASEDOC",
|
"db_name":"IUAP_APDOC_BASEDOC",
|
||||||
|
|||||||
Reference in New Issue
Block a user