From 09ff7c7b13441921b7b41a48a297fdc59805ca48 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 09 十一月 2026 14:36:01 +0800
Subject: [PATCH] 撤销入库:sql 目录一次性脚本不入库
---
/dev/null | 91 ---------------------------------------------
.gitignore | 8 +++-
2 files changed, 6 insertions(+), 93 deletions(-)
diff --git a/.gitignore b/.gitignore
index c3caeda..bdbc2a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,9 +31,13 @@
*~
# ==================== 涓�娆℃�ф帓鏌ヨ剼鏈� / 鎺㈤拡 / 鏃ュ織锛堜笉鍏ュ簱锛� ====================
+# sql/ 涓嬬殑涓�娆℃�т慨澶嶃�佹帓鏌ャ�佸紑鍏抽厤缃剼鏈粎鏈湴鐣欏瓨锛屼笉鍏ュ簱锛�
+# 浠呬繚鐣欏寘鍐呭熀绾胯剼鏈笌鏂板簱鍒濆鍖栬剼鏈��
+/sql/*.sql
+!/sql/quartz.sql
+!/sql/ry_20220822.sql
+!/sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql
sql/_probe/
-# 鍚� DROP TABLE 鐨勫巻鍙叉竻鐞嗚剼鏈紝浠呮湰鍦扮暀瀛橈紝涓嶅叆搴�
-sql/cleanup_unused_tables_20260923.sql
*.log
_dbcheck.txt
package-lock.json
diff --git a/sql/backfill_service_subtask_dept_from_inhosp_20261106.sql b/sql/backfill_service_subtask_dept_from_inhosp_20261106.sql
deleted file mode 100644
index e08ffff..0000000
--- a/sql/backfill_service_subtask_dept_from_inhosp_20261106.sql
+++ /dev/null
@@ -1,290 +0,0 @@
--- ============================================================================
--- 鎶� pat_med_inhosp 鐨勩�岀瀹� / 鐥呭尯銆嶅洖濉埌 service_subtask锛堝湪闄� 4 鍒� + 绂婚櫌 4 鍒楋級
--- 鐢熸垚鏃ユ湡锛�2026-11-06锛坴2锛氫慨姝� join 閿� + 鍚堝苟绂婚櫌缁村害锛�
--- 閫傜敤锛歁ySQL 8.0 / 5.7锛堟湭鐢� CTE銆佺獥鍙e嚱鏁帮級
---
--- 鈿狅笍 鍓嶇疆鏉′欢锛氬厛鎵ц杩� sql/rename_service_subtask_dims_20261106.sql锛堝垪宸叉敼鍚嶏級銆�
---
--- 鈿狅笍鈿狅笍 join 閿紙v1 鍐欓敊杩囷紝杩欓噷鏇存锛夛細
--- service_subtask.inhospid 瀛樼殑鏄� **pat_med_inhosp.inhospid**锛堜笟鍔′富閿級锛屼笉鏄� id銆�
--- 璇佹嵁锛歏isitInhospMapper.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 鍏ラ櫌瀹f暀/鍏ラ櫌闅忚銆�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) 鍙e緞璇存槑 + 鍙�夌殑"寮哄埗鏀瑰啓"
---
--- 4.1 涓轰粈涔堢闄� 4 鍒椾篃鐢ㄣ�屽彧琛ョ┖銆嶏細
--- service_type = 17/18锛堝叆闄㈠鏁�/鍏ラ櫌闅忚锛夌敓鎴愭椂璧� type 4/5 鍒嗘敮锛�
--- `leaveldeptcode/name` 閲屽瓨鐨勫叾瀹炴槸**鍏ラ櫌绉戝**锛坉.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 鍖洪棿锛涙瘡娈靛崟鐙彁浜わ級
--- 鍏堟煡鑼冨洿锛歋ELECT 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;
diff --git a/sql/create_pat_med_outhosp_error.sql b/sql/create_pat_med_outhosp_error.sql
deleted file mode 100644
index 6b216a1..0000000
--- a/sql/create_pat_med_outhosp_error.sql
+++ /dev/null
@@ -1,44 +0,0 @@
--- ============================================================================
--- 鐪佺珛鍚屽痉闂ㄦ�ヨ瘖閲囬泦澶辫触璁板綍琛�
---
--- 鑳屾櫙锛欻IS 闂ㄦ�ヨ瘖鏁版嵁鍙兘鎸夊ぉ鏌ワ紝閲囬泦浠诲姟姣忓崐灏忔椂鎶婂綋澶╁叏閲忥紙涓�涓囧鏉★級鎷変竴閬嶃��
--- 鍗曟潯璁板綍濡傛灉杞崲澶辫触/妗f澶勭悊澶辫触/鍏ュ簱澶辫触锛屽師鏉ヤ細鏁撮〉澶辫触骞跺崱浣忛噰闆嗚繘搴︺��
--- 鐜板湪鏀逛负鍐欏叆鏈〃浜ょ粰浜哄伐澶勭悊锛岄噰闆嗚繘搴︿笉鍙楀奖鍝嶃��
---
--- 鍚屼竴鏉¤褰曞悓涓�绫婚敊璇彧淇濈暀涓�琛岋細鍞竴绱㈠紩 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 '鎮h�呭鍚�',
- 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 '閿欒绫诲瀷锛欳ONVERT-鏁版嵁杞崲澶辫触 ARCHIVE-鎮h�呮。妗堝鐞嗗け璐� INSERT-鍏ュ簱澶辫触',
- error_msg VARCHAR(1000) DEFAULT NULL COMMENT '寮傚父淇℃伅',
- raw_data TEXT COMMENT '鎺ュ彛杩斿洖鐨勫師濮嬭褰旿SON锛屼汉宸ヤ慨澶嶅悗鍙嵁姝ら噸鎺�',
- 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 ='鐪佺珛鍚屽痉闂ㄦ�ヨ瘖閲囬泦澶辫触璁板綍锛堜汉宸ュ鐞嗭級';
diff --git a/sql/diag_admin_dept_ward_20261106.sql b/sql/diag_admin_dept_ward_20261106.sql
deleted file mode 100644
index 361e315..0000000
--- a/sql/diag_admin_dept_ward_20261106.sql
+++ /dev/null
@@ -1,105 +0,0 @@
--- =====================================================================================
--- 璇婃柇锛歛dmin 鐧诲綍/鍒涘缓浠诲姟鏃剁湅涓嶅埌鍏ㄩ儴绉戝鐥呭尯 + belongDepts/belongWards 鏌ヨ鎱�
--- 鏃ユ湡锛�2026-11-06 搴擄細smartor_nhfy锛�192.168.99.192:3306锛�
---
--- 浠g爜閾捐矾锛堝凡纭锛夛細
--- GET /getInfo 鈫� SysLoginController#getInfo锛圠243-254锛�
--- 鈫� ISysDeptService#selectLeafSysDeptListBySysUserDept
--- GET /system/user/getInfo 鈫� SysUserController#getInfo锛圠151-165锛夛紝鍚屾牱涓よ
--- 鈫� SysDeptServiceImpl#selectLeafSysDeptListBySysUserDept锛圠335-341锛�
--- 鈫� SysDeptMapper#selectSysDeptListBySysUserDept锛圫ysDeptMapper.xml L286-298锛�
--- 鈫� TreeUtils.getLeafDepts锛堝彧鐣欏彾瀛愶級
--- 鍓嶇銆屽垱寤轰换鍔°�嶇殑绉戝/鐥呭尯涓嬫媺灏辨槸鐢ㄨ繖涓や釜杩斿洖鐨� belongDepts / belongWards銆�
---
--- 鍏抽敭鐐癸紙鍚屼竴娈� SQL 鍚屾椂閫犳垚銆岀湅涓嶅埌銆嶅拰銆屾參銆嶏級锛�
--- 1) 鍒楄〃鏉ヨ嚜 sys_dept INNER JOIN sys_user_dept ON dept_code 鈬� 鍙湁銆岃嚦灏戣鏌愪釜鐢ㄦ埛鍏宠仈杩囥�嶇殑
--- 绉戝/鐥呭尯鎵嶄細鍑虹幇锛沘dmin 鍦� /getInfo 閲屽悓鏍峰甫 userId锛岀瓑浜庡彧鐪嬭嚜宸辫鍒嗛厤鐨勯儴闂ㄣ��
--- 2) 璇� SQL 杩樺甫 `and d.campusid = 鐧诲綍鐢ㄦ埛闄㈠尯`锛圠295锛夛紝sys_dept.campusid 涓虹┖鎴栦笌鐧诲綍闄㈠尯
--- 涓嶄竴鑷寸殑閮ㄩ棬浼氳杩囨护鎺夈��
--- 3) 缁撴灉鍐嶈繃 TreeUtils.getLeafDepts锛屽嚒鏄�岃鍒殑閮ㄩ棬褰撴垚 parent_id銆嶇殑閮ㄩ棬閮戒笉杩斿洖銆�
--- 4) 鎱細admin 鍒嗘敮锛圫ysUserServiceImpl#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. 璇ユ満鏋勩�屽簲璇ユ湁銆嶅灏戠瀹�/鐥呭尯锛坰ys_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. 淇畬鍚庤嚜妫�锛歛dmin 搴旇鑳界湅鍒拌鏈烘瀯鍏ㄩ儴绉戝/鐥呭尯锛堟暟閲忕瓑浜庣 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;
diff --git "a/sql/diag_\345\207\272\351\231\242\351\232\217\350\256\277\345\260\221\347\224\237\346\210\220_\345\216\237\345\233\240\346\216\222\346\237\245.sql" "b/sql/diag_\345\207\272\351\231\242\351\232\217\350\256\277\345\260\221\347\224\237\346\210\220_\345\216\237\345\233\240\346\216\222\346\237\245.sql"
deleted file mode 100644
index b389649..0000000
--- "a/sql/diag_\345\207\272\351\231\242\351\232\217\350\256\277\345\260\221\347\224\237\346\210\220_\345\216\237\345\233\240\346\216\222\346\237\245.sql"
+++ /dev/null
@@ -1,166 +0,0 @@
--- ============================================================================
--- 鍑洪櫌闅忚銆屽皯鐢熸垚銆嶆帓鏌ヨ剼鏈紙鍗楀崕闄勪竴 / nhfy锛夆�斺�� **鍙**锛屽叏閮ㄦ槸 SELECT
--- ----------------------------------------------------------------------------
--- 缁撹鍏堣锛�2026-10-29 鍦� nhfy 绾夸笂搴撳疄娴嬶細鐥呭尯=楠ㄧ涓績涓�鐥呭尯 40011020锛屽嚭闄㈡棩鏈� 2026-07-01~09-30锛夛細
--- 鍑洪櫌鐧昏 475 鏉� 鈫� 闅忚浠诲姟鍏跺疄 **475 鏉′竴鏉℃病灏�**锛坰ervice_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_鍙e緞瀵圭収_鍑洪櫌璁板綍' 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锛氶〉闈㈠彲瑙佹�� 鈥斺�� 鐢熸垚浜嗕絾椤甸潰鏌ヤ笉鍒扮殑閭i儴鍒�
--- 椤甸潰鍙 = 闄㈠尯 + 鐥呭尯閮藉尮閰嶏紝杩欐墠鏄�"鎮h�呮湇鍔℃�婚噺"璇ユ湁鐨勬暟
--- ---------------------------------------------------------------------------
-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 瀛愪换鍔D, 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 <> '';
diff --git a/sql/fix_admin_dept_ward_missing_20261106.sql b/sql/fix_admin_dept_ward_missing_20261106.sql
deleted file mode 100644
index 2c6395a..0000000
--- a/sql/fix_admin_dept_ward_missing_20261106.sql
+++ /dev/null
@@ -1,150 +0,0 @@
--- =====================================================================================
--- 銆愬凡鏀逛负浠g爜淇锛屾湰鏂囦欢鐨� INSERT 涓嶉渶瑕佹墽琛屻��
--- 2026-11-06 鍐冲畾锛氱鐞嗗憳澶╃劧鎷ユ湁鍏ㄩ儴绉戝鏉冮檺锛岀洿鎺ユ煡 sys_dept锛屼笉鍐嶅線 sys_user_dept 琛ユ暟鎹��
--- 浠g爜鏀瑰姩瑙侊細
--- SysDeptMapper.xml#selectSysDeptListBySysUserDept锛坲serId 涓虹┖鏃跺彧鏌� sys_dept锛�
--- SysDeptServiceImpl#selectLeafSysDeptListBySysUserDept锛坲serId 涓虹┖鏃朵笉鍋氬彾瀛愯繃婊わ級
--- SysUserServiceImpl#selectLeafSysDeptList / selectLeafSysDeptForAdmin / selectUserByUserName
--- SysLoginController#getInfo锛堢鐞嗗憳涓嶄紶 userId銆佷笉鎸夐櫌鍖鸿繃婊わ級
--- 鏈枃浠朵繚鐣欎笅鏉ュ彧浣滀负銆岃瘖鏂彛寰勩�嶅弬鑰冿細绗� 0 姝ュ拰绗� 3 姝ョ殑鏌ヨ浠嶅彲鐢ㄤ簬鏍稿
--- 銆屾煇涓敤鎴峰埌搴曡兘鏌ュ埌澶氬皯绉戝/鐥呭尯銆嶏紝绗� 1銆�2 姝ョ殑鍐欏叆鍙互蹇界暐銆�
--- =====================================================================================
-
--- =====================================================================================
--- 淇锛歛dmin 鐧诲綍鍚庢病鏈夌瀹�/鐥呭尯锛坆elongDepts / belongWards 涓虹┖锛夛紝鍒涘缓浠诲姟閫変笉鍒扮瀹ょ梾鍖�
--- 鏃ユ湡锛�2026-11-06 搴擄細smartor_nhfy
---
--- 缁撹锛堜唬鐮� + 鏁版嵁閾捐矾宸叉牳瀵癸紝鍔犵储寮曚笉浼氭敼鍙樼粨鏋滐紝鍥犱负杩欎笉鏄參锛屾槸鏌ヤ笉鍒帮級锛�
--- 鍓嶇涓嬫媺鐢ㄧ殑鏄� /getInfo 杩斿洖鐨� belongDepts / belongWards锛�
--- SysLoginController#getInfo锛圠243-254锛�
--- 鈫� SysDeptServiceImpl#selectLeafSysDeptListBySysUserDept锛圠335-341锛�
--- 鈫� SysDeptMapper#selectSysDeptListBySysUserDept锛圫ysDeptMapper.xml L286-298锛�
--- 鏍稿績鏄� INNER JOIN sys_user_dept ud ON d.dept_code = ud.dept_code
--- 骞朵笖杩欐甯︿笂浜� userId锛坰ysUserDept.setUserId(user.getUserId())锛夈��
--- 鑰� HIS 閲囬泦鍐欏叆 sys_user_dept 鏃舵槑纭帓闄や簡 admin锛�
--- CollectHISMapper.xml yhyksxx锛圠494锛�/ yhybfxx锛圠513锛�/ yhyyqxx锛圠536锛夐兘鏈� `ud.user_id != 'admin'`
--- 鎵�浠� admin 鍦� sys_user_dept 閲屾病鏈変换浣曡 鈫� 涓婇潰杩欐潯 join 杩斿洖 0 琛� 鈫� 涓や釜鍒楄〃閮芥槸绌恒��
--- 锛堢櫥褰� token 璧扮殑閭f潯 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 閭f潯 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 姝e紡鎻掑叆锛堣璺ㄩ櫌鍖虹湅鍏ㄩ儴灏辨妸 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 鏌ヤ竴娆″叏閲忥紝閬垮厤浠ュ悗鍐嶅嚭鐜般�岀櫥褰曟垚鍔熶絾涓嬫媺绌恒��
--- -------------------------------------------------------------------------------------
diff --git a/sql/fix_nhfy_patitem_slow_20261106.sql b/sql/fix_nhfy_patitem_slow_20261106.sql
deleted file mode 100644
index c5c7437..0000000
--- a/sql/fix_nhfy_patitem_slow_20261106.sql
+++ /dev/null
@@ -1,302 +0,0 @@
--- =====================================================================================
--- 鍗楀崕绾夸笂锛坰martor_nhfy @ 192.168.99.192锛夐殢璁垮垪琛� /smartor/serviceSubtask/patItem 鎱㈡煡璇慨澶�
--- 缂栧啓鏃ユ湡锛�2026-11-06 瀹炴祴鐜锛歁ySQL 8.0.22 Win64锛屽簱 2277MB锛宻ervice_subtask 61,645 琛� / 71.8MB
---
--- 涓�銆佸疄娴嬬粨璁猴紙涓嬮潰绗� 0 姝ョ殑 SQL 鍙師鏍烽噸璺戝鐜帮級
--- patItem 涓�娆¤姹傚疄闄呰窇鐨勬槸 3 绫� SQL + 姣忚 2 娆″崟鏉℃煡璇細
--- 鈶� select id ... order by endtime desc limit 10 鈫� 鎱㈢殑灏卞湪杩欙紝2.4~3.4 s
--- 鎵ц璁″垝锛歩ndex_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锛圧edis 鏈懡涓椂锛� 鈫� 2.5~3.0 s
--- 鈶� 寰幆閲屾瘡琛� 2 娆″崟鏉℃煡璇紙pat_med_inhosp / pat_archive 鎸変富閿級鈫� 鍚勭害 25 ms锛�10 琛屸増500 ms
--- 鍚堣绾� 6~7 s锛屼笌銆屾煡璇㈠緢鎱€�嶄竴鑷淬��
---
--- 鏇村簳灞傜殑鍘熷洜锛堟寜褰卞搷鎺掑簭锛夛細
--- (1) 銆愭渶鑷村懡銆慚ySQL 瀹炰緥 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 涓婃病鏈夈�屾満鏋�+闄㈠尯+绫诲瀷+鎺掑簭銆嶇殑鑱斿悎绱㈠紩锛宒eptOrDistrict=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 浜胯銆乤vg 457 ms銆�
---
--- 鍗曠嫭鍋氱殑鏁堟灉锛堥兘鍦ㄥ壇鏈〃 service_subtask_copy6 涓婂疄娴嬭繃锛屾暟鎹噺鍚岄噺绾э級锛�
--- 路 鍙缓绱㈠紩銆丼QL 涓嶆敼 鈫� 浼樺寲鍣ㄤ粛閫� 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 姝ワ紙涓嶆敼浠g爜锛屾敹鐩婃渶澶э級锛氳皟澶� innodb_buffer_pool_size锛�8MB 鈫� 4G锛�
--- 绗� 2 姝ワ紙涓嶅姞绱㈠紩涔熻兘璺戯級锛氬姞涓や釜銆屽垎鏀�嶈鐩栫储寮�
--- 绗� 3 姝ワ紙鏀� SQL / 鏀� mapper锛夛細鎶� OR 鏀瑰啓鎴愪袱鍒嗘敮 UNION锛堝凡瀹炴祴 3.1 s 鈫� 26 ms锛岀粨鏋滈�愭潯涓�鑷达級
--- 绗� 4 姝ワ細缁熻 count 鏀瑰啓銆乸at_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 缂撳啿姹犳槸涓嶆槸鍏ㄦ弧锛坧ages_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锛宎ctual time 鈮� 2900 ms
-
--- 0.5 绾夸笂鏈�杩戝埌搴曞摢浜涜鍙ユ渶鑰楁椂锛坧erformance_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锛孖nnoDB 浜岀骇绱㈠紩鑷甫涓婚敭 鈫� 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锛�
--- 閭g鍦烘櫙鍐嶅崟鐙姞锛�
--- 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 鏀瑰啓锛歄R 鎷嗘垚涓や釜鍒嗘敮 UNION锛堝幓閲嶏級
---
--- 瀹炴祴锛坰ervice_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 鎺掑簭瀛楁璇存槑锛歴ort=0/1 鏄� endtime锛堥粯璁わ級锛宻ort=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. 椤堕儴缁熻锛坈ountByCondition锛変篃瑕佽窡鐫�鏀癸細鎷嗕袱涓垎鏀啀姹囨��
--- 鐜扮姸锛歊edis 鏈懡涓椂 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 涓囪
--- 锛坧erformance_schema锛�37.4 涓囨銆佺疮璁℃壂鎻� 184 浜胯銆乤vg 457 ms锛�
-ALTER TABLE pat_archive
- ADD INDEX idx_pat_archive_patientno (patientno, del_flag),
- ALGORITHM = INPLACE, LOCK = NONE;
--- 鍙﹀閭f潯 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锛夈�乻ervice_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 鍦ㄧ嚎鏀惧ぇ缂撳啿姹狅級
--- 鐜扮姸锛歩nnodb_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锛圵indows 鐢� 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锛孍xtra 鍚� 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;
--- 锛圫QL / 浠g爜鏀瑰啓鍥炴粴鐩存帴杩樺師 mapper 鍗冲彲锛涘弬鏁板洖婊氭妸 innodb_buffer_pool_size 璋冨洖鍘熷�硷級
diff --git a/sql/fix_nhfy_satisfaction_statistics_20261021.sql b/sql/fix_nhfy_satisfaction_statistics_20261021.sql
deleted file mode 100644
index cb90d52..0000000
--- a/sql/fix_nhfy_satisfaction_statistics_20261021.sql
+++ /dev/null
@@ -1,141 +0,0 @@
--- ============================================================================
--- 鍗楀崕闄勪竴锛坣hfy锛夋弧鎰忓害缁熻 /smartor/satisfaction/statistics 鏌ヤ笉鍑烘暟鎹� 鈥斺�� 瀹氫綅涓庝慨澶�
--- 2026-10-21
---
--- 銆愯姹傘�慞OST /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
--- 鍘熸潵鏄�宭eavehospitaldistrictcode IN(...) AND deptcode IN(...)銆嶄袱鏉$嫭绔嬫潯浠躲��
--- 浣嗘弧鎰忓害瀛愪换鍔★紙type=2 + service_type 6/14/15/16锛夊湪鍗楀崕**鍙啓 deptcode**锛�
--- leavehospitaldistrictcode 鍏ㄤ负 NULL锛堝疄娴� 3803 鏉″叏閮� NULL锛夆啋 涓や釜鏉′欢姘歌繙涓嶅彲鑳藉悓鏃舵垚绔�
--- 鈫� types 鏌ョ┖ 鈫� hasVoice / hasQuestionnaire 閮� false 鈫� 鏁翠釜鎺ュ彛鐩存帴杩斿洖绌恒��
--- 鍚屼竴涓〉闈㈢殑鍙﹀ 3 鏉� SQL锛坰endCount / 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锛宯ame=婊℃剰搴︼級锛岄噷闈㈡槸 6 閬撹�侀锛坰vyid 51/97/102/103/154/156锛�
--- 灞炰簬鍏跺畠闂嵎妯℃澘锛夛紝鑰岀湡姝e湪濉殑 19 閬撻锛坰vyid=200 / 妯℃澘 514锛�**categoryid 鍏ㄦ槸 NULL**
--- 鈫� 鍗充娇 鈶� 鈶� 淇ソ锛岄〉闈篃鍙細鍒楀嚭閭� 6 閬撴病鏈夋暟鎹殑鑰侀銆�
---
--- 銆愬凡鍋氱殑淇銆�
--- 浠g爜锛堥渶鍙戠増锛夛細
--- SatisfactionMapper.xml
--- 路 selectSatisfactionSubtaskTypes锛氱瀹�/鐥呭尯鏀逛负 OR锛屼笌鍏朵綑涓夋潯缁熻 SQL 鍙e緞涓�鑷�
--- 路 4 鏉$粺璁� SQL 鐨勬椂闂存潯浠舵敼涓�
--- IFNULL(visit_time, IFNULL(finishtime, create_time))锛坴isit_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 閬撹�侀锛坰vyid 涓嶅惈 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 杩囨护鐨勬姤琛ㄩ兘鑳芥煡鍒版弧鎰忓害鏁版嵁锛�
--- 涔熻兘璧扮储寮曪紱浠g爜閲岀殑 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 琛�
--- 鈿狅笍 涓庛�岄殢璁垮畬鎴愭椂闂淬�嶅彛寰勭浉鍏崇殑鐪嬫澘浼氬彈褰卞搷锛屽缓璁厛纭涓氬姟鍙e緞鍐嶆墽琛屻��
---
--- 2) 鍒嗙被閲岄偅 6 閬撹�侀锛坰vyid 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 瀛楁锛堜細琚拷鐣ワ級銆乻tatistics 涔熶笉鐢� templateid锛�
--- 濡傛灉瑕佹寜棰樼洰/妯℃澘绛涢�夛紝闇�瑕佸墠鍚庣涓�璧疯ˉ銆�
--- ============================================================================
diff --git a/sql/fix_nhfy_sf_statistics_count_20261021.sql b/sql/fix_nhfy_sf_statistics_count_20261021.sql
deleted file mode 100644
index 63b2e71..0000000
--- a/sql/fix_nhfy_sf_statistics_count_20261021.sql
+++ /dev/null
@@ -1,144 +0,0 @@
--- ============================================================================
--- 鍗楀崕闄勪竴锛坣hfy锛夋弧鎰忓害缁熻椤� /smartor/serviceSubtask/getSfStatisticsCount 鏌ヤ笉鍒版暟鎹�
--- 2026-10-21
---
--- 銆愯姹傘�慞OST /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銆�
---
--- 銆愬凡鍋氱殑淇銆�
--- 浠g爜锛坮uoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml锛岄渶鍙戠増锛夛細
--- 路 getSfStatistics / getSfStatisticsGroupKey / getSfStatisticsCategory /
--- getSfStatisticsHyperlink / getSfStatisticsJoy / getSfStatisticsJoydetails
--- 鍏锛歷isit_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 '鐥呭尯涓篘ULL鏀捐繃 + 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);
-
--- 鈶� 婊℃剰搴︽槑缁嗗垎绫诲洖濉墠鍚庣殑鍙e緞
-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) 闅忚鐜囷紙鍙婃椂鐜囷級锛歴electTimelyRateBatch 閲屾湁
--- AND ss.visit_time IS NOT NULL
--- 涓旂敤 visit_time / endtime 璁$畻鍙婃椂鐜囷紱鍗楀崕婊℃剰搴︿袱鑰呴兘涓虹┖
--- 鈫� 杩欎竴鍒楀婊℃剰搴﹀彛寰勬病鏈夋暟鎹潵婧愶紝浼氭樉绀� 0銆�
--- 瑕佸嚭鏁板繀椤诲厛鏈夈�屽簲闅忚鏃堕棿銆嶅拰銆屽嚭闄㈡椂闂淬�嶏紝灞炰簬鏁版嵁娌荤悊鑼冪暣銆�
---
--- 2) 銆屾弧鎰忓害鎸囨暟銆峵ab 璋冪敤鐨� getSfStatisticsJoy / getSfStatisticsJoydetails 鏄�**璇煶鍙e緞**锛�
--- AND targetid IN (SELECT id FROM ivr_liba_target WHERE assortid IN (joyCount 閰嶇疆))
--- 鍗楀崕婊℃剰搴︽槸闂嵎锛坰vy_* 鎸囨爣锛夛紝targetid 涓� ivr_liba_target 涓嶆槸涓�濂�
--- 鈫� 鍗充娇淇ソ鏃堕棿/鐥呭尯鏉′欢锛岃繖涓� tab 瀵瑰崡鍗庝篃鍙兘鏄� 0銆�
--- 瑕佷箞缁欏崡鍗庡仛涓�鐗堟寜 svy 鎸囨爣缁熻鐨勫疄鐜帮紝瑕佷箞璇� tab 瀵瑰崡鍗庨殣钘忋��
--- ============================================================================
diff --git a/sql/fix_nhfy_sltd_satisfaction_endpoints_20261021.sql b/sql/fix_nhfy_sltd_satisfaction_endpoints_20261021.sql
deleted file mode 100644
index 689be61..0000000
--- a/sql/fix_nhfy_sltd_satisfaction_endpoints_20261021.sql
+++ /dev/null
@@ -1,153 +0,0 @@
--- ============================================================================
--- 鍗楀崕闄勪竴锛坣hfy锛夛細婊℃剰搴︾粺璁� 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锛坉eptOrDistrict==2 鍒嗘敮锛夛細
--- AND leavehospitaldistrictcode IN (...) OR deptcode IN (...)
--- AND 浼樺厛绾ч珮浜� OR锛屽疄闄呯瓑浠蜂簬
--- (鎵�鏈� AND 鏉′欢 AND 鐥呭尯 IN ...) OR 绉戝 IN ...
--- 鈫� "绉戝鍛戒腑"閭d竴鏀畬鍏ㄧ粫杩囦簡 service_type / 鏃ユ湡 / del_flag 鏉′欢銆�
--- 瀹炴祴锛堝崡鍗庛�佺瀹� 40003511銆�2026-07-23~2026-10-21锛夛細
--- 淇鍓� 17604 琛� 淇鍚� 7220 琛� 锛堝绠椾簡 2.4 鍊嶏紝鍏ㄦ槸鍘嗗彶/鍏跺畠浠诲姟绫诲瀷锛�
--- 淇锛氭敼鎴� AND (鐥呭尯 IN (...) OR 绉戝 IN (...))銆�
---
--- 鈶� 缁煎悎寰楀垎鍙e緞鍐欐鎴愮渷绔嬪悓寰凤紙SLTD锛変簲妗f枃妗�
--- SltdSatisfactionController#calcMydScore 閲� resolve(SatisfactionSites.SLTD) 鏄‖缂栫爜銆�
--- 鍚屽痉鍙e緞闈犻�夐」鏂囨 "寰堟弧鎰�/婊℃剰/涓�鑸�/涓嶆弧鎰�/寰堜笉婊℃剰" 鍒ゆ。锛�
--- 鑰屽崡鍗庨棶鍗凤紙妯℃澘 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 鍙e緞锛岀患鍚堝緱鍒嗕粛鐒舵槸 0.00銆�
--- 瑕佸嚭寰楀垎锛屽繀椤诲厛缁欓�夐」/棰樼洰閰嶅垎鍊硷紙涓氬姟閰嶇疆锛夛紝鍚﹀垯杩欎釜鍒楀鍗楀崕娌℃湁鎰忎箟銆�
---
--- 銆愬凡鏀圭殑浠g爜銆憆uoyi-satisfaction
--- 路 SatisfactionMapper.xml
--- - selectMydSubtaskRefs / statQuestionOption / statQuestionOptionBySubtaskIds锛�
--- 鍑洪櫌鏃堕棿 endtime 鈫� IFNULL(endtime, finishtime, create_time)
--- - selectMydSubtaskRefs锛歞eptOrDistrict 琛ヤ笂 2锛圤R锛夊垎鏀紙鍘熸潵鍙湪 1 鏃舵嫾鐥呭尯锛岀瀹ゅ嵈鏃犳潯浠舵嫾锛�
--- - statQuestionOptionByKsOrBq锛歞eptOrDistrict==2 鐨� OR 琛ユ嫭鍙�
--- 路 SatisfactionSwitch锛氭柊澧� site()锛岃 sys_config: satisfaction.site锛�10 绉掕繘绋嬪唴缂撳瓨锛�
--- 路 SltdSatisfactionController#calcMydScore锛氭敼涓� resolve(satisfactionSwitch.site())
---
--- 銆愪慨澶嶅悗瀹炴祴锛堟潯浠讹細绉戝 40003511 / 鐥呭尯 40003514 / 2026-07-23~2026-10-21锛夈��
--- refs = 387锛涙寜绉戝鍒嗙粍閫夐」鍒嗗竷姝e父锛屼緥濡傘�岃偪鐦ょ涓�鐥呮埧銆嶆瘡棰� 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銆戝彲閫夐厤缃細缁煎悎寰楀垎鍙e緞绔欑偣锛堜笉鏀逛篃鑳借窇锛屽彧鏄緱鍒嗗彛寰勬寜鍚屽痉锛�
--- 鍚屽痉锛氫繚鎸侀粯璁� 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=鐪佺珛鍚屽痉浜旀。鏂囨鍔犳潈锛堥粯璁わ級锛沜ommon/nanhua=鎸夋槑缁� score 姹傚钩鍧�');
-
--- 鏍¢獙
--- SELECT config_key, config_value FROM sys_config WHERE config_key = 'satisfaction.site';
-
-
--- ----------------------------------------------------------------------------
--- 銆�2銆戝彲閫夋暟鎹�/閰嶇疆锛氳銆岀患鍚堝緱鍒嗐�嶅鍗楀崕鏈夋剰涔�
--- 褰撳墠妯℃澘 514 鐨� 19 閬撻銆�58 涓�夐」鍒嗗�煎叏鏄� 0锛屼换浣曞彛寰勯兘绠椾笉鍑哄垎銆�
--- 鑻ュ尰闄㈡帴鍙�"浜旀。涔嬪鎸� 婊¤冻/閮ㄥ垎婊¤冻/涓嶆弧瓒� 鎵撳垎"锛岃涓氬姟鍦�
--- 銆岄棶鍗锋ā鏉� 鈫� 棰樼洰閫夐」銆嶉噷缁欐瘡涓�夐」閰嶇疆鍒嗗�硷紝涔嬪悗锛�
--- 路 绔欑偣鍙e緞寤鸿閰� 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 涔熼兘鏄悓寰峰彛寰�
--- 锛堝嚭闄㈡椂闂淬�佺梾鍖虹淮搴︼級锛屽崡鍗庤鐢ㄩ渶鎸夊悓鏍锋�濊矾閫愪釜鏍稿銆�
--- ============================================================================
diff --git a/sql/fix_nhfy_ssd_delflag_20261021.sql b/sql/fix_nhfy_ssd_delflag_20261021.sql
deleted file mode 100644
index 680e80d..0000000
--- a/sql/fix_nhfy_ssd_delflag_20261021.sql
+++ /dev/null
@@ -1,110 +0,0 @@
--- ============================================================================
--- 鍗楀崕闄勪竴锛坣hfy锛夛細鎭㈠琚�昏緫鍒犻櫎鐨勬弧鎰忓害浣滅瓟鏄庣粏锛�2026-10-21 宸叉墽琛岋級
---
--- 銆愯儗鏅�戝鍑恒�岄棶棰樿鎯呭崰姣斻�嶆瘮銆屾偅鑰呴殢璁夸俊鎭〃鍗曘�嶅皯 10 浜猴紙370 vs 380锛夛紝
--- 鍘熷洜鏄繖 10 涓瓙浠诲姟鐨� service_subtask_detail 鍏ㄩ儴琚疆 del_flag='1'
--- 锛堝悓涓�鎮h�呰繕鏈� 2~6 浠介噸澶嶅壇鏈紝绛旀瀹屽叏涓�鑷达級銆�
--- 璇﹁ / 鎺掓煡_闂鍗犳瘮涓庨殢璁胯〃鍗曚汉鏁颁笉涓�鑷�.sql銆佹姄鐜板満_璋佹妸鏄庣粏缃负鍒犻櫎_20261021.sql
---
--- 銆愭湰娆℃墽琛屽唴瀹广��
--- 1) 鎭㈠ 5 涓瓙浠诲姟锛�45108 45109 45110 45111 45114锛夛細姣� (sub_id, scriptid) 鍙� MAX(id) 閭d竴浠界疆 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 / 鏈夋湁鏁堟槑缁嗙殑鎮h�� 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 閭d袱鏉℃帴鍙o紙瀹冧滑浼氬己鍒� NOW()锛夛紱鐢�
--- sql/鎶撶幇鍦篲璋佹妸鏄庣粏缃负鍒犻櫎_20261021.sql 閲岀殑 general_log 鎶撲竴娆� SQL 鍘熸枃鍗冲彲瀹氭銆�
--- 鍦ㄦ涔嬪墠锛屽彧瑕佽繕鏈夋偅鑰�"閲嶅~/琚ˉ榛樿鍊�"锛屽悓鏍风殑闂浼氬啀娆″嚭鐜般��
--- ============================================================================
diff --git "a/sql/fix_nhfy_\345\207\272\351\231\242\351\232\217\350\256\277\344\273\273\345\212\241\351\231\242\345\214\272\347\227\205\345\214\272\345\233\236\345\241\253_20261029.sql" "b/sql/fix_nhfy_\345\207\272\351\231\242\351\232\217\350\256\277\344\273\273\345\212\241\351\231\242\345\214\272\347\227\205\345\214\272\345\233\236\345\241\253_20261029.sql"
deleted file mode 100644
index 5aa160b..0000000
--- "a/sql/fix_nhfy_\345\207\272\351\231\242\351\232\217\350\256\277\344\273\273\345\212\241\351\231\242\345\214\272\347\227\205\345\214\272\345\233\236\345\241\253_20261029.sql"
+++ /dev/null
@@ -1,165 +0,0 @@
--- ============================================================================
--- 鍗楀崕闄勪竴锛坣hfy锛夛細鍑洪櫌闅忚浠诲姟銆岄櫌鍖� / 鐥呭尯銆嶅洖濉剼鏈�
--- ----------------------------------------------------------------------------
--- 鏍瑰洜锛�2026-10-29 鎺掓煡纭锛夛細
--- 鍑洪櫌闅忚浠诲姟鐢熸垚鏃讹紝VisitSubtaskFactory#boxedServiceSubtask 鏃犳潯浠舵墽琛�
--- `d.setCampusid(inhosp.getCampusid())`锛屽綋 pat_med_inhosp.campusid 涓虹┖鏃讹紝
--- 浼氭妸浠庨暱鏈熶换鍔℃惉鏉ョ殑闄㈠尯瑕嗙洊鎴� NULL 鈫� service_subtask.campusid 钀界┖銆�
--- 鑰岄殢璁垮垪琛ㄦ帴鍙� ServiceSubtaskController#patItem 寮哄埗 setCampusid(鐧诲綍鐢ㄦ埛闄㈠尯)锛�
--- SQL 鏉′欢 `and campusid = #{campusid}`锛孨ULL 涓嶅尮閰嶄换浣曞��
--- 鈫� 杩欎簺浠诲姟"搴撻噷瀛樺湪銆侀〉闈笂姘歌繙鏌ヤ笉鍒�"锛堝氨鏄�"鍑洪櫌 475 鏉°�侀殢璁垮彧鏈� 444 鏉�"鐨勭洿鎺ュ師鍥狅級銆�
--- 浠g爜宸插湪 VisitSubtaskFactory 涓慨澶嶏紙鍑洪櫌璁板綍鏈夐櫌鍖烘墠瑕嗙洊锛夛紝鏈剼鏈彧淇巻鍙叉暟鎹��
---
--- 鏈瀹炴祴锛�2026-10-29锛宻martor_nhfy锛夛細
--- 路 service_type='2' 涓� campusid 涓虹┖锛�**314 鏉�**
--- 鈥斺�� 鍏ㄩ儴鏄�屽啀娆¢殢璁� / 鎵嬪伐鏂板銆嶄骇鐢熺殑琛岋紙is_visit_again=1銆乮nhospid 涓虹┖銆乽pid 涓虹┖锛夛細
--- 313 鏉� create_by=鏇规収鐜层�乼askid=108銆屾秷鍖栦竴鍖洪殢璁裤�嶃��2026-06 鐢熸垚锛�
--- 1 鏉� taskid=177銆屼换鍔℃祴璇�0624銆嶃��
--- **杩欐壒鏃犳硶浠庡嚭闄㈣褰曞洖濉�**锛坕nhospid 鏄┖鐨勶紝涔熸病鏈夌埗浠诲姟鍙户鎵匡級锛�
--- 鍙兘閫�鍒版偅鑰呮。妗� pat_archive.campusid锛�314 鏉″叏閮芥湁鍊硷級銆�
--- 路 service_type='2' 涓� leaveldeptcode 涓虹┖锛�**303 鏉�**
--- 鈥斺�� 鍏朵腑 294 鏉″氨鏄笂闈㈤偅鎵癸紙inhospid 绌猴級锛屽彟 9 鏉℃湁 inhospid銆佸彲浠庡嚭闄㈣褰曞洖濉�
--- 锛�9 鏉¢兘鏄�屽啀娆¢殢璁裤�嶏紝taskid=11锛宑reate_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 澶嶆牳锛�
---
--- 鈿狅笍 鍙e緞鎻愰啋锛氬悓涓�鎵瑰嚭闄㈣褰曪紝銆屾寜绂婚櫌鐥呭尯銆嶆槸 475 鏉°�併�屾寜绂婚櫌绉戝銆嶆槸 469 鏉�
--- 锛堝樊 6锛�475 閲屾湁 7 鏉$梾鍖哄湪楠ㄧ涓績涓�浣嗙瀹ゅ睘浜庡埆鐨勭瀹わ紱鍙︽湁 1 鏉$瀹ゅ湪楠ㄧ涓績涓�浣嗙梾鍖烘槸鐤肩棝绉戠梾鍖猴級銆�
--- 瀵瑰簲鐨勪换鍔℃暟鏄� 468锛堢梾鍖猴級/ 465锛堢瀹わ級銆�**鍏堢‘璁ら〉闈㈢敤鐨勬槸鍝釜鍙e緞鍐嶅鏁�**锛�
--- 鍚﹀垯浼氬嚟绌哄鍑轰竴绗斿樊棰濄��
---
--- 鎵ц椤哄簭锛歋TEP 0 棰勬 鈫� STEP 1 澶囦唤 鈫� STEP 2 鍥炲~闄㈠尯 鈫� STEP 3 鍥炲~鐥呭尯
--- 鈫� STEP 4 鏍¢獙 鈫� 锛堝闇�鎾ら攢锛塖TEP 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 鎮h�呮。妗堟湁闄㈠尯,
- 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;
-
--- 鐥呭尯"涓嶄负绌轰絾涓庡嚭闄㈣褰曚笉涓�鑷�"鐨勶紝**涓嶅湪鏈剼鏈嚜鍔ㄤ慨**锛堝彲鑳芥槸杞/杞梾鍖虹殑姝e父涓氬姟锛夛紝
--- 鍙垪鍑烘潵浜哄伐纭锛堚殸锔� 杩欐潯杈冩參锛屽疄娴嬬害 70s锛屾斁鍒版渶鍚庤窇鎴栫洿鎺ヨ烦杩囷級锛�
-SELECT '0-D 鐥呭尯涓嶄竴鑷確浜哄伐纭' AS step, s.id AS 瀛愪换鍔D, 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;
diff --git "a/sql/fix_nhfy_\351\232\217\350\256\277\347\227\205\345\214\272\347\273\237\344\270\200\344\270\272\345\207\272\351\231\242\347\227\205\345\214\272_20261029.sql" "b/sql/fix_nhfy_\351\232\217\350\256\277\347\227\205\345\214\272\347\273\237\344\270\200\344\270\272\345\207\272\351\231\242\347\227\205\345\214\272_20261029.sql"
deleted file mode 100644
index 034b8df..0000000
--- "a/sql/fix_nhfy_\351\232\217\350\256\277\347\227\205\345\214\272\347\273\237\344\270\200\344\270\272\345\207\272\351\231\242\347\227\205\345\214\272_20261029.sql"
+++ /dev/null
@@ -1,186 +0,0 @@
--- ============================================================================
--- 鍗楀崕闄勪竴锛坣hfy锛夛細鎶娿�屽嚭闄㈤殢璁夸换鍔$殑鐥呭尯銆嶇粺涓�涓恒�屽嚭闄㈣褰曠殑鐥呭尯銆�
--- ----------------------------------------------------------------------------
--- 鍙e緞锛�2026-10-29 涓氬姟纭锛夛細鍑洪櫌璁板綍 pat_med_inhosp.leavehospitaldistrictcode/name 鏄敮涓�鏉冨▉锛�
--- 闅忚浠诲姟 service_subtask 涓�寰嬪悜瀹冨榻� 鈥斺�� 涓嶅啀鎸夋偅鑰呮。妗堝弽鎺ㄣ�佷篃涓嶇敤鍓嶇浼犲叆鐨勫�笺��
---
--- 涓轰粈涔堜箣鍓嶄細涓嶄竴鑷达細
--- 鈶� 鎵弿鐢熸垚锛堝嚭闄㈤殢璁夸富閾捐矾锛夋湰鏉ュ氨鏄彇鍑洪櫌璁板綍鐨勭梾鍖猴紝娌¢棶棰橈紱
--- 鈶� 銆屽啀娆¢殢璁� / 鎵嬪伐鏂板銆嶏紙/serviceSubtask/addSubTask銆�/addSubTaskAgain锛夋槸鐩存帴鎸夊墠绔�
--- 浼犳潵鐨勫瓧娈佃惤搴撶殑锛屽墠绔笉甯﹀氨鏄┖ 鈫� 杩欎簺浠诲姟鍦ㄦ寜鐥呭尯杩囨护鐨勯殢璁垮垪琛ㄩ噷鏌ヤ笉鍒帮紱
--- 鈶� 鍑洪櫌鍚� HIS 鍙堣兘鏇存鐥呭尯锛堣浆绉�/杞梾鍖猴級锛屽凡鐢熸垚鐨勪换鍔′笉浼氳窡鐫�鍙� 鈫� 鍑虹幇"涓よ竟涓嶄竴鏍�"銆�
--- 浠g爜渚у凡鍦� ServiceSubtaskServiceImpl 鍔� alignDischargeWardFromInhosp() 鍏滀綇 鈶★紝
--- 鏈剼鏈慨鍘嗗彶鏁版嵁锛堚憼浠ュ鐨� 鈶♀憿 涓ょ被锛夈��
---
--- 鏈瀹炴祴锛�2026-10-29锛宻martor_nhfy锛宒el_flag=0 + service_type='2'锛夛細
--- 路 闇�瑕佺粺涓�鐨勶細**67 鏉�**
--- - 鍘熸潵鐥呭尯涓虹┖鐨� 10 鏉�
--- - 鍘熸潵鐥呭尯涓庡嚭闄㈣褰曚笉涓�鑷寸殑 57 鏉�
--- 路 鏃犳硶缁熶竴鐨勶細0 鏉★紙杩� 67 鏉¢兘鑳藉畾浣嶅埌鍑洪櫌璁板綍锛屼笖鍑洪櫌璁板綍鐨勭梾鍖洪兘闈炵┖锛�
--- 路 鍙︿竴鎵� 314 鏉°�屽啀娆¢殢璁裤�嶈鏄�**闄㈠尯**锛坈ampusid锛変负绌恒�佺梾鍖烘湰韬湁鍊笺�乮nhospid 涓虹┖锛�
--- 涓庢湰鑴氭湰鏃犲叧锛岀敱 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锛�
--- 楠ㄧ涓績涓� 鍙e緞瀵圭収鐢� 475 / 468 鍙樹负 **475 / 475**锛堝嚭闄㈣褰曟寜鐥呭尯 = 闅忚浠诲姟鎸夌梾鍖猴級銆�
--- STEP 2B锛堢瀹わ級**鏈墽琛�**锛岀瓑浣犵‘璁ゃ��
---
--- 鎵ц椤哄簭锛歋TEP 0 棰勬 鈫� STEP 1 澶囦唤 鈫� STEP 2 缁熶竴鐥呭尯 鈫� STEP 3 鏍¢獙 鈫掞紙濡傞渶锛塖TEP 4 鍥炴粴
--- 娉ㄦ剰锛氶妫�鐨勪袱鏉� SQL 闇�瑕佹妸闅忚浠诲姟鍜屽嚭闄㈣褰曞叏閲忔瘮瀵癸紝瀹炴祴鍚勭害 1 鍒嗛挓锛屽睘姝e父銆�
--- ============================================================================
-
--- ---------------------------------------------------------------------------
--- 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锛坕nhospid 涓虹┖锛変笖鐥呭尯涓虹┖鐨勮锛�
--- 鏃犳硶鎸夊嚭闄㈣褰曠粺涓�锛岃 fix_nhfy_鍑洪櫌闅忚浠诲姟闄㈠尯鐥呭尯鍥炲~_20261029.sql
-SELECT '0-D 涓嶅湪鏈鑼冨洿' AS step, COUNT(*) AS 鏃犲嚭闄㈣褰旾D涓旂梾鍖轰负绌�
-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 楠ㄧ涓績涓�鐥呭尯/绉戝 涓や釜鍙e緞瀵规暟锛堢粺涓�鍚庣梾鍖轰换鍔℃暟搴旂瓑浜庢湰鐥呭尯鍑洪櫌璁板綍鏁帮級
-SELECT '3-B 楠ㄧ涓績涓� 鍙e緞瀵圭収' 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 鏉″緟鏀广��
--- 纭鏃犻渶鍥炴粴鍚庡啀鍒犲浠借〃锛欴ROP TABLE bak_service_subtask_ward_20261029;
diff --git a/sql/fix_service_subtask_campusid_20260924.sql b/sql/fix_service_subtask_campusid_20260924.sql
deleted file mode 100644
index 396f92d..0000000
--- a/sql/fix_service_subtask_campusid_20260924.sql
+++ /dev/null
@@ -1,108 +0,0 @@
--- =============================================================================
--- 鐪佺珛鍚屽痉锛氭弧鎰忓害瀛愪换鍔� campusid 涓虹┖鐨勬暟鎹慨澶嶏紙2026-09-24锛�
---
--- 鑳屾櫙锛�/sltdMydTotalByScore锛堟弧鎰忓害缁熻锛夌瓑鎺ュ彛甯� @AddOrgId锛屼細鎸夌櫥褰曠敤鎴风殑
--- campusid锛坅dmin = 30001002锛夎繃婊� service_subtask锛宑ampusid 涓� NULL 鐨勫瓙浠诲姟
--- 浼氳闈欓粯涓㈡帀锛屽鑷撮〉闈€�屽悇鏈嶅姟椤圭洰婊℃剰搴︾粺璁°�嶅拰 service_subtask_detail 鏄庣粏
--- 瀵逛笉涓婏紙濡傘�屾寕鍙�/灏辫瘖/妫�楠�/妫�鏌ョ瓑鐜妭绛夊�欐椂闂淬�嶉〉闈� 6 椤� vs 鏄庣粏 13 琛岋級銆�
---
--- 鐜扮姸锛歰rgid=20001001 涓� service_type IN ('6','14') 鐨勫瓙浠诲姟鍏� 767 鏉★紝
--- campusid='30001002' 642 鏉°��'30001003' 1 鏉°�丯ULL 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;
-
--- 棰勬湡锛堣ˉ榻愬悗锛宎dmin 鐧诲綍椤甸潰锛�= 寰堟弧鎰� 1銆佷笉婊℃剰 3銆佸緢涓嶆弧鎰� 4銆佸緢婊℃剰(闅忚浠诲姟) 涓嶈鍏�
--- 椤甸潰鍙e緞锛歴endstate=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 涓虹┖锛夛紝鏃笉绠楅�夐」涔熶笉杩涘垎姣�
diff --git a/sql/fix_service_subtask_campusid_20260928.sql b/sql/fix_service_subtask_campusid_20260928.sql
deleted file mode 100644
index e13b594..0000000
--- a/sql/fix_service_subtask_campusid_20260928.sql
+++ /dev/null
@@ -1,80 +0,0 @@
--- ============================================================================
--- 鐪佺珛鍚屽痉锛氭弧鎰忓害瀛愪换鍔� campusid 涓虹┖鐨勬暟鎹慨澶嶏紙2026-09-28锛屽凡鎵ц锛�
---
--- 銆愮幇璞°��/sltdMydTotalByScore銆�/satisfactionGraph 绛夋帴鍙f煡涓嶅埌鏁版嵁锛屼絾鎵嬪伐鏌ュ簱鏈夋暟鎹��
---
--- 銆愭牴鍥犮��
--- 1) 鍐欏簱澶� ServiceSubtaskAnswerServiceImpl 鏋勯�犳弧鎰忓害瀛愪换鍔★紙service_type 6/14锛夋椂
--- dept/ward/orgid 閮藉啓浜嗭紝鍞嫭婕忓啓 campusid 鈫� 钀藉簱涓� NULL锛�
--- 锛堝悓椤圭洰鍏跺畠鍐欏簱澶勯兘鏈夊啓锛歅atMedInhospServiceImpl:1146 鍙栦綇闄㈣褰曢櫌鍖恒��
--- PatMedOuthospServiceImpl:486 鍙栦换鍔¢櫌鍖猴紝鏈宸叉寜鍚屾牱鎬濊矾缁欒澶勮ˉ涓婏級
--- 2) 杩欎簺缁熻鎺ュ彛甯� @AddOrgId(campusField="campusid")锛孲etOrgIdAspect 浼氭妸鐧诲綍鐢ㄦ埛鐨勯櫌鍖�
--- 娉ㄥ叆鏌ヨ鏉′欢锛汼erviceSubtaskMapper.selectServiceSubtaskList 閲屾槸
--- `and campusid = #{campusid}`锛孨ULL 涓嶅尮閰嶄换浣曞�� 鈫� 杩欎簺瀛愪换鍔¤闈欓粯涓㈡帀锛�
--- 浼犵粰鏄庣粏缁熻锛坰tatQuestionOptionBySubtaskIds锛夌殑瀛愪换鍔� id 閲屾病鏈夊畠浠� 鈫� 椤甸潰绌恒��
---
--- 銆愪慨澶嶅墠瀹炴祴銆憇ervice_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) 妗f涔熶负绌虹殑鎸夊師 20260924 鑴氭湰缁撹鍏滃簳 30001002锛�64 琛�
--- 鏍¢獙锛歴ervice_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) 鎮h�呮。妗堥噷鏈夐櫌鍖虹殑锛屾寜鎮h�呭綊灞為櫌鍖鸿ˉ锛�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) 鎮h�呮。妗堜篃娌℃湁闄㈠尯鐨勶紝鍏滃簳 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) 鍙ˉ鏁版嵁涓嶅锛氬啓搴撳宸插悓姝ヤ慨锛圫erviceSubtaskAnswerServiceImpl 琛� setCampusid锛夛紝
--- 璇ユ敼鍔ㄩ渶瑕侀噸鏂板彂甯冨悗绔墠鐢熸晥锛屽惁鍒欐柊浜х敓鐨勬弧鎰忓害瀛愪换鍔¤繕浼氭槸 NULL銆�
--- 2) 閭� 1 琛屾寜鎮h�呮。妗堣ˉ鎴愪簡 30001004锛堜笉鏄� 30001002锛夛紝濡傜‘璁よ鐥呭尯瀹為檯灞炴湰閮紝
--- 鍙崟鐙敼鍥烇細SELECT * FROM bak_service_subtask_campusid_20260928 WHERE id = ?;
--- 3) 鐥呭尯/绉戝涓虹┖銆佹。妗堜篃鏃犻櫌鍖虹殑琛屼竴寰嬫寜 30001002 鍏滃簳锛涜嫢鍚庣画瑕佸仛澶氶櫌鍖哄彛寰勶紝
--- 寤鸿鎶� leavehospitaldistrictcode/deptcode 涔熶竴璧锋不鐞嗐��
--- ============================================================================
diff --git a/sql/index_service_subtask_detail_unique_20261021.sql b/sql/index_service_subtask_detail_unique_20261021.sql
deleted file mode 100644
index 1edcd0e..0000000
--- a/sql/index_service_subtask_detail_unique_20261021.sql
+++ /dev/null
@@ -1,124 +0,0 @@
--- ============================================================================
--- (sub_id, scriptid) 鍘婚噸 + 鍞竴绱㈠紩 鈥斺�� 鏍规不"鍚屼竴鎮h�呭悓涓�棰樺爢鍑哄浠介噸澶嶆槑缁�"
--- 鍗楀崕闄勪竴锛坣hfy锛�2026-10-21
---
--- 銆愪负浠�涔堣鍋氥��
--- 淇濆瓨绛旀/琛ラ粯璁ゅ�肩殑 upsert 璧� isExistServiceSubtaskDetail锛屽巻鍙蹭笂鍙湅 del_flag=0锛�
--- 鏄庣粏涓�鏃﹁閫昏緫鍒犻櫎灏辨煡涓嶅埌 鈫� 涓嬩竴娆′繚瀛樺繀鐒� INSERT锛屽壇鏈秺绉秺澶�
--- 锛�2026-09-08 閭� 10 浣嶆偅鑰呭悇鍫嗕簡 2~6 浠斤紝绛旀瀹屽叏鐩稿悓锛夈��
--- 浠g爜渚у凡鏀逛负銆屽拷鐣ュ垹闄ゆ爣璁板彇鏈�鏂颁竴琛� + 鏇存柊鍚� reviveServiceSubtaskDetail 澶嶆椿銆嶏紝
--- 鏈剼鏈啀浠庢暟鎹簱灞傚姞涓�閬撳敮涓�绾︽潫鍏滃簳銆�
---
--- 銆愮幇鐘讹紙2026-10-21 瀹炴祴 smartor_nhfy锛夈��
--- 鏄庣粏鎬绘暟 346,628锛泂ub_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銆戝浠借嚜妫�锛堢‘璁ゅ浠借〃閲屾病鏈�"姣忕粍閮藉簲璇ヤ繚鐣欑殑閭d竴琛�"锛�
--- ----------------------------------------------------------------------------
--- 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 鍙栨渶鏂颁竴琛�"鈫� 姝e父淇濆瓨璧� UPDATE锛屼笉浼� INSERT锛�
--- 鈶� /smartor/subtaskAnswer/saveQuestionAnswer 鍔犱簡 Redis 骞傜瓑鍗犱綅锛�60 绉掞紝鍚屼竴 pid+tid+subid 鍙鐞嗕竴娆★級銆�
--- 浣嗗鏋滃皢鏉ヨ繕鏈夊埆鐨勫啓鍏ヨ矾寰勭洿鎺� INSERT 鏄庣粏锛屽缓璁湪鎻掑叆澶� catch DuplicateKeyException 鍚庤浆 UPDATE銆�
--- ============================================================================
diff --git a/sql/ivr_assort_columns_20260928.sql b/sql/ivr_assort_columns_20260928.sql
deleted file mode 100644
index 0489a10..0000000
--- a/sql/ivr_assort_columns_20260928.sql
+++ /dev/null
@@ -1,148 +0,0 @@
--- ============================================================================
--- smartor_sltd 鏁版嵁搴擄細璇煶闂鐩稿叧琛ㄧ殑鍒楀悕瀵归綈 / 鏂板鍒楄剼鏈�
--- 鐢熸垚鏃ユ湡: 20260928
--- 鐩爣搴� : smartor_sltd锛坮uoyi-admin/src/main/resources/application-druid.yml锛宲rofile=druid锛�
--- 鐩殑 : 璁� ivr_liba_template_script / ivr_task_template_script 鐨勫垪鍚嶄笌
--- IvrLibaTemplateScriptMapper.xml / IvrTaskTemplateScriptMapper.xml 涓�鑷�
--- 锛堣繖涓や釜 mapper 閲屾煡鐨勬槸 script_assortname銆乻cript_assortid锛�
---
--- 銆愭墽琛屽墠瀹炴祴鐜扮姸锛�20260928锛宻martor_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 渚у璞°��
--- 鈬� 浠g爜渚у奖鍝嶏細IvrLibaTemplateScriptMapper銆両vrTaskTemplateScriptMapper 鏈潵灏卞湪鐢�
--- script_assortname / script_assortid锛屾敼瀹屽悗杩欎袱涓� mapper 鎵嶇湡姝h兘鏌ラ�氾紱
--- 涓や釜 mapper 閮芥病鏈夊紩鐢� categoryName锛屾墍浠ユ敼鍚嶄笉浼氬奖鍝嶇幇鏈夊姛鑳姐��
--- ============================================================================
-
-
--- ----------------------------------------------------------------------------
--- 銆�0銆戞墽琛屽墠妫�鏌ワ紙纭涓庝笂闈㈢殑瀹炴祴涓�鑷达紝姝e父搴旂湅鍒� 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銆慶ategoryName 鈫� 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銆慽vr_liba_script_assort.type
--- 璇ュ垪鏈潵灏辨湁锛坴archar(255)锛屾棤娉ㄩ噴锛�35 琛屽叏 NULL锛夛紝杩欓噷鍙寜闇�姹傝ˉ娉ㄩ噴骞舵妸闀垮害鏀规垚 100銆�
--- 娉ㄦ剰锛歷archar(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 鍥炲~
--- 澶囨敞閲屽師鏈啓鐨勨�渋vr_liba_script_ssort鈥濆簲涓衡�渋vr_liba_script_assort鈥濓紝涓嬮潰鎸夋纭〃鍚嶅啓銆�
--- ----------------------------------------------------------------------------
-ALTER TABLE ivr_liba_template_script
- ADD COLUMN script_assortid int(11) NULL COMMENT '璇煶闂绫诲埆ID锛堝搴旂殑鏄痠vr_liba_script_assort锛�',
- ALGORITHM = INPLACE,
- LOCK = NONE;
-
-ALTER TABLE ivr_task_template_script
- ADD COLUMN script_assortid int(11) NULL COMMENT '璇煶闂绫诲埆ID锛堝搴旂殑鏄痠vr_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 婊℃剰搴﹁皟鏌ャ�乮d=9 鏈嶅姟璇勪环锛夆啋 mzmyd / zymyd
--- 鍏朵綑鍒嗙被 鈫� 鐣欑┖鎴栨寜涓氬姟鑷畾涔�
--- 锛堟湰搴� ivr_liba_script_assort 閲岀殑鍒嗙被鍚嶏細鏈垎绫�/鎮h�呬俊鎭�/浣撳緛/鐤剧梾/鐥囩姸/鐢熸椿鏂瑰紡/
--- 鐢ㄨ嵂渚濅粠鎬�/涓嶈壇鍙嶅簲/閫氱煡鎻愰啋/鏈嶅姟璇勪环/妫�鏌ョ被/妫�楠岀被/婊℃剰搴﹁皟鏌�/鑶抽绫�/杩愬姩绫�/鐫$湢绫�/
--- 鎶界儫鍠濋厭/韬珮/浣撻噸/瑙嗗姏/鍚姏/鎰忚寤鸿/妫�楠屾鏌ョ被/闅忚鎸囨爣/韬唤纭/澶嶈瘖閫氱煡/澶嶆煡閫氱煡/
--- 鏄惁鏂逛究/鍑洪櫌瀹f暀/淇吇鍦�/璇煶棰樼洰/璇煶棰樼洰娴嬭瘯 鈥︼級
--- ----------------------------------------------------------------------------
--- 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 '';
diff --git a/sql/ivr_script_missing_columns_20260928.sql b/sql/ivr_script_missing_columns_20260928.sql
deleted file mode 100644
index 16a93a0..0000000
--- a/sql/ivr_script_missing_columns_20260928.sql
+++ /dev/null
@@ -1,88 +0,0 @@
--- ============================================================================
--- smartor_sltd 鏁版嵁搴擄細ivr 璇煶闂涓ゅ紶琛ㄨˉ榻� mapper 闇�瑕佺殑 6 涓垪锛堢浜屾壒锛�
--- 鐢熸垚鏃ユ湡: 20260928
---
--- 銆愪负浠�涔堥渶瑕併��
--- 20260928 绗竴鎵瑰凡鎶� categoryName 鈫� script_assortname銆佸苟鏂板 script_assortid锛�
--- 浣� IvrLibaTemplateScriptMapper / IvrTaskTemplateScriptMapper 鐨� select / insert / update
--- 璇彞閲岃繕寮曠敤浜嗕笅闈� 6 涓垪锛岃�� ivr_liba_template_script銆乮vr_task_template_script 涓や釜琛�
--- 鍦ㄦ湰搴撲腑閮戒笉瀛樺湪杩欎簺鍒楋紙svy_lib_template_script 閲屾槸鏈夌殑锛屽畾涔夌収鎶勫嵆鍙級锛�
--- dimension varchar(50) 闂缁村害
--- is_myd_exception varchar(50) 婊℃剰搴︽剰瑙佸紓甯革紙鍙拡瀵规枃鏈級
--- duty_dept_name text 璐d换绉戝鍚嶇О锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�
--- duty_dept_code text 璐d换绉戝缂栫爜锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�
--- report_dept_name text 鎶ュ绉戝鍚嶇О锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�
--- report_dept_code text 鎶ュ绉戝缂栫爜锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�
--- 鈬� 涓嶈ˉ鐨勮瘽锛宻atisfactionGraph 鐨勮闊冲垎鏀紙type=1 鎴� type=null锛夋墽琛�
--- IvrLibaTemplateScriptMapper.queryLibTemplateIds 鏃朵粛浼氭姏
--- Unknown column 'is_myd_exception' in 'field list'銆�
--- 锛堢涓�鎵逛箣鍓嶆姤鐨勬槸 script_assortname锛岄偅涓や釜鍒楀凡缁忚ˉ濂姐�傦級
---
--- 銆愭牎楠屾柟寮忋��
--- 宸茬敤鑴氭湰閫愬垪姣斿锛氫袱寮犺〃鐨� mapper 璇彞锛坰elect 鐗囨 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銆慽vr_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 '璐d换绉戝鍚嶇О锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ADD COLUMN duty_dept_code text NULL COMMENT '璐d换绉戝缂栫爜锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ADD COLUMN report_dept_name text NULL COMMENT '鎶ュ绉戝鍚嶇О锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ADD COLUMN report_dept_code text NULL COMMENT '鎶ュ绉戝缂栫爜锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ALGORITHM = INPLACE,
- LOCK = NONE;
-
-
--- ----------------------------------------------------------------------------
--- 銆�2銆慽vr_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 '璐d换绉戝鍚嶇О锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ADD COLUMN duty_dept_code text NULL COMMENT '璐d换绉戝缂栫爜锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ADD COLUMN report_dept_name text NULL COMMENT '鎶ュ绉戝鍚嶇О锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ADD COLUMN report_dept_code text NULL COMMENT '鎶ュ绉戝缂栫爜锛堝鏋滃涓瀹ょ敤閫楀彿鍒嗗壊锛�',
- ALGORITHM = INPLACE,
- LOCK = NONE;
-
-
--- ----------------------------------------------------------------------------
--- 銆�3銆戦獙璇侊細杩欎袱鏉� mapper 鐨� select 鐗囨搴旇兘姝e父杩斿洖
--- 绛変环 SQL锛圡yBatis 閲屽氨鏄繖娈碉級锛�
--- 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;
diff --git a/sql/pat_med_outhosp_serialnum_index.sql b/sql/pat_med_outhosp_serialnum_index.sql
deleted file mode 100644
index b22e9b5..0000000
--- a/sql/pat_med_outhosp_serialnum_index.sql
+++ /dev/null
@@ -1,184 +0,0 @@
--- ============================================================================
--- pat_med_outhosp 绯诲垪琛ㄦ寜 serialnum 鍔犵储寮曪紙閰嶅悎闂ㄦ�ヨ瘖鎸夊ぉ鍏ㄩ噺閲囬泦锛�
---
--- 涓轰粈涔堣鍔狅細
--- 1) 閲囬泦浠诲姟姣忎釜鍗婂皬鏃舵妸褰撳ぉ涓婁竾涓瘖鐤楄褰曟暣杞媺涓�閬嶏紝闈�"鏁撮〉鎵归噺鏌ラ噸"杩囨护宸插叆搴撶殑锛�
--- 鏌ラ噸 SQL 鏄� where serialnum in (500涓�)銆傛病鏈夌储寮曞氨鏄叏琛ㄦ壂鎻忥紝瀛e害鍒嗚〃鍑犵櫨涓囪鏃朵竴娆″氨寰堟參锛�
--- 2) 鍞竴绱㈠紩鏄�"涓嶉噸澶�"鐨勬渶鍚庝竴閬撻槻绾匡細鏋佺骞跺彂銆佹柇鐐瑰洖閫�銆佸垎椤靛亸绉婚兘涓嶄細鎻掑嚭閲嶅璁板綍銆�
---
--- 鎵ц椤哄簭锛�
--- 绗� 1 姝� 鐪嬫竻鏈夊摢浜涜〃銆佺幇鍦ㄦ湁娌℃湁绱㈠紩
--- 绗� 2 姝� 鏌ラ噸澶嶆暟鎹紙鏈夐噸澶嶇殑璇濈 3 姝ュ姞鍞竴绱㈠紩浼氬け璐ワ紝鍏堝鐞嗛噸澶嶏級
--- 绗� 3 姝� 鍔犲敮涓�绱㈠紩 uk_serialnum锛堣剼鏈細鑷姩璺宠繃宸叉湁鍞竴绱㈠紩鐨勮〃锛�
--- 绗� 4 姝� 鏍¢獙缁撴灉
---
--- 娉ㄦ剰锛欰DD INDEX 璧� online DDL锛圓LGORITHM=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();
--- 鏌ュ畬鍙互鍒犳帀杩欎釜杩囩▼锛欴ROP PROCEDURE IF EXISTS check_outhosp_serialnum_dup;
-
--- 濡傛灉鏈夐噸澶嶏紝鎸変笅闈㈢殑鎬濊矾娓呯悊锛堜繚鐣� id 鏈�灏忕殑閭f潯锛屽厛澶囦唤鍐嶅垹锛夛細
--- CREATE TABLE bak_dup_<琛ㄥ悕>_<鏃ユ湡> AS
--- SELECT * FROM `pat_med_outhosp_20261012`
--- WHERE serialnum IN ('閲嶅鐨剆erialnum1','閲嶅鐨剆erialnum2');
--- 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 ('閲嶅鐨剆erialnum1','閲嶅鐨剆erialnum2');
-
-
--- ----------------------------------------------------------------------------
--- 绗� 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;
diff --git a/sql/patinhosp_select_list_index_optimize.sql b/sql/patinhosp_select_list_index_optimize.sql
deleted file mode 100644
index e9713d6..0000000
--- a/sql/patinhosp_select_list_index_optimize.sql
+++ /dev/null
@@ -1,202 +0,0 @@
--- ============================================================================
--- 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">
---
--- 鈿狅笍 娉ㄦ剰锛氳縼绉诲悗杩欐潯閾俱�愪笉鍐嶇粡杩囥�憇martor 鐨� PatMedInhospServiceImpl#selectPatMedInhospList锛�
--- 鍥犳閭i噷闈㈢殑 cry 褰掍竴鍖栵紙cry=0 -> inhospstate='0'锛夊湪杩欐潯鎺ュ彛涓娿�愬凡缁忎笉鐢熸晥浜嗐�戙��
--- 杩欎竴鐐瑰悓鏃舵槸"鎱�"鐨勬牴鍥犱箣涓�锛岃涓嬮潰銆愮 4 鑺傘�戙��
---
--- 鎵ц椤哄簭锛氱 1 姝ョ湅鐜扮姸 鈫� 绗� 2 姝ワ紙浜岄�変竴锛夆啋 绗� 3 姝� EXPLAIN 楠岃瘉銆�
--- ADD INDEX 璧� online DDL锛堜笉闃诲璇诲啓锛夛紝浣嗗ぇ琛ㄤ粛浼氬悆 IO锛屽缓璁笟鍔′綆宄版墽琛屻��
--- ============================================================================
-
-
--- ----------------------------------------------------------------------------
--- 绗� 1 鑺傦細杩欐潯鍏ュ弬瀹為檯鎵ц鐨勪袱鏉� SQL锛堢敱 MyBatis 鍔ㄦ�佹爣绛惧睍寮� + PageHelper 鏀瑰啓锛�
--- ----------------------------------------------------------------------------
---
--- 鈶� 鏁版嵁鏌ヨ锛�<select id="selectPatMedInhospList">锛坈ry=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
---
--- 鈶� 鎬绘暟鏌ヨ锛歅ageHelper 鑷姩鐢熸垚銆傚洜涓烘湁 GROUP BY锛宨sSimpleCount() 涓� 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 鐨勬浛浠f潯浠讹紝F2 鍙兘璧�"鍔犵储寮�"閭f潯璺�
- 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锛宬ey 鍙湁 idx_inhosp_optimize 鐨�
--- (del_flag, orgid) 鍓嶇紑鑳界敤鍒帮紙鎴栧畬鍏ㄧ敤涓嶄笂锛夛紱
--- rows 绾︾瓑浜�"璇ユ満鏋勫叏閮ㄥ巻鍙蹭綇闄㈣褰曟暟"锛孍xtra 閲屽嚭鐜� Using where; Using temporary; Using filesort銆�
--- 鏀逛箣鍚庤鐐癸細b 琛� rows 搴旈檷鍒�"璇ユ満鏋勫湪闄汉鏁�"閲忕骇锛堟暟鍗冿級锛屼笖 key 鍛戒腑涓嬮潰鐨勬柊绱㈠紩 / 鐜版湁绱㈠紩鍏ㄥ墠缂�銆�
-
-
--- ----------------------------------------------------------------------------
--- 绗� 2 鑺傦細涓ょ淇硶 鈥斺�� 銆愭湰娆¢噰鐢ㄤ慨娉� A銆戯紝淇硶 B 鐣欎綔澶囬��
--- ----------------------------------------------------------------------------
-
--- 淇硶 A锛堟湰娆¢噰鐢紝闆惰涔夐闄╋級锛氱粰"鍦ㄩ櫌"琛ヤ竴涓兘瀹氫綅鐨勭储寮曘��
--- 鐜版湁 idx_inhosp_optimize 鐨勭涓変釜绛夊�煎垪鏄� inhospstate锛屼絾鏈帴鍙d笉浼犺繖涓潯浠讹紝
--- 鍙兘鐢ㄤ笂 (del_flag, orgid) 鍓嶇紑 = 璇ユ満鏋勫叏閮ㄥ巻鍙蹭綇闄㈣褰曪紝绛変簬娌¤蛋绱㈠紩銆�
--- 鍓嶆彁锛欶1 鐨� 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);
-
--- 鍑洪櫌 / 杞 / 棰勫叆闄� 涓変釜瑙嗗浘锛坈ry=1/2/3锛宱rder 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锛宬ey = idx_pmi_del_org_end锛堟垨 idx_inhosp_optimize锛夛紝rows 鏁板崈绾э紱
--- 鈶� Using temporary; Using filesort 浠嶄細鏈夛紙GROUP BY + 搴婁綅鎺掑簭瀵艰嚧锛岃 F3锛夛紝
--- 浣嗗洜涓哄弬涓庢帓搴忕殑琛屾暟宸茬粡浠�"鍏ㄦ満鏋勫巻鍙�"闄嶅埌"鏈儴闂ㄥ湪闄�"锛屽彲浠ユ帴鍙楋紱
--- 鈶� 鎺ュ彛鑰楁椂锛歝ount + 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 鑺傦細浠g爜渚ч『甯﹀彂鐜扮殑闂锛堟寜褰卞搷鎺掑簭锛�
--- 鉁� 宸叉敼锛欶1 / F2 / F4 鈴� 鏈敼锛堢瓑纭锛夛細F3 / F5 / F6
---
--- F1 鉁� 宸叉敼 b.del_flag = 0 / a.del_flag = 0锛氭暟瀛楀父閲忔瘮 char 鍒楋紝MySQL 浼氭妸銆愬垪銆戣浆
--- DOUBLE锛岃鏉′欢鍙兘杩囨护銆佷笉鑳藉畾浣嶃�俰dx_inhosp_optimize 鐨勯鍒楀氨鏄� del_flag锛�
--- 绛変簬棣栧垪鐧界粰銆傚凡鏀规垚 = '0'銆傛湰浠撳簱宸叉湁鍚岀被缁撹锛岃
--- sql/sltdMydTotalByDimension_index_20260924.sql 绗� 117-134 琛岋細"浠g爜渚у繀椤诲悓姝ヤ慨姝�
--- del_flag 鐨勫啓娉曪紝鍚﹀垯绱㈠紩鍙兘鐢ㄤ笂涓�鍗�"銆�
--- 锛堝垪鏄� int 鏃跺啓 '0' 涔熷畨鍏細甯搁噺渚ц浆鎹紝绱㈠紩鐓ф牱鍙敤銆傦級
---
--- F2 鉁� 宸叉敼 PageHelper 鐨� count锛氭湁 GROUP BY 鏃朵笉鑳界畝鍖栵紝鍙兘鍖呬竴灞� tmp_count锛�
--- 绛変簬姣忔缈婚〉鎶婅繖鏉� 60 鍒楁煡璇㈠啀璺戜竴閬嶃�傚凡鍦�
--- ruoyi-inhospvisit/.../PatMedInhospMapper.xml 琛� selectPatMedInhospList_COUNT
--- 锛坧agehelper 5.3.x 鐨� PageInterceptor 鏀寔 countSuffix="_COUNT" 鐨勬墜鍐� count锛�
--- 宸叉牳瀵瑰瓧鑺傜爜甯搁噺锛歡enCountMsId / 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 涓婚敭銆乥.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锛堟暟瀛楋級锛孞ackson 钀藉埌 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 椤癸紝鏀瑰畬璇疯窇涓�娆★級
--- ============================================================================
diff --git a/sql/patinhosp_select_list_slow_diagnose.sql b/sql/patinhosp_select_list_slow_diagnose.sql
deleted file mode 100644
index b2bd3e4..0000000
--- a/sql/patinhosp_select_list_slow_diagnose.sql
+++ /dev/null
@@ -1,222 +0,0 @@
--- ============================================================================
--- /smartor/patinhosp/selectPatMedInhospList 鎱� 鈥斺�� 涓�椤佃瘖鏂紙鎶婅緭鍑鸿创鍥炴潵鍗冲彲瀹氫綅锛�
---
--- 鐜板満鍏ュ弬锛歿"bedSort":1,"pageNum":1,"pageSize":20,
--- "deptcodeList":["40003378"],"hospitaldistrictcodeList":["40003380"],"cry":0}
---
--- 浠g爜渚у凡缁忓仛瀹岀殑涓変欢浜嬶紙涓嶇敤鍐嶆煡锛夛細
--- 鈶� del_flag / inhospstate 宸叉敼鎴愬瓧绗︿覆甯搁噺 鈫� 绱㈠紩棣栧垪鑳界敤涓婁簡
--- 鈶� 鍒嗛〉 count 宸叉敼鎴愭墜鍐� _COUNT锛坧agehelper 瀹炴祴瑙f瀽鍒� 5.3.2锛岃鏈哄埗鐢熸晥锛夛紝
--- 涓嶅啀鎶� 60 鍒楁煡璇㈡暣涓寘涓�灞傞噸璺�
--- 鈶� 銆愬湪闄㈠彛寰勩�慶ry=0 鐜板湪鍚屾椂甯� endtime is null 鍜� inhospstate = '0'
--- 鈥斺�� 杩欐槸杩佸嚭鍓� PatMedInhospServiceImpl 鐨勮涓猴紝涔熸槸璁╃储寮曠涓夊垪
--- (del_flag, orgid, inhospstate) 鐪熸绛夊�煎懡涓殑鍓嶆彁
--- 濡傛灉銆愯繕鏄參銆戯紝鍓╀笅鐨勬椂闂村繀鐒跺湪杩欎袱澶勪箣涓�锛�
--- (鐢�) 鍦ㄩ櫌鍙e緞閫夐敊浜嗗垪 鈥斺�� endtime IS NULL 鍛戒腑鐨勮鏁拌繙澶т簬鐪熷疄鍦ㄩ櫌浜烘暟
--- 锛圚IS 瀵煎叆鐨勫巻鍙叉暟鎹� endtime 甯稿勾涓虹┖锛岃繖涓�鏉℃渶瀹规槗琚拷鐣ワ級
--- (涔�) 绱㈠紩娌″缓 / 寤轰簡浣嗙敤涓嶄笂锛堢被鍨嬫垨瀛楃闆嗕笉涓�鑷达紝join 閿闅愬紡杞崲锛�
---
--- 璺戞硶锛氭暣娈佃创杩� mysql 瀹㈡埛绔�傛瘡涓� SELECT 鐨勭粨鏋滈噷瀹㈡埛绔細鎵撳嵃
--- "1 row in set (0.0xx sec)"锛岄偅涓鏁板氨鏄垜瑕佺殑銆�
--- 闇�瑕佹浛鎹㈢殑鍗犱綅绗︼細<ORGID>锛�= 鐧诲綍鐢ㄦ埛鐨� orgid锛夈��<DEPT>銆�<DISTRICT>銆�
--- ============================================================================
-
-
--- ----------------------------------------------------------------------------
--- 0) 鐗堟湰锛圗XPLAIN 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) 鈽呮渶鍏抽敭锛氬湪闄㈠埌搴曟湁澶氬皯琛岋紙涓ょ鍙e緞瀵规瘮锛�
--- 濡傛灉 in_by_endtime 杩滃ぇ浜� in_by_state锛岃鏄� endtime IS NULL 涓嶆槸"鍦ㄩ櫌"锛�
--- 閭e啀鎬庝箞鍔犵储寮曚篃娌℃晳 鈥斺�� 蹇呴』鎹㈡垚 inhospstate 鍙e緞锛堜唬鐮佷竴琛岋級銆�
--- ----------------------------------------------------------------------------
-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;
-
--- 鎹㈡垚"璇ユ満鏋�"鍐嶇湅涓�閬嶏紙鍙e緞鍒嗗竷鍙兘鍥犳満鏋勮�屽紓锛�
-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锛氳繖鏄�"鍙栨暟"鐨勪笅闄愩�愭柊鍙e緞銆�
-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 鏁翠釜鍖呬竴灞傦級鈥斺�� 杩欏氨鏄浼樺寲鎺夌殑閭f潯
-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 蹇� -> 鐥呭洜灏辨槸"鍦ㄩ櫌鍙e緞"锛屾湰娆¤ˉ inhospstate='0' 宸茶В鍐筹紝鏀跺伐
--- 3a 鎱� -> 鍙栨暟灏辫蛋閿欒矾浜嗭紙绱㈠紩缂哄け / 绫诲瀷瀛楃闆嗕笉涓�鑷达級锛岀湅绗� 1銆�2銆�5 鑺�
--- 3a 蹇��3b 鎱� -> join 鏈夐棶棰橈紙patid/id 绫诲瀷鎴栧瓧绗﹂泦涓嶄竴鑷达紝鐪嬬 5 鑺傦級
--- 3b 蹇��3e 鎱� -> GROUP BY 鐨勪唬浠凤紱鍙互纭"GROUP BY 鏄┖鎿嶄綔"鍚庡垹鎺�
--- 3e 蹇��3f 鎱� -> ORDER BY 鐨� filesort 浠d环锛涘彲鑰冭檻璁╃储寮曢『搴忚鐩栨帓搴�
--- 3c 鏄庢樉鎱簬 3b -> 璇存槑杩欐鐨勬墜鍐� count 鏀归�犵‘瀹炵渷鎺変簡澶уご
-
-
--- ----------------------------------------------------------------------------
--- 4) 鎵ц璁″垝锛圡ySQL 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 = 鍏ㄦ壂锛堥棶棰橈級锛況ef / range = 璧扮储寮曪紙姝e父锛�
--- key : 鍛戒腑鐨勭储寮曞悕锛汵ULL = 娌$敤绱㈠紩
--- 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 閿闅愬紡杞崲锛宲at_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 鐨勭鏁帮紙杩欎袱涓竴瀵规瘮灏辩煡閬撶梾鍥犳槸涓嶆槸"鍦ㄩ櫌鍙e緞"锛�
--- 鈶� 绗� 2 鑺傜涓�缁勭殑鍥涗釜鏁板瓧锛坱otal_rows / in_by_endtime / in_by_state / conflict...锛�
--- 鈶� 绗� 4 鑺� EXPLAIN 鐨� table / type / key / rows 鍥涘垪
--- 鈶� 闇�瑕佹椂鍐嶈ˉ绗� 1 鑺傜储寮曟竻鍗曚笌绗� 5 鑺傜殑 join 閿竴鑷存�х粨璁�
--- ============================================================================
diff --git a/sql/perf_sf_statistics_details_20261102.sql b/sql/perf_sf_statistics_details_20261102.sql
deleted file mode 100644
index ccbcdfe..0000000
--- a/sql/perf_sf_statistics_details_20261102.sql
+++ /dev/null
@@ -1,105 +0,0 @@
--- ============================================================================
--- /smartor/serviceSubtask/getSfStatisticsCountDetails 鎱㈡煡璇紭鍖栵紙鍗楀崕闄勪竴 nhfy锛�
--- 2026-11-02
---
--- 銆愮幇璞°�戞弧鎰忓害缁熻椤电偣鈥滄煡鐪嬭鎯呪�濊绛夊崄鍑犵鍒颁簩鍗佸嚑绉掋��
--- 璇锋眰锛歿 "configKey":"joyCount", "leavehospitaldistrictcodes":["40003514"],
--- "serviceType":[6], "pageNum":1, "pageSize":20 }
---
--- 銆愯繖鏉℃帴鍙e疄闄呭彂浜� 5 鏉� SQL銆�
--- ServiceSubtaskServiceImpl#getSfStatisticsScriptDetails 鍦� type 涓虹┖鏃朵細璺戜袱瓒燂細
--- type=1(璇煶) 鈫� getSfStatisticsScriptDetails + getSfStatisticsScriptItemDetails
--- type=2(闂嵎) 鈫� getSfStatisticsScriptDetails + getSfStatisticsScriptItemDetails
--- controller 涓婅繕鏈� PageUtils.startPageByPost(...)锛孭ageHelper 浼氬绗竴鏉″啀琛ヤ竴娆� 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 瀹炴祴锛歴s 璧� idx_service_subtask_orgid_visit_time锛宺ows=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锛宺ows 27864 鈫� 3644銆�
---
--- 銆愭敼娉� 2锛氳ˉ涓や釜绱㈠紩锛屾妸鑼冨洿鍐嶆敹绐勩��
--- 鏄庣粏椤靛浐瀹氭寜 (鐥呭尯, service_type, type) 杩囨护锛屽師鏉ユ病鏈変换浣曠储寮曡兘瑕嗙洊杩欎釜缁勫悎
--- 锛坰ervice_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
--- ============================================================================
-
-
--- ----------------------------------------------------------------------------
--- 銆愪竴銆慏DL锛堟瘡涓幆澧冮兘瑕佸崟鐙墽琛岋紱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)锛�
--- 璇煶閭d竴瓒熸亽涓� 0 琛屻�傜幇鍦ㄦ湁绱㈠紩鍚庡畠鍙 ~120ms锛屽彲浠ユ帴鍙楋紱
--- 鑻ヨ褰诲簳鐪佹帀锛岃鍓嶇鏄庣‘浼� type锛屾垨鍚庣鎸� serviceType 鎺ㄦ柇銆�
--- 2) PageHelper 鐨� COUNT 浼氬鍚屼竴鏉¢噸鏌ヨ鍐嶈窇涓�閬嶃�傝繖涓粨鏋滈泦鍙湁 19 琛岋紝
--- 鍏跺疄涓嶉渶瑕佸垎椤点�傝鐪佸氨寰楀幓鎺� startPageByPost锛屾帴鍙h繑鍥炵粨鏋勪細鍙橈紝鍏堜笉鍔ㄣ��
diff --git a/sql/rename_service_subtask_dims_20261106.sql b/sql/rename_service_subtask_dims_20261106.sql
deleted file mode 100644
index 56560d9..0000000
--- a/sql/rename_service_subtask_dims_20261106.sql
+++ /dev/null
@@ -1,105 +0,0 @@
--- ============================================================================
--- service_subtask 瀛楁鏀瑰悕锛堝嚭闄㈢淮搴� 鈫� leavel*锛屽鐢� sendlimit* 绌哄垪 鈫� 鍦ㄩ櫌鐥呭尯 / 鍦ㄩ櫌绉戝锛�
--- 鐢熸垚鏃ユ湡锛�2026-11-06
--- 閫傜敤锛歁ySQL 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锛歴endlimit* 鍒楀湪搴撻噷涓嶅瓨鍦紙绗� 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锛歁ySQL 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 '绉戝鍚嶇О';
diff --git a/sql/service_out_path_radix_shortcode_20261106.sql b/sql/service_out_path_radix_shortcode_20261106.sql
deleted file mode 100644
index c051ea9..0000000
--- a/sql/service_out_path_radix_shortcode_20261106.sql
+++ /dev/null
@@ -1,31 +0,0 @@
--- =============================================================================
--- 澶栭摼鐭爜鏀归�狅紙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;
diff --git a/sql/service_subtask_index_opt.sql b/sql/service_subtask_index_opt.sql
deleted file mode 100644
index c175747..0000000
--- a/sql/service_subtask_index_opt.sql
+++ /dev/null
@@ -1,146 +0,0 @@
--- =====================================================================
--- service_subtask 绱㈠紩浼樺寲鑴氭湰
--- 鐩爣鎺ュ彛锛歅OST /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 鑱氬悎锛圧edis 鏈懡涓椂鎵ц锛�
---
--- 鍏煎鎬э細MySQL 5.7 / 8.0 鍧囧彲鎵ц銆�
--- * 5.7 涓嶆敮鎸侀檷搴忕储寮曪紝浣� ASC 绱㈠紩鍙鍙嶅悜鎵弿锛宱rder 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 = ?锛圕ontroller 寮哄埗娉ㄥ叆锛�
--- 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. 寤鸿锛歝reate_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. 寤鸿锛氫换鍔$粍婊氬姩璋冨害锛坈ountActiveByScheduleIdAndLoop锛岃窇寰楅潪甯稿嫟锛�
--- ---------------------------------------------------------------------
-ALTER TABLE service_subtask
- ADD INDEX idx_ss_sched_loop (schedule_id, loop_count),
- ALGORITHM = INPLACE, LOCK = NONE;
-
--- ---------------------------------------------------------------------
--- 8. 鍙�夛細璁� countByCondition 鍙樻垚瑕嗙洊绱㈠紩锛堢储寮曞唴瀹屾垚鑱氬悎锛屼笉鍥炶〃锛�
--- 鍙湁褰� Redis 鍛戒腑鐜囦綆銆佺粺璁℃帴鍙d粛鐒舵參鏃舵墠鍔犮��
--- 浠d环锛歴ervice_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;
-
--- =====================================================================
--- 楠岃瘉锛圡ySQL 5.7 鍙敤锛�
--- =====================================================================
-
--- 9.1 鍒楄〃涓绘煡璇細鏈熸湜 key = idx_ss_org_cam_del_endtime锛孍xtra 閲屻�愭病鏈夈�慤sing 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;
diff --git a/sql/sltdMydTotalByDimension_index_20260924.sql b/sql/sltdMydTotalByDimension_index_20260924.sql
deleted file mode 100644
index 3db4741..0000000
--- a/sql/sltdMydTotalByDimension_index_20260924.sql
+++ /dev/null
@@ -1,139 +0,0 @@
--- ============================================================================
--- smartor_sltd 鏁版嵁搴� 婊℃剰搴︾淮搴︾粺璁℃帴鍙f�ц兘浼樺寲 鈥斺�� 绱㈠紩鑴氭湰
--- 鐢熸垚鏃ユ湡: 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锛宻ervice_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 鍐呰〃
--- 鍙嶅鍏ㄨ〃鎵弿锛岃繖鏄帴鍙f參鐨勬牴鏈師鍥狅紱涓や釜娲剧敓琛ㄤ篃鍚勮嚜鍏ㄨ〃鎵弿涓�娆°��
--- ============================================================================
-
--- ----------------------------------------------------------------------------
--- 銆愭墽琛屽墠妫�鏌ャ�戠‘璁ゅ綋鍓嶇‘瀹炴病鏈夎繖浜涚储寮曪紙姝e父搴斿彧鐪嬪埌 PRIMARY锛�
--- ----------------------------------------------------------------------------
--- SHOW INDEX FROM service_subtask_detail;
--- SHOW INDEX FROM service_task;
--- SELECT COUNT(*) FROM service_subtask_detail; -- 绾� 10 涓囪锛屽姞绱㈠紩绾﹂渶 10~60 绉�
-
-
--- ----------------------------------------------------------------------------
--- 銆愭楠� 1銆憇ervice_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 < ?
--- 鏁堟灉锛歝reate_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
--- 鏁堟灉锛氱储寮曡鐩栬瀛愭煡璇紝鍙蛋鏉炬暎绱㈠紩鎵弿锛圲sing 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銆憇ervice_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'
--- 鏁堟灉锛歴ervice_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 閮芥槸绛夊�煎垪锛屾敼鎴愪笅闈㈣繖鏍锋墠绠楃湡姝g敓鏁堬細
---
--- 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銆佹棤绌轰覆锛夛紝鏀规垚瀛楃涓叉瘮杈冧笉浼氭敼鍙樹笟鍔$粨鏋溿��
---
--- 鍙︼細鏈帴鍙d袱鏉� SQL 鐨� LEFT JOIN service_task t 鍚庨潰娌℃湁璺熶换浣曞叧鑱旀潯浠�
--- 锛圤N 閲屽彧鏈� t 鑷繁鐨勮繃婊ゆ潯浠讹級锛岀瓑浠蜂簬鍏堝 service_task 鍋氫竴娆¤繃婊ゅ啀浜ゅ弶
--- 杩炴帴锛屾湰韬啓娉曚笉瑙勮寖锛涙湰娆″彧鍔犵储寮曘�佷笉鍔� SQL锛岄伩鍏嶅奖鍝嶈繑鍥炵粨鏋勩��
--- ============================================================================
diff --git a/sql/sync_svy_lib_default_value_to_task_20261106.sql b/sql/sync_svy_lib_default_value_to_task_20261106.sql
deleted file mode 100644
index e5e727d..0000000
--- a/sql/sync_svy_lib_default_value_to_task_20261106.sql
+++ /dev/null
@@ -1,282 +0,0 @@
--- ============================================================================
--- 鎶娿�岄棶鍗峰簱妯℃澘銆嶉鐩殑閫夐」榛樿鍊硷紙svy_lib_template_targetoption.default_value锛�
--- 鍚屾鍒般�岄棶鍗蜂换鍔℃ā鏉裤�嶉鐩�夐」锛坰vy_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锛宻martor_nhfy锛夛細
--- 浠诲姟妯℃澘 710 涓紝鑳芥槧灏勫埌搴撴ā鏉跨殑 663 涓紙鍙﹀ 47 涓ā鏉� / 879 涓�夐」娌℃湁搴撴潵婧愶紝
--- 鏈剼鏈笉浼氬姩瀹冧滑锛岄渶瑕佷汉宸ュ鐞嗭級锛�
--- 浠诲姟棰樼洰 6409 閬擄紝鎸夐闈㈣兘瀵逛笂搴撻鐩� 6353 閬擄紙99.1%锛夛紱
--- 浠诲姟閫夐」 16405 涓紝鑳藉涓婂簱閫夐」 16369 涓紙99.8%锛夈��
---
--- 涓変釜鏂规锛屾寜闇�瑕佸彧璺戝叾涓竴涓細
--- 鏂规A锛堟帹鑽愶級锛氬彧鎶� lib 閲屾爣浜嗛粯璁�(=2)鐨勯�夐」鎺ㄥ埌 task锛屼笉鍔� task 宸叉湁鐨勫叾瀹冨��
--- 鈫� 瀹炴祴褰卞搷 34 琛�
--- 鏂规B锛堝畬鍏ㄥ榻愶級锛歭ib=2 鈫� 2锛宭ib=1/NULL 鈫� 1锛堜笉鍐� NULL锛�
--- 鈫� 瀹炴祴褰卞搷 86 琛岋紙棰濆 52 琛屾槸鎶� task 閲屾湁銆乴ib 閲屾病鏈夌殑榛樿鍘绘帀锛�
--- 鏂规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 姹囨�伙紙鎸夋柟妗圓/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 涓ユ牸闀滃儚(鍚玁ULL)',
- 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锛岄伩鍏嶈鍒犱换鍔′晶鍗曠嫭閰嶈繃鐨勯粯璁ら」
--- 锛圡ySQL 澶氳〃 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锛宭ib=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 浠嶄笌搴撲笉涓�鑷寸殑琛屾暟锛堟柟妗圓 涔嬪悗搴斾负 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 姣忛銆岄粯璁ら�夐」鐨勪釜鏁般�嶅垎甯冿細姝e父搴旀渶澶� 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;
diff --git a/sql/tracedeallist_index_optimize.sql b/sql/tracedeallist_index_optimize.sql
deleted file mode 100644
index f4fbcdf..0000000
--- a/sql/tracedeallist_index_optimize.sql
+++ /dev/null
@@ -1,68 +0,0 @@
--- ============================================================================
--- /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锛宱rgid 鐢� @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);
-
--- 鈶� 鍙�夛細鏈�鏂板鐞嗕汉閭f潯 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锛宬ey 鍒楀簲璇ュ懡涓垰寤虹殑绱㈠紩锛�
--- ----------------------------------------------------------------------------
--- 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;
diff --git a/sql/v_sf_statistics_ward.sql b/sql/v_sf_statistics_ward.sql
deleted file mode 100644
index 0a5de9c..0000000
--- a/sql/v_sf_statistics_ward.sql
+++ /dev/null
@@ -1,603 +0,0 @@
--- =============================================================================
--- /smartor/serviceSubtask/getSfStatistics 鐨� SQL 鐗堬紙鐥呭尯缁村害 路 鍏ㄩ儴鐥呭尯 路 鍑洪櫌闅忚 serviceType=2锛�
--- =============================================================================
--- 瀵瑰簲浠g爜锛�
--- ServiceSubtaskController#getSfStatistics
--- 鈫� ServiceSubtaskServiceImpl#getSfStatistics 锛堝垎缁� + 閫愭潯绱姞锛�
--- 鈫� ServiceSubtaskMapper.getSfStatistics / getSfStatisticsGroupKey
--- 鈫� ServiceSubtaskMapper.selectTimelyRateBatch 锛堝強鏃剁巼 rate锛�
--- 鏁版嵁婧愶細service_subtask锛堟湰鎺ュ彛鍙煡杩欎竴寮犺〃锛�
---
--- 鍏ュ弬锛氬彧鏈� hospitalStartTime锛堝嚭闄㈡椂闂翠笅闄愶級銆�
--- 鍒嗙粍锛歴tatisticaltype=1锛堢梾鍖猴級锛屼笖涓嶄紶 leavehospitaldistrictcodes 鈫� 鍏ㄩ儴鐥呭尯銆�
--- 鏈嶅姟绫诲瀷锛歴erviceType = 2锛堝嚭闄㈤殢璁匡級銆�
--- 璇存槑锛氭帴鍙� Mapper 閲屽嚭闄㈡椂闂存潯浠舵槸銆宧ospitalStartTime 涓� hospitalEndTime 閮戒紶鎵嶇敓鏁堛�嶏紝
--- 鍙紶 hospitalStartTime 鏃舵帴鍙e叾瀹炪�愬畬鍏ㄤ笉杩囨护鍑洪櫌鏃堕棿銆戙�備笅闈㈡寜浣犺鐨勮涔夊疄鐜帮細
--- 鍑洪櫌鏃堕棿 >= hospitalStartTime锛堜笂闄愬彲閫夛級銆�
---
--- 宸插湪 MySQL 5.7.34锛坰martor_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; -- 鍙�夛細鍑洪櫌鏃堕棿涓婇檺锛孨ULL = 涓嶉檺
-SET @followUpCountStyle = '1'; -- 绯荤粺閰嶇疆 followUpCountStyle锛涙湰搴撴湭閰嶇疆璇ュ弬鏁帮紝鎺ュ彛鎸� '1' 澶勭悊
-SET @orgid = NULL; -- 鍙�夛細鏈烘瀯锛汵ULL = 涓嶉檺锛堟帴鍙i噷鐢辩櫥褰曚俊鎭敞鍏ワ級
-SET @campusid = NULL; -- 鍙�夛細闄㈠尯锛汵ULL = 涓嶉檺
-
-
--- -----------------------------------------------------------------------------
--- PART 1. 涓绘煡璇細涓�琛� = 涓�涓嚭闄㈢梾鍖猴紝瑕嗙洊鍏ㄩ儴鐥呭尯
--- 路 鍐呭眰 r 锛氫竴琛� = 涓�鏉¢殢璁垮瓙浠诲姟锛屾妸銆岀粺璁″彛寰勩�嶇炕璇戞垚 0/1 鏍囪
--- 路 涓棿 t 锛氭寜鐥呭尯鎶婃爣璁扮疮鍔�
--- 路 鏈�澶栧眰 锛氭妸绱姞鍊肩畻鎴愭帴鍙h繑鍥炵殑姣旂巼瀛楃涓�
--- 鎯虫敼缁熻缁村害锛氭妸 GROUP BY r.ward_code 鎹㈡垚 r.dept_code锛堢瀹わ級鎴� r.dr_code锛堝尰鐢燂級鍗冲彲銆�
--- 鎯宠鎬昏琛岋細鎶娿�孏ROUP BY r.ward_code銆嶆敼鎴愩�孏ROUP 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, -- 杩囨护鎮h�呮暟閲�
- t.followUpNeeded, -- 搴旈殢璁夸汉娆�
- t.needFollowUp, -- 棣栨搴旈殢璁�
- t.nonFollowUpFirst, -- 棣栨鏃犻渶闅忚
- t.pendingFollowUp, -- 棣栨寰呴殢璁匡紙鏈帴鍙f璺緞鎭掍负 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, -- 闅忚鎯呭喌锛氶殢璁跨數璇濅笉姝g‘
- 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' 鏃舵帴鍙f妸銆岄娆℃棤闇�闅忚銆嶅姞浜嗕袱娆★紙浠g爜 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 鐨勮褰曪細浜屾闅忚璁板綍涓嶈繘鍏ヤ换浣曚竴鍒�
--- 路 鍒楋細鍑洪櫌浜烘 / 搴旈殢璁挎媶瑙� / 闅忚鎴愬姛鎷嗚В / 鍚勬垚鍔熺巼 / 鍙婃椂鐜� / 鍑洪櫌鏃堕棿鑼冨洿
--- 路 鍙e緞涓� getStatisticFirst 瀵归綈锛歱endingFollowUp 鏄� sendstate = 2 鐨勭湡瀹炴暟閲�
---
--- 鈽� 瀵硅处锛氭帴鍙h繖鍑犲垪鏈韩涓嶇瓑浜庛�屽簲闅忚銆嶏紝宸鏄袱涓湡瀹炲瓨鍦ㄧ殑鍙e緞缂洪」锛屼笉鏄暟鎹敊锛�
--- 棣栨搴旈殢璁� = 寰呭彂閫�(1) + 寰呴殢璁�(2) + 宸插彂閫佹湭瀹屾垚(3) + 鍏跺畠鐘舵�� + 闅忚鎴愬姛(6) + 闅忚澶辫触(5,7)
--- 棣栨闅忚鎴愬姛 = 浜哄伐鎴愬姛 + 璇煶鎴愬姛 + 鐭俊鎴愬姛 + 寰俊鎴愬姛 + 鏃犳柟寮忔垚鍔�(sendstate=6 浣� current_preachform 涓虹┖)
--- 鎺ュ彛鍙粺璁� 2 / 6 / 5+7锛屾墍浠ャ�屽緟闅忚 + 鎴愬姛 + 澶辫触銆嶅皯浜庡簲闅忚锛�
--- 娓犻亾鎴愬姛鎸� current_preachform 鍒嗭紝娌℃湁鏂瑰紡鐨勬垚鍔熻褰曚笉钀戒换浣曟笭閬撱��
--- 涓嬮潰鎶� notSent / sentNotDone / otherStatus / noChannelSuccess 鏄惧紡鍒楀嚭鏉ワ紝骞剁粰鍑� diffNeed / diffSucc
--- 涓や釜鑷鍒楋紙姝e父鎭掍负 0锛夈��
---
--- 鈽� 鍑洪櫌鏃堕棿锛氫富鏌ヨ缁� endTimeMin/endTimeMax锛屽強鏃剁巼鍙e緞缁� timelyEndMin/timelyEndMax銆�
--- 鈿� 鍙婃椂鐜囧瓙鏌ヨ閲岀殑鍑洪櫌鏃堕棿鏉′欢褰撳墠鏄敞閲婃帀鐨勶紙鎸変綘鐨勭増鏈級锛屾墍浠ュ畠缁熻鐨勬槸璇ョ梾鍖恒�屽叏閮ㄥ巻鍙层�嶏紝
--- 鍒嗘瘝 timelyBase 浼氳繙澶т簬搴旈殢璁匡紙瀹炴祴鏌愮梾鍖� 643 鏉″簲闅忚 vs 2342 鏉″強鏃剁巼鍒嗘瘝锛夛紝
--- timelyRate 涓庡叾瀹冨垪涓嶅啀鍚屽尯闂淬�佷笉鍙洿鎺ユ瘮杈冦�傝鎭㈠鍚屽尯闂村氨鎶婇偅涓よ鏀惧紑銆�
---
--- 涓绘煡璇㈠凡瀹炶窇鏍¢獙锛�2026-09-04 ~ 2026-11-03锛宱rgid=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, -- 宸插彂閫佹湭瀹屾垚锛坰endstate = 3锛�
- t.otherStatus, -- 鍏跺畠鐘舵�佸厹搴曪紙姝e父涓� 0锛�
- t.followUpSuccess, -- 棣栨闅忚鎴愬姛锛坰endstate = 6锛�
- t.followUpFail, -- 棣栨闅忚澶辫触锛坰endstate = 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,
- -- 鍙婃椂鐜囷細鍙e緞涓庢帴鍙� selectTimelyRateBatch 鐩稿悓锛堢嫭绔嬬殑闅忚鏃堕棿绐楀彛 + 鎺掗櫎銆屾棤闇�闅忚銆嶏級锛�
- -- 鍙婃椂 = finishtime 涓嶄负绌� 涓� DATEDIFF(finishtime, endtime) <= 鍙婃椂澶╂暟 + 琛ュ伩澶╂暟銆�
- -- 鍙婃椂澶╂暟闃堝�艰涓嬮潰 rt 瀛愭煡璇㈤噷鐨� 7锛屾寜闇�淇敼锛堟帴鍙d笉浼� rateDay 鏃惰繑鍥� 0锛夈��
- IFNULL(rt.timely_base, 0) AS timelyBase, -- 鍙婃椂鐜囧垎姣嶏紙鍙e緞涓庛�屽簲闅忚銆嶄笉鍚岋級
- 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, -- 鍙婃椂鐜囧彛寰勫懡涓殑鏈�鏅氬嚭闄㈡椂闂�
- -- 鑷锛氫袱涓樊棰濓紝姝e父鎭掍负 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, -- 杩欎竴鍙e緞瀹為檯瑕嗙洊鍒扮殑鍑洪櫌鏃堕棿鑼冨洿
- MAX(ss.endtime) AS timelyEndMax
- FROM service_subtask ss
- LEFT JOIN (
- -- 琛ュ伩鏃堕棿锛歷archar 涓斿彲鑳芥槸绌轰覆锛屽厛鎸夊瓙浠诲姟鑱氬悎鎴愪竴琛�
- 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銆乨iffSucc 鍏� 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 鎮h��,
- 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锛堟帴鍙e彧鍦ㄨ姹傞噷浼犱簡 rateDay 鏃舵墠鏈夊�硷紝涓嶄紶杩斿洖 0.0锛�
--- 鍙e緞涓庢帴鍙d笉鍚岋細杩欎竴鍧楃敤鐨勬槸銆岄殢璁挎椂闂�(visit_time)銆嶇獥鍙o紝鍒嗘瘝鏄� 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) -- 绛変环浜庢帴鍙g殑 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. 鎯冲浐瀹氭垚銆岃鍥俱�嶇殑璇濈敤杩欎釜锛圡ySQL 鐨勮鍥句笉鏀寔浼犲叆鍙傛暟锛�
--- 鎵�浠ヨ鍥炬寜銆屼竴鏉″瓙浠诲姟涓�琛屻�嶈惤鏄庣粏 + 鍑洪櫌鏃ユ湡锛屽弬鏁拌繃婊ゆ斁鍦ㄦ煡璇㈠灞傦級
--- 娉ㄦ剰锛氳鍥鹃噷鎶� 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, -- 鍑洪櫌鏃ユ湡锛坔ospitalStartTime 杩囨护鐢級
- 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. 鍙e緞璇存槑 / 涓庢帴鍙g殑宸紓
--- -----------------------------------------------------------------------------
--- 1) 鎺ュ彛杩斿洖閲屾亽涓� 0銆佹湰娆℃湭杈撳嚭鐨勫瓧娈碉紙浠g爜杩欐潯璺緞娌¤祴鍊硷級锛�
--- serviceCount銆乥zxCount銆亂sfCount銆亂fsCount銆乨fsCount銆乫ssbCount銆亂wcCount銆�
--- dxfscs銆乨xsfwccs銆乨hfscs銆乨hsfwccs銆亂czs銆乭fycs銆乫inishRate銆乯oyCount銆乯oyAllCount銆乯oyTotal銆�
--- pendingFollowUp锛堥娆″緟闅忚锛夊悓鐞嗭細getStatistic 鐨勨�滀笉鍒嗘鏁扳�濆垎鏀噷娌℃湁绱姞锛屾亽涓� 0銆�
--- 2) nonFollowUpFirst 鍦� followUpCountStyle='1' 鏃舵帴鍙d細閲嶅绱姞涓�娆★紙涓や釜 if 閮藉懡涓� sendstate=4锛夛紝
--- SQL 鐢� *2 澶嶅埢銆傝嫢鎸夆�滀竴鏉¤褰曠畻涓�娆♀�濆簲涓� 1 鍊嶏紝鎶� IF(@followUpCountStyle='1',2,1) 鏀规垚 1銆�
--- 3) 姣旂巼鏍煎紡锛氭帴鍙g敤 DecimalFormat("##.##%")锛堝洓鑸嶅叚鍏ャ�佹湯灏� 0 鐪佺暐锛屽 85.5%锛夛紝
--- SQL 鐢� ROUND(...,2)锛堝洓鑸嶄簲鍏ャ�佸浐瀹氫袱浣嶏紝濡� 85.50%锛夛紱鍒嗘瘝涓� 0 鏃舵帴鍙g粰 "0.00%"銆�
--- 4) deptcode/deptname/drcode/drname锛氭帴鍙e彇銆屽垎缁勫唴绗竴鏉¤褰曘�嶇殑鍊硷紙HashMap 椤哄簭锛屾棤涓氬姟鍚箟锛夛紝
--- SQL 鐢� MAX() 浠f浛锛涙寜鐥呭尯缁熻鏃惰繖鍥涘垪鍙綔鍙傝�冦��
--- 5) 闅忚鎯呭喌 taskSituation1~6锛歵ask_situation = 1~5 鍒嗗埆瀵瑰簲 1~5锛屽叾浠�(=7) 瀵瑰簲 6銆�
--- 鏈簱 service_subtask.task_situation 鍏ㄤ负 NULL锛屾墍浠ヨ繖鍑犲垪鐩墠蹇呯劧閮芥槸 0銆�
--- 6) 鍙湅棣栨/鍐嶆锛氭帴鍙d紶 visitCount=1 鍙湅棣栨銆�>1 鍙湅鍐嶆锛涙湰 SQL 涓ょ被鍚屾椂缁欙紝鍧囦负 0 璇存槑璇ョ獥鍙f病鏈夊搴旀暟鎹��
--- 7) 鎹㈢淮搴︼細GROUP BY r.ward_code锛堢梾鍖猴紝鏈� SQL锛夆啋 r.dept_code锛堢瀹わ級/ r.dr_code锛堝尰鐢燂級銆�
--- 缁熻鏂瑰紡銆佸強鏃剁巼澶╂暟閮介�氳繃 PART 0 鐨勫彉閲忔帶鍒讹紝涓嶉渶瑕佹敼缁撴瀯銆�
--- =============================================================================
diff --git "a/sql/\344\273\273\345\212\241\345\274\200\345\205\263_sys_config.sql" "b/sql/\344\273\273\345\212\241\345\274\200\345\205\263_sys_config.sql"
deleted file mode 100644
index 821fc4e..0000000
--- "a/sql/\344\273\273\345\212\241\345\274\200\345\205\263_sys_config.sql"
+++ /dev/null
@@ -1,40 +0,0 @@
--- ----------------------------
--- 浠诲姟妯″潡寮�鍏筹紙sys_config 鍙傛暟閰嶇疆琛級
--- ----------------------------
--- 閿悕锛歵ask.enabled
--- 閿�硷細true = 鍚敤锛堥粯璁わ紝绛変环浜庝笉閰嶇疆杩欎竴琛岋級
--- false = 鍏抽棴
---
--- 鍏抽棴鍚庣殑琛屼负锛�
--- 1) 鏈ā鍧� 59 涓换鍔$鐐癸紙/smartor/servicetask/** 11 涓� +
--- /smartor/serviceSubtask/** 48 涓級浼氳 TaskAvailabilityInterceptor 鎷︿笅锛�
--- 杩斿洖鏄庣‘涓氬姟閿欒銆屼换鍔″姛鑳芥湭鍚敤锛堝弬鏁伴厤缃� task.enabled=false锛夛紝璇ユ帴鍙d笉鍙敤銆嶏紝
--- 鑰屼笉鏄� 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绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue''
- 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';
diff --git "a/sql/\344\277\256\345\244\215_nhfy_\346\273\241\346\204\217\345\272\246\346\230\216\347\273\206\350\242\253\351\200\273\350\276\221\345\210\240\351\231\244_20261021.sql" "b/sql/\344\277\256\345\244\215_nhfy_\346\273\241\346\204\217\345\272\246\346\230\216\347\273\206\350\242\253\351\200\273\350\276\221\345\210\240\351\231\244_20261021.sql"
deleted file mode 100644
index fe70841..0000000
--- "a/sql/\344\277\256\345\244\215_nhfy_\346\273\241\346\204\217\345\272\246\346\230\216\347\273\206\350\242\253\351\200\273\350\276\221\345\210\240\351\231\244_20261021.sql"
+++ /dev/null
@@ -1,128 +0,0 @@
--- ============================================================================
--- 鍗楀崕闄勪竴锛坣hfy锛夛細婊℃剰搴﹀鍑恒�岄棶棰樿鎯呭崰姣斻�嶆瘮銆屾偅鑰呴殢璁夸俊鎭〃鍗曘�嶅皯 10 浜猴紙370 vs 380锛�
--- 2026-10-21 鎺掓煡
---
--- 銆愮幇璞°�戝鍑� patItemExport锛坰heet1=鎮h�呴殢璁夸俊鎭〃鍗� 380 琛岋紝sheet2=闂璇︽儏鍗犳瘮锛�
--- sheet2 閲� 19 閬撻鐨勨�滄暟閲忓悎璁♀�濋兘鍙湁 370锛屾瘮 sheet1 灏� 10銆�
---
--- 銆愭牴鍥狅紙宸插湪搴撲笂鏍稿疄锛夈��
--- 鏈壒 380 涓瓙浠诲姟閲岋紝鏈� 10 涓瓙浠诲姟鐨�**鍏ㄩ儴浣滅瓟鏄庣粏琚�昏緫鍒犻櫎**锛坰ervice_subtask_detail.del_flag='1'锛夛紝
--- 鑰� sheet2 鐨� SQL锛圫atisfactionMapper.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锛宒eptcode=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 涓瓙浠诲姟锛宒eptcode=40003511锛宼askid=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锛宭ive_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銆戞柟妗圓锛堟帹鑽愶級锛氭瘡閬撻鍙仮澶嶁�滄渶鏂颁竴浠解�濆壇鏈紝鍏朵綑鍓湰缁х画淇濈暀 del_flag=1
--- 褰卞搷琛屾暟锛�190锛�= 19 棰� 脳 10 浜猴級锛屽凡 dry-run 鏍稿疄
--- 鈿狅笍 鍓嶆彁锛氳繖浜涚瓟妗堢‘瀹炴槸鎮h�呯殑鐪熷疄浣滅瓟锛堝凡鏍稿锛氭瘡浠藉壇鏈瓟妗堝畬鍏ㄤ竴鑷达紝涓嶆槸鑴忔暟鎹級
--- ----------------------------------------------------------------------------
--- 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銆戞柟妗圔锛堝鏋滆繖鍑犱唤闂嵎鍏跺疄涓嶈绠椻�滃凡瀹屾垚鈥濓級锛氭妸瀛愪换鍔℃敼鎴愨�滄棤闇�闅忚/涓嶆墽琛屸�濓紝
--- 杩欐牱瀹冧滑涓嶄細鍐嶈繘鈥滃凡瀹屾垚鈥濆彛寰勶紝琛ㄥ崟鍜屽崰姣旈兘浼氭槸 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 涓嶅湪閰嶇疆閲� 鈫� 璇存槑绾夸笂鍖呯増鏈笉鍚岋紝鎴栬繕鏈夊彟涓�澶勫垹闄ゅ叆鍙c��
--- 寤鸿锛氬湪 service_subtask_detail 鐨� update/delete 鍏ュ彛鍔犳棩蹇楋紙sub_id + 鎿嶄綔浜� + 鏃堕棿锛夛紝
--- 鎴栧绾夸笂 jar 鐩存帴鍙嶆煡 updateServiceSubtaskDetail 鐨勮皟鐢ㄧ偣銆�
--- 2) 鏀规垚鈥滃厛鍐欐垚鍔熴�佸啀鍒犳棫鈥濓紝涓嶈鈥滃厛鍒犲悗鍐欌�濓細
--- 鐜板湪 isExistServiceSubtaskDetail 鍙煡 del_flag=0锛屽垹闄ゅ悗蹇呯劧鍐� insert锛�
--- 鎵�浠ヤ竴娆″紓甯镐腑鏂氨浼氱暀涓嬧�滃叏鍒犳棤鏂扳�濈殑绌虹瓟鍗凤紙鏈棶棰橈級銆�
--- 寤鸿缁� (sub_id, scriptid) 鍔犲敮涓�绾︽潫鎴栨敼鎴愮墿鐞嗚鐩栨洿鏂般��
--- 3) 瀵煎嚭渚у厹搴曪紙鍙e緞鍙嚜瑙i噴锛夛細
--- 鈥滈棶棰樿鎯呭崰姣斺�漇heet 澧炲姞涓�琛屻�屾湭浣滅瓟銆嶏紱鎴栧湪銆屾偅鑰呴殢璁夸俊鎭〃鍗曘�嶅姞涓�鍒椼�屾槸鍚﹀凡浣滅瓟銆嶏紝
--- 杩欐牱 380 vs 370 褰撳満灏辫兘瀵逛笂锛屼笉鐢ㄥ啀缈诲簱銆�
--- ============================================================================
diff --git "a/sql/\345\207\272\345\205\245\351\231\242\351\232\217\350\256\277\345\274\200\345\205\263_sys_config.sql" "b/sql/\345\207\272\345\205\245\351\231\242\351\232\217\350\256\277\345\274\200\345\205\263_sys_config.sql"
deleted file mode 100644
index 15a9c23..0000000
--- "a/sql/\345\207\272\345\205\245\351\231\242\351\232\217\350\256\277\345\274\200\345\205\263_sys_config.sql"
+++ /dev/null
@@ -1,114 +0,0 @@
--- ----------------------------
--- 鍑哄叆闄㈤殢璁挎ā鍧� + 瀹f暀妯″潡 寮�鍏筹紙sys_config 鍙傛暟閰嶇疆琛級
--- ----------------------------
--- 鏈剼鏈竴娆″缓涓や釜閿紝閮藉彲閲嶅鎵ц锛堝箓绛夛級锛�
---
--- 閿悕锛歩nhospvisit.enabled
--- 閿�硷細true = 鍚敤锛堥粯璁わ紝绛変环浜庝笉閰嶇疆杩欎竴琛岋級
--- false = 鍏抽棴
---
--- 閿悕锛歱ublicity.enabled
--- 閿�硷細true = 鍚敤锛堥粯璁わ級
--- false = 鍏抽棴锛堝叆闄㈠鏁欎笌鑽搧瀹f暀閮戒笉鍐嶆墽琛岋級
---
--- 鍏抽棴 inhospvisit 鍚庣殑琛屼负锛�
--- 1) 銆怘TTP 闈€�憑@code /smartor/patinhosp} 鍓嶇紑涓嬬殑绔偣**鍏ㄩ儴**琚�
--- InhospVisitAvailabilityInterceptor 鎷︿笅锛岃繑鍥炴槑纭笟鍔¢敊璇�
--- 銆屽嚭鍏ラ櫌闅忚鍔熻兘鏈惎鐢紙鍙傛暟閰嶇疆 inhospvisit.enabled=false锛夛紝璇ユ帴鍙d笉鍙敤銆嶈�屼笉鏄� 404銆�
--- 鍙楃鐨勬槸**鍓嶇紑閫氶厤** /smartor/patinhosp/**锛堜笉鍐嶉�愪釜鏋氫妇璺緞锛夛紝
--- 褰撳墠瀹炴祴瑕嗙洊 15 涓鐐癸紙3 闅忚瑙﹀彂 + 9 鍩虹鏌ヨ/CRUD + 3 澶嶅悎绔偣锛夈��
--- 鉁� **浠ュ悗鍐嶅線鏈ā鍧楀姞鎺ュ彛锛岃嚜鍔ㄥ彈绠★紝涓嶉渶瑕佹敼杩欎釜閰嶇疆銆佷篃涓嶇敤鏀� WebConfig**
--- 鈥斺�� 鍙鏂版帶鍒跺櫒浠嶆寕鍦� /smartor/patinhosp 鍓嶇紑涓嬨��
--- 鈿狅笍 鍙e緞鍙樻洿鍙诧細鍘熻璁″彧鎷� 2 涓殢璁胯Е鍙戠鐐癸紝鍩虹鏌ヨ鍒绘剰涓嶆嫤
--- 锛堢悊鐢憋細"鍏抽殢璁夸笉璇ヨ鍑哄叆闄㈣褰曟煡涓嶅埌"锛夈�傜敤鎴峰疄鏈哄彂鐜�
--- POST /smartor/patinhosp/selectPatMedInhospList 鍦ㄥ紑鍏冲叧闂悗浠嶈兘鏌ュ埌锛�
--- 鍐冲畾鏀逛负"鍏冲氨鏁翠釜妯″潡鐨� HTTP 闈笉鍙敤"銆�
--- 瑕嗙洊鎬х敱 sql/_probe/verify_inhospvisit_switch.py 浠庢帶鍒跺櫒婧愮爜**瀹炴祴**鏍稿
--- 锛堟柊鎺у埗鍣ㄨ嫢鎸傞敊鍓嶇紑浼氳瀹� FAIL 鍑烘潵锛夈��
--- 2) 鈿狅笍 **鍙嫤 HTTP锛屼笉鍔ㄨ法妯″潡鏁版嵁濂戠害**锛欼nhospVisitDataService锛圚IS 閲囬泦銆佹。妗堟眹鑱氥��
--- 缁熻绛夋ā鍧楀唴閮�/璺ㄦā鍧楄闂級**鐓у父鍙敤**銆傜悊鐢憋細閭f槸鏁版嵁鍚屾閾捐矾锛�
--- 鍏虫帀闅忚涓嶈璁� HIS 鍐欎笉杩涘嚭鍏ラ櫌璁板綍锛堟暟鎹柇娴佹瘮"椤甸潰鐪嬩笉鍒�"涓ラ噸寰楀锛夈��
--- 鎵�浠�"鏁翠釜妯″潡涓嶅彲鐢�"鐨勫噯纭惈涔夋槸銆岃妯″潡鐨� HTTP 闈笉鍙敤銆嶃��
--- 3) 鈿狅笍 **瀹氭椂浠诲姟涔熷彈姝ゅ紑鍏虫帶鍒�**锛�2025 淇锛屼笌鍘熷厛鐨�"宸叉媿鏉匡細涓嶅彈鎺�"鐩稿弽 鈥斺�� 瑙佷笅锛夈��
--- RyTask 鐨� 5 涓叆鍙e凡鍏ㄩ儴鎺ュ紑鍏筹細dealOutHospInfo / dealOutHospInfoBySchedule /
--- dealTaskGroupOutHosp / rollTaskGroupCycle 璧伴棬闈紝dealSubtaskDeadline 璧板叆鍙e畧鍗��
--- 鍏抽棴鍚庢ā鍧楀疄鐜版墦 WARN銆屾ā鍧楁湭鍚敤鈥﹁烦杩囥�嶅苟杩斿洖 0锛屽綋澶╀笉鍐嶇敓鎴愰殢璁裤��
---
--- 鈿狅笍鈿狅笍 杩欐潯**鎺ㄧ炕浜嗗師璁捐**锛屽繀椤荤煡閬撻闄╁彉浜嗭細
--- 鍘熻璁$殑鐞嗙敱鏄�"鍏虫帀瀹氭椂浠诲姟 = 褰撳ぉ鍏ㄩ櫌闅忚鍋滄憜锛岃�屽紑鍏虫槸鐑鐨勶紝
--- 涓�娆¤鎿嶄綔娌℃湁浠讳綍鍙嶉娓犻亾"銆傜幇鍦ㄥ畠纭疄浼氬仠鎺夊畾鏃朵换鍔★紝鎵�浠ワ細
--- 路 璇搷浣滀唬浠� = 褰撳ぉ鍏ㄩ櫌闅忚涓嶇敓鎴愶紙涓庡師璁捐鎷呭績鐨勪竴鑷达級锛�
--- 路 浣嗗弽棣堟笭閬�**鍙樺ソ浜�** 鈥斺�� 鍏抽棴鏃舵棩蹇楅噷浼氭槑纭墦鍑�
--- 銆屻�愬嚭鍏ラ櫌闅忚銆戞ā鍧楁湭鍚敤锛堝弬鏁伴厤缃� inhospvisit.enabled=false锛夛紝鈥� 璺宠繃銆嶏紝
--- 鑰屼笉鏄儚鍘熸潵閭f牱"鍏充簡寮�鍏冲嵈姣棤鏁堟灉銆佷篃娌′换浣曟彁绀�"锛�
--- 路 寮�鍏冲湪銆岀郴缁熺鐞� 鈫� 鍙傛暟璁剧疆銆嶉噷鍙鍙敼锛屾瘮鍘汇�屽畾鏃朵换鍔°�嶉噷鎵� sys_job 鏇寸洿瑙傘��
--- 瑕佹殏鍋滃畾鏃朵换鍔′粛鐒跺彲浠ュ幓銆岀郴缁熺鐞� 鈫� 瀹氭椂浠诲姟銆嶆殏鍋� sys_job锛堜袱鏉¤矾閮芥湁鏁堬級锛�
--- ryTask.dealOutHospInfo / ryTask.dealOutHospInfoBySchedule / ryTask.dealTaskGroupOutHosp
--- **鏈紑鍏宠鐩栫殑瀹氭椂浠诲姟鍏ュ彛宸插叏瑕嗙洊**锛�5 涓級锛�
--- dealOutHospInfo / dealOutHospInfoBySchedule / dealTaskGroupOutHosp /
--- rollTaskGroupCycle / dealSubtaskDeadline
--- 鍏朵腑 rollTaskGroupCycle 璧伴棬闈紙瀹屾垚浜嗘ā鍧楀寲鏂规閲屼竴鐩存病鍋氱殑"绗� 10 姝�"鍒囨崲锛夛紝
--- dealSubtaskDeadline 鍥犳ā鍧椾晶鏃犲畬鏁村叆鍙h�岄噰鐢�"鍏ュ彛鑷甫瀹堝崼"銆�
--- 鍙︼細鎵嬫湳闅忚锛坉ealOperationInfo锛変笌闂ㄨ瘖闅忚锛堥棬璇婄敓鎴愶級鍚勮嚜鍙�
--- othervisit.enabled / outpatientvisit.enabled 绠¤緰锛屼笉鍙楁湰寮�鍏崇锛堣繖鏄埢鎰忕殑锛夈��
--- 4) 鏀瑰畬绔嬪嵆鐢熸晥锛屾渶澶� 10 绉掞紙杩涚▼鍐呭紑鍏崇紦瀛� TTL锛夛紝涓嶉渶瑕侀噸鍚��
---
--- 鍏抽棴 publicity 鍚庣殑琛屼负锛�
--- 1) 銆愮敓鎴愪晶銆戝叆闄㈠鏁欙紙sys_config: in.helibrary.switch = "2" 鏃舵墽琛岋級涓庤嵂鍝佸鏁�
--- 锛堜粎 sltd 绔欑偣锛夐兘涓嶅啀鐢熸垚 鈥斺�� 鍑哄叆闄㈤殢璁夸富娴佺▼鍥炶皟 PublicityApi锛�
--- 鐢� PublicityFacade 鍒ゆ湰寮�鍏冲悗璺宠繃锛�
--- 2) 銆愬彂閫佷晶銆戝凡鐢熸垚鐨勫鏁欏瓙浠诲姟锛坰ubtask.type = "3"锛屽惈"閫氱煡"锛�**涔熶笉鍐嶅彂鍑�** 鈥斺��
--- RyTask#sfHandlle 涓� RedisMqReceiver#tsakHandle 閮藉湪娲惧彂鍓嶅垽鏈紑鍏筹紝
--- 鍏抽棴鏃惰烦杩囨墍鏈夐�氶亾锛堢數璇�/鐭俊/鍏紬鍙�/浜哄伐锛夊苟鎵� WARN锛�
--- 銆屻�愬鏁欍�戞ā鍧楁湭鍚敤锛堝弬鏁伴厤缃� publicity.enabled=false锛夛紝璺宠繃瀹f暀鍙戦�併�俿ubtaskId=..., patid=...銆�
--- 鈿狅笍 2025 淇鍓�**鍙�**绠′綇浜嗙敓鎴愪晶锛氬叧鎺夊紑鍏冲悗宸茬敓鎴愮殑瀹f暀鐓ф牱鍙戝嚭鍘汇��
--- 鈿狅笍 璺宠繃鏃跺埢鎰�**涓嶆帹杩� subtask 鐘舵�併�佷篃涓嶈澶辫触** 鈥斺�� 鍏抽棴鏄�"鏆傛椂涓嶅彂"锛�
--- 涓嶆槸"杩欎釜鎮h�呬笉闇�瑕佸鏁�"锛涙爣鎴愬け璐ヤ細璁╄繖鏉″鏁欏湪寮�鍏虫仮澶嶅悗姘歌繙涓㈠け銆�
--- 寮�鍏虫墦寮�鍚庯紝涓嬩竴娆� longTaskSend / compensateTask 浼氱収甯告妸瀹冩崬鍑烘潵鍙戝嚭銆�
--- 3) 鍑哄叆闄㈤殢璁夸富娴佺▼涓嶅彈褰卞搷锛堝鏁欏け璐ョ粷涓嶆嫋鍨殢璁匡級锛屽叾瀹冪被鍨嬬殑闅忚锛坱ype 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绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue銆傛敞鎰忥細2025淇鍚庢湰寮�鍏充篃浣滅敤浜庡畾鏃朵换鍔★紙dealOutHospInfo绛�3涓叆鍙o級锛屽叧闂�=褰撳ぉ涓嶅啀鐢熸垚闅忚''
- 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 ''瀹f暀妯″潡寮�鍏�'', ''publicity.enabled'', ''true'', ''Y'', ''admin'', SYSDATE(),
- ''瀹f暀锛堝叆闄㈠鏁�/鑽搧瀹f暀锛夋�诲紑鍏筹紙杩愯鏃惰鍙栵紝鏀瑰畬鏈�澶�10绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue銆傚悓鏃剁鐢熸垚渚т笌鍙戦�佷晶锛坱ype=3瀹f暀/閫氱煡锛�''
- 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');
diff --git "a/sql/\345\234\250\351\231\242\344\277\241\346\201\257\345\210\267\346\226\260_sys_job.sql" "b/sql/\345\234\250\351\231\242\344\277\241\346\201\257\345\210\267\346\226\260_sys_job.sql"
deleted file mode 100644
index fdfaae0..0000000
--- "a/sql/\345\234\250\351\231\242\344\277\241\346\201\257\345\210\267\346\226\260_sys_job.sql"
+++ /dev/null
@@ -1,59 +0,0 @@
--- ============================================================================
--- 鍦ㄩ櫌鎮h��"绉戝 / 鐥呭尯 / 搴婁綅"姣忔棩鍒锋柊 鈥斺�� 瀹氭椂浠诲姟鐧昏锛堝彲閲嶅鎵ц锛�
---
--- 鑳屾櫙锛氬湪闄㈡偅鑰呬細杞銆佽浆鐥呭尯銆佹崲搴婏紝鑰� pat_med_inhosp 鐨勪綅缃瓧娈靛彧鍦�"鍏ラ櫌閲囬泦"鏃�
--- 鍐欒繃涓�娆★紝涔嬪悗涓嶄細鑷繁鏇存柊锛岃浆绉�/鎹㈠簥鎮h�呬細涓�鐩存樉绀烘棫绉戝/鏃х梾鍖�/鏃у簥浣嶃��
--- 鏈换鍔℃瘡澶╂寜鎮h�呮煡涓�閬� HIS 閲岃鎮h��"褰撳墠鐨勫湪闄俊鎭�"
--- 锛坉tcQueryHealthcareRecordList 鈥斺�� 涓庡叆闄㈤噰闆嗗悓涓�涓帴鍙o紝鎸� healthcareRecordNo 鍗曟煡銆�
--- statusList=["FH0109.24"] 鍙彇鍦ㄩ櫌璁板綍锛夛紝涓庡簱鍐呮瘮瀵瑰悗鍙啓鍙樺寲鐨勫瓧娈点��
--- 宸蹭笉鍦ㄩ櫌锛堟帴鍙h繑鍥炵┖锛夌殑鎮h�呭彧璺宠繃璁℃暟锛氫綅缃繚鎸佷笉鍔紝inhospstate 浠嶇敱鍑洪櫌閲囬泦璐熻矗銆�
---
--- 瀹炵幇锛歳uoyi-datacollection 鐨� InhospDeptRefreshServiceImpl
--- 鍏ュ彛锛歳uoyi-quartz 鐨� com.ruoyi.quartz.task.RyTask#refreshInhospDeptInfo()
--- 鍙e緞锛氫粎 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' 姝e父锛堢櫥璁板悗鍗冲惎鐢級銆傝鍋滅敤鏀规垚 '1'锛�
--- 鎴栫洿鎺ュ湪銆岀郴缁熺鐞� 鈫� 瀹氭椂浠诲姟銆嶉噷鏆傚仠銆�
---
--- 娉ㄦ剰锛氭湰浠诲姟鍙楁暟鎹噰闆嗘ā鍧楀紑鍏崇杈栵紙sys_config: datacollection.enabled锛夆�斺��
--- 妯″潡鍏抽棴鏃堕棬闈㈡姏 DataCollectionModuleDisabledException锛孯yTask 鍙墦涓�鏉� 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 '鍦ㄩ櫌鎮h�呯瀹ょ梾鍖哄簥浣嶅埛鏂帮紙鍗楀崕闄勪竴锛屾瘡澶╋級',
- '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'锛堟甯革級銆乧oncurrent='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()';
diff --git "a/sql/\346\212\223\347\216\260\345\234\272_\350\260\201\346\212\212\346\230\216\347\273\206\347\275\256\344\270\272\345\210\240\351\231\244_20261021.sql" "b/sql/\346\212\223\347\216\260\345\234\272_\350\260\201\346\212\212\346\230\216\347\273\206\347\275\256\344\270\272\345\210\240\351\231\244_20261021.sql"
deleted file mode 100644
index 77ddc4c..0000000
--- "a/sql/\346\212\223\347\216\260\345\234\272_\350\260\201\346\212\212\346\230\216\347\273\206\347\275\256\344\270\272\345\210\240\351\231\244_20261021.sql"
+++ /dev/null
@@ -1,173 +0,0 @@
--- ============================================================================
--- 鎶撶幇琛岋細鍒板簳鏄皝鎶� service_subtask_detail.del_flag 浠� 0 鏀规垚 1
--- 鍗楀崕闄勪竴锛坣hfy锛�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
--- 锛坣hfy 璇ュ弬鏁�=5锛屽瓨鍦級锛屼絾 sys_job 閲屽綋鍓嶆病鏈夎繖鏉′换鍔°��
--- B. POST /smartor/serviceSubtaskDetail/edit銆�/batchEdit锛圕ontroller 118~142 琛岋級
--- -> ServiceSubtaskDetailServiceImpl.updateServiceSubtaskDetail锛�180~183 琛岋級
--- -> 浼氭妸瀹㈡埛绔紶鐨� delFlag 鍘熸牱鍐欒繘 SQL锛屼笖寮哄埗 updateTime = NOW()銆�
--- C. POST /smartor/serviceSubtaskDetail/editByCondition锛圕ontroller 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 鏀规垚鍒犻櫎閭d竴鍒� 鈫� 涓庣幇鍦轰笉绗︼紝鍙熀鏈帓闄ゃ��
--- 路 鍞竴绗﹀悎"鐩存帴鏀规垚 1銆佷笉鍔� update_time"鐨勫氨鏄� A 閭g鈥滆鍑烘潵鈫抯etDelFlag鈫抲pdate鈥濈殑鍐欐硶銆�
--- 路 浣� A 鐨勪袱涓墠鎻愶紙sendstate=5銆佺瀹ゅ湪 hosp.default.dept/ward锛夊湪 nhfy 褰撳墠閰嶇疆涓嬮兘涓嶆弧瓒筹紝
--- 涓� sys_job 閲屾病鏈夎繖涓换鍔°��2026-09-08 涔熸病鏈変换浣曗�滄墜鍔ㄦ墽琛屼换鍔♀�濈殑鎿嶄綔鏃ュ織
--- 鈫� 绾夸笂璺戠殑鍖呬笌褰撳墠浠撳簱浠g爜涓嶄竴鑷达紝鎴栬繖娈碘�滃厛鎻掑悗鍒犫�濈殑閫昏緫鎸傚湪鍒殑鍏ュ彛涓娿��
---
--- 銆愭湰鑴氭湰銆戜袱鏉℃姄鐜拌鐨勮矾瀛愶細鈶� MySQL general_log 鎶� SQL 鍘熸枃锛堟渶鍑嗭紝10 鍒嗛挓绐楀彛锛夛紱
--- 鈶� 瀹¤瑙﹀彂鍣紙鍙暱鏈熸寕鐫�锛屽彧璁板綍 del_flag 鍙樺寲锛夈��
--- 閮芥槸鏌�/璁板綍锛屼笉鏀逛笟鍔℃暟鎹紱general_log 鐢ㄥ紑鍏虫帶鍒讹紝璁板緱鍏炽��
--- ============================================================================
-
-
--- ============================================================================
--- 鏂规鈶狅紙鎺ㄨ崘銆佹渶蹇級锛歡eneral_log 鎶撳埌 SQL 鍘熸枃 鈥斺�� 璇彞褰㈢姸鐩存帴鏆撮湶鏄摢鏉′唬鐮佽矾寰�
--- 路 鍙湪澶嶇幇绐楀彛锛堜緥濡傛湁浜洪噸濉棶鍗� / 瀹氭椂浠诲姟璺戞壒鐨勬椂娈碉級鎵撳紑 5~10 鍒嗛挓
--- 路 闇�瑕� root 鎴� SUPER 鏉冮檺锛坣hfy 搴旂敤璐﹀彿灏辨槸 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) 椤轰究鐪嬭繖娈垫椂闂撮噷鍝簺浼氳瘽/鎺ュ彛鍦ㄥ啓鏄庣粏锛坕nsert / 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锛坰etFailSubTaskDefalutVal 閭d竴绫伙級
--- 路 娌℃湁 update_time 璧嬪�� -> 鐩存帴璋� mapper 鐨勫啓娉曪紙涓嶆槸 Controller -> Service 閾捐矾锛�
-
-
--- ============================================================================
--- 鏂规鈶★細瀹¤瑙﹀彂鍣紙鍙暱鏈熸寕鐫�锛屽彧鍦� del_flag 鐪熸鍙樺寲鏃惰涓�琛岋級
--- 涓嶄緷璧� general_log 寮�鍏筹紱璁板綍姣鏃堕棿 + 鏄惁椤哄甫鏀逛簡 update_time锛�
--- 鍓嶈�呯敤鏉ュ拰搴旂敤鐨� access log / 涓氬姟鏃ュ織瀵归綈锛屽悗鑰呯敤鏉ュ垽瀹氳蛋鐨勬槸涓嶆槸 Service 閾捐矾銆�
--- ============================================================================
-
--- 鈿狅笍 浠ヤ笅 DDL 榛樿娉ㄩ噴鎺夛紱纭瑕侀暱鏈熸寕瀹¤鍐嶅彇娑堟敞閲婂悗鎵ц锛圢avicat / 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 閾捐矾锛圔/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锛坖ob 涓�绫伙級
- 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 涓旀棤骞傜瓑锛坰aveQuestionCache 鎵嶆湁 @RepeatSubmit锛夛紝
--- 鎮h�呯閲嶅鐐瑰嚮/閲嶈瘯浼氬苟鍙戝啓澶氫唤锛屽缓璁姞 Redis 骞傜瓑閿紙subid+scriptid+绛旀鎽樿锛夈��
--- ============================================================================
diff --git "a/sql/\346\216\222\346\237\245_\345\257\274\345\207\272\351\227\256\351\242\230\345\215\240\346\257\224\344\272\272\346\225\260\344\270\216\344\273\273\345\212\241\346\225\260\344\270\215\344\270\200\350\207\264_20261029.sql" "b/sql/\346\216\222\346\237\245_\345\257\274\345\207\272\351\227\256\351\242\230\345\215\240\346\257\224\344\272\272\346\225\260\344\270\216\344\273\273\345\212\241\346\225\260\344\270\215\344\270\200\350\207\264_20261029.sql"
deleted file mode 100644
index 43c76a5..0000000
--- "a/sql/\346\216\222\346\237\245_\345\257\274\345\207\272\351\227\256\351\242\230\345\215\240\346\257\224\344\272\272\346\225\260\344\270\216\344\273\273\345\212\241\346\225\260\344\270\215\344\270\200\350\207\264_20261029.sql"
+++ /dev/null
@@ -1,108 +0,0 @@
--- ============================================================================
--- 鎺掓煡锛氶殢璁垮鍑虹殑銆岄棶棰樿鎯呭崰姣斻��(Sheet2) 浜烘暟 姣斻�屾偅鑰呴殢璁夸俊鎭〃鍗曘��(Sheet1) 灏�
--- 渚嬶細Sheet1 475 浜猴紝Sheet2 鐨勯鐩彧鏈� 283 / 172 浜轰綔绛�
--- 鍙鑴氭湰銆傛敼涓嬮潰 3 涓弬鏁板嵆鍙璺戙��
--- ----------------------------------------------------------------------------
--- 銆愮粨璁猴紙2026-10-29 瀹炴祴锛宯hfy锛岄绉戜腑蹇冧竴鐥呭尯 40011020锛屽嚭闄� 2026-07-01~09-30锛夈��
--- 475 鏉′换鍔� 鈮� 475 涓�"鍚屽嵎浣滅瓟鐨勪汉"銆傚畠鐨勬瀯鎴愭槸锛�
--- 路 浠诲姟 67銆岄绉戜腑蹇冧竴鐥呭尯鍑洪櫌闅忚銆嶁啋 妯℃澘 115銆岄绉戜腑蹇冧竴鐥呭尯闅忚闂嵎銆�
--- 鈫� **10 閬撴弧鎰忓害棰�**锛堝尰寰疯瘎浠�/鏈嶅姟鎬佸害/鍖荤枟鏁堟灉鈥︼級锛屼綔绛� 283 浜�
--- 路 浠诲姟 68銆岄绉戜腑蹇冧竴鐥呭尯鍑洪櫌闅忚銆嶁啋 妯℃澘 116銆岃偂楠ㄩ楠ㄦ姌鏈悗闅忚闂嵎銆�
--- 鈫� **8 閬撻绉戦**锛堜激鍙f槸鍚︽湁绾㈣偪/鏄惁娉ㄦ剰楗按鈥︼級锛屼綔绛� 129 浜�
--- 路 浠诲姟 67 閲岃繕鏈� 44 鏉$敤鐨勬槸銆岃偂楠ㄩ楠ㄦ姌鏈悗闅忚闂嵎銆嶁啋 43 浜�
--- 鍘熷洜锛堜笟鍔$‘璁わ級锛氳繖浜涙偅鑰呮湰娆′綇闄㈡槸**浠庡叾瀹冪瀹�/鐥呭尯杞繃鏉�**鐨勶紝闅忚浠诲姟娌跨敤鐨勬槸
--- **杞鍓嶇瀹�/鐥呭尯**鐨勯偅濂楅棶鍗凤紱浠诲姟 67 鐨勯厤缃湰韬病鍙� 鈥斺��
--- 浣愯瘉锛氳繖 44 鏉$殑鐢熸垚鏃堕棿鏁h惤鍦� 2026-07-02 ~ 2026-10-01 鍚勫ぉ锛屼笉鏄煇澶╃粺涓�鍒囨崲锛�
--- 涓斿畠浠幇鍦ㄧ殑璁板綍绉戝/鐥呭尯閮藉凡缁忔槸楠ㄧ涓績涓�鐥呮埧/涓�鐥呭尯锛堣浆绉戝悗 HIS 鏇存柊杩囷級銆�
--- 鈬� 鎵�浠ュ悓涓�浠诲姟鍚嶄笅浼氬悓鏃跺嚭鐜�"婊℃剰搴﹂"鍜�"楠ㄧ棰�"锛屼笖楠ㄧ棰樺彧鏈� 43 浜轰綔绛斻��
--- 路 鍙︽湁 6 鏉¢浂鏁d换鍔★紙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銆慡heet1 琛屾暟锛氭湰娆″鍑鸿寖鍥达紙= 瀵煎嚭 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 鎮h�呭疄闄呯敤鐨勯棶鍗�, 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) 閭f潯
--- ----------------------------------------------------------------------------
-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銆戞病浣滅瓟鐨勪汉鏄皝锛圫heet1 鏈夈�丼heet2 閲屽畬鍏ㄦ病鏈夛級
--- ----------------------------------------------------------------------------
-SELECT '4 娌″~闂嵎鐨勪汉' AS step, s.id AS 瀛愪换鍔D, 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);
diff --git "a/sql/\346\216\222\346\237\245_\351\227\256\351\242\230\345\215\240\346\257\224\344\270\216\351\232\217\350\256\277\350\241\250\345\215\225\344\272\272\346\225\260\344\270\215\344\270\200\350\207\264.sql" "b/sql/\346\216\222\346\237\245_\351\227\256\351\242\230\345\215\240\346\257\224\344\270\216\351\232\217\350\256\277\350\241\250\345\215\225\344\272\272\346\225\260\344\270\215\344\270\200\350\207\264.sql"
deleted file mode 100644
index 63c693a..0000000
--- "a/sql/\346\216\222\346\237\245_\351\227\256\351\242\230\345\215\240\346\257\224\344\270\216\351\232\217\350\256\277\350\241\250\345\215\225\344\272\272\346\225\260\344\270\215\344\270\200\350\207\264.sql"
+++ /dev/null
@@ -1,168 +0,0 @@
--- ============================================================================
--- 鎺掓煡锛氶殢璁垮鍑虹殑銆岄棶棰樿鎯呭崰姣斻�嶄汉鏁� 姣� 銆屾偅鑰呴殢璁夸俊鎭〃鍗曘�嶈鏁板皯锛堜緥锛�370 vs 380锛�
---
--- 銆愬彛寰勪簨瀹烇紙浠g爜鍧愬疄锛夈��
--- * 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 鐨勮鏁般�傚樊棰濆氨鏄繖绫绘偅鑰呫��
---
--- 銆愭湰鑴氭湰鐢ㄩ�斻�戞妸宸鎮h�呬竴涓釜鍒楀嚭鏉ワ紝鍒ゅ畾灞炰簬鍝缂哄け锛屽彧璇汇�佷笉鏀逛换浣曟暟鎹��
--- 銆愮敤娉曘��
--- 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=澶氭锛孨ULL=涓嶉檺锛�
-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銆戜簩閫変竴锛欰 鐢ㄧ瓫閫夋潯浠惰繕鍘燂紙榛樿锛夛紝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銆慡heet1 琛屾暟锛氬簲璇ョ瓑浜庡鍑� Excel 閲屻�屾偅鑰呴殢璁夸俊鎭〃鍗曘�嶇殑琛屾暟锛堜緥 380锛�
--- ----------------------------------------------------------------------------
-SELECT '1. 琛ㄥ崟琛屾暟(Sheet1)' AS step, COUNT(*) AS cnt FROM tmp_export_subtask;
-
--- 璁颁笅鎬绘暟锛圡ySQL 涓存椂琛ㄥ湪鍚屼竴璇彞閲屼笉鑳借鎵撳紑涓ゆ锛屽悗闈㈢敤鍙橀噺浠f浛瀛愭煡璇級
-SET @total := (SELECT COUNT(*) FROM tmp_export_subtask);
-
--- ----------------------------------------------------------------------------
--- 銆�2銆慡heet2 瀹為檯鑳界粺璁″埌鐨勪汉鏁�
--- 2a = 鑷冲皯鏈� 1 鏉℃湁鏁堟槑缁嗭紙del_flag=0锛夌殑鎮h�呮暟
--- 2b = 鏄庣粏瀛樺湪浣嗗叏閮ㄨ閫昏緫鍒犻櫎鐨勬偅鑰呮暟锛堣繖浜涗汉鍦� Sheet2 閲屽悓鏍风湅涓嶅埌锛�
--- 棰勬湡锛�2a <= 1 鐨� cnt锛屽樊棰� = 瀹屽叏娌″~鎶�/鏄庣粏涓㈠け鐨勪汉
--- ----------------------------------------------------------------------------
-SELECT '2a. 鏈夋湁鏁堟槑缁嗙殑鎮h�呮暟' 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. 宸鎮h�呮竻鍗曪紙鍘熷洜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. 宸鎮h�呮竻鍗曪紙鍘熷洜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銆戦�愰浜烘暟锛氫换浣曚竴涓鐨勩�屾湁浣滅瓟鎮h�呮暟銆嶉兘 <= 琛ㄥ崟琛屾暟锛�
--- 瀵煎嚭閲岀湅鍒扮殑 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) 閭f潯锛夌殑閫愰浜烘暟
-SELECT '4b. 閫愰浜烘暟(鍘婚噸鍙e緞,涓庡鍑轰竴鑷�)' 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銆戝悓涓�鎮h�呭悓涓�棰樺鏉℃槑缁嗭紙閲嶇瓟/閲嶅鎻愪氦锛夛細瀵煎嚭鍙彇鏈�鏂颁竴鏉�
--- ----------------------------------------------------------------------------
-SELECT '5. 鍚屼竴浜哄悓涓�棰樺鏉℃槑缁嗙殑鎮h�呮暟' 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銆戦噷鍒楀嚭鏉ョ殑鎮h�咃紝
--- 浠栦滑瑕佷箞娌″~鎶ワ紙no_detail_row锛夛紝瑕佷箞鏄庣粏琚垹锛坅ll_deleted锛�
--- 鈥斺�� 杩欐槸銆屽崰姣斿彧缁熻浣滅瓟鎮h�呫�嶇殑鍙e緞閫犳垚鐨勶紝涓嶆槸 SQL 婕忎簡绛涢�夋潯浠躲��
--- * 鑻ャ��1銆�= 380 浣嗐��4銆戠殑 answered 鏈夊琛岄兘灏忎簬 380锛堟瘮濡� 378/375/370鈥︼級锛�
--- 璇存槑姣忎釜棰樼洰鐨勫垎姣嶆湰鏉ュ氨涓嶅悓锛堝悇鏈夊悇鐨勬湭浣滅瓟锛夛紝Sheet2 閲屾病鏈夆�滄湭浣滅瓟鈥濊繖涓�琛岋紝
--- 鎵�浠ュ悎璁℃案杩滃噾涓嶅埌 380銆�
--- ----------------------------------------------------------------------------
diff --git "a/sql/\346\225\260\346\215\256\351\207\207\351\233\206\345\274\200\345\205\263_sys_config.sql" "b/sql/\346\225\260\346\215\256\351\207\207\351\233\206\345\274\200\345\205\263_sys_config.sql"
deleted file mode 100644
index aa23e00..0000000
--- "a/sql/\346\225\260\346\215\256\351\207\207\351\233\206\345\274\200\345\205\263_sys_config.sql"
+++ /dev/null
@@ -1,47 +0,0 @@
--- ----------------------------
--- 鏁版嵁閲囬泦妯″潡寮�鍏筹紙sys_config 鍙傛暟閰嶇疆琛級
--- ----------------------------
--- 閿悕锛歞atacollection.enabled
--- 閿�硷細true = 鍚敤锛堥粯璁わ紝绛変环浜庝笉閰嶇疆杩欎竴琛岋級
--- false = 鍋滈噰
---
--- 鍏抽棴鍚庣殑琛屼负锛�
--- 1) 瀹氭椂浠诲姟鍏ュ彛 ryTask.dealHisData('...') 浠嶅彲琚� quartz 璋冨埌锛堝叆鍙� Bean 涓嶄細娑堝け锛夛紝
--- 浣嗛棬闈� DataCollectionFacade#dealHisData 浼氭姏
--- DataCollectionModuleDisabledException锛汻yTask 鎹曡幏鍚庡彧鎵撲竴鏉� WARN
--- 銆屾暟鎹噰闆嗘ā鍧楁湭鍚敤鈥︹�︼紙鏈疆瀹氭椂閲囬泦璺宠繃锛夈�嶏紝
--- 鍗筹細**姣忎竴杞兘鏄庣‘璺宠繃锛屽苟鍦ㄦ棩蹇楅噷鐣欎笅鐥曡抗**锛屼笉鏄潤榛樹粈涔堥兘涓嶅仛锛�
--- 2) 闂ㄩ潰 DataCollectionFacade#isEnabled() 浠嶅彲璋冪敤锛屼緵璋冪敤鏂归鍒ゅ紑鍏崇姸鎬侊紱
--- 3) 鍏跺畠鍏ュ彛锛圚TTP 鎵嬪姩瑙﹀彂閲囬泦鐨勬帶鍒跺櫒锛変笉鍙楁湰寮�鍏冲奖鍝� 鈥斺�� 瀹冧滑璧扮殑鏄�
--- smartor / ruoyi-quartz 閲屽悇鑷殑 Service锛屾湰寮�鍏冲彧绠�"瀹氭椂閲囬泦缂栨帓"杩欎竴鏉¢摼璺紱
--- 4) 鏀瑰畬绔嬪嵆鐢熸晥锛屾渶澶� 10 绉掞紙杩涚▼鍐呭紑鍏崇紦瀛� TTL锛夛紝涓嶉渶瑕侀噸鍚��
---
--- 鈿狅笍 娉ㄦ剰锛氬仠閲囦笉浼氬垹闄や换浣曟暟鎹紝涔熶笉浼氬洖濉�"鍋滈噰鏈熼棿婕忔帀鐨勬椂闂存" 鈥斺��
--- 閲嶆柊鎵撳紑鍚庢寜褰撳墠鏃堕棿绐楀彛缁х画閲囷紙nhfy/sltd 绔欑偣鍙敤甯︽棩鏈熷叆鍙傜殑鎵嬪伐瑙﹀彂鍋氬洖婧級銆�
--- 鈿狅笍 鍙傛暟琛岀己澶辨椂鎸� true锛坒ail-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(),
- ''鏁版嵁閲囬泦妯″潡锛圚IS 閲囬泦瀹氭椂缂栨帓锛夋�诲紑鍏筹紙杩愯鏃惰鍙栵紝鏀瑰畬鏈�澶�10绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍋滈噰锛涢粯璁rue''
- 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';
diff --git "a/sql/\346\250\241\346\235\277\345\274\200\345\205\263_sys_config.sql" "b/sql/\346\250\241\346\235\277\345\274\200\345\205\263_sys_config.sql"
deleted file mode 100644
index 976bb09..0000000
--- "a/sql/\346\250\241\346\235\277\345\274\200\345\205\263_sys_config.sql"
+++ /dev/null
@@ -1,65 +0,0 @@
--- ----------------------------
--- 妯℃澘妯″潡寮�鍏筹紙sys_config 鍙傛暟閰嶇疆琛級
--- ----------------------------
--- 閿悕锛歵emplate.enabled
--- 閿�硷細true = 鍚敤锛堥粯璁わ紝绛変环浜庝笉閰嶇疆杩欎竴琛岋級
--- false = 鍏抽棴
---
--- 璇诲彇鏂瑰紡锛歍emplateSwitch#isEnabled()
--- sys_config 鐑 + 10 绉掕繘绋嬪唴缂撳瓨锛宖ail-open锛堣涓嶅埌 / 璇诲簱寮傚父閮芥寜 true 澶勭悊锛夈��
---
--- 鍏抽棴鍚庣殑琛屼负锛�
--- 1) 鏈ā鍧� 66 涓ā鏉跨鐞嗙鐐逛細琚� TemplateAvailabilityInterceptor 鎷︿笅锛�
--- 杩斿洖鏄庣‘涓氬姟閿欒銆屾ā鏉垮姛鑳芥湭鍚敤锛堝弬鏁伴厤缃� template.enabled=false锛夛紝璇ユ帴鍙d笉鍙敤銆嶏紝
--- 鑰屼笉鏄� 404锛堝墠绔兘鍖哄垎"妯″潡琚叧闂�"鍜�"鍦板潃鍐欓敊浜�"锛夛紱
--- 2) 璺ㄦā鍧楄皟鐢ㄤ篃浼氳鎷掞細鍏跺畠妯″潡缁� TemplateFacade 鍙栨ā鏉挎椂锛�
--- 6 涓暟鎹柟娉曠粺涓�鎶� TemplateModuleDisabledException锛堟彁绀鸿涓庝笂闈竴鑷达級銆�
--- 璋冪敤鏂瑰悇鑷喅瀹氶檷绾ф柟寮忥紝宸插湪 4 涓皟鐢ㄧ偣閫愪釜鏄庣‘锛�
--- RyTask / RedisMqReceiver -> 濡傚疄璁般�屽彂閫佸け璐ャ�嶅苟鍗囩骇涓嬩竴閫氶亾锛堜笉鎺╃洊锛�
--- ServiceTaskServiceImpl -> 杩斿洖绌哄垪琛紝鎮h�呭鏁欓〉闈㈢収甯稿彲寮�鍙彁浜�
--- ChatWebSocketHandler -> 鎶涘紓甯革紙璇煶闂嵎鏈氨妯℃澘椹卞姩锛岀户缁蛋鍙細 NPE锛�
--- 鈿狅笍 涔熷氨鏄锛�**鍏抽棴妯℃澘浼氳繛甯﹀仠鎺夊鏁欑煭淇$殑鍐呭鐢熸垚**锛岃繖鏄埢鎰忕殑 鈥斺��
--- 鍙栦笉鍒版ā鏉垮唴瀹瑰氨鏄病鍐呭鍙彂锛屼笉璇ヨ鎴�"鍙戦�佹垚鍔�"銆�
--- 3) 鈿狅笍 鍙楃鐨勬槸"绠℃ā鏉挎暟鎹�"鐨勭鐐癸紝鍏� 66 涓墠缂�锛屽寘鍚埢鎰忕暀鍦� smartor 鐨�
--- 3 涓ā鏉跨鐞嗘帶鍒跺櫒锛圫vyLibTemplateController / SvyTaskController /
--- SvyTaskTemplateController锛夈�傚畬鏁存竻鍗曡 TemplateWebConfig#guardedPathPatterns()
--- 鎴� sql/_probe/verify_template_switch.py 鐨勮緭鍑恒��
--- 4) 鈿狅笍 **涓嶅彈绠�**锛欼vrTaskVisitResultController / IvrTasksmsController /
--- IvrTaskcallrecordController 鈥斺�� 瀹冧滑鏄�"浠诲姟鎵ц璁板綍"锛堣繍琛屾椂瀹炰緥锛夛紝
--- 宸叉寜鑱岃矗绉诲嚭妯℃澘妯″潡锛涘叧鎺�"妯℃澘"涓嶈璁�"浠诲姟鎵ц璁板綍鏌ヨ"鍋滄憜銆�
--- 鏈嶅姟瀛愪换鍔� / 妗f / 鏈嶅姟浠诲姟 / 闂嵎浠诲姟瀹炰緥 / 鏂规娴佺▼绛夐潪妯℃澘绔偣鍚屾牱涓嶅彈绠°��
--- 5) 鏀瑰畬绔嬪嵆鐢熸晥锛屾渶澶� 10 绉掞紝涓嶉渶瑕侀噸鍚��
---
--- 娉ㄦ剰 1锛氭湰椤圭洰鐢ㄧ殑 MySQL 鐗堟湰鍙兘涓嶆敮鎸� ADD COLUMN IF NOT EXISTS锛�
--- 鍥犳杩欓噷鐢� information_schema 鍒ゆ柇鍚庡啀鍔ㄦ�佹墽琛岋紝鑴氭湰鍙噸澶嶆墽琛屻��
--- 娉ㄦ剰 2锛歋ysConfigServiceImpl#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绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue銆傚叧闂悗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 绉掔敓鏁堬級锛�
--- 鍏抽棴锛歎PDATE 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';
diff --git "a/sql/\346\273\241\346\204\217\345\272\246\345\274\200\345\205\263_sys_config.sql" "b/sql/\346\273\241\346\204\217\345\272\246\345\274\200\345\205\263_sys_config.sql"
deleted file mode 100644
index 99cf564..0000000
--- "a/sql/\346\273\241\346\204\217\345\272\246\345\274\200\345\205\263_sys_config.sql"
+++ /dev/null
@@ -1,39 +0,0 @@
--- ----------------------------
--- 婊℃剰搴︽ā鍧楀紑鍏筹紙sys_config 鍙傛暟閰嶇疆琛級
--- ----------------------------
--- 閿悕锛歴atisfaction.enabled
--- 閿�硷細true = 鍚敤锛堥粯璁わ紝绛変环浜庝笉閰嶇疆杩欎竴琛岋級
--- false = 鍏抽棴
---
--- 鍏抽棴鍚庣殑琛屼负锛�
--- 1) 鏈ā鍧� 17 涓弧鎰忓害绔偣浼氳 SatisfactionAvailabilityInterceptor 鎷︿笅锛�
--- 杩斿洖鏄庣‘涓氬姟閿欒銆屾弧鎰忓害鍔熻兘鏈惎鐢紙鍙傛暟閰嶇疆 satisfaction.enabled=false锛夛紝璇ユ帴鍙d笉鍙敤銆嶏紝
--- 鑰屼笉鏄� 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绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue''
- 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';
diff --git "a/sql/\347\224\265\350\257\235\345\274\200\345\205\263_sys_config.sql" "b/sql/\347\224\265\350\257\235\345\274\200\345\205\263_sys_config.sql"
deleted file mode 100644
index cc7eeb2..0000000
--- "a/sql/\347\224\265\350\257\235\345\274\200\345\205\263_sys_config.sql"
+++ /dev/null
@@ -1,56 +0,0 @@
--- ----------------------------
--- 鐢佃瘽妯″潡寮�鍏筹紙sys_config 鍙傛暟閰嶇疆琛級
--- ----------------------------
--- 閿悕锛歱hone.enabled
--- 閿�硷細true = 鍚敤锛堥粯璁わ紝绛変环浜庝笉閰嶇疆杩欎竴琛岋級
--- false = 鍏抽棴
---
--- 鍏抽棴鍚庣殑琛屼负锛�
--- 1) 鏈ā鍧� 8 涓數璇濈鐐逛細琚� PhoneAvailabilityInterceptor 鎷︿笅锛�
--- 杩斿洖鏄庣‘涓氬姟閿欒銆岀數璇濆姛鑳芥湭鍚敤锛堝弬鏁伴厤缃� phone.enabled=false锛夛紝璇ユ帴鍙d笉鍙敤銆嶏紝
--- 鑰屼笉鏄� 404锛�
--- /smartor/serviceSubtask/phoneCallBack 涓婃捣锛氳闊宠瘑鍒粨鏋滃洖璋�
--- /smartor/serviceSubtask/phoneCallBackYQ 闆ㄧ划锛欰SR/闈欓粯/鎾斁浜嬩欢鍥炶皟
--- /smartor/serviceSubtask/taskPull 闆ㄧ划锛氫换鍔℃媺鍙�
--- /smartor/serviceSubtask/saveQuestionAnswerPhone 鐢佃瘽锛氭偅鑰呴棶棰樼粨鏋滆褰�
--- /smartor/serviceSubtask/recordAcceptshanghai 涓婃捣锛氶�氳瘽璁板綍鍥炶皟
--- /smartor/serviceSubtask/recordAccept 闆ㄧ划锛氶�氳瘽璁板綍鍥炶皟
--- /smartor/shphone/getFirstQues 涓夋眹锛氬彇棣栭
--- /smartor/shphone/processResust 涓夋眹锛欰SR 缁撴灉澶勭悊
--- 2) 杩� 6 鏉℃寕鍦� /smartor/serviceSubtask/** 涓嬬殑鐢佃瘽绔偣锛屽凡浠庛�屼换鍔℃ā鍧楀紑鍏炽��
--- 锛坱ask.enabled锛夌殑鎷︽埅鑼冨洿閲屾帓闄わ紙瑙� TaskWebConfig#excludedPhonePaths锛夛紝
--- 鍗冲叧浠诲姟涓嶄細杩炲甫鍏虫帀鐢佃瘽锛涘弽涔嬩害鐒讹紱
--- 3) 妯″潡闂ㄩ潰 PhoneFacade锛堝叾瀹冩ā鍧楄皟鐢佃瘽鑳藉姏鐨勫叆鍙o級浠嶅彲娉ㄥ叆锛�
--- 浣嗗悇鏂规硶闄嶇骇涓虹┖鍊�/绌哄垪琛ㄥ苟鎵� 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绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue''
- 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';
diff --git "a/sql/\351\227\250\346\200\245\350\257\212\344\270\216\346\211\213\346\234\257\351\232\217\350\256\277\345\274\200\345\205\263_sys_config.sql" "b/sql/\351\227\250\346\200\245\350\257\212\344\270\216\346\211\213\346\234\257\351\232\217\350\256\277\345\274\200\345\205\263_sys_config.sql"
deleted file mode 100644
index e1c9cd4..0000000
--- "a/sql/\351\227\250\346\200\245\350\257\212\344\270\216\346\211\213\346\234\257\351\232\217\350\256\277\345\274\200\345\205\263_sys_config.sql"
+++ /dev/null
@@ -1,91 +0,0 @@
--- ----------------------------
--- 闂ㄦ�ヨ瘖闅忚妯″潡 + 鎵嬫湳闅忚妯″潡 寮�鍏筹紙sys_config 鍙傛暟閰嶇疆琛級
--- ----------------------------
--- 鏈剼鏈竴娆″缓涓や釜閿紝閮藉彲閲嶅鎵ц锛堝箓绛夛級锛�
---
--- 閿悕锛歰utpatientvisit.enabled 闂ㄦ�ヨ瘖闅忚鎬诲紑鍏�
--- 閿悕锛歰thervisit.enabled 鎵嬫湳闅忚鎬诲紑鍏�
--- 閿�硷細true = 鍚敤锛堥粯璁わ紝绛変环浜庝笉閰嶇疆杩欎竴琛岋級
--- false = 鍏抽棴
---
--- 璇诲彇鏂瑰紡锛歄uthospVisitSwitch#isEnabled() / OtherVisitSwitch#isEnabled()
--- sys_config 鐑 + 10 绉掕繘绋嬪唴缂撳瓨锛宖ail-open锛堣涓嶅埌 / 璇诲簱寮傚父閮芥寜 true 澶勭悊锛夈��
---
--- 鈿狅笍 杩欎袱涓ā鍧椾笌鍑哄叆闄�/瀹f暀**鏈変竴涓叧閿粨鏋勫樊寮�**锛�
--- 瀹冧滑鐨勬帶鍒跺櫒閲�**鍏ㄦ槸璁板綍 CRUD**锛坙ist / 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绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue銆傚彧浣滅敤浜庨棬璇婇殢璁跨紪鎺掞紝闂ㄨ瘖璁板綍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绉掔敓鏁堬級锛歵rue鍚敤锛宖alse鍏抽棴锛涢粯璁rue銆傚彧浣滅敤浜庢墜鏈殢璁跨紪鎺掞紝鎵嬫湳璁板綍/鏄庣粏/鍩虹瀛楀吀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 绉掔敓鏁堬級锛�
--- 鍏抽棴闂ㄨ瘖闅忚锛歎PDATE sys_config SET config_value = 'false', update_time = SYSDATE() WHERE config_key = 'outpatientvisit.enabled';
--- 鍏抽棴鎵嬫湳闅忚锛歎PDATE 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');
--
Gitblit v1.9.3