From cc479e6a056785103996cc7ea67dbd5faa3e800e Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 19 十月 2026 18:07:22 +0800
Subject: [PATCH] 数据采集模块
---
ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/service/InhospTaskOrchestrator.java | 375 +++++++++++++++++++++++++++++++----------------------
1 files changed, 218 insertions(+), 157 deletions(-)
diff --git a/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/service/InhospTaskOrchestrator.java b/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/service/InhospTaskOrchestrator.java
index 2d460cf..a437710 100644
--- a/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/service/InhospTaskOrchestrator.java
+++ b/ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/service/InhospTaskOrchestrator.java
@@ -21,12 +21,26 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 鍑洪櫌闅忚銆岀紪鎺掑櫒銆嶁�斺�� 閫愯鎼嚜 {@code PatMedInhospServiceImpl}
* 鐨勭紪鎺掑眰锛坽@code addSubTaskByRule} + 3 涓� {@code *ForPatient} + {@code dealInHospInfo}锛夈��
+ *
+ * <h3>鈿狅笍 2026-10 鍙e緞鍙樻洿锛氫竴涓偅鑰咃紙涓�娆″嚭闄級鍙敓鎴� <b>涓�鏉�</b> 闅忚瀛愪换鍔�</h3>
+ * 鎼縼鏃舵湰绫绘槸"閫愯绛変环"鐨勶紙鍘熷疄鐜版寜缁村害鍏ㄧ敓鎴愶細姣忎釜 {@code *ForPatient} 鎶婂懡涓殑
+ * <b>鎵�鏈�</b>闀挎湡浠诲姟鍚勫啓涓�鏉★級銆備笟鍔$‘璁ゆ敼涓猴細
+ * <ol>
+ * <li>缁村害鎸� {@code service_task_rule} 浼樺厛绾ф帓搴忓皾璇曪細棣栬 鈫� 娆¤ 鈫� 閫氱敤鍏滃簳锛堢瀹ゃ�佺梾鍖猴級锛�</li>
+ * <li>绗竴涓湡姝h惤搴撴垚鍔熺殑缁村害鍗冲仠姝� 鈫� 鍙暀涓�鏉★紱</li>
+ * <li>鏃犺鍒欐椂鎸� {@code service_taskdept} 鐨勭瀹�/鐥呭尯"閫氱敤妯″潡"鐢熸垚锛�</li>
+ * <li>鏍囧織浣嶇粺涓�鍥炲啓锛屼繚璇� {@code deptcheck_flag} 涓嶅啀鍋滃湪 0锛堥槻閲嶅鎵弿锛夛紱
+ * 骞跺湪鍐欏簱鍓嶆寜 {@code patid+inhospid+taskid} 鍒ら噸锛堣 {@code VisitTaskCreateApi#existsSubtask}锛夈��</li>
+ * </ol>
+ * 鍥犳 {@code verify_inhospvisit_orchestration_semantics.py} 閲� O18~O23 閭� 6 鏉�
+ * "鎼縼绛変环"鏂█宸茶鏀逛负"鍙e緞鍙樻洿"鏂█锛堣剼鏈噷鍗曠嫭鍒嗙粍骞舵敞鏄庝緷鎹級銆�
*
* <h3>鏉ユ簮瀵圭収锛園 b25c3b51锛�</h3>
* <table border="1">
@@ -122,165 +136,192 @@
/**
* 鎸� {@code service_task_rule} 鐨勩�岄瑕�(1)/娆¤(2)銆嶈鍒欑紪鎺掔瀹�/鐥呭尯/鐤剧梾涓変釜缁村害銆�
+ *
+ * <h3>鈿狅笍 2026-10 鍙e緞鍙樻洿锛氫竴涓偅鑰咃紙涓�娆″嚭闄級鍙敓鎴� <b>涓�鏉�</b> 闅忚瀛愪换鍔�</h3>
+ * 鍘熷疄鐜帮紙浠ュ強鎼縼鍚庣殑绛変环鐗堬級鏄寜缁村害"鍏ㄧ敓鎴�"锛氬厛璺戞墍鏈夈�岄瑕併�嶇淮搴︾殑
+ * {@code *ForPatient}锛岃�屾瘡涓� {@code *ForPatient} 鍙堟妸鍛戒腑鐨�<b>鎵�鏈�</b>闀挎湡浠诲姟鍚勫啓涓�鏉°��
+ * 缁撴灉鏄悓涓�鎮h�呬竴娆″嚭闄㈣兘鐢熸垚鍑犲崄鏉★紙绾夸笂瀹炴祴 27 鏉★級锛岃�屼笖鍥犱负鎵弿閿�
+ * {@code deptcheck_flag} 鍦�"鍙湁鐥呭尯/鐤剧梾缁村害"鐨勮鍒欎笅涓嶄細琚疆 1锛�
+ * 鎮h�呮瘡杞壂鎻忛兘琚噸鏂板鐞� 鈫� 閲嶅瀛愪换鍔℃寔缁疮绉��
* <p>
- * 閫愯瀵瑰簲鍘� {@code addSubTaskByRule(String config, List<PatMedInhosp> patMedInhosps)}銆�
- * <p>
- * 鈿狅笍 瑙勫垯鏌ヨ {@code serviceTaskRuleMapper.selectServiceTaskRuleByDeptOrWard} 浠嶅湪 smartor锛�
- * 鎵�浠ユ湰鏂规硶鎺ユ敹<b>宸叉煡濂界殑瑙勫垯</b>锛堢敱璋冪敤鏂� {@code InhospVisitTaskService} 閫氳繃
- * {@code PublicityDataPort} 鍙栤�斺�旇绔彛宸插惈"鎸夌瀹�/鐥呭尯鏌ヨ鍒�"鐨勮兘鍔涳紝瑙佷笅锛夈��
- * 杩欐牱鍋氭槸涓轰簡閬垮厤涓�"瑙勫垯琛�"鍐嶅姞涓�涓� Mapper 鎴栫鍙c��
+ * 鐜板彛寰勶紙涓氬姟纭锛夛細
+ * <ol>
+ * <li>鎶婁笁涓淮搴︽寜瑙勫垯浼樺厛绾ф帓鎴愪竴涓�<b>灏濊瘯椤哄簭</b>锛�
+ * 棣栬(1) 鈫� 娆¤(2) 鈫� 閫氱敤鍏滃簳锛堢瀹ゃ�佺梾鍖猴級锛涘悓浼樺厛绾у唴鍥哄畾 绉戝 > 鐥呭尯 > 鐤剧梾銆�
+ * {@code service_task_rule} 娌℃湁璇ユ偅鑰呯瀹�/鐥呭尯瀵瑰簲鐨勮鍒欐椂 鈫� 椤哄簭涓� 绉戝 鈫� 鐥呭尯
+ * 锛堝嵆"鎸� {@code service_taskdept} 閲岀殑閫氱敤妯″潡鐢熸垚"锛夈��</li>
+ * <li>鎸夐『搴忛�愪釜缁村害灏濊瘯锛�<b>绗竴涓湡姝h惤搴撴垚鍔燂紙鎴栧凡瀛樺湪锛夌殑缁村害鍗冲仠姝�</b> 鈥斺�� 鍙暀涓�鏉°��</li>
+ * <li>鏈�鍚庣粺涓�鍥炲啓鏍囧織浣嶏細鍛戒腑缁村害 = {@code 1}锛涘叾浣欑淮搴� = {@code 2}锛堣烦杩囷級锛�
+ * 涓�<b>鏃犺鍛戒腑鍝釜缁村害锛寋@code deptcheck_flag} 涓�瀹氫細琚啓鎴愰潪 0</b>
+ * 鈥斺�� 杩欏氨鏄�"涓嶅啀琚笅涓�杞壂鎻忛噸澶嶇敓鎴�"鐨勪繚璇併��</li>
+ * </ol>
+ * 鍙︽湁涓�閬撳厹搴曞湪 {@code InhospSubtaskWriter#writeInSubTask}锛氳惤搴撳墠鎸�
+ * {@code patid + inhospid + taskid} 鍒ら噸锛岃 {@link VisitTaskCreateApi#existsSubtask}銆�
+ *
+ * <h3>绔欑偣宸紓锛堜繚鐣欙級</h3>
+ * {@code xh} 鍙仛绉戝缁村害 鈥斺�� {@link #addDimension} 閲岀粺涓�鎸℃帀鐥呭尯/鐤剧梾銆�
*
* @param inhosp 寰呭鐞嗙殑鍑洪櫌鎮h��
* @param archive 鎮h�呮。妗�
- * @param rule 宸叉煡濂界殑瑙勫垯锛泏@code null} = 鏈厤缃鍒欙紙鍏ㄩ儴鐢熸垚锛�
+ * @param rule 宸叉煡濂界殑瑙勫垯锛泏@code null} = 璇ョ瀹�/鐥呭尯鏈厤缃鍒�
* @param config {@code sys_config: visit.early.day}
*/
public void addSubTaskByRule(VisitInhospRow inhosp, VisitArchiveRow archive,
VisitTaskRule rule, String config) {
try {
- if (rule == null) {
- // 鍘� L1709-1716锛氳鍒欎负绌猴紝鍏ㄩ儴鐢熸垚
- log.info("銆愬熀浜庤鍒欍�戞偅鑰厈}鏈厤缃鍒欙紝鎵ц鍏ㄩ儴鐢熸垚閫昏緫", inhosp.getInhospid());
- addDeptSubTaskForPatient(inhosp, archive, config);
- if (!SITE_XH.equals(active)) {
- addWardSubTaskForPatient(inhosp, archive, config);
- addIcd10SubTaskForPatient(inhosp, archive, config);
- }
- return;
- }
- // 鍘� L1717-1726锛氭湁瑙勫垯锛屾寜瑙勫垯鎵ц
- log.info("銆愬熀浜庤鍒欍�戞偅鑰厈}鏌ヨ鍒拌鍒欙細deptRule={}, wradRule={}, diagRule={}",
- inhosp.getInhospid(), rule.getDeptRule(), rule.getWradRule(), rule.getDiagRule());
+ List<Integer> order = resolveDimensionOrder(rule);
+ log.info("銆愬熀浜庤鍒欍�戞偅鑰厈}瑙勫垯锛歞eptRule={}, wradRule={}, diagRule={}锛涚淮搴﹀皾璇曢『搴�={}",
+ inhosp.getInhospid(),
+ rule == null ? null : rule.getDeptRule(),
+ rule == null ? null : rule.getWradRule(),
+ rule == null ? null : rule.getDiagRule(), order);
- boolean deptIsPrimary = "1".equals(rule.getDeptRule());
- boolean wardIsPrimary = "1".equals(rule.getWradRule());
- boolean diagIsPrimary = "1".equals(rule.getDiagRule());
- boolean deptIsSecondary = "2".equals(rule.getDeptRule());
- boolean wardIsSecondary = "2".equals(rule.getWradRule());
- boolean diagIsSecondary = "2".equals(rule.getDiagRule());
-
- boolean hasPrimaryRule = deptIsPrimary || wardIsPrimary || diagIsPrimary;
-
- if (!hasPrimaryRule) {
- // 鍘� L1829-1837锛氭病鏈夐瑕佽鍒欙紝鍏ㄩ儴鐢熸垚
- log.info("銆愬熀浜庤鍒欍�戞棤棣栬瑙勫垯锛屾墽琛屽叏閮ㄧ敓鎴愰�昏緫");
- addDeptSubTaskForPatient(inhosp, archive, config);
- if (!SITE_XH.equals(active)) {
- addWardSubTaskForPatient(inhosp, archive, config);
- addIcd10SubTaskForPatient(inhosp, archive, config);
- }
- return;
- }
-
- // 鍘� L1730-1754锛氬厛鎵ц鎵�鏈夎鍒�=1 鐨勬柟娉�
- int deptGenCount = 0;
- int wardGenCount = 0;
- int diagGenCount = 0;
-
- if (deptIsPrimary) {
- log.info("銆愬熀浜庤鍒欍�戞墽琛岀瀹ら瑕佽鍒�");
- deptGenCount = addDeptSubTaskForPatient(inhosp, archive, config);
- }
- if (!SITE_XH.equals(active)) {
- if (wardIsPrimary) {
- log.info("銆愬熀浜庤鍒欍�戞墽琛岀梾鍖洪瑕佽鍒�");
- wardGenCount = addWardSubTaskForPatient(inhosp, archive, config);
- }
- if (diagIsPrimary) {
- log.info("銆愬熀浜庤鍒欍�戞墽琛岀柧鐥呴瑕佽鍒�");
- diagGenCount = addIcd10SubTaskForPatient(inhosp, archive, config);
+ Integer hit = null;
+ for (Integer type : order) {
+ log.info("銆愬熀浜庤鍒欍�戞偅鑰厈}灏濊瘯缁村害{}锛坽}锛�", inhosp.getInhospid(), type, dimensionName(type));
+ if (generateOneForDimension(inhosp, archive, type, config)) {
+ hit = type;
+ break;
}
}
- int primaryGeneratedCount = deptGenCount + wardGenCount + diagGenCount;
- log.info("銆愬熀浜庤鍒欍�戦瑕佽鍒欐墽琛岀粨鏋�: deptGen={}, wardGen={}, diagGen={}, total={}",
- deptGenCount, wardGenCount, diagGenCount, primaryGeneratedCount);
-
- String remark = inhosp.getRemark();
-
- if (primaryGeneratedCount > 0) {
- // 鍘� L1758-1796锛氳嚦灏戜竴涓瑕佽鍒欐垚鍔�
- log.info("銆愬熀浜庤鍒欍�戦瑕佽鍒欐湁鎴愬姛(count={})锛屽皢娆¤瑙勫垯瀵瑰簲flag璁句负2", primaryGeneratedCount);
- if (deptIsSecondary) {
- updateCheckFlag(inhosp, 1, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";棣栬瑙勫垯宸茬敓鎴愶紝娆¤瑙勫垯璺宠繃" : "棣栬瑙勫垯宸茬敓鎴愶紝娆¤瑙勫垯璺宠繃");
- }
- if (!SITE_XH.equals(active)) {
- if (wardIsSecondary) {
- updateCheckFlag(inhosp, 2, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";棣栬瑙勫垯宸茬敓鎴愶紝娆¤瑙勫垯璺宠繃" : "棣栬瑙勫垯宸茬敓鎴愶紝娆¤瑙勫垯璺宠繃");
- }
- if (diagIsSecondary) {
- updateCheckFlag(inhosp, 3, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";棣栬瑙勫垯宸茬敓鎴愶紝娆¤瑙勫垯璺宠繃" : "棣栬瑙勫垯宸茬敓鎴愶紝娆¤瑙勫垯璺宠繃");
- }
- }
- if (deptIsPrimary && deptGenCount > 0) {
- updateCheckFlag(inhosp, 1, "1", StringUtils.isNotEmpty(remark)
- ? remark + ";绉戝棣栬瑙勫垯鐢熸垚鎴愬姛" : "绉戝棣栬瑙勫垯鐢熸垚鎴愬姛");
- }
- if (!SITE_XH.equals(active)) {
- if (wardIsPrimary && wardGenCount > 0) {
- updateCheckFlag(inhosp, 2, "1", StringUtils.isNotEmpty(remark)
- ? remark + ";鐥呭尯棣栬瑙勫垯鐢熸垚鎴愬姛" : "鐥呭尯棣栬瑙勫垯鐢熸垚鎴愬姛");
- }
- if (diagIsPrimary && diagGenCount > 0) {
- updateCheckFlag(inhosp, 3, "1", StringUtils.isNotEmpty(remark)
- ? remark + ";鐤剧梾棣栬瑙勫垯鐢熸垚鎴愬姛" : "鐤剧梾棣栬瑙勫垯鐢熸垚鎴愬姛");
- }
- }
- if (deptIsPrimary && deptGenCount == 0) {
- updateCheckFlag(inhosp, 1, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";绉戝棣栬瑙勫垯鐢熸垚澶辫触" : "绉戝棣栬瑙勫垯鐢熸垚澶辫触");
- }
- if (!SITE_XH.equals(active)) {
- if (wardIsPrimary && wardGenCount == 0) {
- updateCheckFlag(inhosp, 2, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";鐥呭尯棣栬瑙勫垯鐢熸垚澶辫触" : "鐥呭尯棣栬瑙勫垯鐢熸垚澶辫触");
- }
- if (diagIsPrimary && diagGenCount == 0) {
- updateCheckFlag(inhosp, 3, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";鐤剧梾棣栬瑙勫垯鐢熸垚澶辫触" : "鐤剧梾棣栬瑙勫垯鐢熸垚澶辫触");
- }
- }
- } else {
- // 鍘� L1797-1828锛氭墍鏈夐瑕佽鍒欏叏閮ㄥけ璐� 鈫� 鎶� =1 鐨勭疆 2锛岀劧鍚庢墽琛屾瑕佽鍒�
- log.info("銆愬熀浜庤鍒欍�戦瑕佽鍒欏叏閮ㄥけ璐ワ紝灏�=1鐨刦lag璁句负2锛屽紑濮嬫墽琛屾瑕佽鍒�");
- if (deptIsPrimary) {
- updateCheckFlag(inhosp, 1, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";绉戝棣栬瑙勫垯鍏ㄩ儴澶辫触" : "绉戝棣栬瑙勫垯鍏ㄩ儴澶辫触");
- }
- if (!SITE_XH.equals(active)) {
- if (wardIsPrimary) {
- updateCheckFlag(inhosp, 2, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";鐥呭尯棣栬瑙勫垯鍏ㄩ儴澶辫触" : "鐥呭尯棣栬瑙勫垯鍏ㄩ儴澶辫触");
- }
- if (diagIsPrimary) {
- updateCheckFlag(inhosp, 3, "2", StringUtils.isNotEmpty(remark)
- ? remark + ";鐤剧梾棣栬瑙勫垯鍏ㄩ儴澶辫触" : "鐤剧梾棣栬瑙勫垯鍏ㄩ儴澶辫触");
- }
- }
- if (deptIsSecondary) {
- log.info("銆愬熀浜庤鍒欍�戞墽琛岀瀹ゆ瑕佽鍒�");
- addDeptSubTaskForPatient(inhosp, archive, config);
- }
- if (!SITE_XH.equals(active)) {
- if (wardIsSecondary) {
- log.info("銆愬熀浜庤鍒欍�戞墽琛岀梾鍖烘瑕佽鍒�");
- addWardSubTaskForPatient(inhosp, archive, config);
- }
- if (diagIsSecondary) {
- log.info("銆愬熀浜庤鍒欍�戞墽琛岀柧鐥呮瑕佽鍒�");
- addIcd10SubTaskForPatient(inhosp, archive, config);
- }
- }
- }
+ writeFlagsAfterRun(inhosp, hit);
} catch (Exception e) {
// 鍘� L1839-1845
e.printStackTrace();
log.error("銆愬熀浜庤鍒欍�戞偅鑰厈}澶勭悊寮傚父锛歿}", inhosp.getInhospid(), e.getMessage());
updateCheckFlag(inhosp, 1, "2", "鍩轰簬瑙勫垯澶勭悊寮傚父");
}
+ }
+
+ /**
+ * 缁村害灏濊瘯椤哄簭锛�2026-10 鍙e緞锛夈��
+ * <p>
+ * 瑙勫垯涓� {@code null} 鈫� {@code [绉戝, 鐥呭尯]}锛氭寜 {@code service_taskdept} 閲岃鎮h�呯殑
+ * 绉戝/鐥呭尯"閫氱敤妯″潡"鐢熸垚锛涜繖鏄笟鍔℃槑纭姹傜殑鍏滃簳鍙e緞锛堟鏃�<b>涓嶈繘鍏ョ柧鐥呯淮搴�</b>锛夈��
+ * <p>
+ * 鏈夎鍒� 鈫� {@code [棣栬缁村害鈥�, 娆¤缁村害鈥�, 绉戝, 鐥呭尯]}锛�
+ * 棣栬浼樺厛銆佹瑕佸叾鍚庯紝鏈�鍚庣敤閫氱敤鍏滃簳淇濊瘉"鑳界敓鎴愪竴鏉″氨鐢熸垚涓�鏉�"銆�
+ */
+ private List<Integer> resolveDimensionOrder(VisitTaskRule rule) {
+ boolean xhSite = SITE_XH.equals(active);
+ List<Integer> order = new ArrayList<>(4);
+ if (rule == null) {
+ addDimension(order, 1, xhSite);
+ addDimension(order, 2, xhSite);
+ return order;
+ }
+ boolean deptIsPrimary = "1".equals(rule.getDeptRule());
+ boolean wardIsPrimary = "1".equals(rule.getWradRule());
+ boolean diagIsPrimary = "1".equals(rule.getDiagRule());
+ boolean deptIsSecondary = "2".equals(rule.getDeptRule());
+ boolean wardIsSecondary = "2".equals(rule.getWradRule());
+ boolean diagIsSecondary = "2".equals(rule.getDiagRule());
+ // 鍚屼紭鍏堢骇鍐呭浐瀹氶『搴忥細绉戝 鈫� 鐥呭尯 鈫� 鐤剧梾
+ if (deptIsPrimary) {
+ addDimension(order, 1, xhSite);
+ }
+ if (wardIsPrimary) {
+ addDimension(order, 2, xhSite);
+ }
+ if (diagIsPrimary) {
+ addDimension(order, 3, xhSite);
+ }
+ if (deptIsSecondary) {
+ addDimension(order, 1, xhSite);
+ }
+ if (wardIsSecondary) {
+ addDimension(order, 2, xhSite);
+ }
+ if (diagIsSecondary) {
+ addDimension(order, 3, xhSite);
+ }
+ // 閫氱敤鍏滃簳锛氳鍒欓噷閰嶇殑缁村害鍏ㄩ兘鍙栦笉鍒颁换鍔℃椂锛屼粛鎸� service_taskdept 鐨� 绉戝/鐥呭尯 鐢熸垚涓�鏉�
+ addDimension(order, 1, xhSite);
+ addDimension(order, 2, xhSite);
+ return order;
+ }
+
+ /** 杩藉姞涓�涓�欓�夌淮搴︼紱{@code xh} 绔欑偣鍙厑璁哥瀹ょ淮搴︼紙鍘� {@code !active.equals("xh")} 鐨勭瓑浠峰啓娉曪級 */
+ private void addDimension(List<Integer> order, int type, boolean xhSite) {
+ if (xhSite && type != 1) {
+ return;
+ }
+ if (!order.contains(type)) {
+ order.add(type);
+ }
+ }
+
+ private String dimensionName(int type) {
+ switch (type) {
+ case 1:
+ return "绉戝";
+ case 2:
+ return "鐥呭尯";
+ case 3:
+ return "鐤剧梾";
+ default:
+ return "鏈煡(" + type + ")";
+ }
+ }
+
+ /** 灏濊瘯涓�涓淮搴︼紝杩斿洖"鏄惁鐪熺殑鐢熸垚浜嗭紙鎴栨湰鏉ュ氨宸茬粡鏈夛級涓�鏉″瓙浠诲姟" */
+ private boolean generateOneForDimension(VisitInhospRow inhosp, VisitArchiveRow archive,
+ int type, String config) {
+ switch (type) {
+ case 1:
+ return addDeptSubTaskForPatient(inhosp, archive, config) > 0;
+ case 2:
+ return addWardSubTaskForPatient(inhosp, archive, config) > 0;
+ case 3:
+ return addIcd10SubTaskForPatient(inhosp, archive, config) > 0;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * 涓�杞敓鎴愮粨鏉熷悗鐨勬爣蹇椾綅鍥炲啓銆�
+ * <p>
+ * 鈿狅笍 鍏抽敭鐐癸細鎵弿閿槸 {@code pat_med_inhosp.deptcheck_flag = '0'}锛�
+ * 鎵�浠�<b>涓嶈鍛戒腑鍝釜缁村害锛宒eptcheck_flag 閮藉繀椤昏鍐欐垚 1 鎴� 2</b>锛�
+ * 鍚﹀垯涓嬩竴杞壂鎻忎細鎶婅繖涓偅鑰呭啀澶勭悊涓�閬嶏紙2026-10 閲嶅鐢熸垚鐨勭洿鎺ュ師鍥狅級銆�
+ * <p>
+ * 娌$敓鎴愭椂锛坽@code hit == null}锛夊埢鎰�<b>鍙ˉ鎵弿閿�</b>锛氬悇缁村害鏂规硶宸茬粡鎶婃洿鍏蜂綋鐨勫師鍥�
+ * 锛�"璇ユ偅鑰呮墍鍦ㄧ瀹ゆ湭閰嶇疆绂婚櫌闀挎湡浠诲姟;" / "鐢熸垚瀛愪换鍔″け璐� 1" 鈥︼級鍐欒繘
+ * {@code long_task_reason} 浜嗭紝杩欓噷鍏堢敤涓�娆¢噸璇诲垽鏂� deptcheck 鏄惁宸茬粡闈� 0锛�
+ * 閬垮厤鎶婂畠瑕嗙洊鎴愭硾娉涚殑"鏈敓鎴愰殢璁夸换鍔�"銆�
+ *
+ * @param hit 鍛戒腑鐨勭淮搴︼紱{@code null} = 涓変釜缁村害閮芥病鑳界敓鎴�
+ */
+ private void writeFlagsAfterRun(VisitInhospRow inhosp, Integer hit) {
+ boolean xhSite = SITE_XH.equals(active);
+ if (hit == null) {
+ VisitInhospRow fresh = inhospMapper.selectByInhospid(inhosp.getInhospid());
+ String current = fresh == null ? null : fresh.getDeptcheckFlag();
+ if (current == null || "0".equals(current)) {
+ updateCheckFlag(inhosp, 1, "2", composeRemark(inhosp, "鏈敓鎴愰殢璁夸换鍔★紙鏃犲彲鐢ㄩ暱鏈熶换鍔★級"));
+ }
+ return;
+ }
+ for (int type = 1; type <= 3; type++) {
+ if (xhSite && type != 1) {
+ continue;
+ }
+ if (hit == type) {
+ updateCheckFlag(inhosp, type, "1", composeRemark(inhosp,
+ "鎸変紭鍏堢骇鐢熸垚涓�鏉¢殢璁夸换鍔★紙缁村害=" + dimensionName(type) + "锛�"));
+ } else {
+ updateCheckFlag(inhosp, type, "2", composeRemark(inhosp,
+ "宸茬敓鎴愪竴鏉¢殢璁夸换鍔★紙缁村害=" + dimensionName(hit) + "锛夛紝鏈淮搴﹁烦杩�"));
+ }
+ }
+ }
+
+ /** 鎷� reason锛氭部鐢ㄥ師瀹炵幇鐨� {@code remark + ";xxx"} 褰㈠紡 */
+ private String composeRemark(VisitInhospRow inhosp, String text) {
+ String remark = inhosp.getRemark();
+ return StringUtils.isNotEmpty(remark) ? remark + ";" + text : text;
}
/**
@@ -296,11 +337,14 @@
/**
* 涓哄崟涓偅鑰呯敓鎴愮瀹ょ淮搴︾殑瀛愪换鍔°��
+ * <p>
+ * 鈿狅笍 2026-10 鍙e緞鍙樻洿锛氬懡涓涓暱鏈熶换鍔℃椂<b>鍙敓鎴愮涓�鏉$湡姝h惤搴撶殑浠诲姟</b>
+ * 锛堝師瀹炵幇鏄� {@code for (t : taskdepts) writeInSubTask(...); generatedCount++;}锛�
+ * 涓�涓瀹ら厤 N 涓暱鏈熶换鍔″氨浼氱敓鎴� N 鏉� 鈥斺�� 鏄�"鍚屼竴鎮h�呭嚑鍗佹潯"鐨勪富鍥狅級銆�
*
- * @return 鐢熸垚鐨勫瓙浠诲姟鏁伴噺
+ * @return 鐢熸垚鐨勫瓙浠诲姟鏁伴噺锛�0 鎴� 1锛�
*/
public int addDeptSubTaskForPatient(VisitInhospRow inhosp, VisitArchiveRow archive, String config) {
- int generatedCount = 0;
try {
// 鍘� L1857-1864锛氭寜鎮h�呮墍鍦ㄧ瀹ゆ煡璇ョ瀹ょ殑闀挎湡浠诲姟锛坉ept_type=1 + service_type=2锛�
VisitTaskdeptRow query = new VisitTaskdeptRow();
@@ -325,8 +369,12 @@
updateInhosp(u);
} else {
for (VisitTaskdeptRow t : taskdepts) {
- subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 1, config);
- generatedCount++;
+ // 涓�涓偅鑰呭彧鐣欎竴鏉★細绗竴鏉$湡姝h惤搴撶殑鍗宠繑鍥�
+ if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 1, config)) {
+ return 1;
+ }
+ log.info("銆愮瀹や换鍔°�戞偅鑰厈}浠诲姟{}鏈敓鎴愬瓙浠诲姟锛屽皾璇曚笅涓�涓�欓��",
+ inhosp.getInhospid(), t.getTaskId());
}
}
} catch (Exception e) {
@@ -339,7 +387,7 @@
u.setLongTaskReason("绉戝浠诲姟澶勭悊寮傚父");
updateInhosp(u);
}
- return generatedCount;
+ return 0;
}
// ==========================================================================
@@ -348,11 +396,12 @@
/**
* 涓哄崟涓偅鑰呯敓鎴愮梾鍖虹淮搴︾殑瀛愪换鍔°��
+ * <p>
+ * 鈿狅笍 鍚屼笂锛氬懡涓涓暱鏈熶换鍔℃椂鍙敓鎴愮涓�鏉$湡姝h惤搴撶殑锛堝師瀹炵幇鏄叏鐢熸垚锛夈��
*
- * @return 鐢熸垚鐨勫瓙浠诲姟鏁伴噺
+ * @return 鐢熸垚鐨勫瓙浠诲姟鏁伴噺锛�0 鎴� 1锛�
*/
public int addWardSubTaskForPatient(VisitInhospRow inhosp, VisitArchiveRow archive, String config) {
- int generatedCount = 0;
try {
String errorreason = null;
List<VisitTaskdeptRow> taskdeptList = null;
@@ -386,8 +435,12 @@
updateInhosp(u);
} else {
for (VisitTaskdeptRow t : taskdeptList) {
- subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 2, config);
- generatedCount++;
+ // 涓�涓偅鑰呭彧鐣欎竴鏉★細绗竴鏉$湡姝h惤搴撶殑鍗宠繑鍥�
+ if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 2, config)) {
+ return 1;
+ }
+ log.info("銆愮梾鍖轰换鍔°�戞偅鑰厈}浠诲姟{}鏈敓鎴愬瓙浠诲姟锛屽皾璇曚笅涓�涓�欓��",
+ inhosp.getInhospid(), t.getTaskId());
}
}
} catch (Exception e) {
@@ -400,7 +453,7 @@
u.setLongTaskReason("鐥呭尯浠诲姟澶勭悊寮傚父");
updateInhosp(u);
}
- return generatedCount;
+ return 0;
}
// ==========================================================================
@@ -409,11 +462,12 @@
/**
* 涓哄崟涓偅鑰呯敓鎴愮柧鐥呯淮搴︾殑瀛愪换鍔°��
+ * <p>
+ * 鈿狅笍 鍚屼笂锛氬懡涓涓暱鏈熶换鍔℃椂鍙敓鎴愮涓�鏉$湡姝h惤搴撶殑锛堝師瀹炵幇鏄叏鐢熸垚锛夈��
*
- * @return 鐢熸垚鐨勫瓙浠诲姟鏁伴噺
+ * @return 鐢熸垚鐨勫瓙浠诲姟鏁伴噺锛�0 鎴� 1锛�
*/
public int addIcd10SubTaskForPatient(VisitInhospRow inhosp, VisitArchiveRow archive, String config) {
- int generatedCount = 0;
try {
// 鍘� L1945-1947
if (StringUtils.isEmpty(inhosp.getLeaveicd10code())) {
@@ -454,14 +508,21 @@
// 鍘� L1975-1983锛氬繀椤荤瀹ゆ垨鐥呭尯鑳藉尮閰嶄笂鎵嶅缓
if (StringUtils.isNotEmpty(t.getDeptCode())
&& t.getDeptCode().equals(inhosp.getLeaveldeptcode())) {
- subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config);
- generatedCount++;
flag = 1;
+ // 涓�涓偅鑰呭彧鐣欎竴鏉★細绗竴鏉$湡姝h惤搴撶殑鍗宠繑鍥�
+ if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config)) {
+ return 1;
+ }
+ log.info("銆愮柧鐥呬换鍔°�戞偅鑰厈}浠诲姟{}鏈敓鎴愬瓙浠诲姟锛屽皾璇曚笅涓�涓�欓��",
+ inhosp.getInhospid(), t.getTaskId());
} else if (StringUtils.isNotEmpty(t.getWardCode())
&& t.getWardCode().equals(inhosp.getLeavehospitaldistrictcode())) {
- subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config);
- generatedCount++;
flag = 1;
+ if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config)) {
+ return 1;
+ }
+ log.info("銆愮柧鐥呬换鍔°�戞偅鑰厈}浠诲姟{}鏈敓鎴愬瓙浠诲姟锛屽皾璇曚笅涓�涓�欓��",
+ inhosp.getInhospid(), t.getTaskId());
}
}
if (flag == 0) {
@@ -484,7 +545,7 @@
u.setLongTaskReason("鐤剧梾浠诲姟澶勭悊寮傚父");
updateInhosp(u);
}
- return generatedCount;
+ return 0;
}
// ==========================================================================
--
Gitblit v1.9.3