import os import re from datetime import datetime from flask import render_template, request from common.logger import system_logger # ========================= # 路径 # ========================= BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) UPLOAD_FOLDER = os.path.join(BASE_DIR, "uploads") OUTPUT_FOLDER = os.path.join(BASE_DIR, "output") os.makedirs(UPLOAD_FOLDER, exist_ok=True) os.makedirs(OUTPUT_FOLDER, exist_ok=True) # ========================= # 工具:时间 # ========================= def now_str(): return datetime.now().strftime("%Y-%m-%d %H:%M:%S") # ========================= # 校验工号 # ========================= def validate_emp_id(emp_id: str): if not emp_id: return False, "工作证号不能为空" if not re.fullmatch(r"\d{8}", emp_id): return False, "工作证号必须为8位数字(如 00313390)" return True, None # ========================= # SQL:授权模式(原逻辑) # ========================= def build_auth_sql(center_name: str, emp_id: str): like_center = f"%{center_name}%" ts = now_str() return f"""-- ========================================= -- 每周动态人员授权 SQL(标准版) -- 生成时间: {ts} -- 中心: {center_name} -- 工号: {emp_id} -- ========================================= -- ========================= -- Step 1: 获取部门ID -- ========================= select f_id as department_id from wd_department where f_name like '{like_center}'; -- ========================= -- Step 2: 查询部门下已有人员配置 -- ========================= select * from wd_user where f_department = ( select f_id from wd_department where f_name like '{like_center}' ); -- ========================= -- Step 3: 查询人员基础信息 -- ========================= select f_user_id, f_user_name, t.f_phone from t_wxdept_users t where f_user_id = '{emp_id}'; -- ========================= -- Step 4: 获取新增主键 -- ========================= select max(f_id) + 1 as f_id from wd_user; -- ========================= -- Step 5: 新增用户(授权核心) -- ========================= insert into wd_user values( '主键', '人员姓名', '{emp_id}', ( select f_id from wd_department where f_name like '{like_center}' ), 0, '手机号', now() ); commit; -- ========================= -- Step 6: 更新用户信息(兜底同步) -- ========================= update wd_user set f_name = '人员姓名', f_uid = '{emp_id}', f_desc = '{emp_id}' where f_id = 10182; commit; """ # ========================= # SQL:重复动态处理(新增核心) # ========================= def build_rebuild_sql(center_name: str): like_center = f"%{center_name}%" ts = now_str() return f"""-- ========================================= -- 重复动态处理 SQL -- 生成时间: {ts} -- 中心: {center_name} -- ========================================= -- 1. 获取部门ID select * from wd_department where f_name like '{like_center}'; -- 2. 获取最新关联动态ID select * from wd_department where f_name like '{like_center}'; -- 3. 查最新通知记录(按时间) select * from wd_document where f_department_id = ( select f_id from wd_department where f_name like '{like_center}' ) order by f_create_date desc; -- 4. 查重复通知ID(示例) select * from wd_document where f_department_id = ( select f_id from wd_department where f_name like '{like_center}' ) and f_id in (44992, 44991) order by f_create_date desc; -- 5. 查附件 select * from wd_attachment where f_document in (44992, 44991); -- 6. 删除重复通知(保留最新) delete from wd_document where f_department_id = ( select f_id from wd_department where f_name like '{like_center}' ) and f_id in (44991); delete from wd_attachment where f_document in (44991); -- 7. 重新确认 select * from wd_document where f_department_id = ( select f_id from wd_department where f_name like '{like_center}' ); select * from wd_attachment where f_document in (44991); """ # ========================= # 页面入口 # ========================= def weekly_permission_page(): sql_text = None message = None center_name = "" emp_id = "" try: if request.method == "POST": center_name = (request.form.get("center_name") or "").strip() emp_id = (request.form.get("emp_id") or "").strip() action = (request.form.get("action") or "auth").strip() # ===== 校验 ===== if not center_name: raise Exception("中心名称不能为空") ok, err = validate_emp_id(emp_id) if not ok: raise Exception(err) # ===== 分流核心 ===== if action == "auth": sql_text = build_auth_sql(center_name, emp_id) message = "授权SQL生成成功" elif action == "rebuild": sql_text = build_rebuild_sql(center_name) message = "重复动态处理SQL生成成功" else: raise Exception("未知操作类型") system_logger.info( f"[WeeklySQL] action={action}, center={center_name}, emp_id={emp_id}" ) except Exception as e: message = f"错误:{str(e)}" system_logger.exception("[WeeklyPermission ERROR]") return render_template( "weekly_permission.html", sql_text=sql_text, message=message, center_name=center_name, emp_id=emp_id )