@liruiyi962464
2025-04-03T07:18:40.000000Z
字数 16160
阅读 28
mysql
mysql -h 202.207.122.44 -u data_sync -p'L$7cx&6W*7zJ##po'
mysql -u root -p'Zc2024rJ'
USE cpoc_sync
SHOW TABLES;
SELECT VERSION();
-- 确保目标表使用兼容的字符集
ALTER TABLE ODS_SXJCSJ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE ODS_SXBXGMQKSJ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE ODS_SXBGJLSJ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE ODS_TYYHRZDLSJ_SXXT CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE federated_intern_basic_data CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE federated_intern_insurance CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE federated_intern_report CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE federated_user_auth_data CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 检查是否支持FEDERATED引擎
SHOW ENGINES;
-- 如果没有启用,需要在my.cnf/my.ini中添加
[mysqld]
federated
-- 开启后 参考sql执行即可
要将你的存储过程设置为每天早上6点自动执行,可以使用 MySQL 的事件调度器(Event Scheduler)。以下是完整的实现步骤:
-- 检查事件调度器状态
SHOW VARIABLES LIKE 'event_scheduler';
-- 如果未启用,执行以下命令(需要SUPER权限)
SET GLOBAL event_scheduler = ON;
DELIMITER //
CREATE EVENT daily_sync_event
ON SCHEDULE
EVERY 1 DAY
STARTS TIMESTAMP(CURRENT_DATE, '06:00:00')
DO
BEGIN
CALL sync_all_data_to_server_b();
END //
DELIMITER ;
SHOW EVENTS;
ALTER EVENT daily_sync_event
ON SCHEDULE
EVERY 1 DAY
STARTS TIMESTAMP(CURRENT_DATE, '06:00:00')
DO
CALL sync_all_data_to_server_b();
-- 禁用事件
ALTER EVENT daily_sync_event DISABLE;
-- 启用事件
ALTER EVENT daily_sync_event ENABLE;
DROP EVENT IF EXISTS daily_sync_event;
权限要求:
EVENT
权限错误处理:
服务器时间:
SELECT @@global.time_zone, @@session.time_zone;
长期运行:
日志记录:
-- 删除实习成绩数据表
DROP TABLE IF EXISTS ODS_SXJCSJ;
-- 删除实习保险购买情况表
DROP TABLE IF EXISTS ODS_SXBXGMQKSJ;
-- 删除实习报告记录表
DROP TABLE IF EXISTS ODS_SXBGJLSJ;
-- 删除统一用户认证登录数据表
DROP TABLE IF EXISTS ODS_TYYHRZDLSJ_SXXT;
-- 在B服务器上执行以下SQL创建目标表
-- 实习基础数据子类表
CREATE TABLE IF NOT EXISTS ODS_SXJCSX (
`ZJSJWYXBS` varchar(32) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XXDM` varchar(10) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XH` varchar(20) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XSXM` varchar(108) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`ZYH` varchar(64) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`ZYMC` varchar(60) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`BJMC` varchar(60) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XZM` varchar(2) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XQM` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXSFKS` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXSFJS` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXQYHYLBM` varchar(4) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXNR` text COLLATE utf8mb4_general_ci,
`SFDK` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXAPM` varchar(2) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXXSM` varchar(2) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXSC` decimal(5,0) DEFAULT NULL,
`SXCJ` decimal(20,1) DEFAULT NULL,
`SXKSRQ` varchar(8) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXJSRQ` varchar(8) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXQYMC` varchar(200) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXDDSZSJGBM` varchar(6) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXDDSZSJGMC` varchar(60) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXDDSZSHJGBM` varchar(6) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXDDSZSHJGMC` varchar(60) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XNZDJSGH` varchar(20) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XNZDJSXM` varchar(36) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`NZDJSDH` varchar(30) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`QYZMZDRYXM` varchar(36) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`QYZMZDRYDH` varchar(30) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`ZFSXXSSJBC` varchar(10) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XJJDZXDH` varchar(30) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SFQDSFXY` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SFKSSX` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SFFGWSX` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`RXNF` varchar(4) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SJCJSJ` varchar(15) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
)DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 实习保险购买情况表
CREATE TABLE IF NOT EXISTS ODS_SXBXGMQKSX (
`ZJSJWYXBS` varchar(32) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XXDM` varchar(10) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XH` varchar(20) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XSXM` varchar(36) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`BXXZMC` varchar(120) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`BDH` varchar(64) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`BXFCZFMC` varchar(200) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`BXGMRQ` varchar(7) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`BXGMFM` varchar(2) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`GMBXZLM` varchar(2) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SJCJSJ` varchar(15) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
)DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 实习报告记录表
CREATE TABLE IF NOT EXISTS ODS_SXBGJLSX (
`ZJSJWYXBS` varchar(32) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XXDM` varchar(10) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XH` varchar(20) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XSXM` varchar(108) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXQYMC` varchar(180) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXGWMC` varchar(100) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXZDJS` varchar(36) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXBGLBM` varchar(2) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXBGNRZY` varchar(500) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXBGNR` varchar(999) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SXBGTJRQ` varchar(8) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`JSPYZTM` varchar(1) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SJCJSJ` varchar(15) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
)DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 统一用户认证登录数据表
CREATE TABLE IF NOT EXISTS ODS_TYYHRZDLSJ_SXXT (
`ZJSJWYXBS` varchar(32) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`XXDM` varchar(10) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`DLZH` varchar(30) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`JS` varchar(60) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SZBMMC` varchar(200) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`DLSJ` varchar(15) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`DLIP` varchar(128) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`ZHZTM` varchar(2) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`SJCJ` varchar(15) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
)DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 在A服务器上执行以下SQL创建FEDERATED表
-- 实习基础数据FEDERATED表
CREATE TABLE IF NOT EXISTS federated_intern_basic_data (
ZJSJWYXBS VARCHAR(32),
XXDM VARCHAR(10),
XH VARCHAR(20),
XSXM VARCHAR(108),
ZYH VARCHAR(64),
ZYMC VARCHAR(60),
BJMC VARCHAR(60),
XZM VARCHAR(2),
XQM VARCHAR(1),
SXSFKS VARCHAR(1),
SXSFJS VARCHAR(1),
SXQYHYLBM VARCHAR(4),
SXNR TEXT(2000),
SFDK VARCHAR(1),
SXAPM VARCHAR(2),
SXXSM VARCHAR(2),
SXSC DECIMAL(5,0),
SXCJ DECIMAL(20,1),
SXKSRQ VARCHAR(8),
SXJSRQ VARCHAR(8),
SXQYMC VARCHAR(200),
SXDDSZSJGBM VARCHAR(6),
SXDDSZSJGMC VARCHAR(60),
SXDDSZSHJGBM VARCHAR(6),
SXDDSZSHJGMC VARCHAR(60),
XNZDJSGH VARCHAR(20),
XNZDJSXM VARCHAR(36),
NZDJSDH VARCHAR(30),
QYZMZDRYXM VARCHAR(36),
QYZMZDRYDH VARCHAR(30),
ZFSXXSSJBC VARCHAR(10),
XJJDZXDH VARCHAR(30),
SFQDSFXY VARCHAR(1),
SFKSSX VARCHAR(1),
SFFGWSX VARCHAR(1),
RXNF VARCHAR(4),
SJCJSJ VARCHAR(15)
) ENGINE=FEDERATED
CONNECTION='mysql://data_sync:L$7cx&6W*7zJ##po@202.207.122.44:3306/cpoc_sync/ODS_SXJCSJ'
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 实习保险购买情况FEDERATED表
CREATE TABLE IF NOT EXISTS federated_intern_insurance (
ZJSJWYXBS VARCHAR(32),
XXDM VARCHAR(10),
XH VARCHAR(20),
XSXM VARCHAR(36),
BXXZMC VARCHAR(120),
BDH VARCHAR(64),
BXFCZFMC VARCHAR(200),
BXGMRQ VARCHAR(7),
BXGMFM VARCHAR(2),
GMBXZLM VARCHAR(2),
SJCJSJ VARCHAR(15)
) ENGINE=FEDERATED
CONNECTION='mysql://data_sync:L$7cx&6W*7zJ##po@202.207.122.44:3306/cpoc_sync/ODS_SXBXGMQKSJ'
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 实习报告记录FEDERATED表
CREATE TABLE IF NOT EXISTS federated_intern_report (
ZJSJWYXBS VARCHAR(32),
XXDM VARCHAR(10),
XH VARCHAR(20),
XSXM VARCHAR(108),
SXQYMC VARCHAR(180),
SXGWMC VARCHAR(100),
SXZDJS VARCHAR(36),
SXBGLBM VARCHAR(2),
SXBGNRZY VARCHAR(500),
SXBGNR VARCHAR(999),
SXBGTJRQ VARCHAR(8),
JSPYZTM VARCHAR(1),
SJCJSJ VARCHAR(15)
) ENGINE=FEDERATED
CONNECTION='mysql://data_sync:L$7cx&6W*7zJ##po@202.207.122.44:3306/cpoc_sync/ODS_SXBGJLSJ'
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 统一用户认证登录数据FEDERATED表
CREATE TABLE IF NOT EXISTS federated_user_auth_data (
ZJSJWYXBS VARCHAR(32),
XXDM VARCHAR(10),
DLZH VARCHAR(30),
JS VARCHAR(60),
SZBMMC VARCHAR(200),
DLSJ VARCHAR(15),
DLIP VARCHAR(128),
ZHZTM VARCHAR(2),
SJCJ VARCHAR(15)
) ENGINE=FEDERATED
CONNECTION='mysql://data_sync:L$7cx&6W*7zJ##po@202.207.122.44:3306/cpoc_sync/ODS_TYYHRZDLSJ_SXXT'
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 在A服务器创建同步存储过程
DELIMITER //
-- 同步实习基础数据
CREATE DEFINER=`root`@`%` PROCEDURE `sync_intern_basic_data`()
BEGIN
-- 新增字符集设置
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
-- 先清空远程表
TRUNCATE TABLE federated_intern_basic_data;
-- 插入新数据
INSERT INTO federated_intern_basic_data
WITH LatestInternshipApplication AS (
SELECT stu_id, stage_id,is_matching,in_unit,province,city,guidance_teacher,guidance_phone,recruit_way,
wsch_tea_name,phone,salary_ship,school_hotline,is_tripartitep,is_cross,
ROW_NUMBER() OVER (PARTITION BY stu_id ORDER BY create_time DESC) AS rn
FROM zc_internship_application
WHERE process = 6
),
LatestWeek AS (
SELECT
ss.user_id,
ROUND(IFNULL(ws.week_score, 0), 2) AS 周记成绩,
ROUND(IFNULL(r.report_score, 0), 2) AS 实习报告成绩,
ROUND(IFNULL(sc.company_one, 0), 2) AS 企业评分,
ROUND(
IFNULL(sc.company_one, 0) * 0.7 +
(IFNULL(ws.week_score, 0) * 0.6 + IFNULL(r.report_score, 0) * 0.4) * 0.3,
2
) AS average_evaluation,
ss.stage_id
FROM
zc_student_info ss
INNER JOIN zc_major_info m ON ss.major_id = m.id
INNER JOIN zc_teacher_info tea ON ss.sch_teacher = tea.id
INNER JOIN zc_pastern zp ON ss.pastern_id = zp.id
LEFT JOIN (
SELECT
si.id,
si.stu_name,
w.stage_id,
IF(
SUM(
CASE
WHEN p.teacher_evaluation REGEXP '^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$'
THEN CAST(p.teacher_evaluation AS DECIMAL(10,2))
ELSE 0
END
) / 20 > 100,
100,
SUM(
CASE
WHEN p.teacher_evaluation REGEXP '^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$'
THEN CAST(p.teacher_evaluation AS DECIMAL(10,2))
ELSE 0
END
) / 20
) AS week_score
FROM
zc_week w
INNER JOIN zc_process p ON w.id = p.day_id AND p.state = 0
INNER JOIN zc_student_info si ON w.create_by = si.user_id
INNER JOIN zc_internship_stage i ON w.stage_id = i.id
WHERE
i.is_end = '0' AND i.del_flag = '0'
GROUP BY
si.id, si.stu_name, w.stage_id
) ws ON ss.id = ws.id
LEFT JOIN (
SELECT
ir.student_user_id AS stu_id,
ir.stage_id,
ir.evaluate_score AS report_score
FROM
zc_internship_report ir
INNER JOIN zc_internship_stage i ON ir.stage_id = i.id
WHERE
ir.evaluate_state = 2
GROUP BY
ir.student_user_id, ir.stage_id, ir.evaluate_score
) r ON ss.user_id = r.stu_id
LEFT JOIN zc_student_score sc ON ss.id = sc.stu_id
INNER JOIN zc_internship_stage i ON ss.stage_id = i.id AND i.is_end = '0' AND i.del_flag = '0'
)
SELECT DISTINCT
MD5(s.id) AS ZJSJWYXBS,
'4113013397' AS XXDM,
s.stu_num AS XH,
s.stu_name AS XSXM,
'' AS ZYH,
m.major_name AS ZYMC,
c.class_name AS BJMC,
'' AS XZM,
'' AS XQM,
CASE
WHEN NOW() >= i.internship_start_time THEN 1
ELSE 0
END AS SXSFKS,
CASE
WHEN NOW() > i.internship_end_time THEN 1
ELSE 0
END AS SXSFJS,
'' AS SXQYHYLBM,
i.stage_name AS SXNR,
COALESCE(la.is_matching, 0) AS SFDK,
CASE WHEN la.recruit_way = 0 THEN 2 ELSE la.recruit_way END AS SXAPM,
'1' AS SXXSM,
COALESCE(CEILING(DATEDIFF(CURDATE(), i.internship_start_time) / 7.0), 0) AS SXSC,
COALESCE(lw.average_evaluation, 0) AS SXCJ,
DATE_FORMAT(i.internship_start_time, '%Y%m%d') AS SXKSRQ,
DATE_FORMAT(i.internship_end_time, '%Y%m%d') AS SXJSRQ,
la.in_unit AS SXQYMC,
'' AS SXDDSZSJGBM,
la.province AS SXDDSZSJGMC,
'' AS SXDDSZSHJGBM,
la.city AS SXDDSZSHJGMC,
'' AS XNZDJSGH,
la.guidance_teacher AS XNZDJSXM,
la.guidance_phone AS NZDJSDH,
la.wsch_tea_name AS QYZMZDRYXM,
la.phone AS QYZMZDRYDH,
CASE
WHEN la.salary_ship IS NULL THEN 0
WHEN la.salary_ship = '' THEN 0
WHEN la.salary_ship REGEXP '^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$' THEN
CAST(la.salary_ship AS DECIMAL(10,2))
ELSE 0
END AS ZFSXXSSJBC,
la.school_hotline AS XJJDZXDH,
la.is_tripartitep AS SFQDSFXY,
la.is_cross AS SFKSSX,
'' AS SFFGWSX,
g.grade_name AS RXNF,
DATE_FORMAT(NOW(), '%Y%m%d% %H%i%s') AS SJCJSJ
FROM
zc_student_info s
LEFT JOIN zc_grade_info g ON s.grade_id = g.id
LEFT JOIN zc_pastern p ON s.pastern_id = p.id
LEFT JOIN zc_major_info m ON s.major_id = m.id
LEFT JOIN zc_class c ON s.class_id = c.id
LEFT JOIN zc_internship_stage i ON s.stage_id = i.id
LEFT JOIN LatestInternshipApplication la ON s.id = la.stu_id AND la.rn = 1 AND la.stage_id = i.id
LEFT JOIN LatestWeek lw ON lw.user_id = s.user_id AND lw.stage_id = i.id
WHERE s.del_flag = 0 AND i.is_end = '0' AND i.del_flag = '0'
ORDER BY p.pastern_name, g.grade_name, m.major_name, c.class_name, s.stu_num;
SELECT CONCAT('实习基础数据同步完成,影响行数: ', ROW_COUNT()) AS message;
END //
-- 同步实习保险购买情况
CREATE PROCEDURE sync_intern_insurance()
BEGIN
-- 新增字符集设置
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
TRUNCATE TABLE federated_intern_insurance;
INSERT INTO federated_intern_insurance
WITH LatestInternshipApplication AS (
SELECT stu_id, stage_id,insurance_type,policy,insurance_bution,
ROW_NUMBER() OVER (PARTITION BY stu_id ORDER BY create_time DESC) AS rn
FROM zc_internship_application
)
SELECT DISTINCT
MD5(s.id) AS ZJSJWYXBS,
'4113013397' AS XXDM,
s.stu_num AS XH,
s.stu_name AS XSXM,
la.insurance_type AS BXXZMC,
la.policy AS BDH,
la.insurance_bution AS BXFCZFMC,
'' AS BXGMRQ,
'' AS BXGMFM,
'' AS GMBXZLM,
DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') AS SJCJSJ
FROM
zc_student_info s
LEFT JOIN zc_grade_info g ON s.grade_id = g.id
LEFT JOIN zc_pastern p ON s.pastern_id = p.id
LEFT JOIN zc_major_info m ON s.major_id = m.id
LEFT JOIN zc_class c ON s.class_id = c.id
LEFT JOIN zc_internship_stage i ON s.stage_id = i.id
LEFT JOIN LatestInternshipApplication la ON s.id = la.stu_id AND la.rn = 1 AND la.stage_id = i.id
WHERE s.del_flag = 0 AND i.is_end = '0' AND i.del_flag = '0'
ORDER BY p.pastern_name, g.grade_name, m.major_name, c.class_name, s.stu_num;
SELECT CONCAT('实习保险数据同步完成,影响行数: ', ROW_COUNT()) AS message;
END //
-- 同步实习报告记录
CREATE PROCEDURE sync_intern_report()
BEGIN
-- 新增字符集设置
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
TRUNCATE TABLE federated_intern_report;
INSERT INTO federated_intern_report
WITH LatestInternshipApplication AS (
SELECT stu_id, stage_id, in_unit, internship, guidance_teacher, guidance_phone,
ROW_NUMBER() OVER (PARTITION BY stu_id ORDER BY create_time DESC) AS rn
FROM zc_internship_application
WHERE process = 6
),
LatestWeek AS (
SELECT zw.id,zw.create_by, zw.content, DATE_FORMAT(zw.create_time, '%Y%m%d') AS create_time, zp.state, zw.title,
zw.stage_id,zp.teacher_comments,zp.teacher_evaluation
FROM zc_student_info st
INNER JOIN zc_week zw ON st.user_id = zw.create_by and zw.state != 1
INNER JOIN zc_internship_stage sta ON st.stage_id = sta.id
LEFT JOIN zc_process zp ON zp.day_id = zw.id
WHERE st.del_flag = '0' AND sta.is_end = '0' AND sta.del_flag = '0'
)
SELECT
MD5(s.id) AS ZJSJWYXBS,
'4113013397' AS XXDM,
s.stu_num AS XH,
s.stu_name AS XSXM,
la.in_unit AS SXQYMC,
la.internship AS SXGWMC,
la.guidance_teacher AS SXZDJS,
'1' AS SXBGLBM,
lw.content AS SXBGNRZY,
lw.content AS SXBGNR,
DATE_FORMAT(lw.create_time, '%Y%m%d') AS SXBGTJRQ,
CASE lw.state WHEN 0 THEN '1' WHEN 2 THEN '2' ELSE '2' END AS JSPYZTM,
DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') AS SJCJSJ
FROM
zc_student_info s
LEFT JOIN zc_grade_info g ON s.grade_id = g.id
JOIN zc_pastern p ON s.pastern_id = p.id
LEFT JOIN zc_major_info m ON s.major_id = m.id
LEFT JOIN zc_class c ON s.class_id = c.id
INNER JOIN zc_internship_stage i ON s.stage_id = i.id
INNER JOIN LatestInternshipApplication la ON s.id = la.stu_id AND la.stage_id = i.id
INNER JOIN LatestWeek lw ON lw.create_by = s.user_id
WHERE s.del_flag = 0 AND i.is_end = '0' AND i.del_flag = '0'
ORDER BY p.pastern_name, g.grade_name, m.major_name, c.class_name, s.stu_num, la.in_unit, la.guidance_teacher, la.internship, i.stage_name;
SELECT CONCAT('实习报告数据同步完成,影响行数: ', ROW_COUNT()) AS message;
END //
-- 同步统一用户认证登录数据
CREATE PROCEDURE sync_user_auth_data()
BEGIN
-- 新增字符集设置
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
TRUNCATE TABLE federated_user_auth_data;
INSERT INTO federated_user_auth_data
WITH LatestSysUserRole AS (
SELECT
su.id,
GROUP_CONCAT(sr.role_name ORDER BY sr.role_name ASC SEPARATOR ',') AS role_names
FROM
sys_user su
JOIN
sys_user_role sur ON su.id = sur.user_id
JOIN
sys_role sr ON sur.role_id = sr.id
GROUP BY
su.id
)
SELECT distinct
MD5(su.id) AS ZJSJWYXBS,
'4113013397' AS XXDM,
sl.username AS DLZH,
ls.role_names AS JS,
zd.dept_name AS SZBMMC,
DATE_FORMAT(sl.create_time, '%Y%m%d% %H%i%s') AS DLSJ,
sl.ip AS DLIP,
1 AS ZHZTM,
DATE_FORMAT(NOW(), '%Y%m%d% %H%i%s') AS SJCJ
FROM sys_log sl
JOIN
sys_user su ON sl.userid = su.username AND sl.userid != 'admin'
JOIN
LatestSysUserRole ls ON su.id = ls.id
LEFT JOIN
zc_teacher_info zti ON su.id = zti.user_id
LEFT JOIN
zc_depart zd ON zd.id = zti.depart
where sl.log_type = 1
order by sl.create_time desc;
SELECT CONCAT('用户认证数据同步完成,影响行数: ', ROW_COUNT()) AS message;
END //
-- 创建总控存储过程,同步所有数据
CREATE PROCEDURE sync_all_data_to_server_b()
BEGIN
DECLARE exit handler for sqlexception
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE,
@errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
SELECT CONCAT('Error occurred: ', @errno, ' (', @sqlstate, '): ', @text) AS error_message;
ROLLBACK;
END;
START TRANSACTION;
CALL sync_intern_basic_data();
CALL sync_intern_insurance();
CALL sync_intern_report();
CALL sync_user_auth_data();
COMMIT;
SELECT '所有数据同步完成' AS message;
END //
DELIMITER ;