-- =============================================================================
|
-- 省立同德:满意度子任务 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 为空),既不算选项也不进分母
|