diff --git a/main_service.py b/main_service.py
index 6038fa2..33fa7a3 100644
--- a/main_service.py
+++ b/main_service.py
@@ -71,7 +71,7 @@ def init_vn(vn):
from vanna.flask import VannaFlaskApp
vn = create_vana()
app = VannaFlaskApp(vn,chart=False)
-app.cache = TTLCacheWrapper(app.cache, ttl = config('TTL_CACHE', cast=int))
+app.cache = TTLCacheWrapper(app.cache, ttl = config('TTL_CACHE', cast=int,default=60*60))
init_vn(vn)
cache = app.cache
@app.flask_app.route("/yj_sqlbot/api/v0/generate_sql_2", methods=["GET"])
diff --git a/template.yaml b/template.yaml
index 378bf46..49ab08e 100644
--- a/template.yaml
+++ b/template.yaml
@@ -160,8 +160,12 @@ template:
{history}
- 电网雅江联通
- 这些都可能是内部或者外部单位的名称
+ 国网电网雅江联通
+ 这些都可能是外部单位的名称
+
+
+ 数信中心建设处
+ 这些都可能是单位的名称
diff --git a/util/load_ddl_doc.py b/util/load_ddl_doc.py
index 6cd21fd..e43e081 100644
--- a/util/load_ddl_doc.py
+++ b/util/load_ddl_doc.py
@@ -2,7 +2,10 @@ 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.rule_ddl,train_ddl.user_status_ddl
+ train_ddl.person_ddl_sql,train_ddl.user_status_ddl,
+ train_ddl.user_attendance_ddl,train_ddl.person_ac_area,
+ train_ddl.org_orgs_ddl
+
]
list_documentions = [
train_ddl.train_document,
diff --git a/util/q_and_a_dict.py b/util/q_and_a_dict.py
index c8eab68..40837b1 100644
--- a/util/q_and_a_dict.py
+++ b/util/q_and_a_dict.py
@@ -1,33 +1,5 @@
question_and_answer = [
- {"question": "考勤地点有哪些",
- "answer": '''
- SELECT DISTINCT CASE "region"
- WHEN '1' THEN '北京'
- WHEN '2' THEN '成都'
- WHEN '3' THEN '秭归'
- WHEN '4' THEN '拉萨'
- WHEN '5' THEN '林芝' END AS "考勤地点"
- FROM "YJOA_APPSERVICE_DB"."t_yj_person_attendance_rules"
- WHERE "region" IS NOT NULL LIMIT 1000
- '''
- },
- {"question": "成都的考勤规则是什么",
- "answer": '''
- SELECT "region" AS "region_code",
- CASE
- WHEN "region" = '1' THEN '北京'
- WHEN "region" = '2' THEN '成都'
- WHEN "region" = '3' THEN '秭归'
- WHEN "region" = '4' THEN '拉萨'
- WHEN "region" = '5' THEN '林芝' END AS "region_name",
- "morning_check_time" AS "morning_check_time",
- "afternoon_check_time" AS "afternoon_check_time",
- "before_lunch_time" AS "before_lunch_time",
- "after_lunch_time" AS "after_lunch_time"
- FROM "YJOA_APPSERVICE_DB"."t_yj_person_attendance_rules"
- WHERE "region" = '2' LIMIT 1000
- '''
- },
+
{"question": "所有员工男女各有多少人",
"answer": '''
SELECT CASE WHEN "gender" = '1' THEN '男' WHEN "gender" = '2' THEN '女' END AS "gender",
@@ -39,16 +11,16 @@ question_and_answer = [
'''
},
{
- "question": "联通下面有哪些员工",
+ "question": "外部单位是联通下面有哪些员工",
"answer": '''
SELECT "id" AS "id",
"code" AS "工号",
"name" AS "姓名",
- "internal_unit" AS "内部单位",
+
"external_unit" AS "外部单位"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database"
- WHERE "internal_unit" LIKE '%联通%'
- OR "external_unit" LIKE '%联通%' LIMIT 1000
+ WHERE
+ "external_unit" LIKE '%联通%' LIMIT 1000
'''
},
{
@@ -176,7 +148,7 @@ question_and_answer = [
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database"
WHERE "work_content" LIKE '%智能体%' LIMIT 1000
'''
- },{
+ }, {
"question": "9月,旷工,迟到分别有多少人",
"answer": '''
SELECT CASE WHEN "status" = '1006' THEN '迟到' WHEN "status" = '1005' THEN '旷工' END AS "status_name",
@@ -188,7 +160,7 @@ question_and_answer = [
GROUP BY "status"
ORDER BY "status" LIMIT 1000
'''
- },{
+ }, {
"question": "在研发基地工作的有哪些员工",
"answer": '''
SELECT "id" AS "id",
@@ -201,6 +173,94 @@ question_and_answer = [
WHERE ("office_address" LIKE '%研发基地%' OR "office_city" LIKE '%研发基地%')
AND "dr" = '0' LIMIT 1000
'''
+ },
+ {
+ "question": "查询张三9月在林芝的打卡记录",
+ "answer": '''
+ SELECT a."person_name" AS "姓名",
+ a."person_id" AS "人员ID",
+ a."attendance_time" AS "考勤时间",
+ a."attendance_address" AS "考勤地址",
+ CASE
+ WHEN a."status" = 0 THEN '在岗'
+ WHEN a."status" = 1 THEN '出差'
+ WHEN a."status" = 2 THEN '休假' END AS "状态",
+ CASE
+ WHEN a."enter_or_exit" = 0 THEN '进'
+ WHEN a."enter_or_exit" = 1
+ THEN '出' END AS "进出类型",
+ CASE
+ WHEN b."region" = 1 THEN '水科院大厦'
+ WHEN b."region" = 2 THEN '成都'
+ WHEN b."region" = 3 THEN '秭归'
+ WHEN b."region" = 5 THEN '林芝' END AS "地区",
+ a."access_control_point" AS "门禁点"
+ FROM "YJOA_APPSERVICE_DB"."t_yj_person_attendance" a
+ JOIN "YJOA_APPSERVICE_DB"."t_yj_person_ac_area" b ON a."access_control_point" = b."ac_point"
+ WHERE a."person_name" = '张三'
+ AND b."region" = 5
+ AND a."attendance_time" >= '2025-09-01'
+ AND a."attendance_time" < '2025-10-01'
+ AND a."dr" = 0
+ ORDER BY a."attendance_time" DESC LIMIT 1000
+ '''
+ },{
+ "question": "查询张三9月份有多少天在岗",
+ "answer": '''
+ SELECT p."code" AS "工号",
+ p."name" AS "姓名",
+ CASE
+ WHEN p."internal_unit" IS NOT NULL AND p."internal_unit" != '' THEN p."internal_unit"
+ ELSE p."external_unit"
+ END AS "单位",
+ COUNT(CASE WHEN ps."status" = '1001' THEN 1 END) AS "在岗天数"
+ FROM YJOA_APPSERVICE_DB."t_yj_person_status" ps
+ JOIN YJOA_APPSERVICE_DB."t_pr3rl2oj_yj_person_database" p ON ps."person_id" = p."code"
+ WHERE p."name" = '张三'
+ AND ps."date_value" LIKE '2025-09%'
+ AND ps."dr" = 0
+ AND p."dr" = 0
+ GROUP BY p."code", p."name",
+ CASE
+ WHEN p."internal_unit" IS NOT NULL AND p."internal_unit" != '' THEN p."internal_unit"
+ ELSE p."external_unit"
+ END LIMIT 1000
+ '''
+ },{
+ "question": "数信中心 部门下有多少员工",
+ "answer": '''
+ select count(*)
+ from YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database
+ where 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 '数信中心'))
+
+
+ '''
+ },
+ {
+ "question": "各个外部单位下的员工人数统计",
+ "answer": '''
+ sELECT "external_unit" AS "外部单位", COUNT(*) AS "员工人数"
+ FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database"
+ WHERE "external_unit" IS NOT NULL
+ AND "external_unit" != ''
+ GROUP BY "external_unit"
+ ORDER BY "员工人数" DESC LIMIT 1000
+ '''
+ },
+ {
+ "question": "数信中心下各个处室分别有多少人",
+ "answer": '''
+ SELECT o.name AS "处室名称", COUNT(p.id) AS "人数"
+ FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database p
+ 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 '数信中心')
+ AND p.dr = 0
+ GROUP BY o.name
+ ORDER BY "人数" DESC LIMIT 1000
+ '''
}
]
diff --git a/util/train_ddl.py b/util/train_ddl.py
index c413f21..d6ed8c3 100644
--- a/util/train_ddl.py
+++ b/util/train_ddl.py
@@ -475,8 +475,8 @@ train_document='''
查询地址,籍贯,公司,单位时,尽量使用like查询;
查询人员信息时,由于数据表字段过多。只需要展示人员关键信息字段,id,工号,姓名,单位以及用户问题中需要查询的字段;
表字段信息以及字段枚举信息在values下,注意相关字段枚举值的转换;
- 查询单位信息时,内部单位和外部单位都需要查询,用OR条件查询;
-
+ 查询单位时,通过orgs表查询,且需要基于parentID查询单位下的子单位;
+ 查询内部单位时,则可以直接查询人员信息表,通过like模糊查询;
'''
rule_ddl='''
@@ -636,7 +636,7 @@ user_status_ddl='''
user_attendance_ddl = '''
{
"db_name": "YJOA_APPSERVICE_DB",
- "table_name": "t_person_attendance_records",
+ "table_name": "t_yj_person_attendance",
"table_comment": "人员考勤记录表,存储员工的打卡记录、考勤状态和位置信息",
"columns": [
{
@@ -691,7 +691,7 @@ user_attendance_ddl = '''
"2": "休假"
},
"role": "dimension",
- "tags": ["状态标识", "人员在岗状态"]
+ "tags": ["状态标识", "人员在岗状态","枚举"]
},
{
"name": "original_id",
@@ -723,13 +723,7 @@ user_attendance_ddl = '''
"role": "dimension",
"tags": ["软删除", "数据状态"]
},
- {
- "name": "create_time",
- "type": "DATETIME",
- "comment": "创建时间",
- "role": "dimension",
- "tags": ["时间戳", "记录创建时间"]
- },
+
{
"name": "enter_or_exit",
"type": "INT",
@@ -748,34 +742,6 @@ user_attendance_ddl = '''
"role": "dimension",
"tags": ["门禁位置", "打卡设备点"]
},
- {
- "name": "by_st",
- "type": "VARCHAR(20)",
- "comment": "上午打卡时间",
- "role": "dimension",
- "tags": ["时间范围", "开始时间"]
- },
- {
- "name": "by_et",
- "type": "VARCHAR(20)",
- "comment": "下午打卡时间",
- "role": "dimension",
- "tags": ["时间范围", "结束时间"]
- },
- {
- "name": "by_st_field",
- "type": "VARCHAR(50)",
- "comment": "午休前打卡时间",
- "role": "dimension",
- "tags": ["中间打卡","时间配置"]
- },
- {
- "name": "by_et_field",
- "type": "VARCHAR(50)",
- "comment": "午休后打卡时间",
- "role": "dimension",
- "tags": ["中间打卡", "时间配置"]
- },
{
"name": "by_go_type",
"type": "VARCHAR(8)",
@@ -867,18 +833,14 @@ person_ac_area = '''
"1":"北京",
"2":"成都",
"3":"秭归",
- "4":"林芝市区",
- "5":"拉萨",
- "6":"米林",
- "7":"派镇",
- "8":"墨脱",
+ "5":"林芝"
},
"role": "dimension",
"tags": ["门禁所属地区"]
},
],
- "tags": ["门禁详情","门禁区域位置","门禁地区信息"]
+ "tags": ["门禁详情","门禁区域位置","门禁地区信息","枚举"]
}
'''
@@ -895,6 +857,13 @@ org_orgs_ddl = '''
"comment": "主键ID",
"role": "dimension",
"tags": ["主键", "id标识"]
+ },
+ {
+ "name": "parentid",
+ "type": "VARCHAR(36)",
+ "comment": "父级部门ID",
+ "role": "dimension",
+ "tags": ["主键", "id标识"]
},
{
"name": "code",