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)}) | ||||
|  | ||||
|  | ||||
| @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__': | ||||
|  | ||||
|     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 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 | ||||
|  | ||||
| ] | ||||
|   | ||||
| @@ -214,13 +214,18 @@ question_and_answer = [ | ||||
|     { | ||||
|         "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 '%数信中心%') | ||||
|                     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 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 | ||||
|                   GROUP BY o.name | ||||
|                   ORDER BY "人数" DESC LIMIT 1000 | ||||
|                     GROUP BY o.name | ||||
|                     ORDER BY "人数" DESC  | ||||
|                     LIMIT 1000 | ||||
|                   ''' | ||||
|     }, { | ||||
|         "question": "张三9月在林芝工作有多少天", | ||||
| @@ -267,6 +272,43 @@ question_and_answer = [ | ||||
|                   WHERE ps."status" = '1006' | ||||
|                     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", | ||||
| @@ -116,14 +126,14 @@ person_ddl_sql = """ | ||||
|     { | ||||
|       "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_ddl_sql = """ | ||||
|     { | ||||
|       "name": "internal_unit", | ||||
|       "type": "VARCHAR(108)", | ||||
|       "comment": "内部单位", | ||||
|       "comment": "内部单位ID", | ||||
|       "role": "dimension", | ||||
|       "tags": ["组织信息", "内部架构"] | ||||
|     }, | ||||
| @@ -163,7 +173,7 @@ person_ddl_sql = """ | ||||
|       "role": "dimension", | ||||
|       "tags": ["主键", "ID标识"] | ||||
|     }, | ||||
|    | ||||
|  | ||||
|     { | ||||
|       "name": "dr", | ||||
|       "type": "INT", | ||||
| @@ -189,7 +199,7 @@ person_ddl_sql = """ | ||||
|       "role": "dimension", | ||||
|       "tags": ["租户信息", "系统隔离"] | ||||
|     }, | ||||
|    | ||||
|  | ||||
|     { | ||||
|       "name": "create_time", | ||||
|       "type": "DATETIME(39)", | ||||
| @@ -204,8 +214,8 @@ person_ddl_sql = """ | ||||
|       "role": "dimension", | ||||
|       "tags": ["时间信息", "系统记录"] | ||||
|     }, | ||||
|     | ||||
|    | ||||
|  | ||||
|  | ||||
|     { | ||||
|       "name": "to_dept", | ||||
|       "type": "VARCHAR(600)", | ||||
| @@ -445,42 +455,34 @@ person_ddl_sql = """ | ||||
|     { | ||||
|       "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模糊查询; | ||||
|                 没有明确说明查询外部单位,都默认查询通过orgs查询单位; | ||||
|         ''' | ||||
|  | ||||
| rule_ddl=''' | ||||
|  | ||||
| person_attendance_rule_ddl=''' | ||||
| { | ||||
|   "db_name":"YJOA_APPSERVICE_DB", | ||||
|   "table_name": "t_yj_person_attendance_rules", | ||||
| @@ -550,7 +552,7 @@ rule_ddl=''' | ||||
| } | ||||
| ''' | ||||
|  | ||||
| user_status_ddl=''' | ||||
| person_status_ddl=''' | ||||
| { | ||||
|   "db_name":"YJOA_APPSERVICE_DB", | ||||
|   "table_name": "t_yj_person_status", | ||||
| @@ -634,7 +636,7 @@ user_status_ddl=''' | ||||
| } | ||||
| ''' | ||||
|  | ||||
| user_attendance_ddl = ''' | ||||
| person_attendance_ddl = ''' | ||||
| { | ||||
|   "db_name": "YJOA_APPSERVICE_DB", | ||||
|   "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 = ''' | ||||
| { | ||||
|   "db_name":"YJOA_APPSERVICE_DB", | ||||
| @@ -800,8 +868,13 @@ person_ac_position = ''' | ||||
|       "type": "foreign_key", | ||||
|       "comment": "关联门禁区域关系表" | ||||
|     }, | ||||
|   ], | ||||
|   | ||||
|     { | ||||
|       "from": "position", | ||||
|       "to_table": "t_yj_person_ac_area", | ||||
|       "to_field": "area", | ||||
|       "type": "foreign_key", | ||||
|       "comment": "关联门禁区域关系表" | ||||
|     }, | ||||
|   "tags": ["门禁控制点","门禁位置"] | ||||
| } | ||||
| ''' | ||||
| @@ -834,7 +907,11 @@ person_ac_area = ''' | ||||
|         "1":"北京", | ||||
|         "2":"成都", | ||||
|         "3":"秭归", | ||||
|         "5":"林芝" | ||||
|         "4":"林芝市区", | ||||
|         "5":"拉萨", | ||||
|         "6":"米林", | ||||
|         "7":"派镇", | ||||
|         "8":"墨脱", | ||||
|       }, | ||||
|       "role": "dimension", | ||||
|       "tags": ["门禁所属地区"] | ||||
| @@ -845,7 +922,6 @@ person_ac_area = ''' | ||||
| } | ||||
| ''' | ||||
|  | ||||
|  | ||||
| org_orgs_ddl = ''' | ||||
| { | ||||
|   "db_name":"IUAP_APDOC_BASEDOC", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user