Compare commits

...

2 Commits

5 changed files with 332 additions and 127 deletions

View File

@@ -45,18 +45,15 @@ def _run_sql(state: DateReportAgentState) -> dict:
update_conversation(id=state.get('id'), sql=sql)
df = vn.run_sql_2(sql)
result = df.to_dict(orient='records')
logger.info(f"run sql result {result}")
logger.info(f"run sql result => {result}")
retry = state.get("retry_count", 0) + 1
logger.info(f"old_sql:{sql}, retry sql {retry_sql}")
dd= {'data': result, 'retry_count': retry, 'retry_sql': retry_sql,'run_sql_error':''}
#不需要模型反馈,运行成功后则成功
if not NEED_MODEL_FEEDBACK_QA:
dd['sql_correct']=True
return dd
except Exception as e:
retry = state.get("retry_count", 0) + 1
logger.error(f"Error running sql: {sql}, error: {e}")
return {'retry_count': retry, 'run_sql_error': '运行sql语句失败请检查语法或联系管理员。'}
return {'retry_count': retry, 'run_sql_error': f'运行sql语句失败{e}请检查语法或联系管理员。'}
def _feedback_qa(state: DateReportAgentState) -> dict:
@@ -72,8 +69,10 @@ def _feedback_qa(state: DateReportAgentState) -> dict:
ddl_list = vn.get_related_ddl(user_question)
qa_list = vn.get_similar_question_sql(user_question)
history = state.get('history', [])
document = vn.get_related_documentation(user_question)
sql_error = state.get('run_sql_error', '')
sys_promot = feedback_temp['system'].format(question=user_question, sql=sql, sql_result=sql_result,history=history,
current_time=datetime.now(),ddl_list=ddl_list,qa_list=qa_list)
current_time=datetime.now(),ddl_list=ddl_list,qa_list=qa_list,document=document,sql_error=sql_error)
logger.info(f"system_temp is {sys_promot}")
result = gen_history_llm.invoke(sys_promot).text()
logger.info(f"feedback result: {result}")
@@ -111,12 +110,14 @@ def handle_with_feedback(state: DateReportAgentState) -> str:
logger.info(f"user:{state.get('user_id', '1')} ---------------进入 handle_with_feedback 节点 ---------------")
sql_error = state.get('run_sql_error', '')
sql_correct = state.get('sql_correct', False)
force_check = config('FORCE_CHECK', False)
force_check = config('FORCE_CHECK', False,cast=bool)
sql_retry_count = state.get('retry_count', 0)
logger.info(f"handle with feedback sql_retry_count is {sql_retry_count} "
f"sql error is {sql_error} sql correct is {sql_correct}")
logger.info(f"force check is {force_check} type")
if force_check:
logger.info(f"进入 force check")
if sql_retry_count < 3:
if sql_correct:
return '_gen_report'
@@ -130,6 +131,7 @@ def handle_with_feedback(state: DateReportAgentState) -> str:
else:
if sql_retry_count < 3:
if sql_error and len(sql_error) > 0:
logger.info(f"sql_error is {sql_error}")
return '_feedback_qa'
else:
return '_gen_report'

View File

@@ -98,7 +98,7 @@ template:
WITH "name"||"shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
</rule-detail>
<rule-detail>重点:当用户问题涉及查询:是否,有没有的时候。通过case/when语法结果需要返回是/否。而不是返回查询记录</rule-detail>
<rule-detail>重点:当用户问题涉及查询:是否,有没有的时候。通过case/when语法结果需要返回是/否。而不是返回查询记录</rule-detail>
</rule>
<rule>
<rule-title>关联与限制</rule-title>
@@ -665,46 +665,79 @@ template:
result_feedback:
system: |
# 角色
你是一位经验丰富的数据分析师和SQL专家。你的核心任务是对SQL查询和其执行结果进行批判性审查
你是一位注重实效的SQL审查专家。你的任务是**识别明显的技术错误**,而不是过度解读业务逻辑
# 你的任务
我(用户)向你提供了一系列信息,请你进行分析和反思。
# 输入信息
[原始问题]: <question>{question}</question>
[生成的SQL]: <sql>{sql}</sql>。
[执行结果]: <sql_result>{sql_result}</sql_result>。
[执行sql报错]:<exec_sql_error>{sql_error}</exec_sql_error>
[当前时间]: <current_time>{current_time}</current_time>
[历史信息]: <history>{history}</history>
[表结构信息]:<schema>{ddl_list}</schema>
[问答参考]:<question_answer>{qa_list}</question_answer>
[注意事项文档]:<document>{document}</document>
# 核心审查原则
## 重点关注(必须纠正的问题)
1. **语法硬伤**明显的SQL语法错误、关键字冲突
2. **逻辑矛盾**WHERE条件相互冲突、JOIN条件错误导致笛卡尔积
3. **数据安全**:敏感信息泄露、缺少必要的权限限制
4. **性能灾难**:缺失关键索引、全表扫描的写法
5. **结果明显异常**:数量级错误、数据类型明显不匹配
6. **结果错误**执行sql有报错
## 适度关注(给出建议但不必判定为错误)
1. **业务逻辑合理性**:不同的业务理解可能有不同的实现方式
2. **模糊匹配精度**LIKE查询的宽泛程度属于业务选择
3. **技术实现选择**达梦与Oracle的语法兼容性等已验证的技术细节
4. **编码规范**:命名风格、格式问题等不影响结果正确性的问题
## 尊重上下文
- 信任SQL生成器对业务逻辑的理解
- 认可合理的模糊匹配和近似查询
- 理解技术选型的合理性
# 核心规则
请根据以上信息,进行全面、细致的反思,并最终判断这个结果是否能正确回答原始问题。你的反思需要包含以下几个步骤:
1. **核对问题理解**
回顾“原始问题”,确认其核心意图、时间范围、筛选条件和所需字段。
我生成的SQL是否准确捕捉了问题的所有关键要素有没有遗漏或误解
当sql和问题吻合且能查询出结果时一般判定为正确
2. **通用业务定义**
上周:指完整的**上周一到上周日**
3. **审查SQL逻辑**
2. **审查SQL逻辑**
逐行分析“生成的SQL”检查其语法结构是否正确。
关键子句(如 `WHERE`, `GROUP BY`, `HAVING`, `JOIN`)是否准确地反映了查询意图?
聚合函数(如 `SUM`, `COUNT`, `AVG`)的使用是否恰当?分组维度是否正确?
4. **评估结果合理性**
例如
SQL必须避免与数据库关键字冲突。
注意列名定义和使用的先后顺序例如SELECT阶段定义了列名如果GROUP BY阶段先与SELECT阶段执行时是不许在GROUP BY阶段引用列名的。
在ORDER BY、GROUP BY、WHERE子句中不要使用SELECT中定义的别名。
注意当SELECT列中同时包含聚合列COUNT(), SUM(), AVG()和非聚合列时必须要在GROUP BY子句中指定所有非聚合列
递归 WITH 子句必须具有列别名列表。
CONNECT BY子查询是独立的无法访问外部查询的表别名,因此涉及CONNECT BY子查询时里面禁止使用表别名。
使用了聚合函数(如 COUNT(), SUM(), AVG()的SQL必须配置相应的 GROUP BY 子句。
3. **评估结果合理性**
观察“执行结果”,思考这个结果是否符合业务常识或数据的基本特征(例如,数量级、正负值、范围是否合理)?
结果的列名和内容是否与问题期望的输出一致?
5. **最终判断和建议**
4. **错误等级划分**
- **严重错误**:导致结果完全错误 → 必须纠正
- **一般问题**:可能影响部分结果 → 建议优化
- **细节问题**:不影响结果正确性 → 可选优化
4. **最终判断和建议**
**结论** : 用一句话明确指出:“结果正确”、“结果可能不正确”或“无法完全确定”。
**原因** : 简练地解释你做出此判断的核心理由。
**改进建议** (如果结果不正确):
* 具体指出SQL中可能存在的逻辑错误。
* 给出一个或多个修改后的SQL版本。
* 解释你为什么这样修改。
# 输出格式
请严格按照以下JSON格式输出你的分析结果
```json
{{
"conclusion": "结果正确 OR 结果可能不正确 OR 无法完全确定",
"confidence_level": "高 | 中 | 低",
"reasoning": "对问题理解、SQL逻辑和结果合理性的综合分析说明。",
"is_result_correct": true OR false,
"is_result_correct": true | false,
"suggested_sql": "如果结论为不正确请在此处提供修改后的SQL。如果正确则为null。"
}}
Resources:

View File

@@ -513,6 +513,82 @@ question_and_answer = [
GROUP BY p."code", p."name"
ORDER BY "在林芝工作天数" DESC LIMIT 1000
'''
}
},
#-----------------------------------------------按月查在藏--最早在藏---------------------------------------------------
{
"question": "张三最早在藏是哪一天",
"answer": '''
SELECT date_value AS earliest_date
FROM YJOA_APPSERVICE_DB."t_yj_person_status" a
LEFT JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
ON p."code" = a."person_id"
WHERE p."name" = '张三'
AND a."dr" = 0
AND p."dr" =0
AND a."is_in_tibet" = 1
ORDER BY a."date_value" ASC LIMIT 1
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "最早在藏时间"],
"category": "工作地考勤统计分析"
},
{
"question": "张三从5月到10月每个月分别在藏多长时间",
"answer": '''
SELECT TO_CHAR(a."date_value" , 'yyyy-MM') AS month, COUNT(DISTINCT TO_CHAR(a."date_value" , 'yyyy-MM-dd')) AS tibet_days
FROM YJOA_APPSERVICE_DB."t_yj_person_status" a
LEFT JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
ON p."code" = a."person_id"
WHERE p."name" = '张三'
AND a."dr" = 0
AND p."dr" = 0
AND a."date_value" >= '2025-05-01'
AND a."date_value" < '2025-11-01'
AND a."is_in_tibet" = 1
GROUP BY TO_CHAR(a."date_value", 'yyyy-MM')
ORDER BY TO_CHAR(a."date_value", 'yyyy-MM') ASC
LIMIT 1000
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "每月在藏天数"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心在藏最长时间的人是谁",
"answer": '''
SELECT p."name" AS "姓名", p."code" AS "工号", COUNT(ps."id") 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 ps."is_in_tibet" = 1
AND ps."dr" = 0
AND p."dr" = 0
and p.internal_dept in (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
GROUP BY p."name", p."code"
ORDER BY COUNT (ps."id") DESC LIMIT 1
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "累计在藏统计"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心的张三在藏多少天了",
"answer": '''
SELECT COUNT(*) AS days_in_tibet
FROM YJOA_APPSERVICE_DB."t_yj_person_status" a
LEFT JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
ON p."code" = a."person_id"
WHERE p."name" = '张三'
AND p."internal_dept" IN (
SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%' CONNECT BY PRIOR "id" = "parentid"
)
AND a.dr = 0
AND a."is_in_tibet" = 1
LIMIT 1000
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "工作天数"],
"category": "工作地考勤统计分析"
},
]

View File

@@ -926,82 +926,6 @@ question_and_answer = [
"tags": ["员工", "个人", "考勤", "工作地", "区域", "工作天数"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心的张三在藏多少天了",
"answer": '''
SELECT COUNT(*) AS days_in_tibet
FROM YJOA_APPSERVICE_DB."t_yj_person_status" a
LEFT JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
ON p."code" = a."person_id"
WHERE p."name" = '张三'
AND p."internal_dept" IN (
SELECT "id" FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%' CONNECT BY PRIOR "id" = "parentid"
)
AND a.dr = 0
AND a."is_in_tibet" = 1
LIMIT 1000
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "工作天数"],
"category": "工作地考勤统计分析"
},
{
"question": "张三最早在藏是哪一天",
"answer": '''
SELECT date_value AS earliest_date
FROM YJOA_APPSERVICE_DB."t_yj_person_status" a
LEFT JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
ON p."code" = a."person_id"
WHERE p."name" = '张三'
AND a."dr" = 0
AND p."dr" =0
AND a."is_in_tibet" = 1
ORDER BY a."date_value" ASC LIMIT 1
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "最早在藏时间"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心在藏最长时间的人是谁",
"answer": '''
SELECT p."name" AS "姓名", p."code" AS "工号", COUNT(ps."id") 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 ps."is_in_tibet" = 1
AND ps."dr" = 0
AND p."dr" = 0
and p.internal_dept in (SELECT "id"
FROM "IUAP_APDOC_BASEDOC"."org_orgs" START
WITH "name"||"shortname" LIKE '%xx中心%' AND "dr"=0 AND "enable"=1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
GROUP BY p."name", p."code"
ORDER BY COUNT (ps."id") DESC LIMIT 1
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "累计在藏统计"],
"category": "工作地考勤统计分析"
},
{
"question": "张三从5月到10月每个月分别在藏多长时间",
"answer": '''
SELECT TO_CHAR(a."date_value" , 'yyyy-MM') AS month, COUNT(DISTINCT TO_CHAR(a."date_value" , 'yyyy-MM-dd')) AS tibet_days
FROM YJOA_APPSERVICE_DB."t_yj_person_status" a
LEFT JOIN "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
ON p."code" = a."person_id"
WHERE p."name" = '张三'
AND a."dr" = 0
AND p."dr" = 0
AND a."date_value" >= '2025-05-01'
AND a."date_value" < '2025-11-01'
AND a."is_in_tibet" = 1
GROUP BY TO_CHAR(a."date_value", 'yyyy-MM')
ORDER BY TO_CHAR(a."date_value", 'yyyy-MM') ASC
LIMIT 1000
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "每月在藏天数"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心在林芝最长时间的是谁待了多少天",
"answer": '''
@@ -1218,6 +1142,181 @@ question_and_answer = [
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "工作天数"],
"category": "工作地考勤统计分析"
}
},
{
"question": "XX中心在藏最长时间的人是谁",
"answer": '''
SELECT p."code" AS "人员编号",SUM(pt."count_in_tibat") AS "累计在藏天数", p."name" AS "姓名", o."name" AS "部门"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
INNER JOIN "YJOA_APPSERVICE_DB"."t_yj_person_in_tibat" pt
ON p."code" = pt."person_id"
INNER JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o
ON p."internal_dept" = o."id"
WHERE p."dr" = 0
AND pt."dr" = 0
AND p."internal_dept" IN (
SELECT id
FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
GROUP BY p."code", p."name", o."name"
ORDER BY SUM(pt."count_in_tibat") DESC
LIMIT 1
''',
"tags": ["员工", "考勤", "工作地", "区域", "累计在藏统计","最值"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心的张三在藏多少天了",
"answer": '''
SELECT p."code" AS "人员编号",SUM(pt."count_in_tibat") AS "累计在藏天数", p."name" AS "姓名", o."name" AS "部门"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
INNER JOIN "YJOA_APPSERVICE_DB"."t_yj_person_in_tibat" pt
ON p."code" = pt."person_id"
INNER JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o
ON p."internal_dept" = o."id"
WHERE p."dr" = 0
AND pt."dr" = 0
AND p."name" = '张三'
AND p."internal_dept" IN (
SELECT id
FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
GROUP BY p."code", p."name", o."name"
ORDER BY SUM(pt."count_in_tibat") DESC
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "累计在藏天数"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心的张三2025年在藏多少天了",
"answer": '''
SELECT pt."year" AS "年份", p."code" AS "人员编号",pt."count_in_tibat" AS "2025年累计在藏天数", p."name" AS "姓名", o."name" AS "部门"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
INNER JOIN "YJOA_APPSERVICE_DB"."t_yj_person_in_tibat" pt
ON p."code" = pt."person_id"
INNER JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o
ON p."internal_dept" = o."id"
WHERE p."dr" = 0
AND pt."dr" = 0
AND p."name" = '张三'
AND pt."year" = '2025'
AND p."internal_dept" IN (
SELECT id
FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "累计在藏天数"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心的张三上一次累计在藏多少天",
"answer": '''
SELECT pt."year" AS "年份",p."code" AS "人员编号",pt."last_count_in_tibat" AS "上一次累计在藏天数", p."name" AS "姓名", o."name" AS "部门"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
INNER JOIN "YJOA_APPSERVICE_DB"."t_yj_person_in_tibat" pt
ON p."code" = pt."person_id"
INNER JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o
ON p."internal_dept" = o."id"
WHERE p."dr" = 0
AND pt."dr" = 0
AND p."name" = '张三'
AND p."internal_dept" IN (
SELECT id
FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
ORDER BY pt."year" DESC
LIMIT 1
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "上一次累计在藏天数"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心连续在藏最长时间的人是谁",
"answer": '''
SELECT pt."year" AS "年份",p."code" AS "人员编号",pt."continuous_in_tibet_days" AS "连续在藏天数", p."name" AS "姓名", o."name" AS "部门"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
INNER JOIN "YJOA_APPSERVICE_DB"."t_yj_person_in_tibat" pt
ON p."code" = pt."person_id"
INNER JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o
ON p."internal_dept" = o."id"
WHERE p."dr" = 0
AND pt."dr" = 0
AND p."internal_dept" IN (
SELECT id
FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
ORDER BY pt."year",pt."continuous_in_tibet_days" DESC
LIMIT 1
''',
"tags": ["员工", "考勤", "工作地", "区域", "连续在藏统计", "最值"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心2025年连续在藏最长时间的人是谁",
"answer": '''
SELECT pt."year" AS "年份",p."code" AS "人员编号",pt."continuous_in_tibet_days" AS "连续在藏天数", p."name" AS "姓名", o."name" AS "部门"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
INNER JOIN "YJOA_APPSERVICE_DB"."t_yj_person_in_tibat" pt
ON p."code" = pt."person_id"
INNER JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o
ON p."internal_dept" = o."id"
WHERE p."dr" = 0
AND pt."dr" = 0
AND pt."year" = '2025'
AND p."internal_dept" IN (
SELECT id
FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
ORDER BY pt."continuous_in_tibet_days" DESC
LIMIT 1
''',
"tags": ["员工", "考勤", "工作地", "区域", "连续在藏统计", "最值"],
"category": "工作地考勤统计分析"
},
{
"question": "XX中心的张三连续在藏多少天了",
"answer": '''
SELECT pt."year" AS "年份",p."code" AS "人员编号",pt."continuous_in_tibet_days" AS "连续在藏天数", p."name" AS "姓名", o."name" AS "部门"
FROM "YJOA_APPSERVICE_DB"."t_pr3rl2oj_yj_person_database" p
INNER JOIN "YJOA_APPSERVICE_DB"."t_yj_person_in_tibat" pt
ON p."code" = pt."person_id"
INNER JOIN "IUAP_APDOC_BASEDOC"."org_orgs" o
ON p."internal_dept" = o."id"
WHERE p."dr" = 0
AND pt."dr" = 0
AND p."name" = '张三'
AND p."internal_dept" IN (
SELECT id
FROM "IUAP_APDOC_BASEDOC"."org_orgs"
START WITH ("name" LIKE '%XX中心%' OR "shortname" LIKE '%XX中心%')
AND "dr" = 0 AND "enable" = 1 AND "code" LIKE '%CYJ%'
CONNECT BY PRIOR "id" = "parentid"
)
ORDER BY pt."year",pt."continuous_in_tibet_days" DESC
LIMIT 1
''',
"tags": ["员工", "个人", "考勤", "工作地", "区域", "连续在藏天数"],
"category": "工作地考勤统计分析"
},
]

View File

@@ -12,6 +12,7 @@ train_document='''
查询部门信息时尽量使用internal_dept而非internal_unit<UNK>
数信部不是数信中心,两者不能等价
数信中心就叫数信中心,没有数字信息中心这个部门,请勿胡乱替换
部门表里code字段中中带CYJ的才是正式加入使用的部门废弃或测试部门的部门编号则不带CYJ
'''
person_database_ddl = """
@@ -571,13 +572,7 @@ person_status_ddl='''
"role": "dimension",
"tags": ["休假信息", "请假类型", "枚举", "考勤管理"]
},
{
"name": "is_in_tibet",
"type": "INT",
"comment": "是否在西藏地区",
"role": "dimension",
"tags": ["地区标识", "地理位置"]
},
{
"name": "business_trip_destination",
"type": "VARCHAR(50)",
@@ -897,57 +892,57 @@ person_ac_area = '''{
person_in_tibat = '''
{
"db_name": "YJOA_APPSERVICE_DB",
"table_name": "person_in_tibat",
"table_comment": "人员在藏情况表",
"table_name": "t_yj_person_in_tibat",
"table_comment": "人员累计在藏天数、连续在藏天数,情况表",
"columns": [
{
"name": "id",
"type": "VARCHAR(50)",
"comment": "主键ID",
"role": "dimension",
"tags": ["唯一标识"]
"tags": ["唯一标识", "主键"]
},
{
"name": "person_id",
"type": "VARCHAR(50)",
"comment": "人员ID",
"comment": "人员唯一标识",
"role": "dimension",
"tags": ["人员标识"]
"tags": ["人员标识", "外键"]
},
{
"name": "year",
"type": "VARCHAR(20)",
"comment": "年份",
"comment": "统计年份",
"role": "dimension",
"tags": ["时间维度"]
"tags": ["时间维度", "统计周期"]
},
{
"name": "create_time",
"type": "DATETIME",
"comment": "创建时间",
"role": "dimension",
"tags": ["时间信息"]
},
{
"name": "update_time",
"type": "DATETIME",
"comment": "更新时间",
"role": "dimension",
"tags": ["时间信息"]
},
{
"name": "dr",
"name": "count_in_tibat",
"type": "INT",
"comment": "删除标记",
"role": "dimension",
"tags": ["据状态"]
"comment": "该年累计在藏天数",
"role": "metric",
"tags": ["在藏统计", "累计天数","当年累计天"]
},
{
"name": "last_count_in_tibat",
"type": "INT",
"comment": "上一年度累计在藏天数",
"role": "metric",
"tags": ["历史统计", "同比数据","上次累计在藏"]
},
{
"name": "continuous_in_tibet_days",
"type": "INT",
"comment": "连续在藏天数",
"role": "metric",
"tags": ["连续在藏天数"]
"tags": ["连续统计", "持续天数"]
},
{
"name": "dr",
"type": "INT",
"comment": "软删除标记(0:正常, 1:删除)",
"role": "dimension",
"tags": ["数据状态", "系统字段"]
}
],
"relationships": [