-- ============================================================================= -- 省立同德:满意度子任务 campusid 为空的数据修复(2026-09-24) -- -- 背景:/sltdMydTotalByScore(满意度统计)等接口带 @AddOrgId,会按登录用户的 -- campusid(admin = 30001002)过滤 service_subtask,campusid 为 NULL 的子任务 -- 会被静默丢掉,导致页面「各服务项目满意度统计」和 service_subtask_detail 明细 -- 对不上(如「挂号/就诊/检验/检查等环节等候时间」页面 6 项 vs 明细 13 行)。 -- -- 现状:orgid=20001001 下 service_type IN ('6','14') 的子任务共 767 条, -- campusid='30001002' 642 条、'30001003' 1 条、NULL 124 条(本次要补的就是这 124 条)。 -- 这 124 条分布在和 30001002 相同的病区、相同的时间区间(2025-12-23 ~ 2026-09-12), -- 属于写库时漏写院区,不是别的院区的数据;service_task.campusid 一律是 '1',不能作为院区来源。 -- -- 执行顺序:1) 看清单 → 2) 备份 → 3) 更新 → 4) 校验 -- 注意:生产库执行前先备份,且请确认这些子任务确实都属于 30001002 院区。 -- ============================================================================= -- ----------------------------------------------------------------------------- -- 1) 待补清单(124 条):确认病区/科室是否都属于 30001002 院区 -- ----------------------------------------------------------------------------- SELECT s.id, s.taskid, s.service_type, s.sendstate, s.deptcode, s.deptname, s.leavehospitaldistrictcode, s.leavehospitaldistrictname, date_format(s.create_time, '%Y-%m-%d %H:%i:%s') AS create_time, date_format(s.finishtime, '%Y-%m-%d %H:%i:%s') AS finishtime FROM service_subtask s WHERE s.del_flag = 0 AND s.service_type IN ('6', '14') AND s.campusid IS NULL ORDER BY s.leavehospitaldistrictcode, s.id; -- 病区/科室维度汇总(判断院区归属用;病区/科室都为空的 40 来条需要人工确认) SELECT s.leavehospitaldistrictcode AS district, s.deptcode, s.service_type, COUNT(*) AS campus_null_cnt FROM service_subtask s WHERE s.del_flag = 0 AND s.service_type IN ('6', '14') AND s.campusid IS NULL GROUP BY s.leavehospitaldistrictcode, s.deptcode, s.service_type ORDER BY campus_null_cnt DESC; -- ----------------------------------------------------------------------------- -- 2) 备份(只备份要改的字段) -- ----------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS bak_service_subtask_campusid_20260924 AS SELECT id, campusid, update_time FROM service_subtask WHERE del_flag = 0 AND service_type IN ('6', '14') AND campusid IS NULL; SELECT COUNT(*) AS backup_rows FROM bak_service_subtask_campusid_20260924; -- ----------------------------------------------------------------------------- -- 3) 更新(确认清单无误后执行;预期影响 124 行) -- ----------------------------------------------------------------------------- UPDATE service_subtask SET campusid = '30001002', update_time = NOW() WHERE del_flag = 0 AND service_type IN ('6', '14') AND campusid IS NULL; -- 如果病区/科室为空的那些行无法确定院区,只想补有明确病区的,用下面这条: -- UPDATE service_subtask -- SET campusid = '30001002', update_time = NOW() -- WHERE del_flag = 0 AND service_type IN ('6','14') AND campusid IS NULL -- AND leavehospitaldistrictcode IS NOT NULL AND leavehospitaldistrictcode <> ''; -- ----------------------------------------------------------------------------- -- 4) 校验:院区分布 + 单车核对「挂号/就诊/检验/检查等环节等候时间」 -- ----------------------------------------------------------------------------- SELECT s.campusid, s.service_type, COUNT(*) AS c FROM service_subtask s WHERE s.del_flag = 0 AND s.service_type IN ('6', '14') GROUP BY s.campusid, s.service_type ORDER BY c DESC; -- 预期(补齐后,admin 登录页面)= 很满意 1、不满意 3、很不满意 4、很满意(随访任务) 不计入 -- 页面口径:sendstate=6 + service_type 6/14 + finishtime 在所选区间 + 同一子任务同一题只取最新一条 + 未作答不计 SELECT d.asrtext AS optionresult, COUNT(*) AS page_cnt FROM service_subtask_detail d INNER JOIN service_subtask s ON s.id = d.sub_id WHERE d.questiontext = '挂号/就诊/检验/检查等环节等候时间' AND d.del_flag = 0 AND s.del_flag = 0 AND s.sendstate = 6 AND s.service_type IN ('6', '14') AND s.campusid = '30001002' AND date_format(s.finishtime, '%y%m%d') >= '260625' AND date_format(s.finishtime, '%y%m%d') <= '260924' AND d.asrtext IS NOT NULL AND TRIM(d.asrtext) <> '' AND d.id = (SELECT MAX(d2.id) FROM service_subtask_detail d2 WHERE d2.sub_id = d.sub_id AND d2.questiontext <=> d.questiontext AND d2.del_flag = '0') GROUP BY d.asrtext ORDER BY page_cnt DESC; -- 改造前:很不满意 4、不满意 1、很满意 1(页面即此结果) -- 补齐后:很不满意 4、不满意 4、很满意 1 ← 9 项;明细表里另外 4 行仍不会进页面,原因见下 ↓ -- taskid 144(一般) finishtime 2026-06-23,早于页面所选区间 2026-06-25 -- taskid 152(很不满意) / 156(很满意) service_type=2(出院随访任务),不是满意度 -- taskid 175(空) 未作答(asrtext 为空),既不算选项也不进分母