律所系统后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
6.2 KiB

##角色查询和更新
UPDATE t_role_employee re
SET role_id = 35
WHERE EXISTS (
SELECT 1
FROM t_institutions_punish ti
LEFT JOIN t_department td
ON ti.name = td.department_name COLLATE utf8mb4_0900_ai_ci
LEFT JOIN t_employee te
ON ti.principal = te.actual_name COLLATE utf8mb4_0900_ai_ci
AND td.department_id = te.department_id
WHERE ti.principal IS NOT NULL
AND te.employee_id IS NOT NULL
AND te.employee_id = re.employee_id
);
启动脚本
nohup java -server -Xms1024m -Xmx1024m -jar yun-admin-prod-3.0.0.jar > yun-admin-nohup.out 2>&1 &
查询新增律师数据:
SELECT a.*,t.department_id
FROM t_lawyers_punish_20261 a
LEFT JOIN t_department t ON a.practice_institution = t.department_name
WHERE a.user_id NOT IN(
SELECT CONVERT(login_name USING utf8mb4) COLLATE utf8mb4_unicode_ci
FROM t_employee
)
如果departmentId有空的可能是新增的机构
第二个sql
SELECT
a.user_id as login_name,
a.full_name as actual_name,
a.mobile_phone as phone,
a.practice_certificate_no as certificate_number,
CASE
WHEN a.gender = '男' THEN 1
WHEN a.gender = '女' THEN 2
ELSE NULL
END as gender,
t.department_id as department_id
FROM t_lawyers_punish_20261 a
LEFT JOIN t_department t ON a.practice_institution = t.department_name
WHERE a.user_id NOT IN(
SELECT CONVERT(login_name USING utf8mb4) COLLATE utf8mb4_unicode_ci
FROM t_employee
)
AND t.department_id IS NOT NULL
给新增的人员复制律师权限
SELECT employee_id, 35 as role_id from t_employee where employee_id not in (select employee_id from t_role_employee)
查询有没有变更机构的
-- 获取每个 user_id 的最新一条处罚记录(按 id 降序取第一条)
WITH latest_punish AS (
SELECT lp.user_id, lp.practice_institution
FROM (
SELECT user_id, practice_institution,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id DESC) AS rn
FROM t_lawyers_punish
) lp
WHERE lp.rn = 1
),
-- 当前员工机构信息
current_employee AS (
SELECT a.login_name, t.department_name AS current_institution,
t.department_id -- 如果需要直接更新部门ID,保留此字段
FROM t_employee a
LEFT JOIN t_department t ON a.department_id = t.department_id
)
-- 找出需要更新的记录
SELECT
lp.user_id AS identifier,
lp.practice_institution AS original_institution,
ce.current_institution,
ce.department_id AS current_department_id,
-- 尝试匹配部门名称到 department_id(如果 practice_institution 与 t_department.name 一致)
(SELECT department_id FROM t_department WHERE department_name = lp.practice_institution COLLATE utf8mb4_unicode_ci LIMIT 1) AS target_department_id,
CASE
WHEN ce.login_name IS NULL THEN '员工不存在于当前系统'
WHEN lp.practice_institution IS NULL THEN '原始机构为空'
WHEN lp.practice_institution != ce.current_institution OR (ce.current_institution IS NULL AND lp.practice_institution IS NOT NULL) THEN '机构不一致'
ELSE '一致'
END AS update_needed
FROM latest_punish lp
LEFT JOIN current_employee ce ON lp.user_id COLLATE utf8mb4_unicode_ci = ce.login_name
WHERE
-- 只筛选出需要更新的情况:员工存在且机构不一致
ce.login_name IS NOT NULL
AND (lp.practice_institution != ce.current_institution
OR (ce.current_institution IS NULL AND lp.practice_institution IS NOT NULL));
进行更新
UPDATE t_employee e
JOIN (
WITH latest_punish AS (
-- 取每个user_id的最新一条处罚记录(按id倒序取第一条,若用日期字段请调整ORDER BY)
SELECT lp.user_id COLLATE utf8mb4_unicode_ci AS user_id,
lp.practice_institution COLLATE utf8mb4_unicode_ci AS practice_institution
FROM (
SELECT user_id, practice_institution,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id DESC) AS rn
FROM t_lawyers_punish
) lp
WHERE lp.rn = 1
),
current_employee AS (
-- 当前员工机构信息,统一转为utf8mb4_unicode_ci
SELECT a.login_name COLLATE utf8mb4_unicode_ci AS login_name,
t.department_name COLLATE utf8mb4_unicode_ci AS current_institution,
t.department_id
FROM t_employee a
LEFT JOIN t_department t ON a.department_id = t.department_id
)
SELECT
lp.user_id AS identifier, -- 已统一collation
lp.practice_institution AS original_institution,
ce.current_institution,
ce.department_id AS current_department_id,
-- 尝试将原始机构名称匹配到部门表,获取目标department_id
(SELECT department_id FROM t_department
WHERE department_name COLLATE utf8mb4_unicode_ci = lp.practice_institution
LIMIT 1) AS target_department_id,
CASE
WHEN ce.login_name IS NULL THEN '员工不存在于当前系统'
WHEN lp.practice_institution IS NULL THEN '原始机构为空'
WHEN lp.practice_institution != ce.current_institution
OR (ce.current_institution IS NULL AND lp.practice_institution IS NOT NULL) THEN '机构不一致'
ELSE '一致'
END AS update_needed
FROM latest_punish lp
LEFT JOIN current_employee ce ON lp.user_id = ce.login_name -- 两边collation已统一
WHERE ce.login_name IS NOT NULL
AND (lp.practice_institution != ce.current_institution
OR (ce.current_institution IS NULL AND lp.practice_institution IS NOT NULL))
) tmp ON e.login_name COLLATE utf8mb4_unicode_ci = tmp.identifier -- 转换e.login_name以匹配
SET e.department_id = tmp.target_department_id
WHERE tmp.target_department_id IS NOT NULL;
-----内勤角色-----
SELECT DISTINCT a.position_name as login_name,a.name as actual_name,a.phone as phone, 1 as certificate_number,
1 as gender,
t.department_id as department_id
FROM t_employee_import a
LEFT JOIN t_department t ON a.law_firm = t.department_name
WHERE a.position_name NOT IN(
SELECT CONVERT(login_name USING utf8mb4) COLLATE utf8mb4_unicode_ci
FROM t_employee
)
SELECT employee_id, 40 as role_id from t_employee where employee_id not in (select employee_id from t_role_employee)