liusheng
5 天以前 fb89df539c6293a41933e445df25fa9b8047ba18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
-- ============================================================================
-- 省立同德:满意度子任务 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 也一起治理。
-- ============================================================================