-- ============================================================================
|
-- 省立同德:满意度子任务 campusid 为空的数据修复(2026-09-28,已执行)
|
--
|
-- 【现象】/sltdMydTotalByScore、/satisfactionGraph 等接口查不到数据,但手工查库有数据。
|
--
|
-- 【根因】
|
-- 1) 写库处 ServiceSubtaskAnswerServiceImpl 构造满意度子任务(service_type 6/14)时
|
-- dept/ward/orgid 都写了,唯独漏写 campusid → 落库为 NULL;
|
-- (同项目其它写库处都有写:PatMedInhospServiceImpl:1146 取住院记录院区、
|
-- PatMedOuthospServiceImpl:486 取任务院区,本次已按同样思路给该处补上)
|
-- 2) 这些统计接口带 @AddOrgId(campusField="campusid"),SetOrgIdAspect 会把登录用户的院区
|
-- 注入查询条件;ServiceSubtaskMapper.selectServiceSubtaskList 里是
|
-- `and campusid = #{campusid}`,NULL 不匹配任何值 → 这些子任务被静默丢掉,
|
-- 传给明细统计(statQuestionOptionBySubtaskIds)的子任务 id 里没有它们 → 页面空。
|
--
|
-- 【修复前实测】service_type IN ('6','14') 且 campusid IS NULL 共 122 行:
|
-- - 58 行患者档案 pat_archive.campusid 有值(57 行 30001002、1 行 30001004)
|
-- - 64 行患者档案院区也为空(其中多数病区/科室为 "1"/"2" 或空,属投诉建议流程写库时字段缺失)
|
-- - pat_med_inhosp.campusid 在这 122 行上全为空,不能作为院区来源
|
--
|
-- 【执行结果(2026-09-28)】
|
-- 备份表 bak_service_subtask_campusid_20260928 = 122 行
|
-- A) 按患者档案院区补:58 行
|
-- B) 档案也为空的按原 20260924 脚本结论兜底 30001002:64 行
|
-- 校验:service_type IN ('6','14') 已无 campusid 为 NULL 的行
|
-- ============================================================================
|
|
|
-- ----------------------------------------------------------------------------
|
-- 【1】备份(已执行,仅备份被改字段,用于回滚)
|
-- ----------------------------------------------------------------------------
|
-- CREATE TABLE IF NOT EXISTS bak_service_subtask_campusid_20260928 AS
|
-- SELECT id, campusid, update_time FROM service_subtask
|
-- WHERE del_flag = 0 AND service_type IN ('6','14') AND campusid IS NULL;
|
|
|
-- ----------------------------------------------------------------------------
|
-- 【2】更新(已执行)
|
-- ----------------------------------------------------------------------------
|
-- A) 患者档案里有院区的,按患者归属院区补(58 行)
|
-- UPDATE service_subtask s
|
-- JOIN pat_archive a ON a.id = s.patid
|
-- SET s.campusid = a.campusid, s.update_time = NOW()
|
-- WHERE s.del_flag = 0 AND s.service_type IN ('6','14')
|
-- AND s.campusid IS NULL AND a.campusid IS NOT NULL AND a.campusid <> '';
|
|
-- B) 患者档案也没有院区的,兜底 30001002(64 行;与原 fix_service_subtask_campusid_20260924.sql 结论一致)
|
-- UPDATE service_subtask SET campusid = '30001002', update_time = NOW()
|
-- WHERE del_flag = 0 AND service_type IN ('6','14') AND campusid IS NULL;
|
|
|
-- ----------------------------------------------------------------------------
|
-- 【3】校验
|
-- ----------------------------------------------------------------------------
|
SELECT IFNULL(campusid,'(仍为空)') AS campusid, service_type, COUNT(*) AS cnt
|
FROM service_subtask
|
WHERE del_flag = 0 AND service_type IN ('6','14')
|
GROUP BY campusid, service_type
|
ORDER BY cnt DESC;
|
-- 执行后预期:30001002/6=709、30001002/14=56、30001004/14=1、30001003/14=1,无 NULL
|
|
|
-- ----------------------------------------------------------------------------
|
-- 【4】回滚(如需撤销,先回滚字段值,再删备份表;仅恢复被本次改动的 122 行)
|
-- ----------------------------------------------------------------------------
|
-- UPDATE service_subtask s
|
-- JOIN bak_service_subtask_campusid_20260928 b ON b.id = s.id
|
-- SET s.campusid = b.campusid, s.update_time = b.update_time;
|
-- DROP TABLE bak_service_subtask_campusid_20260928;
|
|
|
-- ============================================================================
|
-- 【重要提醒】
|
-- 1) 只补数据不够:写库处已同步修(ServiceSubtaskAnswerServiceImpl 补 setCampusid),
|
-- 该改动需要重新发布后端才生效,否则新产生的满意度子任务还会是 NULL。
|
-- 2) 那 1 行按患者档案补成了 30001004(不是 30001002),如确认该病区实际属本部,
|
-- 可单独改回:SELECT * FROM bak_service_subtask_campusid_20260928 WHERE id = ?;
|
-- 3) 病区/科室为空、档案也无院区的行一律按 30001002 兜底;若后续要做多院区口径,
|
-- 建议把 leavehospitaldistrictcode/deptcode 也一起治理。
|
-- ============================================================================
|