补充数据库修复/排查脚本,新增 .gitignore
1. sql/ 下新增 41 个一次性脚本(fix_*/diag_*/perf_*/index_*/开关配置等),
均为线上已执行的问题修复与数据回填记录,按日期命名便于回溯。
其中 cleanup_unused_tables_20260923.sql 含 DROP TABLE,属历史清理脚本,仅存档。
2. 新增 .gitignore:忽略构建产物 target/、IDE 目录、临时目录
tmp/ .tmp/ _backups/、备份文件 *.bak-*、一次性探针目录 sql/_probe/、
日志与本地临时配置,避免再次误提交编译产物和排查残留。
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ==================== æå»ºäº§ç© ==================== |
| | | target/ |
| | | out/ |
| | | *.class |
| | | |
| | | # ==================== IDE / ç¼è¾å¨ ==================== |
| | | .idea/ |
| | | *.iml |
| | | *.ipr |
| | | *.iws |
| | | .vscode/ |
| | | .settings/ |
| | | .project |
| | | .classpath |
| | | |
| | | # ==================== 临æ¶ç®å½ ==================== |
| | | tmp/ |
| | | .tmp/ |
| | | _backups/ |
| | | recovered/ |
| | | __pycache__/ |
| | | *.pyc |
| | | |
| | | # ==================== å¤ä»½ä¸ä¸´æ¶æä»¶ ==================== |
| | | *.bak |
| | | *.bak[0-9] |
| | | *.bak-* |
| | | *.bak[0-9]-* |
| | | *.orig |
| | | *.rej |
| | | *~ |
| | | |
| | | # ==================== 䏿¬¡æ§ææ¥èæ¬ / æ¢é / æ¥å¿ï¼ä¸å
¥åºï¼ ==================== |
| | | sql/_probe/ |
| | | *.log |
| | | _dbcheck.txt |
| | | package-lock.json |
| | | |
| | | # ==================== æ¬å°ä¸´æ¶é
ç½® ==================== |
| | | ruoyi-admin/src/main/resources/tempfile_*.yml |
| | | ruoyi-admin/src/main/resources/logback-backup.xml |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- æ pat_med_inhosp çãç§å®¤ / ç
åºãåå¡«å° service_subtaskï¼å¨é¢ 4 å + ç¦»é¢ 4 åï¼ |
| | | -- çææ¥æï¼2026-11-06ï¼v2ï¼ä¿®æ£ join é® + å并离é¢ç»´åº¦ï¼ |
| | | -- éç¨ï¼MySQL 8.0 / 5.7ï¼æªç¨ CTEãçªå£å½æ°ï¼ |
| | | -- |
| | | -- â ï¸ åç½®æ¡ä»¶ï¼å
æ§è¡è¿ sql/rename_service_subtask_dims_20261106.sqlï¼åå·²æ¹åï¼ã |
| | | -- |
| | | -- â ï¸â ï¸ join é®ï¼v1 åéè¿ï¼è¿éæ´æ£ï¼ï¼ |
| | | -- service_subtask.inhospid åçæ¯ **pat_med_inhosp.inhospid**ï¼ä¸å¡ä¸»é®ï¼ï¼ä¸æ¯ idã |
| | | -- è¯æ®ï¼VisitInhospMapper.xml#selectForScan æ¥çæ¯ b.inhospidï¼ |
| | | -- VisitSubtaskFactory 鿝 d.setInhospid(inhosp.getInhospid())ã |
| | | -- é¨è¯ä¾§ä¾å¤ï¼PatMedOuthospServiceDelegatingImpl ç¨çæ¯ pat_med_outhosp.getId()ï¼ |
| | | -- æä»¥ pat_med_outhosp ç id ä¼å pat_med_inhosp.inhospid æå· â å¿
é¡»æé¤ service_type='3'ã |
| | | -- |
| | | -- åæ®µæ å°ï¼8 åï¼æ³¨æãå¨é¢ç
åºãåãåºé¢ç
åºã䏿¯ä¸åäºï¼ |
| | | -- å¨é¢ç»´åº¦ï¼æ¬æ¬¡æ°å¢åï¼ |
| | | -- service_subtask.hospitaldistrictcode/name â pat_med_inhosp.hospitaldistrictcode/name ï¼å¨é¢ç
åºï¼ |
| | | -- service_subtask.deptcode/name â pat_med_inhosp.deptcode/name ï¼å¨é¢ç§å®¤ï¼ |
| | | -- 离é¢/åºé¢ç»´åº¦ï¼èåï¼å deptcode/deptname æ¹åèæ¥ï¼ |
| | | -- service_subtask.leaveldeptcode/name â pat_med_inhosp.leaveldeptcode/name ï¼åºé¢ç§å®¤ï¼ |
| | | -- service_subtask.leavehospitaldistrictcode/name â pat_med_inhosp.leavehospitaldistrictcode/name ï¼åºé¢ç
åºï¼ |
| | | -- |
| | | -- å®å
¨çç¥ |
| | | -- 1) å
¨é¨ç¨ COALESCEãç®æ å为空æåãâ **ä¸è¦çä»»ä½å·²æå¼**ï¼å¯é夿§è¡ï¼ |
| | | -- 2) æ´æ°åå
å¤ä»½åå½±åè¡çè¿ 8 åæ§å¼ï¼Â§2ï¼ï¼ |
| | | -- 3) å¤§è¡¨åæ¹æ¨¡æ¿è§ §6ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 0) åç½®èªæ¥ |
| | | -- ---------------------------------------------------------------------------- |
| | | SHOW FULL COLUMNS FROM service_subtask LIKE '%dept%'; |
| | | SHOW FULL COLUMNS FROM service_subtask LIKE 'hospitaldistrict%'; |
| | | SHOW FULL COLUMNS FROM pat_med_inhosp LIKE '%dept%'; |
| | | SHOW FULL COLUMNS FROM pat_med_inhosp LIKE 'hospitaldistrict%'; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 1) å½±åé¢è¯ä¼°ï¼å
çæ°ï¼åå¨æï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | -- 1.1 è½ join ä¸çå任塿° + 8 åéåæå¤å°æ¯ç©ºç |
| | | SELECT COUNT(*) AS joined_rows, |
| | | SUM(hospitaldistrictcode IS NULL OR hospitaldistrictcode = '') AS hd_code_empty, |
| | | SUM(hospitaldistrictname IS NULL OR hospitaldistrictname = '') AS hd_name_empty, |
| | | SUM(deptcode IS NULL OR deptcode = '') AS dept_code_empty, |
| | | SUM(deptname IS NULL OR deptname = '') AS dept_name_empty, |
| | | SUM(leaveldeptcode IS NULL OR leaveldeptcode = '') AS lv_dept_code_empty, |
| | | SUM(leaveldeptname IS NULL OR leaveldeptname = '') AS lv_dept_name_empty, |
| | | SUM(leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '') AS lv_hd_code_empty, |
| | | SUM(leavehospitaldistrictname IS NULL OR leavehospitaldistrictname = '') AS lv_hd_name_empty |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp b |
| | | ON b.inhospid = s.inhospid |
| | | AND b.patid = s.patid |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3' |
| | | AND (s.hosp_type IS NULL OR s.hosp_type <> '8'); |
| | | |
| | | -- 1.2 æ service_type çåå¸ï¼2/13 åºé¢é访ã17/18 å
¥é¢å®£æ/å
¥é¢é访ã6/14/15/16 满æåº¦åä»»å¡ï¼ |
| | | SELECT s.service_type, |
| | | COUNT(*) AS cnt, |
| | | SUM(s.deptcode IS NULL OR s.deptcode = '') AS dept_empty, |
| | | SUM(s.hospitaldistrictcode IS NULL OR s.hospitaldistrictcode = '') AS hd_empty, |
| | | SUM(s.leaveldeptcode IS NULL OR s.leaveldeptcode = '') AS lv_dept_empty, |
| | | SUM(s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '') AS lv_hd_empty |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp b ON b.inhospid = s.inhospid AND b.patid = s.patid |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3' |
| | | GROUP BY s.service_type |
| | | ORDER BY cnt DESC; |
| | | |
| | | -- 1.3 join ä¸ä¸çè¯æï¼inhospid æå¼ãä½ patid 对ä¸ä¸ |
| | | SELECT s.service_type, |
| | | COUNT(*) AS unmatched |
| | | FROM service_subtask s |
| | | LEFT JOIN pat_med_inhosp b |
| | | ON b.inhospid = s.inhospid |
| | | AND b.patid = s.patid |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3' |
| | | AND b.inhospid IS NULL |
| | | GROUP BY s.service_type |
| | | ORDER BY unmatched DESC; |
| | | |
| | | -- 1.4 æºè¡¨ inhospid æ¯å¦å¯ä¸ï¼ä¸å¯ä¸ä¼è®© UPDATE åå°å
¶ä¸ä¸è¡ï¼ç»æä¸ç¡®å®ï¼ |
| | | SELECT inhospid, COUNT(*) AS c, COUNT(DISTINCT patid) AS pats |
| | | FROM pat_med_inhosp |
| | | WHERE inhospid IS NOT NULL |
| | | GROUP BY inhospid |
| | | HAVING c > 1 |
| | | ORDER BY c DESC |
| | | LIMIT 20; |
| | | |
| | | -- 1.5 䏿¡å任塿¯å¦ä¼è¢«å¤è¡æºæ°æ®å½ä¸ï¼åºä¸º 0ï¼æå¼å°±å
æ §1.4 çéå¤å¤çå¹²åï¼ |
| | | SELECT COUNT(*) AS subtask_rows, COUNT(*) - COUNT(DISTINCT s.id) AS dup_hit |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp b ON b.inhospid = s.inhospid AND b.patid = s.patid |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3'; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 2) å¤ä»½åå½±åè¡ç 8 åæ§å¼ï¼åæ»è§ §7ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | CREATE TABLE bak_service_subtask_dept_20261106 AS |
| | | SELECT s.id, |
| | | s.service_type, |
| | | s.hosp_type, |
| | | s.inhospid, |
| | | s.patid, |
| | | s.leaveldeptcode, |
| | | s.leaveldeptname, |
| | | s.leavehospitaldistrictcode, |
| | | s.leavehospitaldistrictname, |
| | | s.hospitaldistrictcode, |
| | | s.hospitaldistrictname, |
| | | s.deptcode, |
| | | s.deptname |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp b |
| | | ON b.inhospid = s.inhospid |
| | | AND b.patid = s.patid |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3' |
| | | AND (s.hosp_type IS NULL OR s.hosp_type <> '8') |
| | | AND ( NULLIF(TRIM(s.hospitaldistrictcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.hospitaldistrictname), '') IS NULL |
| | | OR NULLIF(TRIM(s.deptcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.deptname), '') IS NULL |
| | | OR NULLIF(TRIM(s.leaveldeptcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.leaveldeptname), '') IS NULL |
| | | OR NULLIF(TRIM(s.leavehospitaldistrictcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.leavehospitaldistrictname), '') IS NULL ); |
| | | |
| | | SELECT COUNT(*) AS backup_rows FROM bak_service_subtask_dept_20261106; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 3) 主åå¡«ï¼å¨é¢ 4 å + ç¦»é¢ 4 åï¼åªè¡¥ç©ºï¼ä¸è¦çï¼å¯é夿§è¡ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | UPDATE service_subtask s |
| | | JOIN pat_med_inhosp b |
| | | ON b.inhospid = s.inhospid |
| | | AND b.patid = s.patid |
| | | SET s.hospitaldistrictcode = COALESCE(NULLIF(TRIM(s.hospitaldistrictcode), ''), b.hospitaldistrictcode), |
| | | s.hospitaldistrictname = COALESCE(NULLIF(TRIM(s.hospitaldistrictname), ''), b.hospitaldistrictname), |
| | | s.deptcode = COALESCE(NULLIF(TRIM(s.deptcode), ''), b.deptcode), |
| | | s.deptname = COALESCE(NULLIF(TRIM(s.deptname), ''), b.deptname), |
| | | s.leaveldeptcode = COALESCE(NULLIF(TRIM(s.leaveldeptcode), ''), b.leaveldeptcode), |
| | | s.leaveldeptname = COALESCE(NULLIF(TRIM(s.leaveldeptname), ''), b.leaveldeptname), |
| | | s.leavehospitaldistrictcode = COALESCE(NULLIF(TRIM(s.leavehospitaldistrictcode), ''), b.leavehospitaldistrictcode), |
| | | s.leavehospitaldistrictname = COALESCE(NULLIF(TRIM(s.leavehospitaldistrictname), ''), b.leavehospitaldistrictname) |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3' -- é¨è¯é访ç inhospid æ¯ pat_med_outhosp.id |
| | | AND (s.hosp_type IS NULL OR s.hosp_type <> '8') -- æ«ç çæçèææ£è
|
| | | AND ( NULLIF(TRIM(s.hospitaldistrictcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.hospitaldistrictname), '') IS NULL |
| | | OR NULLIF(TRIM(s.deptcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.deptname), '') IS NULL |
| | | OR NULLIF(TRIM(s.leaveldeptcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.leaveldeptname), '') IS NULL |
| | | OR NULLIF(TRIM(s.leavehospitaldistrictcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.leavehospitaldistrictname), '') IS NULL ); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 4) å£å¾è¯´æ + å¯éç"å¼ºå¶æ¹å" |
| | | -- |
| | | -- 4.1 为ä»ä¹ç¦»é¢ 4 åä¹ç¨ãåªè¡¥ç©ºãï¼ |
| | | -- service_type = 17/18ï¼å
¥é¢å®£æ/å
¥é¢é访ï¼çææ¶èµ° type 4/5 åæ¯ï¼ |
| | | -- `leaveldeptcode/name` éåçå
¶å®æ¯**å
¥é¢ç§å®¤**ï¼d.setLeaveldeptcode(inhosp.getDeptcode())ï¼ã |
| | | -- è¿äºè¡é空 â §3 ä¸ä¼å¨å®ä»¬ï¼è¥ä¸ºç©ºåä¼è¢«è¡¥æ pat_med_inhosp.leaveldeptcode |
| | | -- ï¼ä½é¢æ£è
é常为空 â çäºæ²¡åï¼ã |
| | | -- åºé¢é访ï¼2/13ï¼ä¸æ»¡æåº¦åä»»å¡ï¼6/14/15/16ï¼çç¦»é¢ 4 åçææ¶æ¬æ¥å°±åèª |
| | | -- pat_med_inhospï¼åªå¯è½æ¯åå²èæ°æ®ä¸ºç©ºï¼è¡¥ç©ºå³ä¿®æ°æ®ã |
| | | -- |
| | | -- 4.2 å¦æä½ è¦çæ¯"17/18 ä¹ç»ä¸æåºé¢ç§å®¤å£å¾"ï¼ç¨ä¸é¢è¿æ®µï¼**ä¼è¦ç**ï¼å
è· Â§2 å¤ä»½ï¼ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask s |
| | | -- JOIN pat_med_inhosp b ON b.inhospid = s.inhospid AND b.patid = s.patid |
| | | -- SET s.leaveldeptcode = b.leaveldeptcode, |
| | | -- s.leaveldeptname = b.leaveldeptname, |
| | | -- s.leavehospitaldistrictcode = b.leavehospitaldistrictcode, |
| | | -- s.leavehospitaldistrictname = b.leavehospitaldistrictname |
| | | -- WHERE s.inhospid IS NOT NULL |
| | | -- AND s.service_type IN ('17', '18') |
| | | -- AND (NULLIF(TRIM(b.leaveldeptcode), '') IS NOT NULL |
| | | -- OR NULLIF(TRIM(b.leavehospitaldistrictcode), '') IS NOT NULL); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 5) ãå¯éãå
¨é½å¼ºå¶è¦ççï¼"忥æå¼ä½æ¯éç"æ¶ç¨ï¼ |
| | | -- æ §3 ç COALESCE(...) æ¢æç´æ¥èµå¼ï¼å¹¶å»æ WHERE éé£ä¸²ãç®æ åä¸ºç©ºãæ¡ä»¶ï¼ |
| | | -- SET s.hospitaldistrictcode = b.hospitaldistrictcode, |
| | | -- s.hospitaldistrictname = b.hospitaldistrictname, |
| | | -- s.deptcode = b.deptcode, s.deptname = b.deptname, |
| | | -- s.leaveldeptcode = b.leaveldeptcode, s.leaveldeptname = b.leaveldeptname, |
| | | -- s.leavehospitaldistrictcode = b.leavehospitaldistrictcode, |
| | | -- s.leavehospitaldistrictname = b.leavehospitaldistrictname |
| | | -- â ï¸ pat_med_inhosp.dept* ä¼è¢«ãå¨é¢ä¿¡æ¯å·æ°ã宿¶ä»»å¡æ HIS å½åç§å®¤æ¹åï¼ |
| | | -- è¦çåå¯è½æ"åºé¢å½æ¶çç§å®¤"æ¹æ"ç°å¨ HIS éçç§å®¤"ãè¦çåå¡å¿
å
å¤ä»½ã |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 6) å¤§è¡¨åæ¹æ¨¡æ¿ï¼å¤è¡¨ UPDATE 䏿¯æ LIMITï¼ç¨ id åºé´ï¼æ¯æ®µåç¬æäº¤ï¼ |
| | | -- å
æ¥èå´ï¼SELECT MIN(id), MAX(id) FROM service_subtask; |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask s |
| | | -- JOIN pat_med_inhosp b ON b.inhospid = s.inhospid AND b.patid = s.patid |
| | | -- SET s.hospitaldistrictcode = COALESCE(NULLIF(TRIM(s.hospitaldistrictcode), ''), b.hospitaldistrictcode), |
| | | -- s.hospitaldistrictname = COALESCE(NULLIF(TRIM(s.hospitaldistrictname), ''), b.hospitaldistrictname), |
| | | -- s.deptcode = COALESCE(NULLIF(TRIM(s.deptcode), ''), b.deptcode), |
| | | -- s.deptname = COALESCE(NULLIF(TRIM(s.deptname), ''), b.deptname), |
| | | -- s.leaveldeptcode = COALESCE(NULLIF(TRIM(s.leaveldeptcode), ''), b.leaveldeptcode), |
| | | -- s.leaveldeptname = COALESCE(NULLIF(TRIM(s.leaveldeptname), ''), b.leaveldeptname), |
| | | -- s.leavehospitaldistrictcode = COALESCE(NULLIF(TRIM(s.leavehospitaldistrictcode), ''), b.leavehospitaldistrictcode), |
| | | -- s.leavehospitaldistrictname = COALESCE(NULLIF(TRIM(s.leavehospitaldistrictname), ''), b.leavehospitaldistrictname) |
| | | -- WHERE s.id > 1 AND s.id <= 50000 |
| | | -- AND s.inhospid IS NOT NULL |
| | | -- AND s.service_type <> '3' |
| | | -- AND (s.hosp_type IS NULL OR s.hosp_type <> '8') |
| | | -- AND ( NULLIF(TRIM(s.hospitaldistrictcode), '') IS NULL |
| | | -- OR NULLIF(TRIM(s.hospitaldistrictname), '') IS NULL |
| | | -- OR NULLIF(TRIM(s.deptcode), '') IS NULL |
| | | -- OR NULLIF(TRIM(s.deptname), '') IS NULL |
| | | -- OR NULLIF(TRIM(s.leaveldeptcode), '') IS NULL |
| | | -- OR NULLIF(TRIM(s.leaveldeptname), '') IS NULL |
| | | -- OR NULLIF(TRIM(s.leavehospitaldistrictcode), '') IS NULL |
| | | -- OR NULLIF(TRIM(s.leavehospitaldistrictname), '') IS NULL ); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 7) åæ»ï¼æ §2 å¤ä»½è¡¨è¿å 8 åï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask s |
| | | -- JOIN bak_service_subtask_dept_20261106 k ON k.id = s.id |
| | | -- SET s.hospitaldistrictcode = k.hospitaldistrictcode, |
| | | -- s.hospitaldistrictname = k.hospitaldistrictname, |
| | | -- s.deptcode = k.deptcode, |
| | | -- s.deptname = k.deptname, |
| | | -- s.leaveldeptcode = k.leaveldeptcode, |
| | | -- s.leaveldeptname = k.leaveldeptname, |
| | | -- s.leavehospitaldistrictcode = k.leavehospitaldistrictcode, |
| | | -- s.leavehospitaldistrictname = k.leavehospitaldistrictname; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 8) åå¡«åæ ¸å¯¹ |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | -- 8.1 è¿å©å¤å°ç©ºï¼åºæ¥è¿ 0ï¼å©ä¸çåºæ¬æ¯ §1.3/§1.4 å½ä¸ä¸äºçï¼ |
| | | SELECT COUNT(*) AS still_empty_rows, |
| | | SUM(hospitaldistrictcode IS NULL OR hospitaldistrictcode = '') AS hd_code_empty, |
| | | SUM(hospitaldistrictname IS NULL OR hospitaldistrictname = '') AS hd_name_empty, |
| | | SUM(deptcode IS NULL OR deptcode = '') AS dept_code_empty, |
| | | SUM(deptname IS NULL OR deptname = '') AS dept_name_empty, |
| | | SUM(leaveldeptcode IS NULL OR leaveldeptcode = '') AS lv_dept_code_empty, |
| | | SUM(leaveldeptname IS NULL OR leaveldeptname = '') AS lv_dept_name_empty, |
| | | SUM(leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '') AS lv_hd_code_empty, |
| | | SUM(leavehospitaldistrictname IS NULL OR leavehospitaldistrictname = '') AS lv_hd_name_empty |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp b ON b.inhospid = s.inhospid AND b.patid = s.patid |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3' |
| | | AND (s.hosp_type IS NULL OR s.hosp_type <> '8') |
| | | AND ( NULLIF(TRIM(s.hospitaldistrictcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.hospitaldistrictname), '') IS NULL |
| | | OR NULLIF(TRIM(s.deptcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.deptname), '') IS NULL |
| | | OR NULLIF(TRIM(s.leaveldeptcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.leaveldeptname), '') IS NULL |
| | | OR NULLIF(TRIM(s.leavehospitaldistrictcode), '') IS NULL |
| | | OR NULLIF(TRIM(s.leavehospitaldistrictname), '') IS NULL ); |
| | | |
| | | -- 8.2 éè¡å¯¹ç
§æ½æ£ï¼ä¸¤è¾¹æ¯å¦ä¸è´ï¼ |
| | | SELECT s.id, s.service_type, s.inhospid, |
| | | s.deptcode AS sub_dept, b.deptcode AS inhosp_dept, |
| | | s.hospitaldistrictcode AS sub_hd, b.hospitaldistrictcode AS inhosp_hd, |
| | | s.leaveldeptcode AS sub_lv_dept, b.leaveldeptcode AS inhosp_lv_dept, |
| | | s.leavehospitaldistrictcode AS sub_lv_hd, b.leavehospitaldistrictcode AS inhosp_lv_hd |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp b ON b.inhospid = s.inhospid AND b.patid = s.patid |
| | | WHERE s.inhospid IS NOT NULL |
| | | AND s.service_type <> '3' |
| | | ORDER BY s.id DESC |
| | | LIMIT 50; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- smartor_nhfy æ°æ®åº æªä½¿ç¨è¡¨æ¸
çèæ¬ |
| | | -- çææ¥æ: 20260923 |
| | | -- æ¥æº: ä¸ä»£ç å
¨éæ¯å¯¹ï¼178 个 Mapper XML + å
¨é¨ Java æºç ï¼ |
| | | -- èå´: 132 å¼ ä»£ç é¶å¼ç¨ç表ï¼ç©ºè¡¨ 110 å¼ + ææ°æ®çå¤ä»½è¡¨ 22 å¼ ï¼ |
| | | -- 注æ: 以ä¸è¡¨å·²è¢«æé¤ï¼è¯·å¿å é¤: |
| | | -- * qrtz_* (Quartz æ¡æ¶è¡¨ï¼è¿è¡æ¶ä½¿ç¨) |
| | | -- * magic_config (magic-api æ¡æ¶è¡¨) |
| | | -- * pat_med_outhosp_20260406 (å表æºå¶+åå¨è¿ç¨+è§å¾ v_pat_med_outhosp 使ç¨) |
| | | -- ============================================================================ |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãéè¦ãæ§è¡åå¡å¿
å
å¤ä»½ãæ¬åºçä¼¼å¤ç³»ç»å
±ç¨ï¼å»ºè®®å
确认æ å
¶ä»ç¨åºè¯»åã |
| | | -- ææ°æ®ç 22 å¼ è¡¨å»ºè®®å
æ§è¡ä¸æ¹ mysqldump å¤ä»½ï¼ |
| | | -- mysqldump -h192.168.99.192 -P3306 -uroot -p smartor_nhfy \ |
| | | -- icd10_copy1 \ |
| | | -- pat_archive-old \ |
| | | -- pat_archive_copy1 \ |
| | | -- pat_archive_copy6 \ |
| | | -- pat_med_inhosp-old \ |
| | | -- pat_med_inhosp_0710 \ |
| | | -- pat_med_inhosp_0814 \ |
| | | -- pat_med_inhosp_copy1 \ |
| | | -- service_subtask_0710 \ |
| | | -- service_subtask_copy1 \ |
| | | -- service_subtask_copy2 \ |
| | | -- service_subtask_copy3 \ |
| | | -- service_subtask_copy4 \ |
| | | -- service_subtask_copy5 \ |
| | | -- service_subtask_detail_copy1 \ |
| | | -- service_subtask_detail_copy2 \ |
| | | -- service_task_260806 \ |
| | | -- service_taskdept_260806 \ |
| | | -- service_taskdiag_copy4 \ |
| | | -- svy_lib_template_targetoption_copy1 \ |
| | | -- svy_task_template_targetoption_copy1 \ |
| | | -- sys_user-old |
| | | -- > backup_unused_tables_20260923.sql |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | USE `smartor_nhfy`; |
| | | SET FOREIGN_KEY_CHECKS = 0; |
| | | |
| | | -- ============================================================================ |
| | | -- 第 0 é¨åï¼é¢æ£æ¥ï¼åªè¯»ï¼ä¸ä¼æ¹ä»»ä½æ°æ®ï¼ |
| | | -- 说æ: information_schema.tables.table_rows 对 InnoDB æ¯ä¼°ç®å¼ï¼ |
| | | -- ä¸é¢ç UNION ALL æ¯ç²¾ç¡® COUNTï¼æ§è¡ååºçå°ææ cnt å为 0ã |
| | | -- è¥æè¡ cnt > 0ï¼è¯´æè¯¥è¡¨ä»ææ°æ®ï¼è¯·å
ä»ã第 1 é¨åãä¸ç§»é¤è¯¥è¡¨ç DROP è¯å¥ã |
| | | -- ============================================================================ |
| | | SELECT 'xxx' AS tbl, 0 AS cnt WHERE 1=0 |
| | | UNION ALL SELECT '_base_dept', COUNT(*) FROM `_base_dept` |
| | | UNION ALL SELECT '_base_dict', COUNT(*) FROM `_base_dict` |
| | | UNION ALL SELECT '_base_dict_item', COUNT(*) FROM `_base_dict_item` |
| | | UNION ALL SELECT '_base_dict_medarea', COUNT(*) FROM `_base_dict_medarea` |
| | | UNION ALL SELECT '_base_permission', COUNT(*) FROM `_base_permission` |
| | | UNION ALL SELECT '_base_permissionresources', COUNT(*) FROM `_base_permissionresources` |
| | | UNION ALL SELECT '_base_role', COUNT(*) FROM `_base_role` |
| | | UNION ALL SELECT 'ai_conversation', COUNT(*) FROM `ai_conversation` |
| | | UNION ALL SELECT 'ai_message', COUNT(*) FROM `ai_message` |
| | | UNION ALL SELECT 'base_applydisease', COUNT(*) FROM `base_applydisease` |
| | | UNION ALL SELECT 'base_dict_disease', COUNT(*) FROM `base_dict_disease` |
| | | UNION ALL SELECT 'base_dict_drug', COUNT(*) FROM `base_dict_drug` |
| | | UNION ALL SELECT 'base_dict_inspect', COUNT(*) FROM `base_dict_inspect` |
| | | UNION ALL SELECT 'base_dict_physicalpackage', COUNT(*) FROM `base_dict_physicalpackage` |
| | | UNION ALL SELECT 'base_dict_surgery', COUNT(*) FROM `base_dict_surgery` |
| | | UNION ALL SELECT 'base_dict_test', COUNT(*) FROM `base_dict_test` |
| | | UNION ALL SELECT 'base_person', COUNT(*) FROM `base_person` |
| | | UNION ALL SELECT 'base_pushtemplate', COUNT(*) FROM `base_pushtemplate` |
| | | UNION ALL SELECT 'base_scoringway', COUNT(*) FROM `base_scoringway` |
| | | UNION ALL SELECT 'base_scoringwaydetail', COUNT(*) FROM `base_scoringwaydetail` |
| | | UNION ALL SELECT 'base_sequence', COUNT(*) FROM `base_sequence` |
| | | UNION ALL SELECT 'base_taskvariable', COUNT(*) FROM `base_taskvariable` |
| | | UNION ALL SELECT 'base_template', COUNT(*) FROM `base_template` |
| | | UNION ALL SELECT 'base_templatecategory', COUNT(*) FROM `base_templatecategory` |
| | | UNION ALL SELECT 'base_wxaccount', COUNT(*) FROM `base_wxaccount` |
| | | UNION ALL SELECT 'bpbj', COUNT(*) FROM `bpbj` |
| | | UNION ALL SELECT 'chat_friend', COUNT(*) FROM `chat_friend` |
| | | UNION ALL SELECT 'chat_friend_group', COUNT(*) FROM `chat_friend_group` |
| | | UNION ALL SELECT 'chat_group_chat', COUNT(*) FROM `chat_group_chat` |
| | | UNION ALL SELECT 'chat_group_members', COUNT(*) FROM `chat_group_members` |
| | | UNION ALL SELECT 'chat_message', COUNT(*) FROM `chat_message` |
| | | UNION ALL SELECT 'chat_message_statistics', COUNT(*) FROM `chat_message_statistics` |
| | | UNION ALL SELECT 'chat_user', COUNT(*) FROM `chat_user` |
| | | UNION ALL SELECT 'crm_complaint', COUNT(*) FROM `crm_complaint` |
| | | UNION ALL SELECT 'cti_callseats', COUNT(*) FROM `cti_callseats` |
| | | UNION ALL SELECT 'dev_bug', COUNT(*) FROM `dev_bug` |
| | | UNION ALL SELECT 'dev_checkrecords', COUNT(*) FROM `dev_checkrecords` |
| | | UNION ALL SELECT 'dev_equipmentinfo', COUNT(*) FROM `dev_equipmentinfo` |
| | | UNION ALL SELECT 'dev_repairpl', COUNT(*) FROM `dev_repairpl` |
| | | UNION ALL SELECT 'dev_repairtype', COUNT(*) FROM `dev_repairtype` |
| | | UNION ALL SELECT 'dev_rprecords', COUNT(*) FROM `dev_rprecords` |
| | | UNION ALL SELECT 'flw_channel_definition', COUNT(*) FROM `flw_channel_definition` |
| | | UNION ALL SELECT 'flw_ev_databasechangelog', COUNT(*) FROM `flw_ev_databasechangelog` |
| | | UNION ALL SELECT 'flw_ev_databasechangeloglock', COUNT(*) FROM `flw_ev_databasechangeloglock` |
| | | UNION ALL SELECT 'flw_event_definition', COUNT(*) FROM `flw_event_definition` |
| | | UNION ALL SELECT 'flw_event_deployment', COUNT(*) FROM `flw_event_deployment` |
| | | UNION ALL SELECT 'flw_event_resource', COUNT(*) FROM `flw_event_resource` |
| | | UNION ALL SELECT 'flw_ru_batch', COUNT(*) FROM `flw_ru_batch` |
| | | UNION ALL SELECT 'flw_ru_batch_part', COUNT(*) FROM `flw_ru_batch_part` |
| | | UNION ALL SELECT 'ivr_task_singlerecords', COUNT(*) FROM `ivr_task_singlerecords` |
| | | UNION ALL SELECT 'ivr_taskdetail1', COUNT(*) FROM `ivr_taskdetail1` |
| | | UNION ALL SELECT 'pat_med_apointment', COUNT(*) FROM `pat_med_apointment` |
| | | UNION ALL SELECT 'pat_tube_feek', COUNT(*) FROM `pat_tube_feek` |
| | | UNION ALL SELECT 'pat_tube_feek_medicine', COUNT(*) FROM `pat_tube_feek_medicine` |
| | | UNION ALL SELECT 'patientinfo', COUNT(*) FROM `patientinfo` |
| | | UNION ALL SELECT 'questionnaire_advise', COUNT(*) FROM `questionnaire_advise` |
| | | UNION ALL SELECT 'questionnaire_question', COUNT(*) FROM `questionnaire_question` |
| | | UNION ALL SELECT 'questionnaire_questionnaire', COUNT(*) FROM `questionnaire_questionnaire` |
| | | UNION ALL SELECT 'questionnaire_questionoption', COUNT(*) FROM `questionnaire_questionoption` |
| | | UNION ALL SELECT 'questionnaire_questiontype', COUNT(*) FROM `questionnaire_questiontype` |
| | | UNION ALL SELECT 'questionnaire_result', COUNT(*) FROM `questionnaire_result` |
| | | UNION ALL SELECT 'questionnaire_resultdetail', COUNT(*) FROM `questionnaire_resultdetail` |
| | | UNION ALL SELECT 'questionnairequestion', COUNT(*) FROM `questionnairequestion` |
| | | UNION ALL SELECT 'questionnairequestionoption', COUNT(*) FROM `questionnairequestionoption` |
| | | UNION ALL SELECT 'scheme_taskrecord_callrecord', COUNT(*) FROM `scheme_taskrecord_callrecord` |
| | | UNION ALL SELECT 'service_scheme', COUNT(*) FROM `service_scheme` |
| | | UNION ALL SELECT 'service_taskdiagnose', COUNT(*) FROM `service_taskdiagnose` |
| | | UNION ALL SELECT 'sms_account', COUNT(*) FROM `sms_account` |
| | | UNION ALL SELECT 'soline', COUNT(*) FROM `soline` |
| | | UNION ALL SELECT 'sopaymentterm', COUNT(*) FROM `sopaymentterm` |
| | | UNION ALL SELECT 'student', COUNT(*) FROM `student` |
| | | UNION ALL SELECT 'svr_plan', COUNT(*) FROM `svr_plan` |
| | | UNION ALL SELECT 'svr_prj', COUNT(*) FROM `svr_prj` |
| | | UNION ALL SELECT 'svr_prjtask', COUNT(*) FROM `svr_prjtask` |
| | | UNION ALL SELECT 'svr_prjtaskline', COUNT(*) FROM `svr_prjtaskline` |
| | | UNION ALL SELECT 'svr_task', COUNT(*) FROM `svr_task` |
| | | UNION ALL SELECT 'svr_taskrecord', COUNT(*) FROM `svr_taskrecord` |
| | | UNION ALL SELECT 'svy_lib_resultrule', COUNT(*) FROM `svy_lib_resultrule` |
| | | UNION ALL SELECT 'svy_task_template_rule', COUNT(*) FROM `svy_task_template_rule` |
| | | UNION ALL SELECT 'sys_deploy_form', COUNT(*) FROM `sys_deploy_form` |
| | | UNION ALL SELECT 'sys_expression', COUNT(*) FROM `sys_expression` |
| | | UNION ALL SELECT 'sys_form', COUNT(*) FROM `sys_form` |
| | | UNION ALL SELECT 'sys_listener', COUNT(*) FROM `sys_listener` |
| | | UNION ALL SELECT 'sys_task_form', COUNT(*) FROM `sys_task_form` |
| | | UNION ALL SELECT 'sys_user_dept_import', COUNT(*) FROM `sys_user_dept_import` |
| | | UNION ALL SELECT 'sys_variable', COUNT(*) FROM `sys_variable` |
| | | UNION ALL SELECT 't_delid', COUNT(*) FROM `t_delid` |
| | | UNION ALL SELECT 'table_svy', COUNT(*) FROM `table_svy` |
| | | UNION ALL SELECT 'tabledesc', COUNT(*) FROM `tabledesc` |
| | | UNION ALL SELECT 'tools', COUNT(*) FROM `tools` |
| | | UNION ALL SELECT 'treatment_plan', COUNT(*) FROM `treatment_plan` |
| | | UNION ALL SELECT 'treatment_plandetail', COUNT(*) FROM `treatment_plandetail` |
| | | UNION ALL SELECT 'treatment_plantemplate', COUNT(*) FROM `treatment_plantemplate` |
| | | UNION ALL SELECT 'treatment_plantemplatedetail', COUNT(*) FROM `treatment_plantemplatedetail` |
| | | UNION ALL SELECT 'wechat_accesstoken', COUNT(*) FROM `wechat_accesstoken` |
| | | UNION ALL SELECT 'wechat_function', COUNT(*) FROM `wechat_function` |
| | | UNION ALL SELECT 'wechat_function_jumpurl', COUNT(*) FROM `wechat_function_jumpurl` |
| | | UNION ALL SELECT 'wechat_functiontype', COUNT(*) FROM `wechat_functiontype` |
| | | UNION ALL SELECT 'wechat_jssdk_ticket', COUNT(*) FROM `wechat_jssdk_ticket` |
| | | UNION ALL SELECT 'wechat_menu', COUNT(*) FROM `wechat_menu` |
| | | UNION ALL SELECT 'wechat_pay_success', COUNT(*) FROM `wechat_pay_success` |
| | | UNION ALL SELECT 'wechat_qrcode', COUNT(*) FROM `wechat_qrcode` |
| | | UNION ALL SELECT 'wechat_respmessage', COUNT(*) FROM `wechat_respmessage` |
| | | UNION ALL SELECT 'wechat_respmessage_key', COUNT(*) FROM `wechat_respmessage_key` |
| | | UNION ALL SELECT 'wechat_sendrecord', COUNT(*) FROM `wechat_sendrecord` |
| | | UNION ALL SELECT 'wechat_subscribeqrcode', COUNT(*) FROM `wechat_subscribeqrcode` |
| | | UNION ALL SELECT 'wechat_subscribesend', COUNT(*) FROM `wechat_subscribesend` |
| | | UNION ALL SELECT 'wechat_templatemessage_templatelist', COUNT(*) FROM `wechat_templatemessage_templatelist` |
| | | UNION ALL SELECT 'wechat_userinfo', COUNT(*) FROM `wechat_userinfo` |
| | | UNION ALL SELECT 'wechat_userinfo_subscribeinfo', COUNT(*) FROM `wechat_userinfo_subscribeinfo` |
| | | ORDER BY cnt DESC; |
| | | |
| | | -- ============================================================================ |
| | | -- 第 1 é¨åï¼å é¤ç©ºè¡¨ï¼110 å¼ ï¼å·²æ ¸å¯¹å为 0 è¡ï¼ |
| | | -- ä½¿ç¨ IF EXISTSï¼å¯é夿§è¡ï¼ä¸ä¼æ¥é |
| | | -- ============================================================================ |
| | | DROP TABLE IF EXISTS `_base_dept`; |
| | | DROP TABLE IF EXISTS `_base_dict`; |
| | | DROP TABLE IF EXISTS `_base_dict_item`; |
| | | DROP TABLE IF EXISTS `_base_dict_medarea`; |
| | | DROP TABLE IF EXISTS `_base_permission`; |
| | | DROP TABLE IF EXISTS `_base_permissionresources`; |
| | | DROP TABLE IF EXISTS `_base_role`; |
| | | DROP TABLE IF EXISTS `ai_conversation`; |
| | | DROP TABLE IF EXISTS `ai_message`; |
| | | DROP TABLE IF EXISTS `base_applydisease`; |
| | | DROP TABLE IF EXISTS `base_dict_disease`; |
| | | DROP TABLE IF EXISTS `base_dict_drug`; |
| | | DROP TABLE IF EXISTS `base_dict_inspect`; |
| | | DROP TABLE IF EXISTS `base_dict_physicalpackage`; |
| | | DROP TABLE IF EXISTS `base_dict_surgery`; |
| | | DROP TABLE IF EXISTS `base_dict_test`; |
| | | DROP TABLE IF EXISTS `base_person`; |
| | | DROP TABLE IF EXISTS `base_pushtemplate`; |
| | | DROP TABLE IF EXISTS `base_scoringway`; |
| | | DROP TABLE IF EXISTS `base_scoringwaydetail`; |
| | | DROP TABLE IF EXISTS `base_sequence`; |
| | | DROP TABLE IF EXISTS `base_taskvariable`; |
| | | DROP TABLE IF EXISTS `base_template`; |
| | | DROP TABLE IF EXISTS `base_templatecategory`; |
| | | DROP TABLE IF EXISTS `base_wxaccount`; |
| | | DROP TABLE IF EXISTS `bpbj`; |
| | | DROP TABLE IF EXISTS `chat_friend`; |
| | | DROP TABLE IF EXISTS `chat_friend_group`; |
| | | DROP TABLE IF EXISTS `chat_group_chat`; |
| | | DROP TABLE IF EXISTS `chat_group_members`; |
| | | DROP TABLE IF EXISTS `chat_message`; |
| | | DROP TABLE IF EXISTS `chat_message_statistics`; |
| | | DROP TABLE IF EXISTS `chat_user`; |
| | | DROP TABLE IF EXISTS `crm_complaint`; |
| | | DROP TABLE IF EXISTS `cti_callseats`; |
| | | DROP TABLE IF EXISTS `dev_bug`; |
| | | DROP TABLE IF EXISTS `dev_checkrecords`; |
| | | DROP TABLE IF EXISTS `dev_equipmentinfo`; |
| | | DROP TABLE IF EXISTS `dev_repairpl`; |
| | | DROP TABLE IF EXISTS `dev_repairtype`; |
| | | DROP TABLE IF EXISTS `dev_rprecords`; |
| | | DROP TABLE IF EXISTS `flw_channel_definition`; |
| | | DROP TABLE IF EXISTS `flw_ev_databasechangelog`; |
| | | DROP TABLE IF EXISTS `flw_ev_databasechangeloglock`; |
| | | DROP TABLE IF EXISTS `flw_event_definition`; |
| | | DROP TABLE IF EXISTS `flw_event_deployment`; |
| | | DROP TABLE IF EXISTS `flw_event_resource`; |
| | | DROP TABLE IF EXISTS `flw_ru_batch`; |
| | | DROP TABLE IF EXISTS `flw_ru_batch_part`; |
| | | DROP TABLE IF EXISTS `ivr_task_singlerecords`; |
| | | DROP TABLE IF EXISTS `ivr_taskdetail1`; |
| | | DROP TABLE IF EXISTS `pat_med_apointment`; |
| | | DROP TABLE IF EXISTS `pat_tube_feek`; |
| | | DROP TABLE IF EXISTS `pat_tube_feek_medicine`; |
| | | DROP TABLE IF EXISTS `patientinfo`; |
| | | DROP TABLE IF EXISTS `questionnaire_advise`; |
| | | DROP TABLE IF EXISTS `questionnaire_question`; |
| | | DROP TABLE IF EXISTS `questionnaire_questionnaire`; |
| | | DROP TABLE IF EXISTS `questionnaire_questionoption`; |
| | | DROP TABLE IF EXISTS `questionnaire_questiontype`; |
| | | DROP TABLE IF EXISTS `questionnaire_result`; |
| | | DROP TABLE IF EXISTS `questionnaire_resultdetail`; |
| | | DROP TABLE IF EXISTS `questionnairequestion`; |
| | | DROP TABLE IF EXISTS `questionnairequestionoption`; |
| | | DROP TABLE IF EXISTS `scheme_taskrecord_callrecord`; |
| | | DROP TABLE IF EXISTS `service_scheme`; |
| | | DROP TABLE IF EXISTS `service_taskdiagnose`; |
| | | DROP TABLE IF EXISTS `sms_account`; |
| | | DROP TABLE IF EXISTS `soline`; |
| | | DROP TABLE IF EXISTS `sopaymentterm`; |
| | | DROP TABLE IF EXISTS `student`; |
| | | DROP TABLE IF EXISTS `svr_plan`; |
| | | DROP TABLE IF EXISTS `svr_prj`; |
| | | DROP TABLE IF EXISTS `svr_prjtask`; |
| | | DROP TABLE IF EXISTS `svr_prjtaskline`; |
| | | DROP TABLE IF EXISTS `svr_task`; |
| | | DROP TABLE IF EXISTS `svr_taskrecord`; |
| | | DROP TABLE IF EXISTS `svy_lib_resultrule`; |
| | | DROP TABLE IF EXISTS `svy_task_template_rule`; |
| | | DROP TABLE IF EXISTS `sys_deploy_form`; |
| | | DROP TABLE IF EXISTS `sys_expression`; |
| | | DROP TABLE IF EXISTS `sys_form`; |
| | | DROP TABLE IF EXISTS `sys_listener`; |
| | | DROP TABLE IF EXISTS `sys_task_form`; |
| | | DROP TABLE IF EXISTS `sys_user_dept_import`; |
| | | DROP TABLE IF EXISTS `sys_variable`; |
| | | DROP TABLE IF EXISTS `t_delid`; |
| | | DROP TABLE IF EXISTS `table_svy`; |
| | | DROP TABLE IF EXISTS `tabledesc`; |
| | | DROP TABLE IF EXISTS `tools`; |
| | | DROP TABLE IF EXISTS `treatment_plan`; |
| | | DROP TABLE IF EXISTS `treatment_plandetail`; |
| | | DROP TABLE IF EXISTS `treatment_plantemplate`; |
| | | DROP TABLE IF EXISTS `treatment_plantemplatedetail`; |
| | | DROP TABLE IF EXISTS `wechat_accesstoken`; |
| | | DROP TABLE IF EXISTS `wechat_function`; |
| | | DROP TABLE IF EXISTS `wechat_function_jumpurl`; |
| | | DROP TABLE IF EXISTS `wechat_functiontype`; |
| | | DROP TABLE IF EXISTS `wechat_jssdk_ticket`; |
| | | DROP TABLE IF EXISTS `wechat_menu`; |
| | | DROP TABLE IF EXISTS `wechat_pay_success`; |
| | | DROP TABLE IF EXISTS `wechat_qrcode`; |
| | | DROP TABLE IF EXISTS `wechat_respmessage`; |
| | | DROP TABLE IF EXISTS `wechat_respmessage_key`; |
| | | DROP TABLE IF EXISTS `wechat_sendrecord`; |
| | | DROP TABLE IF EXISTS `wechat_subscribeqrcode`; |
| | | DROP TABLE IF EXISTS `wechat_subscribesend`; |
| | | DROP TABLE IF EXISTS `wechat_templatemessage_templatelist`; |
| | | DROP TABLE IF EXISTS `wechat_userinfo`; |
| | | DROP TABLE IF EXISTS `wechat_userinfo_subscribeinfo`; |
| | | |
| | | -- ============================================================================ |
| | | -- 第 2 é¨åï¼ææ°æ®çå¤ä»½è¡¨ï¼22 å¼ ï¼ |
| | | -- 为å®å
¨èµ·è§ï¼é»è®¤åªåãæ¹å彿¡£ãï¼å¯éæ¶æ¹åï¼ï¼è§å¯ä¸æ®µæ¶é´ååå é¤ï¼ |
| | | -- * 彿¡£å表ååç¼ä¸º zzz_del_ï¼æå¨åºå表æ«å°¾ï¼ä¸å½±åä¸å¡ |
| | | -- * æ¢å¤æ¹æ³: RENAME TABLE `zzz_del_xxx_20260923` TO `xxx`; |
| | | -- * 确认æ 误åï¼æ§è¡æ¬æä»¶æ«å°¾è¢«æ³¨éæç DROP è¯å¥å½»åºå é¤ |
| | | -- ============================================================================ |
| | | RENAME TABLE `icd10_copy1` TO `zzz_del_icd10_copy1_20260923`; |
| | | RENAME TABLE `pat_archive-old` TO `zzz_del_pat_archive-old_20260923`; |
| | | RENAME TABLE `pat_archive_copy1` TO `zzz_del_pat_archive_copy1_20260923`; |
| | | RENAME TABLE `pat_archive_copy6` TO `zzz_del_pat_archive_copy6_20260923`; |
| | | RENAME TABLE `pat_med_inhosp-old` TO `zzz_del_pat_med_inhosp-old_20260923`; |
| | | RENAME TABLE `pat_med_inhosp_0710` TO `zzz_del_pat_med_inhosp_0710_20260923`; |
| | | RENAME TABLE `pat_med_inhosp_0814` TO `zzz_del_pat_med_inhosp_0814_20260923`; |
| | | RENAME TABLE `pat_med_inhosp_copy1` TO `zzz_del_pat_med_inhosp_copy1_20260923`; |
| | | RENAME TABLE `service_subtask_0710` TO `zzz_del_service_subtask_0710_20260923`; |
| | | RENAME TABLE `service_subtask_copy1` TO `zzz_del_service_subtask_copy1_20260923`; |
| | | RENAME TABLE `service_subtask_copy2` TO `zzz_del_service_subtask_copy2_20260923`; |
| | | RENAME TABLE `service_subtask_copy3` TO `zzz_del_service_subtask_copy3_20260923`; |
| | | RENAME TABLE `service_subtask_copy4` TO `zzz_del_service_subtask_copy4_20260923`; |
| | | RENAME TABLE `service_subtask_copy5` TO `zzz_del_service_subtask_copy5_20260923`; |
| | | RENAME TABLE `service_subtask_detail_copy1` TO `zzz_del_service_subtask_detail_copy1_20260923`; |
| | | RENAME TABLE `service_subtask_detail_copy2` TO `zzz_del_service_subtask_detail_copy2_20260923`; |
| | | RENAME TABLE `service_task_260806` TO `zzz_del_service_task_260806_20260923`; |
| | | RENAME TABLE `service_taskdept_260806` TO `zzz_del_service_taskdept_260806_20260923`; |
| | | RENAME TABLE `service_taskdiag_copy4` TO `zzz_del_service_taskdiag_copy4_20260923`; |
| | | RENAME TABLE `svy_lib_template_targetoption_copy1` TO `zzz_del_svy_lib_template_targetoption_copy1_20260923`; |
| | | RENAME TABLE `svy_task_template_targetoption_copy1` TO `zzz_del_svy_task_template_targetoption_copy1_20260923`; |
| | | RENAME TABLE `sys_user-old` TO `zzz_del_sys_user-old_20260923`; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- å½»åºå é¤ï¼è§å¯æç»æãç¡®è®¤å½æ¡£æ 误åï¼åæ¶ä¸é¢æ³¨éæ§è¡ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- DROP TABLE IF EXISTS `zzz_del_icd10_copy1_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_pat_archive-old_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_pat_archive_copy1_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_pat_archive_copy6_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp-old_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp_0710_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp_0814_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp_copy1_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_0710_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy1_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy2_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy3_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy4_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy5_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_detail_copy1_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_subtask_detail_copy2_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_task_260806_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_taskdept_260806_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_service_taskdiag_copy4_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_svy_lib_template_targetoption_copy1_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_svy_task_template_targetoption_copy1_20260923`; |
| | | -- DROP TABLE IF EXISTS `zzz_del_sys_user-old_20260923`; |
| | | |
| | | SET FOREIGN_KEY_CHECKS = 1; |
| | | |
| | | -- =============================== èæ¬ç»æ ==================================== |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- çç«å德鍿¥è¯éé失败记å½è¡¨ |
| | | -- |
| | | -- èæ¯ï¼HIS 鍿¥è¯æ°æ®åªè½æå¤©æ¥ï¼éé任塿¯åå°æ¶æå½å¤©å
¨éï¼ä¸ä¸å¤æ¡ï¼æä¸éã |
| | | -- åæ¡è®°å½å¦æè½¬æ¢å¤±è´¥/æ¡£æ¡å¤ç失败/å
¥åºå¤±è´¥ï¼åæ¥ä¼æ´é¡µå¤±è´¥å¹¶å¡ä½ééè¿åº¦ã |
| | | -- ç°å¨æ¹ä¸ºåå
¥æ¬è¡¨äº¤ç»äººå·¥å¤çï¼ééè¿åº¦ä¸åå½±åã |
| | | -- |
| | | -- å䏿¡è®°å½åä¸ç±»é误åªä¿çä¸è¡ï¼å¯ä¸ç´¢å¼ uk_serialnum_type(serialnum, error_type)ï¼ |
| | | -- éå¤å¤±è´¥ç´¯å fail_countï¼å¯ä»¥çåºå®è¿ç»å¤±è´¥äºå¤å°è½®ï¼ï¼å¼å¸¸ä¿¡æ¯ååå§ JSON ä¼è¢«ææ°ä¸æ¬¡è¦çã |
| | | -- 人工æ handle_status æ¹æ 1ï¼å·²å¤çï¼åå¦æè¯¥è®°å½å次失败ï¼ä¼èªå¨åå° 0ï¼å¾
å¤çï¼ï¼ |
| | | -- æ¹æ 2ï¼å·²å¿½ç¥ï¼çä¸ä¼åè¢«ææ°ã |
| | | -- |
| | | -- 人工å¤çå¸¸ç¨ SQLï¼ |
| | | -- æ¥çå¾
å¤çï¼select * from pat_med_outhosp_error where handle_status = '0' order by fail_count desc, id; |
| | | -- çåå§æ°æ®ï¼select serialnum, error_type, error_msg, raw_data from pat_med_outhosp_error where handle_status = '0'; |
| | | -- æ è®°å·²å¤çï¼update pat_med_outhosp_error set handle_status = '1', handle_remark = 'åå +å¤ç人' where id = ?; |
| | | -- ============================================================================ |
| | | |
| | | CREATE TABLE IF NOT EXISTS pat_med_outhosp_error |
| | | ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主é®ID', |
| | | serialnum VARCHAR(64) DEFAULT NULL COMMENT 'è¯çè®°å½å·ï¼healthcareRecordNoï¼', |
| | | outhospno VARCHAR(64) DEFAULT NULL COMMENT 'é¨è¯å·', |
| | | patname VARCHAR(100) DEFAULT NULL COMMENT 'æ£è
å§å', |
| | | patno VARCHAR(64) DEFAULT NULL COMMENT 'ç
åå·', |
| | | campusid VARCHAR(32) DEFAULT NULL COMMENT 'é¢åºID', |
| | | orgid VARCHAR(32) DEFAULT NULL COMMENT 'æºæID', |
| | | admitdate DATETIME DEFAULT NULL COMMENT 'å°±è¯æ¶é´', |
| | | gather_date VARCHAR(20) DEFAULT NULL COMMENT 'é鿥æ yyyy-MM-dd', |
| | | error_type VARCHAR(20) NOT NULL COMMENT 'é误类åï¼CONVERT-æ°æ®è½¬æ¢å¤±è´¥ ARCHIVE-æ£è
æ¡£æ¡å¤ç失败 INSERT-å
¥åºå¤±è´¥', |
| | | error_msg VARCHAR(1000) DEFAULT NULL COMMENT 'å¼å¸¸ä¿¡æ¯', |
| | | raw_data TEXT COMMENT 'æ¥å£è¿åçåå§è®°å½JSONï¼äººå·¥ä¿®å¤å坿®æ¤éæ¨', |
| | | fail_count INT NOT NULL DEFAULT 1 COMMENT '累计失败次æ°', |
| | | handle_status CHAR(1) NOT NULL DEFAULT '0' COMMENT 'å¤çç¶æï¼0å¾
å¤ç 1å·²å¤ç 2已忽ç¥', |
| | | handle_remark VARCHAR(500) DEFAULT NULL COMMENT 'å¤ç夿³¨', |
| | | create_time DATETIME DEFAULT NULL COMMENT 'å建æ¶é´', |
| | | update_time DATETIME DEFAULT NULL COMMENT 'æ´æ°æ¶é´', |
| | | PRIMARY KEY (id), |
| | | UNIQUE KEY uk_serialnum_type (serialnum, error_type), |
| | | KEY idx_handle_status (handle_status), |
| | | KEY idx_error_type (error_type), |
| | | KEY idx_create_time (create_time) |
| | | ) ENGINE = InnoDB |
| | | DEFAULT CHARSET = utf8mb4 COMMENT ='çç«å德鍿¥è¯éé失败记å½ï¼äººå·¥å¤çï¼'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================================================== |
| | | -- è¯æï¼admin ç»å½/åå»ºä»»å¡æ¶çä¸å°å
¨é¨ç§å®¤ç
åº + belongDepts/belongWards æ¥è¯¢æ
¢ |
| | | -- æ¥æï¼2026-11-06 åºï¼smartor_nhfyï¼192.168.99.192:3306ï¼ |
| | | -- |
| | | -- 代ç é¾è·¯ï¼å·²ç¡®è®¤ï¼ï¼ |
| | | -- GET /getInfo â SysLoginController#getInfoï¼L243-254ï¼ |
| | | -- â ISysDeptService#selectLeafSysDeptListBySysUserDept |
| | | -- GET /system/user/getInfo â SysUserController#getInfoï¼L151-165ï¼ï¼åæ ·ä¸¤è¡ |
| | | -- â SysDeptServiceImpl#selectLeafSysDeptListBySysUserDeptï¼L335-341ï¼ |
| | | -- â SysDeptMapper#selectSysDeptListBySysUserDeptï¼SysDeptMapper.xml L286-298ï¼ |
| | | -- â TreeUtils.getLeafDeptsï¼åªçå¶åï¼ |
| | | -- å端ãå建任å¡ãçç§å®¤/ç
åºä¸æå°±æ¯ç¨è¿ä¸¤ä¸ªè¿åç belongDepts / belongWardsã |
| | | -- |
| | | -- å
³é®ç¹ï¼å䏿®µ SQL åæ¶é æãçä¸å°ãåãæ
¢ãï¼ï¼ |
| | | -- 1) å表æ¥èª sys_dept INNER JOIN sys_user_dept ON dept_code â åªæãè³å°è¢«æä¸ªç¨æ·å
³èè¿ãç |
| | | -- ç§å®¤/ç
åºæä¼åºç°ï¼admin å¨ /getInfo éåæ ·å¸¦ userIdï¼çäºåªçèªå·±è¢«åé
çé¨é¨ã |
| | | -- 2) 该 SQL è¿å¸¦ `and d.campusid = ç»å½ç¨æ·é¢åº`ï¼L295ï¼ï¼sys_dept.campusid 为空æä¸ç»å½é¢åº |
| | | -- ä¸ä¸è´çé¨é¨ä¼è¢«è¿æ»¤æã |
| | | -- 3) ç»æåè¿ TreeUtils.getLeafDeptsï¼å¡æ¯ã被å«çé¨é¨å½æ parent_idãçé¨é¨é½ä¸è¿åã |
| | | -- 4) æ
¢ï¼admin 忝ï¼SysUserServiceImpl#selectLeafSysDeptForAdminï¼ä¸å¸¦ userIdï¼ |
| | | -- è¿æ¡ join å°±åæãç§å®¤ à å
³è该ç§å®¤çææç¨æ·ãçç¬å¡å°æ¾å¤§ï¼ä¸¤ä¸ªæ¥è¯¢ä¸²è¡ãæ¯è¡è¿è¦ |
| | | -- BeanUtils.copyProperties è½¬ä¸æ¬¡ãè¿è¢«å
å¨ 50 ç§è¶
æ¶éã |
| | | -- ===================================================================================== |
| | | |
| | | -- 1. admin å¨ sys_user_dept éå°åºæå¤å°æ¡å
³ç³»ï¼å° â 䏿就å°ï¼ |
| | | SELECT u.user_id, u.user_name, u.orgid, u.campusid, u.searchscope, |
| | | (SELECT COUNT(*) FROM sys_user_dept ud |
| | | WHERE ud.user_id = u.user_id AND ud.del_flag = '0' AND ud.dept_type = '1') AS ks_cnt, |
| | | (SELECT COUNT(*) FROM sys_user_dept ud |
| | | WHERE ud.user_id = u.user_id AND ud.del_flag = '0' AND ud.dept_type = '2') AS bq_cnt |
| | | FROM sys_user u |
| | | WHERE u.user_name IN ('admin') -- æ¢æå®é
ç»å½è´¦å· |
| | | OR u.user_id IN (SELECT ud.user_id FROM sys_user_dept ud GROUP BY ud.user_id ORDER BY COUNT(*) DESC LIMIT 5); |
| | | |
| | | -- 2. è¯¥æºæãåºè¯¥æãå¤å°ç§å®¤/ç
åºï¼sys_dept å
¨éï¼ |
| | | SELECT orgid, dept_type, COUNT(*) AS rows_, COUNT(DISTINCT dept_code) AS codes |
| | | FROM sys_dept |
| | | WHERE del_flag = '0' AND orgid = '20001001' -- æ¢æå®é
orgid |
| | | GROUP BY orgid, dept_type; |
| | | |
| | | -- 3. ãè½æ¥åºæ¥ãå¤å°ï¼join å + 带 campusid è¿æ»¤ï¼å¯¹æ¯ç¬¬ 2 æ¥ï¼å·®å¤å°å°±æ¯ä¸¢äºå¤å° |
| | | SELECT 'æ´ä½(ä¸éé¢åº)' AS scope, d.dept_type, |
| | | COUNT(*) AS join_rows, COUNT(DISTINCT d.dept_code) AS dept_codes, |
| | | COUNT(DISTINCT d.dept_id) AS dept_ids |
| | | FROM sys_dept d |
| | | INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code |
| | | WHERE d.del_flag = '0' AND ud.del_flag = '0' |
| | | AND d.orgid = '20001001' AND ud.orgid = '20001001' |
| | | GROUP BY d.dept_type |
| | | UNION ALL |
| | | SELECT CONCAT('éé¢åº ', u.campusid) AS scope, d.dept_type, |
| | | COUNT(*), COUNT(DISTINCT d.dept_code), COUNT(DISTINCT d.dept_id) |
| | | FROM sys_dept d |
| | | INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code |
| | | JOIN sys_user u ON u.user_id = ud.user_id |
| | | WHERE d.del_flag = '0' AND ud.del_flag = '0' |
| | | AND d.orgid = '20001001' AND ud.orgid = '20001001' |
| | | AND d.campusid = u.campusid |
| | | GROUP BY u.campusid, d.dept_type; |
| | | |
| | | -- 4. campusid æ¯å¦å¯¹ä¸ä¸ï¼sys_dept 侧为空 / ä¸ç»å½é¢åºä¸åï¼ |
| | | SELECT IFNULL(d.campusid, '(NULL)') AS dept_campusid, d.dept_type, COUNT(*) AS rows_ |
| | | FROM sys_dept d |
| | | WHERE d.del_flag = '0' AND d.orgid = '20001001' |
| | | GROUP BY d.campusid, d.dept_type |
| | | ORDER BY rows_ DESC; |
| | | |
| | | -- 5. å¶åè¿æ»¤ä¼ä¸¢æå¤å°ï¼åä¸ dept_type å
ï¼æåé¨é¨çé¨é¨ä¸ç®å¶åï¼ |
| | | SELECT d.dept_type, |
| | | COUNT(*) AS all_rows, |
| | | SUM(CASE WHEN EXISTS (SELECT 1 FROM sys_dept c |
| | | WHERE c.parent_id = d.dept_id AND c.del_flag = '0') THEN 1 ELSE 0 END) AS not_leaf, |
| | | SUM(CASE WHEN NOT EXISTS (SELECT 1 FROM sys_dept c |
| | | WHERE c.parent_id = d.dept_id AND c.del_flag = '0') THEN 1 ELSE 0 END) AS leaf |
| | | FROM sys_dept d |
| | | WHERE d.del_flag = '0' AND d.orgid = '20001001' |
| | | GROUP BY d.dept_type; |
| | | |
| | | -- 6. æ
¢çéåï¼è¿æ¡ join æ¯æ¬¡é½è¿åå¤å°è¡ï¼è¡æ°å°±æ¯ä¼ è¾é + BeanUtils è½¬æ¢æ¬¡æ°ï¼ |
| | | SELECT COUNT(*) AS join_rows_without_user |
| | | FROM sys_dept d |
| | | INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code |
| | | WHERE d.del_flag = '0' AND ud.del_flag = '0' |
| | | AND d.orgid = '20001001' AND ud.orgid = '20001001' |
| | | AND d.dept_type = '1'; |
| | | -- ææï¼è¿å¤§äº sys_dept éç§å®¤ç宿¡æ°ãè¿å°±æ¯ admin 忝æ
¢ï¼selectLeafSysDeptForAdminï¼çå
¨é¨åå ã |
| | | |
| | | -- 7. ç¸å
³ç´¢å¼ç°ç¶ï¼ä¸é¢å»ºè®®çç´¢å¼ç¼ºåªä¸ªè¡¥åªä¸ªï¼ |
| | | SELECT table_name, index_name, seq_in_index, column_name |
| | | FROM information_schema.statistics |
| | | WHERE table_schema = DATABASE() AND table_name IN ('sys_dept', 'sys_user_dept') |
| | | ORDER BY table_name, index_name, seq_in_index; |
| | | |
| | | -- 8. 建议索å¼ï¼å
ç 7 åæ§è¡ï¼ |
| | | -- ALTER TABLE sys_user_dept ADD INDEX idx_sud_code_org_type (dept_code, orgid, dept_type, del_flag, user_id); |
| | | -- ALTER TABLE sys_user_dept ADD INDEX idx_sud_user_type (user_id, dept_type, orgid, del_flag, dept_code); |
| | | -- ALTER TABLE sys_dept ADD INDEX idx_sd_org_type_campus (orgid, dept_type, campusid, del_flag, dept_code); |
| | | -- ALTER TABLE sys_dept ADD INDEX idx_sd_code_org (dept_code, orgid, del_flag); |
| | | |
| | | -- 9. ä¿®å®åèªæ£ï¼admin åºè¯¥è½çå°è¯¥æºæå
¨é¨ç§å®¤/ç
åºï¼æ°éçäºç¬¬ 2 æ¥ç codesï¼ |
| | | SELECT d.dept_type, COUNT(DISTINCT d.dept_code) AS visible_codes |
| | | FROM sys_dept d |
| | | WHERE d.del_flag = '0' AND d.orgid = '20001001' |
| | | AND (d.campusid IS NULL OR d.campusid = '30001002') -- ä¸ç»å½é¢åºä¿æä¸è´ |
| | | GROUP BY d.dept_type; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- åºé¢é访ãå°çæãææ¥èæ¬ï¼ååéä¸ / nhfyï¼ââ **åªè¯»**ï¼å
¨é¨æ¯ SELECT |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ç»è®ºå
è¡ï¼2026-10-29 å¨ nhfy 线ä¸åºå®æµï¼ç
åº=骨ç§ä¸å¿ä¸ç
åº 40011020ï¼åºé¢æ¥æ 2026-07-01~09-30ï¼ï¼ |
| | | -- åºé¢ç»è®° 475 æ¡ â é访任å¡å
¶å® **475 æ¡ä¸æ¡æ²¡å°**ï¼service_subtask.service_type='2'ï¼ |
| | | -- 页é¢åªæ¾ç¤º 443 æ¡ï¼ä½ æªå¾æ¶ 444ï¼ï¼å·®é¢æ¯ã页颿¥ä¸å°ãï¼ä¸æ¯ã没çæãï¼ |
| | | -- â 25 æ¡ service_subtask.campusid 为 NULL |
| | | -- ââ ServiceSubtaskController#patItem å¼ºå¶ setCampusid(ç»å½ç¨æ·é¢åº)ï¼ |
| | | -- SQL æ¡ä»¶ `and campusid = #{campusid}`ï¼æä»¥é¢åºä¸ºç©ºçä»»å¡å¯¹ä»»ä½äººé½ä¸æ¾ç¤º |
| | | -- â¡ 7 æ¡ service_subtask.leavehospitaldistrictcode 䏿¯æ¬ç
åº |
| | | -- ï¼4 æ¡ä¸ºç©º / 2 æ¡éª¨ç§äºç
åº / 1 æ¡éª¨ç§ä¸ç
åºï¼â æç
åºè¿æ»¤æ¶çä¸å° |
| | | -- ⢠475 - 25 - 7 = 443 |
| | | -- |
| | | -- â çæå ï¼å·²æ ¸å°è¡ï¼ï¼ |
| | | -- è¿ 25 æ¡åºé¢è®°å½ 2026-07-14~07-29 å
¥åºæ¶ pat_med_inhosp.campusid ä¸ºç©ºï¼ |
| | | -- 2026-07-29~07-31 åæ¨æ«æçæä»»å¡æ¶ï¼VisitSubtaskFactory#boxedServiceSubtask é |
| | | -- `d.setCampusid(inhosp.getCampusid())` ç¨åºé¢è®°å½çé¢åºè¦çäºä»»å¡èªå¸¦çé¢åº â è½åº NULLï¼ |
| | | -- 2026-10-24 忍ééææ pat_med_inhosp.campusid è¡¥æ 30001002ï¼ä½ service_subtask æ 人åå¡«ã |
| | | -- |
| | | -- ç¨æ³ï¼æ¬èæ¬æåæ°åæåé¢éï¼ä¸ç¨ SET @åéï¼é¿å
MySQL8 ç¨æ·åéç collation å²çªï¼ã |
| | | -- è¦æ¢èå´ï¼æä¸é¢ 4 个å¼å
¨ææ¿æ¢å³å¯ï¼ |
| | | -- orgid = '20001001' |
| | | -- campus = '30001002' |
| | | -- ward = '40011020' -- 骨ç§ä¸å¿ä¸ç
åº |
| | | -- åºé¢æ¶é´ = ['2026-07-01 00:00:00', '2026-10-01 00:00:00') |
| | | -- ============================================================================ |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ç»æ 0ï¼â ï¸ å
ç¡®è®¤ä½ é¡µé¢ç¨çæ¯åªä¸ªå£å¾ |
| | | -- åºé¢ç»è®°é¡µæ¯æãç§å®¤åç§° / ç
åº / æ¥æ¿é¢åºãå¤ç§è¿æ»¤ï¼åä¸ä¸ªç
åºæ¢ä¸ªå£å¾å°±æ¯ 469 / 475ï¼ |
| | | -- æ¿ä¸åå£å¾ç两个æ°ç¸åï¼ä¼å空å¤åºä¸ç¬"å·®é¢"ãå
çè¿éåªä¸è¡çäºä½ 页é¢ä¸çæ»æ°ã |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '0_å£å¾å¯¹ç
§_åºé¢è®°å½' AS åç», |
| | | (SELECT COUNT(*) FROM (SELECT b.inhospid FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag='0' AND b.del_flag='0' AND a.idcardno IS NOT NULL AND b.inhospstate='1' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | GROUP BY b.inhospid) x) AS æç¦»é¢ç
åº, |
| | | (SELECT COUNT(*) FROM (SELECT b.inhospid FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag='0' AND b.del_flag='0' AND a.idcardno IS NOT NULL AND b.inhospstate='1' |
| | | AND b.leaveldeptcode = '40011021' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | GROUP BY b.inhospid) x) AS æç¦»é¢ç§å®¤, |
| | | (SELECT COUNT(*) FROM (SELECT b.inhospid FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag='0' AND b.del_flag='0' AND a.idcardno IS NOT NULL AND b.inhospstate='1' |
| | | AND b.hospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | GROUP BY b.inhospid) x) AS æå¨é¢ç
åº, |
| | | (SELECT COUNT(*) FROM (SELECT b.inhospid FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag='0' AND b.del_flag='0' AND a.idcardno IS NOT NULL AND b.inhospstate='1' |
| | | AND b.deptcode = '40011021' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | GROUP BY b.inhospid) x) AS æå¨é¢ç§å®¤, |
| | | (SELECT COUNT(*) FROM service_subtask s WHERE s.del_flag=0 AND s.service_type='2' |
| | | AND s.leavehospitaldistrictcode = '40011020' |
| | | AND s.endtime >= '2026-07-01 00:00:00' AND s.endtime < '2026-10-01 00:00:00') AS ä»»å¡_æç¦»é¢ç
åº, |
| | | (SELECT COUNT(*) FROM service_subtask s WHERE s.del_flag=0 AND s.service_type='2' |
| | | AND s.leaveldeptcode = '40011021' |
| | | AND s.endtime >= '2026-07-01 00:00:00' AND s.endtime < '2026-10-01 00:00:00') AS ä»»å¡_æç¦»é¢ç§å®¤; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ç»æ 1ï¼å°åºææ²¡æ"没çæ" |
| | | -- ææï¼æ²¡çæ = 0ãè¥ > 0ï¼åçç»æ 4ã |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '1_æ»æ°æ ¸å¯¹' AS åç», |
| | | COUNT(*) AS åºé¢è®°å½æ°, |
| | | SUM(CASE WHEN s.inhospid IS NOT NULL THEN 1 ELSE 0 END) AS æåºé¢é访任å¡, |
| | | SUM(CASE WHEN s.inhospid IS NULL THEN 1 ELSE 0 END) AS 没çæä»»å¡çè®°å½ |
| | | FROM ( |
| | | SELECT b.inhospid |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag = '0' AND b.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | AND b.inhospstate = '1' AND b.orgid = '20001001' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | GROUP BY b.inhospid |
| | | ) r |
| | | LEFT JOIN ( |
| | | SELECT DISTINCT inhospid FROM service_subtask |
| | | WHERE del_flag = 0 AND service_type = '2' AND inhospid IS NOT NULL |
| | | ) s ON s.inhospid = r.inhospid; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ç»æ 2ï¼é¡µé¢å¯è§æ§ ââ çæäºä½é¡µé¢æ¥ä¸å°çé£é¨å |
| | | -- 页é¢å¯è§ = é¢åº + ç
åºé½å¹é
ï¼è¿ææ¯"æ£è
æå¡æ»é"该æçæ° |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '2_页é¢å¯è§æ§' AS åç», |
| | | COUNT(*) AS 任塿»æ°, |
| | | SUM(CASE WHEN (s.campusid IS NULL OR s.campusid = '') THEN 1 ELSE 0 END) AS é¢åºä¸ºç©º_ä¸å¯è§, |
| | | SUM(CASE WHEN (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode <> '40011020') |
| | | THEN 1 ELSE 0 END) AS ç
åºä¸å¹é
_ä¸å¯è§, |
| | | SUM(CASE WHEN s.campusid = '30001002' AND s.leavehospitaldistrictcode = '40011020' |
| | | THEN 1 ELSE 0 END) AS 页é¢å¯è§, |
| | | SUM(CASE WHEN s.campusid = '30001002' AND s.leavehospitaldistrictcode = '40011020' |
| | | AND s.sendstate = 4 THEN 1 ELSE 0 END) AS å¯è§ä¸æ éé访, |
| | | SUM(CASE WHEN s.campusid = '30001002' AND s.leavehospitaldistrictcode = '40011020' |
| | | AND s.sendstate = 6 THEN 1 ELSE 0 END) AS å¯è§ä¸å·²å®æ |
| | | FROM ( |
| | | SELECT DISTINCT b.inhospid |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag = '0' AND b.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | AND b.inhospstate = '1' AND b.orgid = '20001001' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | ) r |
| | | JOIN service_subtask s ON s.inhospid = r.inhospid AND s.del_flag = 0 AND s.service_type = '2'; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ç»æ 3ï¼ä¸å¯è§æç»ï¼é¢åºä¸ºç©º / ç
åºä¸å¹é
ï¼ï¼å¯ç´æ¥å¯¹ç
§ä¿®è¡¥ |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '3_ä¸å¯è§æç»' AS åç», s.id AS åä»»å¡ID, s.inhospid, s.sendname AS å§å, |
| | | DATE_FORMAT(s.endtime, '%Y-%m-%d') AS åºé¢æ¥æ, |
| | | s.task_name AS é访任å¡, s.sendstate, |
| | | s.campusid AS ä»»å¡é¢åº, s.leavehospitaldistrictcode AS ä»»å¡ç
åº, |
| | | b.campusid AS è®°å½é¢åº, b.leavehospitaldistrictcode AS è®°å½ç
åº, |
| | | DATE_FORMAT(s.create_time, '%Y-%m-%d %H:%i') AS çææ¶é´ |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp b ON b.inhospid = s.inhospid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND s.endtime >= '2026-07-01 00:00:00' AND s.endtime < '2026-10-01 00:00:00' |
| | | AND (s.campusid IS NULL OR s.campusid = '' |
| | | OR s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode <> '40011020') |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | ORDER BY s.create_time; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ç»æ 4ï¼ççæ²¡çæçè®°å½ + åå ï¼ä»
å½ç»æ 1 ç"没çæ" > 0 æ¶æéè¦çï¼ |
| | | -- fuflagâ 1 â æ«æå¨ä¸å¤çè¿ç±»è®°å½ï¼ |
| | | -- deptcheck_flag=2 + long_task_reason â æ«æè¿ï¼ä½ç§å®¤/ç
åº/ç¾ç
齿²¡å¹é
å°é¿æä»»å¡ |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '4_ççæ²¡çæ' AS åç», b.inhospid, b.patname AS å§å, |
| | | DATE_FORMAT(b.endtime, '%Y-%m-%d') AS åºé¢æ¥æ, |
| | | b.leaveldeptname AS ç§å®¤, b.leavediagname AS ä¸»è¯æ, |
| | | b.fuflag AS é访æ è¯, b.deptcheck_flag AS ç§å®¤æ å¿, b.wardcheck_flag AS ç
åºæ å¿, |
| | | b.diagcheck_flag AS ç¾ç
æ å¿, LEFT(b.long_task_reason, 80) AS æªçæåå |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag = '0' AND b.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | AND b.inhospstate = '1' AND b.orgid = '20001001' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | AND NOT EXISTS ( |
| | | SELECT 1 FROM service_subtask s |
| | | WHERE s.inhospid = b.inhospid AND s.del_flag = 0 AND s.service_type = '2') |
| | | ORDER BY b.endtime DESC; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ç»æ 5ï¼åèï¼ï¼ä¿®å¤ç¨ SQL ââ **é»è®¤æ³¨éæï¼ç¡®è®¤åååç¬æ§è¡** |
| | | -- åªè¡¥"空ç"é¢åº/ç
åºï¼ä¸å¨ä¸å¡è¡¨ãä¸å¨å·²æå¼ |
| | | -- --------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask s |
| | | -- JOIN pat_med_inhosp b ON b.inhospid = s.inhospid |
| | | -- SET s.campusid = b.campusid |
| | | -- WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | -- AND (s.campusid IS NULL OR s.campusid = '') |
| | | -- AND b.campusid IS NOT NULL AND b.campusid <> ''; |
| | | -- |
| | | -- UPDATE service_subtask s |
| | | -- JOIN pat_med_inhosp b ON b.inhospid = s.inhospid |
| | | -- SET s.leavehospitaldistrictcode = b.leavehospitaldistrictcode, |
| | | -- s.leavehospitaldistrictname = b.leavehospitaldistrictname |
| | | -- WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | -- AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '') |
| | | -- AND b.leavehospitaldistrictcode IS NOT NULL AND b.leavehospitaldistrictcode <> ''; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================================================== |
| | | -- ãå·²æ¹ä¸ºä»£ç ä¿®å¤ï¼æ¬æä»¶ç INSERT ä¸éè¦æ§è¡ã |
| | | -- 2026-11-06 å³å®ï¼ç®¡çåå¤©ç¶æ¥æå
¨é¨ç§å®¤æéï¼ç´æ¥æ¥ sys_deptï¼ä¸åå¾ sys_user_dept è¡¥æ°æ®ã |
| | | -- ä»£ç æ¹å¨è§ï¼ |
| | | -- SysDeptMapper.xml#selectSysDeptListBySysUserDeptï¼userId 为空æ¶åªæ¥ sys_deptï¼ |
| | | -- SysDeptServiceImpl#selectLeafSysDeptListBySysUserDeptï¼userId 为空æ¶ä¸åå¶åè¿æ»¤ï¼ |
| | | -- SysUserServiceImpl#selectLeafSysDeptList / selectLeafSysDeptForAdmin / selectUserByUserName |
| | | -- SysLoginController#getInfoï¼ç®¡çåä¸ä¼ userIdã䏿é¢åºè¿æ»¤ï¼ |
| | | -- æ¬æä»¶ä¿ç䏿¥åªä½ä¸ºãè¯æå£å¾ãåèï¼ç¬¬ 0 æ¥å第 3 æ¥çæ¥è¯¢ä»å¯ç¨äºæ ¸å¯¹ |
| | | -- ãæä¸ªç¨æ·å°åºè½æ¥å°å¤å°ç§å®¤/ç
åºãï¼ç¬¬ 1ã2 æ¥çåå
¥å¯ä»¥å¿½ç¥ã |
| | | -- ===================================================================================== |
| | | |
| | | -- ===================================================================================== |
| | | -- ä¿®å¤ï¼admin ç»å½å没æç§å®¤/ç
åºï¼belongDepts / belongWards 为空ï¼ï¼å建任å¡éä¸å°ç§å®¤ç
åº |
| | | -- æ¥æï¼2026-11-06 åºï¼smartor_nhfy |
| | | -- |
| | | -- ç»è®ºï¼ä»£ç + æ°æ®é¾è·¯å·²æ ¸å¯¹ï¼å ç´¢å¼ä¸ä¼æ¹åç»æï¼å 为è¿ä¸æ¯æ
¢ï¼æ¯æ¥ä¸å°ï¼ï¼ |
| | | -- åç«¯ä¸æç¨çæ¯ /getInfo è¿åç belongDepts / belongWardsï¼ |
| | | -- SysLoginController#getInfoï¼L243-254ï¼ |
| | | -- â SysDeptServiceImpl#selectLeafSysDeptListBySysUserDeptï¼L335-341ï¼ |
| | | -- â SysDeptMapper#selectSysDeptListBySysUserDeptï¼SysDeptMapper.xml L286-298ï¼ |
| | | -- æ ¸å¿æ¯ INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code |
| | | -- å¹¶ä¸è¿æ¬¡å¸¦ä¸äº userIdï¼sysUserDept.setUserId(user.getUserId())ï¼ã |
| | | -- è HIS ééåå
¥ sys_user_dept æ¶æç¡®æé¤äº adminï¼ |
| | | -- CollectHISMapper.xml yhyksxxï¼L494ï¼/ yhybfxxï¼L513ï¼/ yhyyqxxï¼L536ï¼é½æ `ud.user_id != 'admin'` |
| | | -- æä»¥ admin å¨ sys_user_dept éæ²¡æä»»ä½è¡ â ä¸é¢è¿æ¡ join è¿å 0 è¡ â 两个åè¡¨é½æ¯ç©ºã |
| | | -- ï¼ç»å½ token èµ°ç飿¡ selectUserByUserName2 é admin 忝ä¸å¸¦ userIdï¼æä»¥é£æ¡åèæ¯ææ°æ®çï¼ |
| | | -- è¿ä¹æ¯ä¸ºä»ä¹âç»å½æåä½è¿æ¯æ²¡æç§å®¤ç
åºâââç»å½è¿åçå /getInfo è¦ççä¸ä¸è´ãï¼ |
| | | -- |
| | | -- 顺带两个åï¼ |
| | | -- a) sys_dept.campusid 为空çé¨é¨ä¼è¢« `and d.campusid = #{campusid}` è¿æ»¤æï¼ |
| | | -- b) sys_config éæ²¡æ sys.authority.campus.allï¼å·²æ¥è¯ä¸ºç©ºï¼ï¼æä»¥ admin ç campusid ä¸ä¼è¢«æ¸
空ã |
| | | -- ===================================================================================== |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 第 0 æ¥ï¼å
确认ï¼åªè¯»ï¼è¿ä¸æ¡è·å®å°±ç¥éæ¯ä¸æ¯è¿ä¸ªåå ï¼ |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 0.1 admin å¨ sys_user_dept éå°åºææ²¡ææ°æ®ï¼é¢æ 0 è¡ï¼ |
| | | SELECT u.user_id, u.user_name, u.orgid, u.campusid, u.searchscope, |
| | | (SELECT COUNT(*) FROM sys_user_dept ud |
| | | WHERE ud.user_id = u.user_id AND ud.del_flag = '0') AS ææå
³ç³»æ°, |
| | | (SELECT COUNT(*) FROM sys_user_dept ud WHERE ud.user_id = u.user_id) AS å«å·²å å
³ç³»æ° |
| | | FROM sys_user u |
| | | WHERE u.user_name = 'admin'; |
| | | |
| | | -- 0.2 å¤å» /getInfo ç SQLï¼å¸¦ userIdï¼ââ 颿 0 è¡ |
| | | SELECT d.dept_type, COUNT(*) AS rows_, COUNT(DISTINCT d.dept_code) AS codes |
| | | FROM sys_dept d |
| | | INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code |
| | | WHERE d.del_flag = '0' AND ud.del_flag = '0' |
| | | AND d.orgid = '20001001' AND ud.orgid = '20001001' -- æ¢æ admin ç orgid |
| | | AND ud.user_id = (SELECT user_id FROM sys_user WHERE user_name = 'admin') |
| | | AND d.campusid = '30001002' -- æ¢æ admin ç campusid |
| | | GROUP BY d.dept_type; |
| | | |
| | | -- 0.3 åä¸å¥ SQL 廿 userId / campusid ä¹åè½æ¥å°å¤å°ï¼é¢æå ç¾è¡ = åºè¯¥çå°çéï¼ |
| | | SELECT d.dept_type, COUNT(*) AS rows_, COUNT(DISTINCT d.dept_code) AS codes |
| | | FROM sys_dept d |
| | | WHERE d.del_flag = '0' AND d.orgid = '20001001' |
| | | GROUP BY d.dept_type; |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 第 1 æ¥ï¼æ¨èï¼ç«å»çæãä¸ç¨åçï¼ï¼ç» admin è¡¥å
¨ sys_user_dept |
| | | -- æè¯¥æºæä¸ææç§å®¤(dept_type='1')åç
åº(dept_type='2')é½æå° admin åä¸ï¼ |
| | | -- ä¹å /getInfo 飿¡ join å°±ææ°æ®äºï¼é
ååå çç´¢å¼ï¼æ¥è¯¢ä¹æ¯æ¯«ç§çº§ã |
| | | -- å¹çï¼é夿§è¡ä¸ä¼æéå¤è¡ï¼NOT EXISTS æ user_id + dept_code + dept_type å¤éï¼ã |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 1.1 å
ç伿å¤å°è¡ï¼ä¸æï¼å
确认æ°éåçï¼ |
| | | SELECT u.user_name, d.dept_type, COUNT(*) AS will_insert |
| | | FROM sys_user u |
| | | JOIN sys_dept d ON d.del_flag = '0' |
| | | AND d.orgid = u.orgid |
| | | AND d.dept_type IN ('1', '2') |
| | | WHERE u.user_name = 'admin' |
| | | AND NOT EXISTS (SELECT 1 FROM sys_user_dept x |
| | | WHERE x.user_id = u.user_id |
| | | AND x.dept_code = d.dept_code |
| | | AND x.dept_type = d.dept_type |
| | | AND IFNULL(x.orgid, '') = IFNULL(d.orgid, '')) |
| | | GROUP BY u.user_name, d.dept_type; |
| | | |
| | | -- 1.2 æ£å¼æå
¥ï¼è¦è·¨é¢åºçå
¨é¨å°±æ campusid ä¸å¹¶æ sys_dept 带è¿å»ï¼ |
| | | INSERT INTO sys_user_dept |
| | | (user_id, dept_id, dept_code, dept_name, dept_type, orgid, campusid, del_flag, create_time, update_time) |
| | | SELECT u.user_id, d.dept_id, d.dept_code, d.dept_name, d.dept_type, d.orgid, d.campusid, |
| | | '0', NOW(), NOW() |
| | | FROM sys_user u |
| | | JOIN sys_dept d ON d.del_flag = '0' |
| | | AND d.orgid = u.orgid |
| | | AND d.dept_type IN ('1', '2') |
| | | WHERE u.user_name = 'admin' |
| | | AND NOT EXISTS (SELECT 1 FROM sys_user_dept x |
| | | WHERE x.user_id = u.user_id |
| | | AND x.dept_code = d.dept_code |
| | | AND x.dept_type = d.dept_type |
| | | AND IFNULL(x.orgid, '') = IFNULL(d.orgid, '')); |
| | | |
| | | -- 1.3 åæ» 1.2ï¼å¦ææå¤äºï¼ï¼ææå
¥æ¶é´ç²¾ç¡®å |
| | | -- DELETE FROM sys_user_dept |
| | | -- WHERE user_id = (SELECT user_id FROM sys_user WHERE user_name = 'admin') |
| | | -- AND create_time >= '2026-11-06 00:00:00' |
| | | -- AND update_time = create_time; |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 第 2 æ¥ï¼å¯éï¼è®©å®çå°å
¨é¨é¢åºï¼ï¼æ admin å è¿ãä¸éé¢åºãç½åå |
| | | -- SysLoginController#getInfo L227-233 ä¼è¯»è¿ä¸ªé
ç½®ï¼å½ä¸å°±æ campusid ç½®ç©ºï¼ |
| | | -- äºæ¯ `and d.campusid = #{campusid}` è¿æ¡è¿æ»¤ä¸åæ¼ï¼è·¨é¢åºçç§å®¤ç
åºä¹è½åºæ¥ã |
| | | -- ç°å¨ sys_config éæ²¡æè¿ä¸ª keyï¼å·²æ¥è¯ï¼ï¼éè¦æå·¥å 䏿¡ã |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | -- VALUES ('ä¸éé¢åºçè´¦å·', 'sys.authority.campus.all', 'admin', 'N', 'admin', NOW(), |
| | | -- 'å¤ä¸ªè´¦å·ç¨è±æéå·åéï¼å½ä¸åç»å½ä¸æé¢åºè¿æ»¤'); |
| | | -- æ¹å®è¦æ¸
ç¼åï¼é坿è°ç¨ /system/config/refreshCacheï¼è¥å端æè¯¥æé®ï¼ã |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 第 3 æ¥ï¼éªè¯ï¼éå¯/å·æ°å端åè·ï¼ææä¸¤æ¡é½æå ç¾æ¡ï¼ |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 3.1 模æ /getInfo ç两个æ¥è¯¢ |
| | | SELECT d.dept_type, COUNT(DISTINCT d.dept_code) AS visible_codes |
| | | FROM sys_dept d |
| | | INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code |
| | | WHERE d.del_flag = '0' AND ud.del_flag = '0' |
| | | AND d.orgid = '20001001' AND ud.orgid = '20001001' |
| | | AND ud.user_id = (SELECT user_id FROM sys_user WHERE user_name = 'admin') |
| | | AND d.campusid = '30001002' |
| | | GROUP BY d.dept_type; |
| | | |
| | | -- 3.2 ç´æ¥çç§å®¤/ç
åºååå 10 æ¡ï¼ç¡®è®¤æ¯çå®ç§å®¤è䏿¯æµè¯æ°æ® |
| | | SELECT d.dept_type, d.dept_code, d.dept_name |
| | | FROM sys_dept d |
| | | INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code |
| | | WHERE d.del_flag = '0' AND ud.del_flag = '0' |
| | | AND d.orgid = '20001001' AND ud.orgid = '20001001' |
| | | AND ud.user_id = (SELECT user_id FROM sys_user WHERE user_name = 'admin') |
| | | AND d.campusid = '30001002' |
| | | AND d.dept_type = '1' |
| | | LIMIT 10; |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 第 4 æ¥ï¼æ ¹æ²»ï¼åçæ¶åï¼ï¼ä»£ç é admin ä¸è¯¥èµ° sys_user_dept |
| | | -- 4.1 SysDeptMapper.xml L286 æ userId åæ¯ï¼æ userId æ¶ç´æ¥æ¥ sys_deptï¼è§å¯¹è¯éç diffï¼ |
| | | -- 4.2 /getInfo ä¸ /system/user/getInfo éå¤ adminï¼ä¸ä¼ userId |
| | | -- 4.3 campusid æ¡ä»¶æ¹æ and (d.campusid is null or d.campusid = #{campusid}) |
| | | -- 4.4 å表为空æ¶å
åºï¼åæ orgid æ¥ä¸æ¬¡å
¨éï¼é¿å
以åååºç°ãç»å½æåä½ä¸æç©ºã |
| | | -- ------------------------------------------------------------------------------------- |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================================================== |
| | | -- åå线ä¸ï¼smartor_nhfy @ 192.168.99.192ï¼é访å表 /smartor/serviceSubtask/patItem æ
¢æ¥è¯¢ä¿®å¤ |
| | | -- ç¼åæ¥æï¼2026-11-06 宿µç¯å¢ï¼MySQL 8.0.22 Win64ï¼åº 2277MBï¼service_subtask 61,645 è¡ / 71.8MB |
| | | -- |
| | | -- ä¸ã宿µç»è®ºï¼ä¸é¢ç¬¬ 0 æ¥ç SQL å¯åæ ·éè·å¤ç°ï¼ |
| | | -- patItem 䏿¬¡è¯·æ±å®é
è·çæ¯ 3 ç±» SQL + æ¯è¡ 2 æ¬¡åæ¡æ¥è¯¢ï¼ |
| | | -- â select id ... order by endtime desc limit 10 â æ
¢çå°±å¨è¿ï¼2.4~3.4 s |
| | | -- æ§è¡è®¡åï¼index_merge(sort_union(idx_service_subtask_district_visit_time, |
| | | -- idx_service_subtask_dept_visit_time)) + Using filesort |
| | | -- EXPLAIN ANALYZEï¼å®é
2915 msï¼åªä¸ºè¿å 10 è¡ |
| | | -- â¡ select <100 å> where id in (10 个 id) â 27 msï¼æ£å¸¸ |
| | | -- ⢠countByConditionï¼Redis æªå½ä¸æ¶ï¼ â 2.5~3.0 s |
| | | -- ⣠循ç¯éæ¯è¡ 2 æ¬¡åæ¡æ¥è¯¢ï¼pat_med_inhosp / pat_archive æä¸»é®ï¼â å约 25 msï¼10 è¡â500 ms |
| | | -- å计约 6~7 sï¼ä¸ãæ¥è¯¢å¾æ
¢ãä¸è´ã |
| | | -- |
| | | -- æ´åºå±çåå ï¼æå½±åæåºï¼ï¼ |
| | | -- (1) ãæè´å½ãMySQL å®ä¾ innodb_buffer_pool_size = 8 MBï¼é»è®¤å¼ï¼512 页ï¼pages_free=0ï¼ï¼ |
| | | -- èå
¨åº 2277 MBãçäºæ¯æ¬¡æ¥è¯¢é½å¨å·çä¸è¯»ï¼ |
| | | -- · select count(*) from service_subtaskï¼6 ä¸è¡ï¼è¦ 9.3~12.5 s â ææè¯»é约 7 MB/s |
| | | -- · performance_schema é 100 åçå表æ¥è¯¢ avg 653 msï¼29.9 䏿¬¡ï¼ç´¯è®¡ 19.5 ä¸ç§ï¼ |
| | | -- (2) service_subtask 䏿²¡æãæºæ+é¢åº+ç±»å+æåºãçèåç´¢å¼ï¼deptOrDistrict=2 æ¶ |
| | | -- (leavehospitaldistrictcode IN .. OR leaveldeptcode IN ..) åªè½èµ° index_merge + filesortï¼ |
| | | -- è¦æ« 1200~54000 è¡å¹¶ä¸å¤§éå表ã |
| | | -- (3) åºéæ 25 å¼ copy/bak åå¾è¡¨ï¼å计约 1.6 GBï¼å å
¨åº 70%ï¼ï¼æ¤å ç£çä¸ç¼åã |
| | | -- (4) pat_archive 没æ patientno ç´¢å¼ï¼`where ?=? and del_flag=? and patientno=?` æ¯æ¬¡å
¨è¡¨æ« |
| | | -- 5.6 ä¸è¡ï¼37.4 䏿¬¡è°ç¨ãç´¯è®¡æ«æ 184 亿è¡ãavg 457 msã |
| | | -- |
| | | -- åç¬åçææï¼é½å¨å¯æ¬è¡¨ service_subtask_copy6 ä¸å®æµè¿ï¼æ°æ®éåé级ï¼ï¼ |
| | | -- · åªå»ºç´¢å¼ãSQL 䏿¹ â ä¼åå¨ä»é index_mergeï¼2.8~3.5 sï¼æ²¡ç¨ï¼ |
| | | -- · åªæ¹ SQL(UNION)ãä¸å»ºç´¢å¼ â 1.5~1.7 sï¼æç¨ä½ä¸å¤ï¼ |
| | | -- · ç´¢å¼ + æ¹åä¸èµ·ä¸ â 26~27 msï¼çº¦ 110 åï¼ |
| | | -- · æ OR åæ · FORCE INDEX å°åèç´¢å¼ â 28~33 sï¼åä¸å«è¿ä¹å¹²ï¼ |
| | | -- |
| | | -- äºãä¿®å¤æ¥éª¤ï¼ææ§ä»·æ¯ï¼1 å 2 åå®è¿æ¡ SQL å°±ä» 3.1 s æå° 27 msï¼ |
| | | -- 第 1 æ¥ï¼ä¸æ¹ä»£ç ï¼æ¶çæå¤§ï¼ï¼è°å¤§ innodb_buffer_pool_sizeï¼8MB â 4Gï¼ |
| | | -- 第 2 æ¥ï¼ä¸å ç´¢å¼ä¹è½è·ï¼ï¼å 两个ã忝ãè¦çç´¢å¼ |
| | | -- 第 3 æ¥ï¼æ¹ SQL / æ¹ mapperï¼ï¼æ OR æ¹åæä¸¤åæ¯ UNIONï¼å·²å®æµ 3.1 s â 26 msï¼ç»æéæ¡ä¸è´ï¼ |
| | | -- 第 4 æ¥ï¼ç»è®¡ count æ¹åãpat_archive.patientno ç´¢å¼ãæ¸
åå¾è¡¨ |
| | | -- ===================================================================================== |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 0. ç°ç¶è¯æï¼åªè¯»ï¼å¯éæ¶éè·ï¼è¿éç EXPLAIN ANALYZE ä¼çè·ä¸æ¬¡ï¼èæ¶ 3 s å·¦å³ï¼ |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 0.1 ç¼å²æ± / ç£çç¸å
³åæ°ï¼å
³é®ï¼buf_mb = 8ï¼ |
| | | SELECT @@version AS version, |
| | | @@version_compile_os AS os, |
| | | @@innodb_buffer_pool_size / 1024 / 1024 AS buf_mb, |
| | | @@innodb_buffer_pool_instances AS bp_instances, |
| | | @@innodb_io_capacity AS io_capacity, |
| | | @@innodb_log_file_size / 1024 / 1024 AS log_mb; |
| | | |
| | | -- 0.2 ç¼å²æ± æ¯ä¸æ¯å
¨æ»¡ï¼pages_free = 0 表示ä¸ç¹ä½é齿²¡æï¼è¯»å
¨èµ°ç£çï¼ |
| | | SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages%'; |
| | | |
| | | -- 0.3 å·è¯»æå¤æ
¢ï¼6 ä¸è¡ç count è¦ 10 ç§å°±è¯´æä¸å |
| | | SELECT COUNT(*) FROM service_subtask; |
| | | |
| | | -- 0.4 ä½ è¿æ¡è¯·æ±çå®é
æ§è¡è®¡åï¼æ orgid/campusid/ç§å®¤ç
åºæ¢æçå®å¼ï¼ |
| | | EXPLAIN ANALYZE |
| | | SELECT id |
| | | FROM service_subtask |
| | | WHERE del_flag = '0' |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '2' AND visit_count = 1 |
| | | AND (leavehospitaldistrictcode IN ('40003309') OR leaveldeptcode IN ('40003307')) |
| | | ORDER BY endtime DESC |
| | | LIMIT 10 OFFSET 0; |
| | | -- ææçå°çé®é¢ï¼index_merge(...) + Using filesortï¼actual time â 2900 ms |
| | | |
| | | -- 0.5 çº¿ä¸æè¿å°åºåªäºè¯å¥æèæ¶ï¼performance_schemaï¼ |
| | | SELECT SUBSTRING(DIGEST_TEXT, 1, 120) AS sql_, |
| | | COUNT_STAR AS cnt, |
| | | ROUND(AVG_TIMER_WAIT / 1e9, 1) AS avg_ms, |
| | | ROUND(MAX_TIMER_WAIT / 1e9, 0) AS max_ms, |
| | | SUM_ROWS_EXAMINED AS rows_examined |
| | | FROM performance_schema.events_statements_summary_by_digest |
| | | WHERE SCHEMA_NAME = 'smartor_nhfy' |
| | | ORDER BY SUM_TIMER_WAIT DESC |
| | | LIMIT 15; |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 1. ç´¢å¼ï¼ç» OR çä¸¤ä¸ªåæ¯åé
ä¸ä¸ªãå° endtime æåºãä¸è½è¦çæ¥è¯¢ãçç´¢å¼ |
| | | -- |
| | | -- 为ä»ä¹ä¸æ¯æ®éèåç´¢å¼ï¼ |
| | | -- 宿µå (orgid, campusid, del_flag, service_type, visit_count, endtime) åï¼ |
| | | -- ä¼åå¨ä¾æ§é index_merge + filesortï¼èæ¶ 2.8~3.5 sï¼çäºç½å ã |
| | | -- 为ä»ä¹è¦å¸¦ leavehospitaldistrictcode / leaveldeptcode å¨ endtime åé¢ï¼ |
| | | -- è¿æ ·åæ¯æ¥è¯¢æ¯ãçå¼ + çå¼ + ... + æ endtime æåºãï¼å¯ä»¥ååæ«ç´¢å¼åå 10 è¡ï¼ |
| | | -- select åè¡¨åªæ idï¼InnoDB äºçº§ç´¢å¼èªå¸¦ä¸»é® â Using index å®å
¨è¦çï¼é¶å表ã |
| | | -- 宿µå忝 27 msã |
| | | -- ------------------------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_patitem_ward (orgid, campusid, del_flag, service_type, visit_count, leavehospitaldistrictcode, endtime), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_patitem_dept (orgid, campusid, del_flag, service_type, visit_count, leaveldeptcode, endtime), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | ANALYZE TABLE service_subtask; |
| | | -- 宿µå»ºç´¢å¼å约 3.8 sï¼1 ä¸è¡/ç§çº§å«ï¼å 为çæ
¢ï¼ï¼ä¸å¡æ æã |
| | | |
| | | -- 说æï¼ç´¢å¼é visit_count å¨ endtime ä¹åï¼æ¯å 为å表请æ±é½ä¼å¸¦ãé访次æ°ãï¼ |
| | | -- 妿æäºåºæ¯ä¸å¸¦ visit_countï¼è¿ä¸ªç´¢å¼åªè½ç¨å° service_type åç¼ï¼æåºä»ä¼ filesortï¼ |
| | | -- é£ç§åºæ¯ååç¬å ï¼ |
| | | -- ALTER TABLE service_subtask |
| | | -- ADD INDEX idx_patitem_ward_novc (orgid, campusid, del_flag, service_type, leavehospitaldistrictcode, endtime), |
| | | -- ADD INDEX idx_patitem_dept_novc (orgid, campusid, del_flag, service_type, leaveldeptcode, endtime); |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 2. å表 SQL æ¹åï¼OR ææä¸¤ä¸ªåæ¯ UNIONï¼å»éï¼ |
| | | -- |
| | | -- 宿µï¼service_subtask_copy6ï¼åæ ·æ°æ®éï¼ï¼ |
| | | -- å OR åæ³ ï¼3102 / 3266 / 2984 ms |
| | | -- æ¹åå offset 0 / 100 / 500 ï¼26 / 27 / 27 ms |
| | | -- 䏿¡£ç»æä¸å忳鿡ä¸è´ï¼id 顺åºå®å
¨ç¸åï¼ |
| | | -- 注æï¼ |
| | | -- · 忝å
å¿
é¡»åèªå¸¦ limit (offset + pageSize)ï¼å¤å±å limit pageSize offset offsetï¼ |
| | | -- · ç¨ UNIONï¼å»éï¼ï¼ä¸è¦ç¨ UNION ALL + âæé¤éå âé£ç§åæ³ï¼ |
| | | -- åè
ä¼ç ´åè¦çç´¢å¼ï¼å®æµéåå° 987 ms~1.1 sï¼ |
| | | -- · ä¸¤ä¸ªåæ¯éçå
Œ
± where å¿
é¡»ä¸åæ¥ç serviceSubtaskWhere å®å
¨ä¸è´ï¼éåç¸åï¼ï¼ |
| | | -- å¦å第 2 é¶æ®µæ id å表æ¶ä¼åºç°è¡æ°å¯¹ä¸ä¸ã |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 2.1 åªåå½é¡µ idï¼æ¿æ¢ mapper éç selectServiceSubtaskIdsPageï¼ä»
å¨ deptOrDistrict = '2' æ¶èµ°è¿æ¡ï¼ |
| | | SELECT id |
| | | FROM ( |
| | | (SELECT id, endtime |
| | | FROM service_subtask |
| | | WHERE del_flag = '0' |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '2' AND visit_count = 1 |
| | | AND leavehospitaldistrictcode IN ('40003309') |
| | | ORDER BY endtime DESC |
| | | LIMIT 10 OFFSET 0) |
| | | UNION |
| | | (SELECT id, endtime |
| | | FROM service_subtask |
| | | WHERE del_flag = '0' |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '2' AND visit_count = 1 |
| | | AND leaveldeptcode IN ('40003307') |
| | | ORDER BY endtime DESC |
| | | LIMIT 10 OFFSET 0) |
| | | ) t |
| | | ORDER BY endtime DESC |
| | | LIMIT 10 OFFSET 0; |
| | | -- 深翻页æ¶ï¼åæ¯å
LIMIT (pageNum + pageSize) OFFSET 0ï¼å¤å± LIMIT pageSize OFFSET pageNumã |
| | | -- 宿µ offset 100 / 500 齿¯ 27 ms ä¸ç»ææ£ç¡®ã |
| | | |
| | | -- 2.2 对ç
§ï¼åæ ·çæ¡ä»¶ã忥ç OR åæ³ï¼ç¨æ¥å¯¹æ¯èæ¶ / æ ¡éªç»æï¼ |
| | | SELECT id |
| | | FROM service_subtask |
| | | WHERE del_flag = '0' |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '2' AND visit_count = 1 |
| | | AND (leavehospitaldistrictcode IN ('40003309') OR leaveldeptcode IN ('40003307')) |
| | | ORDER BY endtime DESC |
| | | LIMIT 10 OFFSET 0; |
| | | |
| | | -- 2.3 ç»æä¸è´æ§æ ¡éªï¼ä¸¤è¾¹ id éåå¿
é¡»å®å
¨ç¸åï¼ |
| | | SELECT (SELECT GROUP_CONCAT(id ORDER BY id) FROM (SELECT id FROM service_subtask |
| | | WHERE del_flag='0' AND orgid='20001001' AND campusid='30001002' |
| | | AND service_type='2' AND visit_count=1 |
| | | AND (leavehospitaldistrictcode IN ('40003309') OR leaveldeptcode IN ('40003307')) |
| | | ORDER BY endtime DESC LIMIT 10) a) AS old_ids, |
| | | (SELECT GROUP_CONCAT(id ORDER BY id) FROM ( |
| | | SELECT id FROM ( |
| | | (SELECT id, endtime FROM service_subtask |
| | | WHERE del_flag='0' AND orgid='20001001' AND campusid='30001002' |
| | | AND service_type='2' AND visit_count=1 |
| | | AND leavehospitaldistrictcode IN ('40003309') |
| | | ORDER BY endtime DESC LIMIT 10) |
| | | UNION |
| | | (SELECT id, endtime FROM service_subtask |
| | | WHERE del_flag='0' AND orgid='20001001' AND campusid='30001002' |
| | | AND service_type='2' AND visit_count=1 |
| | | AND leaveldeptcode IN ('40003307') |
| | | ORDER BY endtime DESC LIMIT 10) |
| | | ) t ORDER BY endtime DESC LIMIT 10) b) AS new_ids; |
| | | |
| | | -- 2.4 æåºå段说æï¼sort=0/1 æ¯ endtimeï¼é»è®¤ï¼ï¼sort=2/3/7/8 æ¯ visit_timeã |
| | | -- ä¸é¢ä¸¤ä¸ªç´¢å¼æ¯æ endtime æçï¼å¦æå¸¸ç¨ãé访æ¶é´ãæåºï¼éè¦åè¡¥ä¸å¯¹æ endtime æ¢æ visit_timeï¼ |
| | | -- ALTER TABLE service_subtask |
| | | -- ADD INDEX idx_patitem_ward_vt (orgid, campusid, del_flag, service_type, visit_count, leavehospitaldistrictcode, visit_time), |
| | | -- ADD INDEX idx_patitem_dept_vt (orgid, campusid, del_flag, service_type, visit_count, leaveldeptcode, visit_time); |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 3. é¡¶é¨ç»è®¡ï¼countByConditionï¼ä¹è¦è·çæ¹ï¼æä¸¤ä¸ªåæ¯åæ±æ» |
| | | -- ç°ç¶ï¼Redis æªå½ä¸æ¶ 2.5~3.0 sï¼æ¯æ¬¡å
¨éèåè¿å¥ whereï¼ |
| | | -- æ¹æ³ï¼ä¸¤ä¸ªåæ¯åèªèåï¼å¤å±æç»æç¸å ã忝éååºçåé½å¨ç´¢å¼é â ä¸å表ã |
| | | -- ------------------------------------------------------------------------------------- |
| | | SELECT SUM(wzx) AS wzx, SUM(ywc) AS ywc, SUM(total) AS total |
| | | FROM ( |
| | | (SELECT SUM(CASE WHEN sendstate = 4 THEN 1 ELSE 0 END) AS wzx, |
| | | SUM(CASE WHEN sendstate = 6 THEN 1 ELSE 0 END) AS ywc, |
| | | COUNT(1) AS total |
| | | FROM service_subtask |
| | | WHERE del_flag = '0' |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '2' AND visit_count = 1 |
| | | AND leavehospitaldistrictcode IN ('40003309')) |
| | | UNION ALL |
| | | (SELECT SUM(CASE WHEN sendstate = 4 THEN 1 ELSE 0 END), |
| | | SUM(CASE WHEN sendstate = 6 THEN 1 ELSE 0 END), |
| | | COUNT(1) |
| | | FROM service_subtask |
| | | WHERE del_flag = '0' |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '2' AND visit_count = 1 |
| | | AND leaveldeptcode IN ('40003307')) |
| | | ) t; |
| | | -- 注æï¼ä¸¤ä¸ªåæ¯ä¼éå¤ç»è®¡ãæ¢å±äºè¯¥ç
åºåå±äºè¯¥ç§å®¤ãçè¡ï¼åä¸è¡ä¸¤ä¸ªæ¡ä»¶é½å½ä¸ï¼ã |
| | | -- åæ countByCondition æ¯å¯¹ OR åçç»æéç»è®¡ï¼ä¸éå¤ã |
| | | -- 线ä¸å®æµè¿ä¸¤ä¸ªç§å®¤/ç
åºæ¯ä¸ä¸å¯¹åºçï¼leaveldeptcode=40003307 â leavehospitaldistrictcode=40003309ï¼ï¼ |
| | | -- æä»¥è¿éç¨ UNION ALL ä¹ä¸ä¼éå¤ï¼å¦æåå¨è·¨ç§å
±ç¨ç
åºçæ
åµï¼æ¹æ |
| | | -- â忝2 å ä¸ AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode NOT IN (...))âï¼ |
| | | -- æè
å¹²èä¿ç忥ç OR åæ³ï¼ç»è®¡æ Redis ç¼å 60~120 åéï¼æ¹å®ç¬¬ 1 æ¥åæ°åä¹å°±å å msï¼ã |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 4. 顺带修ï¼å patItem æ
¢ç¸å
³ï¼ä½ä¸æ¯å䏿¡ SQLï¼ |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 4.1 pat_archive 没æ patientno ç´¢å¼ï¼`where ?=? and del_flag=? and patientno=?` æ¯è·ä¸æ¬¡å
¨è¡¨æ« 5.6 ä¸è¡ |
| | | -- ï¼performance_schemaï¼37.4 䏿¬¡ãç´¯è®¡æ«æ 184 亿è¡ãavg 457 msï¼ |
| | | ALTER TABLE pat_archive |
| | | ADD INDEX idx_pat_archive_patientno (patientno, del_flag), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | -- å¦å¤é£æ¡ SQL éæä¸ª `? = ?`ï¼å¸¸é对常éï¼çæ¡ä»¶ï¼çç忼忰æ¶å°äºä¸ªååï¼å»ºè®®ä»£ç ä¾§ä¸èµ·çä¸ä¸ã |
| | | |
| | | -- 4.2 patItem çåå¡«æ¯ãæ¯è¡ 2 æ¬¡åæ¡æ¥è¯¢ãï¼pat_med_inhosp / pat_archive å䏿¬¡ï¼æä¸»é®ï¼ã |
| | | -- 10 è¡å°±æ¯ 20 æ¬¡éæº I/Oï¼å·ç䏿¬¡çº¦ 25 msï¼ãå»ºè®®æ¹æ IN æ¹éæ¥ä¸¤æ¬¡ã |
| | | -- è¿æ¡æ¯ä»£ç æ¹å¨ï¼ä¸æ¯ SQLï¼å½åæ¯é¡µ 10 è¡å½±å约 0.3~0.5 sã |
| | | |
| | | -- 4.3 åºéæ 25 å¼ copy/bak åå¾è¡¨ï¼å计约 1.6 GBï¼å å
¨åº 70%ï¼ï¼å¯¹ 8 MB çç¼å²æ± æ¯çº¯è´æ
ï¼ |
| | | -- pat_med_inhosp_copy1..copy5ï¼çº¦ 1.24 GBï¼ãservice_subtask_copy1..copy6ï¼çº¦ 0.30 GBï¼çã |
| | | -- 确认æ ç¨åå
æ¹ååå ï¼é¿å
误å ï¼ç¤ºä¾ï¼éå¼ ç¡®è®¤ååæ§è¡ï¼ï¼ |
| | | -- RENAME TABLE pat_med_inhosp_copy4 TO zzz_del_pmi_copy4_20261106; |
| | | -- DROP TABLE zzz_del_pmi_copy4_20261106; |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 5. æå¡å¨åæ°ï¼æ¶çæå¤§ç䏿¥ï¼éè¦æ¹ my.ini åéå¯ MySQLï¼ä¹å¯å
SET GLOBAL å¨çº¿æ¾å¤§ç¼å²æ± ï¼ |
| | | -- ç°ç¶ï¼innodb_buffer_pool_size = 8 MBï¼é»è®¤å¼ï¼ï¼å
¨åº 2277 MB â æ¯æ¬¡æ¥è¯¢é½å¨å·çä¸è· |
| | | -- ç®æ ï¼ |
| | | -- innodb_buffer_pool_size = 4G ï¼æç©çå
å 50%~70% ç»ï¼è³å° 2Gï¼è½è£
ä¸çè¡¨ï¼ |
| | | -- innodb_buffer_pool_instances = 4 ï¼ç¼å²æ± ⥠1G æ¶æææä¹ï¼ |
| | | -- innodb_io_capacity = 2000 |
| | | -- innodb_io_capacity_max = 4000 |
| | | -- innodb_flush_method = unbuffered / O_DIRECTï¼Windows ç¨ unbufferedï¼ |
| | | -- table_open_cache = 4000 |
| | | -- innodb_log_file_size = 512M |
| | | -- å¨çº¿éªè¯ï¼ä¸ç¨éå¯ï¼MySQL 5.7+ æ¯æå¨æè°æ´ï¼ç¡®è®¤æºå¨å
åå¤åæ§è¡ï¼ï¼ |
| | | -- SET GLOBAL innodb_buffer_pool_size = 2 * 1024 * 1024 * 1024; |
| | | -- ç¶åéè· 0.3 ç count(*)ï¼åºä» ~10 s æå°å å~ä¸ä¸¤ç¾ msã |
| | | -- è¿ä¸æ¥åå®ï¼ç¬¬ 2ã3 æ¥çæ¶çä¼è¿ä¸æ¥æ¾å¤§ï¼ç´¢å¼é¡µå
¨å¨å
åï¼27 ms è¿è½åéï¼ã |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 6. éªè¯ï¼æ¹å®éæ¡è·ï¼ |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 6.1 å忝æ¯å¦èµ°è¦çç´¢å¼ï¼ææ key = idx_patitem_ward/deptï¼Extra å« Using indexï¼ |
| | | -- 没æ Using filesortï¼ä¹æ²¡æ Using where ä¹å¤çåè¡¨ï¼ |
| | | EXPLAIN |
| | | SELECT id |
| | | FROM service_subtask |
| | | WHERE del_flag = '0' |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '2' AND visit_count = 1 |
| | | AND leavehospitaldistrictcode IN ('40003309') |
| | | ORDER BY endtime DESC |
| | | LIMIT 10; |
| | | |
| | | -- 6.2 æ¹ååæ´ä½èæ¶ï¼ææ 30 ms é级ï¼è䏿¯ 3000 msï¼ |
| | | EXPLAIN ANALYZE |
| | | SELECT id FROM ( |
| | | (SELECT id, endtime FROM service_subtask |
| | | WHERE del_flag='0' AND orgid='20001001' AND campusid='30001002' |
| | | AND service_type='2' AND visit_count=1 AND leavehospitaldistrictcode IN ('40003309') |
| | | ORDER BY endtime DESC LIMIT 10) |
| | | UNION |
| | | (SELECT id, endtime FROM service_subtask |
| | | WHERE del_flag='0' AND orgid='20001001' AND campusid='30001002' |
| | | AND service_type='2' AND visit_count=1 AND leaveldeptcode IN ('40003307') |
| | | ORDER BY endtime DESC LIMIT 10) |
| | | ) t ORDER BY endtime DESC LIMIT 10; |
| | | |
| | | -- 6.3 æ¶å°¾ |
| | | ANALYZE TABLE service_subtask; |
| | | ANALYZE TABLE pat_archive; |
| | | |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 7. åæ» |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_patitem_ward; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_patitem_dept; |
| | | -- ALTER TABLE pat_archive DROP INDEX idx_pat_archive_patientno; |
| | | -- ï¼SQL / ä»£ç æ¹ååæ»ç´æ¥è¿å mapper å³å¯ï¼åæ°åæ»æ innodb_buffer_pool_size è°ååå¼ï¼ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ååéä¸ï¼nhfyï¼æ»¡æåº¦ç»è®¡ /smartor/satisfaction/statistics æ¥ä¸åºæ°æ® ââ å®ä½ä¸ä¿®å¤ |
| | | -- 2026-10-21 |
| | | -- |
| | | -- ã请æ±ãPOST /prod-api/smartor/satisfaction/statistics |
| | | -- { "type":2, "startTime":"2026-07-23", "endTime":"2026-10-21", |
| | | -- "deptcodes":["40003511"], "hospitaldistrictcodes":["40003514"], |
| | | -- "scriptids":[], "templateid":null } |
| | | -- ç»æï¼é¡µé¢ä¸è¡æ°æ®é½æ²¡æã |
| | | -- |
| | | -- ãæ ¹å ãä¸ä¸ªé®é¢å å ï¼ä»»ä½ä¸ä¸ªé½ä¼è®©æ¥å£è¿åç©ºï¼ |
| | | -- |
| | | -- â ç§å®¤/ç
åºè¢«åæ ANDï¼ä»£ç Bugï¼ |
| | | -- SatisfactionMapper.xml#selectSatisfactionSubtaskTypes |
| | | -- 忥æ¯ãleavehospitaldistrictcode IN(...) AND deptcode IN(...)ã两æ¡ç¬ç«æ¡ä»¶ã |
| | | -- 使»¡æåº¦åä»»å¡ï¼type=2 + service_type 6/14/15/16ï¼å¨åå**åªå deptcode**ï¼ |
| | | -- leavehospitaldistrictcode å
¨ä¸º NULLï¼å®æµ 3803 æ¡å
¨é¨ NULLï¼â 两个æ¡ä»¶æ°¸è¿ä¸å¯è½åæ¶æç« |
| | | -- â types æ¥ç©º â hasVoice / hasQuestionnaire é½ false â æ´ä¸ªæ¥å£ç´æ¥è¿å空ã |
| | | -- åä¸ä¸ªé¡µé¢çå¦å¤ 3 æ¡ SQLï¼sendCount / FillPersonCountByQuestion / FillStatByMatchedtextï¼ |
| | | -- ç¨ç齿¯ãç§å®¤ OR ç
åºãï¼åªæè¿ä¸æ¡åæäº ANDï¼å±äºéææ¶æ¼æ¹ã |
| | | -- |
| | | -- â¡ æ¶é´è¿æ»¤å visit_time å
¨ä¸º NULLï¼æ°æ®é®é¢ï¼ |
| | | -- ç»è®¡ç 4 æ¡ SQL é½ç¨ `visit_time >= startTime AND visit_time < endTime+1d`ï¼ |
| | | -- èååçæ»¡æåº¦åä»»å¡ visit_time **3803 æ¡å
¨é¨ä¸º NULL**ï¼ä»å¤©çä¹å¨å NULLï¼ |
| | | -- â å³ä½¿ â ä¿®å¥½ï¼æ¥ææ¡ä»¶ä»ç¶ææ°æ®å
¨é¨æé¤ã |
| | | -- |
| | | -- ⢠é®å·é¢ç®æ²¡ææå°ã满æåº¦(myd)ãåç±»ï¼é
ç½®é®é¢ï¼ |
| | | -- ç»è®¡é¡µçé¢ç®æ¸
åæ¥èª svy_lib_script_category ä¸ type å« myd çåç±» â |
| | | -- svy_lib_template_script.categoryid IN (è¿äºåç±»)ã |
| | | -- åå myd åç±»åªæ 1 个ï¼id=62ï¼name=满æåº¦ï¼ï¼é颿¯ 6 éèé¢ï¼svyid 51/97/102/103/154/156ï¼ |
| | | -- å±äºå
¶å®é®å·æ¨¡æ¿ï¼ï¼èçæ£å¨å¡«ç 19 éé¢ï¼svyid=200 / æ¨¡æ¿ 514ï¼**categoryid å
¨æ¯ NULL** |
| | | -- â å³ä½¿ â ⡠修好ï¼é¡µé¢ä¹åªä¼ååºé£ 6 éæ²¡ææ°æ®çèé¢ã |
| | | -- |
| | | -- ãå·²åçä¿®å¤ã |
| | | -- 代ç ï¼éåçï¼ï¼ |
| | | -- SatisfactionMapper.xml |
| | | -- · selectSatisfactionSubtaskTypesï¼ç§å®¤/ç
åºæ¹ä¸º ORï¼ä¸å
¶ä½ä¸æ¡ç»è®¡ SQL å£å¾ä¸è´ |
| | | -- · 4 æ¡ç»è®¡ SQL çæ¶é´æ¡ä»¶æ¹ä¸º |
| | | -- IFNULL(visit_time, IFNULL(finishtime, create_time))ï¼visit_time ä¸ºç©ºæ¶æå®æ/å建æ¶é´å
åºï¼ |
| | | -- æ°æ®ï¼å·²æ§è¡ï¼æ¬èæ¬è®°å½ï¼ï¼ |
| | | -- · ææ¨¡æ¿ 200 ç 19 é颿尿»¡æåº¦åç±» id=62ï¼19 è¡ï¼ |
| | | -- å¤ä»½è¡¨ï¼bak_svy_lts_cat_20261021 |
| | | -- |
| | | -- ãä¿®å¤å宿µï¼2026-10-21ï¼æ¡ä»¶åæªå¾ï¼ã |
| | | -- types = ['2']ï¼åéäººæ° 387ï¼19 éé¢éé¢çé¢äººæ° 380ï¼çé¢ç 98.2%ï¼ |
| | | -- |
| | | -- ãåæ»ã |
| | | -- UPDATE svy_lib_template_script t |
| | | -- JOIN bak_svy_lts_cat_20261021 b ON b.id = t.id |
| | | -- SET t.categoryid = b.categoryid; |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0ãæ
éå¤ç°ï¼ä¿®å¤åè¿ä¸æ¡è¦è½è¯´æé®é¢ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- â ç±»åæ¢æµï¼ä¿®å¤åè¿å 0 è¡ |
| | | SELECT DISTINCT type |
| | | FROM service_subtask |
| | | WHERE del_flag = 0 |
| | | AND leavehospitaldistrictcode IN ('40003514') |
| | | AND deptcode IN ('40003511') -- ä¸ä¸ä¸è¡æ¯ ANDï¼æ
æ°¸è¿ä¸æç« |
| | | AND service_type IN ('6', '14', '15', '16') |
| | | AND visit_time >= '2026-07-23' |
| | | AND visit_time < date_add('2026-10-21', interval 1 day); |
| | | |
| | | -- ⡠满æåº¦åä»»å¡çæ¶é´/ç§å®¤å段ç°ç¶ |
| | | SELECT COUNT(*) AS rows_total, |
| | | SUM(visit_time IS NULL) AS visit_time_null, |
| | | SUM(leavehospitaldistrictcode IS NULL) AS district_null, |
| | | SUM(deptcode IS NOT NULL) AS has_deptcode |
| | | FROM service_subtask |
| | | WHERE del_flag = 0 AND type = '2' AND service_type IN ('6', '14', '15', '16'); |
| | | |
| | | -- ⢠修å¤å myd åç±»éåªæ 6 éèé¢ï¼svyid ä¸å« 200ï¼ |
| | | SELECT COUNT(*) AS myd_questions, GROUP_CONCAT(DISTINCT svyid) AS svyids |
| | | FROM svy_lib_template_script |
| | | WHERE categoryid = 62 AND del_flag = 0; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãå·²æ§è¡ï¼ææ¨¡æ¿ 200 ç 19 é颿尿»¡æåº¦åç±» 62 |
| | | -- ---------------------------------------------------------------------------- |
| | | -- DROP TABLE IF EXISTS bak_svy_lts_cat_20261021; |
| | | -- CREATE TABLE bak_svy_lts_cat_20261021 AS |
| | | -- SELECT id, svyid, categoryid, script_content |
| | | -- FROM svy_lib_template_script |
| | | -- WHERE svyid = 200 AND categoryid IS NULL AND del_flag = 0; -- 19 è¡ |
| | | -- |
| | | -- UPDATE svy_lib_template_script |
| | | -- SET categoryid = 62 |
| | | -- WHERE svyid = 200 AND categoryid IS NULL AND del_flag = 0; -- 19 è¡ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãä¿®å¤åæ ¡éªï¼é¡µé¢ä¸æ¯éé¢ç åéäººæ° / çé¢äººæ° |
| | | -- 颿ï¼19 é svyid=200 çé¢é½æ¯ 387 / 380ï¼6 éèé¢ 0 / 0 |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT s.id AS script_id, s.svyid, |
| | | LEFT(s.script_content, 18) AS question, |
| | | (SELECT COUNT(DISTINCT ss.id) |
| | | FROM service_subtask ss |
| | | WHERE ss.del_flag = 0 AND ss.type = '2' AND ss.libtemplateid = s.svyid |
| | | AND ss.service_type IN ('6', '14', '15', '16') |
| | | AND IFNULL(ss.visit_time, IFNULL(ss.finishtime, ss.create_time)) >= '2026-07-23 00:00:00' |
| | | AND IFNULL(ss.visit_time, IFNULL(ss.finishtime, ss.create_time)) < date_add('2026-10-21 00:00:00', interval 1 day) |
| | | AND (ss.leavehospitaldistrictcode IN ('40003514') OR ss.deptcode IN ('40003511'))) AS send_person, |
| | | (SELECT COUNT(DISTINCT ss.id) |
| | | FROM service_subtask ss |
| | | JOIN service_subtask_detail d ON d.sub_id = ss.id AND d.del_flag = 0 |
| | | WHERE ss.del_flag = 0 AND ss.type = '2' AND ss.libtemplateid = s.svyid |
| | | AND ss.service_type IN ('6', '14', '15', '16') |
| | | AND IFNULL(ss.visit_time, IFNULL(ss.finishtime, ss.create_time)) >= '2026-07-23 00:00:00' |
| | | AND IFNULL(ss.visit_time, IFNULL(ss.finishtime, ss.create_time)) < date_add('2026-10-21 00:00:00', interval 1 day) |
| | | AND (ss.leavehospitaldistrictcode IN ('40003514') OR ss.deptcode IN ('40003511')) |
| | | AND d.questiontext = s.script_content) AS answer_person |
| | | FROM svy_lib_template_script s |
| | | WHERE s.categoryid = 62 AND s.del_flag = 0 |
| | | ORDER BY s.svyid, s.id; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ãåç»å»ºè®®ï¼å¯éï¼ã |
| | | -- 1) visit_time è¡¥æ°æ®ï¼è®©æææ visit_time è¿æ»¤çæ¥è¡¨é½è½æ¥å°æ»¡æåº¦æ°æ®ï¼ |
| | | -- ä¹è½èµ°ç´¢å¼ï¼ä»£ç éç IFNULL å
åºæ¯ä¿é©ï¼ä¸çäºæ°æ®æ¬èº«æ£ç¡®ï¼ï¼ |
| | | -- UPDATE service_subtask |
| | | -- SET visit_time = IFNULL(finishtime, create_time) |
| | | -- WHERE del_flag = 0 AND type = '2' AND service_type IN ('6','14','15','16') |
| | | -- AND visit_time IS NULL; -- 宿µ 3803 è¡ |
| | | -- â ï¸ ä¸ãéè®¿å®ææ¶é´ãå£å¾ç¸å
³ççæ¿ä¼åå½±åï¼å»ºè®®å
确认ä¸å¡å£å¾åæ§è¡ã |
| | | -- |
| | | -- 2) åç±»éé£ 6 éèé¢ï¼svyid 51/97/102/103/154/156ï¼ç°å¨ä¼ä»¥ 0/0 æ¾ç¤ºââ |
| | | -- å®ä»¬å±äºå
¶å®é®å·æ¨¡æ¿ãä¸å䏿»¡æåº¦ç»è®¡ä½è¢«æå¨äº myd åç±»ä¸ã |
| | | -- æ³è®©é¡µé¢åªæ¾ç¤º 19 éçé¢çè¯ï¼æå®ä»¬ä»åç±»éææå³å¯ï¼ |
| | | -- UPDATE svy_lib_template_script SET categoryid = NULL |
| | | -- WHERE categoryid = 62 AND svyid <> 200 AND del_flag = 0; -- 6 è¡ï¼å
å¤ä»½ï¼ |
| | | -- |
| | | -- 3) å端请æ±éå¸¦äº scriptids: [] å templateid: nullï¼ |
| | | -- ä½å端 PatSatisfactionReqVO 没æ scriptids åæ®µï¼ä¼è¢«å¿½ç¥ï¼ãstatistics ä¹ä¸ç¨ templateidï¼ |
| | | -- å¦æè¦æé¢ç®/模æ¿çéï¼éè¦åå端ä¸èµ·è¡¥ã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ååéä¸ï¼nhfyï¼æ»¡æåº¦ç»è®¡é¡µ /smartor/serviceSubtask/getSfStatisticsCount æ¥ä¸å°æ°æ® |
| | | -- 2026-10-21 |
| | | -- |
| | | -- ã请æ±ãPOST /dev-api/smartor/serviceSubtask/getSfStatisticsCount |
| | | -- { "configKey":"joyCount", "statisticaltype":1, "type":"2", |
| | | -- "serviceType":[6], "deptcodes":["40003511",...], "hospitaldistrictcodes":["40003514"], |
| | | -- "startTime":"2026-07-23", "endTime":"2026-10-21", "scriptids":[] } |
| | | -- 页é¢è¡¨æ ¼ãææ æ°æ®ãã |
| | | -- |
| | | -- ãæ ¹å 1ï¼ä¸»å ï¼ï¼æ¶é´è¿æ»¤å visit_time å
¨ä¸º NULLã |
| | | -- getSfStatistics / getSfStatisticsGroupKey / getSfStatisticsCategory / |
| | | -- getSfStatisticsHyperlink / getSfStatisticsJoy(-details) çãé访æ¶é´ãæ¡ä»¶é½æ¯ |
| | | -- AND visit_time >= DATE(#{startTime}) AND visit_time < DATE_ADD(...) |
| | | -- èååæ»¡æåº¦åä»»å¡ï¼type=2 + service_type 6/14/15/16ï¼ç visit_time |
| | | -- **3811 æ¡å
¨é¨ä¸º NULL** â åªè¦é¡µé¢éäºæ¶é´åºé´ï¼å°±æ¯ 0 è¡ã |
| | | -- 宿µï¼ç§å®¤ 40003511 / åºé¢ 2026-07-23~2026-10-21ï¼ï¼ |
| | | -- å SQL = 0 è¡ |
| | | -- ä»
æç§å®¤ç
åºæ¹ OR = 0 è¡ï¼æ¶é´æ¡ä»¶ä»ç¶åæå
¨é¨ï¼ |
| | | -- OR + æ¶é´å
åº = 387 è¡ |
| | | -- |
| | | -- ãæ ¹å 2ï¼ç§å®¤ AND ç
åºï¼è满æåº¦åä»»å¡ 83% 没æç
åºã |
| | | -- å䏿¡ SQL éãç§å®¤ãåãç
åºãæ¯ä¸¤æ¡ç¬ç«ç AND æ¡ä»¶ï¼ |
| | | -- AND leavehospitaldistrictcode IN (...) AND deptcode IN (...) |
| | | -- ååæ»¡æåº¦åä»»å¡ç leavehospitaldistrictcode æ 3236/3811 为 NULL |
| | | -- â 两个æ¡ä»¶æ°¸è¿ä¸å¯è½åæ¶æç«ã |
| | | -- ä¿®å¤éç¨**æå°æ¹å¨**ï¼ç
åºä¸ºç©ºè§ä¸º"ä¸é"ââ |
| | | -- AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode IN (...)) |
| | | -- æç
åºçæ°æ®è¡ä¸ºå®å
¨ä¸åï¼é访 service_type=2 ç 49982 è¡éåªæ 17 è¡ç
åºä¸ºç©ºï¼ã |
| | | -- |
| | | -- ãæ ¹å 3ï¼ã满æåº¦é¡¹ç®æ»æ¡æ° / æªééæ° / 宿çãä¸åæä¸º 0ã |
| | | -- getSfStatisticsCategory çç»è®¡å£å¾æ¯ |
| | | -- SUM(CASE WHEN a.categoryid IN (sys_config:joyCount éçåç±») THEN 1 ELSE 0 END) |
| | | -- è sys_config.joyCount = "62,1000000012,5,1000000015,465"ï¼ |
| | | -- ååæ»¡æåº¦ä½çæç»ç categoryid **69599 è¡å
¨é¨ä¸º NULL** |
| | | -- ï¼æ¥æºï¼svy_task_template_script.categoryid 乿¯ NULLï¼è½åºæ¶åæ ·å¸¦ä¸æ¥ï¼ |
| | | -- â ä¸åæ°¸è¿ 0ã |
| | | -- |
| | | -- ãå·²åçä¿®å¤ã |
| | | -- 代ç ï¼ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xmlï¼éåçï¼ï¼ |
| | | -- · getSfStatistics / getSfStatisticsGroupKey / getSfStatisticsCategory / |
| | | -- getSfStatisticsHyperlink / getSfStatisticsJoy / getSfStatisticsJoydetails |
| | | -- å
å¤ï¼visit_time â IFNULL(visit_time, finishtime, create_time) å
åº |
| | | -- · åå
å¤ï¼ç
åºæ¡ä»¶æ¹ä¸ºãä¸ºç©ºå³æ¾è¿ã |
| | | -- · getSfStatisticsScriptDetails / getSfStatisticsScriptItemDetailsï¼ç¹ãæ¥ç详æ
ãå¼¹çªï¼ |
| | | -- 两å¤ï¼åæ ·æ visit_time æ¢æ IFNULL å
åº ââ 䏿¹çè¯å¼¹çªæ°¸è¿æ¯ãææ æ°æ®ã |
| | | -- æ°æ®ï¼å·²æ§è¡ï¼æ¬èæ¬è®°å½ï¼ï¼ |
| | | -- · svy_task_template_script(templateID=514) 19 è¡ categoryid = 62ï¼ä»¥åæ°çå·èªå¨å¸¦ä¸ï¼ |
| | | -- å¤ä»½è¡¨ bak_svy_tts_cat_20261021 |
| | | -- · service_subtask_detail 69599 è¡ categoryid = 62ï¼åå²çå·è¡¥ä¸ï¼ |
| | | -- å¤ä»½è¡¨ bak_ssd_category_20261021 |
| | | -- |
| | | -- ãä¿®å¤å宿µï¼æ¡ä»¶åæªå¾ï¼ç§å®¤ 40003511 / ç
åº 40003514 / 2026-07-23~2026-10-21ï¼ã |
| | | -- è¡¨æ ¼è¡æ° 1ï¼ç§å®¤ è¿ç¤ç§ä¸ç
æ¿ï¼éé 386 人次ã已宿 379 |
| | | -- 满æåº¦é¢ç®æ»æ¡æ° 7201ï¼=379Ã19ï¼ãå·²éé 6510ã宿ç â90% |
| | | -- å¼¹çªã满æåº¦ææ 详æ
ã19 éé¢ï¼å¦ãæ¯å¦æç
§é¡¾æ¨çæ¤å£«ã379/379ã |
| | | -- ãæ»ä½æ¥è¯´â¦æå¤å°åã359/379ãã请æåºæ¨ææ»¡æçæ¤å£«ã97/379ããæä¸æ»¡æã1/379 |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0ãè¯æ® SQL |
| | | -- ---------------------------------------------------------------------------- |
| | | -- â æ¶é´æ¡ä»¶çå½±åï¼ä¸æ¡å¯¹æ¯ï¼ |
| | | SELECT 'å SQL(AND + visit_time)' AS version, COUNT(*) AS c |
| | | FROM service_subtask |
| | | WHERE del_flag=0 AND orgid='20001001' AND campusid='30001002' |
| | | AND leavehospitaldistrictcode IN ('40003514') AND deptcode IN ('40003511') |
| | | AND service_type IN (6) AND type='2' |
| | | AND visit_time >= DATE('2026-07-23') AND visit_time < DATE_ADD(DATE('2026-10-21'), INTERVAL 1 DAY) |
| | | UNION ALL |
| | | SELECT 'ç
åºä¸ºNULLæ¾è¿ + visit_time å
åº', COUNT(*) |
| | | FROM service_subtask |
| | | WHERE del_flag=0 AND orgid='20001001' AND campusid='30001002' |
| | | AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode IN ('40003514')) |
| | | AND deptcode IN ('40003511') |
| | | AND service_type IN (6) AND type='2' |
| | | AND IFNULL(visit_time, IFNULL(finishtime, create_time)) >= DATE('2026-07-23') |
| | | AND IFNULL(visit_time, IFNULL(finishtime, create_time)) < DATE_ADD(DATE('2026-10-21'), INTERVAL 1 DAY); |
| | | |
| | | -- ⡠满æåº¦æç»åç±»åå¡«ååçå£å¾ |
| | | SELECT 'categoryid 为空æç»' AS k, COUNT(*) AS c |
| | | FROM service_subtask_detail d JOIN service_subtask s ON s.id=d.sub_id |
| | | WHERE s.del_flag=0 AND s.type='2' AND s.service_type IN ('6','14','15','16') AND d.del_flag=0 AND d.categoryid IS NULL; |
| | | |
| | | -- ⢠页é¢è¡¨æ ¼ä¸æ»¡æåº¦ä¸åçæç»å£å¾ |
| | | SELECT COUNT(DISTINCT t.id) AS subtasks, |
| | | SUM(CASE WHEN a.categoryid IN (62,1000000012,5,1000000015,465) THEN 1 ELSE 0 END) AS joy_all_count, |
| | | SUM(CASE WHEN a.categoryid IN (62,1000000012,5,1000000015,465) |
| | | AND IFNULL(a.matchedtext,a.asrtext) IS NOT NULL AND IFNULL(a.matchedtext,a.asrtext) <> '' THEN 1 ELSE 0 END) AS joy_count |
| | | FROM service_subtask_detail a JOIN service_subtask t ON a.sub_id=t.id |
| | | WHERE a.del_flag=0 AND t.del_flag=0 AND t.orgid='20001001' AND t.campusid='30001002' |
| | | AND (t.leavehospitaldistrictcode IS NULL OR t.leavehospitaldistrictcode IN ('40003514')) |
| | | AND t.deptcode IN ('40003511') |
| | | AND t.service_type IN (6) AND t.type='2' |
| | | AND IFNULL(t.visit_time, IFNULL(t.finishtime, t.create_time)) >= DATE('2026-07-23') |
| | | AND IFNULL(t.visit_time, IFNULL(t.finishtime, t.create_time)) < DATE_ADD(DATE('2026-10-21'), INTERVAL 1 DAY); |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ãæ°æ®ä¿®å¤è®°å½ï¼å·²æ§è¡ï¼ã |
| | | -- 1) 模æ¿é¢ç®æå°æ»¡æåº¦åç±»ï¼è®©ä»¥åçæ°çå·èªå¸¦ categoryidï¼ |
| | | -- DROP TABLE IF EXISTS bak_svy_tts_cat_20261021; |
| | | -- CREATE TABLE bak_svy_tts_cat_20261021 AS |
| | | -- SELECT id, templateID, categoryid FROM svy_task_template_script |
| | | -- WHERE templateID=514 AND categoryid IS NULL AND del_flag=0; -- 19 è¡ |
| | | -- UPDATE svy_task_template_script SET categoryid=62 |
| | | -- WHERE templateID=514 AND categoryid IS NULL AND del_flag=0; |
| | | -- |
| | | -- 2) åå²ä½çæç»è¡¥åç±»ï¼69599 è¡ï¼æ id åæ®µæ§è¡ï¼åæ¹ ~1.3 ä¸è¡ï¼ |
| | | -- DROP TABLE IF EXISTS bak_ssd_category_20261021; |
| | | -- CREATE TABLE bak_ssd_category_20261021 AS |
| | | -- SELECT d.id, d.categoryid, d.sub_id |
| | | -- FROM service_subtask_detail d JOIN service_subtask s ON s.id=d.sub_id |
| | | -- WHERE d.categoryid IS NULL AND d.del_flag=0 AND s.del_flag=0 |
| | | -- AND s.type='2' AND s.service_type IN ('6','14','15','16'); |
| | | -- -- åæ®µï¼ç¤ºä¾ï¼æ id æ¯ 3 ä¸ä¸æ®µï¼å
± 8 æ®µï¼ |
| | | -- -- UPDATE service_subtask_detail d JOIN service_subtask s ON s.id=d.sub_id |
| | | -- -- SET d.categoryid=62 |
| | | -- -- WHERE d.id BETWEEN 128219 AND 158218 AND d.categoryid IS NULL AND d.del_flag=0 |
| | | -- -- AND s.del_flag=0 AND s.type='2' AND s.service_type IN ('6','14','15','16'); |
| | | -- |
| | | -- åæ»ï¼ |
| | | -- UPDATE service_subtask_detail d JOIN bak_ssd_category_20261021 b ON b.id=d.id |
| | | -- SET d.categoryid = b.categoryid; |
| | | -- UPDATE svy_task_template_script t JOIN bak_svy_tts_cat_20261021 b ON b.id=t.id |
| | | -- SET t.categoryid = b.categoryid; |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ã仿ªè§£å³ / éè¦ä¸å¡ç¡®è®¤ç两åã |
| | | -- 1) é访çï¼åæ¶çï¼ï¼selectTimelyRateBatch éæ |
| | | -- AND ss.visit_time IS NOT NULL |
| | | -- ä¸ç¨ visit_time / endtime 计ç®åæ¶çï¼ååæ»¡æåº¦ä¸¤è
é½ä¸ºç©º |
| | | -- â è¿ä¸å对满æåº¦å£å¾æ²¡ææ°æ®æ¥æºï¼ä¼æ¾ç¤º 0ã |
| | | -- è¦åºæ°å¿
é¡»å
æãåºé访æ¶é´ãåãåºé¢æ¶é´ãï¼å±äºæ°æ®æ²»çèç´ã |
| | | -- |
| | | -- 2) ãæ»¡æåº¦ææ°ãtab è°ç¨ç getSfStatisticsJoy / getSfStatisticsJoydetails æ¯**è¯é³å£å¾**ï¼ |
| | | -- AND targetid IN (SELECT id FROM ivr_liba_target WHERE assortid IN (joyCount é
ç½®)) |
| | | -- ååæ»¡æåº¦æ¯é®å·ï¼svy_* ææ ï¼ï¼targetid ä¸ ivr_liba_target 䏿¯ä¸å¥ |
| | | -- â å³ä½¿ä¿®å¥½æ¶é´/ç
åºæ¡ä»¶ï¼è¿ä¸ª tab 对ååä¹åªè½æ¯ 0ã |
| | | -- è¦ä¹ç»åååä¸çæ svy ææ ç»è®¡çå®ç°ï¼è¦ä¹è¯¥ tab 对ååéèã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ååéä¸ï¼nhfyï¼ï¼æ»¡æåº¦ç»è®¡ 4 个æ¥å£"æ°æ®ä¸å¯¹" ââ å®ä½ä¸ä¿®å¤ |
| | | -- · POST /smartor/serviceSubtaskDetail/sltdMydTotalByScore |
| | | -- · POST /smartor/serviceSubtaskDetail/statQuestionOptionByKsOrBq (页é¢è°äº 3 次) |
| | | -- 2026-10-21 |
| | | -- |
| | | -- ãæ ¹å ï¼3 个ï¼åå·²å¨åºä¸éåï¼ã |
| | | -- |
| | | -- â åºé¢æ¶é´è¿æ»¤ç¨çæ¯ endtimeï¼èååæ»¡æåº¦åä»»å¡ç endtime 大é为空 |
| | | -- service_subtask.endtimeï¼3803 æ¡æ»¡æåº¦åä»»å¡ä¸ 3151 æ¡ä¸º NULLï¼83%ï¼ã |
| | | -- è selectMydSubtaskRefs / statQuestionOption / statQuestionOptionBySubtaskIds |
| | | -- å个 statement ç"åºé¢æ¶é´åºé´"é½ç´æ¥ date_format(s.endtime,...) è¿æ»¤ |
| | | -- â 页é¢ä¸éåºé¢æ¥æï¼æ°æ®å°±è¢«çæå¤§åï¼å®æµï¼å 2026-07-23~2026-10-21 å refs = 0ï¼ã |
| | | -- ä¿®å¤ï¼ç»ä¸æ¹ä¸º IFNULL(s.endtime, IFNULL(s.finishtime, s.create_time)) å
åºã |
| | | -- ä¿®å¤åå䏿¡ä»¶ refs = 387ï¼= 满æåº¦ sendstate=6 ç 380 + æªå®æ 7ï¼ã |
| | | -- |
| | | -- â¡ statQuestionOptionByKsOrBq çãç§å®¤ OR ç
åºãå°äºæ¬å·ï¼ç Bugï¼åå¾·ä¹éï¼ |
| | | -- å SQLï¼deptOrDistrict==2 忝ï¼ï¼ |
| | | -- AND leavehospitaldistrictcode IN (...) OR deptcode IN (...) |
| | | -- AND ä¼å
级é«äº ORï¼å®é
çä»·äº |
| | | -- (ææ AND æ¡ä»¶ AND ç
åº IN ...) OR ç§å®¤ IN ... |
| | | -- â "ç§å®¤å½ä¸"é£ä¸æ¯å®å
¨ç»è¿äº service_type / æ¥æ / del_flag æ¡ä»¶ã |
| | | -- 宿µï¼ååãç§å®¤ 40003511ã2026-07-23~2026-10-21ï¼ï¼ |
| | | -- ä¿®æ£å 17604 è¡ ä¿®æ£å 7220 è¡ ï¼å¤ç®äº 2.4 åï¼å
¨æ¯åå²/å
¶å®ä»»å¡ç±»åï¼ |
| | | -- ä¿®å¤ï¼æ¹æ AND (ç
åº IN (...) OR ç§å®¤ IN (...))ã |
| | | -- |
| | | -- ⢠综åå¾åå£å¾åæ»æçç«åå¾·ï¼SLTDï¼äºæ¡£ææ¡ |
| | | -- SltdSatisfactionController#calcMydScore é resolve(SatisfactionSites.SLTD) æ¯ç¡¬ç¼ç ã |
| | | -- åå¾·å£å¾é éé¡¹ææ¡ "徿»¡æ/满æ/ä¸è¬/䏿»¡æ/å¾ä¸æ»¡æ" 夿¡£ï¼ |
| | | -- èååé®å·ï¼æ¨¡æ¿ 514 / libtemplateid 200ï¼çé项æ¯ãæ¯ï¼æï¼/ï¼æ»æ¯ï¼å¾å®é/å¾çç»/主å¨è®²è¿â¦ã |
| | | -- â 䏿¡é½å¹é
ä¸ä¸ â å¾åæä¸º "0.00"ã |
| | | -- ä¿®å¤ï¼ç«ç¹æ¹ç± sys_config: satisfaction.site å³å®ï¼é»è®¤ sltdï¼ä¿æåå¾·ä¸åï¼ï¼ |
| | | -- ååå¯é
commonï¼= ææç» score æ±å¹³åï¼ã |
| | | -- |
| | | -- â ï¸ ä½è¦æ³¨æï¼ååè¿ä¸ªé®å·**æ ¹æ¬æ²¡é
åå¼** |
| | | -- svy_task_template_script.scoreï¼æ¨¡æ¿514ï¼19é¢ï¼ = '00000000000' |
| | | -- svy_task_template_targetoption.scoreï¼58个éé¡¹ï¼ = 0 |
| | | -- service_subtask_detail.scoreï¼63108 è¡ï¼ = 0 / '00000000000' |
| | | -- æä»¥å³ä¾¿åå° common å£å¾ï¼ç»¼åå¾åä»ç¶æ¯ 0.00ã |
| | | -- è¦åºå¾åï¼å¿
é¡»å
ç»é项/é¢ç®é
åå¼ï¼ä¸å¡é
ç½®ï¼ï¼å¦åè¿ä¸ªå对ååæ²¡ææä¹ã |
| | | -- |
| | | -- ãå·²æ¹ç代ç ãruoyi-satisfaction |
| | | -- · SatisfactionMapper.xml |
| | | -- - selectMydSubtaskRefs / statQuestionOption / statQuestionOptionBySubtaskIdsï¼ |
| | | -- åºé¢æ¶é´ endtime â IFNULL(endtime, finishtime, create_time) |
| | | -- - selectMydSubtaskRefsï¼deptOrDistrict è¡¥ä¸ 2ï¼ORï¼åæ¯ï¼åæ¥åªå¨ 1 æ¶æ¼ç
åºï¼ç§å®¤å´æ æ¡ä»¶æ¼ï¼ |
| | | -- - statQuestionOptionByKsOrBqï¼deptOrDistrict==2 ç OR è¡¥æ¬å· |
| | | -- · SatisfactionSwitchï¼æ°å¢ site()ï¼è¯» sys_config: satisfaction.siteï¼10 ç§è¿ç¨å
ç¼åï¼ |
| | | -- · SltdSatisfactionController#calcMydScoreï¼æ¹ä¸º resolve(satisfactionSwitch.site()) |
| | | -- |
| | | -- ãä¿®å¤å宿µï¼æ¡ä»¶ï¼ç§å®¤ 40003511 / ç
åº 40003514 / 2026-07-23~2026-10-21ï¼ã |
| | | -- refs = 387ï¼æç§å®¤åç»é项å叿£å¸¸ï¼ä¾å¦ãè¿ç¤ç§ä¸ç
æ¿ãæ¯é¢ 379 人 |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0ãè¯æ® SQLï¼éæ¶å¯éè·ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- â åºé¢æ¶é´ä¸ºç©ºçæ¯ä¾ |
| | | SELECT COUNT(*) AS rows_total, |
| | | SUM(endtime IS NULL) AS endtime_null, |
| | | SUM(leavehospitaldistrictname IS NULL OR leavehospitaldistrictname = '') AS district_name_empty |
| | | FROM service_subtask |
| | | WHERE del_flag = 0 AND type = '2' AND service_type IN ('6', '14', '15', '16'); |
| | | |
| | | -- â¡ OR æ¼æ¬å·çå½±åé¢ï¼ä¿®æ£å vs ä¿®æ£åï¼ |
| | | SELECT 'ä¿®æ£å(æ æ¬å·)' AS version, COUNT(*) AS rows_cnt |
| | | FROM service_subtask_detail d |
| | | JOIN service_subtask s ON d.sub_id = s.id |
| | | WHERE s.del_flag = 0 AND d.del_flag = 0 AND s.service_type IN ('6', '14') |
| | | AND d.create_time >= '2026-07-23 00:00:00' |
| | | AND d.create_time < date_add('2026-10-21', interval 1 day) |
| | | AND s.leavehospitaldistrictcode IN ('40003514') OR s.deptcode IN ('40003511'); |
| | | |
| | | SELECT 'ä¿®æ£å(æ¬å·å
ä½ OR)' AS version, COUNT(*) AS rows_cnt |
| | | FROM service_subtask_detail d |
| | | JOIN service_subtask s ON d.sub_id = s.id |
| | | WHERE s.del_flag = 0 AND d.del_flag = 0 AND s.service_type IN ('6', '14') |
| | | AND d.create_time >= '2026-07-23 00:00:00' |
| | | AND d.create_time < date_add('2026-10-21', interval 1 day) |
| | | AND (s.leavehospitaldistrictcode IN ('40003514') OR s.deptcode IN ('40003511')); |
| | | |
| | | -- ⢠åå¼å°åºææ²¡æé
ï¼ä¸ä¸ªå±é¢é½çä¸ç¼ï¼ |
| | | SELECT 'é¢ç®åå¼' AS layer, score, COUNT(*) AS cnt |
| | | FROM svy_task_template_script WHERE templateID = 514 AND del_flag = 0 GROUP BY score |
| | | UNION ALL |
| | | SELECT 'é项åå¼', o.score, COUNT(*) |
| | | FROM svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid |
| | | WHERE s.templateID = 514 AND s.del_flag = 0 GROUP BY o.score |
| | | UNION ALL |
| | | SELECT 'æç»åå¼', d.score, COUNT(*) |
| | | FROM service_subtask_detail d |
| | | JOIN service_subtask ss ON ss.id = d.sub_id |
| | | WHERE ss.type = '2' AND ss.service_type IN ('6', '14') AND d.del_flag = 0 |
| | | GROUP BY d.score; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãå¯éé
ç½®ï¼ç»¼åå¾åå£å¾ç«ç¹ï¼ä¸æ¹ä¹è½è·ï¼åªæ¯å¾åå£å¾æåå¾·ï¼ |
| | | -- åå¾·ï¼ä¿æé»è®¤ sltdï¼ææ¾å¼é
ç½® sltdï¼ |
| | | -- ååï¼é
common ââ â ï¸ åææ¯é®å·é项/é¢ç®é
äºåå¼ï¼å¦åå¾å仿¯ 0.00 |
| | | -- ---------------------------------------------------------------------------- |
| | | -- INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | -- VALUES ('满æåº¦ç»¼åå¾åå£å¾', 'satisfaction.site', 'common', 'Y', 'admin', sysdate(), |
| | | -- 'sltd=çç«åå¾·äºæ¡£ææ¡å æï¼é»è®¤ï¼ï¼common/nanhua=ææç» score æ±å¹³å'); |
| | | |
| | | -- æ ¡éª |
| | | -- SELECT config_key, config_value FROM sys_config WHERE config_key = 'satisfaction.site'; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãå¯éæ°æ®/é
ç½®ï¼è®©ã综åå¾åã对ååææä¹ |
| | | -- å½åæ¨¡æ¿ 514 ç 19 éé¢ã58 个é项åå¼å
¨æ¯ 0ï¼ä»»ä½å£å¾é½ç®ä¸åºåã |
| | | -- è¥å»é¢æ¥å"äºæ¡£ä¹å¤æ 满足/é¨å满足/䏿»¡è¶³ æå"ï¼è¯·ä¸å¡å¨ |
| | | -- ãé®å·æ¨¡æ¿ â é¢ç®é项ãéç»æ¯ä¸ªé项é
ç½®åå¼ï¼ä¹åï¼ |
| | | -- · ç«ç¹å£å¾å»ºè®®é
commonï¼ææç» score æ±å¹³åï¼ç¾åå¶ï¼ |
| | | -- · å岿ç»ç score ä¸ä¼èªå¨åå¡«ï¼éå¦è¡è¯ä¼°è¦ä¸è¦æé项补åå²åå¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã3ãéªè¯ï¼ä¿®æ£åç refs 䏿ç§å®¤çé项åå¸ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT COUNT(*) AS refs |
| | | FROM service_subtask |
| | | WHERE del_flag = 0 |
| | | AND orgid = '20001001' AND campusid = '30001002' |
| | | AND service_type = '6' |
| | | AND date_format(IFNULL(endtime, IFNULL(finishtime, create_time)), '%y%m%d') >= date_format('2026-07-23', '%y%m%d') |
| | | AND date_format(IFNULL(endtime, IFNULL(finishtime, create_time)), '%y%m%d') <= date_format('2026-10-21', '%y%m%d') |
| | | AND (leavehospitaldistrictcode IN ('40003514') OR deptcode IN ('40003511')); |
| | | |
| | | SELECT s.deptname, d.questiontext, d.asrtext, COUNT(*) AS cnt |
| | | FROM service_subtask_detail d |
| | | JOIN service_subtask s ON d.sub_id = s.id |
| | | WHERE s.del_flag = 0 AND d.del_flag = 0 AND s.service_type IN ('6', '14') |
| | | AND d.create_time >= '2026-07-23 00:00:00' |
| | | AND d.create_time < date_add('2026-10-21', interval 1 day) |
| | | AND (s.leavehospitaldistrictcode IN ('40003514') OR s.deptcode IN ('40003511')) |
| | | GROUP BY s.deptname, d.questiontext, d.asrtext |
| | | ORDER BY cnt DESC |
| | | LIMIT 5; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ãå¦é注æï¼æªæ¹ï¼å±äº§åå£å¾ï¼ã |
| | | -- 1) statQuestionOptionByKsOrBq ç Java ä¾§æ deptname / leavehospitaldistrictname åç»ï¼ |
| | | -- åç»åä¸ºç©ºç´æ¥è·³è¿ãååæ»¡æåº¦åç leavehospitaldistrictname æ 3228/3803 ä¸ºç©ºï¼ |
| | | -- æä»¥é¡µé¢ä¸ãæç
åºãè¿ä¸ªç»´åº¦å¯¹åååºæ¬æ¯ç©ºçââ䏿¯åæ°éï¼æ¯æ°æ®é没æç
åºã |
| | | -- 2) åä¸é¡µé¢ç mydTrend / sltdMydTotalByDimension / mzMydScoreRank ä¹é½æ¯åå¾·å£å¾ |
| | | -- ï¼åºé¢æ¶é´ãç
åºç»´åº¦ï¼ï¼ååè¦ç¨éæåæ ·æè·¯éä¸ªæ ¸å¯¹ã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ååéä¸ï¼nhfyï¼ï¼æ¢å¤è¢«é»è¾å é¤ç满æåº¦ä½çæç»ï¼2026-10-21 å·²æ§è¡ï¼ |
| | | -- |
| | | -- ãèæ¯ã导åºãé®é¢è¯¦æ
å æ¯ãæ¯ãæ£è
é访信æ¯è¡¨åãå° 10 人ï¼370 vs 380ï¼ï¼ |
| | | -- åå æ¯è¿ 10 个åä»»å¡ç service_subtask_detail å
¨é¨è¢«ç½® del_flag='1' |
| | | -- ï¼å䏿£è
è¿æ 2~6 份éå¤å¯æ¬ï¼çæ¡å®å
¨ä¸è´ï¼ã |
| | | -- è¯¦è§ / ææ¥_é®é¢å æ¯ä¸é访表å人æ°ä¸ä¸è´.sqlãæç°åº_è°ææç»ç½®ä¸ºå é¤_20261021.sql |
| | | -- |
| | | -- ãæ¬æ¬¡æ§è¡å
容ã |
| | | -- 1) æ¢å¤ 5 个åä»»å¡ï¼45108 45109 45110 45111 45114ï¼ï¼æ¯ (sub_id, scriptid) å MAX(id) é£ä¸ä»½ç½® del_flag='0' |
| | | -- -> æ´æ° 95 è¡ï¼19 é¢ Ã 5 äººï¼ |
| | | -- 2) è¡¥é½æ¤å人工æ¢å¤æ¼æçé¢ï¼45099 缺 4 é¢ã45102 缺 9 é¢ï¼ |
| | | -- -> æ´æ° 13 è¡ |
| | | -- 3) æªæ¹ update_timeï¼ä¿æ create_time=update_time çåè¯æçº¹ï¼ä¹ä¸æ¤å人工æ¢å¤çè¡ä¸è´ï¼ |
| | | -- 4) éå¤å¯æ¬ï¼åé¢åçæ¡çå¤ä»½ï¼ä»ä¿ç del_flag='1'ï¼ä¸å½±åç»è®¡ï¼ |
| | | -- å¯¼åº SQL æ (task, question, asrtext, targetvalue, value_type) åç» + COUNT(DISTINCT s.id) å»é |
| | | -- |
| | | -- ãæ§è¡ç»æï¼2026-10-21 夿 ¸ï¼ã |
| | | -- 表åè¡æ° 380 / ææææç»çæ£è
380ï¼19 éé¢éé¢äººæ°å
¨é¨ 380ï¼æ¤å 370/378/379ï¼ |
| | | -- æ¯ä¸ªå任塿´»è¡é¢ç®æ°ï¼44957(19) 45094(19) 45095(19) 45099(19) 45102(19) |
| | | -- 45108(19) 45109(19) 45110(19) 45111(19) 45114(19) |
| | | -- |
| | | -- ãå¤ä»½è¡¨ãç¨äºåæ» |
| | | -- bak_ssd_20261021_nhfy = 412 è¡ï¼45108/45109/45110/45111/45114 çå
¨é¨æç»ï¼ |
| | | -- bak_ssd_20261021_nhfy_2 = 114 è¡ï¼45099/45102 çå
¨é¨æç»ï¼ |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãå·²æ§è¡ã(1) å¤ä»½ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- DROP TABLE IF EXISTS bak_ssd_20261021_nhfy; |
| | | -- CREATE TABLE bak_ssd_20261021_nhfy AS |
| | | -- SELECT * FROM service_subtask_detail WHERE sub_id IN (45108, 45109, 45110, 45111, 45114); |
| | | |
| | | -- DROP TABLE IF EXISTS bak_ssd_20261021_nhfy_2; |
| | | -- CREATE TABLE bak_ssd_20261021_nhfy_2 AS |
| | | -- SELECT * FROM service_subtask_detail WHERE sub_id IN (45099, 45102); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãå·²æ§è¡ã(2) æ¢å¤ 5 个åä»»å¡ï¼æ¯ (sub_id, scriptid) çææ°é£ä»½ -> 95 è¡ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask_detail d |
| | | -- JOIN (SELECT sub_id, scriptid, MAX(id) AS keep_id |
| | | -- FROM service_subtask_detail |
| | | -- WHERE sub_id IN (45108, 45109, 45110, 45111, 45114) |
| | | -- GROUP BY sub_id, scriptid) x ON x.keep_id = d.id |
| | | -- SET d.del_flag = '0'; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãå·²æ§è¡ã(3) è¡¥é½ 45099 / 45102 缺çé¢ -> 13 è¡ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask_detail d |
| | | -- JOIN (SELECT x.sub_id, x.scriptid, MAX(x.id) AS keep_id |
| | | -- FROM service_subtask_detail x |
| | | -- WHERE x.sub_id IN (45099, 45102) |
| | | -- AND NOT EXISTS (SELECT 1 FROM service_subtask_detail d3 |
| | | -- WHERE d3.sub_id = x.sub_id AND d3.scriptid = x.scriptid AND d3.del_flag = 0) |
| | | -- GROUP BY x.sub_id, x.scriptid) k ON k.keep_id = d.id |
| | | -- SET d.del_flag = '0'; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãæ ¡éªãéæ¶å¯éè·ï¼é¢æ 380 / 380ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SET @expect := 380; |
| | | |
| | | SELECT COUNT(*) AS form_rows, |
| | | COUNT(DISTINCT CASE WHEN d.live = 1 THEN d.sub_id END) AS with_live_detail |
| | | FROM service_subtask s |
| | | LEFT JOIN (SELECT sub_id, MAX(del_flag = 0) AS live FROM service_subtask_detail GROUP BY sub_id) d |
| | | ON d.sub_id = s.id |
| | | WHERE s.del_flag = '0' AND s.orgid = '20001001' AND s.campusid = '30001002' |
| | | AND s.service_type = 6 AND s.sendstate = 6 AND s.visit_count = 1 |
| | | AND (s.deptcode = '40003511' OR s.leavehospitaldistrictcode = '40003514'); |
| | | |
| | | SELECT MIN(c) AS min_cnt, MAX(c) AS max_cnt, SUM(c <> @expect) AS not_equal |
| | | FROM ( SELECT COUNT(DISTINCT s.id) AS c |
| | | FROM service_subtask s |
| | | JOIN service_subtask_detail d |
| | | ON d.sub_id = s.id AND d.del_flag = 0 |
| | | 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') |
| | | WHERE s.del_flag = '0' AND s.orgid = '20001001' AND s.campusid = '30001002' |
| | | AND s.service_type = 6 AND s.sendstate = 6 AND s.visit_count = 1 |
| | | AND (s.deptcode = '40003511' OR s.leavehospitaldistrictcode = '40003514') |
| | | GROUP BY d.questiontext |
| | | ) x; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãåæ»ã(éè¦æ¤éæ¶) |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask_detail d |
| | | -- JOIN bak_ssd_20261021_nhfy b ON b.id = d.id |
| | | -- SET d.del_flag = b.del_flag, d.update_time = b.update_time; |
| | | -- UPDATE service_subtask_detail d |
| | | -- JOIN bak_ssd_20261021_nhfy_2 b ON b.id = d.id |
| | | -- SET d.del_flag = b.del_flag, d.update_time = b.update_time; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ãæ³¨æãæ¬æ¬¡åªæ¯ä¿®æ°æ®ãæ ¹å ï¼è°ææç»ç½® 1ï¼å°æªå®ä½ï¼ |
| | | -- å
¨åºè¢«å æç»ç update_time å
¨é¨çäº create_timeï¼è¯´æå é¤**没æ**èµ° |
| | | -- Controller->Service é£ä¸¤æ¡æ¥å£ï¼å®ä»¬ä¼å¼ºå¶ NOW()ï¼ï¼ç¨ |
| | | -- sql/æç°åº_è°ææç»ç½®ä¸ºå é¤_20261021.sql éç general_log æä¸æ¬¡ SQL åæå³å¯å®æ¡ã |
| | | -- 卿¤ä¹åï¼åªè¦è¿ææ£è
"éå¡«/被补é»è®¤å¼"ï¼åæ ·çé®é¢ä¼å次åºç°ã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ååéä¸ï¼nhfyï¼ï¼åºé¢é访任å¡ãé¢åº / ç
åºãåå¡«èæ¬ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- æ ¹å ï¼2026-10-29 ææ¥ç¡®è®¤ï¼ï¼ |
| | | -- åºé¢é访任å¡çææ¶ï¼VisitSubtaskFactory#boxedServiceSubtask æ æ¡ä»¶æ§è¡ |
| | | -- `d.setCampusid(inhosp.getCampusid())`ï¼å½ pat_med_inhosp.campusid 为空æ¶ï¼ |
| | | -- 伿ä»é¿æä»»å¡æ¬æ¥çé¢åºè¦çæ NULL â service_subtask.campusid è½ç©ºã |
| | | -- èé访å表æ¥å£ ServiceSubtaskController#patItem å¼ºå¶ setCampusid(ç»å½ç¨æ·é¢åº)ï¼ |
| | | -- SQL æ¡ä»¶ `and campusid = #{campusid}`ï¼NULL ä¸å¹é
ä»»ä½å¼ |
| | | -- â è¿äºä»»å¡"åºéåå¨ã页é¢ä¸æ°¸è¿æ¥ä¸å°"ï¼å°±æ¯"åºé¢ 475 æ¡ãéè®¿åªæ 444 æ¡"çç´æ¥åå ï¼ã |
| | | -- 代ç å·²å¨ VisitSubtaskFactory ä¸ä¿®å¤ï¼åºé¢è®°å½æé¢åºæè¦çï¼ï¼æ¬èæ¬åªä¿®å岿°æ®ã |
| | | -- |
| | | -- æ¬æ¬¡å®æµï¼2026-10-29ï¼smartor_nhfyï¼ï¼ |
| | | -- · service_type='2' ä¸ campusid 为空ï¼**314 æ¡** |
| | | -- ââ å
¨é¨æ¯ã忬¡é访 / æå·¥æ°å¢ã产ççè¡ï¼is_visit_again=1ãinhospid 为空ãupid 为空ï¼ï¼ |
| | | -- 313 æ¡ create_by=æ¹æ
§ç²ãtaskid=108ãæ¶åä¸åºé访ãã2026-06 çæï¼ |
| | | -- 1 æ¡ taskid=177ã任塿µè¯0624ãã |
| | | -- **è¿æ¹æ æ³ä»åºé¢è®°å½åå¡«**ï¼inhospid æ¯ç©ºçï¼ä¹æ²¡æç¶ä»»å¡å¯ç»§æ¿ï¼ï¼ |
| | | -- åªè½éå°æ£è
æ¡£æ¡ pat_archive.campusidï¼314 æ¡å
¨é½æå¼ï¼ã |
| | | -- · service_type='2' ä¸ leaveldeptcode 为空ï¼**303 æ¡** |
| | | -- ââ å
¶ä¸ 294 æ¡å°±æ¯ä¸é¢é£æ¹ï¼inhospid 空ï¼ï¼å¦ 9 æ¡æ inhospidãå¯ä»åºé¢è®°å½åå¡« |
| | | -- ï¼9 æ¡é½æ¯ã忬¡é访ãï¼taskid=11ï¼create_by=è¶
级管çåï¼2026-10-19~21 çæï¼ã |
| | | -- · service_type='2' ä¸ leavehospitaldistrictcode 为空ï¼**10 æ¡**ï¼åºé¢è®°å½é齿å¼ï¼å¯åå¡«ï¼ |
| | | -- · ç
åº"ä¸ä¸ºç©ºä½ä¸åºé¢è®°å½ä¸ä¸è´"çï¼57 æ¡ï¼å¤ä¸ºè½¬ç§/转ç
åºï¼ï¼**ä¸èªå¨ä¿®**ï¼è§ STEP 0-D |
| | | -- · 骨ç§ä¸å¿ä¸ç
åºï¼40011020ï¼2026-07 é£ 25 æ¡ï¼æ«æé¾è·¯ campusid è½ç©ºï¼å·²å
æå·¥åå¡«ï¼ |
| | | -- 页é¢å¯è§æ° 443 â 468ï¼ç°å¨ 468 = 468 å·²å®å
¨å¯¹é½ï¼å¯ç´æ¥ç¨ STEP 4-B 夿 ¸ï¼ |
| | | -- |
| | | -- â ï¸ å£å¾æéï¼å䏿¹åºé¢è®°å½ï¼ãæç¦»é¢ç
åºãæ¯ 475 æ¡ããæç¦»é¢ç§å®¤ãæ¯ 469 æ¡ |
| | | -- ï¼å·® 6ï¼475 éæ 7 æ¡ç
åºå¨éª¨ç§ä¸å¿ä¸ä½ç§å®¤å±äºå«çç§å®¤ï¼å¦æ 1 æ¡ç§å®¤å¨éª¨ç§ä¸å¿ä¸ä½ç
åºæ¯ç¼çç§ç
åºï¼ã |
| | | -- 对åºç任塿°æ¯ 468ï¼ç
åºï¼/ 465ï¼ç§å®¤ï¼ã**å
确认页é¢ç¨çæ¯åªä¸ªå£å¾å对æ°**ï¼ |
| | | -- å¦åä¼å空å¤åºä¸ç¬å·®é¢ã |
| | | -- |
| | | -- æ§è¡é¡ºåºï¼STEP 0 颿£ â STEP 1 å¤ä»½ â STEP 2 åå¡«é¢åº â STEP 3 åå¡«ç
åº |
| | | -- â STEP 4 æ ¡éª â ï¼å¦éæ¤éï¼STEP 5 åæ» |
| | | -- 建议ï¼ä¸å¡ä½å³°ææ§è¡ï¼æ¯æ¡ UPDATE é½å¸¦ LIMIT åæ¹çè¯ï¼é夿§è¡å°å½±å 0 è¡ä¸ºæ¢ï¼å¹çï¼ã |
| | | -- ============================================================================ |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 0ï¼é¢æ£ï¼åªè¯»ï¼å夿§è¡å®å
¨ï¼å
çæ¸
å½±åé¢åå¨ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '0-A å¾
ä¿®æ°æ®é' AS step, |
| | | (SELECT COUNT(*) FROM service_subtask |
| | | WHERE del_flag = 0 AND service_type = '2' AND (campusid IS NULL OR campusid = '')) AS å¾
è¡¥é¢åº, |
| | | (SELECT COUNT(*) FROM service_subtask |
| | | WHERE del_flag = 0 AND service_type = '2' |
| | | AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '')) AS å¾
è¡¥ç
åº; |
| | | |
| | | SELECT '0-B é¢åºæ¥æºæ¯å¦å¤ç¨' AS step, |
| | | COUNT(*) AS å¾
è¡¥æ¡æ°, |
| | | SUM(CASE WHEN i.campusid IS NOT NULL AND i.campusid <> '' THEN 1 ELSE 0 END) AS åºé¢è®°å½æé¢åº, |
| | | SUM(CASE WHEN a.campusid IS NOT NULL AND a.campusid <> '' THEN 1 ELSE 0 END) AS æ£è
æ¡£æ¡æé¢åº, |
| | | SUM(CASE WHEN (i.campusid IS NULL OR i.campusid = '') |
| | | AND (a.campusid IS NULL OR a.campusid = '') THEN 1 ELSE 0 END) AS 两å¤é½æ²¡æ_é人工 |
| | | FROM service_subtask s |
| | | LEFT JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | LEFT JOIN pat_archive a ON a.id = s.patid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' AND (s.campusid IS NULL OR s.campusid = ''); |
| | | |
| | | SELECT '0-C å¾
è¡¥é¢åºæç
åºåå¸' AS step, leavehospitaldistrictcode, leavehospitaldistrictname, COUNT(*) AS æ¡æ° |
| | | FROM service_subtask |
| | | WHERE del_flag = 0 AND service_type = '2' AND (campusid IS NULL OR campusid = '') |
| | | GROUP BY leavehospitaldistrictcode, leavehospitaldistrictname |
| | | ORDER BY æ¡æ° DESC; |
| | | |
| | | -- ç
åº"ä¸ä¸ºç©ºä½ä¸åºé¢è®°å½ä¸ä¸è´"çï¼**ä¸å¨æ¬èæ¬èªå¨ä¿®**ï¼å¯è½æ¯è½¬ç§/转ç
åºçæ£å¸¸ä¸å¡ï¼ï¼ |
| | | -- åªååºæ¥äººå·¥ç¡®è®¤ï¼â ï¸ è¿æ¡è¾æ
¢ï¼å®æµçº¦ 70sï¼æ¾å°æåè·æç´æ¥è·³è¿ï¼ï¼ |
| | | SELECT '0-D ç
åºä¸ä¸è´_人工确认' AS step, s.id AS åä»»å¡ID, s.inhospid, s.sendname AS å§å, |
| | | DATE_FORMAT(s.endtime, '%Y-%m-%d') AS åºé¢æ¥æ, |
| | | s.leavehospitaldistrictcode AS ä»»å¡ç
åº, i.leavehospitaldistrictcode AS è®°å½ç
åº, |
| | | i.leavehospitaldistrictname AS è®°å½ç
åºå |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND s.leavehospitaldistrictcode IS NOT NULL AND s.leavehospitaldistrictcode <> '' |
| | | AND i.leavehospitaldistrictcode IS NOT NULL AND i.leavehospitaldistrictcode <> '' |
| | | AND s.leavehospitaldistrictcode <> i.leavehospitaldistrictcode |
| | | LIMIT 200; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 1ï¼å¤ä»½ï¼åªå¤ä»½"å°è¢«ä¿®æ¹"çè¡ï¼å»ºè¡¨åè¯·ç¡®è®¤è¡æ°ä¸ STEP 0-A ä¸è´ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | CREATE TABLE IF NOT EXISTS bak_service_subtask_campusward_20261029 AS |
| | | SELECT s.id, |
| | | s.campusid, |
| | | s.leavehospitaldistrictcode, |
| | | s.leavehospitaldistrictname, |
| | | s.update_time AS old_update_time |
| | | FROM service_subtask s |
| | | WHERE s.del_flag = 0 |
| | | AND s.service_type = '2' |
| | | AND (s.campusid IS NULL OR s.campusid = '' |
| | | OR s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = ''); |
| | | |
| | | SELECT '1 å¤ä»½è¡æ°' AS step, COUNT(*) AS backup_rows |
| | | FROM bak_service_subtask_campusward_20261029; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 2ï¼åå¡«é¢åºï¼å
ååºé¢è®°å½ï¼åä¸å°é忣è
æ¡£æ¡ï¼ä¸¤ä¸ªæ¥æºé½æ²¡æçççä¸å¨ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | UPDATE service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | SET s.campusid = i.campusid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.campusid IS NULL OR s.campusid = '') |
| | | AND i.campusid IS NOT NULL AND i.campusid <> ''; |
| | | |
| | | UPDATE service_subtask s |
| | | JOIN pat_archive a ON a.id = s.patid |
| | | SET s.campusid = a.campusid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.campusid IS NULL OR s.campusid = '') |
| | | AND a.campusid IS NOT NULL AND a.campusid <> ''; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 3ï¼åå¡«ç
åº / ç§å®¤ï¼**åªè¡¥ç©ºç**ï¼ä¸å¨å·²æå¼ï¼ |
| | | -- · inhospid 为空ç飿¹ï¼314 æ¡ã忬¡é访ãï¼å¨è¿éè¡¥ä¸å°ï¼åªè½é STEP 2 çæ¡£æ¡å
åºè¡¥é¢åº |
| | | -- --------------------------------------------------------------------------- |
| | | UPDATE service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | SET s.leavehospitaldistrictcode = i.leavehospitaldistrictcode, |
| | | s.leavehospitaldistrictname = i.leavehospitaldistrictname |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '') |
| | | AND i.leavehospitaldistrictcode IS NOT NULL AND i.leavehospitaldistrictcode <> ''; |
| | | |
| | | UPDATE service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | SET s.leaveldeptcode = i.leaveldeptcode, |
| | | s.leaveldeptname = i.leaveldeptname |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.leaveldeptcode IS NULL OR s.leaveldeptcode = '') |
| | | AND i.leaveldeptcode IS NOT NULL AND i.leaveldeptcode <> ''; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 4ï¼æ ¡éªï¼ææï¼å©ä½ 0 / 0ï¼ä¸é¡µé¢å¯è§æ°ä¸åºé¢è®°å½æ°å¯¹é½ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '4-A å©ä½æªä¿®' AS step, |
| | | (SELECT COUNT(*) FROM service_subtask |
| | | WHERE del_flag = 0 AND service_type = '2' AND (campusid IS NULL OR campusid = '')) AS ä»ç©ºé¢åº, |
| | | (SELECT COUNT(*) FROM service_subtask |
| | | WHERE del_flag = 0 AND service_type = '2' |
| | | AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '')) AS ä»ç©ºç
åº; |
| | | |
| | | -- ç¨éª¨ç§ä¸å¿ä¸ç
åºä¸¾ä¾æ ¸å¯¹ï¼ä»»å¡æ»æ°åº = 页é¢å¯è§æ°ï¼è¯´æä¸åæ"æ¥ä¸å°"çï¼ |
| | | SELECT '4-B 骨ç§ä¸å¿ä¸ç
åºæ ¸å¯¹' AS step, |
| | | COUNT(*) AS 任塿»æ°, |
| | | SUM(CASE WHEN s.campusid = '30001002' AND s.leavehospitaldistrictcode = '40011020' |
| | | THEN 1 ELSE 0 END) AS 页é¢å¯è§ |
| | | FROM service_subtask s |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND s.leavehospitaldistrictcode = '40011020' |
| | | AND s.endtime >= '2026-07-01 00:00:00' AND s.endtime < '2026-10-01 00:00:00'; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 5ï¼åæ»ï¼ä»
æ¤éæ¬æ¬¡æ¹å¨ï¼åªåæ»å¼ç¡®å®è¢«æ¹è¿çè¡ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask s |
| | | -- JOIN bak_service_subtask_campusward_20261029 b ON b.id = s.id |
| | | -- SET s.campusid = b.campusid, |
| | | -- s.leavehospitaldistrictcode = b.leavehospitaldistrictcode, |
| | | -- s.leavehospitaldistrictname = b.leavehospitaldistrictname; |
| | | -- |
| | | -- åæ»å建议åè·ä¸é STEP 4-A 确认åå°ä¿®å¤åç¶æï¼é¢åº 314 / ç
åº 10ï¼ã |
| | | -- ç¡®è®¤æ°æ®ç¨³å®ãæ éåæ»åï¼åèèå é¤å¤ä»½è¡¨ï¼ |
| | | -- DROP TABLE bak_service_subtask_campusward_20261029; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ååéä¸ï¼nhfyï¼ï¼æãåºé¢é访任å¡çç
åºãç»ä¸ä¸ºãåºé¢è®°å½çç
åºã |
| | | -- ---------------------------------------------------------------------------- |
| | | -- å£å¾ï¼2026-10-29 ä¸å¡ç¡®è®¤ï¼ï¼åºé¢è®°å½ pat_med_inhosp.leavehospitaldistrictcode/name æ¯å¯ä¸æå¨ï¼ |
| | | -- éè®¿ä»»å¡ service_subtask ä¸å¾åå®å¯¹é½ ââ ä¸åææ£è
æ¡£æ¡åæ¨ãä¹ä¸ç¨åç«¯ä¼ å
¥çå¼ã |
| | | -- |
| | | -- 为ä»ä¹ä¹åä¼ä¸ä¸è´ï¼ |
| | | -- â æ«æçæï¼åºé¢é访主é¾è·¯ï¼æ¬æ¥å°±æ¯ååºé¢è®°å½çç
åºï¼æ²¡é®é¢ï¼ |
| | | -- â¡ ã忬¡é访 / æå·¥æ°å¢ãï¼/serviceSubtask/addSubTaskã/addSubTaskAgainï¼æ¯ç´æ¥æå端 |
| | | -- ä¼ æ¥çåæ®µè½åºçï¼å端ä¸å¸¦å°±æ¯ç©º â è¿äºä»»å¡å¨æç
åºè¿æ»¤çé访åè¡¨éæ¥ä¸å°ï¼ |
| | | -- ⢠åºé¢å HIS åè½æ´æ£ç
åºï¼è½¬ç§/转ç
åºï¼ï¼å·²çæçä»»å¡ä¸ä¼è·çå â åºç°"两边ä¸ä¸æ ·"ã |
| | | -- 代ç ä¾§å·²å¨ ServiceSubtaskServiceImpl å alignDischargeWardFromInhosp() å
ä½ â¡ï¼ |
| | | -- æ¬èæ¬ä¿®å岿°æ®ï¼â 以å¤ç â¡â¢ 两类ï¼ã |
| | | -- |
| | | -- æ¬æ¬¡å®æµï¼2026-10-29ï¼smartor_nhfyï¼del_flag=0 + service_type='2'ï¼ï¼ |
| | | -- · éè¦ç»ä¸çï¼**67 æ¡** |
| | | -- - 忥ç
åºä¸ºç©ºç 10 æ¡ |
| | | -- - 忥ç
åºä¸åºé¢è®°å½ä¸ä¸è´ç 57 æ¡ |
| | | -- · æ æ³ç»ä¸çï¼0 æ¡ï¼è¿ 67 æ¡é½è½å®ä½å°åºé¢è®°å½ï¼ä¸åºé¢è®°å½çç
åºé½éç©ºï¼ |
| | | -- · å¦ä¸æ¹ 314 æ¡ã忬¡é访ãè¡æ¯**é¢åº**ï¼campusidï¼ä¸ºç©ºãç
åºæ¬èº«æå¼ãinhospid ä¸ºç©ºï¼ |
| | | -- 䏿¬èæ¬æ å
³ï¼ç± fix_nhfy_åºé¢é访任å¡é¢åºç
åºåå¡«_20261029.sql å¤ç |
| | | -- · 顺带åç°ï¼ç§å®¤ï¼leaveldeptcodeï¼ä¸åºé¢è®°å½ä¸ä¸è´æä¸ºç©ºçè¿æ 12 æ¡ï¼ |
| | | -- æ¬èæ¬é»è®¤**ä¸å¨**ï¼è§ STEP 2Bï¼ç¡®è®¤åå¯ä¸èµ·ç»ä¸ï¼ |
| | | -- |
| | | -- æ§è¡è®°å½ï¼ |
| | | -- **2026-10-29 å·²æ§è¡** STEP 1 + STEP 2ï¼å¤ä»½ 67 è¡ï¼bak_service_subtask_ward_20261029ï¼ï¼ |
| | | -- UPDATE å½±å 67 è¡ï¼STEP 3-A ãå©ä½ä¸ä¸è´çç
åºã= 0ï¼ |
| | | -- 骨ç§ä¸å¿ä¸ å£å¾å¯¹ç
§ç± 475 / 468 å为 **475 / 475**ï¼åºé¢è®°å½æç
åº = éè®¿ä»»å¡æç
åºï¼ã |
| | | -- STEP 2Bï¼ç§å®¤ï¼**æªæ§è¡**ï¼çä½ ç¡®è®¤ã |
| | | -- |
| | | -- æ§è¡é¡ºåºï¼STEP 0 颿£ â STEP 1 å¤ä»½ â STEP 2 ç»ä¸ç
åº â STEP 3 æ ¡éª âï¼å¦éï¼STEP 4 åæ» |
| | | -- 注æï¼é¢æ£çä¸¤æ¡ SQL éè¦æé访任å¡ååºé¢è®°å½å
¨éæ¯å¯¹ï¼å®æµå约 1 åéï¼å±æ£å¸¸ã |
| | | -- ============================================================================ |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 0ï¼é¢æ£ï¼åªè¯»ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | SELECT '0-A å¾
ç»ä¸ç
åºçæ»é' AS step, COUNT(*) AS å¾
æ¹æ¡æ°, |
| | | SUM(CASE WHEN s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '' |
| | | THEN 1 ELSE 0 END) AS åç
åºä¸ºç©º, |
| | | SUM(CASE WHEN s.leavehospitaldistrictcode IS NOT NULL AND s.leavehospitaldistrictcode <> '' |
| | | THEN 1 ELSE 0 END) AS åç
åºä¸ä¸è´ |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '' |
| | | OR s.leavehospitaldistrictcode <> i.leavehospitaldistrictcode); |
| | | |
| | | SELECT '0-B æ¹å¨æ å°ï¼ä» â å°ï¼' AS step, |
| | | IFNULL(s.leavehospitaldistrictcode, '(空)') AS åç
åºç , |
| | | IFNULL(s.leavehospitaldistrictname, '(空)') AS åç
åºå, |
| | | i.leavehospitaldistrictcode AS ç»ä¸ä¸º, |
| | | i.leavehospitaldistrictname AS ç»ä¸ä¸ºç
åºå, |
| | | COUNT(*) AS æ¡æ° |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '' |
| | | OR s.leavehospitaldistrictcode <> i.leavehospitaldistrictcode) |
| | | GROUP BY s.leavehospitaldistrictcode, s.leavehospitaldistrictname, |
| | | i.leavehospitaldistrictcode, i.leavehospitaldistrictname |
| | | ORDER BY æ¡æ° DESC; |
| | | |
| | | -- å¾
ç»ä¸ç 67 æ¡éï¼åºé¢è®°å½èªå·±çç
åºä¹æ¯ç©ºçï¼è¿ç±»æ æ³ç»ä¸ï¼ææ 0ï¼ |
| | | SELECT '0-C å¾
ç»ä¸è¡éåºé¢è®°å½ç
åºä¸ºç©º' AS step, COUNT(*) AS æ æ³ç»ä¸ |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '' |
| | | OR s.leavehospitaldistrictcode <> IFNULL(i.leavehospitaldistrictcode, '')) |
| | | AND (i.leavehospitaldistrictcode IS NULL OR i.leavehospitaldistrictcode = ''); |
| | | |
| | | -- ä¸å¨æ¬èæ¬èå´ï¼æ²¡æåºé¢è®°å½IDï¼inhospid 为空ï¼ä¸ç
åºä¸ºç©ºçè¡ï¼ |
| | | -- æ æ³æåºé¢è®°å½ç»ä¸ï¼è§ fix_nhfy_åºé¢é访任å¡é¢åºç
åºåå¡«_20261029.sql |
| | | SELECT '0-D ä¸å¨æ¬æ¬¡èå´' AS step, COUNT(*) AS æ åºé¢è®°å½IDä¸ç
åºä¸ºç©º |
| | | FROM service_subtask s |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.inhospid IS NULL OR s.inhospid = 0) |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = ''); |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 1ï¼å¤ä»½ï¼åªå¤ä»½å°è¢«ä¿®æ¹çè¡ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | CREATE TABLE IF NOT EXISTS bak_service_subtask_ward_20261029 AS |
| | | SELECT s.id, |
| | | s.leavehospitaldistrictcode, |
| | | s.leavehospitaldistrictname, |
| | | s.leaveldeptcode, |
| | | s.leaveldeptname, |
| | | s.update_time AS old_update_time |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '' |
| | | OR s.leavehospitaldistrictcode <> i.leavehospitaldistrictcode); |
| | | |
| | | SELECT '1 å¤ä»½è¡æ°ï¼ææ 67ï¼' AS step, COUNT(*) AS backup_rows |
| | | FROM bak_service_subtask_ward_20261029; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 2ï¼ç»ä¸ç
åºï¼ç + åç§°ï¼ä¸å¾ä»¥åºé¢è®°å½ä¸ºåï¼ |
| | | -- åªå½±å service_type='2'ï¼åºé¢é访ï¼ï¼ç§å®¤è§ STEP 2Bï¼é»è®¤æ³¨éï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | UPDATE service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | SET s.leavehospitaldistrictcode = i.leavehospitaldistrictcode, |
| | | s.leavehospitaldistrictname = i.leavehospitaldistrictname |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND i.leavehospitaldistrictcode IS NOT NULL AND i.leavehospitaldistrictcode <> '' |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '' |
| | | OR s.leavehospitaldistrictcode <> i.leavehospitaldistrictcode); |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 2Bï¼å¯éï¼**é»è®¤æ³¨é**ï¼ï¼ç§å®¤ä¸èµ·æåºé¢è®°å½ç»ä¸ï¼å¦æ 12 æ¡ï¼ |
| | | -- 宿µï¼2026-10-29ï¼ï¼12 æ¡é 10 æ¡å·²å¨ bak_service_subtask_ward_20261029 éï¼ |
| | | -- å¦ 2 æ¡ï¼åä»»å¡ 33755 饶è²ã34120 é·æ¥æ¢
ï¼éå
ç¨ 2B-1 åç¬å¤ä»½ã |
| | | -- 确认"ç§å®¤ä¹ä»¥åºé¢è®°å½ä¸ºå"ä¹ååæå¼æ§è¡ã |
| | | -- --------------------------------------------------------------------------- |
| | | -- 2B-1 å¤ä»½ç§å®¤å¾
æ¹è¡ |
| | | -- CREATE TABLE IF NOT EXISTS bak_service_subtask_dept_20261029 AS |
| | | -- SELECT s.id, s.leaveldeptcode, s.leaveldeptname, s.update_time AS old_update_time |
| | | -- FROM service_subtask s |
| | | -- JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | -- WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | -- AND i.leaveldeptcode IS NOT NULL AND i.leaveldeptcode <> '' |
| | | -- AND (s.leaveldeptcode IS NULL OR s.leaveldeptcode = '' OR s.leaveldeptcode <> i.leaveldeptcode); |
| | | -- |
| | | -- 2B-2 æ´æ°ç§å®¤ |
| | | -- UPDATE service_subtask s |
| | | -- JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | -- SET s.leaveldeptcode = i.leaveldeptcode, |
| | | -- s.leaveldeptname = i.leaveldeptname |
| | | -- WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | -- AND i.leaveldeptcode IS NOT NULL AND i.leaveldeptcode <> '' |
| | | -- AND (s.leaveldeptcode IS NULL OR s.leaveldeptcode = '' |
| | | -- OR s.leaveldeptcode <> i.leaveldeptcode); |
| | | -- |
| | | -- 2B-3 åæ»ç§å®¤ï¼å¦éï¼ |
| | | -- UPDATE service_subtask s |
| | | -- JOIN bak_service_subtask_dept_20261029 b ON b.id = s.id |
| | | -- SET s.leaveldeptcode = b.leaveldeptcode, |
| | | -- s.leaveldeptname = b.leaveldeptname; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 3ï¼æ ¡éª |
| | | -- --------------------------------------------------------------------------- |
| | | -- 3-A åºä¸º 0 |
| | | SELECT '3-A å©ä½ä¸ä¸è´çç
åº' AS step, COUNT(*) AS ä»ä¸ä¸è´ |
| | | FROM service_subtask s |
| | | JOIN pat_med_inhosp i ON i.inhospid = s.inhospid |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND i.leavehospitaldistrictcode IS NOT NULL AND i.leavehospitaldistrictcode <> '' |
| | | AND (s.leavehospitaldistrictcode IS NULL OR s.leavehospitaldistrictcode = '' |
| | | OR s.leavehospitaldistrictcode <> i.leavehospitaldistrictcode); |
| | | |
| | | -- 3-B 骨ç§ä¸å¿ä¸ç
åº/ç§å®¤ 两个å£å¾å¯¹æ°ï¼ç»ä¸åç
åºä»»å¡æ°åºçäºæ¬ç
åºåºé¢è®°å½æ°ï¼ |
| | | SELECT '3-B 骨ç§ä¸å¿ä¸ å£å¾å¯¹ç
§' AS step, |
| | | (SELECT COUNT(*) FROM ( |
| | | SELECT b.inhospid FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag='0' AND b.del_flag='0' AND a.idcardno IS NOT NULL AND b.inhospstate='1' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01' AND b.endtime < '2026-10-01' |
| | | GROUP BY b.inhospid) x) AS åºé¢è®°å½_æç
åº, |
| | | (SELECT COUNT(*) FROM service_subtask s WHERE s.del_flag=0 AND s.service_type='2' |
| | | AND s.leavehospitaldistrictcode = '40011020' |
| | | AND s.endtime >= '2026-07-01' AND s.endtime < '2026-10-01') AS é访任å¡_æç
åº, |
| | | (SELECT COUNT(*) FROM ( |
| | | SELECT b.inhospid FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag='0' AND b.del_flag='0' AND a.idcardno IS NOT NULL AND b.inhospstate='1' |
| | | AND b.leaveldeptcode = '40011021' |
| | | AND b.endtime >= '2026-07-01' AND b.endtime < '2026-10-01' |
| | | GROUP BY b.inhospid) x) AS åºé¢è®°å½_æç§å®¤, |
| | | (SELECT COUNT(*) FROM service_subtask s WHERE s.del_flag=0 AND s.service_type='2' |
| | | AND s.leaveldeptcode = '40011021' |
| | | AND s.endtime >= '2026-07-01' AND s.endtime < '2026-10-01') AS é访任å¡_æç§å®¤; |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- STEP 4ï¼åæ»ï¼ä»
æ¤éæ¬æ¬¡æ¹å¨ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask s |
| | | -- JOIN bak_service_subtask_ward_20261029 b ON b.id = s.id |
| | | -- SET s.leavehospitaldistrictcode = b.leavehospitaldistrictcode, |
| | | -- s.leavehospitaldistrictname = b.leavehospitaldistrictname; |
| | | -- |
| | | -- åæ»åè· STEP 0-Aï¼åºåå° 67 æ¡å¾
æ¹ã |
| | | -- 确认æ éåæ»ååå å¤ä»½è¡¨ï¼DROP TABLE bak_service_subtask_ward_20261029; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================= |
| | | -- çç«åå¾·ï¼æ»¡æåº¦åä»»å¡ 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 为空ï¼ï¼æ¢ä¸ç®é项ä¹ä¸è¿åæ¯ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- çç«åå¾·ï¼æ»¡æåº¦åä»»å¡ 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 ä¹ä¸èµ·æ²»çã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- (sub_id, scriptid) å»é + å¯ä¸ç´¢å¼ ââ æ ¹æ²»"å䏿£è
åä¸é¢å åºå¤ä»½é夿ç»" |
| | | -- ååéä¸ï¼nhfyï¼2026-10-21 |
| | | -- |
| | | -- ã为ä»ä¹è¦åã |
| | | -- ä¿åçæ¡/è¡¥é»è®¤å¼ç upsert èµ° isExistServiceSubtaskDetailï¼åå²ä¸åªç del_flag=0ï¼ |
| | | -- æç»ä¸æ¦è¢«é»è¾å é¤å°±æ¥ä¸å° â ä¸ä¸æ¬¡ä¿åå¿
ç¶ INSERTï¼å¯æ¬è¶ç§¯è¶å¤ |
| | | -- ï¼2026-09-08 é£ 10 使£è
åå äº 2~6 份ï¼çæ¡å®å
¨ç¸åï¼ã |
| | | -- 代ç ä¾§å·²æ¹ä¸ºã忽ç¥å 餿 è®°åææ°ä¸è¡ + æ´æ°å reviveServiceSubtaskDetail 夿´»ãï¼ |
| | | -- æ¬èæ¬å仿°æ®åºå±å ä¸éå¯ä¸çº¦æå
åºã |
| | | -- |
| | | -- ãç°ç¶ï¼2026-10-21 宿µ smartor_nhfyï¼ã |
| | | -- æç»æ»æ° 346,628ï¼sub_id / scriptid åæ NULL |
| | | -- éå¤ç»ï¼å sub_id+scriptid å¤äº 1 è¡ï¼ï¼5,389 ç»ï¼æ¶å 12,680 è¡ |
| | | -- è¥"æ¯ç»åªç 1 è¡"ï¼éè¦ç©çå é¤ 7,291 è¡ï¼ç»å¤§å¤æ°æ¯ del_flag=1 çåå²å¯æ¬ï¼ |
| | | -- |
| | | -- ãæ§è¡é¡ºåºã建议ä½å³°æï¼æ 0 â 4 é¡ºåºæ§è¡ï¼ç¬¬ 3 æ¥æ¯ç©çå é¤ï¼å¡å¿
å
è·ç¬¬ 2 æ¥å¤ä»½ |
| | | -- ãåæ»ã第 5 æ¥ï¼å æçè¡èµ° bak_ssd_dup_20261021 è¿å |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0ãè¯ä¼°ï¼åªè¯»ï¼éæ¶å¯è·ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT COUNT(*) AS dup_groups, |
| | | SUM(rows_cnt) AS rows_in_dup_groups, |
| | | SUM(rows_cnt - 1) AS rows_to_delete_if_keep_one |
| | | FROM (SELECT sub_id, scriptid, COUNT(*) AS rows_cnt |
| | | FROM service_subtask_detail |
| | | WHERE sub_id IS NOT NULL AND scriptid IS NOT NULL |
| | | GROUP BY sub_id, scriptid |
| | | HAVING COUNT(*) > 1) x; |
| | | |
| | | -- é夿å¤ç 10 ç»ï¼ççæ¯ä¸æ¯é½é¿ä¸ä¸ªæ · |
| | | SELECT sub_id, scriptid, COUNT(*) AS rows_cnt, |
| | | SUM(del_flag = 0) AS live_cnt, |
| | | COUNT(DISTINCT COALESCE(asrtext, '')) AS distinct_answers |
| | | FROM service_subtask_detail |
| | | GROUP BY sub_id, scriptid |
| | | HAVING COUNT(*) > 1 |
| | | ORDER BY rows_cnt DESC |
| | | LIMIT 10; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãå¤ä»½"å°è¢«å é¤"çè¡ï¼çº¦ 7,291 è¡ï¼ |
| | | -- ä¿çè§åï¼åä¸ (sub_id, scriptid) ä¿ç 1 è¡ ââ ä¼å
del_flag=0ï¼å
¶æ¬¡ id æå¤§ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- DROP TABLE IF EXISTS bak_ssd_dup_20261021; |
| | | -- CREATE TABLE bak_ssd_dup_20261021 AS |
| | | -- SELECT d.* |
| | | -- FROM service_subtask_detail d |
| | | -- JOIN (SELECT sub_id, scriptid, |
| | | -- SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY (del_flag = 0) DESC, id DESC), ',', 1) AS keep_id |
| | | -- FROM service_subtask_detail |
| | | -- WHERE sub_id IS NOT NULL AND scriptid IS NOT NULL |
| | | -- GROUP BY sub_id, scriptid |
| | | -- HAVING COUNT(*) > 1) k |
| | | -- ON k.sub_id = d.sub_id AND k.scriptid = d.scriptid |
| | | -- WHERE d.id <> k.keep_id; |
| | | -- SELECT COUNT(*) FROM bak_ssd_dup_20261021; -- 颿 â 7291 |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãå¤ä»½èªæ£ï¼ç¡®è®¤å¤ä»½è¡¨é没æ"æ¯ç»é½åºè¯¥ä¿ççé£ä¸è¡"ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SELECT COUNT(*) AS wrong_rows |
| | | -- FROM bak_ssd_dup_20261021 b |
| | | -- JOIN (SELECT sub_id, scriptid, |
| | | -- SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY (del_flag = 0) DESC, id DESC), ',', 1) AS keep_id |
| | | -- FROM service_subtask_detail |
| | | -- GROUP BY sub_id, scriptid) k |
| | | -- ON k.sub_id = b.sub_id AND k.scriptid = b.scriptid |
| | | -- WHERE b.id = k.keep_id; -- 颿 0 |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã3ãç©çå é¤éå¤è¡ï¼æ¯ç»ä¿ç 1 è¡ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- DELETE d |
| | | -- FROM service_subtask_detail d |
| | | -- JOIN (SELECT sub_id, scriptid, |
| | | -- SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY (del_flag = 0) DESC, id DESC), ',', 1) AS keep_id |
| | | -- FROM service_subtask_detail |
| | | -- WHERE sub_id IS NOT NULL AND scriptid IS NOT NULL |
| | | -- GROUP BY sub_id, scriptid |
| | | -- HAVING COUNT(*) > 1) k |
| | | -- ON k.sub_id = d.sub_id AND k.scriptid = d.scriptid |
| | | -- WHERE d.id <> k.keep_id; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã4ãå å¯ä¸ç´¢å¼ |
| | | -- â ï¸ åæï¼ç¬¬ 3 æ¥å·²è·è¿ï¼å¦åå¿
ç¶ ORA/1062 å¤±è´¥ï¼ |
| | | -- â ï¸ 346k è¡ç ADD UNIQUE ä¼çæ¶é表ï¼å»ºè®®ä½å³°æ§è¡ï¼ |
| | | -- 妿çäº§çæ¬ MySQL æ¯æ online DDLï¼å¯ç¨ ALGORITHM=INPLACE, LOCK=NONE |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE service_subtask_detail |
| | | -- ADD UNIQUE KEY uk_ssd_sub_script (sub_id, scriptid), |
| | | -- ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- æ ¡éª |
| | | -- SHOW INDEX FROM service_subtask_detail WHERE Key_name = 'uk_ssd_sub_script'; |
| | | -- SELECT COUNT(*) AS dup_groups_should_be_0 FROM ( |
| | | -- SELECT sub_id, scriptid FROM service_subtask_detail |
| | | -- GROUP BY sub_id, scriptid HAVING COUNT(*) > 1) x; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã5ãåæ» |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE service_subtask_detail DROP INDEX uk_ssd_sub_script; |
| | | -- INSERT INTO service_subtask_detail SELECT * FROM bak_ssd_dup_20261021; |
| | | -- DROP TABLE bak_ssd_dup_20261021; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ãå ç´¢å¼ä¹åå¿
须注æã |
| | | -- å¯ä¸ç´¢å¼çæåï¼å¹¶åä¿ååä¸ (sub_id, scriptid) æ¶"åå°çé£ä¸æ¡ INSERT"伿 |
| | | -- DuplicateKeyExceptionã代ç ä¾§å·²ç»åäºä¸¤ä»¶äºéä½é£é©ï¼ |
| | | -- â isExistServiceSubtaskDetail æ¹ä¸º"å¿½ç¥ del_flag åææ°ä¸è¡"â æ£å¸¸ä¿åèµ° UPDATEï¼ä¸ä¼ INSERTï¼ |
| | | -- â¡ /smartor/subtaskAnswer/saveQuestionAnswer å äº Redis å¹çå ä½ï¼60 ç§ï¼åä¸ pid+tid+subid åªå¤ç䏿¬¡ï¼ã |
| | | -- ä½å¦æå°æ¥è¿æå«çåå
¥è·¯å¾ç´æ¥ INSERT æç»ï¼å»ºè®®å¨æå
¥å¤ catch DuplicateKeyException å转 UPDATEã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- smartor_sltd æ°æ®åºï¼è¯é³é®é¢ç¸å
³è¡¨çååå¯¹é½ / æ°å¢åèæ¬ |
| | | -- çææ¥æ: 20260928 |
| | | -- ç®æ åº : smartor_sltdï¼ruoyi-admin/src/main/resources/application-druid.ymlï¼profile=druidï¼ |
| | | -- ç®ç : 让 ivr_liba_template_script / ivr_task_template_script çååä¸ |
| | | -- IvrLibaTemplateScriptMapper.xml / IvrTaskTemplateScriptMapper.xml ä¸è´ |
| | | -- ï¼è¿ä¸¤ä¸ª mapper éæ¥çæ¯ script_assortnameãscript_assortidï¼ |
| | | -- |
| | | -- ãæ§è¡å宿µç°ç¶ï¼20260928ï¼smartor_sltdï¼ã |
| | | -- ivr_liba_script_assort : 35 è¡ |
| | | -- index_assort_name varchar(255) NOT NULL 注éâææ åç±»åç§°â |
| | | -- type varchar(255) NULL â 该åãå·²åå¨ãï¼35 è¡å
¨ä¸º NULLï¼æ 注é |
| | | -- ivr_liba_template_script : 121 è¡ï¼del_flag=0 ç 54 è¡ï¼ |
| | | -- categoryName varchar(50) NULL 注éâç±»å«åâï¼121 è¡å
¨ä¸º NULL |
| | | -- 没æ assortid åï¼ä¹æ²¡æ script_assortid å |
| | | -- ivr_task_template_script : 1221 è¡ |
| | | -- categoryName varchar(50) NULL 注éâç±»å«åâï¼ä»
26 è¡é空 |
| | | -- 没æ assortid åï¼ä¹æ²¡æ script_assortid å |
| | | -- |
| | | -- â 第 3 项ï¼assortid â script_assortidï¼å¨è¿ä¸¤ä¸ªè¡¨éé½ä¸æ¯âæ¹åâï¼ |
| | | -- ä¸¤ä¸ªè¡¨æ ¹æ¬æ²¡æ assortid åï¼åªè½âæ°å¢å + åå¡«âã |
| | | -- â åå¡«æ¥æºç¨ç¶æ¨¡æ¿ç assortidï¼ |
| | | -- ivr_liba_template_script.templateid â ivr_liba_template.id.assortid ï¼121/121 è¡å¯åå¡«ï¼ |
| | | -- ivr_task_template_script.templateID â ivr_task_template.id.assortid ï¼358/1221 è¡å¯åå¡«ï¼ |
| | | -- å¦ 825 è¡ templateID å¨ ivr_task_template ä¸ä¸åå¨ã38 è¡ templateID 为 NULLï¼ä¿æ NULLï¼ |
| | | -- â ä¾èµæ£æ¥ï¼æ¬åºæ²¡æå¼ç¨è¿ä¸¤å¼ 表çåå¨è¿ç¨ / è§å¾ / 触åå¨ï¼å·²æ¥ |
| | | -- information_schema.ROUTINES / VIEWS / TRIGGERSï¼å为 0 æ¡ï¼ï¼æ¹ååä¸å½±å DB 侧对象ã |
| | | -- â 代ç ä¾§å½±åï¼IvrLibaTemplateScriptMapperãIvrTaskTemplateScriptMapper æ¬æ¥å°±å¨ç¨ |
| | | -- script_assortname / script_assortidï¼æ¹å®åè¿ä¸¤ä¸ª mapper æçæ£è½æ¥éï¼ |
| | | -- 两个 mapper 齿²¡æå¼ç¨ categoryNameï¼æä»¥æ¹åä¸ä¼å½±åç°æåè½ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0ãæ§è¡åæ£æ¥ï¼ç¡®è®¤ä¸ä¸é¢ç宿µä¸è´ï¼æ£å¸¸åºçå° categoryNameã䏿²¡æ assort åï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SHOW COLUMNS FROM ivr_liba_template_script LIKE '%assort%'; |
| | | -- SHOW COLUMNS FROM ivr_liba_template_script LIKE 'categoryName'; |
| | | -- SHOW COLUMNS FROM ivr_task_template_script LIKE 'categoryName'; |
| | | -- SHOW COLUMNS FROM ivr_liba_script_assort LIKE 'type'; |
| | | -- SELECT COUNT(*) FROM ivr_liba_template_script; -- 121 |
| | | -- SELECT COUNT(*) FROM ivr_task_template_script; -- 1221 |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãcategoryName â script_assortnameï¼ä¸¤å¼ 表ï¼ä¿çåç±»å varchar(50) NULL ååæ³¨éâç±»å«åâï¼ |
| | | -- 121 / 1221 è¡çå°è¡¨ï¼ç§çº§å®æï¼CHANGE COLUMN åªæ¹åå¯èµ° INPLACEï¼ä¸é»å¡è¯»åã |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE ivr_liba_template_script |
| | | CHANGE COLUMN categoryName script_assortname varchar(50) NULL COMMENT 'ç±»å«å', |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | ALTER TABLE ivr_task_template_script |
| | | CHANGE COLUMN categoryName script_assortname varchar(50) NULL COMMENT 'ç±»å«å', |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãivr_liba_script_assort.type |
| | | -- è¯¥åæ¬æ¥å°±æï¼varchar(255)ï¼æ 注éï¼35 è¡å
¨ NULLï¼ï¼è¿éåªæéæ±è¡¥æ³¨éå¹¶æé¿åº¦æ¹æ 100ã |
| | | -- 注æï¼varchar(255) â varchar(100) å±äºç±»åæ¶çªï¼éè¦é建表ï¼ä¸è½ç¨ INPLACE/LOCK=NONEï¼ |
| | | -- æ¬è¡¨åªæ 35 è¡ï¼ç´æ¥æ§è¡å³å¯ï¼è¥ä¸æ³å¨é¿åº¦ï¼åªæ§è¡å¸¦ COMMENT ç MODIFY ä¹ä¸æ ·éè¦éå»ºï¼ |
| | | -- å ä¸ºæ¹æ³¨éæ¬èº«å°±æ¯ COPYï¼ãè¥åªæ³å 注éã䏿¹é¿åº¦ï¼æ varchar(100) æ¢æ varchar(255)ã |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE ivr_liba_script_assort |
| | | MODIFY COLUMN type varchar(100) NULL COMMENT 'é®é¢ç±»åï¼ä¾å¦,é¨è¯æ»¡æåº¦ï¼mzmyd ä½é¢æ»¡æåº¦ï¼zymyd ...ï¼'; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã3ãæ°å¢ script_assortid å + ç¨ç¶æ¨¡æ¿ç assortid åå¡« |
| | | -- 夿³¨é忬åçâivr_liba_script_ssortâåºä¸ºâivr_liba_script_assortâï¼ä¸é¢ææ£ç¡®è¡¨ååã |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE ivr_liba_template_script |
| | | ADD COLUMN script_assortid int(11) NULL COMMENT 'è¯é³é®é¢ç±»å«IDï¼å¯¹åºçæ¯ivr_liba_script_assortï¼', |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | ALTER TABLE ivr_task_template_script |
| | | ADD COLUMN script_assortid int(11) NULL COMMENT 'è¯é³é®é¢ç±»å«IDï¼å¯¹åºçæ¯ivr_liba_script_assortï¼', |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | -- åå¡«ï¼121/121 è¡ |
| | | UPDATE ivr_liba_template_script s |
| | | JOIN ivr_liba_template t ON t.id = s.templateid |
| | | SET s.script_assortid = t.assortid; |
| | | |
| | | -- åå¡«ï¼358/1221 è¡ï¼å
¶ä½ä¸ºå¤å¿æ°æ®ï¼ä¿æ NULLï¼ |
| | | UPDATE ivr_task_template_script s |
| | | JOIN ivr_task_template t ON t.id = s.templateID |
| | | SET s.script_assortid = t.assortid; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã4ãå¯éï¼æ script_assortname ä¹è¡¥ä¸ï¼å½å两表ç categoryName åºæ¬å
¨æ¯ NULLï¼ |
| | | -- æ¹åå script_assortname 仿¯ NULLï¼è satisfactionGraph çè¯é³åæ¯æ¯æ |
| | | -- script_assortname åç»çï¼ä¸è¡¥çè¯è¯é³åç±»ä»ç¶åºä¸æ¥ï¼ |
| | | -- æ°æ®æºï¼ç¶æ¨¡æ¿ assortid â ivr_liba_script_assort.index_assort_name |
| | | -- 确认è¦è¡¥åæ§è¡è¿æ®µï¼ä¸éè¦å°±è·³è¿ã |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE ivr_liba_template_script s |
| | | -- JOIN ivr_liba_template t ON t.id = s.templateid |
| | | -- JOIN ivr_liba_script_assort a ON a.id = t.assortid |
| | | -- SET s.script_assortname = a.index_assort_name |
| | | -- WHERE s.script_assortname IS NULL OR s.script_assortname = ''; |
| | | -- |
| | | -- UPDATE ivr_task_template_script s |
| | | -- JOIN ivr_task_template t ON t.id = s.templateID |
| | | -- JOIN ivr_liba_script_assort a ON a.id = t.assortid |
| | | -- SET s.script_assortname = a.index_assort_name |
| | | -- WHERE s.script_assortname IS NULL OR s.script_assortname = ''; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã5ãå¯éï¼ç» ivr_liba_script_assort.type å¡«å¼ï¼å½å 35 è¡å
¨ NULLï¼ |
| | | -- è代ç é mydIdList æ¯æ type å« "myd" è¿æ»¤çï¼ä¸å¡«å¼è¯é³åæ¯å°±æ°¸è¿æ¯ 0 个åç±»ï¼ |
| | | -- å¡«å¼å£å¾éè¦ä¸å¡ç¡®è®¤ï¼ä¸é¢åªæ¯æç°æåç±»åç»ç示ä¾ï¼ç¡®è®¤ååæ§è¡ï¼ |
| | | -- 满æåº¦ç¸å
³ï¼å¦ id=12 满æåº¦è°æ¥ãid=9 æå¡è¯ä»·ï¼â mzmyd / zymyd |
| | | -- å
¶ä½åç±» â ç空ææä¸å¡èªå®ä¹ |
| | | -- ï¼æ¬åº ivr_liba_script_assort éçåç±»åï¼æªåç±»/æ£è
ä¿¡æ¯/ä½å¾/ç¾ç
/çç¶/çæ´»æ¹å¼/ |
| | | -- ç¨è¯ä¾ä»æ§/ä¸è¯ååº/éç¥æé/æå¡è¯ä»·/æ£æ¥ç±»/æ£éªç±»/满æåº¦è°æ¥/è³é£ç±»/è¿å¨ç±»/ç¡ç ç±»/ |
| | | -- æ½çåé
/身é«/ä½é/è§å/å¬å/æè§å»ºè®®/æ£éªæ£æ¥ç±»/éè®¿ææ /身份确认/å¤è¯éç¥/夿¥éç¥/ |
| | | -- æ¯å¦æ¹ä¾¿/åºé¢å®£æ/ä¿®å
»å°/è¯é³é¢ç®/è¯é³é¢ç®æµè¯ â¦ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE ivr_liba_script_assort SET type = 'zymyd' WHERE id = 12; -- ä¾ï¼æ»¡æåº¦è°æ¥ |
| | | -- UPDATE ivr_liba_script_assort SET type = 'mzmyd' WHERE id = 9; -- ä¾ï¼æå¡è¯ä»· |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã6ãéªè¯ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SHOW COLUMNS FROM ivr_liba_template_script LIKE '%assort%'; |
| | | -- SHOW COLUMNS FROM ivr_task_template_script LIKE '%assort%'; |
| | | -- SHOW COLUMNS FROM ivr_liba_script_assort LIKE 'type'; |
| | | -- SELECT COUNT(*) AS liba_script_rows, SUM(script_assortid IS NULL) AS assortid_null FROM ivr_liba_template_script; -- ææ 121 / 0 |
| | | -- SELECT COUNT(*) AS task_script_rows, SUM(script_assortid IS NULL) AS assortid_null FROM ivr_task_template_script; -- ææ 1221 / 863 |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã7ãåæ» |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE ivr_liba_template_script CHANGE COLUMN script_assortname categoryName varchar(50) NULL COMMENT 'ç±»å«å'; |
| | | -- ALTER TABLE ivr_task_template_script CHANGE COLUMN script_assortname categoryName varchar(50) NULL COMMENT 'ç±»å«å'; |
| | | -- ALTER TABLE ivr_liba_template_script DROP COLUMN script_assortid; |
| | | -- ALTER TABLE ivr_task_template_script DROP COLUMN script_assortid; |
| | | -- ALTER TABLE ivr_liba_script_assort MODIFY COLUMN type varchar(255) NULL COMMENT ''; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- smartor_sltd æ°æ®åºï¼ivr è¯é³é®é¢ä¸¤å¼ è¡¨è¡¥é½ mapper éè¦ç 6 个åï¼ç¬¬äºæ¹ï¼ |
| | | -- çææ¥æ: 20260928 |
| | | -- |
| | | -- ã为ä»ä¹éè¦ã |
| | | -- 20260928 ç¬¬ä¸æ¹å·²æ categoryName â script_assortnameãå¹¶æ°å¢ script_assortidï¼ |
| | | -- ä½ IvrLibaTemplateScriptMapper / IvrTaskTemplateScriptMapper ç select / insert / update |
| | | -- è¯å¥éè¿å¼ç¨äºä¸é¢ 6 个åï¼è ivr_liba_template_scriptãivr_task_template_script 两个表 |
| | | -- 卿¬åºä¸é½ä¸åå¨è¿äºåï¼svy_lib_template_script 鿝æçï¼å®ä¹ç
§æå³å¯ï¼ï¼ |
| | | -- dimension varchar(50) é®é¢ç»´åº¦ |
| | | -- is_myd_exception varchar(50) 满æåº¦æè§å¼å¸¸ï¼åªéå¯¹ææ¬ï¼ |
| | | -- duty_dept_name text 责任ç§å®¤åç§°ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼ |
| | | -- duty_dept_code text 责任ç§å®¤ç¼ç ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼ |
| | | -- report_dept_name text æ¥å¤ç§å®¤åç§°ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼ |
| | | -- report_dept_code text æ¥å¤ç§å®¤ç¼ç ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼ |
| | | -- â ä¸è¡¥çè¯ï¼satisfactionGraph çè¯é³åæ¯ï¼type=1 æ type=nullï¼æ§è¡ |
| | | -- IvrLibaTemplateScriptMapper.queryLibTemplateIds æ¶ä»ä¼æ |
| | | -- Unknown column 'is_myd_exception' in 'field list'ã |
| | | -- ï¼ç¬¬ä¸æ¹ä¹åæ¥çæ¯ script_assortnameï¼é£ä¸¤ä¸ªåå·²ç»è¡¥å¥½ãï¼ |
| | | -- |
| | | -- ãæ ¡éªæ¹å¼ã |
| | | -- å·²ç¨èæ¬é忝坹ï¼ä¸¤å¼ 表ç mapper è¯å¥ï¼select çæ®µ 55 å + insert/update 54 åï¼ |
| | | -- 䏿¬åºå®é
ååå·®éï¼ç¼ºå¤±çå°±æ¯ä¸é¢è¿ 6 个ï¼å«æ å
¶å®ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0ãæ§è¡åæ£æ¥ï¼åºç¡®è®¤è¿ 6 åä¸åå¨ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SELECT COLUMN_NAME FROM information_schema.COLUMNS |
| | | -- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ivr_liba_template_script' |
| | | -- AND COLUMN_NAME IN ('dimension','is_myd_exception','duty_dept_name','duty_dept_code','report_dept_name','report_dept_code'); |
| | | -- SELECT COLUMN_NAME FROM information_schema.COLUMNS |
| | | -- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ivr_task_template_script' |
| | | -- AND COLUMN_NAME IN ('dimension','is_myd_exception','duty_dept_name','duty_dept_code','report_dept_name','report_dept_code'); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãivr_liba_template_script è¡¥ 6 åï¼121 è¡ï¼INPLACE ä¸é»å¡è¯»åï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE ivr_liba_template_script |
| | | ADD COLUMN dimension varchar(50) NULL COMMENT 'é®é¢ç»´åº¦', |
| | | ADD COLUMN is_myd_exception varchar(50) NULL COMMENT '满æåº¦æè§å¼å¸¸ï¼åªéå¯¹ææ¬ï¼', |
| | | ADD COLUMN duty_dept_name text NULL COMMENT '责任ç§å®¤åç§°ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ADD COLUMN duty_dept_code text NULL COMMENT '责任ç§å®¤ç¼ç ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ADD COLUMN report_dept_name text NULL COMMENT 'æ¥å¤ç§å®¤åç§°ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ADD COLUMN report_dept_code text NULL COMMENT 'æ¥å¤ç§å®¤ç¼ç ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãivr_task_template_script è¡¥ 6 åï¼1221 è¡ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE ivr_task_template_script |
| | | ADD COLUMN dimension varchar(50) NULL COMMENT 'é®é¢ç»´åº¦', |
| | | ADD COLUMN is_myd_exception varchar(50) NULL COMMENT '满æåº¦æè§å¼å¸¸ï¼åªéå¯¹ææ¬ï¼', |
| | | ADD COLUMN duty_dept_name text NULL COMMENT '责任ç§å®¤åç§°ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ADD COLUMN duty_dept_code text NULL COMMENT '责任ç§å®¤ç¼ç ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ADD COLUMN report_dept_name text NULL COMMENT 'æ¥å¤ç§å®¤åç§°ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ADD COLUMN report_dept_code text NULL COMMENT 'æ¥å¤ç§å®¤ç¼ç ï¼å¦æå¤ä¸ªç§å®¤ç¨éå·åå²ï¼', |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã3ãéªè¯ï¼è¿ä¸¤æ¡ mapper ç select çæ®µåºè½æ£å¸¸è¿å |
| | | -- çä»· SQLï¼MyBatis éå°±æ¯è¿æ®µï¼ï¼ |
| | | -- select id, scriptno, is_myd_exception, ..., script_assortname, ..., script_assortid, ... |
| | | -- from ivr_liba_template_script where del_flag=0 |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SELECT COUNT(*) FROM ( |
| | | -- SELECT id, scriptno, is_myd_exception, dimension, script_assortname, script_assortid, |
| | | -- duty_dept_name, duty_dept_code, report_dept_name, report_dept_code, |
| | | -- duty_dept_person_name, duty_dept_person_code, report_dept_person_code, report_dept_person_name, |
| | | -- circulation_dept_person_code, circulation_dept_person_name |
| | | -- FROM ivr_liba_template_script WHERE del_flag = 0) t; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã4ãåæ» |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE ivr_liba_template_script |
| | | -- DROP COLUMN dimension, DROP COLUMN is_myd_exception, DROP COLUMN duty_dept_name, |
| | | -- DROP COLUMN duty_dept_code, DROP COLUMN report_dept_name, DROP COLUMN report_dept_code; |
| | | -- ALTER TABLE ivr_task_template_script |
| | | -- DROP COLUMN dimension, DROP COLUMN is_myd_exception, DROP COLUMN duty_dept_name, |
| | | -- DROP COLUMN duty_dept_code, DROP COLUMN report_dept_name, DROP COLUMN report_dept_code; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- pat_med_outhosp ç³»å表æ serialnum å ç´¢å¼ï¼é
å鍿¥è¯æå¤©å
¨éééï¼ |
| | | -- |
| | | -- 为ä»ä¹è¦å ï¼ |
| | | -- 1) éé任塿¯ä¸ªåå°æ¶æå½å¤©ä¸ä¸ä¸ªè¯çè®°å½æ´è½®æä¸éï¼é "æ´é¡µæ¹éæ¥é"è¿æ»¤å·²å
¥åºçï¼ |
| | | -- æ¥é SQL æ¯ where serialnum in (500个)ãæ²¡æç´¢å¼å°±æ¯å
¨è¡¨æ«æï¼å£åº¦å表å ç¾ä¸è¡æ¶ä¸æ¬¡å°±å¾æ
¢ï¼ |
| | | -- 2) å¯ä¸ç´¢å¼æ¯"ä¸éå¤"çæåä¸éé²çº¿ï¼æç«¯å¹¶åãæç¹åéãå页åç§»é½ä¸ä¼æåºéå¤è®°å½ã |
| | | -- |
| | | -- æ§è¡é¡ºåºï¼ |
| | | -- 第 1 æ¥ çæ¸
æåªäºè¡¨ãç°å¨ææ²¡æç´¢å¼ |
| | | -- 第 2 æ¥ æ¥é夿°æ®ï¼æéå¤çè¯ç¬¬ 3 æ¥å å¯ä¸ç´¢å¼ä¼å¤±è´¥ï¼å
å¤çéå¤ï¼ |
| | | -- 第 3 æ¥ å å¯ä¸ç´¢å¼ uk_serialnumï¼èæ¬ä¼èªå¨è·³è¿å·²æå¯ä¸ç´¢å¼çè¡¨ï¼ |
| | | -- 第 4 æ¥ æ ¡éªç»æ |
| | | -- |
| | | -- 注æï¼ADD INDEX èµ° online DDLï¼ALGORITHM=INPLACE, LOCK=NONEï¼ï¼ä¸é»å¡è¯»åï¼ |
| | | -- ä½å¤§è¡¨ä»ä¼æ¶è IOï¼å»ºè®®æ¾å¨ä¸å¡ä½å³°æ§è¡ãæ°æ®é大æ¶å表ä¸å¼ ä¸å¼ æ¥ä¹å¯ä»¥ã |
| | | -- 妿æå¼ 表æ¥éï¼å
åç¬æ§è¡ç¬¬ 2 æ¥çå®ææ²¡æé夿°æ®ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 1 æ¥ï¼çæåªäº pat_med_outhosp 表ï¼ä»¥å serialnum ä¸çç´¢å¼æ
åµ |
| | | -- has_unique_index = 1 è¡¨ç¤ºå·²ç»æå¯ä¸ç´¢å¼ï¼ä¸ç¨åå ï¼ |
| | | -- has_any_index = 0 表示å®å
¨æ²¡ç´¢å¼ï¼æ¥è¯¢ä¼å¾æ
¢ï¼å¿
é¡»å ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT t.TABLE_NAME, |
| | | t.TABLE_ROWS, |
| | | (SELECT COUNT(*) |
| | | FROM information_schema.STATISTICS s |
| | | WHERE s.TABLE_SCHEMA = t.TABLE_SCHEMA |
| | | AND s.TABLE_NAME = t.TABLE_NAME |
| | | AND s.COLUMN_NAME = 'serialnum' |
| | | AND s.NON_UNIQUE = 0) AS has_unique_index, |
| | | (SELECT COUNT(*) |
| | | FROM information_schema.STATISTICS s |
| | | WHERE s.TABLE_SCHEMA = t.TABLE_SCHEMA |
| | | AND s.TABLE_NAME = t.TABLE_NAME |
| | | AND s.COLUMN_NAME = 'serialnum') AS has_any_index |
| | | FROM information_schema.TABLES t |
| | | WHERE t.TABLE_SCHEMA = DATABASE() |
| | | AND (t.TABLE_NAME = 'pat_med_outhosp' OR t.TABLE_NAME REGEXP '^pat_med_outhosp_[0-9]{4,8}$') |
| | | ORDER BY t.TABLE_NAME; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 2 æ¥ï¼æ¥éå¤ç serialnumï¼æéå¤å°±å¿
é¡»å
æ¸
çï¼å¦åå¯ä¸ç´¢å¼å»ºä¸ä¸ï¼ |
| | | -- æ§è¡åå
ç dup_serialnum_totalï¼çäº 0 å°±å¯ä»¥ç´æ¥è¿ç¬¬ 3 æ¥ |
| | | -- ---------------------------------------------------------------------------- |
| | | DROP PROCEDURE IF EXISTS check_outhosp_serialnum_dup; |
| | | DELIMITER $$ |
| | | CREATE PROCEDURE check_outhosp_serialnum_dup() |
| | | BEGIN |
| | | DECLARE done INT DEFAULT 0; |
| | | DECLARE tbl VARCHAR(64); |
| | | DECLARE cur CURSOR FOR |
| | | SELECT TABLE_NAME |
| | | FROM information_schema.TABLES |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND (TABLE_NAME = 'pat_med_outhosp' OR TABLE_NAME REGEXP '^pat_med_outhosp_[0-9]{4,8}$'); |
| | | DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; |
| | | |
| | | DROP TEMPORARY TABLE IF EXISTS tmp_dup_serialnum; |
| | | CREATE TEMPORARY TABLE tmp_dup_serialnum |
| | | ( |
| | | table_name VARCHAR(64), |
| | | serialnum VARCHAR(64), |
| | | cnt INT |
| | | ); |
| | | |
| | | OPEN cur; |
| | | read_loop: |
| | | LOOP |
| | | FETCH cur INTO tbl; |
| | | IF done THEN |
| | | LEAVE read_loop; |
| | | END IF; |
| | | SET @s = CONCAT('INSERT INTO tmp_dup_serialnum SELECT ''', tbl, |
| | | ''', serialnum, COUNT(*) FROM `', tbl, |
| | | '` WHERE serialnum IS NOT NULL AND serialnum <> ''''', |
| | | ' GROUP BY serialnum HAVING COUNT(*) > 1'); |
| | | PREPARE st FROM @s; |
| | | EXECUTE st; |
| | | DEALLOCATE PREPARE st; |
| | | END LOOP; |
| | | CLOSE cur; |
| | | |
| | | SELECT * FROM tmp_dup_serialnum ORDER BY cnt DESC LIMIT 200; |
| | | SELECT COUNT(*) AS dup_serialnum_total FROM tmp_dup_serialnum; |
| | | END$$ |
| | | DELIMITER ; |
| | | |
| | | CALL check_outhosp_serialnum_dup(); |
| | | -- æ¥å®å¯ä»¥å æè¿ä¸ªè¿ç¨ï¼DROP PROCEDURE IF EXISTS check_outhosp_serialnum_dup; |
| | | |
| | | -- 妿æéå¤ï¼æä¸é¢çæè·¯æ¸
çï¼ä¿ç id æå°ç飿¡ï¼å
å¤ä»½åå ï¼ï¼ |
| | | -- CREATE TABLE bak_dup_<表å>_<æ¥æ> AS |
| | | -- SELECT * FROM `pat_med_outhosp_20261012` |
| | | -- WHERE serialnum IN ('éå¤çserialnum1','éå¤çserialnum2'); |
| | | -- DELETE t1 FROM `pat_med_outhosp_20261012` t1 |
| | | -- JOIN `pat_med_outhosp_20261012` t2 |
| | | -- ON t1.serialnum = t2.serialnum AND t1.id > t2.id |
| | | -- WHERE t1.serialnum IN ('éå¤çserialnum1','éå¤çserialnum2'); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 3 æ¥ï¼ç»ææ pat_med_outhosp 表å å¯ä¸ç´¢å¼ uk_serialnum |
| | | -- å·²æå¯ä¸ç´¢å¼ç表èªå¨è·³è¿ï¼å¦æä¹å建è¿ååçæ®éç´¢å¼ idx_serialnumï¼ä¼å
å æå建å¯ä¸ç |
| | | -- ---------------------------------------------------------------------------- |
| | | DROP PROCEDURE IF EXISTS add_outhosp_serialnum_index; |
| | | DELIMITER $$ |
| | | CREATE PROCEDURE add_outhosp_serialnum_index() |
| | | BEGIN |
| | | DECLARE done INT DEFAULT 0; |
| | | DECLARE tbl VARCHAR(64); |
| | | DECLARE has_unique INT DEFAULT 0; |
| | | DECLARE has_normal INT DEFAULT 0; |
| | | DECLARE cur CURSOR FOR |
| | | SELECT TABLE_NAME |
| | | FROM information_schema.TABLES |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND (TABLE_NAME = 'pat_med_outhosp' OR TABLE_NAME REGEXP '^pat_med_outhosp_[0-9]{4,8}$'); |
| | | DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; |
| | | |
| | | OPEN cur; |
| | | add_loop: |
| | | LOOP |
| | | FETCH cur INTO tbl; |
| | | IF done THEN |
| | | LEAVE add_loop; |
| | | END IF; |
| | | |
| | | SELECT COUNT(*) INTO has_unique |
| | | FROM information_schema.STATISTICS |
| | | WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = tbl |
| | | AND COLUMN_NAME = 'serialnum' AND NON_UNIQUE = 0; |
| | | |
| | | IF has_unique > 0 THEN |
| | | SELECT CONCAT('[è·³è¿] ', tbl, ' å·²æ serialnum å¯ä¸ç´¢å¼') AS msg; |
| | | ELSE |
| | | -- å
æ¸
æå¯è½åå¨çéå¯ä¸ç´¢å¼ï¼ä¿çå¯ä¸ç´¢å¼ä¸ä¸ªå°±å¤ï¼ |
| | | SELECT COUNT(*) INTO has_normal |
| | | FROM information_schema.STATISTICS |
| | | WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = tbl |
| | | AND COLUMN_NAME = 'serialnum' AND NON_UNIQUE = 1 AND INDEX_NAME = 'idx_serialnum'; |
| | | IF has_normal > 0 THEN |
| | | SET @s = CONCAT('ALTER TABLE `', tbl, '` DROP INDEX idx_serialnum'); |
| | | PREPARE st FROM @s; |
| | | EXECUTE st; |
| | | DEALLOCATE PREPARE st; |
| | | END IF; |
| | | |
| | | SET @s = CONCAT('ALTER TABLE `', tbl, '` ADD UNIQUE INDEX uk_serialnum (serialnum)'); |
| | | PREPARE st FROM @s; |
| | | EXECUTE st; |
| | | DEALLOCATE PREPARE st; |
| | | SELECT CONCAT('[宿] ', tbl, ' 已添å å¯ä¸ç´¢å¼ uk_serialnum') AS msg; |
| | | END IF; |
| | | END LOOP; |
| | | CLOSE cur; |
| | | END$$ |
| | | DELIMITER ; |
| | | |
| | | CALL add_outhosp_serialnum_index(); |
| | | -- 宿åå æè¿ç¨ï¼DROP PROCEDURE IF EXISTS add_outhosp_serialnum_index; |
| | | |
| | | -- 妿æå¼ è¡¨æ¥ "Duplicate entry ... for key 'uk_serialnum'"ï¼è¯´æå®è¿æé夿°æ®ï¼ |
| | | -- åå°ç¬¬ 2 æ¥æ¸
ç该表åï¼åç¬æ§è¡ï¼ |
| | | -- ALTER TABLE `pat_med_outhosp_20261012` ADD UNIQUE INDEX uk_serialnum (serialnum); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 4 æ¥ï¼æ ¡éªï¼æ¯å¼ 表é½åºè¯¥ has_unique_index = 1ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT t.TABLE_NAME, |
| | | (SELECT COUNT(*) |
| | | FROM information_schema.STATISTICS s |
| | | WHERE s.TABLE_SCHEMA = t.TABLE_SCHEMA |
| | | AND s.TABLE_NAME = t.TABLE_NAME |
| | | AND s.COLUMN_NAME = 'serialnum' |
| | | AND s.NON_UNIQUE = 0) AS has_unique_index |
| | | FROM information_schema.TABLES t |
| | | WHERE t.TABLE_SCHEMA = DATABASE() |
| | | AND (t.TABLE_NAME = 'pat_med_outhosp' OR t.TABLE_NAME REGEXP '^pat_med_outhosp_[0-9]{4,8}$') |
| | | ORDER BY t.TABLE_NAME; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- POST /smartor/patinhosp/selectPatMedInhospList æ
¢æ¥è¯¢è¯æ + ç´¢å¼èæ¬ |
| | | -- |
| | | -- ç°åºå
¥åï¼å¨é¢è§å¾ï¼ï¼ |
| | | -- {"bedSort":1,"pageNum":1,"pageSize":20, |
| | | -- "deptcodeList":["40003378"],"hospitaldistrictcodeList":["40003380"],"cry":0} |
| | | -- |
| | | -- è°ç¨é¾ï¼å·²éè¡æ ¸å¯¹ï¼ï¼ |
| | | -- InhospVisitDataController#selectPatMedInhosplis |
| | | -- -> InhospVisitFacade#selectPatMedInhospList |
| | | -- -> DefaultInhospVisitDataService#selectPatMedInhospList |
| | | -- -> PatMedInhospMapper.xml <select id="selectPatMedInhospList"> |
| | | -- |
| | | -- â ï¸ æ³¨æï¼è¿ç§»åè¿æ¡é¾ãä¸åç»è¿ãsmartor ç PatMedInhospServiceImpl#selectPatMedInhospListï¼ |
| | | -- å æ¤é£éé¢ç cry å½ä¸åï¼cry=0 -> inhospstate='0'ï¼å¨è¿æ¡æ¥å£ä¸ãå·²ç»ä¸çæäºãã |
| | | -- è¿ä¸ç¹åæ¶æ¯"æ
¢"çæ ¹å ä¹ä¸ï¼è§ä¸é¢ã第 4 èãã |
| | | -- |
| | | -- æ§è¡é¡ºåºï¼ç¬¬ 1 æ¥çç°ç¶ â 第 2 æ¥ï¼äºéä¸ï¼â 第 3 æ¥ EXPLAIN éªè¯ã |
| | | -- ADD INDEX èµ° online DDLï¼ä¸é»å¡è¯»åï¼ï¼ä½å¤§è¡¨ä»ä¼å IOï¼å»ºè®®ä¸å¡ä½å³°æ§è¡ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 1 èï¼è¿æ¡å
¥åå®é
æ§è¡çä¸¤æ¡ SQLï¼ç± MyBatis 卿æ ç¾å±å¼ + PageHelper æ¹åï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- |
| | | -- â æ°æ®æ¥è¯¢ï¼<select id="selectPatMedInhospList">ï¼cry=0 èµ° endtime is null åæ¯ï¼ |
| | | -- bedSort ä¼ å符串 "1" ä¸å¹é
XML éç "asc"/"desc"ï¼æ
è½å° <otherwise> é»è®¤æåºï¼ |
| | | -- |
| | | -- SELECT a.age, a.telcode, a.sex, b.inhospid, b.nurse_id, ...ï¼å
± 60+ åï¼..., a.idcardno |
| | | -- FROM pat_med_inhosp b |
| | | -- JOIN pat_archive a ON a.id = b.patid |
| | | -- WHERE 1=1 |
| | | -- AND a.del_flag = 0 -- â æ°å叏鿝 char åï¼è§ç¬¬ 4 è F1 |
| | | -- AND b.del_flag = 0 -- â åä¸ï¼ä¸å®æ£æ¯ idx_inhosp_optimize çé¦å |
| | | -- AND a.idcardno IS NOT NULL |
| | | -- AND b.endtime IS NULL -- â å¨é¢å¤å®ï¼çä»·æ¡ä»¶ï¼æ æ³ç¨ç°æç´¢å¼ï¼ |
| | | -- AND b.hospitaldistrictcode IN ('40003380') |
| | | -- AND b.deptcode IN ('40003378') |
| | | -- AND b.orgid = '<ç»å½ç¨æ· orgid>' -- ç± @AddOrgId 注å
¥ |
| | | -- [AND b.campusid = '<ç»å½ç¨æ· campusid>'] -- é¢åºæéæªæ¾å¼æ¶ç± @AddOrgId 注å
¥ |
| | | -- GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex -- â è§ç¬¬ 4 è F3 |
| | | -- ORDER BY b.starttime DESC, b.bed_no ASC |
| | | -- LIMIT 0, 20 |
| | | -- |
| | | -- â¡ æ»æ°æ¥è¯¢ï¼PageHelper èªå¨çæãå 为æ GROUP BYï¼isSimpleCount() 为 falseï¼ |
| | | -- CountSqlParser ä¼ãææ´æ¡æ¥è¯¢å
ä¸å±ãè䏿¯æ¹åæ count(0)ï¼å·²æ ¸å¯¹ pagehelper 5.3.x |
| | | -- åèç 常é "select count(" + ") from ( " + ") tmp_count"ï¼ï¼ |
| | | -- |
| | | -- SELECT count(0) FROM ( <â 廿 ORDER BY åç宿´ 60 åè¯å¥> ) tmp_count |
| | | -- |
| | | -- => æ¯æ¬¡ç¿»é¡µ = å䏿¡éé级æ¥è¯¢è·ä¸¤éãè¿æ¯"æ
¢"ç第äºä¸ªæ ¹å ï¼è§ç¬¬ 4 è F2ã |
| | | -- |
| | | -- ⢠å¦å¤ä¸æ¡ï¼fillTagname ä¸å¨è¿æ¡é¾ä¸ï¼é£æ¯ smartor ä¾§ ServiceImpl çé»è¾ï¼ï¼å¯æé¤ã |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 1 æ¥ï¼å
çç°ç¶ ââ ç°æç´¢å¼ãæ
¢æ¥å¿ã以åè¿æ¡ SQL çç宿§è¡è®¡å |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | -- 1.1 pat_med_inhosp / pat_archive ç°æç´¢å¼ |
| | | -- éç¹ç idx_inhosp_optimize ççå®å顺åºï¼ä»£ç 注ééåçæ¯ (del_flag, orgid, inhospstate)ï¼ |
| | | SELECT TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX, COLUMN_NAME, CARDINALITY, NON_UNIQUE |
| | | FROM information_schema.STATISTICS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME IN ('pat_med_inhosp', 'pat_archive') |
| | | ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX; |
| | | |
| | | -- 1.2 å
³æçæ¡ä»¶å°åºæ¯ä¸æ¯ç´¢å¼åãåç±»å对ä¸å¯¹ï¼del_flag / inhospstate æ¯ char è¿æ¯ intï¼ |
| | | -- ç´æ¥å³å®ä¸é¢ F1 / F4 è¦ä¸è¦æ¹ï¼ |
| | | SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE |
| | | FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME IN ('pat_med_inhosp', 'pat_archive') |
| | | AND COLUMN_NAME IN ('inhospid', 'patid', 'del_flag', 'orgid', 'campusid', |
| | | 'inhospstate', 'endtime', 'starttime', 'bed_no', |
| | | 'deptcode', 'hospitaldistrictcode'); |
| | | |
| | | -- 1.3 表ä½é + å¨é¢å æ¯ï¼å¤æ"å
¨è¡¨æ«æ"å°åºè´µä¸è´µï¼ |
| | | SELECT TABLE_NAME, TABLE_ROWS, ROUND(DATA_LENGTH / 1024 / 1024, 1) AS data_mb, |
| | | ROUND(INDEX_LENGTH / 1024 / 1024, 1) AS index_mb |
| | | FROM information_schema.TABLES |
| | | WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('pat_med_inhosp', 'pat_archive'); |
| | | |
| | | SELECT COUNT(*) AS total, |
| | | SUM(endtime IS NULL) AS in_hosp_by_endtime, |
| | | SUM(inhospstate = '0') AS in_hosp_by_state, |
| | | -- 两ç§"å¨é¢"å®ä¹ä¸ä¸è´çè¡æ°ï¼>0 就说æãä¸è½ãéææ inhospstate='0' å½ä½ |
| | | -- endtime IS NULL çæ¿ä»£æ¡ä»¶ï¼F2 åªè½èµ°"å ç´¢å¼"飿¡è·¯ |
| | | SUM(CASE WHEN endtime IS NULL AND IFNULL(inhospstate, '') <> '0' THEN 1 ELSE 0 END) AS in_hosp_def_conflict |
| | | FROM pat_med_inhosp |
| | | WHERE del_flag = '0'; |
| | | |
| | | -- 1.4 ç´æ¥ EXPLAIN è¿æ¡è¯å¥ï¼æ orgid æ¢æç°åºå¼ï¼ |
| | | EXPLAIN |
| | | SELECT a.age, a.telcode, a.sex, b.inhospid, b.patid, b.deptcode, b.bed_no, b.starttime, b.endtime |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag = 0 |
| | | AND b.del_flag = 0 |
| | | AND a.idcardno IS NOT NULL |
| | | AND b.endtime IS NULL |
| | | AND b.hospitaldistrictcode IN ('40003380') |
| | | AND b.deptcode IN ('40003378') |
| | | AND b.orgid = '<æ¢æç°åº orgid>' |
| | | GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex |
| | | ORDER BY b.starttime DESC, b.bed_no ASC |
| | | LIMIT 0, 20; |
| | | -- |
| | | -- é¢æï¼æ¹ä¹åï¼ï¼b 表 type=ref/range æ ALLï¼key åªæ idx_inhosp_optimize ç |
| | | -- (del_flag, orgid) åç¼è½ç¨å°ï¼æå®å
¨ç¨ä¸ä¸ï¼ï¼ |
| | | -- rows 约çäº"è¯¥æºæå
¨é¨åå²ä½é¢è®°å½æ°"ï¼Extra éåºç° Using where; Using temporary; Using filesortã |
| | | -- æ¹ä¹åè¦ç¹ï¼b 表 rows åºéå°"è¯¥æºæå¨é¢äººæ°"éçº§ï¼æ°åï¼ï¼ä¸ key å½ä¸ä¸é¢çæ°ç´¢å¼ / ç°æç´¢å¼å
¨åç¼ã |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 2 èï¼ä¸¤ç§ä¿®æ³ ââ ãæ¬æ¬¡éç¨ä¿®æ³ Aãï¼ä¿®æ³ B çä½å¤é |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | -- ä¿®æ³ Aï¼æ¬æ¬¡éç¨ï¼é¶è¯ä¹é£é©ï¼ï¼ç»"å¨é¢"è¡¥ä¸ä¸ªè½å®ä½çç´¢å¼ã |
| | | -- ç°æ idx_inhosp_optimize ç第ä¸ä¸ªçå¼åæ¯ inhospstateï¼ä½æ¬æ¥å£ä¸ä¼ è¿ä¸ªæ¡ä»¶ï¼ |
| | | -- åªè½ç¨ä¸ (del_flag, orgid) åç¼ = è¯¥æºæå
¨é¨åå²ä½é¢è®°å½ï¼çäºæ²¡èµ°ç´¢å¼ã |
| | | -- åæï¼F1 ç del_flag = '0' å·²æ¹ï¼å¦åé¦åç¨ä¸ä¸ï¼è¿æ¡ç´¢å¼ä¹ç½å»ºï¼ã |
| | | ALTER TABLE pat_med_inhosp |
| | | ADD INDEX idx_pmi_del_org_end (del_flag, orgid, endtime); |
| | | |
| | | -- å¯éå å¼ºï¼æä¸¤ä¸ª IN æ¡ä»¶ä¹æ¾è¿ç´¢å¼ï¼å½ä¸è¡ä¸ç¨å表就è½å¤æï¼ç´¢å¼æ´å®½ï¼åæ¾å¤§æ´ææ¾ï¼ |
| | | -- ALTER TABLE pat_med_inhosp |
| | | -- ADD INDEX idx_pmi_del_org_end_dept (del_flag, orgid, endtime, deptcode, hospitaldistrictcode); |
| | | |
| | | -- åºé¢ / è½¬ç§ / é¢å
¥é¢ ä¸ä¸ªè§å¾ï¼cry=1/2/3ï¼order by b.endtime descï¼ç¨è¿æ¡ï¼ |
| | | -- çå¼å (del_flag, orgid, inhospstate) å
¨å½ä¸ï¼ä¸ endtime å¯ä»¥é¡ºå¸¦é¿å
filesort çæåºé® |
| | | ALTER TABLE pat_med_inhosp |
| | | ADD INDEX idx_pmi_del_org_state_end (del_flag, orgid, inhospstate, endtime); |
| | | |
| | | |
| | | -- ä¿®æ³ Bï¼æ¬æ¬¡ä¸éç¨ï¼çä½å¤éï¼ï¼ä¸å ç´¢å¼ï¼cry=0 æ¶è¡¥ inhospstate='0'ï¼è®©ç°æ |
| | | -- idx_inhosp_optimize ç (del_flag, orgid, inhospstate) åç¼å
¨é¨çå¼å½ä¸ ââ |
| | | -- å
¶å®è¿ææ¯ãè¿ç§»åçè¡ä¸ºãï¼smartor ç PatMedInhospServiceImpl#selectPatMedInhospList |
| | | -- å¨ cry=0 æ¶ä¼ setInhospstate("0")ï¼è¿å° ruoyi-inhospvisit åè¿æ¡é¾ç´æ¥è° Mapperï¼ |
| | | -- è¿æ®µå½ä¸å丢äºã |
| | | -- â ï¸ ä¹æä»¥æ²¡éå®ï¼å®ä¼è®©"endtime ä¸ºç©ºä½ inhospstate<>'0'"çè¡é黿¶å¤±ï¼ |
| | | -- æ¯å¦å®å
¨åå³äºæ°æ®ï¼å¾å
ç第 1.3 èç in_hosp_def_conflictã |
| | | -- è¥å°æ¥ç¡®è®¤ = 0ï¼è¿ä¸æ¡æ¯å»ºç´¢å¼æ´çï¼è§ PatMedInhospMapper.xml ç |
| | | -- <if test="cry != null and cry == 0 "> 忝ï¼ã |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 3 èï¼éªè¯ï¼ç¬¬ 2 æ¥åå®åéè·ç¬¬ 1.4 èï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- â b 表 type = refï¼key = idx_pmi_del_org_endï¼æ idx_inhosp_optimizeï¼ï¼rows æ°åçº§ï¼ |
| | | -- â¡ Using temporary; Using filesort ä»ä¼æï¼GROUP BY + åºä½æåºå¯¼è´ï¼è§ F3ï¼ï¼ |
| | | -- ä½å 为å䏿åºçè¡æ°å·²ç»ä»"å
¨æºæåå²"éå°"æ¬é¨é¨å¨é¢"ï¼å¯ä»¥æ¥åï¼ |
| | | -- ⢠æ¥å£èæ¶ï¼count + data 两æ¡é½æè¿ä¸ªè®¡åèµ°ï¼æ´ä½åºéå°å 忝«ç§çº§ã |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãåæ»ã |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE pat_med_inhosp DROP INDEX idx_pmi_del_org_end; |
| | | -- ALTER TABLE pat_med_inhosp DROP INDEX idx_pmi_del_org_state_end; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- 第 4 èï¼ä»£ç 侧顺带åç°çé®é¢ï¼æå½±åæåºï¼ |
| | | -- â
å·²æ¹ï¼F1 / F2 / F4 â¸ æªæ¹ï¼ç确认ï¼ï¼F3 / F5 / F6 |
| | | -- |
| | | -- F1 â
å·²æ¹ b.del_flag = 0 / a.del_flag = 0ï¼æ°å叏鿝 char åï¼MySQL 伿ãåã转 |
| | | -- DOUBLEï¼è¯¥æ¡ä»¶åªè½è¿æ»¤ãä¸è½å®ä½ãidx_inhosp_optimize çé¦åå°±æ¯ del_flagï¼ |
| | | -- çäºé¦åç½ç»ãå·²æ¹æ = '0'ãæ¬ä»åºå·²æåç±»ç»è®ºï¼è§ |
| | | -- sql/sltdMydTotalByDimension_index_20260924.sql 第 117-134 è¡ï¼"代ç ä¾§å¿
é¡»åæ¥ä¿®æ£ |
| | | -- del_flag çåæ³ï¼å¦åç´¢å¼åªè½ç¨ä¸ä¸å"ã |
| | | -- ï¼åæ¯ int æ¶å '0' ä¹å®å
¨ï¼å¸¸é侧转æ¢ï¼ç´¢å¼ç
§æ ·å¯ç¨ãï¼ |
| | | -- |
| | | -- F2 â
å·²æ¹ PageHelper ç countï¼æ GROUP BY æ¶ä¸è½ç®åï¼åªè½å
ä¸å± tmp_countï¼ |
| | | -- çäºæ¯æ¬¡ç¿»é¡µæè¿æ¡ 60 åæ¥è¯¢åè·ä¸éãå·²å¨ |
| | | -- ruoyi-inhospvisit/.../PatMedInhospMapper.xml è¡¥ selectPatMedInhospList_COUNT |
| | | -- ï¼pagehelper 5.3.x ç PageInterceptor æ¯æ countSuffix="_COUNT" çæå countï¼ |
| | | -- å·²æ ¸å¯¹åèç 常éï¼genCountMsId / getExistedMappedStatement / executeManualCountï¼ï¼ |
| | | -- å¹¶æ FROM/WHERE æ½æ selectPatMedInhospListFromWhere çæ®µç»ä¸¤æ¡è¯å¥å
±ç¨ï¼ |
| | | -- ä¿è¯ count ä¸åè¡¨æ°¸è¿æ¯åä¸å¥æ¡ä»¶ã |
| | | -- |
| | | -- F3 â¸ æªæ¹ GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex æçãä¸å»éï¼ |
| | | -- a.id æ¯ pat_archive 主é®ãb.patid åªå
³èå°ä¸è¡ï¼æ¯ä¸ª join ç»æè¡èªæåç»ã |
| | | -- å®åªæ¢æ¥ Using temporary + Using filesortãå å®ä¹åè¦å
确认 pat_archive.id å¯ä¸ï¼ |
| | | -- 确认åå æï¼F2 ç count è¿ä¼èªå¨åæç®åç count(0)ã |
| | | -- |
| | | -- F4 â
å·²æ¹ cry=1/2/3 åæ¯åæ¥æ¯ b.inhospstate=1 / =2 / =3ï¼æ°å常é vs char åï¼ï¼å F1ï¼ |
| | | -- åºé¢ / è½¬ç§ / é¢å
¥é¢ ä¸ä¸ªè§å¾çç´¢å¼ä¹ç¨ä¸ä¸ï¼å·²æ¹æ '1' / '2' / '3'ã |
| | | -- |
| | | -- F5 â¸ æªæ¹ bedSort å¨è¿æ¡é¾ä¸æ²¡æå½ä¸åãåç«¯ä¼ bedSort:1ï¼æ°åï¼ï¼Jackson è½å° String |
| | | -- æ¯ "1"ï¼è XML åªè®¤ "asc"/"desc"ï¼æä»¥ãæåºä½æåºå®é
没çæãï¼è½åé»è®¤ |
| | | -- order by starttime desc, bed_no ascãå½ä¸å彿° normalizeBedSort ç®ååªå¨ |
| | | -- smartor ç ServiceImpl éï¼èè¿æ¡é¾å·²ç»ä¸èµ°å®äºã |
| | | -- |
| | | -- F6 â¸ æªæ¹ date_format(b.endtime,'%y%m%d') >= date_format(?, '%y%m%d') è¿ç±»åæ³ |
| | | -- ï¼åºé¢/å
¥é¢æ¶é´èå´è¿æ»¤ï¼æ¬å
¥å䏿¶åï¼å¯¹åç¨äºå½æ°ï¼ç´¢å¼å¿
失æãçä»·æ¹æ³ï¼ |
| | | -- >= date_format(?, '%y%m%d') -> b.endtime >= DATE(?) |
| | | -- <= date_format(?, '%y%m%d') -> b.endtime < DATE(?) + INTERVAL 1 DAY |
| | | -- |
| | | -- å彿£æ¥ï¼python sql\_probe\verify_patinhosp_list_count.pyï¼17 é¡¹ï¼æ¹å®è¯·è·ä¸æ¬¡ï¼ |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- /smartor/patinhosp/selectPatMedInhospList æ
¢ ââ ä¸é¡µè¯æï¼æè¾åºè´´åæ¥å³å¯å®ä½ï¼ |
| | | -- |
| | | -- ç°åºå
¥åï¼{"bedSort":1,"pageNum":1,"pageSize":20, |
| | | -- "deptcodeList":["40003378"],"hospitaldistrictcodeList":["40003380"],"cry":0} |
| | | -- |
| | | -- 代ç ä¾§å·²ç»åå®çä¸ä»¶äºï¼ä¸ç¨åæ¥ï¼ï¼ |
| | | -- â del_flag / inhospstate å·²æ¹æå符串常é â ç´¢å¼é¦åè½ç¨ä¸äº |
| | | -- â¡ å页 count å·²æ¹ææå _COUNTï¼pagehelper 宿µè§£æå° 5.3.2ï¼è¯¥æºå¶çæï¼ï¼ |
| | | -- ä¸åæ 60 åæ¥è¯¢æ´ä¸ªå
ä¸å±éè· |
| | | -- ⢠ãå¨é¢å£å¾ãcry=0 ç°å¨åæ¶å¸¦ endtime is null å inhospstate = '0' |
| | | -- ââ è¿æ¯è¿åºå PatMedInhospServiceImpl çè¡ä¸ºï¼ä¹æ¯è®©ç´¢å¼ç¬¬ä¸å |
| | | -- (del_flag, orgid, inhospstate) çæ£çå¼å½ä¸çåæ |
| | | -- 妿ãè¿æ¯æ
¢ãï¼å©ä¸çæ¶é´å¿
ç¶å¨è¿ä¸¤å¤ä¹ä¸ï¼ |
| | | -- (ç²) å¨é¢å£å¾ééäºå ââ endtime IS NULL å½ä¸çè¡æ°è¿å¤§äºçå®å¨é¢äººæ° |
| | | -- ï¼HIS 导å
¥çå岿°æ® endtime 常年为空ï¼è¿ä¸æ¡æå®¹æè¢«å¿½ç¥ï¼ |
| | | -- (ä¹) ç´¢å¼æ²¡å»º / 建äºä½ç¨ä¸ä¸ï¼ç±»åæå符éä¸ä¸è´ï¼join é®è¢«éå¼è½¬æ¢ï¼ |
| | | -- |
| | | -- è·æ³ï¼æ´æ®µè´´è¿ mysql 客æ·ç«¯ãæ¯ä¸ª SELECT çç»æé客æ·ç«¯ä¼æå° |
| | | -- "1 row in set (0.0xx sec)"ï¼é£ä¸ªç§æ°å°±æ¯æè¦çã |
| | | -- éè¦æ¿æ¢çå ä½ç¬¦ï¼<ORGID>ï¼= ç»å½ç¨æ·ç orgidï¼ã<DEPT>ã<DISTRICT>ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 0) çæ¬ï¼EXPLAIN ANALYZE éè¦ 8.0.17+ï¼5.7 就走第 4 èçæ®é EXPLAINï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT VERSION() AS mysql_version, @@sql_mode AS sql_mode; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 1) ç´¢å¼ç°ç¶ + å
³é®åç±»å/å符éï¼å³å®"ç´¢å¼è½ä¸è½è¢«ç¨ä¸"ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX, COLUMN_NAME, CARDINALITY, NON_UNIQUE |
| | | FROM information_schema.STATISTICS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME IN ('pat_med_inhosp', 'pat_archive') |
| | | ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX; |
| | | |
| | | -- â ï¸ éç¹ç两è¡ï¼ |
| | | -- b.patid ä¸ a.id ç COLUMN_TYPE / COLLATION_NAME æ¯å¦ãå®å
¨ä¸è´ã |
| | | -- ä¸ä¸è´ = join é®è¢«éå¼è½¬æ¢ = pat_archive ç主é®ç´¢å¼ç¨ä¸ä¸ï¼è§ç¬¬ 5 èï¼ |
| | | SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, COLLATION_NAME, IS_NULLABLE |
| | | FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND ( (TABLE_NAME = 'pat_med_inhosp' |
| | | AND COLUMN_NAME IN ('inhospid','patid','del_flag','orgid','campusid', |
| | | 'inhospstate','endtime','starttime','bed_no', |
| | | 'deptcode','hospitaldistrictcode')) |
| | | OR (TABLE_NAME = 'pat_archive' |
| | | AND COLUMN_NAME IN ('id','del_flag','idcardno','age','age_unit','telcode','sex')) ) |
| | | ORDER BY TABLE_NAME, COLUMN_NAME; |
| | | |
| | | SELECT TABLE_NAME, TABLE_ROWS, ROUND(DATA_LENGTH/1024/1024) AS data_mb, |
| | | ROUND(INDEX_LENGTH/1024/1024) AS index_mb |
| | | FROM information_schema.TABLES |
| | | WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('pat_med_inhosp', 'pat_archive'); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 2) â
æå
³é®ï¼å¨é¢å°åºæå¤å°è¡ï¼ä¸¤ç§å£å¾å¯¹æ¯ï¼ |
| | | -- 妿 in_by_endtime è¿å¤§äº in_by_stateï¼è¯´æ endtime IS NULL 䏿¯"å¨é¢"ï¼ |
| | | -- é£åæä¹å ç´¢å¼ä¹æ²¡æ ââ å¿
é¡»æ¢æ inhospstate å£å¾ï¼ä»£ç ä¸è¡ï¼ã |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT |
| | | COUNT(*) AS total_rows, |
| | | SUM(del_flag = '0') AS alive_rows, |
| | | SUM(del_flag = '0' AND endtime IS NULL) AS in_by_endtime, |
| | | SUM(del_flag = '0' AND inhospstate = '0') AS in_by_state, |
| | | SUM(del_flag = '0' AND endtime IS NULL AND IFNULL(inhospstate,'') <> '0') AS conflict_endtime_null_but_not_state0, |
| | | SUM(del_flag = '0' AND inhospstate = '0' AND endtime IS NOT NULL) AS conflict_state0_but_has_endtime |
| | | FROM pat_med_inhosp; |
| | | |
| | | -- æ¢æ"è¯¥æºæ"åçä¸éï¼å£å¾åå¸å¯è½å æºæèå¼ï¼ |
| | | SELECT |
| | | COUNT(*) AS org_alive_rows, |
| | | SUM(endtime IS NULL) AS org_in_by_endtime, |
| | | SUM(inhospstate = '0') AS org_in_by_state, |
| | | SUM(endtime IS NULL AND IFNULL(inhospstate,'') <> '0') AS org_conflict |
| | | FROM pat_med_inhosp |
| | | WHERE del_flag = '0' AND orgid = '<ORGID>'; |
| | | |
| | | -- åç"è¯¥æºæ + 该é¢åº + 该ç§å®¤"ï¼å°±æ¯è¿æ¬¡å
¥åçè¿æ»¤ç»åï¼ |
| | | SELECT |
| | | COUNT(*) AS scope_alive_rows, |
| | | SUM(endtime IS NULL) AS scope_in_by_endtime, |
| | | SUM(inhospstate = '0') AS scope_in_by_state |
| | | FROM pat_med_inhosp |
| | | WHERE del_flag = '0' AND orgid = '<ORGID>' |
| | | AND hospitaldistrictcode = '<DISTRICT>' AND deptcode = '<DEPT>'; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 3) åæ¥è®¡æ¶ï¼ä¸æ¡ä¸æ¡è·ï¼çç§æ°è½å¨åªä¸æ¥ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | -- 3a åªæ« pat_med_inhospï¼ä¸ joinãä¸ group byï¼è¿æ¯"åæ°"çä¸éãæ°å£å¾ã |
| | | SELECT COUNT(*) AS c |
| | | FROM pat_med_inhosp b |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL AND b.inhospstate = '0'; |
| | | |
| | | -- 3g â
对ç
§ï¼å䏿¡ï¼ä½å»æ inhospstateï¼= æ¹é åçå£å¾ï¼ |
| | | -- 3a ä¸ 3g çç§æ°å·® = "è¡¥ä¸ inhospstate å°åºæåæ¥å¤å°"ã |
| | | -- 妿 3g è¿æ¯å ç§è 3a æ¯æ¯«ç§çº§ï¼è¯´æç
å å°±æ¯å®ï¼å°æ¤ä¸ºæ¢ï¼ |
| | | SELECT COUNT(*) AS c |
| | | FROM pat_med_inhosp b |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL; |
| | | |
| | | -- 3b å ä¸ join pat_archiveï¼å¤ a.del_flag / a.idcardnoï¼ï¼join è´µä¸è´µ |
| | | SELECT COUNT(*) AS c |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL AND b.inhospstate = '0' AND a.del_flag = '0' AND a.idcardno IS NOT NULL; |
| | | |
| | | -- 3c æ¹é ãåãç countï¼60 å + GROUP BY æ´ä¸ªå
ä¸å±ï¼ââ è¿å°±æ¯è¢«ä¼åæç飿¡ |
| | | SELECT COUNT(0) AS c FROM ( |
| | | SELECT a.age, a.telcode, a.sex, b.inhospid, b.patid, b.deptcode, b.bed_no, b.starttime |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL AND b.inhospstate = '0' AND a.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex |
| | | ) tmp_count; |
| | | |
| | | -- 3d æ°æ®æ¥è¯¢ã廿 GROUP BY å ORDER BYãï¼çº¯å 20 è¡è¦å¤ä¹
|
| | | SELECT a.age, a.telcode, a.sex, b.inhospid, b.patid, b.deptcode, b.bed_no, b.starttime |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL AND b.inhospstate = '0' AND a.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | LIMIT 20; |
| | | |
| | | -- 3e æ°æ®æ¥è¯¢ãå GROUP BYï¼ä¸å ORDER BYãï¼group by ç代价 |
| | | SELECT a.age, a.telcode, a.sex, b.inhospid, b.patid, b.deptcode, b.bed_no, b.starttime |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL AND b.inhospstate = '0' AND a.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex |
| | | LIMIT 20; |
| | | |
| | | -- 3f ç°ç¶å
¨è²ï¼= æ¥å£çæ£æ§è¡ç飿¡ï¼ï¼åå ORDER BY |
| | | SELECT a.age, a.telcode, a.sex, b.inhospid, b.patid, b.deptcode, b.bed_no, b.starttime |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL AND b.inhospstate = '0' AND a.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex |
| | | ORDER BY b.starttime DESC, b.bed_no ASC |
| | | LIMIT 20; |
| | | |
| | | -- 读æ³ï¼ |
| | | -- 3g æ
¢ã3a å¿« -> ç
å å°±æ¯"å¨é¢å£å¾"ï¼æ¬æ¬¡è¡¥ inhospstate='0' 已解å³ï¼æ¶å·¥ |
| | | -- 3a æ
¢ -> åæ°å°±èµ°éè·¯äºï¼ç´¢å¼ç¼ºå¤± / ç±»åå符éä¸ä¸è´ï¼ï¼ç第 1ã2ã5 è |
| | | -- 3a å¿«ã3b æ
¢ -> join æé®é¢ï¼patid/id ç±»åæå符éä¸ä¸è´ï¼ç第 5 èï¼ |
| | | -- 3b å¿«ã3e æ
¢ -> GROUP BY ç代价ï¼å¯ä»¥ç¡®è®¤"GROUP BY æ¯ç©ºæä½"åå æ |
| | | -- 3e å¿«ã3f æ
¢ -> ORDER BY ç filesort 代价ï¼å¯èè让索å¼é¡ºåºè¦çæåº |
| | | -- 3c ææ¾æ
¢äº 3b -> 说æè¿æ¬¡çæå count æ¹é ç¡®å®çæäºå¤§å¤´ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 4) æ§è¡è®¡åï¼MySQL 5.7 ç¨æ®é EXPLAINï¼8.0.17+ ç´æ¥ç¨ EXPLAIN ANALYZE ççå®èæ¶ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | EXPLAIN |
| | | SELECT a.age, a.telcode, a.sex, b.inhospid, b.patid, b.deptcode, b.bed_no, b.starttime |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE b.del_flag = '0' AND b.orgid = '<ORGID>' |
| | | AND b.hospitaldistrictcode = '<DISTRICT>' AND b.deptcode = '<DEPT>' |
| | | AND b.endtime IS NULL AND b.inhospstate = '0' AND a.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex |
| | | ORDER BY b.starttime DESC, b.bed_no ASC |
| | | LIMIT 20; |
| | | |
| | | -- 8.0.17+ ææï¼ç´æ¥ç»åºæ¯ä¸ªç®åçå®é
è¡æ°/èæ¶ï¼æ¯ EXPLAIN æç¨å¾å¤ |
| | | -- EXPLAIN ANALYZE |
| | | -- SELECT ... (åä¸é¢è¿æ¡) |
| | | |
| | | -- ç EXPLAIN æ¶åªç¯ 4 åï¼ |
| | | -- table : 第ä¸è¡æ¯ä¸æ¯ bï¼å¦æç¬¬ä¸è¡æ¯ aï¼è¯´æä¼åå¨åç驱å¨ï¼æåæ
åµï¼ |
| | | -- type : ALL / index = å
¨æ«ï¼é®é¢ï¼ï¼ref / range = èµ°ç´¢å¼ï¼æ£å¸¸ï¼ |
| | | -- key : å½ä¸çç´¢å¼åï¼NULL = 没ç¨ç´¢å¼ |
| | | -- rows : ä¼°ç®æ«æè¡æ°ï¼å ä¸ä»¥ä¸å°±æ¯å
¨æºæåå²ï¼è¯´æå£å¾/ç´¢å¼ä»ä¸å¯¹ï¼ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 5) join é®ä¸è´æ§ï¼ç¬¬ 1 èç䏿ç½å°±è·è¿æ¡ï¼ç´æ¥ç»åº"ä¼ä¸ä¼éå¼è½¬æ¢"çç»è®ºï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT |
| | | b_col.COLUMN_TYPE AS b_patid_type, |
| | | b_col.COLLATION_NAME AS b_patid_collation, |
| | | a_col.COLUMN_TYPE AS a_id_type, |
| | | a_col.COLLATION_NAME AS a_id_collation, |
| | | CASE |
| | | WHEN a_col.COLUMN_TYPE = b_col.COLUMN_TYPE |
| | | AND IFNULL(a_col.COLLATION_NAME,'') = IFNULL(b_col.COLLATION_NAME,'') |
| | | THEN 'â
ä¸è´ï¼join å¯ä»¥ç¨ a.id 主é®' |
| | | ELSE 'â ä¸ä¸è´ -> join é®è¢«éå¼è½¬æ¢ï¼pat_archive å¯è½è¢«åå¤å
¨æ«' |
| | | END AS verdict |
| | | FROM (SELECT COLUMN_TYPE, COLLATION_NAME FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pat_med_inhosp' AND COLUMN_NAME = 'patid') b_col |
| | | JOIN (SELECT COLUMN_TYPE, COLLATION_NAME FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pat_archive' AND COLUMN_NAME = 'id') a_col; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- è¦è´´åæ¥çä¸è¥¿ï¼å¦æè¡¥äº inhospstate ä¹åè¿æ¯æ
¢ï¼æè¿ä¸ªé¡ºåºï¼æçäºçä¸é¡¹å°±å¤ï¼ï¼ |
| | | -- â 第 3 è 3a å 3g çç§æ°ï¼è¿ä¸¤ä¸ªä¸å¯¹æ¯å°±ç¥éç
å æ¯ä¸æ¯"å¨é¢å£å¾"ï¼ |
| | | -- ⡠第 2 è第ä¸ç»çå个æ°åï¼total_rows / in_by_endtime / in_by_state / conflict...ï¼ |
| | | -- ⢠第 4 è EXPLAIN ç table / type / key / rows åå |
| | | -- ⣠éè¦æ¶å补第 1 èç´¢å¼æ¸
åä¸ç¬¬ 5 èç join é®ä¸è´æ§ç»è®º |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- /smartor/serviceSubtask/getSfStatisticsCountDetails æ
¢æ¥è¯¢ä¼åï¼ååéä¸ nhfyï¼ |
| | | -- 2026-11-02 |
| | | -- |
| | | -- ãç°è±¡ã满æåº¦ç»è®¡é¡µç¹âæ¥ç详æ
âè¦çåå ç§å°äºåå ç§ã |
| | | -- 请æ±ï¼{ "configKey":"joyCount", "leavehospitaldistrictcodes":["40003514"], |
| | | -- "serviceType":[6], "pageNum":1, "pageSize":20 } |
| | | -- |
| | | -- ãè¿æ¡æ¥å£å®é
åäº 5 æ¡ SQLã |
| | | -- ServiceSubtaskServiceImpl#getSfStatisticsScriptDetails å¨ type 为空æ¶ä¼è·ä¸¤è¶ï¼ |
| | | -- type=1(è¯é³) â getSfStatisticsScriptDetails + getSfStatisticsScriptItemDetails |
| | | -- type=2(é®å·) â getSfStatisticsScriptDetails + getSfStatisticsScriptItemDetails |
| | | -- controller ä¸è¿æ PageUtils.startPageByPost(...)ï¼PageHelper ä¼å¯¹ç¬¬ä¸æ¡åè¡¥ä¸æ¬¡ COUNTã |
| | | -- æ¯ä¸æ¡é½å¨ service_subtask_detailï¼38 ä¸è¡ï¼ä¸åãåä»»å¡ JOIN é¢ç®æç» GROUP BYãã |
| | | -- |
| | | -- ãæ ¹å ï¼è°è¯æåå
å¨å½æ°éï¼ç´¢å¼å
¨åºã |
| | | -- 为äºãåºé¢ç
åºä¸ºç©ºåéå°å¨é¢ç
åºãï¼æ¡ä»¶åæäº |
| | | -- AND IFNULL(ss.leavehospitaldistrictcode, ss.hospitaldistrictcode) IN ('40003514') |
| | | -- å被 IFNULL å
ä½ â ä¼åå¨ç¨ä¸äºä»»ä½ç´¢å¼ï¼åªè½ orgid='20001001' ç 27864 æ¡åä»»å¡å
¨æ«ï¼ |
| | | -- æ¯æ¡åå» detail 表æ sub_id æ 11 è¡ï¼â30 ä¸è¡éæºè¯»ï¼ã |
| | | -- EXPLAIN 宿µï¼ss èµ° idx_service_subtask_orgid_visit_timeï¼rows=27864ã |
| | | -- |
| | | -- ãæ¹æ³ 1ï¼è°è¯å±å¼æçä»·ç ORï¼è®©ç´¢å¼å¯ç¨ã |
| | | -- AND (ss.leavehospitaldistrictcode IN ('40003514') |
| | | -- OR (ss.leavehospitaldistrictcode IS NULL AND ss.hospitaldistrictcode IN ('40003514'))) |
| | | -- è¯ä¹ä¸ IFNULL å®å
¨çä»·ï¼4 个ç
åºé䏿¯å¯¹æç»è¡æ°ï¼8873/95/4307/8550 å
¨é¨ä¸è´ï¼ã |
| | | -- åªåè¿ä¸æ¥ï¼ä¸å ç´¢å¼ï¼ï¼5.1s â 1.9sï¼æ§è¡è®¡ååæ ref_or_nullï¼rows 27864 â 3644ã |
| | | -- |
| | | -- ãæ¹æ³ 2ï¼è¡¥ä¸¤ä¸ªç´¢å¼ï¼æèå´åæ¶çªã |
| | | -- æç»é¡µåºå®æ (ç
åº, service_type, type) è¿æ»¤ï¼åæ¥æ²¡æä»»ä½ç´¢å¼è½è¦çè¿ä¸ªç»å |
| | | -- ï¼service_subtask ä¸åªæåå indexï¼æ visit_time æå¤´çå¤åç´¢å¼ï¼ã |
| | | -- |
| | | -- 离é¢ç
åºï¼å«ç©ºå¼åéï¼â idx_ss_district_pair |
| | | -- å¨é¢ç
åº â idx_ss_hosp_dist_svc_type |
| | | -- |
| | | -- ã宿µï¼192.168.99.192 / smartor_nhfyï¼å䏿¡ä»¶ä¸çåæ¡ SQLï¼ã |
| | | -- 离é¢ç
åº 40003514ï¼5120ms â 1593ms(å·) / 728ms(ç) |
| | | -- å¨é¢ç
åº 40003514ï¼4750ms â 1854ms |
| | | -- æç»é项ç»è®¡ ï¼6183ms â 629~1104ms |
| | | -- 䏿¬¡è°ç¨ 5 æ¡ SQL å计ï¼â23s â â2s |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãä¸ãDDLï¼æ¯ä¸ªç¯å¢é½è¦åç¬æ§è¡ï¼MySQL 8 æ¯æ Online DDLï¼ä¸ä¼éè¡¨ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE service_subtask |
| | | -- ADD INDEX idx_ss_district_pair |
| | | -- (leavehospitaldistrictcode, hospitaldistrictcode, service_type, type, del_flag), |
| | | -- ADD INDEX idx_ss_hosp_dist_svc_type |
| | | -- (hospitaldistrictcode, service_type, type, del_flag); |
| | | |
| | | -- åç¬æ§è¡åæ³ï¼å·²å¨ 192.168.99.192 æ§è¡è¿ï¼ä¸¤æ¡å 5~8 ç§ï¼ï¼ |
| | | -- CREATE INDEX idx_ss_district_pair ON service_subtask (leavehospitaldistrictcode, hospitaldistrictcode, service_type, type, del_flag); |
| | | -- CREATE INDEX idx_ss_hosp_dist_svc_type ON service_subtask (hospitaldistrictcode, service_type, type, del_flag); |
| | | |
| | | -- åæ»ï¼ |
| | | -- DROP INDEX idx_ss_district_pair ON service_subtask; |
| | | -- DROP INDEX idx_ss_hosp_dist_svc_type ON service_subtask; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãäºãéªè¯æ§è¡è®¡åï¼æ§è¡ DDL ååºçå° key = idx_ss_district_pair / idx_ss_hosp_dist_svc_typeï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- EXPLAIN |
| | | -- SELECT ssd.scriptid, COUNT(*) AS all_quantity |
| | | -- FROM service_subtask_detail ssd |
| | | -- INNER JOIN service_subtask ss ON ssd.sub_id = ss.id |
| | | -- WHERE ss.del_flag = 0 AND ssd.del_flag = 0 |
| | | -- AND ss.orgid = '20001001' AND ss.campusid = '30001002' |
| | | -- AND (ss.leavehospitaldistrictcode IN ('40003514') |
| | | -- OR (ss.leavehospitaldistrictcode IS NULL AND ss.hospitaldistrictcode IN ('40003514'))) |
| | | -- AND ss.service_type IN (6) AND ss.type = '2' |
| | | -- AND ssd.categoryid IN (62,1000000012,5,1000000015,465) |
| | | -- GROUP BY ssd.scriptid; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãä¸ãçä»·æ§èªæ£ï¼æ¢åæ³ååæ¯ä¸ªç
åºçæç»è¡æ°å¿
须䏿¨¡ä¸æ · |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SELECT w.code, |
| | | -- (SELECT COUNT(*) FROM service_subtask ss JOIN service_subtask_detail ssd ON ssd.sub_id = ss.id |
| | | -- WHERE ss.del_flag=0 AND ssd.del_flag=0 |
| | | -- AND ss.orgid='20001001' AND ss.campusid='30001002' |
| | | -- AND ss.service_type IN (6) AND ss.type='2' |
| | | -- AND IFNULL(ss.leavehospitaldistrictcode, ss.hospitaldistrictcode) IN (w.code)) AS ifnull_rows, |
| | | -- (SELECT COUNT(*) FROM service_subtask ss JOIN service_subtask_detail ssd ON ssd.sub_id = ss.id |
| | | -- WHERE ss.del_flag=0 AND ssd.del_flag=0 |
| | | -- AND ss.orgid='20001001' AND ss.campusid='30001002' |
| | | -- AND ss.service_type IN (6) AND ss.type='2' |
| | | -- AND (ss.leavehospitaldistrictcode IN (w.code) |
| | | -- OR (ss.leavehospitaldistrictcode IS NULL AND ss.hospitaldistrictcode IN (w.code)))) AS or_rows |
| | | -- FROM (SELECT '40003514' AS code UNION ALL SELECT '40003309' |
| | | -- UNION ALL SELECT '40011024' UNION ALL SELECT '40003317') w; |
| | | -- 宿µï¼8873/8873ã95/95ã4307/4307ã8550/8550 ââ å®å
¨ä¸è´ã |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãåãè¿æ²¡è§£å³ç两ç¹ï¼éè¦ä¸å¡/å端é
åï¼æ¬æ¬¡æªå¨ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 1) type 为空æ¶åºå®è·ä¸¤è¶ï¼è¯é³ + é®å·ï¼ãååæ»¡æåº¦åªå¯è½æ¯é®å·(type=2)ï¼ |
| | | -- è¯é³é£ä¸è¶æä¸º 0 è¡ãç°å¨æç´¢å¼åå®åªè¦ ~120msï¼å¯ä»¥æ¥åï¼ |
| | | -- è¥è¦å½»åºçæï¼è®©å端æç¡®ä¼ typeï¼æå端æ serviceType æ¨æã |
| | | -- 2) PageHelper ç COUNT ä¼å¯¹å䏿¡éæ¥è¯¢åè·ä¸éãè¿ä¸ªç»æéåªæ 19 è¡ï¼ |
| | | -- å
¶å®ä¸éè¦å页ãè¦çå°±å¾å»æ startPageByPostï¼æ¥å£è¿åç»æä¼åï¼å
ä¸å¨ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- service_subtask åæ®µæ¹åï¼åºé¢ç»´åº¦ â leavel*ï¼å¤ç¨ sendlimit* 空å â å¨é¢ç
åº / å¨é¢ç§å®¤ï¼ |
| | | -- çææ¥æï¼2026-11-06 |
| | | -- éç¨ï¼MySQL 8.0ï¼æ¬ä»åº SQL ç¨å° JSON_TABLEï¼5.7 è§ææ«ãå
¼å®¹åæ³ãï¼ |
| | | -- |
| | | -- æ¹åæ å°ï¼ |
| | | -- deptcode â leaveldeptcode ï¼åæè¯ä¹ = åºé¢ç§å®¤ï¼ |
| | | -- deptname â leaveldeptname |
| | | -- sendlimitabegin â hospitaldistrictcodeï¼åãä¸åå¼å§åéæ¶é´éå¶ãï¼4 ååæªè¢«ä¸å¡è¯»åï¼ |
| | | -- sendlimitaend â hospitaldistrictnameï¼å¤ç¨ä¸ºãå¨é¢ç
åºãï¼å pat_med_inhosp.hospitaldistrictcodeï¼ |
| | | -- sendlimitpbegin â deptcode ï¼å¤ç¨ä¸ºãå¨é¢ç§å®¤ãï¼ |
| | | -- sendlimitpend â deptname |
| | | -- sendlimitnbegin / sendlimitnend â ä¿çä¸å¨ |
| | | -- |
| | | -- â ï¸ é¡ºåºä¸è½é¢ åï¼å
æ deptcode/deptname è
¾åºæ¥ï¼åæ sendlimit* æ¹æè¿ä¸¤ä¸ªååã |
| | | -- â ï¸ RENAME COLUMN åå°ä¿çæ°æ®ï¼æ§æ°æ®çåºé¢ç§å®¤ä¼èªå¨è·å° leaveldeptcode/leaveldeptnameã |
| | | -- ============================================================================ |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 0) å
çç°ç¶ï¼æç»æè´´åºæ¥ï¼æ ¸å¯¹é¿åº¦/ç±»åã确认 sendlimit* æ¯å¦åå¨ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SHOW FULL COLUMNS FROM service_subtask LIKE '%dept%'; |
| | | SHOW FULL COLUMNS FROM service_subtask LIKE 'sendlimit%'; |
| | | SHOW FULL COLUMNS FROM pat_med_inhosp LIKE '%leaveldept%'; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 0.5) å¤ä»½ï¼å¯éä½å¼ºçå»ºè®®ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- CREATE TABLE bak_service_subtask_rename_20261106 LIKE service_subtask; |
| | | -- INSERT INTO bak_service_subtask_rename_20261106 SELECT * FROM service_subtask; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 1) åºé¢ç»´åº¦æ¹åï¼è
¾åº deptcode / deptname 两个ååï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | RENAME COLUMN deptcode TO leaveldeptcode, |
| | | RENAME COLUMN deptname TO leaveldeptname; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 2) 4 个空é²åæ¹ææ°è¯ä¹ |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | RENAME COLUMN sendlimitabegin TO hospitaldistrictcode, |
| | | RENAME COLUMN sendlimitaend TO hospitaldistrictname, |
| | | RENAME COLUMN sendlimitpbegin TO deptcode, |
| | | RENAME COLUMN sendlimitpend TO deptname; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 3) é¿åº¦/ç±»åæ ¡åï¼å¿
é¡»ï¼ |
| | | -- RENAME COLUMN 伿²¿ç¨ sendlimit* 忥çç±»åï¼éå¸¸æ¯ VARCHAR(10) çè³ TIMEï¼ï¼ |
| | | -- è£
å¨é¢ç§å®¤/å¨é¢ç
åºç¼ç ä¸åç§°ä¼ä¸å¤ãä¸é¢ææ¨èé¿åº¦æ¾å¤§ï¼ä¸ä¼ç¼©å°å·²æåã |
| | | -- è¥ä½ åºé deptcode/deptname åæ¥æ¯æ´é¿ç VARCHAR(255)ï¼è¯·æ 64/128 è°å¤§è䏿¯è°å°ã |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | MODIFY COLUMN hospitaldistrictcode VARCHAR(64) NULL COMMENT 'å¨é¢ç
åºç¼ç ï¼å sendlimitabeginï¼', |
| | | MODIFY COLUMN hospitaldistrictname VARCHAR(128) NULL COMMENT 'å¨é¢ç
åºåç§°ï¼å sendlimitaendï¼', |
| | | MODIFY COLUMN deptcode VARCHAR(64) NULL COMMENT 'å¨é¢ç§å®¤ç¼ç ï¼å sendlimitpbeginï¼', |
| | | MODIFY COLUMN deptname VARCHAR(128) NULL COMMENT 'å¨é¢ç§å®¤åç§°ï¼å sendlimitpendï¼'; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 3.5) å¦æç¬¬ 3 æ¥ä¹åå·²ç»æ§è¡è¿ï¼å注éåæäºãé¢åºãï¼ï¼åªä¿®æ³¨éãä¸å¨æ°æ®ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE service_subtask |
| | | -- MODIFY COLUMN hospitaldistrictcode VARCHAR(64) NULL COMMENT 'å¨é¢ç
åºç¼ç ï¼å sendlimitabeginï¼', |
| | | -- MODIFY COLUMN hospitaldistrictname VARCHAR(128) NULL COMMENT 'å¨é¢ç
åºåç§°ï¼å sendlimitaendï¼'; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 4) æ¸
æ sendlimit* å¯è½æ®ççæ¶é´ä¸²ï¼å¦ '08:00:00'ï¼ |
| | | -- å
SELECT 确认è¿äºåæ¬æ¥å°±æ æææ°æ®ï¼åæ§è¡ UPDATEã |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SELECT COUNT(*) AS total, |
| | | -- SUM(hospitaldistrictcode IS NOT NULL AND hospitaldistrictcode <> '') AS hd_code, |
| | | -- SUM(hospitaldistrictname IS NOT NULL AND hospitaldistrictname <> '') AS hd_name, |
| | | -- SUM(deptcode IS NOT NULL AND deptcode <> '') AS dept_code, |
| | | -- SUM(deptname IS NOT NULL AND deptname <> '') AS dept_name |
| | | -- FROM service_subtask; |
| | | -- UPDATE service_subtask |
| | | -- SET hospitaldistrictcode = NULL, hospitaldistrictname = NULL, |
| | | -- deptcode = NULL, deptname = NULL; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 5) æ ¸å¯¹ |
| | | -- ---------------------------------------------------------------------------- |
| | | SHOW FULL COLUMNS FROM service_subtask LIKE '%dept%'; |
| | | SHOW FULL COLUMNS FROM service_subtask LIKE 'hospitaldistrict%'; |
| | | |
| | | -- ============================================================================ |
| | | -- å¤é Aï¼sendlimit* åå¨åºéä¸åå¨ï¼ç¬¬ 2 æ¥æ¥ 1054ï¼æ¶ï¼æ¹ææ°å¢ |
| | | -- ============================================================================ |
| | | -- ALTER TABLE service_subtask |
| | | -- ADD COLUMN hospitaldistrictcode VARCHAR(64) NULL COMMENT 'é¢åº/ç
åºç¼ç ', |
| | | -- ADD COLUMN hospitaldistrictname VARCHAR(128) NULL COMMENT 'é¢åº/ç
åºåç§°', |
| | | -- ADD COLUMN deptcode VARCHAR(64) NULL COMMENT 'ç§å®¤ç¼ç ï¼å
¥é¢/å¨é¢ç»´åº¦ï¼', |
| | | -- ADD COLUMN deptname VARCHAR(128) NULL COMMENT 'ç§å®¤åç§°ï¼å
¥é¢/å¨é¢ç»´åº¦ï¼'; |
| | | |
| | | -- ============================================================================ |
| | | -- å¤é Bï¼MySQL 5.7ï¼ä¸æ¯æ RENAME COLUMNï¼â ç¨ CHANGEï¼å®ä¹è¦ä¸ååä¸è´ |
| | | -- ============================================================================ |
| | | -- ALTER TABLE service_subtask |
| | | -- CHANGE COLUMN deptcode leaveldeptcode <å deptcode ç±»å> NULL COMMENT 'åºé¢ç§å®¤ç¼ç ', |
| | | -- CHANGE COLUMN deptname leaveldeptname <å deptname ç±»å> NULL COMMENT 'åºé¢ç§å®¤åç§°', |
| | | -- CHANGE COLUMN sendlimitabegin hospitaldistrictcode VARCHAR(64) NULL COMMENT 'é¢åº/ç
åºç¼ç ', |
| | | -- CHANGE COLUMN sendlimitaend hospitaldistrictname VARCHAR(128) NULL COMMENT 'é¢åº/ç
åºåç§°', |
| | | -- CHANGE COLUMN sendlimitpbegin deptcode VARCHAR(64) NULL COMMENT 'ç§å®¤ç¼ç ', |
| | | -- CHANGE COLUMN sendlimitpend deptname VARCHAR(128) NULL COMMENT 'ç§å®¤åç§°'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================= |
| | | -- å¤é¾çç æ¹é ï¼2026-11-06ï¼ |
| | | -- åçç ï¼String.format("%03X", id) ââ 3~4 ä½åå
è¿å¶ï¼çäºæèªå¢ä¸»é®åè¿é¾æ¥ï¼å¯éå |
| | | -- æ°çç ï¼ShortCode.encode(id) ââ åºå® 6 ä½ base62ï¼å¸¦å¯é¥ Feistel åå°ï¼ä¸å¯æä¸¾ |
| | | -- |
| | | -- â ï¸ æ§è¡é¡ºåºï¼**å
æ§è¡æ¬èæ¬ç¬¬ 2 æ¥ï¼åå叿°çæ¬ç jar**ã |
| | | -- å¦åå 6 ä½çç æ¶ï¼ |
| | | -- * MySQL ä¸¥æ ¼æ¨¡å¼ï¼5.7+ é»è®¤ï¼â UPDATE æ¥ "Data too long for column 'radix'"ï¼çä¿¡åä¸åºå»ï¼ |
| | | -- * éä¸¥æ ¼æ¨¡å¼ â é黿ªææ 4 ä½ï¼radix ååèæ°æ® |
| | | -- ï¼çº¿ä¸è¿è½é getInfoByParam å解主é®å
åºï¼ä½ä¸åºä¾èµè¿ä¸ªå
åºï¼ã |
| | | -- |
| | | -- æ¬èæ¬å¯é夿§è¡ã |
| | | -- ============================================================================= |
| | | |
| | | -- 1) å
çå½ååå®ä¹ï¼è®°å½åå§å¼ï¼ä¾¿äºåæ»ï¼ |
| | | SHOW COLUMNS FROM service_out_path LIKE 'radix'; |
| | | |
| | | -- 2) å宽ä¸è¶³ 6 使¶æ§è¡ï¼å·² >= 16 ä½å¯æ´å¥è·³è¿ |
| | | ALTER TABLE service_out_path |
| | | MODIFY COLUMN radix VARCHAR(16) NULL |
| | | COMMENT 'å¤é¾çç ï¼æ°æ°æ®ä¸º 6 ä½ base62ï¼å岿°æ®ä¸º 3~5 ä½åå
è¿å¶ï¼getInfoByParam 两ç§é½è®¤'; |
| | | |
| | | -- 3) æ§è¡åæ ¸å¯¹ |
| | | SHOW COLUMNS FROM service_out_path LIKE 'radix'; |
| | | |
| | | -- 4) è§å¯åéåå¸ï¼ä¸çº¿åæ°äº§çççç åºå
¨é¨æ¯ 6 ä½ï¼ |
| | | -- SELECT CHAR_LENGTH(radix) AS len, COUNT(*) AS cnt |
| | | -- FROM service_out_path |
| | | -- WHERE radix IS NOT NULL AND radix <> '' |
| | | -- GROUP BY CHAR_LENGTH(radix) |
| | | -- ORDER BY len; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================================== |
| | | -- service_subtask ç´¢å¼ä¼åèæ¬ |
| | | -- ç®æ æ¥å£ï¼POST /smartor/serviceSubtask/patItemï¼åå
±ç¨åä¸å¥ SQL ç /patItemCountã/patItemExportï¼ |
| | | -- |
| | | -- æ¶åçä¸¤æ¡ SQLï¼é½å¨ ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xmlï¼ï¼ |
| | | -- 1) id = selectServiceSubtaskList ââ å表ï¼çº¦ 100 å + order by + limit offset |
| | | -- 2) id = countByCondition ââ åä¸å¥ where ç SUM èåï¼Redis æªå½ä¸æ¶æ§è¡ï¼ |
| | | -- |
| | | -- å
¼å®¹æ§ï¼MySQL 5.7 / 8.0 å坿§è¡ã |
| | | -- * 5.7 䏿¯æéåºç´¢å¼ï¼ä½ ASC ç´¢å¼å¯è¢«ååæ«æï¼order by ... desc åæ ·è½ç¨ï¼æ éé¢å¤å¤çï¼ |
| | | -- * 5.7 没æ EXPLAIN ANALYZEï¼éªè¯ç¨ææ«ç EXPLAIN + Handler ç¶æåéã |
| | | -- ===================================================================== |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 0. æ§è¡åå
çç°ç¶ï¼é¿å
éå¤å»ºç´¢å¼ / ç¡®è®¤æ°æ®éä¸åç±»åï¼ |
| | | -- --------------------------------------------------------------------- |
| | | SHOW INDEX FROM service_subtask; |
| | | |
| | | SELECT COUNT(*) AS total_rows FROM service_subtask; |
| | | |
| | | SELECT COLUMN_NAME, COLUMN_TYPE |
| | | FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'service_subtask' |
| | | AND COLUMN_NAME IN ('orgid', 'campusid', 'del_flag', 'endtime', |
| | | 'visit_time', 'sendstate', 'taskid', 'create_time', |
| | | 'patid', 'inhospid', 'schedule_id', 'loop_count'); |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 1. å¿
å ï¼å表主æ¥è¯¢ / èåçå
Œ
±åç¼ + æåº |
| | | -- |
| | | -- where åºå®æ¯ del_flag = 0 AND orgid = ? AND campusid = ?ï¼Controller å¼ºå¶æ³¨å
¥ï¼ |
| | | -- order by é»è®¤æ¯ endtime asc/desc |
| | | -- â å½ä¸å order by ä¸å filesortï¼ä¸ limit å¯ä»¥æåæªæï¼ |
| | | -- åæ¶è®© countByCondition ä»ãå
¨è¡¨æ«æãé为ãä¸ä¸ªæºæ+é¢åºçèå´æ«æãã |
| | | -- --------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_org_cam_del_endtime (orgid, campusid, del_flag, endtime), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 2. å¿
å ï¼æé访æ¶é´æåº/çéï¼sort=2/3/7/8ï¼ä»¥å startSendDateTime/endSendDateTime åºé´ï¼ |
| | | -- 注ï¼è¿ä¸¤ä¸ªåºé´æ¡ä»¶å·²ç± date_format(...) æ¹å为å¯èµ°ç´¢å¼çèå´æ¯è¾ã |
| | | -- --------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_org_cam_del_vtime (orgid, campusid, del_flag, visit_time), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 3. å¿
å ï¼ç¶æé¡µç¾ï¼sendstateView â sendstate IN (1,2,3,5,7) / (6) / (4)ï¼ |
| | | -- ç¨æ·æå¸¸ç¹çå°±æ¯ãå¾
é访 / 已宿 / æ éé访ãä¸ä¸ª tabã |
| | | -- --------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_org_cam_del_state_end (orgid, campusid, del_flag, sendstate, endtime), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 4. 建议ï¼ä»»å¡ç»´åº¦ä¸é»ï¼taskid æ¯è¿å¼ 表æé«é¢çç弿¡ä»¶ï¼ |
| | | -- --------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_org_cam_del_task (orgid, campusid, del_flag, taskid), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 5. 建议ï¼create_time åºé´ |
| | | -- ä¾ selectServiceSubtaskListByCreateTime / selectServiceSubtaskListAgain 使ç¨ã |
| | | -- --------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_org_cam_del_ctime (orgid, campusid, del_flag, create_time), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 6. å»ºè®®ï¼æ£è
/ ä½é¢è®°å½åæ¥ï¼æ£è
端ã忬¡é访ã转ç§é¾è·¯ï¼ |
| | | -- --------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_patid (patid), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_inhospid (inhospid), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 7. 建议ï¼ä»»å¡ç»æ»å¨è°åº¦ï¼countActiveByScheduleIdAndLoopï¼è·å¾é常å¤ï¼ |
| | | -- --------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask |
| | | ADD INDEX idx_ss_sched_loop (schedule_id, loop_count), |
| | | ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 8. å¯éï¼è®© countByCondition åæè¦çç´¢å¼ï¼ç´¢å¼å
宿èåï¼ä¸åè¡¨ï¼ |
| | | -- åªæå½ Redis å½ä¸çä½ãç»è®¡æ¥å£ä»ç¶æ
¢æ¶æå ã |
| | | -- 代价ï¼service_subtask åå
¥é¢ç¹ï¼å¤ä¸ä¸ªå®½ç´¢å¼ä¼å 大åå
¥å¼éã |
| | | -- --------------------------------------------------------------------- |
| | | -- ALTER TABLE service_subtask |
| | | -- ADD INDEX idx_ss_org_cam_del_state_excep (orgid, campusid, del_flag, sendstate, excep), |
| | | -- ALGORITHM = INPLACE, LOCK = NONE; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 9. æ¶å°¾ï¼æ´æ°ç»è®¡ä¿¡æ¯ï¼è®©ä¼åå¨ç«å»ç¨ä¸æ°ç´¢å¼ |
| | | -- --------------------------------------------------------------------- |
| | | ANALYZE TABLE service_subtask; |
| | | |
| | | -- ===================================================================== |
| | | -- éªè¯ï¼MySQL 5.7 å¯ç¨ï¼ |
| | | -- ===================================================================== |
| | | |
| | | -- 9.1 å表主æ¥è¯¢ï¼ææ key = idx_ss_org_cam_del_endtimeï¼Extra éãæ²¡æãUsing filesort |
| | | EXPLAIN |
| | | SELECT id, endtime |
| | | FROM service_subtask |
| | | WHERE del_flag = 0 |
| | | AND orgid = 'è¿éæ¢æçå® orgid' |
| | | AND campusid = 'è¿éæ¢æçå® campusid' |
| | | ORDER BY endtime DESC |
| | | LIMIT 20 OFFSET 0; |
| | | |
| | | -- 9.2 ç¶æé¡µç¾ï¼ææ key = idx_ss_org_cam_del_state_end |
| | | EXPLAIN |
| | | SELECT id, endtime |
| | | FROM service_subtask |
| | | WHERE del_flag = 0 |
| | | AND orgid = 'è¿éæ¢æçå® orgid' |
| | | AND campusid = 'è¿éæ¢æçå® campusid' |
| | | AND sendstate IN (1, 2, 3, 5, 7) |
| | | ORDER BY endtime DESC |
| | | LIMIT 20 OFFSET 0; |
| | | |
| | | -- 9.3 å®é
æ«æé对æ¯ï¼æ§è¡åååè·ä¸æ¬¡ï¼ç Handler_read_next æ¯å¦å¤§å¹
ä¸éï¼ |
| | | FLUSH STATUS; |
| | | SELECT COUNT(1) FROM service_subtask |
| | | WHERE del_flag = 0 AND orgid = 'è¿éæ¢æçå® orgid' AND campusid = 'è¿éæ¢æçå® campusid'; |
| | | SHOW SESSION STATUS LIKE 'Handler_read%'; |
| | | |
| | | -- ===================================================================== |
| | | -- åæ» |
| | | -- ===================================================================== |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_org_cam_del_endtime; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_org_cam_del_vtime; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_org_cam_del_state_end; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_org_cam_del_task; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_org_cam_del_ctime; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_patid; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_inhospid; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_sched_loop; |
| | | -- ALTER TABLE service_subtask DROP INDEX idx_ss_org_cam_del_state_excep; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- smartor_sltd æ°æ®åº 满æåº¦ç»´åº¦ç»è®¡æ¥å£æ§è½ä¼å ââ ç´¢å¼èæ¬ |
| | | -- çææ¥æ: 20260924 |
| | | -- ç®æ æ¥å£: POST /smartor/serviceSubtaskDetail/sltdMydTotalByDimension |
| | | -- (dimensiontType=1 â ServiceSubtaskMapper.sltdMydTotalByDimension |
| | | -- dimensiontType=2 â ServiceSubtaskMapper.sltdMydTotalByYQï¼åæ ·åç) |
| | | -- ç®æ SQL: smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml:3050 |
| | | -- |
| | | -- ãé®é¢å®ä½ãï¼çº¿ä¸åºå®æµï¼MySQL 5.7.34ï¼service_subtask_detail 102,249 è¡ / |
| | | -- service_task 153 è¡ï¼ä¸¤å¼ 表é¤ä¸»é®å¤æ²¡æä»»ä½äºçº§ç´¢å¼ï¼ |
| | | -- |
| | | -- EXPLAIN ç»ææ¾ç¤º 4 个访é®è·¯å¾å
¨é¨æ¯ type=ALL å
¨è¡¨æ«æ + Block Nested Loopï¼ |
| | | -- id=2 DERIVED service_subtask_detail ALL rows=101778 -- period æ¶é´æ®µåæ¥è¯¢ |
| | | -- id=3 DERIVED service_subtask_detail ALL rows=101778 -- dimension ç»´åº¦åæ¥è¯¢ |
| | | -- id=1 PRIMARY t (service_task) ALL rows=153 |
| | | -- id=1 PRIMARY d (service_subtask_detail) ALL rows=101778 -- Using join buffer |
| | | -- |
| | | -- å³ï¼ä¸»æ¥è¯¢é d.taskid = t.taskid 没æç´¢å¼ï¼102,778 è¡çæç»è¡¨è¢«å½æ BNL å
表 |
| | | -- åå¤å
¨è¡¨æ«æï¼è¿æ¯æ¥å£æ
¢çæ ¹æ¬åå ï¼ä¸¤ä¸ªæ´¾ç表ä¹åèªå
¨è¡¨æ«æä¸æ¬¡ã |
| | | -- ============================================================================ |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãæ§è¡åæ£æ¥ã确认å½åç¡®å®æ²¡æè¿äºç´¢å¼ï¼æ£å¸¸åºåªçå° PRIMARYï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- SHOW INDEX FROM service_subtask_detail; |
| | | -- SHOW INDEX FROM service_task; |
| | | -- SELECT COUNT(*) FROM service_subtask_detail; -- 约 10 ä¸è¡ï¼å ç´¢å¼çº¦é 10~60 ç§ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãæ¥éª¤ 1ãservice_subtask_detail å¢å 3 ä¸ªç´¢å¼ |
| | | -- |
| | | -- 1) idx_ssd_taskid_flag_dim_ct (taskid, del_flag, dimension, create_time) |
| | | -- ç¨éï¼ä¸»æ¥è¯¢ç JOIN æ¡ä»¶ d.taskid = t.taskid |
| | | -- + d.del_flag = '0' + d.dimension = dim.dimensionï¼çå¼ï¼ |
| | | -- + d.create_time åºé´ï¼èå´ï¼ã |
| | | -- ææï¼ç±ãå
¨è¡¨æ«æ 10 ä¸è¡ãåä¸ºãæ taskid 精确å®ä½çº¦ 700 è¡ãã |
| | | -- |
| | | -- 2) idx_ssd_ct_flag (create_time, del_flag) |
| | | -- ç¨éï¼period æ¶é´æ®µåæ¥è¯¢ |
| | | -- WHERE del_flag='0' AND create_time >= ? AND create_time < ? |
| | | -- ææï¼create_time èµ°èå´æ«æï¼del_flag è½å¨ç´¢å¼ç¬¬äºä½ä½ä»å¯å |
| | | -- Index Condition Pushdown è¿æ»¤ï¼ä¸å¿
å表ï¼çæ 10 ä¸è¡å表ã |
| | | -- ï¼æ³¨æï¼del_flag å¿
é¡»æ¾ç¬¬äºä½ï¼æ create_time æ¾ç¬¬ä¸ä½æè½ç¨ä¸èå´æ«æï¼ |
| | | -- |
| | | -- 3) idx_ssd_flag_dim (del_flag, dimension) |
| | | -- ç¨éï¼dim ç»´åº¦åæ¥è¯¢ |
| | | -- SELECT DISTINCT dimension FROM service_subtask_detail |
| | | -- WHERE del_flag='0' AND dimension IS NOT NULL |
| | | -- ææï¼ç´¢å¼è¦çè¯¥åæ¥è¯¢ï¼å¯èµ°æ¾æ£ç´¢å¼æ«æï¼Using index for group-byï¼ï¼ |
| | | -- dimension åªæ 16 个ä¸åå¼ï¼åºæ¬ç¬é´è¿åã |
| | | -- |
| | | -- MySQL 5.7 ç ALTER TABLE å äºçº§ç´¢å¼æ¯æ ONLINE DDLï¼ä¸é表ãä¸é»å¡è¯»åï¼ï¼ |
| | | -- ä¸é¢æ¾å¼å£°æ ALGORITHM=INPLACE, LOCK=NONEï¼ä¸æ¡ç´¢å¼æ¾å¨å䏿¡ ALTER éï¼ |
| | | -- åªéæ«æä¸æ¬¡è¡¨ï¼æ¯å弿§è¡å¿«ãè¥ä¸éæ¥é䏿¯æï¼å»æè¿ä¸¤ä¸ªé项éè¯å³å¯ã |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE service_subtask_detail |
| | | ADD INDEX idx_ssd_taskid_flag_dim_ct (taskid, del_flag, dimension, create_time), |
| | | ADD INDEX idx_ssd_ct_flag (create_time, del_flag), |
| | | ADD INDEX idx_ssd_flag_dim (del_flag, dimension), |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãæ¥éª¤ 2ãservice_task å¢å 1 ä¸ªç´¢å¼ |
| | | -- |
| | | -- 4) idx_st_type_flag (service_type, del_flag) |
| | | -- ç¨éï¼LEFT JOIN service_task t ON t.service_type IN (6,14) AND t.del_flag='0' |
| | | -- ææï¼service_task åªæ 153 è¡ï¼æ¶çæéï¼153 è¡ â 46 è¡ï¼ï¼ |
| | | -- ä½è½è®©è¯¥è¡¨ä¹èµ°ç´¢å¼ãé¿å
ä½ä¸º BNL å¤è¡¨å
¨æ«ï¼å±äºé¡ºå¸¦ä¼åã |
| | | -- ---------------------------------------------------------------------------- |
| | | ALTER TABLE service_task |
| | | ADD INDEX idx_st_type_flag (service_type, del_flag), |
| | | ALGORITHM = INPLACE, |
| | | LOCK = NONE; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãæ¥éª¤ 3ãæ´æ°ç»è®¡ä¿¡æ¯ï¼å å®ç´¢å¼åæ§è¡ä¸æ¬¡ï¼è®©ä¼åå¨é对索å¼ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | ANALYZE TABLE service_subtask_detail; |
| | | ANALYZE TABLE service_task; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãéªè¯ãæ§è¡ä¸é¢ä¸¤æ¡ EXPLAINï¼å
³é®çï¼ |
| | | -- * ä¸ååºç° type=ALL å
¨è¡¨æ«æï¼é¤æ´¾ç表å¤ï¼ |
| | | -- * d è¡åºç° type=ref / key=idx_ssd_taskid_flag_dim_ct |
| | | -- * service_task è¡ key=idx_st_type_flag |
| | | -- ---------------------------------------------------------------------------- |
| | | -- EXPLAIN |
| | | -- SELECT p.period, dim.dimension, IFNULL(ROUND(SUM(d.score), 2), 0) AS totalScore |
| | | -- FROM (SELECT DISTINCT DATE_FORMAT(d.create_time, '%Y-%m') AS period |
| | | -- FROM service_subtask_detail d |
| | | -- WHERE d.del_flag = '0' AND d.create_time >= '2025-01-01' AND d.create_time < '2026-12-31') p |
| | | -- CROSS JOIN (SELECT DISTINCT dimension FROM service_subtask_detail |
| | | -- WHERE del_flag = '0' AND dimension IS NOT NULL) dim |
| | | -- LEFT JOIN service_task t ON t.service_type IN (6, 14) AND t.del_flag = '0' |
| | | -- LEFT JOIN service_subtask_detail d |
| | | -- ON d.taskid = t.taskid AND d.del_flag = '0' AND d.dimension = dim.dimension |
| | | -- AND DATE_FORMAT(d.create_time, '%Y-%m') = p.period |
| | | -- AND d.create_time >= '2025-01-01' AND d.create_time < '2026-12-31' |
| | | -- GROUP BY p.period, dim.dimension ORDER BY p.period, dim.dimension; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãåæ»ãå¦éæ¤éï¼æ§è¡ä»¥ä¸è¯å¥ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ALTER TABLE service_subtask_detail DROP INDEX idx_ssd_taskid_flag_dim_ct; |
| | | -- ALTER TABLE service_subtask_detail DROP INDEX idx_ssd_ct_flag; |
| | | -- ALTER TABLE service_subtask_detail DROP INDEX idx_ssd_flag_dim; |
| | | -- ALTER TABLE service_task DROP INDEX idx_st_type_flag; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ãéè¦ã代ç ä¾§å¿
é¡»åæ¥ä¿®æ£ del_flag çåæ³ï¼å¦åç´¢å¼åªè½ç¨ä¸ä¸å |
| | | -- |
| | | -- ServiceSubtaskMapper.xml ä¸åçæ¯ï¼ d.del_flag = 0 |
| | | -- ä½ del_flag çåç±»åæ¯ char(10)ï¼åå¼ '0' / '1'ï¼ã |
| | | -- MySQL å¨ãå符串å = æ°å常éãæ¶ä¼æ DOUBLE éå¼è½¬æ¢æ¯è¾ï¼ |
| | | -- 导è´è¯¥æ¡ä»¶æ æ³ä½ä¸ºç´¢å¼çç弿¡ä»¶ä½¿ç¨ï¼åªè½è¿æ»¤ï¼ä¸è½å®ä½ï¼ã |
| | | -- ä¸é¢ 3 个索å¼é del_flag 齿¯çå¼åï¼æ¹æä¸é¢è¿æ ·æç®çæ£çæï¼ |
| | | -- |
| | | -- d.del_flag = 0 â d.del_flag = '0' |
| | | -- del_flag = 0 â del_flag = '0' |
| | | -- t.del_flag = 0 â t.del_flag = '0' |
| | | -- |
| | | -- éç¨èå´ï¼å䏿件å
åæ ·é®é¢çæ¥è¯¢ï¼å»ºè®®ä¸èµ·æ¹ï¼ï¼ |
| | | -- * sltdMydTotalByDimension (3050 è¡éè¿) |
| | | -- * sltdMydTotalByYQ (3097 è¡éè¿) |
| | | -- * mydTrend (3030 è¡éè¿) |
| | | -- è¯ä¹å½±åï¼'0' ä¸ 0 çå¹é
ç»æå¨æ¬åºä¸å®å
¨ä¸è´ï¼del_flag 宿µåªæ '0'ã'1' |
| | | -- 两ç§åå¼ï¼æ NULLãæ ç©ºä¸²ï¼ï¼æ¹æå符串æ¯è¾ä¸ä¼æ¹åä¸å¡ç»æã |
| | | -- |
| | | -- å¦ï¼æ¬æ¥å£ä¸¤æ¡ SQL ç LEFT JOIN service_task t å颿²¡æè·ä»»ä½å
³èæ¡ä»¶ |
| | | -- ï¼ON éåªæ t èªå·±çè¿æ»¤æ¡ä»¶ï¼ï¼çä»·äºå
对 service_task å䏿¬¡è¿æ»¤å交å |
| | | -- è¿æ¥ï¼æ¬èº«åæ³ä¸è§èï¼æ¬æ¬¡åªå ç´¢å¼ãä¸å¨ SQLï¼é¿å
å½±åè¿åç»æã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- æãé®å·åºæ¨¡æ¿ãé¢ç®çé项é»è®¤å¼ï¼svy_lib_template_targetoption.default_valueï¼ |
| | | -- 忥å°ãé®å·ä»»å¡æ¨¡æ¿ãé¢ç®é项ï¼svy_task_template_targetoption.default_valueï¼ |
| | | -- |
| | | -- 表å说æï¼é®é¢é项çé»è®¤å¼å
¶å®ä¸å¨ script 表éï¼èå¨ option 表éï¼ï¼ |
| | | -- åº é¢ç® svy_lib_template_script ââ id â scriptid ââ åº é项 svy_lib_template_targetoption |
| | | -- ä»»å¡ é¢ç® svy_task_template_script ââ id â scriptid ââ ä»»å¡ é项 svy_task_template_targetoption |
| | | -- default_value è¯ä¹ï¼1=å¦ï¼é»è®¤å¼ï¼ï¼2=æ¯ï¼é»è®¤é项ï¼ï¼NULL=æªè®¾ç½® |
| | | -- |
| | | -- 任塿¨¡æ¿ â åºæ¨¡æ¿ çæ å°é¾ï¼å®æµ smartor_nhfyï¼ï¼ |
| | | -- svy_task_template_script.templateid |
| | | -- = svy_task_template.id |
| | | -- â svy_task_template.templateid = svy_lib_template.svyid |
| | | -- â svy_lib_template_script.svyidï¼é¢é¢ script_content ç¸åå³åä¸éé¢ |
| | | -- â svy_lib_template_targetoption.scriptid = svy_lib_template_script.id |
| | | -- ä¸ optioncontent ç¸åå³åä¸ä¸ªé项 |
| | | -- |
| | | -- 宿µè¦çï¼2026-11-06ï¼smartor_nhfyï¼ï¼ |
| | | -- 任塿¨¡æ¿ 710 个ï¼è½æ å°å°åºæ¨¡æ¿ç 663 个ï¼å¦å¤ 47 ä¸ªæ¨¡æ¿ / 879 个é项没æåºæ¥æºï¼ |
| | | -- æ¬èæ¬ä¸ä¼å¨å®ä»¬ï¼éè¦äººå·¥å¤çï¼ï¼ |
| | | -- ä»»å¡é¢ç® 6409 éï¼æé¢é¢è½å¯¹ä¸åºé¢ç® 6353 éï¼99.1%ï¼ï¼ |
| | | -- ä»»å¡é项 16405 个ï¼è½å¯¹ä¸åºé项 16369 个ï¼99.8%ï¼ã |
| | | -- |
| | | -- ä¸ä¸ªæ¹æ¡ï¼æéè¦åªè·å
¶ä¸ä¸ä¸ªï¼ |
| | | -- æ¹æ¡Aï¼æ¨èï¼ï¼åªæ lib éæ äºé»è®¤(=2)çé项æ¨å° taskï¼ä¸å¨ task å·²æçå
¶å®å¼ |
| | | -- â 宿µå½±å 34 è¡ |
| | | -- æ¹æ¡Bï¼å®å
¨å¯¹é½ï¼ï¼lib=2 â 2ï¼lib=1/NULL â 1ï¼ä¸å NULLï¼ |
| | | -- â 宿µå½±å 86 è¡ï¼é¢å¤ 52 è¡æ¯æ task éæãlib éæ²¡æçé»è®¤å»æï¼ |
| | | -- æ¹æ¡Cï¼ä¸¥æ ¼éåï¼ï¼è¿ NULL ä¸èµ·ç
§æ |
| | | -- â 宿µå½±å 10867 è¡ï¼å
¶ä¸ 10782 è¡ä¼è¢«ç½®æ NULLï¼é常ä¸å»ºè®® |
| | | -- |
| | | -- æ§è¡å请å
è·ç¬¬ 0 æ¥å¤ä»½ã第 1 æ¥é¢æ£ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 0. å¤ä»½ï¼åªå¤ä»½ä¼è¢«æ¹å¨çé£å åï¼æ´è¡¨å¤ªå¤§æ²¡å¿
è¦ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | CREATE TABLE IF NOT EXISTS bak_svy_task_targetoption_dv_20261106 AS |
| | | SELECT id, |
| | | taskid, |
| | | templateID, |
| | | scriptid, |
| | | optioncontent, |
| | | default_value |
| | | FROM svy_task_template_targetoption |
| | | WHERE del_flag = '0'; |
| | | |
| | | -- è¡æ°åºä¸ä¸é¢ä¸è´ï¼å®æµ 17403 è¡ï¼ |
| | | SELECT COUNT(*) AS bak_rows FROM bak_svy_task_targetoption_dv_20261106; |
| | | |
| | | -- åæ´ååå¸ï¼å®æµï¼1=16397ï¼2=1005ï¼4=1ï¼ |
| | | SELECT default_value, COUNT(*) AS cnt |
| | | FROM svy_task_template_targetoption |
| | | WHERE del_flag = '0' |
| | | GROUP BY default_value |
| | | ORDER BY cnt DESC; |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 1. 颿£ï¼çç lib çé»è®¤å¼åæ¥å° task 伿¹å¤å°è¡ãæ¹æä»ä¹ |
| | | -- --------------------------------------------------------------------------- |
| | | -- 1.1 æ±æ»ï¼ææ¹æ¡A/B/C åå«é¢ä¼°ï¼ |
| | | SELECT 'æ¹æ¡A åªæ¨ lib=2' AS plan, |
| | | SUM(ld.dv = 2 AND COALESCE(o.default_value, 0) <> 2) AS will_change |
| | | FROM svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | JOIN ( |
| | | SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | FROM svy_lib_template_script l |
| | | JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | WHERE l.del_flag = '0' |
| | | GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | WHERE o.del_flag = '0' |
| | | UNION ALL |
| | | SELECT 'æ¹æ¡B 1/2 å®å
¨å¯¹é½', |
| | | SUM(COALESCE(o.default_value, 1) <> (CASE WHEN ld.dv = 2 THEN 2 ELSE 1 END)) |
| | | FROM svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | JOIN ( |
| | | SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | FROM svy_lib_template_script l |
| | | JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | WHERE l.del_flag = '0' |
| | | GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | WHERE o.del_flag = '0' |
| | | UNION ALL |
| | | SELECT 'æ¹æ¡C ä¸¥æ ¼éå(å«NULL)', |
| | | SUM(COALESCE(o.default_value, -1) <> COALESCE(ld.dv, -1)) |
| | | FROM svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | JOIN ( |
| | | SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | FROM svy_lib_template_script l |
| | | JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | WHERE l.del_flag = '0' |
| | | GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | WHERE o.del_flag = '0'; |
| | | |
| | | -- 1.2 éè¡å·®å¼æ¸
åï¼æ¹å¨åå
çä¸ç¼ï¼ç¡®è®¤æ²¡æä¸è¯¥æ¹çï¼ |
| | | SELECT o.id AS task_option_id, |
| | | o.templateid AS task_template, |
| | | tt.svyname, |
| | | LEFT(s.script_content, 30) AS question, |
| | | o.optioncontent, |
| | | o.default_value AS task_now, |
| | | ld.dv AS lib_value |
| | | FROM svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | JOIN ( |
| | | SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | FROM svy_lib_template_script l |
| | | JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | WHERE l.del_flag = '0' |
| | | GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | WHERE o.del_flag = '0' |
| | | AND COALESCE(o.default_value, 1) <> (CASE WHEN ld.dv = 2 THEN 2 ELSE 1 END) |
| | | ORDER BY o.templateid, s.id, o.id; |
| | | |
| | | -- 1.3 顺带ççåªäº task é项å¨åºéæ¾ä¸å°ï¼é¢é¢è¢«æ¹è¿/æ°å é项ï¼ï¼è¿äºä¸ä¼è¢«åæ¥ |
| | | SELECT COUNT(*) AS unmapped_option_rows |
| | | FROM svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | LEFT JOIN svy_lib_template_script l |
| | | ON l.svyid = lt.svyid AND l.script_content = s.script_content AND l.del_flag = '0' |
| | | LEFT JOIN svy_lib_template_targetoption lo |
| | | ON lo.scriptid = l.id AND lo.del_flag = '0' AND lo.optioncontent = o.optioncontent |
| | | WHERE o.del_flag = '0' |
| | | AND lo.id IS NULL; |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 2. æ¹æ¡Aï¼æ¨èï¼ï¼æåºéçé»è®¤é项(=2)忥å°ä»»å¡æ¨¡æ¿é项 |
| | | -- 宿µå½±å 34 è¡ï¼ä¸å¨ task éå·²æç 1 / NULLï¼é¿å
误å ä»»å¡ä¾§åç¬é
è¿çé»è®¤é¡¹ |
| | | -- ï¼MySQL å¤è¡¨ UPDATE ä¸è½å¸¦ ORDER BY / LIMITï¼ä¸é¢çæ¡ä»¶å·²ç»è½å®ä½å°è¡ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | UPDATE svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | JOIN ( |
| | | SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | FROM svy_lib_template_script l |
| | | JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | WHERE l.del_flag = '0' |
| | | GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | SET o.default_value = 2 |
| | | WHERE o.del_flag = '0' |
| | | AND ld.dv = 2 |
| | | AND COALESCE(o.default_value, 0) <> 2; |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 3. æ¹æ¡Bï¼ååºå®å
¨å¯¹é½ï¼lib=2 â 2ï¼lib=1/NULL â 1ï¼ï¼å®æµå½±å 86 è¡ |
| | | -- 注æï¼ä¼æ task éãæé»è®¤ãä½åºé没æ é»è®¤ãç 52 è¡æ¹æ 1 |
| | | -- --------------------------------------------------------------------------- |
| | | -- UPDATE svy_task_template_targetoption o |
| | | -- JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | -- JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | -- JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | -- JOIN ( |
| | | -- SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | -- FROM svy_lib_template_script l |
| | | -- JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | -- WHERE l.del_flag = '0' |
| | | -- GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | -- ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | -- SET o.default_value = CASE WHEN ld.dv = 2 THEN 2 ELSE 1 END |
| | | -- WHERE o.del_flag = '0' |
| | | -- AND COALESCE(o.default_value, 1) <> (CASE WHEN ld.dv = 2 THEN 2 ELSE 1 END); |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 4. æ¹æ¡Cï¼ä¸¥æ ¼éååºéçå¼ï¼è¿ NULL ä¸èµ·ç
§æï¼ï¼å®æµå½±å 10867 è¡ï¼ |
| | | -- å
¶ä¸ 10782 è¡ä¼è¢«ç½®æ NULLï¼åºéè¿äºé项æ¬èº«æ²¡è®¾é»è®¤å¼ï¼ãä¸è¬ä¸å»ºè®®ã |
| | | -- --------------------------------------------------------------------------- |
| | | -- UPDATE svy_task_template_targetoption o |
| | | -- JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | -- JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | -- JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | -- JOIN ( |
| | | -- SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | -- FROM svy_lib_template_script l |
| | | -- JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | -- WHERE l.del_flag = '0' |
| | | -- GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | -- ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | -- SET o.default_value = ld.dv |
| | | -- WHERE o.del_flag = '0' |
| | | -- AND COALESCE(o.default_value, -1) <> COALESCE(ld.dv, -1); |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 5. æ¶çªèå´ç¤ºä¾ï¼åªæ³å¨æå ä¸ªä»»å¡æ¨¡æ¿æ¶ï¼å¨ WHERE éå æ¡ä»¶å³å¯ï¼ |
| | | -- 任塿¨¡æ¿ id æ¥èª svy_task_template.idï¼= svy_task_template_script.templateidï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | -- 5.1 åªåæ¥ä»»å¡æ¨¡æ¿ 514ï¼å
¨é¢ç§æ»¡æåº¦ï¼å®æµå·²ä¸è´ï¼æ¹ 0 è¡ï¼ |
| | | -- UPDATE svy_task_template_targetoption o |
| | | -- JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | -- JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | -- JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | -- JOIN ( |
| | | -- SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | -- FROM svy_lib_template_script l |
| | | -- JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | -- WHERE l.del_flag = '0' |
| | | -- GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | -- ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | -- SET o.default_value = 2 |
| | | -- WHERE o.del_flag = '0' |
| | | -- AND ld.dv = 2 |
| | | -- AND COALESCE(o.default_value, 0) <> 2 |
| | | -- AND s.templateid IN (514); |
| | | |
| | | -- 5.2 åªåæ¥æä¸ªæºæä¸ç任塿¨¡æ¿ï¼orgid å¨ä¸¤ä¸ª option 表ä¸é½æï¼ |
| | | -- AND o.orgid = ' xxx ' |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 6. æ ¡éª |
| | | -- --------------------------------------------------------------------------- |
| | | -- 6.1 æ¹å¨ååå¸ï¼æ¹æ¡A ä¹ååºä¸ºï¼1=16363ï¼2=1039ï¼4=1ï¼ |
| | | SELECT default_value, COUNT(*) AS cnt |
| | | FROM svy_task_template_targetoption |
| | | WHERE del_flag = '0' |
| | | GROUP BY default_value |
| | | ORDER BY cnt DESC; |
| | | |
| | | -- 6.2 ä»ä¸åºä¸ä¸è´çè¡æ°ï¼æ¹æ¡A ä¹ååºä¸º 10833ï¼å·®ç齿¯ lib ä¾§æªè®¾ç½®/为1 çè¡ï¼ |
| | | SELECT COUNT(*) AS still_diff |
| | | FROM svy_task_template_targetoption o |
| | | JOIN svy_task_template_script s ON s.id = o.scriptid AND s.del_flag = '0' |
| | | JOIN svy_task_template tt ON tt.id = s.templateid AND tt.del_flag = '0' |
| | | JOIN svy_lib_template lt ON lt.svyid = tt.templateid AND lt.del_flag = '0' |
| | | JOIN ( |
| | | SELECT l.svyid, l.script_content, lo.optioncontent, MAX(lo.default_value) AS dv |
| | | FROM svy_lib_template_script l |
| | | JOIN svy_lib_template_targetoption lo ON lo.scriptid = l.id AND lo.del_flag = '0' |
| | | WHERE l.del_flag = '0' |
| | | GROUP BY l.svyid, l.script_content, lo.optioncontent |
| | | ) ld ON ld.svyid = lt.svyid AND ld.script_content = s.script_content AND ld.optioncontent = o.optioncontent |
| | | WHERE o.del_flag = '0' |
| | | AND COALESCE(o.default_value, 0) <> COALESCE(ld.dv, 0); |
| | | |
| | | -- 6.3 æ¯é¢ãé»è®¤é项ç个æ°ãåå¸ï¼æ£å¸¸åºæå¤ 1 个ã |
| | | -- 宿µè·å®æ¹æ¡A åï¼0 个=5624 é¢ï¼1 个=1017 é¢ï¼2 个=8 é¢ï¼3 个=2 é¢ |
| | | -- ï¼åºéæ¬èº«å°±æ 1 éé¢æäº 2 个é»è®¤é¡¹ï¼å¸¦ 2/3 个é»è®¤é¡¹çé¢ç®å±äºåæ¥åå°±åå¨çé®é¢ï¼ |
| | | SELECT c AS default_options_per_question, COUNT(*) AS questions |
| | | FROM (SELECT s.id, SUM(o.default_value = 2) c |
| | | FROM svy_task_template_script s |
| | | JOIN svy_task_template_targetoption o ON o.scriptid = s.id AND o.del_flag = '0' |
| | | WHERE s.del_flag = '0' |
| | | GROUP BY s.id) x |
| | | GROUP BY c |
| | | ORDER BY c; |
| | | |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- 7. åæ»ï¼åªæè¢«æ¹è¿çé£å åååå¤ä»½å¼ï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | -- UPDATE svy_task_template_targetoption o |
| | | -- JOIN bak_svy_task_targetoption_dv_20261106 b ON b.id = o.id |
| | | -- SET o.default_value = b.default_value |
| | | -- WHERE o.del_flag = '0'; |
| | | -- |
| | | -- 确认没é®é¢ååå å¤ä»½è¡¨ï¼ |
| | | -- DROP TABLE bak_svy_task_targetoption_dv_20261106; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- /smartor/trace/tracedeallistï¼å¼å¸¸é®é¢å¤çæ
嵿¥è¯¢ï¼æ§è½ä¼åé
å¥ç´¢å¼ |
| | | -- |
| | | -- æ¹é åè¿æ¡æ¥å£åºå®æ§è¡ 5 æ¡èå SQLï¼è¿æ»¤æ¡ä»¶é½æ¯ï¼ |
| | | -- service_subtask_detail_trace: orgid + template_type + del_flagï¼+ åç»/æåº questiontextï¼ |
| | | -- service_subtask_detail: scriptid |
| | | -- 线ä¸å¦æè¿ä¸¤å¼ 表没æå¯¹åºç´¢å¼ï¼èåä»ç¶æ¯å
¨è¡¨æ«æã |
| | | -- |
| | | -- æ§è¡é¡ºåºï¼å
è·ç¬¬ 1 æ¥çç°ç¶ååæ®µç±»åï¼åæç¬¬ 2 æ¥å 缺失çç´¢å¼ã |
| | | -- ADD INDEX èµ° online DDLï¼ä¸é»å¡è¯»åï¼ï¼ä½å¤§è¡¨ä»ä¼å IOï¼å»ºè®®ä¸å¡ä½å³°æ§è¡ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 1 æ¥ï¼çç°æç´¢å¼ + questiontext çåæ®µç±»åï¼å³å®è½ä¸è½æ questiontext æ¾è¿ç´¢å¼ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT INDEX_NAME, SEQ_IN_INDEX, COLUMN_NAME, NON_UNIQUE |
| | | FROM information_schema.STATISTICS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME IN ('service_subtask_detail_trace', 'service_subtask_detail') |
| | | ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX; |
| | | |
| | | SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH |
| | | FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME IN ('service_subtask_detail_trace', 'service_subtask_detail') |
| | | AND COLUMN_NAME IN ('orgid', 'campusid', 'template_type', 'del_flag', 'scriptid', 'questiontext', 'handle_time', 'todeptcode'); |
| | | |
| | | SELECT TABLE_NAME, TABLE_ROWS, ROUND(DATA_LENGTH / 1024 / 1024, 1) AS data_mb |
| | | FROM information_schema.TABLES |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME IN ('service_subtask_detail_trace', 'service_subtask_detail'); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 2 æ¥ï¼å ç´¢å¼ï¼å·²åå¨ç伿¥ Duplicate key nameï¼è·³è¿å³å¯ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | |
| | | -- â trace 表çä¸»è¿æ»¤æ¡ä»¶ï¼orgid + template_type + del_flag |
| | | -- ï¼æ¬æ¥å£å
¥ååªæ templateTypeï¼orgid ç± @AddOrgId 注å
¥ï¼ |
| | | ALTER TABLE service_subtask_detail_trace |
| | | ADD INDEX idx_trace_deal_query (orgid, template_type, del_flag); |
| | | |
| | | -- â¡ æç»è¡¨çãææå¡«åæ°ãæ scriptid ç»è®¡ï¼æ¹é 忝é个 scriptid æ¥ï¼æ¹é 忝䏿¡ group byï¼ |
| | | ALTER TABLE service_subtask_detail |
| | | ADD INDEX idx_detail_scriptid (scriptid); |
| | | |
| | | -- ⢠å¯éï¼å¦æç¬¬ 1 æ¥æ¥å° questiontext æ¯ VARCHAR(255) å以ä¸ï¼utf8mb4 ä¸è¶
è¿ 255ï¼ï¼ |
| | | -- å¯ä»¥åå è¦çåç»/æåºçç´¢å¼ï¼æææ´å¥½ï¼ |
| | | -- ALTER TABLE service_subtask_detail_trace |
| | | -- ADD INDEX idx_trace_deal_group (orgid, template_type, del_flag, questiontext); |
| | | |
| | | -- ⣠å¯éï¼ææ°å¤çäººé£æ¡ SQL ç¨å° (questiontext, handle_time) |
| | | -- ALTER TABLE service_subtask_detail_trace |
| | | -- ADD INDEX idx_trace_deal_handle (orgid, template_type, del_flag, questiontext, handle_time); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- 第 3 æ¥ï¼éªè¯ç´¢å¼æ¯å¦çæï¼æä¸é¢ SQL æ¿å» EXPLAINï¼key ååºè¯¥å½ä¸å建çç´¢å¼ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- EXPLAIN SELECT questiontext, min(scriptid), count(*) |
| | | -- FROM service_subtask_detail_trace |
| | | -- WHERE del_flag = 0 AND questiontext IS NOT NULL |
| | | -- AND orgid = '20001001' AND template_type = 2 |
| | | -- GROUP BY questiontext ORDER BY questiontext LIMIT 10 OFFSET 0; |
| | | -- |
| | | -- EXPLAIN SELECT scriptid, count(*) FROM service_subtask_detail |
| | | -- WHERE scriptid IN (1, 2, 3) GROUP BY scriptid; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================= |
| | | -- /smartor/serviceSubtask/getSfStatistics ç SQL çï¼ç
åºç»´åº¦ · å
¨é¨ç
åº Â· åºé¢é访 serviceType=2ï¼ |
| | | -- ============================================================================= |
| | | -- 对åºä»£ç ï¼ |
| | | -- ServiceSubtaskController#getSfStatistics |
| | | -- â ServiceSubtaskServiceImpl#getSfStatistics ï¼åç» + éæ¡ç´¯å ï¼ |
| | | -- â ServiceSubtaskMapper.getSfStatistics / getSfStatisticsGroupKey |
| | | -- â ServiceSubtaskMapper.selectTimelyRateBatch ï¼åæ¶ç rateï¼ |
| | | -- æ°æ®æºï¼service_subtaskï¼æ¬æ¥å£åªæ¥è¿ä¸å¼ è¡¨ï¼ |
| | | -- |
| | | -- å
¥åï¼åªæ hospitalStartTimeï¼åºé¢æ¶é´ä¸éï¼ã |
| | | -- åç»ï¼statisticaltype=1ï¼ç
åºï¼ï¼ä¸ä¸ä¼ leavehospitaldistrictcodes â å
¨é¨ç
åºã |
| | | -- æå¡ç±»åï¼serviceType = 2ï¼åºé¢é访ï¼ã |
| | | -- 说æï¼æ¥å£ Mapper éåºé¢æ¶é´æ¡ä»¶æ¯ãhospitalStartTime ä¸ hospitalEndTime é½ä¼ æçæãï¼ |
| | | -- åªä¼ hospitalStartTime æ¶æ¥å£å
¶å®ãå®å
¨ä¸è¿æ»¤åºé¢æ¶é´ããä¸é¢æä½ è¦çè¯ä¹å®ç°ï¼ |
| | | -- åºé¢æ¶é´ >= hospitalStartTimeï¼ä¸éå¯éï¼ã |
| | | -- |
| | | -- å·²å¨ MySQL 5.7.34ï¼smartor_sltdï¼å®è·éªè¯ï¼ |
| | | -- hospitalStartTime = '2026-10-01' â 45 个ç
åº / 3088 æ¡åºé¢è®°å½ï¼ |
| | | -- æ½æ¥ç
åº 40003052ï¼287 æ¡ãæ éé访 4ãåºé访 283ã馿¬¡é访æå 250ãé访ç 88.34%ï¼ä¸æç»éæ¡æ ¸å¯¹ä¸è´ã |
| | | -- ============================================================================= |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 0. åæ°ï¼åªæç¬¬ä¸ä¸ªæ¯å¿
å¡«ï¼ |
| | | -- ----------------------------------------------------------------------------- |
| | | SET @hospitalStartTime = '2026-10-01'; -- å¿
å¡«ï¼åºé¢æ¶é´ä¸éï¼å½å¤© 0 ç¹èµ·ï¼ |
| | | SET @hospitalEndTime = NULL; -- å¯éï¼åºé¢æ¶é´ä¸éï¼NULL = ä¸é |
| | | SET @followUpCountStyle = '1'; -- ç³»ç»é
ç½® followUpCountStyleï¼æ¬åºæªé
ç½®è¯¥åæ°ï¼æ¥å£æ '1' å¤ç |
| | | SET @orgid = NULL; -- å¯éï¼æºæï¼NULL = ä¸éï¼æ¥å£éç±ç»å½ä¿¡æ¯æ³¨å
¥ï¼ |
| | | SET @campusid = NULL; -- å¯éï¼é¢åºï¼NULL = ä¸é |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 1. 主æ¥è¯¢ï¼ä¸è¡ = ä¸ä¸ªåºé¢ç
åºï¼è¦çå
¨é¨ç
åº |
| | | -- · å
å± r ï¼ä¸è¡ = 䏿¡é访åä»»å¡ï¼æãç»è®¡å£å¾ãç¿»è¯æ 0/1 æ è®° |
| | | -- · ä¸é´ t ï¼æç
åºææ è®°ç´¯å |
| | | -- · æå¤å± ï¼æç´¯å å¼ç®ææ¥å£è¿åçæ¯çå符串 |
| | | -- æ³æ¹ç»è®¡ç»´åº¦ï¼æ GROUP BY r.ward_code æ¢æ r.dept_codeï¼ç§å®¤ï¼æ r.dr_codeï¼å»çï¼å³å¯ã |
| | | -- æ³è¦æ»è®¡è¡ï¼æãGROUP BY r.ward_codeãæ¹æãGROUP BY r.ward_code WITH ROLLUPãï¼ |
| | | -- æåä¸è¡ ward_code 为 NULL çå°±æ¯å
¨é¨ç
åºå计ã |
| | | -- ----------------------------------------------------------------------------- |
| | | SELECT |
| | | t.leavehospitaldistrictcode, |
| | | t.leavehospitaldistrictname, |
| | | t.deptcode, |
| | | t.deptname, |
| | | t.drcode, |
| | | t.drname, |
| | | t.dischargeCount, -- åºé¢äººæ¬¡ |
| | | t.nonFollowUp, -- æ éé访人次 |
| | | t.filterCount, -- è¿æ»¤æ£è
æ°é |
| | | t.followUpNeeded, -- åºé访人次 |
| | | t.needFollowUp, -- 馿¬¡åºé访 |
| | | t.nonFollowUpFirst, -- 馿¬¡æ éé访 |
| | | t.pendingFollowUp, -- 馿¬¡å¾
éè®¿ï¼æ¬æ¥å£æ¤è·¯å¾æä¸º 0ï¼è§ PART 5ï¼ |
| | | t.followUpSuccess, -- 馿¬¡é访æå |
| | | t.followUpFail, -- 馿¬¡é访失败ï¼å«äººå·¥è¶
æ¶ï¼ |
| | | t.manual, -- 馿¬¡äººå·¥é访 |
| | | t.voice, -- 馿¬¡è¯é³é访 |
| | | t.sms, -- 馿¬¡çä¿¡é访 |
| | | t.weChat, -- 馿¬¡å¾®ä¿¡é访 |
| | | t.manualSuccess, -- 馿¬¡äººå·¥é访æå |
| | | t.voiceSuccess, -- 馿¬¡è¯é³é访æå |
| | | t.smsSuccess, -- 馿¬¡çä¿¡é访æå |
| | | t.weChatSuccess, -- 馿¬¡å¾®ä¿¡é访æå |
| | | -- 馿¬¡é访ç =ï¼é¦æ¬¡é访æå + 馿¬¡é访失败ï¼/ 馿¬¡åºé访 |
| | | IF(t.needFollowUp = 0, '0.00%', |
| | | CONCAT(ROUND(100 * (t.followUpSuccess + t.followUpFail) / t.needFollowUp, 2), '%')) AS followUpRate, |
| | | t.abnormal, -- ç»æå¼å¸¸ï¼é¦æ¬¡ï¼ |
| | | t.needFollowUpAgain, -- äºæ¬¡åºé访 |
| | | t.nonFollowUpAgain, -- äºæ¬¡æ éé访 |
| | | t.pendingFollowUpAgain, -- äºæ¬¡å¾
é访 |
| | | t.followUpSuccessAgain, -- äºæ¬¡é访æå |
| | | t.followUpFailAgain, -- äºæ¬¡é访失败 |
| | | t.manualAgain, |
| | | t.voiceAgain, |
| | | t.smsAgain, |
| | | t.weChatAgain, |
| | | t.manualAgainSuccess, |
| | | t.voiceAgainSuccess, |
| | | t.smsAgainSuccess, |
| | | t.weChatAgainSuccess, |
| | | -- äºæ¬¡é访ç |
| | | IF(t.needFollowUpAgain = 0, '0.00%', |
| | | CONCAT(ROUND(100 * (t.followUpSuccessAgain + t.followUpFailAgain) / t.needFollowUpAgain, 2), '%')) AS followUpRateAgain, |
| | | t.abnormalAgain, -- ç»æå¼å¸¸ï¼åæ¬¡ï¼ |
| | | t.taskSituation1, -- é访æ
åµï¼æ£å¸¸è¯é³ |
| | | t.taskSituation2, -- é访æ
åµï¼æ£è
ææ¥/æè®¿ |
| | | t.taskSituation3, -- é访æ
åµï¼é¢è®¿/æ¥è¯ |
| | | t.taskSituation4, -- é访æ
åµï¼å¾®ä¿¡é访 |
| | | t.taskSituation5, -- é访æ
åµï¼é访çµè¯ä¸æ£ç¡® |
| | | t.taskSituation6 -- é访æ
åµï¼å
¶ä»ï¼task_situation = 7ï¼ |
| | | FROM ( |
| | | SELECT |
| | | r.ward_code AS leavehospitaldistrictcode, |
| | | MAX(r.ward_name) AS leavehospitaldistrictname, |
| | | MAX(r.dept_code) AS deptcode, |
| | | MAX(r.dept_name) AS deptname, |
| | | MAX(r.dr_code) AS drcode, |
| | | MAX(r.dr_name) AS drname, |
| | | COUNT(*) AS dischargeCount, |
| | | SUM(r.f_no) AS nonFollowUp, |
| | | SUM(r.f_filter) AS filterCount, |
| | | SUM(r.f_need) AS followUpNeeded, |
| | | SUM(IF(r.f_first = 1 AND r.f_need = 1, 1, 0)) AS needFollowUp, |
| | | -- followUpCountStyle='1' æ¶æ¥å£æã馿¬¡æ éé访ãå äºä¸¤æ¬¡ï¼ä»£ç L2195-2197 ä¸ L2211-2213ï¼ï¼è¿é *2 å¤å» |
| | | SUM(IF(r.f_first = 1 AND r.f_no = 1, 1, 0)) * IF(@followUpCountStyle = '1', 2, 1) AS nonFollowUpFirst, |
| | | 0 AS pendingFollowUp, |
| | | SUM(IF(r.f_first = 1 AND r.f_succ_first = 1, 1, 0)) AS followUpSuccess, |
| | | SUM(IF(r.f_first = 1 AND r.f_fail_first = 1, 1, 0)) AS followUpFail, |
| | | SUM(IF(r.f_first = 1 AND r.ch_hit = 1 AND r.cp = '1', 1, 0)) AS manual, |
| | | SUM(IF(r.f_first = 1 AND r.ch_hit = 1 AND r.cp = '3', 1, 0)) AS voice, |
| | | SUM(IF(r.f_first = 1 AND r.ch_hit = 1 AND r.cp = '4', 1, 0)) AS sms, |
| | | SUM(IF(r.f_first = 1 AND r.ch_hit = 1 AND r.cp = '5', 1, 0)) AS weChat, |
| | | SUM(IF(r.f_first = 1 AND r.sendstate = 6 AND r.cp = '1', 1, 0)) AS manualSuccess, |
| | | SUM(IF(r.f_first = 1 AND r.sendstate = 6 AND r.cp = '3', 1, 0)) AS voiceSuccess, |
| | | SUM(IF(r.f_first = 1 AND r.sendstate = 6 AND r.cp = '4', 1, 0)) AS smsSuccess, |
| | | SUM(IF(r.f_first = 1 AND r.sendstate = 6 AND r.cp = '5', 1, 0)) AS weChatSuccess, |
| | | SUM(IF(r.f_first = 1 AND r.f_abnormal = 1, 1, 0)) AS abnormal, |
| | | SUM(IF(r.f_again = 1 AND r.f_need = 1, 1, 0)) AS needFollowUpAgain, |
| | | SUM(IF(r.f_again = 1 AND r.f_no = 1, 1, 0)) AS nonFollowUpAgain, |
| | | SUM(IF(r.f_again = 1 AND r.sendstate = 2, 1, 0)) AS pendingFollowUpAgain, |
| | | SUM(IF(r.f_again = 1 AND r.f_succ_again = 1, 1, 0)) AS followUpSuccessAgain, |
| | | SUM(IF(r.f_again = 1 AND r.f_fail_again = 1, 1, 0)) AS followUpFailAgain, |
| | | SUM(IF(r.f_again = 1 AND r.ch_hit = 1 AND r.cp = '1', 1, 0)) AS manualAgain, |
| | | SUM(IF(r.f_again = 1 AND r.ch_hit = 1 AND r.cp = '3', 1, 0)) AS voiceAgain, |
| | | SUM(IF(r.f_again = 1 AND r.ch_hit = 1 AND r.cp = '4', 1, 0)) AS smsAgain, |
| | | SUM(IF(r.f_again = 1 AND r.ch_hit = 1 AND r.cp = '5', 1, 0)) AS weChatAgain, |
| | | SUM(IF(r.f_again = 1 AND r.sendstate = 6 AND r.cp = '1', 1, 0)) AS manualAgainSuccess, |
| | | SUM(IF(r.f_again = 1 AND r.sendstate = 6 AND r.cp = '3', 1, 0)) AS voiceAgainSuccess, |
| | | SUM(IF(r.f_again = 1 AND r.sendstate = 6 AND r.cp = '4', 1, 0)) AS smsAgainSuccess, |
| | | SUM(IF(r.f_again = 1 AND r.sendstate = 6 AND r.cp = '5', 1, 0)) AS weChatAgainSuccess, |
| | | SUM(IF(r.f_again = 1 AND r.f_abnormal = 1, 1, 0)) AS abnormalAgain, |
| | | SUM(IF(r.task_situation = 1, 1, 0)) AS taskSituation1, |
| | | SUM(IF(r.task_situation = 2, 1, 0)) AS taskSituation2, |
| | | SUM(IF(r.task_situation = 3, 1, 0)) AS taskSituation3, |
| | | SUM(IF(r.task_situation = 4, 1, 0)) AS taskSituation4, |
| | | SUM(IF(r.task_situation = 5, 1, 0)) AS taskSituation5, |
| | | SUM(IF(r.task_situation = 7, 1, 0)) AS taskSituation6 |
| | | FROM ( |
| | | SELECT |
| | | ss.leavehospitaldistrictcode AS ward_code, |
| | | ss.leavehospitaldistrictname AS ward_name, |
| | | ss.leaveldeptcode AS dept_code, |
| | | ss.leaveldeptname AS dept_name, |
| | | ss.drcode AS dr_code, |
| | | ss.drname AS dr_name, |
| | | ss.sendstate AS sendstate, |
| | | ss.current_preachform AS cp, |
| | | ss.task_situation AS task_situation, |
| | | IF(ss.sendstate = 4, 1, 0) AS f_no, |
| | | IF(ss.sendstate = 4 AND ss.task_situation = 6, 1, 0) AS f_filter, |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0) AS f_need, |
| | | IF(ss.visit_count = 1, 1, 0) AS f_first, |
| | | IF(ss.visit_count > 1, 1, 0) AS f_again, |
| | | -- 馿¬¡é访æåï¼ç»è®¡æ¹å¼ 1/3 åªç®å·²å®æ(6)ï¼å
¶å®æ¹å¼ç®ä¸ä¸æ§è¡/å·²åé(3,4,6) |
| | | IF(@followUpCountStyle IN ('1', '3'), |
| | | IF(ss.sendstate = 6, 1, 0), |
| | | IF(ss.sendstate IN (3, 4, 6), 1, 0)) AS f_succ_first, |
| | | -- 忬¡é访æåï¼ç»è®¡æ¹å¼ 1/3 åªç®å·²å®æ(6)ï¼å
¶å®æ¹å¼ç®ä¸å¾
é访失败åç 1 ç(1,3,4,6) |
| | | IF(@followUpCountStyle IN ('1', '3'), |
| | | IF(ss.sendstate = 6, 1, 0), |
| | | IF(ss.sendstate IN (1, 3, 4, 6), 1, 0)) AS f_succ_again, |
| | | IF(ss.sendstate IN (5, 7), 1, 0) AS f_fail_first, |
| | | IF(ss.sendstate = 5, 1, 0) AS f_fail_again, |
| | | IF(ss.excep = '1', 1, 0) AS f_abnormal, |
| | | -- é访æ¹å¼å½ä¸æ¡ä»¶ï¼æ¹å¼ 1 æé¤ãæ éé访ãï¼æ¹å¼ 3 åªç®å·²å®æï¼å
¶å®æ¹å¼ä¸è®¾é |
| | | IF(@followUpCountStyle = '1', |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0), |
| | | IF(@followUpCountStyle = '3', |
| | | IF(ss.sendstate = 6, 1, 0), |
| | | IF(ss.sendstate IS NOT NULL, 1, 0))) AS ch_hit |
| | | FROM service_subtask ss |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2' -- serviceType = 2 åºé¢é访 |
| | | -- æ¥å£é groupKeyList ä¼å¸¦å
¨éç
åºç ï¼çä»·äºãåºé¢ç
åºä¸º NULL çè¡è¢«ä¸¢æãï¼ |
| | | -- è¥æ³æç©ºç
åºä¹ç»è®¡è¿æ¥ï¼æ³¨éæä¸ä¸è¡ã |
| | | AND ss.leavehospitaldistrictcode IS NOT NULL |
| | | AND ss.endtime >= DATE(@hospitalStartTime) |
| | | AND (@hospitalEndTime IS NULL OR ss.endtime < DATE_ADD(DATE(@hospitalEndTime), INTERVAL 1 DAY)) |
| | | AND (@orgid IS NULL OR ss.orgid = @orgid) |
| | | AND (@campusid IS NULL OR ss.campusid = @campusid) |
| | | ) r |
| | | GROUP BY r.ward_code |
| | | ) t |
| | | ORDER BY t.dischargeCount DESC; |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 1B. åªè¦ã馿¬¡é访ãçæ°æ®ï¼çä»·äºæ¥å£å
¥å visitCount = 1 â getStatisticFirstï¼ |
| | | -- · åªç»è®¡ visit_count = 1 çè®°å½ï¼äºæ¬¡é访记å½ä¸è¿å
¥ä»»ä½ä¸å |
| | | -- · åï¼åºé¢äººæ¬¡ / åºé访æè§£ / é访æåæè§£ / åæåç / åæ¶ç / åºé¢æ¶é´èå´ |
| | | -- · å£å¾ä¸ getStatisticFirst 对é½ï¼pendingFollowUp æ¯ sendstate = 2 çç宿°é |
| | | -- |
| | | -- â
å¯¹è´¦ï¼æ¥å£è¿å åæ¬èº«ä¸çäºãåºé访ãï¼å·®é¢æ¯ä¸¤ä¸ªçå®åå¨çå£å¾ç¼ºé¡¹ï¼ä¸æ¯æ°æ®éï¼ |
| | | -- 馿¬¡åºé访 = å¾
åé(1) + å¾
é访(2) + å·²åéæªå®æ(3) + å
¶å®ç¶æ + é访æå(6) + é访失败(5,7) |
| | | -- 馿¬¡é访æå = 人工æå + è¯é³æå + çä¿¡æå + 微信æå + æ æ¹å¼æå(sendstate=6 ä½ current_preachform 为空) |
| | | -- æ¥å£åªç»è®¡ 2 / 6 / 5+7ï¼æä»¥ãå¾
é访 + æå + 失败ãå°äºåºéè®¿ï¼ |
| | | -- æ¸ éæåæ current_preachform åï¼æ²¡ææ¹å¼çæåè®°å½ä¸è½ä»»ä½æ¸ éã |
| | | -- ä¸é¢æ notSent / sentNotDone / otherStatus / noChannelSuccess æ¾å¼ååºæ¥ï¼å¹¶ç»åº diffNeed / diffSucc |
| | | -- ä¸¤ä¸ªèªæ£åï¼æ£å¸¸æä¸º 0ï¼ã |
| | | -- |
| | | -- â
åºé¢æ¶é´ï¼ä¸»æ¥è¯¢ç» endTimeMin/endTimeMaxï¼åæ¶çå£å¾ç» timelyEndMin/timelyEndMaxã |
| | | -- â åæ¶çåæ¥è¯¢éçåºé¢æ¶é´æ¡ä»¶å½åæ¯æ³¨éæçï¼æä½ ççæ¬ï¼ï¼æä»¥å®ç»è®¡çæ¯è¯¥ç
åºãå
¨é¨åå²ãï¼ |
| | | -- 忝 timelyBase ä¼è¿å¤§äºåºé访ï¼å®æµæç
åº 643 æ¡åºé访 vs 2342 æ¡åæ¶ç忝ï¼ï¼ |
| | | -- timelyRate ä¸å
¶å®åä¸åååºé´ãä¸å¯ç´æ¥æ¯è¾ãè¦æ¢å¤ååºé´å°±æé£ä¸¤è¡æ¾å¼ã |
| | | -- |
| | | -- 主æ¥è¯¢å·²å®è·æ ¡éªï¼2026-09-04 ~ 2026-11-03ï¼orgid=20001001ï¼45 个ç
åºï¼ï¼7378 æ¡ / æ éé访 428 / |
| | | -- åºé访 6950 = å¾
åé 116 + å¾
é访 337 + å·²åéæªå®æ 941 + æå 4188 + 失败 1368ï¼ |
| | | -- æå 4188 = 人工 2974 + çä¿¡ 1197 + æ æ¹å¼ 17ï¼æ¬åº current_preachform åªæ 1 å 4ï¼è¯é³/微信为 0ï¼ã |
| | | -- ----------------------------------------------------------------------------- |
| | | SELECT |
| | | t.leavehospitaldistrictname, -- åºé¢ç
åº |
| | | t.endTimeMin, -- 该ç
åºå½ä¸çææ©åºé¢æ¶é´ |
| | | t.endTimeMax, -- 该ç
åºå½ä¸çææåºé¢æ¶é´ |
| | | t.deptname, -- åºé¢ç§å®¤ |
| | | t.dischargeCount, -- åºé¢äººæ¬¡ï¼é¦æ¬¡éè®¿è®°å½æ°ï¼ |
| | | t.nonFollowUp, -- æ éé访人次 |
| | | t.followUpNeeded, -- åºé访人次 |
| | | t.needFollowUp, -- 馿¬¡åºé访 |
| | | t.notSent, -- å¾
åéï¼sendstate = 1ï¼ |
| | | t.pendingFollowUp, -- 馿¬¡å¾
é访ï¼sendstate = 2ï¼ |
| | | t.sentNotDone, -- å·²åéæªå®æï¼sendstate = 3ï¼ |
| | | t.otherStatus, -- å
¶å®ç¶æå
åºï¼æ£å¸¸ä¸º 0ï¼ |
| | | t.followUpSuccess, -- 馿¬¡é访æåï¼sendstate = 6ï¼ |
| | | t.followUpFail, -- 馿¬¡é访失败ï¼sendstate = 5,7ï¼å«äººå·¥è¶
æ¶ï¼ |
| | | -- åé访æ¹å¼æåæ°ï¼æ³åæ¶çæ»æ°å°±æ¾å¼ä¸é¢ 4 è¡ï¼æåç忝就æ¯è¿ 4 ä¸ªï¼ |
| | | -- t.manual, t.voice, t.sms, t.weChat, |
| | | t.manualSuccess, -- 馿¬¡äººå·¥é访æå |
| | | t.voiceSuccess, -- 馿¬¡è¯é³é访æå |
| | | t.smsSuccess, -- 馿¬¡çä¿¡é访æå |
| | | t.weChatSuccess, -- 馿¬¡å¾®ä¿¡é访æå |
| | | t.noChannelSuccess, -- æå使²¡æé访æ¹å¼ï¼current_preachform 为空æä¸å±äº 1/3/4/5ï¼ |
| | | -- é访ç =ï¼æå + 失败ï¼/ åºéè®¿ï¼æ¥å£ followUpRate çå£å¾ï¼ |
| | | IF(t.needFollowUp = 0, '0.00%', |
| | | CONCAT(ROUND(100 * (t.followUpSuccess + t.followUpFail) / t.needFollowUp, 2), '%')) AS followUpRate, |
| | | -- é访æåç = æå / åºé访ï¼åªç®æåï¼ä¸å«å¤±è´¥ï¼ |
| | | IF(t.needFollowUp = 0, '0.00%', |
| | | CONCAT(ROUND(100 * t.followUpSuccess / t.needFollowUp, 2), '%')) AS followUpSuccessRate, |
| | | -- 忹弿åç = 该æ¹å¼æå / 该æ¹å¼å½ä¸ï¼sendstate<>4 ä¸ current_preachform 为该æ¹å¼ï¼ |
| | | IF(t.manual = 0, '0.00%', CONCAT(ROUND(100 * t.manualSuccess / t.manual, 2), '%')) AS manualSuccessRate, |
| | | IF(t.voice = 0, '0.00%', CONCAT(ROUND(100 * t.voiceSuccess / t.voice, 2), '%')) AS voiceSuccessRate, |
| | | IF(t.sms = 0, '0.00%', CONCAT(ROUND(100 * t.smsSuccess / t.sms, 2), '%')) AS smsSuccessRate, |
| | | IF(t.weChat = 0, '0.00%', CONCAT(ROUND(100 * t.weChatSuccess / t.weChat, 2), '%')) AS weChatSuccessRate, |
| | | -- æ¸ éå计æåç = åç§æ¹å¼æåä¹å / åç§æ¹å¼å½ä¸ä¹å |
| | | IF(t.manual + t.voice + t.sms + t.weChat = 0, '0.00%', |
| | | CONCAT(ROUND(100 * (t.manualSuccess + t.voiceSuccess + t.smsSuccess + t.weChatSuccess) |
| | | / (t.manual + t.voice + t.sms + t.weChat), 2), '%')) AS channelSuccessRate, |
| | | -- åæ¶çï¼å£å¾ä¸æ¥å£ selectTimelyRateBatch ç¸åï¼ç¬ç«çé访æ¶é´çªå£ + æé¤ãæ éé访ãï¼ï¼ |
| | | -- åæ¶ = finishtime ä¸ä¸ºç©º ä¸ DATEDIFF(finishtime, endtime) <= åæ¶å¤©æ° + è¡¥å¿å¤©æ°ã |
| | | -- 忶天æ°éå¼è§ä¸é¢ rt åæ¥è¯¢éç 7ï¼æéä¿®æ¹ï¼æ¥å£ä¸ä¼ rateDay æ¶è¿å 0ï¼ã |
| | | IFNULL(rt.timely_base, 0) AS timelyBase, -- åæ¶ç忝ï¼å£å¾ä¸ãåºé访ãä¸åï¼ |
| | | IF(IFNULL(rt.timely_base, 0) = 0, '0.00%', |
| | | CONCAT(ROUND(100 * rt.timely_cnt / rt.timely_base, 2), '%')) AS timelyRate, |
| | | rt.timelyEndMin, -- åæ¶çå£å¾å½ä¸çææ©åºé¢æ¶é´ |
| | | rt.timelyEndMax, -- åæ¶çå£å¾å½ä¸çææåºé¢æ¶é´ |
| | | -- èªæ£ï¼ä¸¤ä¸ªå·®é¢ï¼æ£å¸¸æä¸º 0 |
| | | t.needFollowUp - (t.notSent + t.pendingFollowUp + t.sentNotDone + t.otherStatus |
| | | + t.followUpSuccess + t.followUpFail) AS diffNeed, |
| | | t.followUpSuccess - (t.manualSuccess + t.voiceSuccess + t.smsSuccess + t.weChatSuccess |
| | | + t.noChannelSuccess) AS diffSucc |
| | | -- å¦å¤å åéè¦æ¶æ¾å¼ï¼ |
| | | -- , t.abnormal |
| | | -- , t.taskSituation1, t.taskSituation2, t.taskSituation3, t.taskSituation4, t.taskSituation5, t.taskSituation6 |
| | | FROM ( |
| | | SELECT |
| | | r.ward_code AS leavehospitaldistrictcode, |
| | | MAX(r.ward_name) AS leavehospitaldistrictname, |
| | | MAX(r.dept_name) AS deptname, |
| | | MIN(r.end_time) AS endTimeMin, |
| | | MAX(r.end_time) AS endTimeMax, |
| | | COUNT(*) AS dischargeCount, |
| | | SUM(r.f_no) AS nonFollowUp, |
| | | SUM(r.f_need) AS followUpNeeded, |
| | | SUM(r.f_need) AS needFollowUp, |
| | | SUM(IF(r.sendstate = 1, 1, 0)) AS notSent, |
| | | SUM(IF(r.sendstate = 2, 1, 0)) AS pendingFollowUp, |
| | | SUM(IF(r.sendstate = 3, 1, 0)) AS sentNotDone, |
| | | SUM(IF(r.sendstate IS NOT NULL AND r.sendstate <> 4 |
| | | AND r.sendstate NOT IN (1, 2, 3, 5, 6, 7), 1, 0)) AS otherStatus, |
| | | SUM(r.f_succ) AS followUpSuccess, |
| | | SUM(r.f_fail) AS followUpFail, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '1', 1, 0)) AS manual, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '3', 1, 0)) AS voice, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '4', 1, 0)) AS sms, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '5', 1, 0)) AS weChat, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '1', 1, 0)) AS manualSuccess, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '3', 1, 0)) AS voiceSuccess, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '4', 1, 0)) AS smsSuccess, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '5', 1, 0)) AS weChatSuccess, |
| | | SUM(IF(r.sendstate = 6 AND (r.cp IS NULL OR r.cp NOT IN ('1','3','4','5')), 1, 0)) AS noChannelSuccess |
| | | FROM ( |
| | | SELECT |
| | | ss.leavehospitaldistrictcode AS ward_code, |
| | | ss.leavehospitaldistrictname AS ward_name, |
| | | ss.leaveldeptname AS dept_name, |
| | | ss.endtime AS end_time, |
| | | ss.sendstate AS sendstate, |
| | | ss.current_preachform AS cp, |
| | | IF(ss.sendstate = 4, 1, 0) AS f_no, |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0) AS f_need, |
| | | IF(ss.sendstate = 6, 1, 0) AS f_succ, |
| | | IF(ss.sendstate IN (5, 7), 1, 0) AS f_fail, |
| | | -- é访æ¹å¼å½ä¸æ¡ä»¶ï¼æ¹å¼ 1 æé¤ãæ éé访ãï¼æ¹å¼ 3 åªç®å·²å®æï¼å
¶å®æ¹å¼ä¸è®¾é |
| | | IF(@followUpCountStyle = '1', |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0), |
| | | IF(@followUpCountStyle = '3', |
| | | IF(ss.sendstate = 6, 1, 0), |
| | | IF(ss.sendstate IS NOT NULL, 1, 0))) AS ch_hit |
| | | FROM service_subtask ss |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2' |
| | | AND ss.visit_count = 1 -- åªè¦é¦æ¬¡é访 |
| | | AND ss.leavehospitaldistrictcode IS NOT NULL |
| | | AND ss.endtime >= DATE('2026-09-04 00:00:00') |
| | | AND ss.endtime < DATE_ADD(DATE('2026-11-03 23:59:59'), INTERVAL 1 DAY) |
| | | AND ss.orgid = '20001001' |
| | | ) r |
| | | GROUP BY r.ward_code |
| | | ) t |
| | | LEFT JOIN ( |
| | | -- åæ¶çï¼selectTimelyRateBatch ççä»·åæ³ï¼æç
åºé¢èå䏿¬¡åå
³èï¼é¿å
ä¸å¯¹å¤æ¾å¤§åæ¯ï¼ |
| | | SELECT |
| | | ss.leavehospitaldistrictcode AS ward_code, |
| | | COUNT(*) AS timely_base, |
| | | SUM(IF(ss.finishtime IS NOT NULL |
| | | AND DATEDIFF(ss.finishtime, ss.endtime) <= 7 + IFNULL(cp.compensate_days, 0), 1, 0)) AS timely_cnt, |
| | | MIN(ss.endtime) AS timelyEndMin, -- è¿ä¸å£å¾å®é
è¦çå°çåºé¢æ¶é´èå´ |
| | | MAX(ss.endtime) AS timelyEndMax |
| | | FROM service_subtask ss |
| | | LEFT JOIN ( |
| | | -- è¡¥å¿æ¶é´ï¼varchar ä¸å¯è½æ¯ç©ºä¸²ï¼å
æåä»»å¡èåæä¸è¡ |
| | | SELECT subid, SUM(CAST(COALESCE(NULLIF(TRIM(compensate_time), ''), '0') AS SIGNED)) AS compensate_days |
| | | FROM service_subtask_preachform |
| | | WHERE del_flag = 0 |
| | | GROUP BY subid |
| | | ) cp ON cp.subid = ss.id |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2' |
| | | AND ss.visit_count = 1 |
| | | AND ss.leavehospitaldistrictcode IS NOT NULL |
| | | AND ss.visit_time IS NOT NULL |
| | | AND ss.sendstate <> 4 |
| | | AND DATE(ss.visit_time) < DATE(NOW()) -- æ¥å£æªä¼ startTime/endTime æ¶çåºå®æ¡ä»¶ |
| | | -- åæ¶çè¦ä¸è¦è·ä¸»æ¥è¯¢ååºé´ï¼æ¾å¼ä¸é¢ä¸¤è¡å³å¯ï¼æ¾å¼å timelyBase æä¼çäºåºéè®¿ï¼ |
| | | -- AND ss.endtime >= DATE('2026-09-04 00:00:00') |
| | | -- AND ss.endtime < DATE_ADD(DATE('2026-11-03 23:59:59'), INTERVAL 1 DAY) |
| | | AND ss.orgid = '20001001' |
| | | GROUP BY ss.leavehospitaldistrictcode |
| | | ) rt ON rt.ward_code = t.leavehospitaldistrictcode |
| | | ORDER BY t.dischargeCount DESC; |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 1C. æ³çãåºé¢æ¶é´ãè¿ä¸åï¼æ ç
åº + åºé¢æ¥æ(DATE(endtime)) åç» |
| | | -- 为ä»ä¹ä¸è½åªå¨ PART 1B é select ss.endtime å GROUP BY ward_codeï¼ |
| | | -- · ONLY_FULL_GROUP_BY ä¸ä¼æ¥ 1055ï¼ |
| | | -- · æå¸¦ç§ç endtime å è¿ GROUP BY = 䏿¡è®°å½ä¸ç»ï¼7378 æ¡è¢«ææ 7133 è¡ï¼æ±æ»æ²¡ææä¹ï¼ |
| | | -- · æ´åçæ¯åæ¶çåæ¥è¯¢ä»æç
åºèåï¼æ´ç
åºç timelyBase ä¼è¢«é夿尿¯ä¸è¡ |
| | | -- ï¼å®æµ timelyBase å计ä¼åæ 9,649,708ï¼ãè¿é rt 乿ãç
åº + åºé¢æ¥æãèåï¼ |
| | | -- æä»¥æ¯è¡çåæ¶çåè¯¥è¡æ°æ®æ¯åä¸ä¸ªç²åº¦ã |
| | | -- 宿µï¼1637 è¡ / dischargeCount å计 7378 / timelyBase å计 6950 / diffNeedãdiffSucc å
¨ 0ã |
| | | -- ----------------------------------------------------------------------------- |
| | | SELECT |
| | | t.end_date AS åºé¢æ¥æ, -- åºé¢æ¶é´ï¼æå¤©ï¼ |
| | | t.leavehospitaldistrictname AS åºé¢ç
åº, |
| | | t.deptname AS åºé¢ç§å®¤, |
| | | t.dischargeCount, t.nonFollowUp, t.followUpNeeded, t.needFollowUp, |
| | | t.notSent, t.pendingFollowUp, t.sentNotDone, t.otherStatus, |
| | | t.followUpSuccess, t.followUpFail, |
| | | t.manualSuccess, t.voiceSuccess, t.smsSuccess, t.weChatSuccess, t.noChannelSuccess, |
| | | IF(t.needFollowUp = 0, '0.00%', |
| | | CONCAT(ROUND(100 * (t.followUpSuccess + t.followUpFail) / t.needFollowUp, 2), '%')) AS followUpRate, |
| | | IF(t.needFollowUp = 0, '0.00%', |
| | | CONCAT(ROUND(100 * t.followUpSuccess / t.needFollowUp, 2), '%')) AS followUpSuccessRate, |
| | | IF(t.manual = 0, '0.00%', CONCAT(ROUND(100 * t.manualSuccess / t.manual, 2), '%')) AS manualSuccessRate, |
| | | IF(t.voice = 0, '0.00%', CONCAT(ROUND(100 * t.voiceSuccess / t.voice, 2), '%')) AS voiceSuccessRate, |
| | | IF(t.sms = 0, '0.00%', CONCAT(ROUND(100 * t.smsSuccess / t.sms, 2), '%')) AS smsSuccessRate, |
| | | IF(t.weChat = 0, '0.00%', CONCAT(ROUND(100 * t.weChatSuccess / t.weChat, 2), '%')) AS weChatSuccessRate, |
| | | IF(t.manual + t.voice + t.sms + t.weChat = 0, '0.00%', |
| | | CONCAT(ROUND(100 * (t.manualSuccess + t.voiceSuccess + t.smsSuccess + t.weChatSuccess) |
| | | / (t.manual + t.voice + t.sms + t.weChat), 2), '%')) AS channelSuccessRate, |
| | | IFNULL(rt.timely_base, 0) AS timelyBase, |
| | | IF(IFNULL(rt.timely_base, 0) = 0, '0.00%', |
| | | CONCAT(ROUND(100 * rt.timely_cnt / rt.timely_base, 2), '%')) AS timelyRate, |
| | | t.needFollowUp - (t.notSent + t.pendingFollowUp + t.sentNotDone + t.otherStatus |
| | | + t.followUpSuccess + t.followUpFail) AS diffNeed, |
| | | t.followUpSuccess - (t.manualSuccess + t.voiceSuccess + t.smsSuccess + t.weChatSuccess |
| | | + t.noChannelSuccess) AS diffSucc |
| | | FROM ( |
| | | SELECT |
| | | r.ward_code AS leavehospitaldistrictcode, |
| | | r.end_date AS end_date, |
| | | MAX(r.ward_name) AS leavehospitaldistrictname, |
| | | MAX(r.dept_name) AS deptname, |
| | | COUNT(*) AS dischargeCount, |
| | | SUM(r.f_no) AS nonFollowUp, |
| | | SUM(r.f_need) AS followUpNeeded, |
| | | SUM(r.f_need) AS needFollowUp, |
| | | SUM(IF(r.sendstate = 1, 1, 0)) AS notSent, |
| | | SUM(IF(r.sendstate = 2, 1, 0)) AS pendingFollowUp, |
| | | SUM(IF(r.sendstate = 3, 1, 0)) AS sentNotDone, |
| | | SUM(IF(r.sendstate IS NOT NULL AND r.sendstate <> 4 |
| | | AND r.sendstate NOT IN (1, 2, 3, 5, 6, 7), 1, 0)) AS otherStatus, |
| | | SUM(r.f_succ) AS followUpSuccess, |
| | | SUM(r.f_fail) AS followUpFail, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '1', 1, 0)) AS manual, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '3', 1, 0)) AS voice, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '4', 1, 0)) AS sms, |
| | | SUM(IF(r.ch_hit = 1 AND r.cp = '5', 1, 0)) AS weChat, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '1', 1, 0)) AS manualSuccess, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '3', 1, 0)) AS voiceSuccess, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '4', 1, 0)) AS smsSuccess, |
| | | SUM(IF(r.sendstate = 6 AND r.cp = '5', 1, 0)) AS weChatSuccess, |
| | | SUM(IF(r.sendstate = 6 AND (r.cp IS NULL OR r.cp NOT IN ('1','3','4','5')), 1, 0)) AS noChannelSuccess |
| | | FROM ( |
| | | SELECT |
| | | ss.leavehospitaldistrictcode AS ward_code, |
| | | DATE(ss.endtime) AS end_date, |
| | | ss.leavehospitaldistrictname AS ward_name, |
| | | ss.leaveldeptname AS dept_name, |
| | | ss.sendstate AS sendstate, |
| | | ss.current_preachform AS cp, |
| | | IF(ss.sendstate = 4, 1, 0) AS f_no, |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0) AS f_need, |
| | | IF(ss.sendstate = 6, 1, 0) AS f_succ, |
| | | IF(ss.sendstate IN (5, 7), 1, 0) AS f_fail, |
| | | IF(@followUpCountStyle = '1', |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0), |
| | | IF(@followUpCountStyle = '3', |
| | | IF(ss.sendstate = 6, 1, 0), |
| | | IF(ss.sendstate IS NOT NULL, 1, 0))) AS ch_hit |
| | | FROM service_subtask ss |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2' |
| | | AND ss.visit_count = 1 |
| | | AND ss.leavehospitaldistrictcode IS NOT NULL |
| | | AND ss.endtime >= DATE('2026-09-04 00:00:00') |
| | | AND ss.endtime < DATE_ADD(DATE('2026-11-03 23:59:59'), INTERVAL 1 DAY) |
| | | AND ss.orgid = '20001001' |
| | | ) r |
| | | GROUP BY r.ward_code, r.end_date |
| | | ) t |
| | | LEFT JOIN ( |
| | | -- åæ¶çï¼åæ ·æãç
åº + åºé¢æ¥æãèåï¼æè½å左边æ¯ä¸è¡å¯¹ä¸ |
| | | SELECT |
| | | ss.leavehospitaldistrictcode AS ward_code, |
| | | DATE(ss.endtime) AS end_date, |
| | | COUNT(*) AS timely_base, |
| | | SUM(IF(ss.finishtime IS NOT NULL |
| | | AND DATEDIFF(ss.finishtime, ss.endtime) <= 7 + IFNULL(cp.compensate_days, 0), 1, 0)) AS timely_cnt |
| | | FROM service_subtask ss |
| | | LEFT JOIN ( |
| | | SELECT subid, SUM(CAST(COALESCE(NULLIF(TRIM(compensate_time), ''), '0') AS SIGNED)) AS compensate_days |
| | | FROM service_subtask_preachform |
| | | WHERE del_flag = 0 |
| | | GROUP BY subid |
| | | ) cp ON cp.subid = ss.id |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2' |
| | | AND ss.visit_count = 1 |
| | | AND ss.leavehospitaldistrictcode IS NOT NULL |
| | | AND ss.visit_time IS NOT NULL |
| | | AND ss.sendstate <> 4 |
| | | AND DATE(ss.visit_time) < DATE(NOW()) |
| | | AND ss.orgid = '20001001' |
| | | GROUP BY ss.leavehospitaldistrictcode, DATE(ss.endtime) |
| | | ) rt ON rt.ward_code = t.leavehospitaldistrictcode AND rt.end_date = t.end_date |
| | | ORDER BY t.leavehospitaldistrictname, t.end_date; |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 1D. æç»çï¼ä¸è¡ = 䏿¡é¦æ¬¡é访记å½ï¼ç´æ¥å¸¦åºé¢æ¶é´ï¼è¦æ ¸å¯¹å°äºº/å°å¤©å°±è·è¿ä¸ªï¼ |
| | | -- ----------------------------------------------------------------------------- |
| | | SELECT |
| | | ss.endtime AS åºé¢æ¶é´, |
| | | ss.leavehospitaldistrictname AS åºé¢ç
åº, |
| | | ss.leaveldeptname AS åºé¢ç§å®¤, |
| | | ss.sendname AS æ£è
, |
| | | ss.sendstate AS ç¶æç , |
| | | CASE ss.sendstate |
| | | WHEN 1 THEN 'å¾
åé' WHEN 2 THEN 'å¾
é访' WHEN 3 THEN 'å·²åéæªå®æ' |
| | | WHEN 4 THEN 'æ éé访' WHEN 5 THEN 'é访失败' WHEN 6 THEN 'é访æå' |
| | | WHEN 7 THEN '失败/人工è¶
æ¶' ELSE 'å
¶å®' |
| | | END AS éè®¿ç¶æ, |
| | | ss.current_preachform AS é访æ¹å¼, |
| | | ss.visit_count AS é访次æ°, |
| | | ss.visit_time AS é访æ¶é´, |
| | | ss.finishtime AS 宿æ¶é´, |
| | | IF(ss.sendstate = 4 OR ss.visit_time IS NULL, '-', |
| | | IF(ss.finishtime IS NOT NULL AND DATEDIFF(ss.finishtime, ss.endtime) <= 7, 'åæ¶', 'ä¸åæ¶')) AS æ¯å¦åæ¶ |
| | | FROM service_subtask ss |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2' |
| | | AND ss.visit_count = 1 |
| | | AND ss.leavehospitaldistrictcode IS NOT NULL |
| | | AND ss.endtime >= DATE('2026-09-04 00:00:00') |
| | | AND ss.endtime < DATE_ADD(DATE('2026-11-03 23:59:59'), INTERVAL 1 DAY) |
| | | AND ss.orgid = '20001001' |
| | | ORDER BY ss.leavehospitaldistrictname, ss.endtime; |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 2. åæ¶ç rateï¼æ¥å£åªå¨è¯·æ±éä¼ äº rateDay æ¶ææå¼ï¼ä¸ä¼ è¿å 0.0ï¼ |
| | | -- å£å¾ä¸æ¥å£ä¸åï¼è¿ä¸åç¨çæ¯ãé访æ¶é´(visit_time)ãçªå£ï¼åæ¯æ¯ visit_time ä¸ä¸ºç©ºä¸ |
| | | -- 䏿¯ãæ éé访ãçè®°å½æ°ï¼åºé¢æ¶é´åªä½ä¸ºéå æ¡ä»¶ã |
| | | -- rate = åæ¶æ° / 忝ï¼åæ¶ = finishtime ä¸ä¸ºç©º ä¸ DATEDIFF(finishtime, endtime) <= rateDay + è¡¥å¿å¤©æ° |
| | | -- ----------------------------------------------------------------------------- |
| | | SET @rateDay = 7; -- å 天忶çï¼ä¸æ³çå°±æ´æ®µä¸è· |
| | | |
| | | SELECT |
| | | ss.leavehospitaldistrictcode AS leavehospitaldistrictcode, |
| | | COUNT(*) AS base, -- 忝 |
| | | SUM(IF(ss.finishtime IS NOT NULL |
| | | AND DATEDIFF(ss.finishtime, ss.endtime) <= @rateDay + IFNULL(cp.compensate_days, 0), 1, 0)) AS timely, -- åæ¶æ° |
| | | ROUND(SUM(IF(ss.finishtime IS NOT NULL |
| | | AND DATEDIFF(ss.finishtime, ss.endtime) <= @rateDay + IFNULL(cp.compensate_days, 0), 1, 0)) |
| | | / COUNT(*), 4) AS rate |
| | | FROM service_subtask ss |
| | | LEFT JOIN ( -- è¡¥å¿æ¶é´ï¼å
æåä»»å¡èæä¸è¡åå
³èï¼é¿å
ä¸å¯¹å¤æåæ¯æ¾å¤§ |
| | | SELECT subid, SUM(CAST(COALESCE(NULLIF(TRIM(compensate_time), ''), '0') AS SIGNED)) AS compensate_days |
| | | FROM service_subtask_preachform |
| | | WHERE del_flag = 0 |
| | | GROUP BY subid |
| | | ) cp ON cp.subid = ss.id |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2' |
| | | AND ss.visit_time IS NOT NULL |
| | | AND ss.sendstate <> 4 |
| | | AND DATE(ss.visit_time) < DATE(NOW()) -- æ¥å£æªä¼ startTime/endTime æ¶çåºå®æ¡ä»¶ |
| | | AND ss.endtime >= DATE(@hospitalStartTime) -- çä»·äºæ¥å£ç date_format(endtime,'%y%m%d') >= date_format(...) |
| | | AND (@orgid IS NULL OR ss.orgid = @orgid) |
| | | AND (@campusid IS NULL OR ss.campusid = @campusid) |
| | | GROUP BY ss.leavehospitaldistrictcode |
| | | ORDER BY base DESC; |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 3. æ³åºå®æãè§å¾ãçè¯ç¨è¿ä¸ªï¼MySQL çè§å¾ä¸æ¯æä¼ å
¥åæ°ï¼ |
| | | -- æä»¥è§å¾æã䏿¡åä»»å¡ä¸è¡ãè½æç» + åºé¢æ¥æï¼åæ°è¿æ»¤æ¾å¨æ¥è¯¢å¤å±ï¼ |
| | | -- 注æï¼è§å¾éæ followUpCountStyle åºå®æ '1'ï¼æ¬åºæªé
ç½®è¯¥åæ°ï¼æ¥å£å®é
就走 '1'ï¼ã |
| | | -- è¥ææºæé
çæ¯ '3' æå
¶å®å¼ï¼æ¹è§å¾éç f_succ_first / f_succ_again / ch_hit ä¸å¤ã |
| | | -- ----------------------------------------------------------------------------- |
| | | CREATE OR REPLACE VIEW v_sf_statistic_flag AS |
| | | SELECT |
| | | ss.id, |
| | | DATE(ss.endtime) AS stat_date, -- åºé¢æ¥æï¼hospitalStartTime è¿æ»¤ç¨ï¼ |
| | | ss.leavehospitaldistrictcode AS ward_code, |
| | | ss.leavehospitaldistrictname AS ward_name, |
| | | ss.leaveldeptcode AS dept_code, |
| | | ss.leaveldeptname AS dept_name, |
| | | ss.drcode AS dr_code, |
| | | ss.drname AS dr_name, |
| | | ss.endtime AS end_time, |
| | | ss.visit_time, |
| | | ss.finishtime, |
| | | ss.sendstate, |
| | | ss.visit_count, |
| | | ss.current_preachform AS cp, |
| | | ss.task_situation, |
| | | IF(ss.sendstate = 4, 1, 0) AS f_no, |
| | | IF(ss.sendstate = 4 AND ss.task_situation = 6, 1, 0) AS f_filter, |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0) AS f_need, |
| | | IF(ss.visit_count = 1, 1, 0) AS f_first, |
| | | IF(ss.visit_count > 1, 1, 0) AS f_again, |
| | | IF(ss.sendstate = 6, 1, 0) AS f_succ_first, -- style '1'/'3' |
| | | IF(ss.sendstate = 6, 1, 0) AS f_succ_again, -- style '1'/'3' |
| | | IF(ss.sendstate IN (5, 7), 1, 0) AS f_fail_first, |
| | | IF(ss.sendstate = 5, 1, 0) AS f_fail_again, |
| | | IF(ss.excep = '1', 1, 0) AS f_abnormal, |
| | | IF(ss.sendstate IS NOT NULL AND ss.sendstate <> 4, 1, 0) AS ch_hit -- style '1' |
| | | FROM service_subtask ss |
| | | WHERE ss.del_flag = 0 |
| | | AND ss.service_type = '2'; |
| | | |
| | | -- 建好è§å¾åï¼æ PART 1 éå
å± "FROM ( ... ) r" æ´æ®µæ¢æä¸é¢è¿ä¸è¡å³å¯ï¼å
¶ä½ä¸å¨ï¼ï¼ |
| | | -- FROM v_sf_statistic_flag r |
| | | -- WHERE r.stat_date >= DATE(@hospitalStartTime) |
| | | -- AND (@hospitalEndTime IS NULL OR r.end_time < DATE_ADD(DATE(@hospitalEndTime), INTERVAL 1 DAY)) |
| | | -- AND (@orgid IS NULL OR 1 = 1) -- è§å¾ä¸æªå¸¦ orgid/campusidï¼éè¦çè¯æå®ä»¬ä¹å è¿è§å¾ |
| | | -- åæ¶æä¸é´å± nonFollowUpFirst ç "* IF(@followUpCountStyle = '1', 2, 1)" æ¹æ "* 2"ï¼è§å¾éå·²æ¯ style '1'ï¼ã |
| | | |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- PART 4. å£å¾è¯´æ / 䏿¥å£çå·®å¼ |
| | | -- ----------------------------------------------------------------------------- |
| | | -- 1) æ¥å£è¿åéæä¸º 0ãæ¬æ¬¡æªè¾åºçåæ®µï¼ä»£ç è¿æ¡è·¯å¾æ²¡èµå¼ï¼ï¼ |
| | | -- serviceCountãbzxCountãysfCountãyfsCountãdfsCountãfssbCountãywcCountã |
| | | -- dxfscsãdxsfwccsãdhfscsãdhsfwccsãyczsãhfycsãfinishRateãjoyCountãjoyAllCountãjoyTotalã |
| | | -- pendingFollowUpï¼é¦æ¬¡å¾
é访ï¼åçï¼getStatistic çâä¸å次æ°â忝鿲¡æç´¯å ï¼æä¸º 0ã |
| | | -- 2) nonFollowUpFirst å¨ followUpCountStyle='1' æ¶æ¥å£ä¼éå¤ç´¯å 䏿¬¡ï¼ä¸¤ä¸ª if é½å½ä¸ sendstate=4ï¼ï¼ |
| | | -- SQL ç¨ *2 å¤å»ãè¥æâ䏿¡è®°å½ç®ä¸æ¬¡âåºä¸º 1 åï¼æ IF(@followUpCountStyle='1',2,1) æ¹æ 1ã |
| | | -- 3) æ¯çæ ¼å¼ï¼æ¥å£ç¨ DecimalFormat("##.##%")ï¼åèå
å
¥ãæ«å°¾ 0 çç¥ï¼å¦ 85.5%ï¼ï¼ |
| | | -- SQL ç¨ ROUND(...,2)ï¼åèäºå
¥ãåºå®ä¸¤ä½ï¼å¦ 85.50%ï¼ï¼åæ¯ä¸º 0 æ¶æ¥å£ç» "0.00%"ã |
| | | -- 4) deptcode/deptname/drcode/drnameï¼æ¥å£åãåç»å
ç¬¬ä¸æ¡è®°å½ãçå¼ï¼HashMap 顺åºï¼æ ä¸å¡å«ä¹ï¼ï¼ |
| | | -- SQL ç¨ MAX() 代æ¿ï¼æç
åºç»è®¡æ¶è¿åååªä½åèã |
| | | -- 5) é访æ
åµ taskSituation1~6ï¼task_situation = 1~5 åå«å¯¹åº 1~5ï¼å
¶ä»(=7) å¯¹åº 6ã |
| | | -- æ¬åº service_subtask.task_situation å
¨ä¸º NULLï¼æä»¥è¿å åç®åå¿
ç¶é½æ¯ 0ã |
| | | -- 6) åªç馿¬¡/忬¡ï¼æ¥å£ä¼ visitCount=1 åªç馿¬¡ã>1 åªç忬¡ï¼æ¬ SQL ä¸¤ç±»åæ¶ç»ï¼å为 0 说æè¯¥çªå£æ²¡æå¯¹åºæ°æ®ã |
| | | -- 7) æ¢ç»´åº¦ï¼GROUP BY r.ward_codeï¼ç
åºï¼æ¬ SQLï¼â r.dept_codeï¼ç§å®¤ï¼/ r.dr_codeï¼å»çï¼ã |
| | | -- ç»è®¡æ¹å¼ãåæ¶ç天æ°é½éè¿ PART 0 çåéæ§å¶ï¼ä¸éè¦æ¹ç»æã |
| | | -- ============================================================================= |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ---------------------------- |
| | | -- 任塿¨¡åå¼å
³ï¼sys_config åæ°é
ç½®è¡¨ï¼ |
| | | -- ---------------------------- |
| | | -- é®åï¼task.enabled |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | -- false = å
³é |
| | | -- |
| | | -- å
³éåçè¡ä¸ºï¼ |
| | | -- 1) æ¬æ¨¡å 59 个任å¡ç«¯ç¹ï¼/smartor/servicetask/** 11 个 + |
| | | -- /smartor/serviceSubtask/** 48 个ï¼ä¼è¢« TaskAvailabilityInterceptor æ¦ä¸ï¼ |
| | | -- è¿åæç¡®ä¸å¡é误ãä»»å¡åè½æªå¯ç¨ï¼åæ°é
ç½® task.enabled=falseï¼ï¼è¯¥æ¥å£ä¸å¯ç¨ãï¼ |
| | | -- è䏿¯ 404ï¼ |
| | | -- 2) ä»»å¡/å任塿°æ®æ¬èº«ä¸åå½±åï¼å
¶å®æ¨¡åä»å¯éè¿ ruoyi-task ç api åæ°ï¼ |
| | | -- 3) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼è¿ç¨å
å¼å
³ç¼å TTLï¼ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- 注æï¼æ¬é¡¹ç®ç¨ç MySQL çæ¬å¯è½ä¸æ¯æ ADD COLUMN IF NOT EXISTSï¼ |
| | | -- å æ¤è¿éç¨ information_schema 夿åå卿æ§è¡ï¼èæ¬å¯é夿§è¡ã |
| | | -- ---------------------------- |
| | | |
| | | SET @task_config_exists = ( |
| | | SELECT COUNT(1) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'sys_config' |
| | | AND COLUMN_NAME = 'config_key' |
| | | ); |
| | | |
| | | SET @ddl = IF(@task_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''任塿¨¡åå¼å
³'', ''task.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''ä»»å¡/å任塿¨¡åæ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤true'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''task.enabled'')'); |
| | | |
| | | PREPARE task_stmt FROM @ddl; |
| | | EXECUTE task_stmt; |
| | | DEALLOCATE PREPARE task_stmt; |
| | | |
| | | -- æ¥è¯¢å½åå¼ |
| | | -- SELECT config_id, config_name, config_key, config_value, remark FROM sys_config WHERE config_key = 'task.enabled'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ååéä¸ï¼nhfyï¼ï¼æ»¡æåº¦å¯¼åºãé®é¢è¯¦æ
å æ¯ãæ¯ãæ£è
é访信æ¯è¡¨åãå° 10 人ï¼370 vs 380ï¼ |
| | | -- 2026-10-21 ææ¥ |
| | | -- |
| | | -- ãç°è±¡ãå¯¼åº patItemExportï¼sheet1=æ£è
é访信æ¯è¡¨å 380 è¡ï¼sheet2=é®é¢è¯¦æ
å æ¯ï¼ |
| | | -- sheet2 é 19 éé¢çâæ°éå计âé½åªæ 370ï¼æ¯ sheet1 å° 10ã |
| | | -- |
| | | -- ãæ ¹å ï¼å·²å¨åºä¸æ ¸å®ï¼ã |
| | | -- æ¬æ¹ 380 个åä»»å¡éï¼æ 10 个åä»»å¡ç**å
¨é¨ä½çæç»è¢«é»è¾å é¤**ï¼service_subtask_detail.del_flag='1'ï¼ï¼ |
| | | -- è sheet2 ç SQLï¼SatisfactionMapper.xml#statMydQuestionOptionForExportï¼å¸¦ d.del_flag=0ï¼ |
| | | -- æä»¥è¿ 10 人å¨å æ¯éå®å
¨æ¶å¤±ï¼sheet1 åªæ¥ service_subtaskãä¸çæç»ï¼æä»¥ä»ä»¬ä»å¨è¡¨åéã |
| | | -- |
| | | -- æ ¸å®æ°æ®ï¼2026-10-21 æ¥ 192.168.99.192/smartor_nhfyï¼ï¼ |
| | | -- · å¤ç°å¯¼åºæ¡ä»¶ = orgid 20001001 / campusid 30001002 / service_type 6 / sendstate 6 / |
| | | -- visit_count 1 / (deptcode='40003511' OR leavehospitaldistrictcode='40003514') â æ°å¥½ 380 è¡ |
| | | -- · è¿ 380 è¡éï¼ææææç»(del_flag=0)çåªæ 370 è¡ â 19 é颿¯é¢é½å°åæ ·ç 10 人 |
| | | -- · 10 个é®é¢åä»»å¡å
¨é¨å¨ taskid=196ãå
¨é¢æ»¡æåº¦ãï¼å®ææ¶é´é½å¨ 2026-09-08ï¼deptcode=40003511 |
| | | -- · æ¯ä¸ªåä»»å¡è¢«åå
¥äº 2~6 份䏿¨¡ä¸æ ·ççå·ï¼19 é¢ Ã N 份ï¼ï¼**å
¨é¨ del_flag=1**ï¼ |
| | | -- ä¸ update_time == create_timeï¼åå
¥ååä¸ç§å
就被å ï¼ï¼ä¾å¦ æ¨å(53783) 6 ä»½çæ¡éé¢å®å
¨ç¸å |
| | | -- · å
¨é¢åç±»åå¼å¸¸ï¼service_type=6 éâæç»å
¨è¢«å å
âçåä»»å¡å
± 22 个ï¼8æ3个ã9æ19个ï¼ï¼ |
| | | -- 妿 60 个æ¯âé¨å被å âãæä»¥è¿ä¸æ¯ä¸æ¬¡æ§ææ»ï¼èæ¯ææ¡âéå¡«/è¦çâé¾è·¯åå¤åçã |
| | | -- |
| | | -- ã为ä»ä¹âéå¡«âä¼åæå¤ä»½å¯æ¬ã |
| | | -- ServiceSubtaskDetailMapper.xml#isExistServiceSubtaskDetail åªæ¥ del_flag=0ï¼ |
| | | -- æç»ä¸æ¦è¢«é»è¾å é¤å°±æ¥ä¸å° â ä¸ä¸æ¬¡ä¿åèµ° insertï¼äºæ¯æ¯é填䏿¬¡å°±å¤ä¸ä»½å¯æ¬ã |
| | | -- |
| | | -- ã说æãå½åä»åºéå¯ä¸ä¼æ service_subtask_detail.del_flag ç½® '1' çä»£ç æ¯ |
| | | -- ServiceSubtaskServiceImpl#setFailSubTaskDefalutValï¼çº¦ 3535~3543 è¡ï¼ä¿åé»è®¤å¼å¤±è´¥æ¶âå é¤è¯¯æ°å¢detailéçæ°æ®âï¼ï¼ |
| | | -- ä½å®åªå¤ç sendstate=5ãä¸åªé对 sys_config é hosp.default.dept(40003025,40003460) / |
| | | -- hosp.default.ward(40003026,40003461) é
ç½®çç§å®¤ç
åºï¼ä¸å« 40003511ãä¹ä¸æ¯ sendstate=6ã |
| | | -- â 线ä¸å
/å
¶ä»å
¥å£è¿æä¸å¤âéå¡«å³å
å æ§æç»âçé»è¾ï¼éè¦ç»§ç»å®ä½ï¼è§ææ«ãå¾
åãï¼ã |
| | | -- |
| | | -- ãæ¬èæ¬ãç»åºä¸¤ç§æ 380 / 370 è¡¥æä¸è´çåæ³ï¼é»è®¤é½æ³¨éæï¼ç¡®è®¤ååæ§è¡ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0ã影忏
åï¼10 个åä»»å¡ï¼deptcode=40003511ï¼taskid=196ï¼2026-09-08 å®æï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT s.id AS subid, s.patid, s.sendname, s.phone, s.finishtime, |
| | | (SELECT COUNT(*) FROM service_subtask_detail d WHERE d.sub_id = s.id) AS detail_rows, |
| | | (SELECT COUNT(*) FROM service_subtask_detail d WHERE d.sub_id = s.id AND d.del_flag = 0) AS live_rows |
| | | FROM service_subtask s |
| | | WHERE s.id IN (44957, 45094, 45095, 45099, 45102, 45108, 45109, 45110, 45111, 45114) |
| | | ORDER BY s.finishtime; |
| | | -- 颿ï¼10 è¡ï¼detail_rows 38~114ï¼live_rows å
¨ä¸º 0 |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãå¤ä»½ï¼æ§è¡ä»»ä½ä¿®æ¹åå
è·ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- CREATE TABLE bak_ssd_20261021_nhfy AS |
| | | -- SELECT * FROM service_subtask_detail |
| | | -- WHERE sub_id IN (44957, 45094, 45095, 45099, 45102, 45108, 45109, 45110, 45111, 45114); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãæ¹æ¡Aï¼æ¨èï¼ï¼æ¯éé¢åªæ¢å¤âææ°ä¸ä»½â坿¬ï¼å
¶ä½å¯æ¬ç»§ç»ä¿ç del_flag=1 |
| | | -- å½±åè¡æ°ï¼190ï¼= 19 é¢ Ã 10 人ï¼ï¼å·² dry-run æ ¸å® |
| | | -- â ï¸ åæï¼è¿äºçæ¡ç¡®å®æ¯æ£è
ççå®ä½çï¼å·²æ ¸å¯¹ï¼æ¯ä»½å¯æ¬çæ¡å®å
¨ä¸è´ï¼ä¸æ¯èæ°æ®ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask_detail d |
| | | -- JOIN (SELECT sub_id, scriptid, MAX(id) AS keep_id |
| | | -- FROM service_subtask_detail |
| | | -- WHERE sub_id IN (44957, 45094, 45095, 45099, 45102, 45108, 45109, 45110, 45111, 45114) |
| | | -- GROUP BY sub_id, scriptid) x |
| | | -- ON x.keep_id = d.id |
| | | -- SET d.del_flag = '0', d.update_time = NOW(); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2bãæ¹æ¡Bï¼å¦æè¿å 份é®å·å
¶å®ä¸è¯¥ç®â已宿âï¼ï¼æå任塿¹æâæ éé访/䏿§è¡âï¼ |
| | | -- è¿æ ·å®ä»¬ä¸ä¼åè¿â已宿âå£å¾ï¼è¡¨ååå æ¯é½ä¼æ¯ 370ã |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask SET sendstate = 4, update_time = NOW() |
| | | -- WHERE id IN (44957, 45094, 45095, 45099, 45102, 45108, 45109, 45110, 45111, 45114); |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã3ãæ ¡éªï¼æ§è¡æ¹æ¡Aååºè¾åº 380 / 380ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT COUNT(*) AS form_rows, |
| | | COUNT(DISTINCT CASE WHEN d.live = 1 THEN d.sub_id END) AS with_live_detail |
| | | FROM service_subtask s |
| | | LEFT JOIN (SELECT sub_id, MAX(del_flag = 0) AS live FROM service_subtask_detail GROUP BY sub_id) d |
| | | ON d.sub_id = s.id |
| | | WHERE s.del_flag = '0' AND s.orgid = '20001001' AND s.campusid = '30001002' |
| | | AND s.service_type = 6 AND s.sendstate = 6 AND s.visit_count = 1 |
| | | AND (s.deptcode = '40003511' OR s.leavehospitaldistrictcode = '40003514'); |
| | | |
| | | -- éé¢åç¡®è®¤ä¸æ¬¡ï¼19 è¡ï¼counted_patients åºå
¨é¨ = 380ï¼ |
| | | SELECT d.questiontext, COUNT(DISTINCT s.id) AS counted_patients |
| | | FROM service_subtask s |
| | | JOIN service_subtask_detail d |
| | | ON d.sub_id = s.id AND d.del_flag = 0 |
| | | 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') |
| | | WHERE s.del_flag = '0' AND s.orgid = '20001001' AND s.campusid = '30001002' |
| | | AND s.service_type = 6 AND s.sendstate = 6 AND s.visit_count = 1 |
| | | AND (s.deptcode = '40003511' OR s.leavehospitaldistrictcode = '40003514') |
| | | GROUP BY d.questiontext |
| | | ORDER BY counted_patients DESC, d.questiontext; |
| | | |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã4ãåæ»ï¼æ¹æ¡Aæ§è¡åæéè¦ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | -- UPDATE service_subtask_detail d |
| | | -- JOIN bak_ssd_20261021_nhfy b ON b.id = d.id |
| | | -- SET d.del_flag = b.del_flag, d.update_time = b.update_time; |
| | | -- DROP TABLE bak_ssd_20261021_nhfy; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ãå¾
åï¼æ ¹å æ²»çï¼ä»£ç ä¾§ï¼ã |
| | | -- 1) å®ä½çº¿ä¸âéå¡«/è¦çâææ§æç»ç½® del_flag=1 ç飿®µä»£ç ï¼ |
| | | -- å½åä»åºåªæ setFailSubTaskDefalutVal ä¼è¿ä¹åï¼ä¸åªè¦ç hosp.default.dept/ward çç§å®¤ï¼ï¼ |
| | | -- 40003511 ä¸å¨é
ç½®é â 说æçº¿ä¸å
çæ¬ä¸åï¼æè¿æå¦ä¸å¤å é¤å
¥å£ã |
| | | -- 建议ï¼å¨ service_subtask_detail ç update/delete å
¥å£å æ¥å¿ï¼sub_id + æä½äºº + æ¶é´ï¼ï¼ |
| | | -- æå¯¹çº¿ä¸ jar ç´æ¥åæ¥ updateServiceSubtaskDetail çè°ç¨ç¹ã |
| | | -- 2) æ¹æâå
åæåãåå æ§âï¼ä¸è¦âå
å ååâï¼ |
| | | -- ç°å¨ isExistServiceSubtaskDetail åªæ¥ del_flag=0ï¼å é¤åå¿
ç¶å insertï¼ |
| | | -- æä»¥ä¸æ¬¡å¼å¸¸ä¸æå°±ä¼çä¸âå
¨å æ æ°âç空çå·ï¼æ¬é®é¢ï¼ã |
| | | -- å»ºè®®ç» (sub_id, scriptid) å å¯ä¸çº¦æææ¹æç©çè¦çæ´æ°ã |
| | | -- 3) 导åºä¾§å
åºï¼å£å¾å¯èªè§£éï¼ï¼ |
| | | -- âé®é¢è¯¦æ
å æ¯âSheet å¢å ä¸è¡ãæªä½çãï¼æå¨ãæ£è
é访信æ¯è¡¨åãå ä¸åãæ¯å¦å·²ä½çãï¼ |
| | | -- è¿æ · 380 vs 370 å½åºå°±è½å¯¹ä¸ï¼ä¸ç¨åç¿»åºã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ---------------------------- |
| | | -- åºå
¥é¢é访模å + å®£ææ¨¡å å¼å
³ï¼sys_config åæ°é
ç½®è¡¨ï¼ |
| | | -- ---------------------------- |
| | | -- æ¬èæ¬ä¸æ¬¡å»ºä¸¤ä¸ªé®ï¼é½å¯é夿§è¡ï¼å¹çï¼ï¼ |
| | | -- |
| | | -- é®åï¼inhospvisit.enabled |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | -- false = å
³é |
| | | -- |
| | | -- é®åï¼publicity.enabled |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼ |
| | | -- false = å
³éï¼å
¥é¢å®£æä¸è¯å宣æé½ä¸åæ§è¡ï¼ |
| | | -- |
| | | -- å
³é inhospvisit åçè¡ä¸ºï¼ |
| | | -- 1) ãHTTP é¢ã{@code /smartor/patinhosp} åç¼ä¸ç端ç¹**å
¨é¨**被 |
| | | -- InhospVisitAvailabilityInterceptor æ¦ä¸ï¼è¿åæç¡®ä¸å¡é误 |
| | | -- ãåºå
¥é¢é访åè½æªå¯ç¨ï¼åæ°é
ç½® inhospvisit.enabled=falseï¼ï¼è¯¥æ¥å£ä¸å¯ç¨ãè䏿¯ 404ã |
| | | -- åç®¡çæ¯**åç¼éé
** /smartor/patinhosp/**ï¼ä¸åé个æä¸¾è·¯å¾ï¼ï¼ |
| | | -- å½å宿µè¦ç 15 个端ç¹ï¼3 é访触å + 9 åºç¡æ¥è¯¢/CRUD + 3 å¤å端ç¹ï¼ã |
| | | -- â
**以åå徿¬æ¨¡åå æ¥å£ï¼èªå¨å管ï¼ä¸éè¦æ¹è¿ä¸ªé
ç½®ãä¹ä¸ç¨æ¹ WebConfig** |
| | | -- ââ åªè¦æ°æ§å¶å¨ä»æå¨ /smartor/patinhosp åç¼ä¸ã |
| | | -- â ï¸ å£å¾åæ´å²ï¼åè®¾è®¡åªæ¦ 2 个é访触å端ç¹ï¼åºç¡æ¥è¯¢å»æä¸æ¦ |
| | | -- ï¼çç±ï¼"å
³é访ä¸è¯¥è®©åºå
¥é¢è®°å½æ¥ä¸å°"ï¼ãç¨æ·å®æºåç° |
| | | -- POST /smartor/patinhosp/selectPatMedInhospList å¨å¼å
³å
³éåä»è½æ¥å°ï¼ |
| | | -- å³å®æ¹ä¸º"å
³å°±æ´ä¸ªæ¨¡åç HTTP é¢ä¸å¯ç¨"ã |
| | | -- è¦çæ§ç± sql/_probe/verify_inhospvisit_switch.py 仿§å¶å¨æºç **宿µ**æ ¸å¯¹ |
| | | -- ï¼æ°æ§å¶å¨è¥æéåç¼ä¼è¢«å® FAIL åºæ¥ï¼ã |
| | | -- 2) â ï¸ **åªæ¦ HTTPï¼ä¸å¨è·¨æ¨¡åæ°æ®å¥çº¦**ï¼InhospVisitDataServiceï¼HIS ééãæ¡£æ¡æ±èã |
| | | -- ç»è®¡ç模åå
é¨/跨模å访é®ï¼**ç
§å¸¸å¯ç¨**ãçç±ï¼é£æ¯æ°æ®åæ¥é¾è·¯ï¼ |
| | | -- å
³æé访ä¸è¯¥è®© HIS åä¸è¿åºå
¥é¢è®°å½ï¼æ°æ®ææµæ¯"页é¢çä¸å°"严éå¾å¤ï¼ã |
| | | -- æä»¥"æ´ä¸ªæ¨¡åä¸å¯ç¨"çåç¡®å«ä¹æ¯ã该模åç HTTP é¢ä¸å¯ç¨ãã |
| | | -- 3) â ï¸ **宿¶ä»»å¡ä¹åæ¤å¼å
³æ§å¶**ï¼2025 ä¿®å¤ï¼ä¸åå
ç"å·²ææ¿ï¼ä¸åæ§"ç¸å ââ è§ä¸ï¼ã |
| | | -- RyTask ç 5 个å
¥å£å·²å
¨é¨æ¥å¼å
³ï¼dealOutHospInfo / dealOutHospInfoBySchedule / |
| | | -- dealTaskGroupOutHosp / rollTaskGroupCycle èµ°é¨é¢ï¼dealSubtaskDeadline èµ°å
¥å£å®å«ã |
| | | -- å
³é忍¡åå®ç°æ WARNãæ¨¡åæªå¯ç¨â¦è·³è¿ãå¹¶è¿å 0ï¼å½å¤©ä¸åçæé访ã |
| | | -- |
| | | -- â ï¸â ï¸ è¿æ¡**æ¨ç¿»äºå设计**ï¼å¿
é¡»ç¥éé£é©åäºï¼ |
| | | -- å设计ççç±æ¯"å
³æå®æ¶ä»»å¡ = å½å¤©å
¨é¢é访åæï¼èå¼å
³æ¯ç读çï¼ |
| | | -- 䏿¬¡è¯¯æä½æ²¡æä»»ä½å馿¸ é"ãç°å¨å®ç¡®å®ä¼åæå®æ¶ä»»å¡ï¼æä»¥ï¼ |
| | | -- · 误æä½ä»£ä»· = å½å¤©å
¨é¢é访ä¸çæï¼ä¸å设计æ
å¿çä¸è´ï¼ï¼ |
| | | -- · ä½å馿¸ é**å好äº** ââ å
³éæ¶æ¥å¿éä¼æç¡®æåº |
| | | -- ããåºå
¥é¢éè®¿ãæ¨¡åæªå¯ç¨ï¼åæ°é
ç½® inhospvisit.enabled=falseï¼ï¼â¦ è·³è¿ãï¼ |
| | | -- è䏿¯å忥飿 ·"å
³äºå¼å
³å´æ¯«æ ææã乿²¡ä»»ä½æç¤º"ï¼ |
| | | -- · å¼å
³å¨ãç³»ç»ç®¡ç â åæ°è®¾ç½®ãéå¯è§å¯æ¹ï¼æ¯å»ã宿¶ä»»å¡ãéæ¾ sys_job æ´ç´è§ã |
| | | -- è¦æå宿¶ä»»å¡ä»ç¶å¯ä»¥å»ãç³»ç»ç®¡ç â 宿¶ä»»å¡ãæå sys_jobï¼ä¸¤æ¡è·¯é½ææï¼ï¼ |
| | | -- ryTask.dealOutHospInfo / ryTask.dealOutHospInfoBySchedule / ryTask.dealTaskGroupOutHosp |
| | | -- **æ¬å¼å
³è¦çç宿¶ä»»å¡å
¥å£å·²å
¨è¦ç**ï¼5 个ï¼ï¼ |
| | | -- dealOutHospInfo / dealOutHospInfoBySchedule / dealTaskGroupOutHosp / |
| | | -- rollTaskGroupCycle / dealSubtaskDeadline |
| | | -- å
¶ä¸ rollTaskGroupCycle èµ°é¨é¢ï¼å®æäºæ¨¡ååæ¹æ¡éä¸ç´æ²¡åç"第 10 æ¥"忢ï¼ï¼ |
| | | -- dealSubtaskDeadline å æ¨¡åä¾§æ 宿´å
¥å£èéç¨"å
¥å£èªå¸¦å®å«"ã |
| | | -- å¦ï¼ææ¯é访ï¼dealOperationInfoï¼ä¸é¨è¯é访ï¼é¨è¯çæï¼åèªå |
| | | -- othervisit.enabled / outpatientvisit.enabled 管è¾ï¼ä¸åæ¬å¼å
³ç®¡ï¼è¿æ¯å»æçï¼ã |
| | | -- 4) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼è¿ç¨å
å¼å
³ç¼å TTLï¼ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- å
³é publicity åçè¡ä¸ºï¼ |
| | | -- 1) ãçæä¾§ãå
¥é¢å®£æï¼sys_config: in.helibrary.switch = "2" æ¶æ§è¡ï¼ä¸è¯å宣æ |
| | | -- ï¼ä»
sltd ç«ç¹ï¼é½ä¸åçæ ââ åºå
¥é¢é访主æµç¨åè° PublicityApiï¼ |
| | | -- ç± PublicityFacade 夿¬å¼å
³åè·³è¿ï¼ |
| | | -- 2) ãåéä¾§ãå·²çæç宣æåä»»å¡ï¼subtask.type = "3"ï¼å«"éç¥"ï¼**ä¹ä¸åååº** ââ |
| | | -- RyTask#sfHandlle ä¸ RedisMqReceiver#tsakHandle é½å¨æ´¾åå夿¬å¼å
³ï¼ |
| | | -- å
³éæ¶è·³è¿ææééï¼çµè¯/çä¿¡/å
¬ä¼å·/人工ï¼å¹¶æ WARNï¼ |
| | | -- ãã宣æãæ¨¡åæªå¯ç¨ï¼åæ°é
ç½® publicity.enabled=falseï¼ï¼è·³è¿å®£æåéãsubtaskId=..., patid=...ã |
| | | -- â ï¸ 2025 ä¿®å¤å**åª**管ä½äºçæä¾§ï¼å
³æå¼å
³åå·²çæç宣æç
§æ ·ååºå»ã |
| | | -- â ï¸ è·³è¿æ¶å»æ**䏿¨è¿ subtask ç¶æãä¹ä¸è®°å¤±è´¥** ââ å
³éæ¯"ææ¶ä¸å"ï¼ |
| | | -- 䏿¯"è¿ä¸ªæ£è
ä¸éè¦å®£æ"ï¼æ æå¤±è´¥ä¼è®©è¿æ¡å®£æå¨å¼å
³æ¢å¤åæ°¸è¿ä¸¢å¤±ã |
| | | -- å¼å
³æå¼åï¼ä¸ä¸æ¬¡ longTaskSend / compensateTask ä¼ç
§å¸¸æå®æåºæ¥ååºã |
| | | -- 3) åºå
¥é¢é访主æµç¨ä¸åå½±åï¼å®£æå¤±è´¥ç»ä¸æå®é访ï¼ï¼å
¶å®ç±»åçé访ï¼type 1/2/4ï¼ä¹ä¸åå½±åï¼ |
| | | -- 4) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- 注æï¼æ¬é¡¹ç®ç¨ç MySQL çæ¬å¯è½ä¸æ¯æ ADD COLUMN IF NOT EXISTSï¼ |
| | | -- å æ¤è¿éç¨ information_schema 夿åå卿æ§è¡ã |
| | | -- ---------------------------- |
| | | |
| | | SET @sys_config_exists = ( |
| | | SELECT COUNT(1) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'sys_config' |
| | | AND COLUMN_NAME = 'config_key' |
| | | ); |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- 1) inhospvisit.enabled |
| | | -- --------------------------------------------------------------- |
| | | SET @ddl = IF(@sys_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''åºå
¥é¢é访模åå¼å
³'', ''inhospvisit.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''åºå
¥é¢é访æ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤trueãæ³¨æï¼2025ä¿®å¤åæ¬å¼å
³ä¹ä½ç¨äºå®æ¶ä»»å¡ï¼dealOutHospInfoç3个å
¥å£ï¼ï¼å
³é=å½å¤©ä¸åçæé访'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''inhospvisit.enabled'')'); |
| | | |
| | | PREPARE inhospvisit_stmt FROM @ddl; |
| | | EXECUTE inhospvisit_stmt; |
| | | DEALLOCATE PREPARE inhospvisit_stmt; |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- 2) publicity.enabled |
| | | -- --------------------------------------------------------------- |
| | | SET @ddl = IF(@sys_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''å®£ææ¨¡åå¼å
³'', ''publicity.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''宣æï¼å
¥é¢å®£æ/è¯å宣æï¼æ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤trueãåæ¶ç®¡çæä¾§ä¸åéä¾§ï¼type=3宣æ/éç¥ï¼'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''publicity.enabled'')'); |
| | | |
| | | PREPARE publicity_stmt FROM @ddl; |
| | | EXECUTE publicity_stmt; |
| | | DEALLOCATE PREPARE publicity_stmt; |
| | | |
| | | -- æ¥è¯¢å½åå¼ |
| | | -- SELECT config_id, config_name, config_key, config_value, remark FROM sys_config |
| | | -- WHERE config_key IN ('inhospvisit.enabled', 'publicity.enabled'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- å¨é¢æ£è
"ç§å®¤ / ç
åº / åºä½"æ¯æ¥å·æ° ââ 宿¶ä»»å¡ç»è®°ï¼å¯é夿§è¡ï¼ |
| | | -- |
| | | -- èæ¯ï¼å¨é¢æ£è
ä¼è½¬ç§ã转ç
åºãæ¢åºï¼è pat_med_inhosp çä½ç½®å段åªå¨"å
¥é¢éé"æ¶ |
| | | -- åè¿ä¸æ¬¡ï¼ä¹åä¸ä¼èªå·±æ´æ°ï¼è½¬ç§/æ¢åºæ£è
ä¼ä¸ç´æ¾ç¤ºæ§ç§å®¤/æ§ç
åº/æ§åºä½ã |
| | | -- æ¬ä»»å¡æ¯å¤©ææ£è
æ¥ä¸é HIS é该æ£è
"å½åçå¨é¢ä¿¡æ¯" |
| | | -- ï¼dtcQueryHealthcareRecordList ââ ä¸å
¥é¢ééåä¸ä¸ªæ¥å£ï¼æ healthcareRecordNo 忥ã |
| | | -- statusList=["FH0109.24"] åªåå¨é¢è®°å½ï¼ï¼ä¸åºå
æ¯å¯¹ååªåååçåæ®µã |
| | | -- å·²ä¸å¨é¢ï¼æ¥å£è¿å空ï¼çæ£è
åªè·³è¿è®¡æ°ï¼ä½ç½®ä¿æä¸å¨ï¼inhospstate ä»ç±åºé¢ééè´è´£ã |
| | | -- |
| | | -- å®ç°ï¼ruoyi-datacollection ç InhospDeptRefreshServiceImpl |
| | | -- å
¥å£ï¼ruoyi-quartz ç com.ruoyi.quartz.task.RyTask#refreshInhospDeptInfo() |
| | | -- å£å¾ï¼ä»
spring.profiles.active=nhfyï¼ååéä¸ï¼æ§è¡ï¼å
¶ä»ç«ç¹ç´æ¥è·³è¿ |
| | | -- |
| | | -- åæ°éæ©çç±ï¼ |
| | | -- cron_expression = '0 30 3 * * ?' æ¯å¤© 03:30 |
| | | -- ââ é¿å¼ 01:00 çå
¥é¢ééï¼dealHisDataï¼ä¸ 02:00 çåºé¢å¤çï¼dealOutHospInfoï¼ï¼ |
| | | -- å¦åä¼ä¸æ¬ä»»å¡æ¢"å䏿¹æ£è
çå½åç¶æ"ï¼è¯»å°åæ°åæ§çæ°æ®ã |
| | | -- concurrent = '1' ç¦æ¢å¹¶åï¼ä¸è½®çº¦ 10 åéï¼å®æµå次 137~460ms à 约 3000 äººï¼ |
| | | -- å å æ§è¡æ²¡ææä¹ï¼å®ç°é妿 Redis è¿è¡éå
åºæå·¥è§¦åï¼ |
| | | -- misfire_policy = '1' ç«å³æ§è¡ï¼æå¡å¨ 03:30 åæºãä¹åææ¢å¤æ¶è¡¥è·ä¸æ¬¡ã |
| | | -- æ¬ä»»å¡å¹çï¼åªåååçåæ®µï¼ï¼è¡¥è·æ å®³ï¼ |
| | | -- è¥æ³"éè¿å°±ç®äº"ï¼æ¹æ '3' å³å¯ã |
| | | -- status = '0' æ£å¸¸ï¼ç»è®°åå³å¯ç¨ï¼ãè¦åç¨æ¹æ '1'ï¼ |
| | | -- æç´æ¥å¨ãç³»ç»ç®¡ç â 宿¶ä»»å¡ãéæåã |
| | | -- |
| | | -- 注æï¼æ¬ä»»å¡åæ°æ®é鿍¡åå¼å
³ç®¡è¾ï¼sys_config: datacollection.enabledï¼ââ |
| | | -- 模åå
³éæ¶é¨é¢æ DataCollectionModuleDisabledExceptionï¼RyTask åªæä¸æ¡ WARN å¹¶è·³è¿æ¬è½®ã |
| | | -- è§ sql/æ°æ®ééå¼å
³_sys_config.sqlã |
| | | -- ============================================================================ |
| | | |
| | | insert into sys_job (job_name, job_group, invoke_target, cron_expression, |
| | | misfire_policy, concurrent, status, create_by, create_time, remark) |
| | | select 'å¨é¢æ£è
ç§å®¤ç
åºåºä½å·æ°ï¼ååéä¸ï¼æ¯å¤©ï¼', |
| | | 'DEFAULT', |
| | | 'ryTask.refreshInhospDeptInfo()', |
| | | '0 30 3 * * ?', |
| | | '1', |
| | | '1', |
| | | '0', |
| | | 'admin', |
| | | sysdate(), |
| | | 'æ¯å¤© 03:30 ææ£è
å·æ° pat_med_inhosp çç§å®¤/ç
åº/åºä½ï¼æ°æ®é鿍¡åï¼' |
| | | from dual |
| | | where not exists ( |
| | | select 1 from sys_job where invoke_target = 'ryTask.refreshInhospDeptInfo()' |
| | | ); |
| | | |
| | | -- --------------------------------------------------------------------------- |
| | | -- ç»è®°åèªæ£ï¼åºæ°å¥½ä¸è¡ï¼status='0'ï¼æ£å¸¸ï¼ãconcurrent='1'ï¼ç¦æ¢å¹¶åï¼ |
| | | -- --------------------------------------------------------------------------- |
| | | -- select job_id, job_name, invoke_target, cron_expression, misfire_policy, concurrent, status |
| | | -- from sys_job where invoke_target = 'ryTask.refreshInhospDeptInfo()'; |
| | | |
| | | -- åªæ³å
è§å¯ãä¸å¯ç¨æ¶ï¼ç»è®°ææåç¶æï¼éªè¯è¿åå¯ç¨ |
| | | -- update sys_job set status = '0' where invoke_target = 'ryTask.refreshInhospDeptInfo()'; |
| | | |
| | | -- åæ»ï¼æ¤éæ¬ä»»å¡ç»è®°ï¼ |
| | | -- delete from sys_job where invoke_target = 'ryTask.refreshInhospDeptInfo()'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- æç°è¡ï¼å°åºæ¯è°æ service_subtask_detail.del_flag ä» 0 æ¹æ 1 |
| | | -- ååéä¸ï¼nhfyï¼2026-10-21 |
| | | -- |
| | | -- ãç»è®ºå
说ã |
| | | -- å
¨ä»åºè½å service_subtask_detail.del_flag çåªæ 3 å¤ï¼å
¶ä¸åªæ 1 å¤è½â䏿¬¡æ¸
空æ´ä»½çå·âï¼ |
| | | -- èä¸åªæå®ä¸ä¼æ¹ update_timeï¼ |
| | | -- |
| | | -- A. ServiceSubtaskServiceImpl#setFailSubTaskDefalutValï¼3533~3544 è¡ï¼ |
| | | -- ç´æ¥è° mapper 循ç¯ç½® del_flag=1ï¼**䏿¹ update_time**ï¼åªæå®è½ææ´å·ä¸æ¬¡æ¸
空ã |
| | | -- quartz å
¥å£ = ryTask.setFailSubTaskDefalutVal()ï¼è¯» sys_config: hosp.default.fail.day |
| | | -- ï¼nhfy è¯¥åæ°=5ï¼åå¨ï¼ï¼ä½ sys_job éå½å没æè¿æ¡ä»»å¡ã |
| | | -- B. POST /smartor/serviceSubtaskDetail/editã/batchEditï¼Controller 118~142 è¡ï¼ |
| | | -- -> ServiceSubtaskDetailServiceImpl.updateServiceSubtaskDetailï¼180~183 è¡ï¼ |
| | | -- -> 伿客æ·ç«¯ä¼ ç delFlag åæ ·åè¿ SQLï¼ä¸å¼ºå¶ updateTime = NOW()ã |
| | | -- C. POST /smartor/serviceSubtaskDetail/editByConditionï¼Controller 144~148 è¡ï¼**没æ @Log**ï¼ |
| | | -- -> updateSSDByConditionï¼åæ ·å®¢æ·ç«¯å¯æ§ delFlagï¼åæ ·å¼ºå¶ updateTime = NOW()ï¼ |
| | | -- WHERE æ¯ patid + scriptid + sub_idï¼ä¸æ¬¡åªè½æ¸
ä¸éé¢ï¼ã |
| | | -- |
| | | -- ãç°åºæçº¹ï¼2026-09-08 é£ 10 个人ï¼å
± 735 è¡è¢«å æç»ï¼ã |
| | | -- · æ¯è¡ update_time ä¸ create_time **éç§ç¸ç**ï¼45094 ç 6 份坿¬è·¨äº 15:41:18~15:41:25ï¼ |
| | | -- å é¤åä»ç¶æ¯ç¸çï¼â 说æå 餿¶æ²¡æéæ°å update_timeã |
| | | -- · èµ° B / C ä¸å®ä¼æ update_time æ¹æå é¤é£ä¸å» â ä¸ç°åºä¸ç¬¦ï¼å¯åºæ¬æé¤ã |
| | | -- · å¯ä¸ç¬¦å"ç´æ¥æ¹æ 1ãä¸å¨ update_time"çå°±æ¯ A é£ç§âè¯»åºæ¥âsetDelFlagâupdateâçåæ³ã |
| | | -- · ä½ A ç两个åæï¼sendstate=5ãç§å®¤å¨ hosp.default.dept/wardï¼å¨ nhfy å½åé
ç½®ä¸é½ä¸æ»¡è¶³ï¼ |
| | | -- ä¸ sys_job éæ²¡æè¿ä¸ªä»»å¡ã2026-09-08 乿²¡æä»»ä½âæå¨æ§è¡ä»»å¡âçæä½æ¥å¿ |
| | | -- â 线ä¸è·çå
ä¸å½åä»åºä»£ç ä¸ä¸è´ï¼æè¿æ®µâå
æåå âçé»è¾æå¨å«çå
¥å£ä¸ã |
| | | -- |
| | | -- ãæ¬èæ¬ãä¸¤æ¡æç°è¡çè·¯åï¼â MySQL general_log æ SQL åæï¼æåï¼10 åéçªå£ï¼ï¼ |
| | | -- ⡠审计触åå¨ï¼å¯é¿ææçï¼åªè®°å½ del_flag ååï¼ã |
| | | -- 齿¯æ¥/è®°å½ï¼ä¸æ¹ä¸å¡æ°æ®ï¼general_log ç¨å¼å
³æ§å¶ï¼è®°å¾å
³ã |
| | | -- ============================================================================ |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- æ¹æ¡â ï¼æ¨èãæå¿«ï¼ï¼general_log æå° SQL åæ ââ è¯å¥å½¢ç¶ç´æ¥æ´é²æ¯åªæ¡ä»£ç è·¯å¾ |
| | | -- · åªå¨å¤ç°çªå£ï¼ä¾å¦æäººéå¡«é®å· / 宿¶ä»»å¡è·æ¹çæ¶æ®µï¼æå¼ 5~10 åé |
| | | -- · éè¦ root æ SUPER æéï¼nhfy åºç¨è´¦å·å°±æ¯ rootï¼ |
| | | -- · å½±åå¾å°ï¼ä½ç产ç¯å¢è¯·æä½å³°ãæå®ç«å»å
³ |
| | | -- ============================================================================ |
| | | |
| | | -- 1) æå¼ï¼è®°å½å° mysql.general_log 表ï¼ä¸åæä»¶ï¼é¿å
ç£çæéé®é¢ï¼ |
| | | -- â ï¸ è¿ä¸å¥è¯·**æå·¥éæ¡æ§è¡**ï¼ä¸è¦æ´æ®µè·ï¼æ´æ®µè·ä¼"å¼äºç«å»å
³"ï¼ä»ä¹é½æä¸å° |
| | | -- SET GLOBAL log_output = 'TABLE'; |
| | | -- SET GLOBAL general_log = 'ON'; |
| | | -- TRUNCATE TABLE mysql.general_log; |
| | | |
| | | -- 2) ââ å¨è¿éå¤ç°ï¼è®©æä¸ªæ£è
鿰填䏿¬¡é®å· / çä¸è½®å®æ¶ä»»å¡ ââï¼å¼çç 5~10 åéï¼ |
| | | |
| | | -- 3) æåææâææç»ç½®ä¸ºå é¤âç UPDATE åæ |
| | | SELECT event_time, user_host, thread_id, argument |
| | | FROM mysql.general_log |
| | | WHERE command_type = 'Query' |
| | | AND argument LIKE 'update service_subtask_detail%' |
| | | AND argument LIKE '%del_flag%' |
| | | ORDER BY event_time DESC |
| | | LIMIT 200; |
| | | |
| | | -- 4) 顺便çè¿æ®µæ¶é´éåªäºä¼è¯/æ¥å£å¨åæç»ï¼insert / update é½ååºæ¥ï¼ |
| | | SELECT event_time, LEFT(argument, 160) AS sql_head, COUNT(*) AS times |
| | | FROM mysql.general_log |
| | | WHERE command_type = 'Query' |
| | | AND argument LIKE '%service_subtask_detail%' |
| | | GROUP BY LEFT(argument, 160) |
| | | ORDER BY times DESC |
| | | LIMIT 30; |
| | | |
| | | -- 5) å
³éï¼å¡å¿
æå·¥æ§è¡ï¼ |
| | | -- SET GLOBAL general_log = 'OFF'; |
| | | |
| | | -- ãæä¹è¯»ç»æãç WHERE çå½¢ç¶å³å¯å®ä½ä»£ç ï¼ |
| | | -- · where id = ? -> /smartor/serviceSubtaskDetail/edit æ /batchEdit |
| | | -- · where patid = ? and scriptid = ? and sub_id = ? -> /smartor/serviceSubtaskDetail/editByCondition |
| | | -- · 䏿¡ä¸æ¡ by id ç循ç¯ï¼åä¸ç§å
åå æ¡ï¼ä¸ update_time 没åï¼ -> åå° jobï¼setFailSubTaskDefalutVal é£ä¸ç±»ï¼ |
| | | -- · 没æ update_time èµå¼ -> ç´æ¥è° mapper çåæ³ï¼ä¸æ¯ Controller -> Service é¾è·¯ï¼ |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- æ¹æ¡â¡ï¼å®¡è®¡è§¦åå¨ï¼å¯é¿ææçï¼åªå¨ del_flag çæ£ååæ¶è®°ä¸è¡ï¼ |
| | | -- ä¸ä¾èµ general_log å¼å
³ï¼è®°å½æ¯«ç§æ¶é´ + æ¯å¦é¡ºå¸¦æ¹äº update_timeï¼ |
| | | -- åè
ç¨æ¥ååºç¨ç access log / ä¸å¡æ¥å¿å¯¹é½ï¼åè
ç¨æ¥å¤å®èµ°çæ¯ä¸æ¯ Service é¾è·¯ã |
| | | -- ============================================================================ |
| | | |
| | | -- â ï¸ ä»¥ä¸ DDL é»è®¤æ³¨éæï¼ç¡®è®¤è¦é¿ææå®¡è®¡ååæ¶æ³¨éåæ§è¡ï¼Navicat / DBeaver å¯ç´æ¥æ´æ®µæ§è¡ï¼ |
| | | -- CREATE TABLE IF NOT EXISTS audit_detail_delflag ( |
| | | -- audit_id BIGINT AUTO_INCREMENT PRIMARY KEY, |
| | | -- detail_id BIGINT NULL COMMENT '被æ¹çæç» id', |
| | | -- sub_id BIGINT NULL COMMENT 'åä»»å¡ id', |
| | | -- scriptid BIGINT NULL COMMENT 'é¢ç® id', |
| | | -- old_flag VARCHAR(10) NULL, |
| | | -- new_flag VARCHAR(10) NULL, |
| | | -- created_at DATETIME(3) NULL COMMENT 'åè¡ç create_time', |
| | | -- updated_at DATETIME(3) NULL COMMENT 'åè¡ç update_time', |
| | | -- new_upd_at DATETIME(3) NULL COMMENT 'æ¬æ¬¡è¢«æ¹åç update_time', |
| | | -- at DATETIME(3) NOT NULL COMMENT '触åå¨è§¦åæ¶å»ï¼æ¯«ç§ï¼', |
| | | -- db_user VARCHAR(64) NULL, |
| | | -- conn_id BIGINT NULL |
| | | -- ) ENGINE = InnoDB COMMENT = 'service_subtask_detail.del_flag åæ´å®¡è®¡'; |
| | | -- |
| | | -- DROP TRIGGER IF EXISTS trg_ssd_delflag_au; |
| | | -- CREATE TRIGGER trg_ssd_delflag_au |
| | | -- AFTER UPDATE ON service_subtask_detail |
| | | -- FOR EACH ROW |
| | | -- BEGIN |
| | | -- IF COALESCE(OLD.del_flag, '') <> COALESCE(NEW.del_flag, '') THEN |
| | | -- INSERT INTO audit_detail_delflag |
| | | -- (detail_id, sub_id, scriptid, old_flag, new_flag, created_at, updated_at, new_upd_at, at, db_user, conn_id) |
| | | -- VALUES |
| | | -- (OLD.id, OLD.sub_id, OLD.scriptid, OLD.del_flag, NEW.del_flag, |
| | | -- OLD.create_time, OLD.update_time, NEW.update_time, NOW(3), |
| | | -- CURRENT_USER(), CONNECTION_ID()); |
| | | -- END IF; |
| | | -- END; |
| | | |
| | | -- äºåçç»è®ºï¼å»ºäº audit_detail_delflag ä¹åæç¨ï¼ |
| | | -- SELECT DATE(at) AS day, HOUR(at) AS hr, new_flag, COUNT(*) AS rows_cnt, |
| | | -- COUNT(DISTINCT sub_id) AS subs, |
| | | -- SUM(updated_at IS NULL OR updated_at = new_upd_at) AS upd_untouched, -- >0 说æèµ°ç䏿¯ Service é¾è·¯ |
| | | -- SUM(updated_at IS NOT NULL AND updated_at <> new_upd_at) AS upd_changed |
| | | -- FROM audit_detail_delflag |
| | | -- GROUP BY day, hr, new_flag |
| | | -- ORDER BY day DESC, hr DESC; |
| | | |
| | | -- æä¸ªåä»»å¡ç宿´è½¨è¿¹ï¼åä¸å¡æ¥å¿çæ¶é´ç¹å¯¹é½ï¼å»ºäºå®¡è®¡è¡¨ä¹åæç¨ï¼ |
| | | -- SELECT * FROM audit_detail_delflag WHERE sub_id = 45094 ORDER BY at; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- äºå夿®ï¼ä¸æå
ä¹è½ç¨ï¼ï¼æ¿å岿°æ®å¤æææ¬¡å é¤èµ°çæ¯åªæ¡é¾è·¯ |
| | | -- update_time ä¸ create_time ç¸ç -> 䏿¯ Controller->Service é¾è·¯ï¼B/C ä¼å¼ºå¶å·æ° update_timeï¼ |
| | | -- update_time æ¯ create_time æ -> B æ C |
| | | -- ============================================================================ |
| | | SELECT sub_id, |
| | | COUNT(*) AS rows_cnt, |
| | | SUM(update_time = create_time) AS upd_untouched, -- ç´æ¥ mapperï¼job ä¸ç±»ï¼ |
| | | SUM(update_time <> create_time) AS upd_changed, -- Controller -> Service |
| | | MIN(create_time) AS first_create, MAX(create_time) AS last_create |
| | | FROM service_subtask_detail |
| | | WHERE del_flag <> 0 |
| | | GROUP BY sub_id |
| | | ORDER BY rows_cnt DESC |
| | | LIMIT 50; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- å½å仿ªä¿®å¤çï¼å
¨å æ æ´»è¡ï¼ââ æå¤æ¥æ¶å·²æ 5 个被æå·¥æ¢å¤äºï¼å©ä¸çå°±æ¯è¿äº |
| | | -- ============================================================================ |
| | | SELECT s.id AS subid, s.patid, s.sendname, s.finishtime, |
| | | (SELECT COUNT(*) FROM service_subtask_detail d WHERE d.sub_id = s.id AND d.del_flag = 0) AS live_rows, |
| | | (SELECT COUNT(*) FROM service_subtask_detail d WHERE d.sub_id = s.id) AS all_rows |
| | | FROM service_subtask s |
| | | WHERE s.service_type = 6 AND s.sendstate = 6 |
| | | AND EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = s.id) |
| | | AND NOT EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = s.id AND d.del_flag = 0) |
| | | ORDER BY s.finishtime; |
| | | |
| | | |
| | | -- ============================================================================ |
| | | -- ã代ç ä¾§ä¿®æ³ï¼å®ä½å°ä¹åä¸èµ·æ¹ï¼ã |
| | | -- 1) æ delFlag ä»å®¢æ·ç«¯å¯æ§åæ®µéææï¼ |
| | | -- ServiceSubtaskDetailMapper.xml#updateServiceSubtaskDetail / #updateSSDByCondition |
| | | -- å æ <if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if> è¿ä¸è¡ï¼ |
| | | -- é»è¾å é¤åªå
许åå°ä¸ç¨æ¹æ³ï¼æç¡®çæ¹æ³å + æä½äºº + æ¥å¿ï¼ã |
| | | -- 2) åå°âè¡¥é»è®¤å¼âä¸è¦âå
æåå âï¼ |
| | | -- setFailSubTaskDefalutVal éå
ææ¯é¢çé»è®¤å¼ç®å®ã确认å
¨é½æé»è®¤å¼ï¼flagï¼ï¼ |
| | | -- åå³å®æ¯âæ´æ¹æå
¥âè¿æ¯âä»ä¹é½ä¸åâï¼é¿å
å æåæè¿å»çæ°æ®ã |
| | | -- 3) æç»å»éï¼ |
| | | -- isExistServiceSubtaskDetail åªç del_flag=0 â æ¯æ¬¡é建é½ä¼æ°å¢å¯æ¬ã |
| | | -- å»ºè®®ç» (sub_id, scriptid) å å¯ä¸ç´¢å¼ + ç©çè¦çæ´æ°ï¼å¯æ¬å°±ä¸ä¼è¶ç§¯è¶å¤ã |
| | | -- 4) æäº¤å¹çï¼ |
| | | -- /smartor/subtaskAnswer/saveQuestionAnswer æ¯ @Async 䏿 å¹çï¼saveQuestionCache ææ @RepeatSubmitï¼ï¼ |
| | | -- æ£è
端éå¤ç¹å»/éè¯ä¼å¹¶ååå¤ä»½ï¼å»ºè®®å Redis å¹çé®ï¼subid+scriptid+çæ¡æè¦ï¼ã |
| | | -- ============================================================================ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ææ¥ï¼é访导åºçãé®é¢è¯¦æ
å æ¯ã(Sheet2) äººæ° æ¯ãæ£è
é访信æ¯è¡¨åã(Sheet1) å° |
| | | -- ä¾ï¼Sheet1 475 人ï¼Sheet2 çé¢ç®åªæ 283 / 172 人ä½ç |
| | | -- åªè¯»èæ¬ãæ¹ä¸é¢ 3 ä¸ªåæ°å³å¯å¤è·ã |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ãç»è®ºï¼2026-10-29 宿µï¼nhfyï¼éª¨ç§ä¸å¿ä¸ç
åº 40011020ï¼åºé¢ 2026-07-01~09-30ï¼ã |
| | | -- 475 æ¡ä»»å¡ â 475 个"åå·ä½çç人"ãå®çæææ¯ï¼ |
| | | -- · ä»»å¡ 67ã骨ç§ä¸å¿ä¸ç
åºåºé¢é访ãâ æ¨¡æ¿ 115ã骨ç§ä¸å¿ä¸ç
åºé访é®å·ã |
| | | -- â **10 éæ»¡æåº¦é¢**ï¼å»å¾·è¯ä»·/æå¡æåº¦/å»çææâ¦ï¼ï¼ä½ç 283 人 |
| | | -- · ä»»å¡ 68ã骨ç§ä¸å¿ä¸ç
åºåºé¢é访ãâ æ¨¡æ¿ 116ãè¡éª¨é¢éª¨ææ¯åé访é®å·ã |
| | | -- â **8 é骨ç§é¢**ï¼ä¼¤å£æ¯å¦æçº¢è¿/æ¯å¦æ³¨æé¥®æ°´â¦ï¼ï¼ä½ç 129 人 |
| | | -- · ä»»å¡ 67 éè¿æ 44 æ¡ç¨çæ¯ãè¡éª¨é¢éª¨ææ¯åé访é®å·ãâ 43 人 |
| | | -- åå ï¼ä¸å¡ç¡®è®¤ï¼ï¼è¿äºæ£è
æ¬æ¬¡ä½é¢æ¯**ä»å
¶å®ç§å®¤/ç
åºè½¬è¿æ¥**çï¼éè®¿ä»»å¡æ²¿ç¨çæ¯ |
| | | -- **转ç§åç§å®¤/ç
åº**çé£å¥é®å·ï¼ä»»å¡ 67 çé
ç½®æ¬èº«æ²¡å ââ |
| | | -- ä½è¯ï¼è¿ 44 æ¡ççææ¶é´æ£è½å¨ 2026-07-02 ~ 2026-10-01 å天ï¼ä¸æ¯æå¤©ç»ä¸åæ¢ï¼ |
| | | -- ä¸å®ä»¬ç°å¨çè®°å½ç§å®¤/ç
åºé½å·²ç»æ¯éª¨ç§ä¸å¿ä¸ç
æ¿/ä¸ç
åºï¼è½¬ç§å HIS æ´æ°è¿ï¼ã |
| | | -- â æä»¥åä¸ä»»å¡åä¸ä¼åæ¶åºç°"满æåº¦é¢"å"骨ç§é¢"ï¼ä¸éª¨ç§é¢åªæ 43 人ä½çã |
| | | -- · 妿 6 æ¡é¶æ£ä»»å¡ï¼31/148/195/197/11ï¼ï¼å 1ï½2 人 |
| | | -- ä½çè¦çï¼475 æ¡é 458 æ¡ææç»ï¼17 æ¡æ²¡å¡«ï¼11 æ¡"æ éé访" + 6 æ¡å·²å®æä½æ æç»ï¼ã |
| | | -- |
| | | -- 骨ç§é¢å计 172 人ï¼129 + 43ï¼ï¼æ»¡æåº¦é¢å计 283 人ã |
| | | -- æä»¥ Sheet2 æ¯éé¢ç人æ°åªè½æ¯ 283 æ 172ï¼æ°¸è¿åä¸å° 475 ââ |
| | | -- èä¸ Sheet2 çãå æ¯ã忝æ¯**该é¢ä½ç人æ°**ï¼ä¸æ¯ 475ã |
| | | -- |
| | | -- 两个åå ï¼é½ä¸æ¯"ç»è®¡ç®é"ï¼ï¼ |
| | | -- â åä¸ç
åºé
äºä¸¤ä¸ªååé¿æä»»å¡ï¼67 / 68ï¼ï¼æçæ¯ä¸¤å¥ä¸åé®å· ââ é
ç½®å±é¢ï¼ |
| | | -- ⡠转ç§/转ç
åºæ£è
沿ç¨**转ç§åç§å®¤/ç
åº**çé£å¥é®å· ââ ä¸å¡ç¡®è®¤çå£å¾ã |
| | | -- |
| | | -- ãç¨æ³ãæ¹åæ°åæ´æ®µæ§è¡ï¼æã1ãâã5ã顺åºçã |
| | | -- ============================================================================ |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãSheet1 è¡æ°ï¼æ¬æ¬¡å¯¼åºèå´ï¼= å¯¼åº Excel 第 1 个 Sheet çè¡æ°ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '1 表åè¡æ°' AS step, COUNT(*) AS sheet1_rows |
| | | FROM ( |
| | | SELECT DISTINCT b.inhospid |
| | | FROM pat_med_inhosp b |
| | | JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag = '0' AND b.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | AND b.inhospstate = '1' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | ) r |
| | | JOIN service_subtask s ON s.inhospid = r.inhospid AND s.del_flag = 0 AND s.service_type = '2'; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãè¿æ¹ä»»å¡çå身ï¼ä»»å¡ + æ¨¡æ¿ + ä½çäººæ° |
| | | -- ä¸ç¼çåº"åä¸ä¸ªä»»å¡å䏿··äºå å¥é®å·" |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '2 ä»»å¡ä¸æ¨¡æ¿åå¸' AS step, s.taskid, MAX(s.task_name) AS ä»»å¡å, |
| | | s.templatename AS æ£è
å®é
ç¨çé®å·, s.libtemplateid, COUNT(*) AS 任塿°, |
| | | SUM(CASE WHEN EXISTS (SELECT 1 FROM service_subtask_detail x |
| | | WHERE x.sub_id = s.id AND x.del_flag = 0) THEN 1 ELSE 0 END) AS ææç» |
| | | FROM ( |
| | | SELECT DISTINCT b.inhospid |
| | | FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag = '0' AND b.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | AND b.inhospstate = '1' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | ) r |
| | | JOIN service_subtask s ON s.inhospid = r.inhospid AND s.del_flag = 0 AND s.service_type = '2' |
| | | GROUP BY s.taskid, s.templatename, s.libtemplateid |
| | | ORDER BY 任塿° DESC; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã3ãéé¢ä½ç人æ°ï¼= Sheet2 é该é¢çãæ°éå计ãï¼ä¹æ¯ãå æ¯ãçåæ¯ï¼ |
| | | -- ä¸å¯¼åº SQL å®å
¨åå£å¾ï¼åä¸äººåä¸é¢åªå MAX(id) 飿¡ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '3 éé¢ä½ç人æ°' AS step, s.taskid, d.questiontext, |
| | | COUNT(DISTINCT s.id) AS ä½ç人æ°, |
| | | SUM(CASE WHEN TRIM(COALESCE(d.asrtext, '')) = '' THEN 1 ELSE 0 END) AS ç©ºçæ¡è¡ |
| | | FROM service_subtask s |
| | | JOIN service_subtask_detail d ON d.sub_id = s.id AND d.del_flag = 0 |
| | | WHERE s.del_flag = 0 AND s.service_type = '2' |
| | | AND s.taskid IN (67, 68) |
| | | AND s.endtime >= '2026-07-01 00:00:00' AND s.endtime < '2026-10-01 00:00:00' |
| | | 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 s.taskid, d.questiontext |
| | | ORDER BY s.taskid, ä½çäººæ° DESC; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã4ãæ²¡ä½çç人æ¯è°ï¼Sheet1 æãSheet2 éå®å
¨æ²¡æï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '4 没填é®å·ç人' AS step, s.id AS åä»»å¡ID, s.taskid, s.sendname AS å§å, |
| | | DATE_FORMAT(s.endtime, '%Y-%m-%d') AS åºé¢æ¥æ, s.sendstate, |
| | | CASE WHEN s.sendstate = 4 THEN 'æ éé访(æªå)' ELSE '已宿使²¡ææç»' END AS åå |
| | | FROM ( |
| | | SELECT DISTINCT b.inhospid |
| | | FROM pat_med_inhosp b JOIN pat_archive a ON a.id = b.patid |
| | | WHERE a.del_flag = '0' AND b.del_flag = '0' AND a.idcardno IS NOT NULL |
| | | AND b.inhospstate = '1' |
| | | AND b.leavehospitaldistrictcode = '40011020' |
| | | AND b.endtime >= '2026-07-01 00:00:00' AND b.endtime < '2026-10-01 00:00:00' |
| | | ) r |
| | | JOIN service_subtask s ON s.inhospid = r.inhospid AND s.del_flag = 0 AND s.service_type = '2' |
| | | WHERE NOT EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = s.id AND d.del_flag = 0) |
| | | ORDER BY s.sendstate, s.endtime DESC; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã5ã两个ååä»»å¡çé
置对ç
§ï¼æ ¹å ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '5 ååä»»å¡ç模æ¿é
ç½®' AS step, t.taskid, t.task_name, t.templateid, t.templatename, |
| | | t.libtemplateid, t.service_type, t.send_day, t.send_state |
| | | FROM service_task t |
| | | WHERE t.taskid IN (67, 68); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================ |
| | | -- ææ¥ï¼é访导åºçãé®é¢è¯¦æ
å æ¯ãäººæ° æ¯ ãæ£è
é访信æ¯è¡¨åãè¡æ°å°ï¼ä¾ï¼370 vs 380ï¼ |
| | | -- |
| | | -- ãå£å¾äºå®ï¼ä»£ç åå®ï¼ã |
| | | -- * Sheet1ãæ£è
é访信æ¯è¡¨åã= æ¬æ¬¡å¯¼åºçåä»»å¡è¡ï¼ServiceSubtaskController#patItemExport |
| | | -- (ruoyi-task/.../controller/ServiceSubtaskController.java:237) -> patItem() -> selectServiceSubtaskList |
| | | -- => ä¸è¡ = ä¸ä¸ª service_subtaskï¼ä¸ sendstateView / visit_count / ç§å®¤ç
åºççéå®å
¨ä¸è´ï¼ |
| | | -- * Sheet2ãé®é¢è¯¦æ
å æ¯ã= SatisfactionFacade#getQuestionOptionRatioExport(subtaskIds) |
| | | -- -> DefaultSatisfactionApi -> SatisfactionSubtaskServiceImpl#statMydQuestionOptionForExport |
| | | -- -> SatisfactionMapper.xml#statMydQuestionOptionForExportï¼ç¬¬ 206 è¡èµ·ï¼ |
| | | -- 该 SQL æ¯ INNER JOIN service_subtask_detailï¼å¹¶ä¸ |
| | | -- AND s.del_flag='0' AND d.del_flag=0 |
| | | -- AND d.id = (SELECT MAX(d2.id) ... d2.questiontext <=> d.questiontext ...) -- åä¸äººåä¸é¢åªåææ°ä¸æ¡ |
| | | -- åç± ServiceSubtaskServiceImpl#buildMydOptionRows æãä»»å¡+é¢ç®ãæ±æ»ï¼ |
| | | -- 该é¢âæ°éå计â = éä¸åé项ç人æ°ä¹å = 该é¢**æä½ç**çæ£è
æ°ï¼æ¯ä¾ç忝ä¹ç¨è¿ä¸ªï¼ |
| | | -- å
¶ä¸ asrtext ä¸ºç©ºçæ£è
ï¼ |
| | | -- - 该é¢åªé
äº 1 个é项æ¶ï¼ç®è¿è¿ä¸ªéé¡¹ï¼ |
| | | -- - 该é¢é
äº â¥2 个é项æ¶ï¼java éç´æ¥ continue 丢æï¼æ¢ä¸ç®æ°éï¼ä¹ä¸è¿åæ¯ï¼â è§ buildMydOptionRows 第 181~185 è¡ |
| | | -- => åªè¦ææ£è
å¨è¯¥é¢ä¸â没ææç»è¡âæâæç»è¡çæ¡ä¸ºç©ºä¸è¯¥é¢å¤é项âï¼ä»å¨ Sheet2 éå°±å½»åºæ¶å¤±ï¼ |
| | | -- æä»¥ Sheet2 ç人æ°å¤©ç¶ ⤠Sheet1 çè¡æ°ãå·®é¢å°±æ¯è¿ç±»æ£è
ã |
| | | -- |
| | | -- ãæ¬èæ¬ç¨éãæå·®é¢æ£è
ä¸ä¸ªä¸ªååºæ¥ï¼å¤å®å±äºåªç§ç¼ºå¤±ï¼åªè¯»ã䏿¹ä»»ä½æ°æ®ã |
| | | -- ãç¨æ³ã |
| | | -- 1) æä¸é¢ @åé æ¹æåºé®é¢é£æ¬¡å¯¼åºççéæ¡ä»¶ï¼æªå¾é payload çé£äºå¼ï¼ï¼ |
| | | -- 2) è¥æä¸å·²æ 380 个åä»»å¡ idï¼å¯ç´æ¥è·³å°ã0-Bãç¨ id å表æ¿ä»£çéï¼ |
| | | -- 3) ä»ã1ãå¾ä¸é¡ºåºæ§è¡ï¼ç注ééçâ颿âã |
| | | -- ============================================================================ |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã0-Aãç鿡件ï¼ç
§æå¯¼åºè¯·æ± payloadï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SET @orgid := '20001001'; -- ç»å½ç¨æ· orgidï¼åç«¯å¼ºå¶æ³¨å
¥ï¼é页é¢åæ°ï¼ |
| | | SET @campusid := '30001002'; -- ç»å½ç¨æ· campusidï¼åä¸ï¼ |
| | | SET @serviceType := 6; -- payload: serviceType |
| | | SET @sendstateView := 2; -- payload: sendstateViewï¼1 å¾
é访[1,2,3,5,7] / 2 已宿[6] / 3 æ éé访[4]ï¼ |
| | | SET @visitCount := 1; -- payload: visitcountï¼1=ä»
馿¬¡é访ï¼>1=夿¬¡ï¼NULL=ä¸éï¼ |
| | | SET @deptcodes := '40003511'; -- payload: leavelptcodes[0]ï¼å¤ä¸ªç¨éå·ï¼æ åç½® NULL |
| | | SET @districtcodes := '40003514'; -- payload: leavehospitaldistrictcodes[0]ï¼å¤ä¸ªç¨éå·ï¼æ åç½® NULL |
| | | SET @deptOrDistrict := 2; -- payload: deptOrDistrictï¼ç§å®¤ OR ç
åºï¼ |
| | | |
| | | DROP TEMPORARY TABLE IF EXISTS tmp_export_subtask; |
| | | CREATE TEMPORARY TABLE tmp_export_subtask (id BIGINT NOT NULL PRIMARY KEY); |
| | | |
| | | -- ã0-Bãäºéä¸ï¼A ç¨ç鿡件è¿åï¼é»è®¤ï¼ï¼B ç´æ¥ç¨å¯¼åºéé£ 380 个åä»»å¡ id |
| | | INSERT INTO tmp_export_subtask (id) |
| | | SELECT s.id |
| | | FROM service_subtask s |
| | | WHERE s.del_flag = '0' |
| | | AND s.orgid = @orgid |
| | | AND s.campusid = @campusid |
| | | AND s.service_type = @serviceType |
| | | AND ( (@sendstateView = 2 AND s.sendstate = 6) |
| | | OR (@sendstateView = 3 AND s.sendstate = 4) |
| | | OR (@sendstateView = 1 AND s.sendstate IN (1, 2, 3, 5, 7))) |
| | | AND (@visitCount IS NULL |
| | | OR (@visitCount = 1 AND s.visit_count = 1) |
| | | OR (@visitCount > 1 AND s.visit_count > 1)) |
| | | AND (@deptOrDistrict <> 2 |
| | | OR FIND_IN_SET(IFNULL(s.leavehospitaldistrictcode, ''), IFNULL(@districtcodes, '')) > 0 |
| | | OR FIND_IN_SET(IFNULL(s.deptcode, ''), IFNULL(@deptcodes, '')) > 0); |
| | | |
| | | -- B) å·²ç¥ id åè¡¨æ¶æ¹è·è¿ä¸å¥ï¼ææ³¨é廿ãä¸é¢ç INSERT 注éæï¼ï¼éå·åéï¼ |
| | | -- INSERT INTO tmp_export_subtask (id) |
| | | -- SELECT id FROM service_subtask WHERE id IN ( /* 380 个 id */ ); |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã1ãSheet1 è¡æ°ï¼åºè¯¥çäºå¯¼åº Excel éãæ£è
é访信æ¯è¡¨åãçè¡æ°ï¼ä¾ 380ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '1. 表åè¡æ°(Sheet1)' AS step, COUNT(*) AS cnt FROM tmp_export_subtask; |
| | | |
| | | -- è®°ä¸æ»æ°ï¼MySQL 临æ¶è¡¨å¨åä¸è¯å¥éä¸è½è¢«æå¼ä¸¤æ¬¡ï¼åé¢ç¨åé代æ¿åæ¥è¯¢ï¼ |
| | | SET @total := (SELECT COUNT(*) FROM tmp_export_subtask); |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã2ãSheet2 å®é
è½ç»è®¡å°çäººæ° |
| | | -- 2a = è³å°æ 1 æ¡æææç»ï¼del_flag=0ï¼çæ£è
æ° |
| | | -- 2b = æç»åå¨ä½å
¨é¨è¢«é»è¾å é¤çæ£è
æ°ï¼è¿äºäººå¨ Sheet2 éåæ ·çä¸å°ï¼ |
| | | -- 颿ï¼2a <= 1 ç cntï¼å·®é¢ = å®å
¨æ²¡å¡«æ¥/æç»ä¸¢å¤±ç人 |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '2a. ææææç»çæ£è
æ°' AS step, COUNT(DISTINCT d.sub_id) AS cnt |
| | | FROM tmp_export_subtask t |
| | | JOIN service_subtask_detail d ON d.sub_id = t.id AND d.del_flag = 0; |
| | | |
| | | SELECT '2b. æç»å
¨è¢«é»è¾å é¤çæ£è
æ°' AS step, COUNT(*) AS cnt |
| | | FROM tmp_export_subtask t |
| | | WHERE EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = t.id) |
| | | AND NOT EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = t.id AND d.del_flag = 0); |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã3ã差颿¸
åï¼å¨ Sheet1 éãä½å¨ Sheet2 éå®å
¨çä¸å°çæ£è
|
| | | -- reason 说æï¼ |
| | | -- no_detail_row ââ service_subtask_detail é䏿¡è¯¥åä»»å¡çæç»é½æ²¡æï¼æ²¡å¡«æ¥/ä¸ééåº/æç»æªè½åºï¼ |
| | | -- all_deleted ââ ææç»ä½å
¨è¢«é»è¾å é¤ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '3. 差颿£è
æ¸
åï¼åå 1ï¼æ æç»ï¼' AS step; |
| | | SELECT t.id AS subid, s.taskid, s.patid, s.sendname, s.sendstate, s.visit_count, |
| | | s.visit_time, s.finishtime, s.deptcode, s.leavehospitaldistrictcode, |
| | | 'no_detail_row' AS reason |
| | | FROM tmp_export_subtask t |
| | | JOIN service_subtask s ON s.id = t.id |
| | | WHERE NOT EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = t.id) |
| | | ORDER BY t.id; |
| | | |
| | | SELECT '3. 差颿£è
æ¸
åï¼åå 2ï¼æç»å
¨è¢«é»è¾å é¤ï¼' AS step; |
| | | SELECT t.id AS subid, s.taskid, s.patid, s.sendname, s.sendstate, |
| | | (SELECT COUNT(*) FROM service_subtask_detail d WHERE d.sub_id = t.id) AS detail_rows, |
| | | 'all_deleted' AS reason |
| | | FROM tmp_export_subtask t |
| | | JOIN service_subtask s ON s.id = t.id |
| | | WHERE EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = t.id) |
| | | AND NOT EXISTS (SELECT 1 FROM service_subtask_detail d WHERE d.sub_id = t.id AND d.del_flag = 0) |
| | | ORDER BY t.id; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã4ãéé¢äººæ°ï¼ä»»ä½ä¸ä¸ªé¢çãæä½çæ£è
æ°ãé½ <= 表åè¡æ°ï¼ |
| | | -- 导åºéçå°ç 370 å°±æ¯è¿éæä¸è¡ï¼ä¹æ¯è¯¥é¢æ¯ä¾çåæ¯ï¼ |
| | | -- patients_with_row : æè¯¥é¢æç»çäººæ° |
| | | -- answered : çæ¡é空çäººæ° â Sheet2 çâæ°éå计âä¸åæ¯ |
| | | -- empty_answer : ææç»ä½çæ¡ä¸ºç©ºçäººæ° â 被 buildMydOptionRows 丢æçé£é¨åï¼å¤é项é¢ï¼ |
| | | -- no_row : 该é¢è¿æç»é½æ²¡æçäººæ° |
| | | -- ï¼è¿éæ²¡å¥ MAX(id) å»éï¼å»éçè§ã4bãï¼ä¸¤è
å·®å¼=åä¸äººåä¸é¢æå¤æ¡æç»ï¼ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '4. éé¢äººæ°' AS step; |
| | | SELECT d.questiontext, |
| | | COUNT(DISTINCT t.id) AS patients_with_row, |
| | | COUNT(DISTINCT CASE WHEN TRIM(COALESCE(d.asrtext, '')) <> '' THEN t.id END) AS answered, |
| | | COUNT(DISTINCT CASE WHEN TRIM(COALESCE(d.asrtext, '')) = '' THEN t.id END) AS empty_answer, |
| | | @total - COUNT(DISTINCT t.id) AS no_row |
| | | FROM tmp_export_subtask t |
| | | JOIN service_subtask_detail d ON d.sub_id = t.id AND d.del_flag = 0 |
| | | GROUP BY d.questiontext |
| | | ORDER BY patients_with_row DESC, d.questiontext; |
| | | |
| | | -- ã4bãä¸ SQL å®å
¨åå£å¾ï¼åä¸äººåä¸é¢åªç MAX(id) 飿¡ï¼çéé¢äººæ° |
| | | SELECT '4b. éé¢äººæ°(å»éå£å¾,ä¸å¯¼åºä¸è´)' AS step; |
| | | SELECT d.questiontext, |
| | | COUNT(DISTINCT t.id) AS patients_counted_in_export, |
| | | COUNT(DISTINCT CASE WHEN TRIM(COALESCE(d.asrtext, '')) = '' THEN t.id END) AS empty_answer_will_be_dropped |
| | | FROM tmp_export_subtask t |
| | | JOIN service_subtask_detail d |
| | | ON d.sub_id = t.id |
| | | AND d.del_flag = 0 |
| | | 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.questiontext |
| | | ORDER BY patients_counted_in_export DESC, d.questiontext; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã5ãå䏿£è
åä¸é¢å¤æ¡æç»ï¼éç/éå¤æäº¤ï¼ï¼å¯¼åºåªåææ°ä¸æ¡ |
| | | -- ---------------------------------------------------------------------------- |
| | | SELECT '5. åä¸äººåä¸é¢å¤æ¡æç»çæ£è
æ°' AS step, COUNT(*) AS cnt |
| | | FROM (SELECT d.sub_id, d.questiontext |
| | | FROM tmp_export_subtask t |
| | | JOIN service_subtask_detail d ON d.sub_id = t.id AND d.del_flag = 0 |
| | | GROUP BY d.sub_id, d.questiontext |
| | | HAVING COUNT(*) > 1) x; |
| | | |
| | | -- ---------------------------------------------------------------------------- |
| | | -- ã6ãç»è®ºæä¹è¯» |
| | | -- * è¥ã1ã= 380 ä¸ã2aã= 370ï¼å·®é¢ 10 人 = ã3ãéååºæ¥çæ£è
ï¼ |
| | | -- ä»ä»¬è¦ä¹æ²¡å¡«æ¥ï¼no_detail_rowï¼ï¼è¦ä¹æç»è¢«å ï¼all_deletedï¼ |
| | | -- ââ è¿æ¯ãå æ¯åªç»è®¡ä½çæ£è
ãçå£å¾é æçï¼ä¸æ¯ SQL æ¼äºç鿡件ã |
| | | -- * è¥ã1ã= 380 ä½ã4ãç answered æå¤è¡é½å°äº 380ï¼æ¯å¦ 378/375/370â¦ï¼ï¼ |
| | | -- è¯´ææ¯ä¸ªé¢ç®çåæ¯æ¬æ¥å°±ä¸åï¼åæåçæªä½çï¼ï¼Sheet2 éæ²¡æâæªä½çâè¿ä¸è¡ï¼ |
| | | -- æä»¥å计永è¿åä¸å° 380ã |
| | | -- ---------------------------------------------------------------------------- |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ---------------------------- |
| | | -- æ°æ®é鿍¡åå¼å
³ï¼sys_config åæ°é
ç½®è¡¨ï¼ |
| | | -- ---------------------------- |
| | | -- é®åï¼datacollection.enabled |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | -- false = åé |
| | | -- |
| | | -- å
³éåçè¡ä¸ºï¼ |
| | | -- 1) 宿¶ä»»å¡å
¥å£ ryTask.dealHisData('...') ä»å¯è¢« quartz è°å°ï¼å
¥å£ Bean ä¸ä¼æ¶å¤±ï¼ï¼ |
| | | -- ä½é¨é¢ DataCollectionFacade#dealHisData 伿 |
| | | -- DataCollectionModuleDisabledExceptionï¼RyTask æè·ååªæä¸æ¡ WARN |
| | | -- ãæ°æ®é鿍¡åæªå¯ç¨â¦â¦ï¼æ¬è½®å®æ¶ééè·³è¿ï¼ãï¼ |
| | | -- å³ï¼**æ¯ä¸è½®é½æç¡®è·³è¿ï¼å¹¶å¨æ¥å¿éçä¸ç迹**ï¼ä¸æ¯éé»ä»ä¹é½ä¸åï¼ |
| | | -- 2) é¨é¢ DataCollectionFacade#isEnabled() ä»å¯è°ç¨ï¼ä¾è°ç¨æ¹é¢å¤å¼å
³ç¶æï¼ |
| | | -- 3) å
¶å®å
¥å£ï¼HTTP æå¨è§¦åééçæ§å¶å¨ï¼ä¸åæ¬å¼å
³å½±å ââ å®ä»¬èµ°çæ¯ |
| | | -- smartor / ruoyi-quartz éåèªç Serviceï¼æ¬å¼å
³åªç®¡"宿¶ééç¼æ"è¿ä¸æ¡é¾è·¯ï¼ |
| | | -- 4) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼è¿ç¨å
å¼å
³ç¼å TTLï¼ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- â ï¸ æ³¨æï¼åéä¸ä¼å é¤ä»»ä½æ°æ®ï¼ä¹ä¸ä¼åå¡«"åéæé´æ¼æçæ¶é´æ®µ" ââ |
| | | -- éæ°æå¼åæå½åæ¶é´çªå£ç»§ç»éï¼nhfy/sltd ç«ç¹å¯ç¨å¸¦æ¥æå
¥åçæå·¥è§¦åååæº¯ï¼ã |
| | | -- â ï¸ åæ°è¡ç¼ºå¤±æ¶æ trueï¼fail-openï¼ï¼ç»ä¸å 为åºéå°ä¸è¡é
置就ééåéã |
| | | -- |
| | | -- æ¬é¡¹ç®ç¨ç MySQL çæ¬å¯è½ä¸æ¯æ ADD COLUMN IF NOT EXISTSï¼ |
| | | -- å æ¤è¿éç¨ information_schema 夿åå卿æ§è¡ï¼èæ¬å¯é夿§è¡ã |
| | | -- ---------------------------- |
| | | |
| | | SET @datacollection_config_exists = ( |
| | | SELECT COUNT(1) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'sys_config' |
| | | AND COLUMN_NAME = 'config_key' |
| | | ); |
| | | |
| | | SET @ddl = IF(@datacollection_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''æ°æ®é鿍¡åå¼å
³'', ''datacollection.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''æ°æ®é鿍¡åï¼HIS éé宿¶ç¼æï¼æ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseåéï¼é»è®¤true'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''datacollection.enabled'')'); |
| | | |
| | | PREPARE datacollection_stmt FROM @ddl; |
| | | EXECUTE datacollection_stmt; |
| | | DEALLOCATE PREPARE datacollection_stmt; |
| | | |
| | | -- æ¥è¯¢å½åå¼ |
| | | -- SELECT config_id, config_name, config_key, config_value, remark FROM sys_config WHERE config_key = 'datacollection.enabled'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ---------------------------- |
| | | -- æ¨¡æ¿æ¨¡åå¼å
³ï¼sys_config åæ°é
ç½®è¡¨ï¼ |
| | | -- ---------------------------- |
| | | -- é®åï¼template.enabled |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | -- false = å
³é |
| | | -- |
| | | -- è¯»åæ¹å¼ï¼TemplateSwitch#isEnabled() |
| | | -- sys_config ç读 + 10 ç§è¿ç¨å
ç¼åï¼fail-openï¼è¯»ä¸å° / 读åºå¼å¸¸é½æ true å¤çï¼ã |
| | | -- |
| | | -- å
³éåçè¡ä¸ºï¼ |
| | | -- 1) æ¬æ¨¡å 66 个模æ¿ç®¡ç端ç¹ä¼è¢« TemplateAvailabilityInterceptor æ¦ä¸ï¼ |
| | | -- è¿åæç¡®ä¸å¡éè¯¯ãæ¨¡æ¿åè½æªå¯ç¨ï¼åæ°é
ç½® template.enabled=falseï¼ï¼è¯¥æ¥å£ä¸å¯ç¨ãï¼ |
| | | -- è䏿¯ 404ï¼å端è½åºå"模å被å
³é"å"å°ååéäº"ï¼ï¼ |
| | | -- 2) 跨模åè°ç¨ä¹ä¼è¢«æï¼å
¶å®æ¨¡åç» TemplateFacade 忍¡æ¿æ¶ï¼ |
| | | -- 6 ä¸ªæ°æ®æ¹æ³ç»ä¸æ TemplateModuleDisabledExceptionï¼æç¤ºè¯ä¸ä¸é¢ä¸è´ï¼ã |
| | | -- è°ç¨æ¹åèªå³å®é级æ¹å¼ï¼å·²å¨ 4 个è°ç¨ç¹é个æç¡®ï¼ |
| | | -- RyTask / RedisMqReceiver -> å¦å®è®°ãåé失败ãå¹¶å级ä¸ä¸ééï¼ä¸æ©çï¼ |
| | | -- ServiceTaskServiceImpl -> è¿å空åè¡¨ï¼æ£è
宣æé¡µé¢ç
§å¸¸å¯å¼å¯æäº¤ |
| | | -- ChatWebSocketHandler -> æå¼å¸¸ï¼è¯é³é®å·æ¬å°±æ¨¡æ¿é©±å¨ï¼ç»§ç»èµ°åªä¼ NPEï¼ |
| | | -- â ï¸ ä¹å°±æ¯è¯´ï¼**å
³é模æ¿ä¼è¿å¸¦åæå®£æçä¿¡çå
容çæ**ï¼è¿æ¯å»æç ââ |
| | | -- åä¸å°æ¨¡æ¿å
å®¹å°±æ¯æ²¡å
容å¯åï¼ä¸è¯¥è®°æ"åéæå"ã |
| | | -- 3) â ï¸ åç®¡çæ¯"ç®¡æ¨¡æ¿æ°æ®"ç端ç¹ï¼å
± 66 个åç¼ï¼å
å«å»æçå¨ smartor ç |
| | | -- 3 个模æ¿ç®¡çæ§å¶å¨ï¼SvyLibTemplateController / SvyTaskController / |
| | | -- SvyTaskTemplateControllerï¼ã宿´æ¸
åè§ TemplateWebConfig#guardedPathPatterns() |
| | | -- æ sql/_probe/verify_template_switch.py çè¾åºã |
| | | -- 4) â ï¸ **ä¸å管**ï¼IvrTaskVisitResultController / IvrTasksmsController / |
| | | -- IvrTaskcallrecordController ââ å®ä»¬æ¯"任塿§è¡è®°å½"ï¼è¿è¡æ¶å®ä¾ï¼ï¼ |
| | | -- å·²æèè´£ç§»åºæ¨¡æ¿æ¨¡åï¼å
³æ"模æ¿"ä¸è¯¥è®©"任塿§è¡è®°å½æ¥è¯¢"åæã |
| | | -- æå¡åä»»å¡ / æ¡£æ¡ / æå¡ä»»å¡ / é®å·ä»»å¡å®ä¾ / æ¹æ¡æµç¨ç鿍¡æ¿ç«¯ç¹åæ ·ä¸å管ã |
| | | -- 5) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- 注æ 1ï¼æ¬é¡¹ç®ç¨ç MySQL çæ¬å¯è½ä¸æ¯æ ADD COLUMN IF NOT EXISTSï¼ |
| | | -- å æ¤è¿éç¨ information_schema 夿åå卿æ§è¡ï¼èæ¬å¯é夿§è¡ã |
| | | -- 注æ 2ï¼SysConfigServiceImpl#selectConfigByKey é**å Redis çé£è¡æ¯æ³¨éæç** |
| | | -- ï¼åªè¯» Redis ç¼åã读ä¸å°å°±æ¥åºï¼ãæä»¥è¥åå²ä¸æäººæå¨å¾ Redis åè¿è¿ä¸ªé®ï¼ |
| | | -- æ¹åºä¸ä¸å®ç«å»çå¾è§ãç¨³å¦¥åæ³ï¼èµ°ãç³»ç»ç®¡ç â åæ°è®¾ç½®ã页颿¹ï¼ä¼æ¸
ç¼åï¼ï¼ |
| | | -- ææ§è¡ UPDATE åå æ Redis éç sys_config:template.enabledã |
| | | -- ---------------------------- |
| | | |
| | | SET @sys_config_exists = ( |
| | | SELECT COUNT(1) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'sys_config' |
| | | AND COLUMN_NAME = 'config_key' |
| | | ); |
| | | |
| | | SET @ddl = IF(@sys_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''æ¨¡æ¿æ¨¡åå¼å
³'', ''template.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''æ¨¡æ¿æ¨¡åæ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤trueãå
³éå66个模æ¿ç®¡ç端ç¹ä¸TemplateFacade跨模åè°ç¨ä¸å¹¶è¢«æ'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''template.enabled'')'); |
| | | |
| | | PREPARE template_stmt FROM @ddl; |
| | | EXECUTE template_stmt; |
| | | DEALLOCATE PREPARE template_stmt; |
| | | |
| | | -- æ¥å¸¸å¼å
³æä½ï¼äºéä¸ï¼æ¹å®æå¤ 10 ç§çæï¼ï¼ |
| | | -- å
³éï¼UPDATE sys_config SET config_value = 'false', update_time = SYSDATE() WHERE config_key = 'template.enabled'; |
| | | -- å¼å¯ï¼UPDATE sys_config SET config_value = 'true', update_time = SYSDATE() WHERE config_key = 'template.enabled'; |
| | | |
| | | -- æ¥è¯¢å½åå¼ |
| | | -- SELECT config_id, config_name, config_key, config_value, remark FROM sys_config WHERE config_key = 'template.enabled'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ---------------------------- |
| | | -- 满æåº¦æ¨¡åå¼å
³ï¼sys_config åæ°é
ç½®è¡¨ï¼ |
| | | -- ---------------------------- |
| | | -- é®åï¼satisfaction.enabled |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | -- false = å
³é |
| | | -- |
| | | -- å
³éåçè¡ä¸ºï¼ |
| | | -- 1) æ¬æ¨¡å 17 个满æåº¦ç«¯ç¹ä¼è¢« SatisfactionAvailabilityInterceptor æ¦ä¸ï¼ |
| | | -- è¿åæç¡®ä¸å¡éè¯¯ãæ»¡æåº¦åè½æªå¯ç¨ï¼åæ°é
ç½® satisfaction.enabled=falseï¼ï¼è¯¥æ¥å£ä¸å¯ç¨ãï¼ |
| | | -- è䏿¯ 404ï¼ |
| | | -- 2) éè®¿å¯¼åº / é访ç»è®¡ / ç»å½é¾è·¯éè¿ SatisfactionFacade åæ°æ¶é级为空å¼/å
¨é¶ï¼ä¸åå½±åï¼ |
| | | -- 3) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼è¿ç¨å
å¼å
³ç¼å TTLï¼ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- 注æï¼æ¬é¡¹ç®ç¨ç MySQL çæ¬å¯è½ä¸æ¯æ ADD COLUMN IF NOT EXISTSï¼ |
| | | -- å æ¤è¿éç¨ information_schema 夿åå卿æ§è¡ï¼èæ¬å¯é夿§è¡ã |
| | | -- ---------------------------- |
| | | |
| | | SET @satisfaction_config_exists = ( |
| | | SELECT COUNT(1) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'sys_config' |
| | | AND COLUMN_NAME = 'config_key' |
| | | ); |
| | | |
| | | SET @ddl = IF(@satisfaction_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''满æåº¦æ¨¡åå¼å
³'', ''satisfaction.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''满æåº¦æ¨¡åæ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤true'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''satisfaction.enabled'')'); |
| | | |
| | | PREPARE satisfaction_stmt FROM @ddl; |
| | | EXECUTE satisfaction_stmt; |
| | | DEALLOCATE PREPARE satisfaction_stmt; |
| | | |
| | | -- æ¥è¯¢å½åå¼ |
| | | -- SELECT config_id, config_name, config_key, config_value, remark FROM sys_config WHERE config_key = 'satisfaction.enabled'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ---------------------------- |
| | | -- çµè¯æ¨¡åå¼å
³ï¼sys_config åæ°é
ç½®è¡¨ï¼ |
| | | -- ---------------------------- |
| | | -- é®åï¼phone.enabled |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | -- false = å
³é |
| | | -- |
| | | -- å
³éåçè¡ä¸ºï¼ |
| | | -- 1) æ¬æ¨¡å 8 个çµè¯ç«¯ç¹ä¼è¢« PhoneAvailabilityInterceptor æ¦ä¸ï¼ |
| | | -- è¿åæç¡®ä¸å¡é误ãçµè¯åè½æªå¯ç¨ï¼åæ°é
ç½® phone.enabled=falseï¼ï¼è¯¥æ¥å£ä¸å¯ç¨ãï¼ |
| | | -- è䏿¯ 404ï¼ |
| | | -- /smartor/serviceSubtask/phoneCallBack 䏿µ·ï¼è¯é³è¯å«ç»æåè° |
| | | -- /smartor/serviceSubtask/phoneCallBackYQ é¨ç»®ï¼ASR/éé»/ææ¾äºä»¶åè° |
| | | -- /smartor/serviceSubtask/taskPull é¨ç»®ï¼ä»»å¡æå |
| | | -- /smartor/serviceSubtask/saveQuestionAnswerPhone çµè¯ï¼æ£è
é®é¢ç»æè®°å½ |
| | | -- /smartor/serviceSubtask/recordAcceptshanghai 䏿µ·ï¼éè¯è®°å½åè° |
| | | -- /smartor/serviceSubtask/recordAccept é¨ç»®ï¼éè¯è®°å½åè° |
| | | -- /smartor/shphone/getFirstQues 䏿±ï¼åé¦é¢ |
| | | -- /smartor/shphone/processResust 䏿±ï¼ASR ç»æå¤ç |
| | | -- 2) è¿ 6 æ¡æå¨ /smartor/serviceSubtask/** ä¸ççµè¯ç«¯ç¹ï¼å·²ä»ã任塿¨¡åå¼å
³ã |
| | | -- ï¼task.enabledï¼çæ¦æªèå´éæé¤ï¼è§ TaskWebConfig#excludedPhonePathsï¼ï¼ |
| | | -- å³å
³ä»»å¡ä¸ä¼è¿å¸¦å
³æçµè¯ï¼åä¹äº¦ç¶ï¼ |
| | | -- 3) 模åé¨é¢ PhoneFacadeï¼å
¶å®æ¨¡åè°çµè¯è½åçå
¥å£ï¼ä»å¯æ³¨å
¥ï¼ |
| | | -- ä½åæ¹æ³é级为空å¼/空å表并æ WARNï¼ä¸æå¼å¸¸ï¼ |
| | | -- 4) çµè¯ä¼è¯ç¶æï¼Redis éç uuid / åä»»å¡-ææºå· é®ï¼ä¸åå¼å
³å½±åï¼ |
| | | -- éæ°æå¼åä»å¨æææå
ï¼æé¿ 120 åéï¼ï¼ |
| | | -- 5) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼è¿ç¨å
å¼å
³ç¼å TTLï¼ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- â ï¸ æ³¨æï¼å
³éçµè¯åè½åªå½±å"åè°ç«¯ç¹ä¸é¨é¢è°ç¨"ï¼ä¸ä¼å é¤ä»»ä½æ°æ®ï¼ |
| | | -- ä¹ä¸ä¼åæ¢å¤é¨å¹³å°å·²ç»åèµ·çå¤å¼ï¼å®ä»¬çåè°ä¼è¢«æç¡®æç»ï¼ã |
| | | -- |
| | | -- æ¬é¡¹ç®ç¨ç MySQL çæ¬å¯è½ä¸æ¯æ ADD COLUMN IF NOT EXISTSï¼ |
| | | -- å æ¤è¿éç¨ information_schema 夿åå卿æ§è¡ï¼èæ¬å¯é夿§è¡ã |
| | | -- ---------------------------- |
| | | |
| | | SET @phone_config_exists = ( |
| | | SELECT COUNT(1) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'sys_config' |
| | | AND COLUMN_NAME = 'config_key' |
| | | ); |
| | | |
| | | SET @ddl = IF(@phone_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''çµè¯æ¨¡åå¼å
³'', ''phone.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''çµè¯æ¨¡åï¼ä¸æµ·/é¨ç»®/䏿±å¤å¼åè°ï¼æ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤true'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''phone.enabled'')'); |
| | | |
| | | PREPARE phone_stmt FROM @ddl; |
| | | EXECUTE phone_stmt; |
| | | DEALLOCATE PREPARE phone_stmt; |
| | | |
| | | -- æ¥è¯¢å½åå¼ |
| | | -- SELECT config_id, config_name, config_key, config_value, remark FROM sys_config WHERE config_key = 'phone.enabled'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ---------------------------- |
| | | -- 鍿¥è¯é访模å + ææ¯é访模å å¼å
³ï¼sys_config åæ°é
ç½®è¡¨ï¼ |
| | | -- ---------------------------- |
| | | -- æ¬èæ¬ä¸æ¬¡å»ºä¸¤ä¸ªé®ï¼é½å¯é夿§è¡ï¼å¹çï¼ï¼ |
| | | -- |
| | | -- é®åï¼outpatientvisit.enabled 鍿¥è¯é访æ»å¼å
³ |
| | | -- é®åï¼othervisit.enabled ææ¯é访æ»å¼å
³ |
| | | -- é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | -- false = å
³é |
| | | -- |
| | | -- è¯»åæ¹å¼ï¼OuthospVisitSwitch#isEnabled() / OtherVisitSwitch#isEnabled() |
| | | -- sys_config ç读 + 10 ç§è¿ç¨å
ç¼åï¼fail-openï¼è¯»ä¸å° / 读åºå¼å¸¸é½æ true å¤çï¼ã |
| | | -- |
| | | -- â ï¸ è¿ä¸¤ä¸ªæ¨¡åä¸åºå
¥é¢/宣æ**æä¸ä¸ªå
³é®ç»æå·®å¼**ï¼ |
| | | -- å®ä»¬çæ§å¶å¨é**å
¨æ¯è®°å½ CRUD**ï¼list / export / getInfo / add / edit / removeï¼ï¼ |
| | | -- **没æä»»ä½"çæé访"ç HTTP 触å端ç¹** ââ 触åå¨å
¨å¨å®æ¶ä»»å¡ä¸ service è°ç¨éã |
| | | -- æä»¥å®ä»¬**没æ** XxxAvailabilityInterceptor / XxxWebConfigï¼ |
| | | -- å¼å
³çä½ç¨ç¹å¨**é¨é¢çç¼ææ¹æ³**ä¸ï¼ä¸å¨ HTTP å±ã |
| | | -- è¿æ¯å»æçï¼ä¸åºå
¥é¢æ¨¡å"夿æ 忝è¿ä¸ªç«¯ç¹ä¼ä¸ä¼çæé访ï¼è䏿¯å®å¨ä¸å¨æ¬æ¨¡åé" |
| | | -- å®å
¨ä¸è´ ââ æ¢ç¶ä¸ä¸ªä¼çæé访ç HTTP 端ç¹é½æ²¡æï¼å°±ä¸è¯¥ä¸ºäºè®©å½¢ç¶æ´é½èç¡¬é æ¦æªå¨ã |
| | | -- |
| | | -- å
³é outpatientvisit åçè¡ä¸ºï¼ |
| | | -- 1) OuthospVisitFacade#dealOutpatientInfo()ï¼é¨è¯éè®¿ä¸»æ«æï¼æ«æªå¤çé¨è¯è®°å½ â |
| | | -- å¹é
é¿æä»»å¡ â ååä»»å¡ï¼è¿å 0 å¹¶æ WARNï¼**ä¸åçææ°çé¨è¯é访**ï¼ |
| | | -- 2) â ï¸ å®æ¶ä»»å¡å
¥å£**æ¹èµ°è¯¥é¨é¢**æä¼å管 ââ 2025 ä¿®å¤åï¼RyTask#dealOutHospInfo |
| | | -- è°çæ¯ IPatMedOuthospServiceï¼ç» OuthospDataFacadeï¼æ å®å«ï¼ï¼ |
| | | -- å¼å
³æ¯**失æ**çãä¿®å¤å䏿æ¯é访 RyTask#dealOperationInfo èµ° otherVisitFacade åå½¢ã |
| | | -- 3) é¨è¯è®°å½æ¥è¯¢/CRUDï¼/smartor/patouthosp/**ã/smartor/provisional/**ï¼**ä¸åå½±å**ï¼ |
| | | -- 4) é¨è¯å表维æ¤ä¸åå¨è¿ç¨é建ï¼OuthospVisitFacade#createOuthospQuarterTableï¼ |
| | | -- **ä¸åæ¬å¼å
³çº¦æ** ââ å®å»ºçæ¯ç©çå表ï¼å±æ°æ®åºç¡è®¾æ½ï¼ |
| | | -- å®èªå·±çå¼å
³æ¯ sys_config: outhosp.split.modeï¼æ²¡é
å°±æ´å䏿§è¡ï¼ã |
| | | -- è¥æå®ä¹å¥ä¸é访å¼å
³ï¼å
³éé访ä¼è®©æ°å¨æå表ä¸å»º â é¨è¯è®°å½åä¸è¿è¡¨ã |
| | | -- 5) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- å
³é othervisit åçè¡ä¸ºï¼ |
| | | -- 1) OtherVisitFacade#dealOperationInfo()ï¼ææ¯éè®¿ä¸»æ«æï¼è¿å 0 å¹¶æ WARNï¼ |
| | | -- 2) ææ¯è®°å½ / ææ¯æç» / ææ¯åºç¡åå
¸çæ¥è¯¢ä¸ CRUD |
| | | -- ï¼/smartor/operation/**ã/smartor/item/**ã/smartor/baseopera/**ï¼**ä¸åå½±å**ï¼ |
| | | -- 3) æ¹å®ç«å³çæï¼æå¤ 10 ç§ï¼ä¸éè¦éå¯ã |
| | | -- |
| | | -- â ï¸ ä¸¤è
é½**ä¸ä½ç¨äº**å·²çæçåä»»å¡ï¼å
³éå¼å
³æ¯"å½å¤©ä¸åçææ°çé访"ï¼ |
| | | -- å·²åå¨çåä»»å¡çå°æ/åæ¶ç± ruoyi-inhospvisit ç宿¶ä»»å¡å¤çã |
| | | -- |
| | | -- 注æï¼æ¬é¡¹ç®ç¨ç MySQL çæ¬å¯è½ä¸æ¯æ ADD COLUMN IF NOT EXISTSï¼ |
| | | -- å æ¤è¿éç¨ information_schema 夿åå卿æ§è¡ã |
| | | -- ---------------------------- |
| | | |
| | | SET @sys_config_exists = ( |
| | | SELECT COUNT(1) FROM information_schema.COLUMNS |
| | | WHERE TABLE_SCHEMA = DATABASE() |
| | | AND TABLE_NAME = 'sys_config' |
| | | AND COLUMN_NAME = 'config_key' |
| | | ); |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- 1) outpatientvisit.enabled |
| | | -- --------------------------------------------------------------- |
| | | SET @ddl = IF(@sys_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''鍿¥è¯é访模åå¼å
³'', ''outpatientvisit.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''鍿¥è¯é访æ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤trueãåªä½ç¨äºé¨è¯éè®¿ç¼æï¼é¨è¯è®°å½CRUDä¸å表维æ¤ä¸åå½±å'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''outpatientvisit.enabled'')'); |
| | | |
| | | PREPARE outpatientvisit_stmt FROM @ddl; |
| | | EXECUTE outpatientvisit_stmt; |
| | | DEALLOCATE PREPARE outpatientvisit_stmt; |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- 2) othervisit.enabled |
| | | -- --------------------------------------------------------------- |
| | | SET @ddl = IF(@sys_config_exists = 0, |
| | | 'SELECT ''sys_config 表ä¸åå¨ï¼è¯·å
æ§è¡å»ºè¡¨èæ¬'' AS warning', |
| | | 'INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | SELECT ''ææ¯é访模åå¼å
³'', ''othervisit.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(), |
| | | ''ææ¯é访æ»å¼å
³ï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤10ç§çæï¼ï¼trueå¯ç¨ï¼falseå
³éï¼é»è®¤trueãåªä½ç¨äºææ¯éè®¿ç¼æï¼ææ¯è®°å½/æç»/åºç¡åå
¸CRUDä¸åå½±å'' |
| | | FROM DUAL |
| | | WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE config_key = ''othervisit.enabled'')'); |
| | | |
| | | PREPARE othervisit_stmt FROM @ddl; |
| | | EXECUTE othervisit_stmt; |
| | | DEALLOCATE PREPARE othervisit_stmt; |
| | | |
| | | -- æ¥å¸¸å¼å
³æä½ï¼äºéä¸ï¼æ¹å®æå¤ 10 ç§çæï¼ï¼ |
| | | -- å
³éé¨è¯é访ï¼UPDATE sys_config SET config_value = 'false', update_time = SYSDATE() WHERE config_key = 'outpatientvisit.enabled'; |
| | | -- å
³éææ¯é访ï¼UPDATE sys_config SET config_value = 'false', update_time = SYSDATE() WHERE config_key = 'othervisit.enabled'; |
| | | |
| | | -- æ¥è¯¢å½åå¼ |
| | | -- SELECT config_id, config_name, config_key, config_value, remark FROM sys_config |
| | | -- WHERE config_key IN ('outpatientvisit.enabled', 'othervisit.enabled'); |