From fe4705fea11675f5966c138edb43089be3183c84 Mon Sep 17 00:00:00 2001 From: yujj128 Date: Fri, 26 Sep 2025 17:35:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=E8=A1=A8=EF=BC=8C=E8=80=83?= =?UTF-8?q?=E5=8B=A4=E7=8A=B6=E6=80=81=E8=A1=A8=EF=BC=8C=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A1=A8=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main_service.py | 8 +- template.yaml | 3 + util/train_ddl.py | 1091 ++++++++++++++++++++++++++++++++++++++++----- util/utils.py | 6 +- 4 files changed, 987 insertions(+), 121 deletions(-) diff --git a/main_service.py b/main_service.py index 7e0f3cc..2989c43 100644 --- a/main_service.py +++ b/main_service.py @@ -111,6 +111,7 @@ def generate_sql_2(): data["type"]="success" return jsonify(data) except Exception as e: + logger.error("generate sql failed:{e}") return jsonify({"type": "error", "error": str(e)}) @@ -156,9 +157,9 @@ def run_sql_2(id: str, sql: str): df = vn.run_sql(sql=sql) logger.info("") app.cache.set(id=id, field="df", value=df) - x = df.to_dict(orient='records') - logger.info("df ---------------{0} {1}".format(x,type(x))) - result = util.utils.deal_result(data=x) + result = df.to_dict(orient='records') + logger.info("df ---------------{0} {1}".format(result,type(result))) + # result = util.utils.deal_result(data=result) return jsonify( { @@ -169,6 +170,7 @@ def run_sql_2(id: str, sql: str): ) except Exception as e: + logger.error("run sql failed:{e}") return jsonify({"type": "sql_error", "error": str(e)}) if __name__ == '__main__': diff --git a/template.yaml b/template.yaml index 4c8611f..6e7ffc9 100644 --- a/template.yaml +++ b/template.yaml @@ -307,6 +307,9 @@ template: 用户提问的内容只是参考,主要以内的SQL为准 + + 遇到枚举字段时,返回的信息不要为key,而是枚举key对应的值 + 若用户提问内就是参考SQL,则以内的SQL为准进行推测,选择合适的图表类型展示 diff --git a/util/train_ddl.py b/util/train_ddl.py index 23adb04..d386a79 100644 --- a/util/train_ddl.py +++ b/util/train_ddl.py @@ -1,124 +1,983 @@ ddl_sql = """ - create table YJOA_APPSERVICE_DB."t_pr3rl2oj_yj_person_database" - ( - "person_status" VARCHAR(108) default 'NULL' comment '人员状态', - "gender" VARCHAR(108) default 'NULL' comment '性别(1:男,2:女)', - "id_card" VARCHAR(600) default 'NULL' comment '身份证号码', - "input_time" DATETIME(39) default NULL comment '录入时间', - "external_unit" VARCHAR(600) default 'NULL' comment '外部单位', - "photo" TEXT(max) default NULL comment '照片(二进制文本)', - "input_user" VARCHAR(108) default 'NULL' comment '录入人', - "is_internal" VARCHAR(108) default 'NULL' comment '是否内部员工(1代表是,0代表否)', - "phone_number" VARCHAR(600) default 'NULL' comment '手机号', - "external_dept" VARCHAR(600) default 'NULL' comment '福建亿榕信息技术有限公司', - "pass_type" VARCHAR(108) default 'NULL' comment '通行证类型', - "expire_time" DATETIME(39) default NULL comment '失效时间', - "internal_dept" VARCHAR(108) default 'NULL' comment '内部部门', - "input_dept" VARCHAR(108) default 'NULL' comment '录入部门', - "name" VARCHAR(600) default 'NULL' comment '姓名', - "internal_unit" VARCHAR(108) default 'NULL' comment '内部单位', - "person_type" VARCHAR(108) default 'NULL' comment '人员类型', - "id" VARCHAR(22) not null comment 'id', - "pubts" DATETIME(39) default CURRENT_TIMESTAMP, - "dr" INT default 0 comment '逻辑删除,1代表已删除', - "code" VARCHAR(600) default 'NULL' comment '编码', - "ytenant_id" VARCHAR(64) not null - constraint T_PR3RL2OJ_YJ_PERSON_DATABASE_I_I_YTENANT_ID - unique comment '租户ID', - "sourcegrand_id" VARCHAR(108) default 'NULL' comment '来源表id', - "first_id" VARCHAR(108) default 'NULL' comment '来源单据主表id', - "firstchild_id" VARCHAR(108) default 'NULL' comment '来源单据子表id', - "firstbusiobj" VARCHAR(108) default 'NULL' comment '来源业务对象', - "firstcode" VARCHAR(600) default 'NULL' comment '来源单据号', - "verifystate" INT default NULL comment '单据状态', - "auditor" VARCHAR(180) default 'NULL' comment '终审审批人', - "audit_time" DATETIME(39) default NULL comment '审批日期', - "auditnote" VARCHAR(600) default 'NULL' comment '当前审批人', - "procinst_id" VARCHAR(108) default 'NULL' comment '流程实例ID', - "bizflow_id" VARCHAR(108) default 'NULL' comment '业务流id', - "bizflowname" VARCHAR(600) default 'NULL' comment '流程名称', - "source_id" VARCHAR(108) default 'NULL' comment '上游单据主表id', - "sourcechild_id" VARCHAR(108) default 'NULL' comment '上游单据子表id', - "bizflowinstance_id" VARCHAR(108) default 'NULL' comment '业务流实例id', - "sourcebusiobj" VARCHAR(108) default 'NULL' comment '上游业务对象', - "sourcecode" VARCHAR(600) default 'NULL' comment '上游单据号', - "bizflow_makebillcode" VARCHAR(600) default 'NULL' comment '单据转换规则编码', - "create_time" DATETIME(39) default NULL comment '创建时间', - "modify_time" DATETIME(39) default NULL comment '修改时间', - "creator" VARCHAR(180) default 'NULL' comment '创建人', - "modifier" VARCHAR(180) default 'NULL' comment '修改人', - "worker_id" VARCHAR(200) default 'NULL' comment '工号', - "to_dept" VARCHAR(600) default 'NULL' comment '所属处室', - "id_card_type" VARCHAR(108) default 'NULL' comment '身份证件类型', - "native_place" VARCHAR(600) default 'NULL' comment '籍贯', - "nation" VARCHAR(600) default 'NULL' comment '民族', - "country" VARCHAR(600) default 'NULL' comment '国籍', - "residence_address" VARCHAR(600) default 'NULL' comment '户籍地址', - "highest_education" VARCHAR(108) default 'NULL' comment '最高学历', - "highest_degree" VARCHAR(108) default 'NULL' comment '最高学位', - "graduate_school" VARCHAR(600) default 'NULL' comment '毕业院校', - "birthday" VARCHAR(30) default 'NULL' comment '出生日期', - "work_date" VARCHAR(30) default 'NULL' comment '参加工作日期', - "political_status" VARCHAR(600) default 'NULL' comment '政治面貌', - "work_unit" VARCHAR(600) default 'NULL' comment '工作单位全称', - "post" VARCHAR(600) default 'NULL' comment '职务', - "engage_post" VARCHAR(600) default 'NULL' comment '现从事岗位', - "work_content" TEXT(max) default NULL comment '工作内容', - "engage_contract_no" VARCHAR(600) default 'NULL' comment '从事项目合同编号', - "engage_contract_name" VARCHAR(600) default 'NULL' comment '从事项目合同名称', - "is_subcontractor" VARCHAR(108) default 'NULL' comment '是否分包商', - "general_contractor_unit" VARCHAR(600) default 'NULL' comment '总包单位全称', - "entry_date" VARCHAR(30) default 'NULL' comment '入场日期', - "expected_departure_date" VARCHAR(30) default 'NULL' comment '预计离场日期', - "office_city" VARCHAR(600) default 'NULL' comment '办公城市', - "office_address" VARCHAR(600) default 'NULL' comment '办公地点', - "is_sign_confidentiality_agreement" VARCHAR(108) default 'NULL' comment '是否签署保密协议(1:是,0:否)', - "email" VARCHAR(600) default 'NULL' comment '电子邮箱', - DHDATASTA INT default 0 comment '推送状态(0新增,1更新)', - "auditor1" VARCHAR(36) comment '处室负责人' - ) - """ - +[ +{ + "db_name":"YJOA_APPSERVICE_DB", + "table_name": "t_pr3rl2oj_yj_person_database", + "table_comment": "人员信息主表,记录人员基本信息、工作信息、审批流程信息等", + "columns": [ + { + "name": "person_status", + "type": "VARCHAR(108)", + "comment": "人员状态", + "values":{ + "1":"草稿", + "2":"审批中", + "3":"制卡中", + "4":"已入库", + "5":"停用" + }, + "role": "dimension", + "tags": ["状态信息"] + }, + { + "name": "gender", + "type": "VARCHAR(108)", + "comment": "性别", + "values": { + "1": "男", + "2": "女" + }, + "role": "dimension", + "tags": ["基本信息", "人口属性"] + }, + { + "name": "id_card", + "type": "VARCHAR(600)", + "comment": "身份证号码", + "role": "dimension", + "tags": ["证件信息", "身份标识"] + }, + { + "name": "input_time", + "type": "DATETIME(39)", + "comment": "录入时间", + "role": "dimension", + "tags": ["时间信息", "操作记录"] + }, + { + "name": "external_unit", + "type": "VARCHAR(600)", + "comment": "外部单位", + "role": "dimension", + "tags": ["组织信息", "外部单位"] + }, + { + "name": "photo", + "type": "TEXT(max)", + "comment": "照片(二进制文本)", + "role": "dimension", + "tags": ["多媒体信息"] + }, + { + "name": "input_user", + "type": "VARCHAR(108)", + "comment": "录入人", + "role": "dimension", + "tags": ["操作人信息"] + }, + { + "name": "is_internal", + "type": "VARCHAR(108)", + "comment": "是否内部员工", + "values": { + "1": "是", + "0": "否" + }, + "role": "dimension", + "tags": ["员工类型", "身份标识"] + }, + { + "name": "phone_number", + "type": "VARCHAR(600)", + "comment": "手机号", + "role": "dimension", + "tags": ["联系方式", "通讯信息"] + }, + { + "name": "external_dept", + "type": "VARCHAR(600)", + "comment": "外部部门", + "role": "dimension", + "tags": ["组织信息", "外部部门"] + }, + { + "name": "pass_type", + "type": "VARCHAR(108)", + "comment": "通行证类型", + "value":{ + "1": "集团公司员工", + "2": "借调人员", + "3":"借用人员", + "4":"外部监管人员", + "5":"外协服务人员", + "6":"工勤人员", + "7":"来访人员", + }, + "role": "dimension", + "tags": ["证件信息", "通行权限"] + }, + { + "name": "expire_time", + "type": "DATETIME(39)", + "comment": "失效时间", + "role": "dimension", + "tags": ["时间信息", "有效期"] + }, + { + "name": "internal_dept", + "type": "VARCHAR(108)", + "comment": "内部部门", + "role": "dimension", + "tags": ["组织信息", "内部架构"] + }, + { + "name": "input_dept", + "type": "VARCHAR(108)", + "comment": "录入部门", + "role": "dimension", + "tags": ["操作部门", "组织信息"] + }, + { + "name": "name", + "type": "VARCHAR(600)", + "comment": "姓名", + "role": "dimension", + "tags": ["基本信息", "身份标识"] + }, + { + "name": "internal_unit", + "type": "VARCHAR(108)", + "comment": "内部单位", + "role": "dimension", + "tags": ["组织信息", "内部架构"] + }, + { + "name": "person_type", + "type": "VARCHAR(108)", + "comment": "人员类型", + "value":{ + "YG":"正式员工", + "PQ":"劳务派遣人员", + "QT":"其他柔性引进人员", + "WHZ":"合作单位", + "WLS":"临时访客", + "WQT":"其他外部人员" + }, + "role": "dimension", + "tags": ["分类信息", "人员分类"] + }, + { + "name": "id", + "type": "VARCHAR(22)", + "comment": "主键ID", + "role": "dimension", + "tags": ["主键", "ID标识"] + }, + { + "name": "pubts", + "type": "DATETIME(39)", + "comment": "发布时间", + "role": "dimension", + "tags": ["时间信息", "系统字段"] + }, + { + "name": "dr", + "type": "INT", + "comment": "逻辑删除标志", + "values": { + "0": "正常", + "1": "已删除" + }, + "role": "dimension", + "tags": ["系统状态", "数据状态"] + }, + { + "name": "code", + "type": "VARCHAR(600)", + "comment": "编码", + "role": "dimension", + "tags": ["编码信息", "业务编码"] + }, + { + "name": "ytenant_id", + "type": "VARCHAR(64)", + "comment": "租户ID", + "role": "dimension", + "tags": ["租户信息", "系统隔离"] + }, + { + "name": "sourcegrand_id", + "type": "VARCHAR(108)", + "comment": "来源表id", + "role": "dimension", + "tags": ["数据来源", "关联信息"] + }, + { + "name": "first_id", + "type": "VARCHAR(108)", + "comment": "来源单据主表id", + "role": "dimension", + "tags": ["数据来源", "关联信息"] + }, + { + "name": "firstchild_id", + "type": "VARCHAR(108)", + "comment": "来源单据子表id", + "role": "dimension", + "tags": ["数据来源", "关联信息"] + }, + { + "name": "firstbusiobj", + "type": "VARCHAR(108)", + "comment": "来源业务对象", + "role": "dimension", + "tags": ["业务对象", "数据来源"] + }, + { + "name": "firstcode", + "type": "VARCHAR(600)", + "comment": "来源单据号", + "role": "dimension", + "tags": ["单据信息", "业务编码"] + }, + { + "name": "verifystate", + "type": "INT", + "comment": "单据状态", + "role": "dimension", + "tags": ["审批状态", "业务流程"] + }, + { + "name": "auditor", + "type": "VARCHAR(180)", + "comment": "终审审批人", + "role": "dimension", + "tags": ["审批信息", "操作人"] + }, + { + "name": "audit_time", + "type": "DATETIME(39)", + "comment": "审批日期", + "role": "dimension", + "tags": ["时间信息", "审批流程"] + }, + { + "name": "auditnote", + "type": "VARCHAR(600)", + "comment": "当前审批人", + "role": "dimension", + "tags": ["审批信息", "操作人"] + }, + { + "name": "procinst_id", + "type": "VARCHAR(108)", + "comment": "流程实例ID", + "role": "dimension", + "tags": ["流程信息", "实例标识"] + }, + { + "name": "bizflow_id", + "type": "VARCHAR(108)", + "comment": "业务流id", + "role": "dimension", + "tags": ["业务流程", "流标识"] + }, + { + "name": "bizflowname", + "type": "VARCHAR(600)", + "comment": "流程名称", + "role": "dimension", + "tags": ["业务流程", "名称描述"] + }, + { + "name": "source_id", + "type": "VARCHAR(108)", + "comment": "上游单据主表id", + "role": "dimension", + "tags": ["数据关联", "上游信息"] + }, + { + "name": "sourcechild_id", + "type": "VARCHAR(108)", + "comment": "上游单据子表id", + "role": "dimension", + "tags": ["数据关联", "上游信息"] + }, + { + "name": "bizflowinstance_id", + "type": "VARCHAR(108)", + "comment": "业务流实例id", + "role": "dimension", + "tags": ["业务流程", "实例标识"] + }, + { + "name": "sourcebusiobj", + "type": "VARCHAR(108)", + "comment": "上游业务对象", + "role": "dimension", + "tags": ["业务对象", "上游信息"] + }, + { + "name": "sourcecode", + "type": "VARCHAR(600)", + "comment": "上游单据号", + "role": "dimension", + "tags": ["单据信息", "业务编码"] + }, + { + "name": "bizflow_makebillcode", + "type": "VARCHAR(600)", + "comment": "单据转换规则编码", + "role": "dimension", + "tags": ["业务流程", "规则编码"] + }, + { + "name": "create_time", + "type": "DATETIME(39)", + "comment": "创建时间", + "role": "dimension", + "tags": ["时间信息", "系统记录"] + }, + { + "name": "modify_time", + "type": "DATETIME(39)", + "comment": "修改时间", + "role": "dimension", + "tags": ["时间信息", "系统记录"] + }, + { + "name": "creator", + "type": "VARCHAR(180)", + "comment": "创建人", + "role": "dimension", + "tags": ["操作人信息", "系统记录"] + }, + { + "name": "modifier", + "type": "VARCHAR(180)", + "comment": "修改人", + "role": "dimension", + "tags": ["操作人信息", "系统记录"] + }, + { + "name": "worker_id", + "type": "VARCHAR(200)", + "comment": "工号", + "role": "dimension", + "tags": ["员工信息", "身份标识"] + }, + { + "name": "to_dept", + "type": "VARCHAR(600)", + "comment": "所属处室", + "role": "dimension", + "tags": ["组织信息", "部门架构"] + }, + { + "name": "id_card_type", + "type": "VARCHAR(108)", + "comment": "身份证件类型", + "value":{ + "1":"身份证", + "2":"护照", + "3":"港澳通行证" + }, + "role": "dimension", + "tags": ["证件信息", "身份标识"] + }, + { + "name": "native_place", + "type": "VARCHAR(600)", + "comment": "籍贯", + "role": "dimension", + "tags": ["基本信息", "籍贯信息"] + }, + { + "name": "nation", + "type": "VARCHAR(600)", + "comment": "民族", + "role": "dimension", + "tags": ["基本信息", "民族信息"] + }, + { + "name": "country", + "type": "VARCHAR(600)", + "comment": "国籍", + "role": "dimension", + "tags": ["基本信息", "国籍信息"] + }, + { + "name": "residence_address", + "type": "VARCHAR(600)", + "comment": "户籍地址", + "role": "dimension", + "tags": ["地址信息", "户籍信息"] + }, + { + "name": "highest_education", + "type": "VARCHAR(108)", + "comment": "最高学历", + "value":{ + "1":"初中", + "2":"高中", + "3":"中专", + "4":"技校", + "5":"职高", + "6":"大专", + "7":"本科", + "8":"硕士", + "9":"博士 " + }, + "role": "dimension", + "tags": ["教育信息", "学历背景"] + }, + { + "name": "highest_degree", + "type": "VARCHAR(108)", + "comment": "最高学位", + "value":{ + "1":"学士学位", + "2":"硕士学位", + "3":"博士学位", + "4":"无" + }, + "role": "dimension", + "tags": ["教育信息", "学位背景"] + }, + { + "name": "graduate_school", + "type": "VARCHAR(600)", + "comment": "毕业院校", + "role": "dimension", + "tags": ["教育信息", "院校背景"] + }, + { + "name": "birthday", + "type": "VARCHAR(30)", + "comment": "出生日期", + "role": "dimension", + "tags": ["时间信息", "个人资料"] + }, + { + "name": "work_date", + "type": "VARCHAR(30)", + "comment": "参加工作日期", + "role": "dimension", + "tags": ["时间信息", "工作经历"] + }, + { + "name": "political_status", + "type": "VARCHAR(600)", + "comment": "政治面貌", + "role": "dimension", + "tags": ["政治信息", "个人属性"] + }, + { + "name": "work_unit", + "type": "VARCHAR(600)", + "comment": "工作单位全称", + "role": "dimension", + "tags": ["工作信息", "单位信息"] + }, + { + "name": "post", + "type": "VARCHAR(600)", + "comment": "职务", + "role": "dimension", + "tags": ["工作信息", "职务信息"] + }, + { + "name": "engage_post", + "type": "VARCHAR(600)", + "comment": "现从事岗位", + "role": "dimension", + "tags": ["工作信息", "岗位信息"] + }, + { + "name": "work_content", + "type": "TEXT(max)", + "comment": "工作内容", + "role": "dimension", + "tags": ["工作信息", "职责描述"] + }, + { + "name": "engage_contract_no", + "type": "VARCHAR(600)", + "comment": "从事项目合同编号", + "role": "dimension", + "tags": ["合同信息", "项目信息"] + }, + { + "name": "engage_contract_name", + "type": "VARCHAR(600)", + "comment": "从事项目合同名称", + "role": "dimension", + "tags": ["合同信息", "项目信息"] + }, + { + "name": "is_subcontractor", + "type": "VARCHAR(108)", + "comment": "是否分包商", + "role": "dimension", + "tags": ["供应商类型", "合作模式"] + }, + { + "name": "general_contractor_unit", + "type": "VARCHAR(600)", + "comment": "总包单位全称", + "role": "dimension", + "tags": ["合作单位", "总包信息"] + }, + { + "name": "entry_date", + "type": "VARCHAR(30)", + "comment": "入场日期", + "role": "dimension", + "tags": ["时间信息", "项目参与"] + }, + { + "name": "expected_departure_date", + "type": "VARCHAR(30)", + "comment": "预计离场日期", + "role": "dimension", + "tags": ["时间信息", "项目参与"] + }, + { + "name": "office_city", + "type": "VARCHAR(600)", + "comment": "办公城市", + "role": "dimension", + "tags": ["地址信息", "办公地点"] + }, + { + "name": "office_address", + "type": "VARCHAR(600)", + "comment": "办公地点", + "role": "dimension", + "tags": ["地址信息", "办公地点"] + }, + { + "name": "is_sign_confidentiality_agreement", + "type": "VARCHAR(108)", + "comment": "是否签署保密协议", + "values": { + "1": "是", + "0": "否" + }, + "role": "dimension", + "tags": ["协议状态", "合规信息"] + }, + { + "name": "email", + "type": "VARCHAR(600)", + "comment": "电子邮箱", + "role": "dimension", + "tags": ["联系方式", "通讯信息"] + }, + { + "name": "DHDATASTA", + "type": "INT", + "comment": "推送状态", + "values": { + "0": "新增", + "1": "更新" + }, + "role": "dimension", + "tags": ["数据同步", "系统状态"] + }, + { + "name": "auditor1", + "type": "VARCHAR(36)", + "comment": "处室负责人", + "role": "dimension", + "tags": ["审批信息", "负责人信息"] + }, + { + "name": "person_count", + "type": "INT", + "comment": "人员数量", + "role": "metric", + "aggregation": "count", + "tags": ["统计指标", "数量统计"] + } + ], + "relationships": [ + { + "from": "ytenant_id", + "to_table": "租户表", + "to_field": "id", + "type": "foreign_key", + "comment": "关联租户信息" + } + ], + "examples": [ + { + "question": "查询内部员工的数量", + "sql": "SELECT COUNT(*) as person_count FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database WHERE is_internal = '1' AND dr = 0" + }, + { + "question": "按性别统计人员分布情况", + "sql": "SELECT gender, COUNT(*) as person_count FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database WHERE dr = 0 GROUP BY gender" + }, + { + "question": "查询最近一个月新增的人员信息", + "sql": "SELECT * FROM YJOA_APPSERVICE_DB.t_pr3rl2oj_yj_person_database WHERE create_time >= ADD_MONTHS(TRUNC(SYSDATE), -1) AND dr = 0" + } + ], + "tags": ["人员管理", "人力资源", "审批流程", "基本信息", "工作信息"], +}, +{ + "db_name":"YJOA_APPSERVICE_DB", + "table_name": "t_yj_person_attendance", + "table_comment": "人员考勤记录表,记录人员的考勤打卡信息", + "columns": [ + { + "name": "person_name", + "type": "VARCHAR(50)", + "comment": "人员姓名", + "role": "dimension", + "tags": ["基本信息", "身份标识"] + }, + { + "name": "id", + "type": "VARCHAR(200)", + "comment": "主键ID", + "role": "dimension", + "tags": ["主键", "ID标识"] + }, + { + "name": "person_id", + "type": "VARCHAR(200)", + "comment": "人员ID", + "role": "dimension", + "tags": ["人员标识", "关联信息"] + }, + { + "name": "phone_number", + "type": "VARCHAR(50)", + "comment": "手机号码", + "role": "dimension", + "tags": ["联系方式", "通讯信息"] + }, + { + "name": "attendance_time", + "type": "DATETIME(39)", + "comment": "考勤时间", + "role": "dimension", + "tags": ["时间信息", "考勤记录"] + }, + { + "name": "attendance_address", + "type": "VARCHAR(200)", + "comment": "考勤地点", + "role": "dimension", + "tags": ["位置信息", "考勤记录"] + }, + { + "name": "status", + "type": "INT", + "comment": "状态", + "value":{ + "1":"在岗", + "2":"出差", + "3":"休假" + }, + "role": "dimension", + "tags": ["状态信息", "考勤状态"] + }, + { + "name": "original_id", + "type": "VARCHAR(200)", + "comment": "原数据ID", + "role": "dimension", + "tags": ["数据来源", "原始标识"] + }, + { + "name": "source", + "type": "VARCHAR(50)", + "comment": "数据来源", + "role": "dimension", + "tags": ["数据来源", "系统标识"] + }, + { + "name": "dr", + "type": "INT", + "comment": "逻辑删除标志", + "role": "dimension", + "tags": ["系统状态", "数据状态"] + }, + { + "name": "create_time", + "type": "DATETIME(39)", + "comment": "创建时间", + "role": "dimension", + "tags": ["时间信息", "系统记录"] + }, + { + "name": "enter_or_exit", + "type": "INT", + "comment": "进出类型", + "value":{ + "1":"进", + "2":"出" + }, + "role": "dimension", + "tags": ["考勤类型", "进出标识"] + }, + { + "name": "access_control_point", + "type": "VARCHAR(50)", + "comment": "门禁点", + "role": "dimension", + "tags": ["位置信息", "门禁设备"] + }, + { + "name": "bv_st", + "type": "VARCHAR(20)", + "comment": "上午打卡时间", + "role": "dimension", + "tags": ["时间信息", "业务时间"] + }, + { + "name": "bv_et", + "type": "VARCHAR(20)", + "comment": "下午打卡时间", + "role": "dimension", + "tags": ["时间信息", "业务时间"] + }, + { + "name": "bv_st_field", + "type": "VARCHAR(50)", + "comment": "午休前打卡时间", + "role": "dimension", + "tags": ["时间信息", "业务字段"] + }, + { + "name": "bv_et_field", + "type": "VARCHAR(50)", + "comment": "午休后打卡时间", + "role": "dimension", + "tags": ["时间信息", "业务字段"] + }, + { + "name": "bv_go_type", + "type": "VARCHAR(8)", + "comment": "打卡类型", + "role": "dimension", + "tags": ["业务类型", "分类信息"] + }, + ], + "relationships": [ + { + "from": "person_id", + "to_table": "t_pr3rl2oj_yj_person_database", + "to_field": "id", + "type": "foreign_key", + "comment": "关联人员基本信息表" + } + ], + "examples": [ + { + "question": "查询今日考勤总人次", + "sql": "SELECT COUNT(*) as attendance_count FROM YJOA_APPSERVICE_DB.t_yj_person_attendance WHERE TO_CHAR(attendance_time, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD') AND dr = '0'" + }, + { + "question": "按人员统计本月考勤次数", + "sql": "SELECT person_name, COUNT(*) as attendance_count FROM YJOA_APPSERVICE_DB.t_yj_person_attendance WHERE TO_CHAR(attendance_time, 'YYYY-MM') = TO_CHAR(SYSDATE, 'YYYY-MM') AND dr = '0' GROUP BY person_name, person_id" + }, + { + "question": "查询最近一周的考勤记录", + "sql": "SELECT * FROM YJOA_APPSERVICE_DB.t_yj_person_attendance WHERE attendance_time >= SYSDATE - 7 AND dr = '0' ORDER BY attendance_time DESC" + }, + { + "question": "统计各门禁点的考勤分布", + "sql": "SELECT access_control_point, COUNT(*) as attendance_count FROM YJOA_APPSERVICE_DB.t_yj_person_attendance WHERE dr = '0' GROUP BY access_control_point" + } + ], + "tags": ["考勤管理", "人员考勤", "门禁记录", "时间统计", "考勤分析"] +}, +{ + "db_name":"YJOA_APPSERVICE_DB", + "table_name": "t_yj_person_attendance_rules", + "table_comment": "人员考勤规则表,定义考勤时间规则和区域设置", + "columns": [ + { + "name": "id", + "type": "VARCHAR(50)", + "comment": "主键ID", + "role": "dimension", + "tags": ["主键", "ID标识"] + }, + { + "name": "morning_check_time", + "type": "VARCHAR(50)", + "comment": "上午打卡时间", + "role": "dimension", + "tags": ["时间规则", "考勤设置"] + }, + { + "name": "afternoon_check_time", + "type": "VARCHAR(50)", + "comment": "下午打卡时间", + "role": "dimension", + "tags": ["时间规则", "考勤设置"] + }, + { + "name": "before_lunch_time", + "type": "VARCHAR(50)", + "comment": "午餐前时间", + "role": "dimension", + "tags": ["时间规则", "考勤分段"] + }, + { + "name": "after_lunch_time", + "type": "VARCHAR(50)", + "comment": "午餐后时间", + "role": "dimension", + "tags": ["时间规则", "考勤分段"] + }, + { + "name": "region", + "type": "VARCHAR(50)", + "comment": "区域", + "value":{ + "1":"北京", + "2":"成都", + "3":"秭归", + "4":"拉萨", + "5": "林芝" + }, + "role": "dimension", + "tags": ["区域设置", "地理信息"] + }, + ], + "relationships": [ + { + "from": "region", + "to_table": "区域配置表", + "to_field": "region_code", + "type": "foreign_key", + "comment": "关联区域配置信息" + } + ], + "examples": [ + { + "question": "查询所有考勤规则列表", + "sql": "SELECT * FROM t_yj_person_attendance_rules" + }, + { + "question": "统计各区域的考勤规则数量", + "sql": "SELECT region, COUNT(*) as rule_count FROM YJOA_APPSERVICE_DB.t_yj_person_attendance_rules GROUP BY region" + }, + { + "question": "查询特定区域的考勤时间设置", + "sql": "SELECT morning_check_time, afternoon_check_time, before_lunch_time, after_lunch_time FROM YJOA_APPSERVICE_DB.t_yj_person_attendance_rules WHERE region = '北京'" + }, + { + "question": "检查是否存在重复的考勤规则", + "sql": "SELECT region, morning_check_time, afternoon_check_time, COUNT(*) as rule_count FROM YJOA_APPSERVICE_DB.t_yj_person_attendance_rules GROUP BY region, morning_check_time, afternoon_check_time HAVING COUNT(*) > 1" + } + ], + "tags": ["考勤规则", "时间设置", "区域配置", "考勤管理", "规则定义"] +}, +{ + "db_name":"YJOA_APPSERVICE_DB", + "table_name": "t_yj_person_status", + "table_comment": "人员状态记录表,记录人员每日考勤状态信息包括西藏地区标识", + "columns": [ + { + "name": "id", + "type": "BIGINT", + "comment": "主键ID", + "role": "dimension", + "tags": ["主键", "id标识"] + }, + { + "name": "person_id", + "type": "VARCHAR(50)", + "comment": "人员ID", + "role": "dimension", + "tags": ["人员标识", "关联信息"] + }, + { + "name": "status", + "type": "VARCHAR(10)", + "comment": "人员状态", + "value":{ + "1001":"在岗", + "1002":"出差", + "1003":"休假", + "1005":"旷工", + "1006":"迟到早退", + "1007":"休息日", + "4001":"am在岗pm缺勤", + "4002":"am缺勤pm在岗", + "6001":"am在岗pm早退", + "6002":"am迟到pm在岗", + "6004":"am迟到pm缺勤", + "4006":"am缺勤pm早退" + }, + "role": "dimension", + "tags": ["状态信息", "人员状态"] + }, + { + "name": "date_value", + "type": "VARCHAR(20)", + "comment": "日期值", + "role": "dimension", + "tags": ["时间信息", "日期记录"] + }, + { + "name": "dr", + "type": "INT", + "comment": "逻辑删除标志", + "role": "dimension", + "tags": ["系统状态", "数据状态"] + }, + { + "name": "create_time", + "type": "DATETIME(39)", + "comment": "创建时间", + "role": "dimension", + "tags": ["时间信息", "系统记录"] + }, + { + "name": "is_in_tibet", + "type": "INT", + "comment": "是否在西藏地区", + "role": "dimension", + "tags": ["地区标识", "地理位置"] + } + ], + "relationships": [ + { + "from": "person_id", + "to_table": "t_pr3rl2oj_yj_person_database", + "to_field": "id", + "type": "foreign_key", + "comment": "关联人员基本信息表" + } + ], + "examples": [ + { + "question": "查询今日人员状态记录数量", + "sql": "SELECT COUNT(*) as status_count FROM YJOA_APPSERVICE_DB.t_yj_person_status WHERE date_value = DATE_FORMAT(CURRENT_DATE(), '%Y-%m-%d') AND dr = 0" + }, + { + "question": "统计各状态的人员分布", + "sql": "SELECT status, COUNT(*) as status_count FROM YJOA_APPSERVICE_DB.t_yj_person_status WHERE dr = '0' GROUP BY status" + }, + { + "question": "查询在西藏地区的人员数量", + "sql": "SELECT COUNT(DISTINCT person_id) as tibet_person_count FROM YJOA_APPSERVICE_DB.t_yj_person_status WHERE is_in_tibet = 1 AND dr = 0" + }, + { + "question": "按日期统计人员状态记录", + "sql": "SELECT date_value, status, COUNT(*) as status_count FROM YJOA_APPSERVICE_DB.t_yj_person_status WHERE dr = '0' GROUP BY date_value, status ORDER BY date_value DESC" + }, + { + "question": "查询特定人员的状态历史记录", + "sql": "SELECT date_value, status, is_in_tibet FROM YJOA_APPSERVICE_DB.t_yj_person_status WHERE person_id = '123' AND dr = 0 ORDER BY date_value DESC" + } + ], + "tags": ["人员状态", "状态记录", "地区管理", "西藏标识", "每日状态"] +} +] +""" train_document=''' 语法为达梦数据库语法; 查询地址,籍贯,公司,单位时,尽量使用like查询; 查询人员信息时,由于数据表字段过多。只需要展示人员关键信息字段,id,工号,姓名,单位以及用户问题中需要查询的字段; 表字段信息以及字段枚举信息: - - YJOA_APPSERVICE_DB."t_pr3rl2oj_yj_person_database"(人员信息表); - - person_status: 人员状态 (1:草稿,2:审批中,3:制卡中,4:已入库,5:停用); - pass_type: 通行证类型 ( - 1:集团公司员工, - 2:借调人员, - 3:借用人员, - 4:外部监管人员, - 5:外协服务人员, - 6:工勤人员, - 7:来访人员 - ); - person_type: 人员类型 ( - YG:正式员工, - PQ:劳务派遣人员, - QT:其他柔性引进人员, - WHZ:合作单位, - WLS:临时访客, - WQT:其他外部人员 - ); - id_card_type: 身份证件类型 (1:身份证,2:护照,3:港澳通行证); - highest_education: 最高学历 ( - 1:初中 - 2:高中 - 3:中专 - 4:技校 - 5:职高 - 6:大专 - 7:本科 - 8:硕士 - 9:博士 - ); - highest_degree: 最高学位 (1:学士学位,2:硕士学位,3:博士学位,4:无); - -
''' \ No newline at end of file diff --git a/util/utils.py b/util/utils.py index b01a0f9..93c7429 100644 --- a/util/utils.py +++ b/util/utils.py @@ -3,7 +3,7 @@ from typing import Optional from orjson import orjson keywords = { - "gender":{"1":"男","2":"女"}, + # "gender":{"1":"男","2":"女"}, "person_status":{"1":"草稿","2":"审批中","3":"制卡中","4":"已入库","5":"停用"}, "pass_type":{"1":"集团公司员工","2":"借调人员","3":"借用人员","4":"外部监管人员","5":"外协服务人员","6":"工勤人员","7":"来访人员"}, "person_type": {"YG":"正式员工","PQ":"劳务派遣人员","QT":"其他柔性引进人员","WHZ":"合作单位","WLS":"临时访客","WQT":"其他外部人员"}, @@ -90,10 +90,12 @@ def deal_result(data: list) -> list: for key, map_value in keywords.items(): if key in item: new_key = item.get(key) - item[key] = map_value[new_key] + if new_key in map_value: + item[key] = map_value[new_key] print("data----------{0}".format(data)) return data except Exception as e: + print("1111111111111111111111111111111111111111",e) raise Exception(f"sql执行结果处理失败:{str(e)}")