|
|
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
|
|
|
) |