From 2867cf7076a584a34e63174cec0a8b89cdd03e4c Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期五, 06 十一月 2026 13:42:55 +0800
Subject: [PATCH] Merge branch 'master' into smartor_ls_261103
---
doc/api/generalInterface接口文档.md | 1146 ++++++++++++++++++
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java | 154 ++
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java | 19
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java | 136 +
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java | 358 +++++
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java | 12
pom.xml | 44
smartor/pom.xml | 6
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java | 27
doc/api/妇幼专科档案生成接口文档_20261104.md | 342 +++++
doc/api/generalInterface/JZ_MZ_WanChengJZ接口文档.md | 252 ++++
ruoyi-patarchive/src/main/resources/mapper/patarchive/PatSpecificArchiveGenerateConfigMapper.xml | 8
ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/mapper/PatSpecificArchiveGenerateConfigMapper.java | 12
ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/IPatSpecificArchiveGenerateConfigService.java | 9
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskPreachformMapper.java | 9
ruoyi-admin/pom.xml | 22
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskPreachformMapper.xml | 18
sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql | 95 +
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml | 180 ++
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java | 33
ruoyi-common/pom.xml | 11
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java | 39
ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/impl/PatSpecificArchiveGenerateConfigServiceImpl.java | 30
ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java | 25
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java | 16
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java | 17
docs/妇幼专科档案生成测试报告_20261104.md | 307 ++++
smartor/src/main/java/com/smartor/service/IPatSpecificArchiveGenerateService.java | 22
smartor/src/main/java/com/smartor/service/impl/PatSpecificArchiveGenerateServiceImpl.java | 329 +++++
smartor/src/main/java/com/smartor/common/SpecificArchiveConstants.java | 21
31 files changed, 3,589 insertions(+), 112 deletions(-)
diff --git "a/doc/api/generalInterface/JZ_MZ_WanChengJZ\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/doc/api/generalInterface/JZ_MZ_WanChengJZ\346\216\245\345\217\243\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..592a4be
--- /dev/null
+++ "b/doc/api/generalInterface/JZ_MZ_WanChengJZ\346\216\245\345\217\243\346\226\207\346\241\243.md"
@@ -0,0 +1,252 @@
+# JZ_MZ_WanChengJZ 闂ㄦ�ヨ瘖瀹屾垚鎺ヨ瘖 鎺ュ彛鏂囨。
+
+> 鎺ュ彛锛歚POST /smartor/serviceExternal/generalInterface`
+> 娑堟伅绫诲瀷锛歚JZ_MZ_WanChengJZ`
+> 鏂囨。鐢熸垚鏃ユ湡锛�2026-10-20
+> 璇存槑锛氬瓧娈靛悕鍖哄垎澶у皬鍐欙紝璇蜂弗鏍兼寜鏂囨。涓殑鎷奸煶瀛楁鍚嶄紶鍙傘��
+
+---
+
+## 涓�銆佹帴鍙h鏄�
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 鎺ュ彛鍦板潃 | `/smartor/serviceExternal/generalInterface` |
+| 璇锋眰鏂瑰紡 | `POST` |
+| Content-Type | `application/json;charset=UTF-8` |
+| 璁よ瘉鏂瑰紡 | 鏃犻渶鐧诲綍锛坄/smartor/serviceExternal/**` 宸查厤缃� `permitAll`锛� |
+| 娑堟伅绫诲瀷 | `JZ_MZ_WanChengJZ` |
+| 涓氬姟鍚箟 | 闂ㄦ�ヨ瘖瀹屾垚鎺ヨ瘖 |
+| 澶勭悊鍏ュ彛 | `addFinshJZInfo` |
+| 鏄惁钀藉簱 | 鏄紙瀹為檯钀藉簱锛� |
+| 涓氬姟璇存槑 | 鎺ユ敹闂ㄦ�ヨ瘖瀹屾垚鎺ヨ瘖淇℃伅锛屽啓鍏ラ棬璇婂氨璇婅褰曪紝骞舵寜闅忚澶╂暟鐢熸垚闅忚浠诲姟銆� |
+
+## 浜屻�佽姹傛姤鏂�
+
+### 2.1 鎶ユ枃缁撴瀯
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiTou | object | 鏄� | 娑堟伅澶� |
+| YeWuXX | object | 鏄� | 涓氬姟淇℃伅锛屽繀椤诲寘鍚� `XiaoXiID` |
+
+### 2.2 娑堟伅澶� `XiaoXiTou`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| FaSongFCSJC | String | 鍚� | 鍙戦�佹柟绋嬪簭绠�绉帮紝榛樿 `ZJHES` |
+| FaSongJGID | String | 鏄� | 鍙戦�佹満鏋� ID锛屽搴旂郴缁� `orgid`锛涢儴鍒嗘秷鎭被鍨嬬敤瀹冭鐩栦笟鍔′腑鐨勬満鏋� ID |
+| FaSongJGMC | String | 鍚� | 鍙戦�佹満鏋勫悕绉� |
+| FaSongSJ | String | 鍚� | 鍙戦�佹椂闂达紝寤鸿 `yyyy-MM-dd HH:mm:ss` |
+| FaSongXTJC | String | 鍚� | 鍙戦�佺郴缁熺畝绉帮紝榛樿 `SUIFANGXT` |
+| FaSongXTMC | String | 鍚� | 鍙戦�佺郴缁熷悕绉帮紝榛樿 `闅忚绯荤粺` |
+| XiaoXiID | String | 鍚� | 娑堟伅 ID锛涙湰鎺ュ彛鍝嶅簲鍥炴樉鍙栫殑鏄� `YeWuXX.XiaoXiID` |
+| XiaoXiLX | String | 鏄� | 娑堟伅绫诲瀷锛屽喅瀹氫笟鍔″垎鏀紝缂哄け鎴栦负绌烘椂鎺ュ彛鎶ラ敊 |
+| XiaoXiMC | String | 鍚� | 娑堟伅鍚嶇О |
+| ZuHuID | String | 鍚� | 鍖婚櫌 ID |
+| ZuHuMC | String | 鍚� | 鍖婚櫌鍚嶇О |
+
+### 2.3 涓氬姟淇℃伅 `YeWuXX`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 娑堟伅 ID锛屽師鏍锋斁鍏ュ搷搴� `Data.XiaoXiID`锛涚己澶辨椂杩斿洖 `null` |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紱`ZuZhiJGID` 鍙渷鐣ワ紝浠g爜浣跨敤娑堟伅澶� `FaSongJGID` |
+| JiuZhenXX | object | 鏄� | 灏辫瘖淇℃伅锛岃嚦灏戝寘鍚瀹ゃ�佸氨璇婃棩鏈� |
+| ZhenDuanList | array | 鏄� | 璇婃柇鍒楄〃锛屼笉鑳戒负绌� |
+| WenZhenList | array | 鏄� | 闂瘖鍒楄〃锛屼笉鑳戒负绌� |
+
+### 2.4 璇锋眰绀轰緥
+
+```json
+{
+ "XiaoXiTou": {
+ "FaSongJGID": "47255004333112711A1001",
+ "FaSongJGMC": "涓芥按甯備腑鍖婚櫌",
+ "FaSongSJ": "2026-10-20 10:00:00",
+ "XiaoXiLX": "JZ_MZ_WanChengJZ",
+ "XiaoXiID": "MSG-20261020-0001"
+ },
+ "YeWuXX": {
+ "XiaoXiID": "MSG-20261020-0001",
+ "BingRenXX": {
+ "BingRenID": "BR0002",
+ "XingMing": "鏉庡洓",
+ "JiuZhenYWID": "MZ20261020002",
+ "JiuZhenKH": "MZ0002",
+ "BingAnHao": "BA20261020002",
+ "ZhengJianHM": "330102198505051234",
+ "XingBieDM": "2",
+ "ChuShengRQ": "1985-05-05 10:00:00",
+ "LianXiDH": "13700000000"
+ },
+ "JiuZhenXX": {
+ "JiuZhenKSID": "D002",
+ "JiuZhenKSMC": "濡囩",
+ "JiuZhenRQ": "2026-10-20 10:30:00",
+ "sfrq": "2026-11-20 00:00:00"
+ },
+ "ZhenDuanList": [
+ {
+ "ZhenDuanYSID": "D1002",
+ "ZhenDuanYSXM": "璧靛尰鐢�",
+ "ZhenDuanID": "O20.0",
+ "ZhenDuanMC": "鍏堝厗娴佷骇",
+ "ZhenDuanLBDM": "1",
+ "ZhenDuanLBMC": "涓昏瘖鏂�",
+ "Icd10": "O20.0"
+ }
+ ],
+ "WenZhenList": [
+ {
+ "WenZhenLXMC": "涓昏瘔",
+ "NeiRong": "鍋滅粡50澶╋紝闃撮亾娴佽1澶�"
+ },
+ {
+ "WenZhenLXMC": "鐜扮梾鍙�",
+ "NeiRong": "鎮h�呭仠缁�50澶╋紝1澶╁墠鍑虹幇闃撮亾娴佽鈥︹��"
+ },
+ {
+ "WenZhenLXMC": "闅忚澶╂暟",
+ "NeiRong": "30"
+ },
+ {
+ "WenZhenLXMC": "闅忚澶╂暟鍗曚綅",
+ "NeiRong": "澶�"
+ }
+ ]
+ }
+}
+```
+
+## 涓夈�佷笟鍔″瓧娈佃鏄�
+
+### 3.1 `BingRenXX` 鎮h�呭熀鏈俊鎭�
+
+> 鏈烘瀯 ID 浼氳娑堟伅澶� `FaSongJGID` 瑕嗙洊銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 缁勭粐鏈烘瀯 ID锛堝啓鍏� `orgid`锛� |
+| ZuZhiJGMC | String | 鍚� | 缁勭粐鏈烘瀯鍚嶇О |
+| BingRenID | String | 鏄� | 鐥呬汉 ID锛屽啓鍏� `patid_his/patno` |
+| XingMing | String | 鏄� | 鎮h�呭鍚� |
+| JiuZhenYWID | String | 鏄� | 灏辫瘖涓氬姟 ID锛屼笌 `BingAnHao` 鍏卞悓瀹氫綅浣忛櫌/闂ㄨ瘖璁板綍 |
+| JiuZhenKH | String | 鍚� | 灏辫瘖鍗″彿锛涜瘉浠跺彿鐮佷负绌烘椂浣滀负鎮h�呮。妗堝敮涓�鏍囪瘑 |
+| BingAnHao | String | 鏄� | 鐥呮鍙凤紙浠g爜鎸夌梾妗堝彿鍖归厤锛屼笉浣跨敤浣忛櫌鍙凤級 |
+| ZhengJianLXMC | String | 鍚� | 璇佷欢绫诲瀷鍚嶇О锛屽啓鍏ユ。妗� `idcardtype` |
+| ZhengJianHM | String | 鏄紙寤鸿锛� | 璇佷欢鍙风爜锛屾偅鑰呮。妗堝敮涓�鏍囪瘑锛涗负绌烘椂浣跨敤 `JiuZhenKH` |
+| XingBieDM | String | 鍚� | 鎬у埆浠g爜锛屽繀椤讳负鏁板瓧瀛楃涓诧紙濡� `1`/`2`锛夛紝浠g爜鎵ц `Long.valueOf` |
+| ChuShengRQ | String | 鏄紙寤鸿锛� | 鍑虹敓鏃ユ湡锛屼唬鐮佹寜 `yyyy-MM-dd hh:mm:ss` 瑙f瀽锛屽缓璁紶瀹屾暣鏃堕棿 |
+| DangQianKSID | String | 鏄� | 褰撳墠绉戝 ID锛屽啓鍏ヤ綇闄�/鍑洪櫌绉戝 |
+| DangQianKSMC | String | 鏄� | 褰撳墠绉戝鍚嶇О |
+| DangQianBQID | String | 鏄� | 褰撳墠鐥呭尯 ID |
+| DangQianBQMC | String | 鏄� | 褰撳墠鐥呭尯鍚嶇О |
+| DangQianCWMC | String | 鍚� | 搴婁綅鍚嶇О锛屽啓鍏ヤ綇闄� `bedNo` |
+| RuYuanSJ | Date | 鏄紙鍏ラ櫌/鍏ョ锛� | 鍏ラ櫌鏃堕棿锛屾牸寮� `yyyy-MM-dd HH:mm:ss` |
+| LianXiDH | String | 鏄紙寤鸿锛� | 鑱旂郴鐢佃瘽锛屽啓鍏ユ偅鑰呮。妗堟墜鏈哄彿 |
+| LianXiRDH | String | 鍚� | 鑱旂郴浜虹數璇濓紱`LianXiDH` 涓虹┖鏃朵綔涓烘偅鑰呮墜鏈哄彿 |
+| GuoJiMC | String | 鍚� | 鍥界睄鍚嶇О锛屽啓鍏ユ。妗� `nativePlace` |
+| MinZuMC | String | 鍚� | 姘戞棌鍚嶇О锛屽啓鍏ユ。妗� `nation` |
+| XianZhuZXX | String | 鍚� | 鐜颁綇鍧�锛涗紭鍏堜簬 `DiZhiXXList` 鍐欏叆妗f |
+| CaoZuoRID | String | 鍚� | 鎿嶄綔浜� ID |
+| CaoZuoRXM | String | 鍚� | 鎿嶄綔浜哄鍚� |
+| ZeRenHSID | String | 鍚� | 璐d换鎶ゅ+ ID |
+| ZeRenHSXM | String | 鍚� | 璐d换鎶ゅ+濮撳悕 |
+| ZhuZhiYSID | String | 鍚� | 涓绘不鍖荤敓 ID |
+| ZhuZhiYSXM | String | 鍚� | 涓绘不鍖荤敓濮撳悕 |
+| JingGuanYSID | String | 鍚� | 缁忕鍖荤敓 ID |
+| JingGuanYSXM | String | 鍚� | 缁忕鍖荤敓濮撳悕 |
+| DuanHaoXX | String | 鍚� | 鐭彿淇℃伅 |
+| BingRenLXDM | String | 鍚� | 鐥呬汉绫诲瀷浠g爜锛屾墜鏈褰曞啓鍏� `inhospstate` |
+
+### 3.2 `JiuZhenXX` 灏辫瘖淇℃伅
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| JiuZhenKSID | String | 鏄� | 灏辫瘖绉戝 ID |
+| JiuZhenKSMC | String | 鏄� | 灏辫瘖绉戝鍚嶇О |
+| JiuZhenRQ | Date | 鏄� | 灏辫瘖鏃ユ湡锛宍yyyy-MM-dd HH:mm:ss`锛屽啓鍏ラ棬璇� `admitdate` |
+| sfrq | Date | 鍚� | 闅忚鏃ユ湡锛屽啓鍏ラ棬璇� `fudate` |
+| CaoZuoRID | String | 鍚� | 鎿嶄綔浜� ID |
+| CaoZuoRXM | String | 鍚� | 鎿嶄綔浜哄鍚� |
+
+### 3.3 `ZhenDuanList` 璇婃柇鍒楄〃
+
+> `ZhenDuanLBMC=涓昏瘖鏂璥 鐨勮褰曠敤浜庨棬璇婁富璇婃柇銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZhenDuanYSID | String | 鍚� | 璇婃柇鍖荤敓 ID |
+| ZhenDuanYSXM | String | 鍚� | 璇婃柇鍖荤敓濮撳悕 |
+| ZhenDuanID | String | 鍚� | 璇婃柇 ID |
+| ZhenDuanMC | String | 鏄� | 璇婃柇鍚嶇О |
+| ZhenDuanLBDM | String | 鍚� | 璇婃柇绫诲埆浠g爜 |
+| ZhenDuanLBMC | String | 鏄� | 璇婃柇绫诲埆鍚嶇О锛涚瓑浜� `涓昏瘖鏂璥 鏃跺啓鍏ラ棬璇婁富璇婃柇 |
+| Icd10 | String | 鏄紙寤鸿锛� | ICD10 缂栫爜 |
+
+### 3.4 `WenZhenList` 闂瘖鍒楄〃
+
+> 鐢ㄤ簬鐜扮梾鍙层�佷富璇夈�侀殢璁垮ぉ鏁板強鍗曚綅銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| WenZhenLXMC | String | 鏄紙鑻ヤ紶锛� | 闂瘖绫诲瀷鍚嶇О锛歚鐜扮梾鍙瞏銆乣涓昏瘔`銆乣闅忚澶╂暟`銆乣闅忚澶╂暟鍗曚綅` |
+| NeiRong | String | 鏄紙鑻ヤ紶锛� | 闂瘖鍐呭锛沗闅忚澶╂暟` 蹇呴』涓烘暣鏁帮紝鍗曚綅鏀寔 `澶ー/`鍛╜/`鏈坄/`骞碻 |
+
+## 鍥涖�佸鐞嗛�昏緫
+
+1. 璇诲彇鎮h�呫�佸氨璇娿�佽瘖鏂�侀棶璇婁俊鎭��
+2. 浣跨敤 `FaSongJGID` 浣滀负鏈烘瀯 ID锛屾柊澧�/鏇存柊鎮h�呮。妗堛��
+3. 鎸� `BingAnHao + JiuZhenYWID` 鏌ヨ闂ㄨ瘖璁板綍锛屽瓨鍦ㄥ垯鏇存柊锛屼笉瀛樺湪鍒欐柊澧炪��
+4. 涓昏瘖鏂啓鍏ヨ瘖鏂悕绉般�佸尰鐢熴�両CD10锛屽苟缃� `fuflag=1`銆�
+5. `鐜扮梾鍙瞏 鍐欏叆 `hpi`锛宍涓昏瘔` 鍐欏叆 `mainsuit`銆�
+6. 鑻ヤ紶浜� `闅忚澶╂暟` 涓� `fuflag=1`锛屾寜澶�/鍛�/鏈�/骞存崲绠楀悗鐢熸垚闅忚浠诲姟銆�
+7. 涓芥按甯傚骞间繚鍋ラ櫌锛坄orgid = 47226079133110211G1001`锛夊畬鎴愭帴璇婂悗锛屾寜 `pat_specific_archive_generate_config` 閰嶇疆鐢熸垚濡囩/鍎跨涓撶妗f锛涘叾浠栨満鏋勪笉鐢熸垚銆傝瑙� `doc/api/濡囧辜涓撶妗f鐢熸垚鎺ュ彛鏂囨。_20261104.md`銆�
+
+## 浜斻�佸搷搴旇鏄�
+
+鎴愬姛鍝嶅簲锛�
+
+```json
+{
+ "Code": "0",
+ "Message": "success",
+ "Data": {
+ "XiaoXiID": "MSG-20261020-0001",
+ "ChuangJianSJ": 1760928000000
+ }
+}
+```
+
+澶辫触鍝嶅簲锛堜笟鍔¤繑鍥� `false` 鎴栧鐞嗗紓甯革級锛�
+
+```json
+{
+ "Code": "500",
+ "Message": "error",
+ "Data": {
+ "XiaoXiID": "MSG-20261020-0001",
+ "ChuangJianSJ": 1760928000000
+ }
+}
+```
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+| --- | --- | --- |
+| Code | String | `"0"` 鎴愬姛锛宍"500"` 澶辫触 |
+| Message | String | `success` / `error` |
+| Data.XiaoXiID | String | 鍘熸牱杩斿洖璇锋眰 `YeWuXX.XiaoXiID` |
+| Data.ChuangJianSJ | long | 鏈嶅姟鍣ㄥ綋鍓嶆椂闂达紙姣鏃堕棿鎴筹級 |
+
+## 鍏�佹敞鎰忎簨椤�
+
+- `ZhenDuanList`銆乣WenZhenList` 浠g爜鏈仛绌哄垽鏂紝缂哄け浼氭姤閿欍��
+- `闅忚澶╂暟` 蹇呴』鏄暣鏁帮紝`闅忚澶╂暟鍗曚綅` 鏀寔 `澶ー銆乣鍛╜銆乣鏈坄銆乣骞碻銆�
+- 闂ㄨ瘖璁板綍鍖归厤閿负 `BingAnHao + JiuZhenYWID`銆�
+- 鎶ユ枃缂哄皯 `XiaoXiTou`銆乣XiaoXiLX`銆乣YeWuXX` 鏃跺彲鑳藉湪鍝嶅簲缁勮闃舵鐩存帴鎶涘紓甯革紝杩斿洖 HTTP 500銆�
+- 鏃ユ湡鏃堕棿闄ょ壒鍒鏄庡缁熶竴浣跨敤 `yyyy-MM-dd HH:mm:ss`銆�
+
+---
+
+鏈枃妗f牴鎹綋鍓嶄唬鐮佺敓鎴愶紱鑻ュ悗绔�昏緫璋冩暣锛岃鍚屾鏇存柊鏂囨。銆�
diff --git "a/doc/api/generalInterface\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/doc/api/generalInterface\346\216\245\345\217\243\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..87ee26f
--- /dev/null
+++ "b/doc/api/generalInterface\346\216\245\345\217\243\346\226\207\346\241\243.md"
@@ -0,0 +1,1146 @@
+# `/smartor/serviceExternal/generalInterface` 閫氱敤鎺ュ彛鏂囨。
+
+> 鐢熸垚鏃ユ湡锛�2026-10-20
+> 瀵瑰簲浠g爜锛歚ServiceExternalController#generalInterface`銆乣ServiceExternalServiceImpl#generalInterface/getType` 鍙婂悇涓氬姟澶勭悊鏂规硶
+> 璇存槑锛氭湰鏂囨。鎸夊綋鍓嶄唬鐮佸疄闄呰В鏋愮殑瀛楁鏁寸悊锛屽瓧娈靛悕鍖哄垎澶у皬鍐欙紝璇蜂弗鏍兼寜鏂囨。涓殑鎷奸煶瀛楁鍚嶄紶鍙傘��
+> 鎸夋秷鎭被鍨嬫媶鍒嗙殑鐙珛鏂囨。瑙侊細`doc/api/generalInterface/00_鎺ュ彛鏂囨。绱㈠紩.md`锛堝惈鍚屽悕 PDF锛夈��
+
+---
+
+## 涓�銆佹帴鍙e熀鏈俊鎭�
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 鎺ュ彛鍦板潃 | `/smartor/serviceExternal/generalInterface` |
+| 璇锋眰鏂瑰紡 | `POST` |
+| Content-Type | `application/json;charset=UTF-8` |
+| 璁よ瘉鏂瑰紡 | 鏃犻渶鐧诲綍锛坄SecurityConfig` 涓� `/smartor/serviceExternal/**` 宸查厤缃� `permitAll`锛� |
+| 璇锋眰浣� | 鍗曚釜 JSON 瀵硅薄锛岀敱 `XiaoXiTou`锛堟秷鎭ご锛�+ `YeWuXX`锛堜笟鍔′俊鎭級缁勬垚 |
+| 鍝嶅簲浣� | 鍥哄畾缁撴瀯锛歚Code`銆乣Message`銆乣Data` |
+| 涓氬姟鍒嗗彂瀛楁 | `XiaoXiTou.XiaoXiLX`锛堟秷鎭被鍨嬶級 |
+| 鏈嶅姟鍦板潃绀轰緥 | `http://鏈嶅姟IP:绔彛/smartor/serviceExternal/generalInterface` |
+
+### 1.1 鎺ュ彛瀹氫綅
+
+璇ユ帴鍙f槸 HIS/绗笁鏂圭郴缁熷悜闅忚绯荤粺鎺ㄩ�佹暟鎹殑**缁熶竴鍏ュ彛**锛岄�氳繃 `XiaoXiTou.XiaoXiLX` 鍖哄垎 41 绉嶄笟鍔℃秷鎭紝鍒嗗埆澶勭悊锛�
+
+- 鏈烘瀯銆佺瀹ゃ�佺敤鎴枫�佺瀹ょ敤鎴枫�佺梾鍖猴紙`JG_*`锛�
+- 鎮h�呮。妗堛�佷綇闄㈢櫥璁般�佸叆绉戙�佸嚭闄€�佸嚭闄㈣褰曘�侀鍑洪櫌銆佸彇娑堝叆闄�/鍑洪櫌銆佺鎶紙`BR_DA_*`銆乣JZ_ZY_*`銆乣BL_JL_*`锛�
+- 闂ㄦ�ヨ瘖瀹屾垚鎺ヨ瘖锛坄JZ_MZ_WanChengJZ`锛�
+- 妫�鏌�/妫�楠岀敵璇枫�佷慨鏀广�佹姤鍛婏紙`JC_*`銆乣JY_*`锛�
+- 鎵嬫湳鐢宠銆佹挙閿�锛坄SM_*`锛�
+- 鐤剧梾鐩綍锛坄GY_ZD_JiBingML`锛�
+- 闅忚浠诲姟锛坄fu_task`锛�
+
+鍏朵腑 22 绉嶆秷鎭細瀹為檯钀藉簱锛屽彟澶� 19 绉嶆秷鎭綋鍓嶄笉钀藉簱锛堝鏁颁粎璁板綍鏃ュ織鍚庣洿鎺ヨ繑鍥炴垚鍔燂紝瑙佺涓夌珷锛夈��
+
+---
+
+## 浜屻�佽姹傛姤鏂囩粨鏋�
+
+### 2.1 椤跺眰缁撴瀯
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiTou | object | 鏄� | 娑堟伅澶达紝缂哄け鏃舵帴鍙f姤閿� |
+| YeWuXX | object | 鏄� | 涓氬姟淇℃伅锛涚己澶辨椂鍝嶅簲缁勮闃舵鎶ラ敊锛�**蹇呴』鍖呭惈 `XiaoXiID`** |
+
+```json
+{
+ "XiaoXiTou": {
+ "FaSongJGID": "47255004333112711A1001",
+ "FaSongJGMC": "涓芥按甯備腑鍖婚櫌",
+ "FaSongSJ": "2026-10-20 10:00:00",
+ "XiaoXiLX": "JZ_ZY_RuYuanDJ",
+ "XiaoXiID": "5FA92AFB-9833-4608-87C7-F56A654AC171"
+ },
+ "YeWuXX": {
+ "XiaoXiID": "5FA92AFB-9833-4608-87C7-F56A654AC171"
+ }
+}
+```
+
+### 2.2 娑堟伅澶� `XiaoXiTou`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| FaSongFCSJC | String | 鍚� | 鍙戦�佹柟绋嬪簭绠�绉帮紝榛樿 `ZJHES` |
+| FaSongJGID | String | 鏄� | 鍙戦�佹満鏋� ID锛屽搴旂郴缁� `orgid`锛涢儴鍒嗘秷鎭被鍨嬬敤瀹冭鐩栦笟鍔′腑鐨勬満鏋� ID |
+| FaSongJGMC | String | 鍚� | 鍙戦�佹満鏋勫悕绉� |
+| FaSongSJ | String | 鍚� | 鍙戦�佹椂闂达紝寤鸿 `yyyy-MM-dd HH:mm:ss` |
+| FaSongXTJC | String | 鍚� | 鍙戦�佺郴缁熺畝绉帮紝榛樿 `SUIFANGXT` |
+| FaSongXTMC | String | 鍚� | 鍙戦�佺郴缁熷悕绉帮紝榛樿 `闅忚绯荤粺` |
+| XiaoXiID | String | 鍚� | 娑堟伅 ID锛�**璇ユ帴鍙g殑鍝嶅簲鍥炴樉鍙栫殑鏄� `YeWuXX.XiaoXiID`锛屼笉鏄瀛楁** |
+| XiaoXiLX | String | 鏄� | 娑堟伅绫诲瀷锛屽喅瀹氫笟鍔″垎鏀紝缂哄け鎴栦负绌烘椂鎺ュ彛鎶ラ敊 |
+| XiaoXiMC | String | 鍚� | 娑堟伅鍚嶇О |
+| ZuHuID | String | 鍚� | 鍖婚櫌 ID |
+| ZuHuMC | String | 鍚� | 鍖婚櫌鍚嶇О |
+
+### 2.3 涓氬姟淇℃伅 `YeWuXX` 鍏叡瀛楁
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 娑堟伅 ID锛屽師鏍锋斁鍏ュ搷搴� `Data.XiaoXiID`锛涚己澶辨椂杩斿洖 `null` |
+| BingRenXX | object | 瑙嗘秷鎭被鍨� | 鎮h�呭熀鏈俊鎭紝瑙� 4.1 |
+| DiZhiXXList | array | 瑙嗘秷鎭被鍨� | 鎮h�呭湴鍧�鍒楄〃锛岃 4.2 |
+| LianXiRList | array | 瑙嗘秷鎭被鍨� | 鎮h�呰仈绯讳汉鍒楄〃锛岃 4.3 |
+| ZhenDuanList | array | 瑙嗘秷鎭被鍨� | 璇婃柇鍒楄〃锛岃 4.4 |
+| JiuZhenXX | object | 瑙嗘秷鎭被鍨� | 灏辫瘖/浣忛櫌杩囩▼淇℃伅锛岃 4.5 |
+| RuKeXX | object | 浠呭叆绉� | 鍏ョ淇℃伅锛岃 4.6 |
+| ChuYuanJL | object | 瑙嗘秷鎭被鍨� | 鍑洪櫌璁板綍锛屽唴閮ㄤ娇鐢� `SuiFangJH`锛岃 4.7 |
+| BingRenKZXXList | array | 鍚� | 鎮h�呮墿灞曚俊鎭紙鐭彿锛夛紝瑙� 4.8 |
+| WenZhenList | array | 浠呭畬鎴愭帴璇� | 闂瘖淇℃伅锛岃 4.9 |
+| 鍏朵粬涓氬姟瀵硅薄 | object/array | 瑙嗘秷鎭被鍨� | `KeShiXX`銆乣YongHuXX`銆乣ZuZhiJGXX`銆乣BingQuXX`銆乣JiBingMLXX`銆乣JianChaSQ`銆乣JianChaBG`銆乣ShouShuSQ`銆乣ShouShuCX` 绛夛紝瑙佺浜旂珷 |
+
+---
+
+## 涓夈�佹秷鎭被鍨嬶紙`XiaoXiLX`锛夋�昏〃
+
+| 搴忓彿 | XiaoXiLX | 涓氬姟鍚箟 | 澶勭悊鏂规硶 | 鏄惁钀藉簱 |
+| --- | --- | --- | --- | --- |
+| 1 | `BR_DA_DangAnJL` | 鎮h�呮。妗堝缓绔� | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 2 | `BR_DA_DangAnXG` | 鎮h�呮。妗堜慨鏀� | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 3 | `JZ_MZ_ZhenDuanXXLR` | 闂ㄨ瘖璇婃柇淇℃伅褰曞叆 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 4 | `JZ_ZY_ZhenDuanXXLR` | 浣忛櫌璇婃柇淇℃伅褰曞叆 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 5 | `YZ_MZ_YiZhuSQ` | 闂ㄨ瘖鍖诲槺鐢宠 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 6 | `YZ_ZY_YiZhuZX` | 浣忛櫌鍖诲槺鎵ц | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 7 | `YZ_MZ_YiZhuXG` | 闂ㄨ瘖鍖诲槺淇敼 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 8 | `YZ_MZ_YiZhuCX` | 闂ㄨ瘖鍖诲槺鎾ら攢 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 9 | `YZ_MZ_YiZhuCS` | 闂ㄨ瘖鍖诲槺鍒犻櫎 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 10 | `JC_SQ_ShenQing` | 妫�鏌ョ敵璇� | `addInspectService` | 鏄紙妫�鏌ヤ富琛級 |
+| 11 | `JC_SQ_XiuGai` | 妫�鏌ョ敵璇蜂慨鏀� | `addInspectService` | 鏄紙妫�鏌ヤ富琛級 |
+| 12 | `JC_SQ_CheXiao` | 妫�鏌ユ挙閿� | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 13 | `JC_BG_BaoGao` | 妫�鏌ユ姤鍛� | `addInspectBGService` | 鏄紙妫�鏌ユ姤鍛婃槑缁嗭級 |
+| 14 | `JY_SQ_ShenQing` | 妫�楠岀敵璇� | `addInspectService` | 鏄紙妫�鏌ヤ富琛紝projecttype=1锛� |
+| 15 | `JY_SQ_CheXiao` | 妫�楠屾挙閿� | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 16 | `JY_SQ_XiuGai` | 妫�楠岀敵璇蜂慨鏀� | `addInspectService` | 鏄紙妫�鏌ヤ富琛級 |
+| 17 | `JY_SQ_BiaoBenCJ` | 妫�楠屾爣鏈噰闆� | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 18 | `JY_SQ_QuXiaoBBCJ` | 鍙栨秷妫�楠屾爣鏈噰闆� | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 19 | `SM_SQ_ShenQing` | 鎵嬫湳鐢宠 | `addOperationInfo` | 鏄紙鎵嬫湳涓昏〃+鏄庣粏锛� |
+| 20 | `SM_SQ_ShouShuAP` | 鎵嬫湳瀹夋帓 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 21 | `SM_SQ_CheXiao` | 鎵嬫湳鎾ら攢 | `cancelOperationInfo` | 鏄紙杞垹闄ゆ墜鏈強浠诲姟锛� |
+| 22 | `TJ_YW_BaoGaoXX` | 浣撴鎶ュ憡 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 23 | `TJ_YW_QuXiaoBG` | 鍙栨秷浣撴鎶ュ憡 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 24 | `JG_ZZ_JiGou` | 缁勭粐鏈烘瀯 | `addOrganInfo` | 鏄紙`base_organization`锛� |
+| 25 | `JG_ZZ_KeShi` | 绉戝 | `addDeptInfo` | 鏄紙`sys_dept`锛� |
+| 26 | `JG_YH_JiBenXX` | 鐢ㄦ埛鍩烘湰淇℃伅 | `addUserInfo` | 鏄紙`sys_user`锛� |
+| 27 | `JG_YH_KeShiYH` | 绉戝鐢ㄦ埛鍏崇郴 | `addUserDeptInfo` | 鏄紙`sys_user_dept`锛� |
+| 28 | `fu_task` | 闅忚浠诲姟 | `addTaskInfo` | 鍚︼紙褰撳墠涓虹┖瀹炵幇锛� |
+| 29 | `GY_ZD_JiBingML` | 鐤剧梾鐩綍 | `addDiseaseInfo` | 鏄紙`icd10`锛� |
+| 30 | `YP_ZD_YaoPinCDJG` | 鑽搧浜у湴浠锋牸 | 浠呰褰曟棩蹇� | 鍚︼紙鐩存帴杩斿洖鎴愬姛锛� |
+| 31 | `JZ_MZ_WanChengJZ` | 闂ㄦ�ヨ瘖瀹屾垚鎺ヨ瘖 | `addFinshJZInfo` | 鏄紙闂ㄨ瘖灏辫瘖+浠诲姟锛� |
+| 32 | `JZ_ZY_RuYuanDJ` | 鍏ラ櫌鐧昏 | `addInHospInfo` | 鏄紙妗f+浣忛櫌璁板綍锛� |
+| 33 | `JZ_ZY_QuXiaoRY` | 鍙栨秷鍏ラ櫌鐧昏 | `cancelInHospInfo` | 鏄紙浣忛櫌璁板綍缃垹闄わ級 |
+| 34 | `JZ_ZY_ChuYuan` | 鎮h�呭嚭闄� | `addOutHospInfo` | 鏄紙浣忛櫌璁板綍+鍑洪櫌淇℃伅锛� |
+| 35 | `BL_JL_ChuYuanJL` | 鎮h�呭嚭闄㈣褰� | `addOutHospJLInfo` | 鏄紙浣忛櫌璁板綍+鍑洪櫌淇℃伅锛� |
+| 36 | `JZ_ZY_QuXiaoCY` | 鍙栨秷鍑洪櫌 | `cancelOutHospInfo` | 鏄紙鍥為��鍦ㄩ櫌鐘舵�佸苟娓呬换鍔★級 |
+| 37 | `JZ_ZY_YuChuYuan` | 鎮h�呴鍑洪櫌 | `addPreOutHospInfo` | 鏄紙浣忛櫌璁板綍棰勫嚭闄㈢姸鎬侊級 |
+| 38 | `JZ_ZY_LiQiang` | 鎮h�呯鎶� | `editRescueFinishedOutHospInfo` | 鏄紙鍥炲~鍑洪櫌鏃堕棿/姝讳骸澶勭悊锛� |
+| 39 | `JG_ZZ_BingQu` | 鐥呭尯 | `addWardAreaInfo` | 鏄紙`sys_dept`锛宒eptType=2锛� |
+| 40 | `JG_ZZ_YiLiaoZYS` | 鍖荤枟缁勫尰鐢� | `addMedicalTeam` | 鍚︼紙褰撳墠涓虹┖瀹炵幇锛� |
+| 41 | `JZ_ZY_RuKe` | 鍏ョ | `addInDeptInfo` | 鏄紙妗f+浣忛櫌璁板綍锛� |
+
+> 鏈湪 `switch` 涓尮閰嶅埌鐨� `XiaoXiLX` 浼氳蛋榛樿鍒嗘敮锛岀洿鎺ヨ繑鍥炴垚鍔燂紙`Code=0`锛夛紝涓嶄骇鐢熶换浣曟暟鎹彉鏇淬�傝璋冪敤鏂圭‘淇濈被鍨嬫嫾鍐欏畬鍏ㄤ竴鑷淬��
+
+---
+
+## 鍥涖�佸叕鍏变笟鍔″璞�
+
+### 4.1 `BingRenXX` 鎮h�呭熀鏈俊鎭�
+
+瀵瑰簲 `ExternalInHospPatientInfo`銆備綇闄€�佹帴璇娿�佹鏌ャ�佹墜鏈被娑堟伅鍧囦娇鐢ㄨ瀵硅薄銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 缁勭粐鏈烘瀯 ID锛堝啓鍏� `orgid`锛夛紱`JZ_MZ_WanChengJZ` 浼氭敼鐢ㄦ秷鎭ご `FaSongJGID` |
+| ZuZhiJGMC | String | 鍚� | 缁勭粐鏈烘瀯鍚嶇О |
+| MPI | String | 鍚� | 灞呮皯涓荤储寮� |
+| BingRenID | String | 鏄� | 鐥呬汉 ID锛屽啓鍏� `patid_his/patno`锛屾槸鎮h�呭尮閰嶄緷鎹箣涓� |
+| XingMing | String | 鏄� | 鎮h�呭鍚� |
+| XingMingQP | String | 鍚� | 濮撳悕鍏ㄦ嫾 |
+| JiuZhenYWLX | String | 鍚� | 灏辫瘖涓氬姟绫诲瀷 |
+| JiuZhenYWID | String | 鏄� | 灏辫瘖涓氬姟 ID锛屼笌 `BingAnHao` 鍏卞悓瀹氫綅浣忛櫌/闂ㄨ瘖璁板綍 |
+| JiuZhenKH | String | 鍚� | 灏辫瘖鍗″彿锛涜瘉浠跺彿鐮佷负绌烘椂浣滀负鎮h�呮。妗堝敮涓�鏍囪瘑 |
+| ZhuYuanHao | String | 鍚� | 浣忛櫌鍙� |
+| BingAnHao | String | 鏄� | 鐥呮鍙凤紙浠g爜娉ㄩ噴鏄庣‘浣跨敤鐥呮鍙凤紝涓嶄娇鐢ㄤ綇闄㈠彿锛� |
+| ZhengJianLXDM | String | 鍚� | 璇佷欢绫诲瀷浠g爜 |
+| ZhengJianLXMC | String | 鍚� | 璇佷欢绫诲瀷鍚嶇О锛屽啓鍏ユ。妗� `idcardtype` |
+| ZhengJianHM | String | 鏄紙寤鸿锛� | 璇佷欢鍙风爜锛屾偅鑰呮。妗堝敮涓�鏍囪瘑锛涗负绌烘椂浣跨敤 `JiuZhenKH` |
+| XingBieDM | String | 鍚� | 鎬у埆浠g爜锛�**蹇呴』涓烘暟瀛楀瓧绗︿覆**锛堝 `1`/`2`锛夛紝浠g爜鎵ц `Long.valueOf` |
+| XingBieMC | String | 鍚� | 鎬у埆鍚嶇О |
+| ChuShengRQ | String | 鏄紙寤鸿锛� | 鍑虹敓鏃ユ湡锛屾牸寮� `yyyy-MM-dd hh:mm:ss`锛堜唬鐮佸疄闄呰В鏋愭牸寮忥紝寤鸿涓�骞朵紶鏃堕棿锛� |
+| NianLing | String | 鍚� | 骞撮緞锛屼唬鐮佷笉浣跨敤锛屽勾榫勭敱鍑虹敓鏃ユ湡璁$畻 |
+| NianLingDW | String | 鍚� | 骞撮緞鍗曚綅锛屼唬鐮佷笉浣跨敤 |
+| DangQianKSID | String | 鏄� | 褰撳墠绉戝 ID锛屽啓鍏ヤ綇闄�/鍑洪櫌绉戝 |
+| DangQianKSMC | String | 鏄� | 褰撳墠绉戝鍚嶇О |
+| DangQianBQID | String | 鏄� | 褰撳墠鐥呭尯 ID锛屽啓鍏ヤ綇闄㈢梾鍖� |
+| DangQianBQMC | String | 鏄� | 褰撳墠鐥呭尯鍚嶇О |
+| DangQianCWID | String | 鍚� | 褰撳墠搴婁綅 ID |
+| DangQianCWMC | String | 鍚� | 褰撳墠搴婁綅鍚嶇О锛屽啓鍏ヤ綇闄� `bedNo` |
+| ZhuYuanCS | Long | 鍚� | 浣忛櫌娆℃暟 |
+| RuYuanSJ | Date | 鏄紙鍏ラ櫌/鍏ョ锛� | 鍏ラ櫌鏃堕棿锛屽啓鍏ヤ綇闄� `starttime`锛涙牸寮� `yyyy-MM-dd HH:mm:ss` |
+| FeiYongLBID | String | 鍚� | 璐圭敤绫诲埆 ID |
+| FeiYongLBMC | String | 鍚� | 璐圭敤绫诲埆鍚嶇О |
+| FeiYongXZID | String | 鍚� | 璐圭敤鎬ц川 ID |
+| FeiYongXZMC | String | 鍚� | 璐圭敤鎬ц川鍚嶇О |
+| LianXiDH | String | 鏄紙寤鸿锛� | 鑱旂郴鐢佃瘽锛屽啓鍏ユ偅鑰呮。妗堟墜鏈哄彿 |
+| LianXiRDH | String | 鍚� | 鑱旂郴浜虹數璇濓紱`LianXiDH` 涓虹┖鏃朵綔涓烘偅鑰呮墜鏈哄彿 |
+| DanWeiDH | String | 鍚� | 鍗曚綅鐢佃瘽 |
+| DanWeiMC | String | 鍚� | 鍗曚綅鍚嶇О |
+| HunYinDM | String | 鍚� | 濠氬Щ浠g爜 |
+| HunYinMC | String | 鍚� | 濠氬Щ鍚嶇О |
+| ZhiYeDM | String | 鍚� | 鑱屼笟浠g爜 |
+| ZhiYeMC | String | 鍚� | 鑱屼笟鍚嶇О |
+| GuoJiDM | String | 鍚� | 鍥界睄浠g爜 |
+| GuoJiMC | String | 鍚� | 鍥界睄鍚嶇О锛屽啓鍏ユ。妗� `nativePlace` |
+| MinZuDM | String | 鍚� | 姘戞棌浠g爜 |
+| MinZuMC | String | 鍚� | 姘戞棌鍚嶇О锛屽啓鍏ユ。妗� `nation` |
+| CaoZuoRID | String | 鍚� | 鎿嶄綔浜� ID锛堝叆闄㈢櫥璁� `operatorId`锛� |
+| CaoZuoRXM | String | 鍚� | 鎿嶄綔浜哄鍚嶏紙鍏ラ櫌鐧昏 `operator`锛� |
+| YingErBZ | String | 鍚� | 濠村効鏍囧織 |
+| MuQinZYJZID | String | 鍚� | 姣嶄翰灏辫瘖 ID |
+| ChanFuBZ | String | 鍚� | 浜у鏍囧織 |
+| XianZhuZXX | String | 鍚� | 鐜颁綇鍧�锛�**浼樺厛浜� `DiZhiXXList`** 鍐欏叆妗f鐜颁綇鍧� |
+| ZeRenHSID | String | 鍚� | 璐d换鎶ゅ+ ID |
+| ZeRenHSXM | String | 鍚� | 璐d换鎶ゅ+濮撳悕 |
+| ZhuZhiYSID | String | 鍚� | 涓绘不鍖荤敓 ID |
+| ZhuZhiYSXM | String | 鍚� | 涓绘不鍖荤敓濮撳悕 |
+| JingGuanYSID | String | 鍚� | 缁忕鍖荤敓 ID |
+| JingGuanYSXM | String | 鍚� | 缁忕鍖荤敓濮撳悕 |
+| DuanHaoXX | String | 鍚� | 鐭彿淇℃伅锛涘嚭闄㈡椂鍙敱 `BingRenKZXXList` 瑕嗙洊 |
+| BingRenLXDM | String | 鍚� | 鐥呬汉绫诲瀷浠g爜锛屾墜鏈褰曞啓鍏� `inhospstate` |
+| BingRenLXMC | String | 鍚� | 鐥呬汉绫诲瀷鍚嶇О |
+
+> `externalInHospPatientLiaisonInfos` 瀛楁涓嶄細浠庢姤鏂囪鍙栵紝鑱旂郴浜鸿浣跨敤 `YeWuXX.LianXiRList`銆�
+
+### 4.2 `DiZhiXXList` 鎮h�呭湴鍧�淇℃伅
+
+瀵瑰簲 `ExternalInHospPatientAddrInfo`锛屽彇绗竴鏉′綔涓烘偅鑰呯幇浣忓潃锛坄XianZhuZXX` 涓虹┖鏃讹級銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| DiZhiLX | String | 鍚� | 鍦板潃绫诲瀷 |
+| DiZhiXX | String | 鍚� | 鍦板潃淇℃伅锛涙湁鍊兼椂鐩存帴浣滀负鐜颁綇鍧�锛屽惁鍒欑敱鐪�/甯�/鍖�/涔¢晣/鏉�/鍏朵粬鎷兼帴 |
+| ShengFenDM | String | 鍚� | 鐪佷唤浠g爜 |
+| ShengFenMC | String | 鍚� | 鐪佷唤鍚嶇О |
+| ShiDiQDM | String | 鍚� | 甯傚湴鍖轰唬鐮� |
+| ShiDiQMC | String | 鍚� | 甯傚湴鍖哄悕绉� |
+| XianQuDM | String | 鍚� | 鍘垮尯浠g爜 |
+| XianQuMC | String | 鍚� | 鍘垮尯鍚嶇О |
+| XiangZhenDM | String | 鍚� | 涔¢晣浠g爜 |
+| XiangZhenMC | String | 鍚� | 涔¢晣鍚嶇О |
+| CunJiDM | String | 鍚� | 鏉戠骇浠g爜 |
+| CunJiMC | String | 鍚� | 鏉戠骇鍚嶇О |
+| QiTaXX | String | 鍚� | 鍏朵粬淇℃伅 |
+| YouBian | String | 鍚� | 閭紪 |
+
+### 4.3 `LianXiRList` 鎮h�呰仈绯讳汉淇℃伅
+
+瀵瑰簲 `ExternalInHospPatientLiaisonInfo`锛屽啓鍏� `pat_archivecontact`銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| LianXiRXM | String | 鍚� | 鑱旂郴浜哄鍚� |
+| LianXiRDH | String | 鍚� | 鑱旂郴浜虹數璇� |
+| GuanXiDM | String | 鍚� | 鍏崇郴浠g爜 |
+| GuanXiMC | String | 鍚� | 鍏崇郴鍚嶇О锛屽啓鍏ヨ仈绯讳汉 `relation` |
+
+### 4.4 `ZhenDuanList` 璇婃柇淇℃伅
+
+涓嶅悓娑堟伅绫诲瀷瀛楁涓嶅悓锛屾寜涓嬭〃浼犻�掋��
+
+**锛�1锛変綇闄㈢被锛堝叆闄㈢櫥璁般�佸嚭闄€�佸嚭闄㈣褰曘�侀鍑洪櫌锛�**
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZhenDuanID | String | 鍚� | 璇婃柇 ID |
+| ZhenDuanMC | String | 鏄� | 璇婃柇鍚嶇О |
+| Icd10 | String | 鏄紙寤鸿锛� | ICD10 缂栫爜锛涘嚭闄㈡椂鍐欏叆 `leaveicd10code` |
+
+**锛�2锛夐棬鎬ヨ瘖瀹屾垚鎺ヨ瘖锛坄JZ_MZ_WanChengJZ`锛�**
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZhenDuanYSID | String | 鍚� | 璇婃柇鍖荤敓 ID |
+| ZhenDuanYSXM | String | 鍚� | 璇婃柇鍖荤敓濮撳悕 |
+| ZhenDuanID | String | 鍚� | 璇婃柇 ID |
+| ZhenDuanMC | String | 鏄� | 璇婃柇鍚嶇О |
+| ZhenDuanLBDM | String | 鍚� | 璇婃柇绫诲埆浠g爜 |
+| ZhenDuanLBMC | String | 鏄� | 璇婃柇绫诲埆鍚嶇О锛涚瓑浜� `涓昏瘖鏂璥 鏃跺啓鍏ラ棬璇婁富璇婃柇銆佸尰鐢熴�両CD10 |
+| Icd10 | String | 鏄紙寤鸿锛� | ICD10 缂栫爜 |
+
+**锛�3锛夋鏌�/妫�楠岀敵璇凤紙`JianChaSQ.ZhenDuanList`锛�**
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZhenDuanID | String | 鍚� | 璇婃柇 ID |
+| ZhenDuanMC | String | 鍚� | 璇婃柇鍚嶇О |
+
+### 4.5 `JiuZhenXX` 灏辫瘖/浣忛櫌杩囩▼淇℃伅
+
+涓嶅悓娑堟伅绫诲瀷鎸夐渶鍙栧瓧娈碉紝鏈浣跨敤鐨勫瓧娈靛彲蹇界暐銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| JiuZhenKSID | String | 鎺ヨ瘖蹇呭~ | 灏辫瘖绉戝 ID |
+| JiuZhenKSMC | String | 鎺ヨ瘖蹇呭~ | 灏辫瘖绉戝鍚嶇О |
+| JiuZhenYSID | String | 鍚� | 灏辫瘖鍖荤敓 ID锛堝綋鍓嶄唬鐮佹湭钀藉簱锛� |
+| JiuZhenYSMC | String | 鍚� | 灏辫瘖鍖荤敓鍚嶇О锛堝綋鍓嶄唬鐮佹湭钀藉簱锛� |
+| JiuZhenRQ | Date | 鎺ヨ瘖蹇呭~ | 灏辫瘖鏃ユ湡锛屽啓鍏ラ棬璇� `admitdate`锛屾牸寮� `yyyy-MM-dd HH:mm:ss` |
+| sfrq | Date | 鍚� | 闅忚鏃ユ湡锛屽啓鍏ラ棬璇� `fudate`锛堜唬鐮佸娉ㄥ瓧娈靛緟 HIS 纭锛� |
+| HuanZheQXDM | String | 鍚� | 鎮h�呭幓鍚戜唬鐮� |
+| HuanZheQXMC | String | 鍚� | 鎮h�呭幓鍚戝悕绉� |
+| ChuYuanSJ | String | 鍑洪櫌蹇呭~ | 鍑洪櫌鏃堕棿锛屾牸寮� `yyyy-MM-dd HH:mm:ss` |
+| YuChuYSJ | String | 棰勫嚭闄㈠繀濉� | 棰勫嚭闄㈡椂闂达紝鏍煎紡 `yyyy-MM-dd HH:mm:ss` |
+| LiQiangSJ | String | 绂绘姠寤鸿蹇呭~ | 绂绘姠鏃堕棿锛屾牸寮� `yyyy-MM-dd HH:mm:ss`锛涚己澶辨椂鍙仛姝讳骸鏍囪澶勭悊 |
+| LiYuanQXDM | String | 棰勫嚭闄㈠繀濉� | 绂婚櫌鏂瑰紡浠g爜锛沗5` 琛ㄧず姝讳骸锛岃Е鍙戞浜℃偅鑰呭鐞� |
+| CaoZuoRID | String | 鍚� | 鎿嶄綔浜� ID |
+| CaoZuoRXM | String | 鍚� | 鎿嶄綔浜哄鍚� |
+| ZhuZhiYSID | String | 鍚� | 涓绘不鍖荤敓 ID锛堝啓鍏� `drcode`锛� |
+| ZhuZhiYSXM | String | 鍚� | 涓绘不鍖荤敓濮撳悕锛堝啓鍏� `drname`锛� |
+| ZeRenHSID | String | 鍚� | 璐d换鎶ゅ+ ID |
+| ZeRenHSXM | String | 鍚� | 璐d换鎶ゅ+濮撳悕 |
+| DangQianCWMC | String | 鍚� | 搴婁綅鍚嶇О锛堝啓鍏� `bedNo`锛� |
+| JingGuanYSID | String | 鍚� | 缁忕鍖荤敓 ID |
+| JingGuanYSXM | String | 鍚� | 缁忕鍖荤敓濮撳悕 |
+
+> 绂婚櫌鏂瑰紡浠g爜璇存槑锛歚1` 鍖诲槺绂婚櫌銆乣2` 鍖诲槺杞櫌銆乣3` 鍖诲槺杞ぞ鍖哄崼鐢熸湇鍔℃満鏋�/涔¢晣鍗敓闄€�乣4` 闈炲尰鍢辩闄€�乣5` 姝讳骸銆乣9` 鍏朵粬銆乣10` 浠嬪叆瀹ゃ�乣20` 鎵嬫湳瀹ゃ��
+
+### 4.6 `RuKeXX` 鍏ョ淇℃伅
+
+浠� `JZ_ZY_RuKe` 浣跨敤锛屽搴� `ExternalInDeptPatientInfo`銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| CaoZuoRID | String | 鍚� | 鎿嶄綔浜� ID |
+| CaoZuoRXM | String | 鍚� | 鎿嶄綔浜哄鍚� |
+| RuKeSJ | String | 鍚� | 鍏ョ鏃堕棿 |
+| RuYuanSJ | Date | 鍚� | 鍏ラ櫌鏃堕棿锛岃鐩� `BingRenXX.RuYuanSJ` |
+| YiLiaoZID | String | 鍚� | 鍖荤枟缁� ID |
+| YiLiaoZMC | String | 鍚� | 鍖荤枟缁勫悕绉� |
+| ZhuZhiYSID | String | 鍚� | 涓绘不鍖荤敓 ID |
+| ZhuZhiYSXM | String | 鍚� | 涓绘不鍖荤敓濮撳悕 |
+| ZeRenHSID | String | 鍚� | 璐d换鎶ゅ+ ID |
+| ZeRenHSXM | String | 鍚� | 璐d换鎶ゅ+濮撳悕 |
+| HuShiZID | String | 鍚� | 鎶ゅ+涓� ID |
+| HuShiZXM | String | 鍚� | 鎶ゅ+涓诲鍚� |
+| JingGuanYSID | String | 鍚� | 缁忕鍖荤敓 ID |
+| JingGuanYSXM | String | 鍚� | 缁忕鍖荤敓濮撳悕 |
+
+### 4.7 `ChuYuanJL.SuiFangJH` 闅忚璁″垝
+
+鍑洪櫌銆佸嚭闄㈣褰曘�侀鍑洪櫌娑堟伅浣跨敤锛岀敤浜庣敓鎴�/鏇存柊闅忚璁″垝銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| SuiFangBS | String | 鍚� | 闅忚鏍囪瘑锛宍0` 涓嶉渶瑕侀殢璁裤�乣1` 闇�瑕侊紱榛樿 `1` |
+| SuiFangRQ | String | 鍚� | 闅忚鏃ユ湡锛屾牸寮� `yyyy-MM-dd HH:mm:ss` |
+| SuiFangZQJY | String | 鍚� | 闅忚鍛ㄦ湡寤鸿 |
+| SuiFangFSDM | String | 鍚� | 闅忚鏂瑰紡浠g爜 |
+| SuiFangFSMC | String | 鍚� | 闅忚鏂瑰紡鍚嶇О |
+| FuZhenZD | String | 鍚� | 澶嶈瘖鎸囧 |
+| QiTaZKJBSF | String | 鍚� | 鍏朵粬涓撶绂佽ˉ闅忚璇存槑 |
+
+### 4.8 `BingRenKZXXList` 鎮h�呮墿灞曚俊鎭�
+
+鍑洪櫌锛坄JZ_ZY_ChuYuan`锛変娇鐢紝鐢ㄤ簬鎻愬彇鐭彿銆�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiangMuDM | String | 鏄紙鑻ヤ紶锛� | 椤圭洰浠g爜锛涚瓑浜� `DuanHaoXX` 鏃跺彇 `XiangMuZMC` 浣滀负鐭彿 |
+| XiangMuZMC | String | 鏄紙鑻ヤ紶锛� | 椤圭洰鍊� |
+
+绀轰緥锛�
+
+```json
+"BingRenKZXXList": [
+ { "XiangMuDM": "DuanHaoXX", "XiangMuZMC": "669999" }
+]
+```
+
+### 4.9 `WenZhenList` 闂瘖淇℃伅
+
+浠� `JZ_MZ_WanChengJZ` 浣跨敤銆備唬鐮佹寜 `WenZhenLXMC` 鍖归厤浠ヤ笅鍥涚被锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| WenZhenLXMC | String | 鏄紙鑻ヤ紶锛� | 闂瘖绫诲瀷鍚嶇О锛歚鐜扮梾鍙瞏銆乣涓昏瘔`銆乣闅忚澶╂暟`銆乣闅忚澶╂暟鍗曚綅` |
+| NeiRong | String | 鏄紙鑻ヤ紶锛� | 闂瘖鍐呭锛沗闅忚澶╂暟` 蹇呴』涓烘暣鏁帮紝`闅忚澶╂暟鍗曚綅` 鏀寔 `澶ー/`鍛╜/`鏈坄/`骞碻 |
+
+> 鍏朵粬瀛楁锛坄WenZhenLXDM`銆乣WenZhenSJ`銆乣WenZhenYSID`銆乣WenZhenYSXM`銆乣WenZhenKSID`銆乣WenZhenKSMC`锛夊綋鍓嶄笉鍙備笌涓氬姟澶勭悊銆�
+
+---
+
+## 浜斻�佸悇娑堟伅绫诲瀷鐨勪笟鍔℃姤鏂�
+
+> 浠ヤ笅浠呭垪鍑� `YeWuXX` 涓娑堟伅绫诲瀷瀹為檯浣跨敤鐨勯敭锛涙湭鍒楀嚭鐨勯敭浼氳蹇界暐銆�
+
+### 5.1 鏈烘瀯銆佺瀹ゃ�佺敤鎴枫�佺梾鍖�
+
+#### 5.1.1 `JG_ZZ_JiGou` 缁勭粐鏈烘瀯
+
+`YeWuXX` 缁撴瀯锛歚{ "XiaoXiID": "...", "ZuZhiJGXX": { ... } }`
+
+`ZuZhiJGXX` 瀛楁锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 鏈烘瀯 ID锛屽悓鏃跺啓鍏� `orgid` |
+| ZuZhiJGMC | String | 鏄� | 鏈烘瀯鍚嶇О |
+| ShiJianDM | String | 鏄� | 浜嬩欢浠g爜锛歚1` 鏂板锛屽叾浠栧�兼洿鏂帮紙`3` 浣滃簾褰撳墠涔熻蛋鏇存柊锛� |
+| ShiJianMC | String | 鍚� | 浜嬩欢鍚嶇О |
+| ShuRuMa1 | String | 鍚� | 杈撳叆鐮� 1 |
+| ShuRuMa2 | String | 鍚� | 杈撳叆鐮� 2 |
+| ShuRuMa3 | String | 鍚� | 杈撳叆鐮� 3 |
+| createBy | String | 鍚� | 鍒涘缓浜猴紙鏉ヨ嚜 BaseEntity锛屽疄闄呯敓鏁堬級 |
+| createTime | Date | 鍚� | 鍒涘缓鏃堕棿锛宍yyyy-MM-dd HH:mm:ss` |
+| updateBy | String | 鍚� | 淇敼浜猴紙瀹為檯鐢熸晥锛� |
+| updateTime | Date | 鍚� | 淇敼鏃堕棿锛宍yyyy-MM-dd HH:mm:ss` |
+
+#### 5.1.2 `JG_ZZ_KeShi` 绉戝
+
+`YeWuXX.KeShiXX`锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 鏈烘瀯 ID |
+| KeShiID | String | 鏄� | 绉戝 ID锛屽啓鍏� `his_dept_id` / `dept_code` |
+| KeShiMC | String | 鏄� | 绉戝鍚嶇О |
+| FuKeSID | String | 鍚� | 鐖剁瀹� ID锛岀敤浜庢煡鎵惧苟濉厖 `parentId` |
+| KeShiLBDM | String | 鍚� | 绉戝绫诲埆浠g爜锛屽啓鍏� `type` |
+| ShiJianDM | String | 鏄� | `1` 鏂板锛沗3` 浣滃簾锛坄status=1`锛夛紱鍏朵粬鍊间慨鏀� |
+| ShiJianMC | String | 鍚� | 浜嬩欢鍚嶇О |
+| KeShiLBMC | String | 鍚� | 绉戝绫诲埆鍚嶇О |
+| FuKeSMC | String | 鍚� | 鐖剁瀹ゅ悕绉� |
+| MoJiBZ | Integer | 鍚� | 鏈骇鏍囧織 |
+| ShuRuMa1/2/3 | String | 鍚� | 杈撳叆鐮� |
+| createBy | String | 鍚� | 鍒涘缓浜猴紙瀹為檯鐢熸晥锛� |
+| createTime | Date | 鍚� | 鍒涘缓鏃堕棿锛堝疄闄呯敓鏁堬級 |
+| updateBy | String | 鍚� | 淇敼浜猴紙瀹為檯鐢熸晥锛� |
+| updateTime | Date | 鍚� | 淇敼鏃堕棿锛堝疄闄呯敓鏁堬級 |
+
+#### 5.1.3 `JG_YH_JiBenXX` 鐢ㄦ埛鍩烘湰淇℃伅
+
+`YeWuXX.YongHuXX`锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 鏈烘瀯 ID锛涗负绌烘椂鐩存帴杩斿洖澶辫触 |
+| YongHuDLM | String | 鏄� | 鐢ㄦ埛鐧诲綍鍚嶏紱涓虹┖鏃剁洿鎺ヨ繑鍥炲け璐� |
+| YongHuID | String | 鏄紙寤鸿锛� | HIS 鐢ㄦ埛 ID锛屽啓鍏� `his_user_id`锛屽悗缁瀹ょ敤鎴峰叧绯绘寜姝ゅ尮閰� |
+| YongHuXM | String | 鏄紙寤鸿锛� | 鐢ㄦ埛濮撳悕锛屽啓鍏� `nick_name` |
+| LianXiDH | String | 鍚� | 鑱旂郴鐢佃瘽 |
+| GongZuoDH | String | 鍚� | 宸ヤ綔鐢佃瘽 |
+| XingBieDM | String | 鍚� | 鎬у埆浠g爜锛屽啓鍏� `sex` |
+| ChuShengRQ | Date | 鍚� | 鍑虹敓鏃ユ湡锛宍yyyy-MM-dd HH:mm:ss` |
+| ShiJianDM | String | 鏄� | `3` 浣滃簾锛坄status=1`锛夛紱鍏朵粬鍊兼寜鐢ㄦ埛鍚�+鏈烘瀯鍒ゆ柇鏂板鎴栨洿鏂� |
+| ShiJianMC | String | 鍚� | 浜嬩欢鍚嶇О |
+| ShenFenZH | String | 鍚� | 韬唤璇佸彿锛堝綋鍓嶆湭钀藉簱锛� |
+| ChuangJianRXM | String | 鍚� | 鍒涘缓浜哄鍚� |
+| ChuangJianSJ | Date | 鍚� | 鍒涘缓鏃堕棿 |
+| XiuGaiRXM | String | 鍚� | 淇敼浜哄鍚� |
+| XiuGaiSJ | Date | 鍚� | 淇敼鏃堕棿 |
+
+> 鏂板鐢ㄦ埛鏃跺瘑鐮佷娇鐢ㄧ郴缁熼粯璁ゅ瘑鐮� `defaultPwd` 鍔犲瘑鍚庡啓鍏ャ��
+
+#### 5.1.4 `JG_YH_KeShiYH` 绉戝鐢ㄦ埛鍏崇郴
+
+`YeWuXX.KeShiYH`锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 鏈烘瀯 ID |
+| YongHuID | String | 鏄� | 鐢ㄦ埛 ID锛岀敤浜庢煡鎵� `sys_user` |
+| KeShiID | String | 鏄� | 绉戝 ID锛岀敤浜庢煡鎵� `sys_dept` |
+| ShiJianDM | String | 鏄� | `3` 浣滃簾锛坄del_flag=1`锛夛紱鍏朵粬鍊兼柊澧炴垨鏇存柊鍏崇郴 |
+| ShiJianMC | String | 鍚� | 浜嬩欢鍚嶇О |
+| KeShiYHDZID | String | 鍚� | 绉戝鐢ㄦ埛鍦板潃 ID锛堟湭钀藉簱锛� |
+| YongHuXM | String | 鍚� | 鐢ㄦ埛濮撳悕锛堟湭钀藉簱锛� |
+| KeShiMC | String | 鍚� | 绉戝鍚嶇О锛堟湭钀藉簱锛� |
+| ZhiGongID | String | 鍚� | 鑱屽伐 ID锛堟湭钀藉簱锛� |
+| YongHuDLM | String | 鍚� | 鐢ㄦ埛鐧诲綍鍚嶏紙浠呮棩蹇楋級 |
+| ChuangJianRXM | String | 鍚� | 鍒涘缓浜哄鍚� |
+| ChuangJianSJ | Date | 鍚� | 鍒涘缓鏃堕棿 |
+| XiuGaiRXM | String | 鍚� | 淇敼浜哄鍚� |
+| XiuGaiSJ | Date | 鍚� | 淇敼鏃堕棿 |
+
+> 鐢ㄦ埛鎴栫瀹ゆ壘涓嶅埌鏃惰繑鍥� `Code=500`锛坄false`锛夈��
+
+#### 5.1.5 `JG_ZZ_BingQu` 鐥呭尯
+
+`YeWuXX.BingQuXX`锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 鏈烘瀯 ID |
+| BingQuID | String | 鏄� | 鐥呭尯 ID锛屽啓鍏� `his_dept_id` / `dept_code` |
+| BingQuMC | String | 鏄� | 鐥呭尯鍚嶇О |
+| BingQuLXDM | String | 鍚� | 鐥呭尯绫诲瀷浠g爜锛屽啓鍏� `type` |
+| ShiJianDM | String | 鏄� | `1` 鏂板锛沗3` 浣滃簾锛坄status=1`锛夛紱鍏朵粬鍊间慨鏀� |
+| ShiJianMC | String | 鍚� | 浜嬩欢鍚嶇О |
+| BingQuLXMC | String | 鍚� | 鐥呭尯绫诲瀷鍚嶇О锛堟湭钀藉簱锛� |
+| ShuRuMa1/2/3 | String | 鍚� | 杈撳叆鐮� |
+| ChuangJianRXM | String | 鍚� | 鍒涘缓浜哄鍚嶏紙瀹為檯鐢熸晥锛� |
+| createTime | Date | 鍚� | 鍒涘缓鏃堕棿锛宍yyyy-MM-dd HH:mm:ss`锛堝疄闄呯敓鏁堬級 |
+| updateBy | String | 鍚� | 淇敼浜猴紙瀹為檯鐢熸晥锛� |
+| updateTime | Date | 鍚� | 淇敼鏃堕棿锛堝疄闄呯敓鏁堬級 |
+
+> 鐥呭尯璁板綍 `deptType=2`锛屼笌绉戝锛坄deptType=1`锛夊尯鍒嗐��
+
+### 5.2 `GY_ZD_JiBingML` 鐤剧梾鐩綍
+
+`YeWuXX.JiBingMLXX`锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZuZhiJGID | String | 鏄� | 鏈烘瀯 ID |
+| JiBingID | String | 鏄� | 鐤剧梾 ID锛屽啓鍏� `his_icdid` |
+| JiBingMC | String | 鏄� | 鐤剧梾鍚嶇О锛屽啓鍏� `icdname` |
+| IcD10 | String | 鏄� | ICD10 缂栫爜锛屼綔涓烘柊澧�/鏇存柊鍖归厤鏉′欢 |
+| MOJIBZ | String | 鍚� | 鏈骇鏍囧織锛屽啓鍏� `lastflag` |
+| ZhongYiZDBZ | Long | 鍚� | 涓尰璇婃柇鏍囧織锛屽啓鍏� `chimedflag` |
+| ShiJianDM | String | 鍚� | 浜嬩欢浠g爜锛堝綋鍓嶆湭鍙備笌鍒ゆ柇锛屽瓨鍦ㄥ嵆鏇存柊銆佷笉瀛樺湪鍗虫柊澧烇級 |
+| 鍏朵粬瀛楁 | - | 鍚� | 褰撳墠鏈娇鐢� |
+
+> 缂栫爜涓嶅尯鍒嗘柊澧�/淇敼锛氭寜 `IcD10 + 鏈烘瀯` 鏌ヨ锛屽瓨鍦ㄥ垯鏇存柊锛屼笉瀛樺湪鍒欐柊澧炪��
+
+### 5.3 鍏ラ櫌銆佸叆绉戙�佸彇娑堝叆闄�
+
+#### 5.3.1 `JZ_ZY_RuYuanDJ` 鍏ラ櫌鐧昏
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紝瑙� 4.1 |
+| DiZhiXXList | array | 鏄� | 鍦板潃鍒楄〃锛�**浠g爜鏈仛绌哄垽鏂紝涓嶈兘涓虹┖** |
+| LianXiRList | array | 鏄� | 鑱旂郴浜哄垪琛紝**涓嶈兘涓虹┖** |
+| ZhenDuanList | array | 鏄� | 璇婃柇鍒楄〃锛�**涓嶈兘涓虹┖**锛屽彇绗竴鏉″啓鍏ュ叆闄㈣瘖鏂� |
+
+澶勭悊缁撴灉锛�
+
+- 鎸夎瘉浠跺彿锛堟垨灏辫瘖鍗″彿锛夋柊澧�/鏇存柊鎮h�呮。妗� `pat_archive`锛�
+- 鎸� `BingAnHao + JiuZhenYWID` 鏂板/鏇存柊浣忛櫌璁板綍 `pat_med_inhosp`锛�
+- 浣忛櫌鐘舵�� `inhospstate=0`锛堝湪闄級銆�
+
+璇锋眰绀轰緥锛�
+
+```json
+{
+ "XiaoXiTou": {
+ "FaSongJGID": "47255004333112711A1001",
+ "FaSongJGMC": "涓芥按甯備腑鍖婚櫌",
+ "FaSongSJ": "2026-10-20 10:00:00",
+ "XiaoXiLX": "JZ_ZY_RuYuanDJ",
+ "XiaoXiID": "MSG-20261020-0001"
+ },
+ "YeWuXX": {
+ "XiaoXiID": "MSG-20261020-0001",
+ "BingRenXX": {
+ "ZuZhiJGID": "47255004333112711A1001",
+ "ZuZhiJGMC": "涓芥按甯備腑鍖婚櫌",
+ "BingRenID": "BR0001",
+ "XingMing": "寮犱笁",
+ "JiuZhenYWID": "JZ20261020001",
+ "JiuZhenKH": "MZ0001",
+ "BingAnHao": "BA20261020001",
+ "ZhengJianLXMC": "灞呮皯韬唤璇�",
+ "ZhengJianHM": "330102199001011234",
+ "XingBieDM": "1",
+ "XingBieMC": "鐢�",
+ "ChuShengRQ": "1990-01-01 08:00:00",
+ "DangQianKSID": "D001",
+ "DangQianKSMC": "蹇冭绠″唴绉�",
+ "DangQianBQID": "B001",
+ "DangQianBQMC": "蹇冨唴绉戠梾鍖�",
+ "DangQianCWMC": "12搴�",
+ "RuYuanSJ": "2026-10-20 09:30:00",
+ "LianXiDH": "13800000000",
+ "CaoZuoRID": "U001",
+ "CaoZuoRXM": "鏉庡尰鐢�",
+ "ZhuZhiYSID": "D1001",
+ "ZhuZhiYSXM": "鐜嬪尰鐢�"
+ },
+ "DiZhiXXList": [
+ {
+ "DiZhiLX": "1",
+ "DiZhiXX": "娴欐睙鐪佷附姘村競鑾查兘鍖篨X璺�1鍙�",
+ "ShengFenMC": "娴欐睙鐪�",
+ "ShiDiQMC": "涓芥按甯�",
+ "XianQuMC": "鑾查兘鍖�"
+ }
+ ],
+ "LianXiRList": [
+ {
+ "LianXiRXM": "鏉庡洓",
+ "LianXiRDH": "13900000000",
+ "GuanXiMC": "閰嶅伓"
+ }
+ ],
+ "ZhenDuanList": [
+ {
+ "ZhenDuanID": "I10",
+ "ZhenDuanMC": "鍘熷彂鎬ч珮琛�鍘�",
+ "Icd10": "I10"
+ }
+ ]
+ }
+}
+```
+
+#### 5.3.2 `JZ_ZY_RuKe` 鍏ョ
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紱鍏朵腑 `DiZhiXXList` **涓嶈兘涓虹┖** |
+| RuKeXX | object | 鏄� | 鍏ョ淇℃伅锛岃 4.6 |
+| JiuZhenXX | object | 鍚� | 浠g爜璇诲彇浣嗘湭浣跨敤锛屽彲蹇界暐 |
+
+澶勭悊缁撴灉锛氱敤 `RuKeXX` 涓殑涓绘不鍖荤敓銆佽矗浠绘姢澹�佸叆闄㈡椂闂磋鐩栨偅鑰呬俊鎭紝鐒跺悗鏂板/鏇存柊妗f涓庝綇闄㈣褰曘��
+
+#### 5.3.3 `JZ_ZY_QuXiaoRY` 鍙栨秷鍏ラ櫌鐧昏
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鑷冲皯鍖呭惈 `BingAnHao`銆乣JiuZhenYWID` |
+| JiuZhenXX | object | 鍚� | 鍙� `CaoZuoRID`銆乣CaoZuoRXM` 璁板綍鎿嶄綔浜� |
+
+澶勭悊缁撴灉锛氭寜 `BingAnHao + JiuZhenYWID` 鎵惧埌浣忛櫌璁板綍锛岀疆 `schemestatus=3`銆乣del_flag=1`銆�
+
+### 5.4 鍑洪櫌銆佸嚭闄㈣褰曘�侀鍑洪櫌銆佸彇娑堝嚭闄€�佺鎶�
+
+#### 5.4.1 `JZ_ZY_ChuYuan` 鎮h�呭嚭闄�
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紝瑙� 4.1 |
+| JiuZhenXX | object | 鏄� | **蹇呴』鍖呭惈 `ChuYuanSJ`**锛堝嚭闄㈡椂闂达級锛涘彟鍙栨搷浣滀汉銆佷富娌诲尰鐢熴�佽矗浠绘姢澹�佸簥浣嶃�佺粡绠″尰鐢熴�乣LiYuanQXDM` |
+| DiZhiXXList | array | 鍚� | 鍦板潃鍒楄〃锛屼负绌轰笉鎶ラ敊 |
+| LianXiRList | array | 鍚� | 鑱旂郴浜哄垪琛紝涓虹┖涓嶆姤閿� |
+| ChuYuanJL | object | 鍚� | 鍑洪櫌璁板綍锛屽彇 `SuiFangJH` 闅忚璁″垝 |
+| BingRenKZXXList | array | 鍚� | 鎮h�呮墿灞曚俊鎭紝`XiangMuDM=DuanHaoXX` 鏃惰鐩栫煭鍙� |
+| ZhenDuanList | array | 鍚� | 璇婃柇鍒楄〃锛屽彇绗竴鏉″啓鍏ュ嚭闄㈣瘖鏂�両CD10 |
+
+澶勭悊缁撴灉锛�
+
+- 鎸� `BingAnHao + JiuZhenYWID` 鏌ユ壘浣忛櫌璁板綍锛屽瓨鍦ㄥ垯鏇存柊锛屼笉瀛樺湪鍒欐柊澧烇紱
+- `schemestatus=2`銆乣inhospstate=1`锛堝嚭闄級锛�
+- 鍐欏叆鍑洪櫌鏃堕棿銆佸嚭闄㈢瀹�/鐥呭尯銆佸嚭闄㈣瘖鏂紱
+- `LiYuanQXDM=5`锛堟浜★級鏃讹細`fuflag=0`锛屾偅鑰呮。妗堟爣璁� `notrequiredFlag=1`銆佸師鍥犫�滄偅鑰呭凡绂讳笘鈥濓紝骞剁粓姝㈠凡鐢熸垚鐨勯殢璁夸换鍔★紙`sendstate=4`锛夛紱
+- 鏈烘瀯鍦� `noLongTask` 閰嶇疆涓椂锛宍fuflag=0`锛堜笉鍋氶暱鏈熼殢璁匡級銆�
+
+#### 5.4.2 `BL_JL_ChuYuanJL` 鎮h�呭嚭闄㈣褰�
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紝瑙� 4.1 |
+| ChuYuanJL | object | 鏄紙寤鸿锛� | 鍙� `SuiFangJH` 闅忚璁″垝 |
+| DiZhiXXList | array | 鍚� | 鍦板潃鍒楄〃 |
+| LianXiRList | array | 鍚� | 鑱旂郴浜哄垪琛� |
+| ZhenDuanList | array | 鍚� | 璇婃柇鍒楄〃锛屽彇绗竴鏉″啓鍏ュ嚭闄㈣瘖鏂�両CD10 |
+
+澶勭悊缁撴灉涓� `JZ_ZY_ChuYuan` 绫讳技锛屼絾**涓嶈鍙� `JiuZhenXX`**銆佷笉淇敼鍦ㄩ櫌鐘舵�併�佷篃涓嶅仛姝讳骸鏍囪澶勭悊锛涗粎鏇存柊浣忛櫌璁板綍鐨勫嚭闄俊鎭紙`schemestatus=2`锛変笌闅忚璁″垝銆�
+
+#### 5.4.3 `JZ_ZY_YuChuYuan` 鎮h�呴鍑洪櫌
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紝瑙� 4.1 |
+| JiuZhenXX | object | 鏄� | **蹇呴』鍖呭惈 `YuChuYSJ`銆乣LiYuanQXDM`**锛堜唬鐮佹湭鍋氱┖鍒ゆ柇锛� |
+| ChuYuanJL | object | 鍚� | 鍙� `SuiFangJH` 闅忚璁″垝 |
+| DiZhiXXList | array | 鍚� | 鍦板潃鍒楄〃 |
+| LianXiRList | array | 鍚� | 鑱旂郴浜哄垪琛� |
+| ZhenDuanList | array | 鍚� | 璇婃柇鍒楄〃 |
+
+澶勭悊缁撴灉锛歚schemestatus=2`銆乣inhospstate=3`锛堥鍑洪櫌锛夛紝鍐欏叆棰勫嚭闄㈡椂闂淬�佽瘖鏂�侀殢璁胯鍒掞紱`LiYuanQXDM=5` 鏃舵墽琛屾浜℃偅鑰呭鐞嗐��
+
+#### 5.4.4 `JZ_ZY_QuXiaoCY` 鍙栨秷鍑洪櫌
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鑷冲皯鍖呭惈 `BingAnHao`銆乣JiuZhenYWID` |
+| JiuZhenXX | object | 鍚� | 鍙� `CaoZuoRID`銆乣CaoZuoRXM` |
+
+澶勭悊缁撴灉锛�
+
+- 浣忛櫌璁板綍 `schemestatus=4`銆乣inhospstate=0`锛堟仮澶嶅湪闄級锛�
+- 鍒犻櫎璇ユ偅鑰� `sendstate=1/2` 鐨勯殢璁垮瓙浠诲姟锛屽苟娓呯悊 Redis 缂撳瓨涓殑浠诲姟 ID銆�
+
+#### 5.4.5 `JZ_ZY_LiQiang` 鎮h�呯鎶�
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鑷冲皯鍖呭惈 `BingAnHao`銆乣JiuZhenYWID` |
+| JiuZhenXX | object | 鏄� | 鍙� `LiQiangSJ`锛堢鎶㈡椂闂达級銆乣LiYuanQXDM` |
+
+澶勭悊缁撴灉锛氭妸 `LiQiangSJ` 鍥炲~鍒颁綇闄㈣褰曞嚭闄㈡椂闂达紝`inhospstate=1`锛沗LiYuanQXDM=5` 鏃舵墽琛屾浜℃偅鑰呭鐞嗐�傛壘涓嶅埌浣忛櫌璁板綍鏃惰繑鍥炲け璐ャ��
+
+### 5.5 `JZ_MZ_WanChengJZ` 闂ㄦ�ヨ瘖瀹屾垚鎺ヨ瘖
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紱`ZuZhiJGID` 鍙渷鐣ワ紝浠g爜浣跨敤娑堟伅澶� `FaSongJGID` |
+| JiuZhenXX | object | 鏄� | 鑷冲皯鍖呭惈 `JiuZhenKSID`銆乣JiuZhenKSMC`銆乣JiuZhenRQ` |
+| ZhenDuanList | array | 鏄� | **涓嶈兘涓虹┖**锛沗ZhenDuanLBMC=涓昏瘖鏂璥 鐨勮褰曠敤浜庝富璇婃柇 |
+| WenZhenList | array | 鏄� | **涓嶈兘涓虹┖**锛涚敤浜庣幇鐥呭彶銆佷富璇夈�侀殢璁垮ぉ鏁般�侀殢璁垮ぉ鏁板崟浣� |
+
+澶勭悊缁撴灉锛�
+
+- 鏂板/鏇存柊鎮h�呮。妗堬紱
+- 鎸� `BingAnHao + JiuZhenYWID` 鏂板/鏇存柊闂ㄨ瘖灏辫瘖璁板綍 `pat_med_outhosp`锛宍admitdate` 鍙� `JiuZhenRQ`锛�
+- 涓昏瘖鏂褰曞啓鍏� `diagname`銆乣drcode`銆乣drname`銆乣icd10code`锛屽苟缃� `fuflag=1`锛�
+- `WenZhenList` 涓� `鐜扮梾鍙瞏鈫抈hpi`銆乣涓昏瘔`鈫抈mainsuit`锛�
+- 鑻ヤ紶浜� `闅忚澶╂暟`锛堜笖鍗曚綅涓哄ぉ/鍛�/鏈�/骞达級骞朵笖 `fuflag=1`锛岃嚜鍔ㄧ敓鎴�/澶勭悊闅忚浠诲姟锛�
+- 涓芥按甯傚骞间繚鍋ラ櫌锛坄orgid = 47226079133110211G1001`锛夊畬鎴愭帴璇婂悗锛屾寜 `pat_specific_archive_generate_config` 閰嶇疆鐢熸垚濡囩/鍎跨涓撶妗f锛涘叾浠栨満鏋勪笉鐢熸垚銆傝瑙� `doc/api/濡囧辜涓撶妗f鐢熸垚鎺ュ彛鏂囨。_20261104.md`銆�
+
+璇锋眰绀轰緥锛�
+
+```json
+{
+ "XiaoXiTou": {
+ "FaSongJGID": "47255004333112711A1001",
+ "FaSongJGMC": "涓芥按甯備腑鍖婚櫌",
+ "FaSongSJ": "2026-10-20 11:00:00",
+ "XiaoXiLX": "JZ_MZ_WanChengJZ",
+ "XiaoXiID": "MSG-20261020-0002"
+ },
+ "YeWuXX": {
+ "XiaoXiID": "MSG-20261020-0002",
+ "BingRenXX": {
+ "BingRenID": "BR0002",
+ "XingMing": "鏉庡洓",
+ "JiuZhenYWID": "MZ20261020002",
+ "JiuZhenKH": "MZ0002",
+ "BingAnHao": "BA20261020002",
+ "ZhengJianHM": "330102198505051234",
+ "XingBieDM": "2",
+ "ChuShengRQ": "1985-05-05 10:00:00",
+ "LianXiDH": "13700000000"
+ },
+ "JiuZhenXX": {
+ "JiuZhenKSID": "D002",
+ "JiuZhenKSMC": "濡囩",
+ "JiuZhenRQ": "2026-10-20 10:30:00",
+ "sfrq": "2026-11-20 00:00:00"
+ },
+ "ZhenDuanList": [
+ {
+ "ZhenDuanYSID": "D1002",
+ "ZhenDuanYSXM": "璧靛尰鐢�",
+ "ZhenDuanID": "O20.0",
+ "ZhenDuanMC": "鍏堝厗娴佷骇",
+ "ZhenDuanLBDM": "1",
+ "ZhenDuanLBMC": "涓昏瘖鏂�",
+ "Icd10": "O20.0"
+ }
+ ],
+ "WenZhenList": [
+ { "WenZhenLXMC": "涓昏瘔", "NeiRong": "鍋滅粡50澶╋紝闃撮亾娴佽1澶�" },
+ { "WenZhenLXMC": "鐜扮梾鍙�", "NeiRong": "鎮h�呭仠缁�50澶┾�︹��" },
+ { "WenZhenLXMC": "闅忚澶╂暟", "NeiRong": "30" },
+ { "WenZhenLXMC": "闅忚澶╂暟鍗曚綅", "NeiRong": "澶�" }
+ ]
+ }
+}
+```
+
+### 5.6 妫�鏌�/妫�楠岀敵璇蜂笌淇敼
+
+閫傜敤绫诲瀷锛歚JC_SQ_ShenQing`銆乣JC_SQ_XiuGai`銆乣JY_SQ_ShenQing`銆乣JY_SQ_XiuGai`銆�
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紱`ZuZhiJGID` 浼氳娑堟伅澶� `FaSongJGID` 瑕嗙洊 |
+| JianChaSQ | object | 鏄� | 妫�鏌�/妫�楠岀敵璇蜂俊鎭紝瑙佷笅琛� |
+| JianChaBG | object | 鍚� | 鎶ュ憡淇℃伅锛屾澶勪粎浣跨敤 `ShenQingDID` 鍥炲~鐢宠鍗曞彿 |
+
+`JianChaSQ` 瀛楁锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| YiZhuID | String | 鏄� | 鍖诲槺 ID锛屼唬鐮佹墽琛� `Long.valueOf`锛屽繀椤讳负鏁板瓧 |
+| ShenQingDID | String | 鏄� | 鐢宠鍗� ID锛屼綔涓烘鏌ヨ褰曞尮閰嶉敭 |
+| YouXianJi | String | 鍚� | 浼樺厛绾� |
+| KaiDanRID | String | 鍚� | 寮�鍗曚汉 ID |
+| KaiDanRXM | String | 鍚� | 寮�鍗曚汉濮撳悕 |
+| KaiDanKSID | String | 鍚� | 寮�鍗曠瀹� ID |
+| KaiDanKSMC | String | 鍚� | 寮�鍗曠瀹ゅ悕绉� |
+| KaiDanSJ | String | 鍚� | 寮�鍗曟椂闂达紝`yyyy-MM-dd HH:mm:ss` |
+| ShenHeRID | String | 鍚� | 瀹℃牳浜� ID |
+| ShenHeRXM | String | 鍚� | 瀹℃牳浜哄鍚� |
+| ShenHeSJ | String | 鍚� | 瀹℃牳鏃堕棿锛宍yyyy-MM-dd HH:mm:ss` |
+| ZhiXingSJ | String | 鍚� | 鎵ц鏃堕棿锛宍yyyy-MM-dd HH:mm:ss` |
+| JianChaLXID | String | 鍚� | 妫�鏌ョ被鍨� ID |
+| JianChaLXMC | String | 鍚� | 妫�鏌ョ被鍨嬪悕绉� |
+| JinE | String | 鏄� | 閲戦锛屼唬鐮佹墽琛� `Float.valueOf`锛屽繀椤讳负鏁板瓧 |
+| JiaoPianFBZ | String | 鏄� | 浜ょ墖璐规爣蹇楋紝`0/1`锛屼唬鐮佹墽琛� `Integer.valueOf` |
+| ChuangBianBZ | String | 鏄� | 搴婅竟鏍囧織锛宍0/1` |
+| TuiChuangBZ | String | 鏄� | 鎺ㄥ簥鏍囧織锛宍0/1` |
+| JiaJiBZ | String | 鏄� | 鍔犳�ユ爣蹇楋紝`0/1` |
+| WeiShouXZXBZ | String | 鏄� | 鏈敹鍏堟墽琛屾爣蹇楋紝`0/1` |
+| JianChaBWList | array | 鍚� | 妫�鏌ラ儴浣嶅垪琛紱涓虹┖鍒欎笉鍐欓」鐩�/閮ㄤ綅 |
+| ZhenDuanList | array | 鍚� | 璇婃柇鍒楄〃锛屽彇绗竴鏉″啓鍏ヨ瘖鏂� ID/鍚嶇О |
+
+`JianChaBWList` 鍏冪礌锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| JianChaXMID | String | 鍚� | 妫�鏌ラ」鐩� ID |
+| JianChaXMMC | String | 鍚� | 妫�鏌ラ」鐩悕绉� |
+| JianChaBWID | String | 鍚� | 妫�鏌ラ儴浣� ID |
+| JianChaBWMC | String | 鍚� | 妫�鏌ラ儴浣嶅悕绉� |
+
+`ZhenDuanList` 鍏冪礌锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ZhenDuanID | String | 鍚� | 璇婃柇 ID |
+| ZhenDuanMC | String | 鍚� | 璇婃柇鍚嶇О |
+
+澶勭悊缁撴灉锛�
+
+- 鎸� `ShenQingDID`锛坄appliyid`锛夋煡璇㈡鏌ヨ褰曪紝瀛樺湪鍒欐洿鏂帮紝涓嶅瓨鍦ㄥ垯鏂板锛�
+- 妫�鏌ラ」鐩�侀儴浣嶅彇 `JianChaBWList` 绗竴鏉★紱
+- `JY_SQ_*` 涓� `JC_SQ_*` 鍏辩敤鍚屼竴寮犺〃锛屼粎绫诲瀷涓嶅悓銆�
+
+璇锋眰绀轰緥锛�
+
+```json
+{
+ "XiaoXiTou": {
+ "FaSongJGID": "47255004333112711A1001",
+ "FaSongJGMC": "涓芥按甯備腑鍖婚櫌",
+ "FaSongSJ": "2026-10-20 12:00:00",
+ "XiaoXiLX": "JC_SQ_ShenQing",
+ "XiaoXiID": "MSG-20261020-0003"
+ },
+ "YeWuXX": {
+ "XiaoXiID": "MSG-20261020-0003",
+ "BingRenXX": {
+ "ZuZhiJGID": "47255004333112711A1001",
+ "BingRenID": "BR0001",
+ "XingMing": "寮犱笁",
+ "JiuZhenYWID": "JZ20261020001",
+ "BingAnHao": "BA20261020001",
+ "ZhengJianHM": "330102199001011234",
+ "LianXiDH": "13800000000"
+ },
+ "JianChaSQ": {
+ "YiZhuID": "100001",
+ "ShenQingDID": "SQ20261020001",
+ "YouXianJi": "1",
+ "KaiDanRID": "D1001",
+ "KaiDanRXM": "鐜嬪尰鐢�",
+ "KaiDanKSID": "D001",
+ "KaiDanKSMC": "蹇冭绠″唴绉�",
+ "KaiDanSJ": "2026-10-20 11:30:00",
+ "ShenHeRID": "D1002",
+ "ShenHeRXM": "璧靛尰鐢�",
+ "ShenHeSJ": "2026-10-20 11:40:00",
+ "ZhiXingSJ": "2026-10-20 13:00:00",
+ "JianChaLXID": "CT",
+ "JianChaLXMC": "CT妫�鏌�",
+ "JinE": "280.00",
+ "JiaoPianFBZ": "0",
+ "ChuangBianBZ": "0",
+ "TuiChuangBZ": "0",
+ "JiaJiBZ": "0",
+ "WeiShouXZXBZ": "0",
+ "JianChaBWList": [
+ {
+ "JianChaXMID": "CT001",
+ "JianChaXMMC": "鑳搁儴CT",
+ "JianChaBWID": "BW001",
+ "JianChaBWMC": "鑳搁儴"
+ }
+ ],
+ "ZhenDuanList": [
+ { "ZhenDuanID": "I10", "ZhenDuanMC": "鍘熷彂鎬ч珮琛�鍘�" }
+ ]
+ }
+ }
+}
+```
+
+### 5.7 `JC_BG_BaoGao` 妫�鏌ユ姤鍛�
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鑷冲皯鍖呭惈 `ZuZhiJGID`銆乣BingAnHao`銆乣BingRenID`銆乣XingMing` |
+| JianChaBG | object | 鏄� | 妫�鏌ユ姤鍛婁俊鎭紝瑙佷笅琛� |
+
+`JianChaBG` 瀛楁锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ShenQingDID | String | 鏄� | 鐢宠鍗� ID锛岀敤浜庢煡鎵炬鏌ヨ褰曪紱鎵句笉鍒版椂浼氬厛璋冪敤鐢宠閫昏緫琛ュ缓 |
+| JianChaHao | String | 鏄� | 妫�鏌ュ彿锛屽啓鍏� `inspection_name` |
+| DangQianZTDM | String | 鏄� | 褰撳墠鐘舵�佷唬鐮� |
+| DangQianZTMC | String | 鏄� | 褰撳墠鐘舵�佸悕绉� |
+| BaoGaoRID | String | 鏄� | 鎶ュ憡浜� ID锛涙敞鎰忎唬鐮佹渶缁堟妸瀹冨啓鍏� `reportid` |
+| BaoGaoRXM | String | 鏄� | 鎶ュ憡浜哄鍚� |
+| BaoGaoSJ | String | 鍚� | 鎶ュ憡鏃堕棿锛宍yyyy-MM-dd HH:mm:ss` |
+| ZhenDuanYX | String | 鏄� | 璇婃柇鍗拌薄 |
+| ZhenDuanSJ | String | 鏄� | 璇婃柇鎵�瑙� |
+| ZhenDuanJY | String | 鏄� | 璇婃柇寤鸿 |
+| BaoGaoYXDZ | String | 鏄� | 鎶ュ憡褰卞儚鍦板潃 |
+| WeiJiZBZ | String | 鏄� | 鍗辨�ュ�兼爣蹇楋紝蹇呴』涓烘暟瀛� |
+| WeiJiZNR | String | 鏄� | 鍗辨�ュ�煎唴瀹� |
+| BaoGaoKSID | String | 鏄� | 鎶ュ憡绉戝 ID |
+| BaoGaoKSMC | String | 鏄� | 鎶ュ憡绉戝鍚嶇О |
+| JianChaJGDM | String | 鏄� | 妫�鏌ョ粨鏋滀唬鐮� |
+| JianChaJGMC | String | 鏄� | 妫�鏌ョ粨鏋滃悕绉� |
+
+> 浠g爜瀵逛笂杩板瓧绗︿覆瀛楁澶ч噺鐩存帴璋冪敤 `.toString()`锛岀己澶变細鎶涚┖鎸囬拡瀵艰嚧杩斿洖澶辫触锛岃鍔″繀浼犻綈銆�
+
+澶勭悊缁撴灉锛氭寜 `ShenQingDID` 鎵惧埌妫�鏌ヤ富璁板綍锛屾柊澧炴垨鏇存柊 `pat_med_inspection_item` 鎶ュ憡鏄庣粏銆�
+
+### 5.8 鎵嬫湳鐢宠銆佹挙閿�
+
+#### 5.8.1 `SM_SQ_ShenQing` 鎵嬫湳鐢宠
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鎮h�呬俊鎭紝瑙� 4.1 |
+| ShouShuSQ | object | 鏄� | 鎵嬫湳鐢宠淇℃伅锛岃涓嬭〃 |
+
+`ShouShuSQ` 瀛楁锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ShenQingDID | String | 鏄� | 鐢宠鍗� ID锛屽啓鍏� `opreqcode`锛屼綔涓烘墜鏈褰曞尮閰嶉敭 |
+| ShouShuLBDM | String | 鍚� | 鎵嬫湳绫诲埆浠g爜锛屽啓鍏� `optypecode` |
+| ShouShuLBMC | String | 鍚� | 鎵嬫湳绫诲埆鍚嶇О锛屽啓鍏� `optypename` |
+| YaoQiuSJ | Date | 鍚� | 瑕佹眰鏃堕棿锛屽啓鍏� `operatortime` |
+| ShenQingSJ | Date | 鍚� | 鐢宠鏃堕棿锛屽啓鍏� `opreqtime` |
+| ShenQingYSID | String | 鍚� | 鐢宠鍖荤敓 ID |
+| ShenQingYSXM | String | 鍚� | 鐢宠鍖荤敓濮撳悕 |
+| ShenQingKSID | String | 鍚� | 鐢宠绉戝 ID |
+| ShenQingKSMC | String | 鍚� | 鐢宠绉戝鍚嶇О |
+| ShouShuKSID | String | 鍚� | 鎵嬫湳绉戝 ID |
+| ShouShuKSMC | String | 鍚� | 鎵嬫湳绉戝鍚嶇О |
+| ZhuDaoYSID | String | 鍚� | 涓诲垁鍖荤敓 ID |
+| ZhuDaoYSXM | String | 鍚� | 涓诲垁鍖荤敓濮撳悕 |
+| YiZhuID | String | 鍚� | 鍖诲槺 ID锛堜唬鐮佹槧灏勫埌 `firasscode`锛� |
+| YiZhuMC | String | 鍚� | 鍖诲槺鍚嶇О锛堜唬鐮佹槧灏勫埌 `firassname`锛� |
+| ErZhuYSID | String | 鍚� | 浜屽姪鍖荤敓 ID |
+| ErZhuYSXM | String | 鍚� | 浜屽姪鍖荤敓濮撳悕 |
+| SanZhuYSID | String | 鍚� | 涓夊姪鍖荤敓 ID |
+| SanZhuYSXM | String | 鍚� | 涓夊姪鍖荤敓濮撳悕 |
+| ShouShuMXList | array | 鏄� | 鎵嬫湳鏄庣粏锛�**浠g爜鏈仛绌哄垽鏂�**锛岃涓嬭〃 |
+
+`ShouShuMXList` 鍏冪礌锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| ShouShuMCID | String | 鍚� | 鎵嬫湳鍚嶇О ID |
+| ShouShuMC | String | 鍚� | 鎵嬫湳鍚嶇О |
+| ZhuShouSBZ | String | 鏄� | 涓绘墜鏈爣蹇楋紝`1` 琛ㄧず涓绘墜鏈紱浠g爜鐩存帴璋冪敤 `.equals`锛�**涓嶈兘涓虹┖** |
+| QieKouLBDM | String | 鍚� | 鍒囧彛绫诲埆浠g爜 |
+| QieKouLBMC | String | 鍚� | 鍒囧彛绫诲埆鍚嶇О |
+| ShouShuJBDM | String | 鍚� | 鎵嬫湳绾у埆浠g爜 |
+| ShouShuJBMC | String | 鍚� | 鎵嬫湳绾у埆鍚嶇О |
+| ShouShuBW | String | 鍚� | 鎵嬫湳閮ㄤ綅 |
+| BiaoZhunBM | String | 鍚� | 鏍囧噯缂栫爜 |
+| ShouShuMCQZ | String | 鍚� | 鎵嬫湳鍚嶇О鍓嶇紑 |
+| ShouShuMCHZ | String | 鍚� | 鎵嬫湳鍚嶇О鍚庣紑 |
+
+澶勭悊缁撴灉锛�
+
+- 鎸� `patid + ShenQingDID` 鏌ヨ鎵嬫湳璁板綍锛屽瓨鍦ㄥ垯鏇存柊锛屼笉瀛樺湪鍒欐柊澧烇紱
+- 涓绘墜鏈紙`ZhuShouSBZ=1`锛変俊鎭洖鍐欐墜鏈富琛紝鍏朵綑鍐欏叆 `pat_med_operation_item`锛�
+- 宸插瓨鍦ㄧ殑鎵嬫湳浼氬厛鐗╃悊鍒犻櫎鏃ф槑缁嗗啀閲嶅缓銆�
+
+璇锋眰绀轰緥锛�
+
+```json
+{
+ "XiaoXiTou": {
+ "FaSongJGID": "47255004333112711A1001",
+ "FaSongJGMC": "涓芥按甯備腑鍖婚櫌",
+ "FaSongSJ": "2026-10-20 14:00:00",
+ "XiaoXiLX": "SM_SQ_ShenQing",
+ "XiaoXiID": "MSG-20261020-0004"
+ },
+ "YeWuXX": {
+ "XiaoXiID": "MSG-20261020-0004",
+ "BingRenXX": {
+ "ZuZhiJGID": "47255004333112711A1001",
+ "BingRenID": "BR0001",
+ "XingMing": "寮犱笁",
+ "JiuZhenYWID": "JZ20261020001",
+ "BingAnHao": "BA20261020001",
+ "DangQianKSID": "D001",
+ "DangQianKSMC": "蹇冭绠″唴绉�",
+ "DangQianBQID": "B001",
+ "DangQianBQMC": "蹇冨唴绉戠梾鍖�"
+ },
+ "ShouShuSQ": {
+ "ShenQingDID": "SS20261020001",
+ "ShouShuLBDM": "1",
+ "ShouShuLBMC": "鎷╂湡鎵嬫湳",
+ "YaoQiuSJ": "2026-10-21 09:00:00",
+ "ShenQingSJ": "2026-10-20 13:30:00",
+ "ShenQingYSID": "D1001",
+ "ShenQingYSXM": "鐜嬪尰鐢�",
+ "ShenQingKSID": "D001",
+ "ShenQingKSMC": "蹇冭绠″唴绉�",
+ "ShouShuKSID": "D003",
+ "ShouShuKSMC": "鎵嬫湳瀹�",
+ "ZhuDaoYSID": "D1001",
+ "ZhuDaoYSXM": "鐜嬪尰鐢�",
+ "ShouShuMXList": [
+ {
+ "ShouShuMCID": "OP001",
+ "ShouShuMC": "鍐犵姸鍔ㄨ剦閫犲奖鏈�",
+ "ZhuShouSBZ": "1",
+ "QieKouLBDM": "1",
+ "QieKouLBMC": "鈪犵被鍒囧彛",
+ "ShouShuJBDM": "3",
+ "ShouShuJBMC": "涓夌骇鎵嬫湳",
+ "ShouShuBW": "蹇冭剰"
+ }
+ ]
+ }
+ }
+}
+```
+
+#### 5.8.2 `SM_SQ_CheXiao` 鎵嬫湳鎾ら攢
+
+`YeWuXX` 缁撴瀯锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| XiaoXiID | String | 鏄紙寤鸿锛� | 鍝嶅簲鍥炴樉 |
+| BingRenXX | object | 鏄� | 鑷冲皯鍖呭惈 `BingAnHao`銆乣JiuZhenYWID` |
+| ShouShuCX | object | 鏄� | 鎾ら攢淇℃伅锛�**鑷冲皯鍖呭惈 `ShenQingDID`**锛屽叾浣欏瓧娈靛綋鍓嶆湭浣跨敤 |
+
+澶勭悊缁撴灉锛�
+
+- 鎸� `patid + ShenQingDID` 鎵惧埌鎵嬫湳璁板綍锛岀疆 `checkFlag=1`銆乣delFlag=1`锛�
+- 杞垹闄ゆ墜鏈槑缁嗭紱
+- 缁堟璇ユ墜鏈叧鑱旂殑闅忚瀛愪换鍔★紙`sendstate=4`锛屽娉ㄢ�滄墜鏈挙閿�鈥濓級骞舵竻鐞� Redis 缂撳瓨銆�
+
+> `ShouShuGX`锛堟墜鏈洿鏂帮級铏藉湪 `addOperationInfo` 涓鐣欙紝浣嗗綋鍓嶆病鏈� `XiaoXiLX` 璺敱鍒拌鍒嗘敮锛屽疄闄呬笉浼氱敓鏁堛��
+
+---
+
+## 鍏�佸搷搴旇鏄�
+
+### 6.1 鎴愬姛鍝嶅簲
+
+```json
+{
+ "Code": "0",
+ "Message": "success",
+ "Data": {
+ "XiaoXiID": "MSG-20261020-0001",
+ "ChuangJianSJ": 1760928000000
+ }
+}
+```
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+| --- | --- | --- |
+| Code | String | `"0"` 鎴愬姛锛宍"500"` 澶辫触 |
+| Message | String | `success` / `error` |
+| Data.XiaoXiID | String | 鍘熸牱杩斿洖璇锋眰 `YeWuXX.XiaoXiID` |
+| Data.ChuangJianSJ | long | 鏈嶅姟鍣ㄥ綋鍓嶆椂闂达紙JSON 搴忓垪鍖栦负姣鏃堕棿鎴筹級 |
+
+### 6.2 澶辫触鍝嶅簲
+
+```json
+{
+ "Code": "500",
+ "Message": "error",
+ "Data": {
+ "XiaoXiID": "MSG-20261020-0001",
+ "ChuangJianSJ": 1760928000000
+ }
+}
+```
+
+### 6.3 澶辫触鍒ゅ畾瑙勫垯
+
+- 涓氬姟鏂规硶杩斿洖 `false`锛堝鎵句笉鍒板搴斾綇闄㈣褰曘�佺敤鎴�/绉戝涓嶅瓨鍦ㄣ�佹暟鎹簱鎿嶄綔褰卞搷琛屾暟涓嶄负 1锛夆啋 `Code="500"`锛�
+- 涓氬姟鏂规硶鎶涘嚭寮傚父锛堝瓧娈电己澶便�佺被鍨嬭浆鎹㈠け璐ャ�佺┖鎸囬拡绛夛級鈫� 鎺у埗鍣ㄦ崟鑾峰苟璁板綍鏃ュ織锛岃繑鍥� `Code="500"`锛�
+- `XiaoXiTou` 缂哄け銆乣XiaoXiLX` 涓虹┖銆乣YeWuXX` 缂哄け绛夋姤鏂囩骇閿欒锛屽彲鑳藉湪鍝嶅簲缁勮闃舵鐩存帴鎶涘紓甯革紝杩斿洖 HTTP 500銆傚缓璁皟鐢ㄦ柟涓ユ牸鎸夋湰鏂囨。缁勮鎶ユ枃銆�
+
+---
+
+## 涓冦�佽皟鐢ㄦ敞鎰忎簨椤�
+
+1. **瀛楁鍚嶅ぇ灏忓啓鏁忔劅**锛氭墍鏈夊瓧娈靛潎涓烘嫾闊抽瀛楁瘝澶у啓鏍煎紡锛屽 `BingRenXX`銆乣JiuZhenYWID`锛屼笉鑳藉啓鎴愪笅鍒掔嚎鎴栧叏灏忓啓銆�
+2. **鍞竴涓氬姟閿�**锛�
+ - 浣忛櫌绫绘秷鎭娇鐢� `BingAnHao + JiuZhenYWID` 瀹氫綅浣忛櫌璁板綍锛�
+ - 闂ㄨ瘖鎺ヨ瘖浣跨敤 `BingAnHao + JiuZhenYWID` 瀹氫綅闂ㄨ瘖璁板綍锛�
+ - 鎮h�呮。妗堜娇鐢� `ZhengJianHM`锛堜负绌烘椂鐢� `JiuZhenKH`锛�+ 鏈烘瀯瀹氫綅锛�
+ - 妫�鏌ヤ娇鐢� `ShenQingDID`锛�
+ - 鎵嬫湳浣跨敤 `ShenQingDID`锛�
+ - 鏈烘瀯/绉戝/鐢ㄦ埛/鐥呭尯浣跨敤鍚勮嚜 ID + 鏈烘瀯銆�
+3. **閲嶅鎺ㄩ��**锛氫唬鐮佹寜涓婅堪涓氬姟閿煡璇㈠悗鎵ц鈥滃瓨鍦ㄥ垯鏇存柊銆佷笉瀛樺湪鍒欐柊澧炩�濓紝閲嶅鎺ㄩ�佷竴鑸笉浼氶噸澶嶆彃鍏ワ紱浣嗚嫢涓氬姟閿彉鍖栵紝浼氫骇鐢熸柊璁板綍銆�
+4. **蹇呬紶鍒楄〃**锛氫互涓嬫秷鎭鍒楄〃瀛楁娌℃湁绌哄垽鏂紝缂哄け浼氱洿鎺ユ姤閿欙細
+ - `JZ_ZY_RuYuanDJ`锛歚DiZhiXXList`銆乣LianXiRList`銆乣ZhenDuanList`锛�
+ - `JZ_ZY_RuKe`锛歚BingRenXX.DiZhiXXList`锛�
+ - `JZ_MZ_WanChengJZ`锛歚ZhenDuanList`銆乣WenZhenList`锛�
+ - `SM_SQ_ShenQing`锛歚ShouShuSQ.ShouShuMXList`锛屼笖姣忔潯鏄庣粏 `ZhuShouSBZ` 涓嶈兘涓虹┖銆�
+5. **鏃ユ湡鏍煎紡**锛氶櫎鐗瑰埆璇存槑澶栵紝鏃ユ湡鏃堕棿缁熶竴浣跨敤 `yyyy-MM-dd HH:mm:ss`锛沗BingRenXX.ChuShengRQ` 浠g爜鍐呴儴浣跨敤 `yyyy-MM-dd hh:mm:ss` 瑙f瀽锛屽缓璁悓鏍蜂紶瀹屾暣鏃堕棿锛屼笖灏介噺浣跨敤 `08:00:00` 杩欑被 12 灏忔椂鍒跺彲瑙f瀽鐨勬椂闂淬��
+6. **鏁板瓧瀛楁**锛歚BingRenXX.XingBieDM`銆乣JianChaSQ.YiZhuID`銆乣JinE`銆佸悇绫� `*BZ` 鏍囧織銆乣JC_BG_BaoGao.WeiJiZBZ` 绛変細琚洿鎺ヨ浆鎹负 Long/Float/Integer锛屽繀椤讳紶鏁板瓧瀛楃涓层��
+7. **鏈烘瀯涓庨櫌鍖�**锛�
+ - `FaSongJGID` 鏄満鏋勮繃婊や笌钀藉簱 `orgid` 鐨勪富瑕佹潵婧愶紱
+ - 闄㈠尯瀛楁褰撳墠缁熶竴鍐欐涓� `"1"`锛堜附姘存棤闄㈠尯姒傚康锛夛紱
+ - `JZ_MZ_WanChengJZ` 浣跨敤 `FaSongJGID` 瑕嗙洊鎮h�呬俊鎭腑鐨勬満鏋� ID銆�
+8. **姝讳骸鎮h�呭鐞�**锛歚LiYuanQXDM=5` 鏃讹紝绯荤粺浼氬彇娑堟偅鑰呭悗缁殢璁匡紙`fuflag=0`锛夈�佹爣璁版。妗堟棤闇�闅忚銆佺粓姝㈠凡鐢熸垚浠诲姟锛涜纭繚绂婚櫌鏂瑰紡浠g爜鍑嗙‘銆�
+9. **涓嶉殢璁挎満鏋�**锛氶厤缃」 `noLongTask` 涓殑鏈烘瀯锛屽嚭闄�/鎺ヨ瘖鏃� `fuflag` 浼氳缃负 `0`銆�
+10. **娑堟伅绫诲瀷鐧藉悕鍗�**锛氭湭鍦ㄧ涓夌珷鍒楀嚭鐨� `XiaoXiLX` 浼氱洿鎺ヨ繑鍥炴垚鍔熶絾涓嶅仛浠讳綍澶勭悊锛岃仈璋冩椂璇峰厛鏍稿绫诲瀷鎷煎啓銆�
+11. **鎺ュ彛鏃犻壌鏉�**锛氳鍦板潃瀵瑰缃戝紑鏀炬椂瀛樺湪鏁版嵁鍐欏叆椋庨櫓锛屽缓璁�氳繃缃戝叧/闃茬伀澧欓檺鍒舵潵婧� IP锛屾垨鍦ㄧ綉鍏冲眰澧炲姞绛惧悕鏍¢獙銆�
+
+---
+
+## 鍏�佸揩閫熸帓鏌�
+
+| 鐜拌薄 | 鍙兘鍘熷洜 |
+| --- | --- |
+| 杩斿洖 `Code=500` 涓旀棩蹇楁彁绀虹┖鎸囬拡 | 缂哄皯 `XiaoXiTou`銆乣XiaoXiLX`銆乣BingRenXX`銆乣JiuZhenXX` 鎴栧繀浼犲垪琛� |
+| 杩斿洖 `Code=500` 涓旀棩蹇楁彁绀� `NumberFormatException` | `XingBieDM`銆乣YiZhuID`銆乣JinE`銆乣*BZ` 绛夊瓧娈典紶浜嗛潪鏁板瓧 |
+| 杩斿洖 `Code=500` 涓旀棩蹇楁彁绀� `ParseException` | 鏃ユ湡涓嶆槸 `yyyy-MM-dd HH:mm:ss` |
+| 杩斿洖鎴愬姛浣嗘暟鎹湭鏇存柊 | `XiaoXiLX` 鎷煎啓閿欒锛岃蛋浜嗛粯璁ゅ垎鏀紱鎴栦笟鍔¢敭锛堢梾妗堝彿/灏辫瘖涓氬姟 ID/鐢宠鍗� ID锛変笉鍖归厤 |
+| 鎮h�呮。妗堥噸澶� | `ZhengJianHM`銆乣JiuZhenKH` 涓虹┖锛屾垨涓嶅悓鏈烘瀯涓嬮噸澶嶅缓妗� |
+| 浣忛櫌璁板綍閲嶅 | `BingAnHao` 鎴� `JiuZhenYWID` 鍙戠敓鍙樺寲 |
+| 鍑洪櫌鍚庝粛鍦ㄩ櫌 | 鏈紶 `JiuZhenXX.ChuYuanSJ`锛屾垨 `LiYuanQXDM` 闈炴硶 |
+| 闅忚浠诲姟鏈敓鎴� | `SuiFangJH.SuiFangBS=0`銆佹満鏋勫湪 `noLongTask` 涓�乣fuflag=0`锛屾垨 `JZ_MZ_WanChengJZ` 鏈紶闅忚澶╂暟 |
diff --git "a/doc/api/\345\246\207\345\271\274\344\270\223\347\247\221\346\241\243\346\241\210\347\224\237\346\210\220\346\216\245\345\217\243\346\226\207\346\241\243_20261104.md" "b/doc/api/\345\246\207\345\271\274\344\270\223\347\247\221\346\241\243\346\241\210\347\224\237\346\210\220\346\216\245\345\217\243\346\226\207\346\241\243_20261104.md"
new file mode 100644
index 0000000..7bc02e5
--- /dev/null
+++ "b/doc/api/\345\246\207\345\271\274\344\270\223\347\247\221\346\241\243\346\241\210\347\224\237\346\210\220\346\216\245\345\217\243\346\226\207\346\241\243_20261104.md"
@@ -0,0 +1,342 @@
+# 濡囧辜涓撶妗f鐢熸垚鎺ュ彛鏂囨。
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 妯″潡 | 鏅鸿兘闅忚锛坰martor锛� |
+| 鍔熻兘 | 闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鐢熸垚濡囩/鍎跨涓撶妗f |
+| 閫傜敤鏈烘瀯 | `orgid = 47226079133110211G1001`锛堜附姘村競濡囧辜淇濆仴闄級 |
+| 鍏宠仈琛� | `pat_med_outhosp`銆乣pat_specific_archive_generate_config`銆乣pat_maternity_archive(_detail)`銆乣pat_child_archive(_detail)` |
+| 缂栧啓鏃ユ湡 | 2026-11-04 |
+
+---
+
+## 涓�銆佸姛鑳借鏄�
+
+1. HIS 璋冪敤瀹屾垚鎺ヨ瘖鎺ュ彛 `JZ_MZ_WanChengJZ` 鍚庯紝绯荤粺鍐欏叆闂ㄨ瘖璁板綍 `pat_med_outhosp`銆�
+2. 绯荤粺璇诲彇 `pat_specific_archive_generate_config` 涓附姘村競濡囧辜淇濆仴闄㈢殑閰嶇疆銆�
+3. 鎸夐厤缃尮閰嶉棬璇婅褰曠殑绉戝 Code 鎴栦富璇婃柇 ICD10 Code锛�
+ - 鍛戒腑濡囩閰嶇疆锛氬啓鍏� `pat_maternity_archive` / `pat_maternity_archive_detail`锛�
+ - 鍛戒腑鍎跨閰嶇疆锛氬啓鍏� `pat_child_archive` / `pat_child_archive_detail`銆�
+4. 闄ゅ疄鏃跺洖璋冨锛岃繕鎻愪緵鎵嬪姩琛ラ噰鎺ュ彛鍜屽畾鏃朵换鍔″叆鍙c��
+
+> 浠� `orgid = 47226079133110211G1001` 鐢熸晥锛屽叾浠栨満鏋勮皟鐢ㄥ畬鎴愭帴璇婃帴鍙d笉浼氱敓鎴愬骞间笓绉戞。妗堛��
+
+---
+
+## 浜屻�佸畬鎴愭帴璇婂洖璋冩帴鍙�
+
+### 2.1 鍩烘湰淇℃伅
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 鎺ュ彛鍦板潃 | `/smartor/serviceExternal/generalInterface` |
+| 璇锋眰鏂瑰紡 | `POST` |
+| Content-Type | `application/json;charset=UTF-8` |
+| 璁よ瘉鏂瑰紡 | 鏃犻渶鐧诲綍锛坄/smartor/serviceExternal/**` 宸叉斁琛岋級 |
+| 娑堟伅绫诲瀷 | `JZ_MZ_WanChengJZ` |
+| 涓氬姟鍚箟 | 闂ㄦ�ヨ瘖瀹屾垚鎺ヨ瘖 |
+| 澶勭悊鍏ュ彛 | `ServiceExternalServiceImpl.addFinshJZInfo` |
+
+### 2.2 娑堟伅澶� `XiaoXiTou`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| `XiaoXiLX` | String | 鏄� | 鍥哄畾浼� `JZ_MZ_WanChengJZ` |
+| `XiaoXiID` | String | 寤鸿 | 娑堟伅 ID锛屽搷搴斿師鏍疯繑鍥� |
+| `FaSongJGID` | String | 鏄� | 鏈烘瀯 ID锛屽啓鍏� `orgid`锛涚敓鎴愭。妗堟椂蹇呴』鏄� `47226079133110211G1001` |
+| `FaSongJGMC` | String | 鍚� | 鏈烘瀯鍚嶇О |
+| `FaSongSJ` | String | 鍚� | 鍙戦�佹椂闂达紝`yyyy-MM-dd HH:mm:ss` |
+
+### 2.3 涓氬姟淇℃伅 `YeWuXX`
+
+#### 2.3.1 鎮h�呬俊鎭� `BingRenXX`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| `XingMing` | String | 鏄� | 鎮h�呭鍚嶏紝鐢ㄤ簬鎮h�呮。妗堜笌涓撶妗f |
+| `BingAnHao` | String | 鏄� | 鐥呮鍙凤紝鍐欏叆闂ㄨ瘖璁板綍 `outhospno`锛屾。妗堝箓绛夐敭涔嬩竴 |
+| `JiuZhenYWID` | String | 鏄� | 灏辫瘖涓氬姟 ID锛屽啓鍏ラ棬璇婅褰� `serialnum` |
+| `JiuZhenKH` | String | 鍚� | 灏辫瘖鍗″彿 |
+| `ZhengJianHM` | String | 寤鸿 | 璇佷欢鍙风爜锛岀敤浜庢偅鑰呮。妗堝尮閰� |
+| `XingBieDM` | String | 鍚� | 鎬у埆浠g爜锛屾暟瀛楀瓧绗︿覆 |
+| `ChuShengRQ` | String | 寤鸿 | 鍑虹敓鏃ユ湡锛宍yyyy-MM-dd HH:mm:ss` |
+| `LianXiDH` | String | 寤鸿 | 鑱旂郴鐢佃瘽 |
+| `XianZhuZXX` | String | 鍚� | 鐜颁綇鍧� |
+
+> 浠g爜浣跨敤 `XingMing` 鍙栧鍚嶏紱鍏ュ弬涓殑 `BingRenXM` 涓嶅弬涓庤瀛楁璧嬪�硷紝浣嗘牱渚嬪悓鏃朵紶浜� `XingMing`銆�
+
+#### 2.3.2 灏辫瘖淇℃伅 `JiuZhenXX`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| `JiuZhenKSID` | String | 鏄� | 灏辫瘖绉戝 ID锛屽啓鍏� `deptcode`锛岀敤浜庣瀹ゅ尮閰� |
+| `JiuZhenKSMC` | String | 鏄� | 灏辫瘖绉戝鍚嶇О锛屽啓鍏� `deptname` |
+| `JiuZhenRQ` | String | 鏄� | 灏辫瘖鏃ユ湡锛宍yyyy-MM-dd HH:mm:ss`锛屽啓鍏� `admitdate`銆佹。妗� `diagTime` |
+| `ChuZhenBZ` | Integer | 鍚� | 鍒濊瘖鏍囧織锛屼笉鍙備笌妗f鐢熸垚 |
+
+#### 2.3.3 璇婃柇鍒楄〃 `ZhenDuanList`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| `ZhenDuanLBMC` | String | 鏄� | 璇婃柇绫诲埆鍚嶇О锛涚瓑浜� `涓昏瘖鏂璥 鐨勮褰曞啓鍏ラ棬璇婁富璇婃柇鍜屾。妗堣瘖鏂� |
+| `ZhenDuanMC` | String | 鏄� | 璇婃柇鍚嶇О |
+| `Icd10` | String | 鏄� | ICD10 缂栫爜锛岀敤浜庤瘖鏂尮閰嶏紝鍐欏叆 `icd10code` |
+| `ZhenDuanYSID` | String | 鍚� | 璇婃柇鍖荤敓 ID |
+| `ZhenDuanYSXM` | String | 鍚� | 璇婃柇鍖荤敓濮撳悕 |
+
+> 妗f鐢熸垚鍙娇鐢� `ZhenDuanLBMC = 涓昏瘖鏂璥 鐨勯偅涓�鏉¤瘖鏂�傚瓙璇婃柇涓嶅弬涓庡尮閰嶃��
+
+#### 2.3.4 闂瘖鍒楄〃 `WenZhenList`
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| `WenZhenLXMC` | String | 鍚� | `涓昏瘔`銆乣鐜扮梾鍙瞏銆乣闅忚澶╂暟`銆乣闅忚澶╂暟鍗曚綅` 绛� |
+| `NeiRong` | String | 鍚� | 闂瘖鍐呭 |
+
+> 闂瘖淇℃伅鐢ㄤ簬闂ㄨ瘖璁板綍鐨勪富璇夈�佺幇鐥呭彶鍜岄殢璁夸换鍔★紝涓嶅奖鍝嶄笓绉戞。妗堢敓鎴愩��
+
+### 2.4 璇锋眰绀轰緥
+
+浠ヤ笅涓衡�滃绉�-鏃╁瓡鍏崇埍鈥濇牱渚嬶紙瀹屾暣鎶ユ枃瑙� `D:\OneDrive\Desktop\绉诲簱\濡囧辜\濡囩-鏃╁瓡鍏崇埍.txt`锛夛細
+
+```json
+{
+ "XiaoXiTou": {
+ "XiaoXiLX": "JZ_MZ_WanChengJZ",
+ "XiaoXiMC": "瀹屾垚鎺ヨ瘖",
+ "XiaoXiID": "109b22c7-d6c6-49c3-adb1-cf0e6af9e9ef",
+ "FaSongSJ": "2026-11-04 09:44:37",
+ "FaSongJGID": "47226079133110211G1001",
+ "FaSongJGMC": "涓芥按甯傚骞间繚鍋ラ櫌"
+ },
+ "YeWuXX": {
+ "BingRenXX": {
+ "BingRenID": "1000000002032043552",
+ "XingMing": "寮犳偊",
+ "JiuZhenYWID": "1659700037955006464",
+ "BingAnHao": "202637799",
+ "ZhengJianHM": "332501200108221226",
+ "XingBieDM": "2",
+ "ChuShengRQ": "2001-08-22 00:00:00",
+ "LianXiDH": "15857816735",
+ "ZuZhiJGID": "47226079133110211G1001"
+ },
+ "JiuZhenXX": {
+ "JiuZhenKSID": "010104010601",
+ "JiuZhenKSMC": "鏃╁瓡鍏崇埍闂ㄨ瘖",
+ "JiuZhenRQ": "2026-11-04 09:44:36"
+ },
+ "ZhenDuanList": [
+ {
+ "ZhenDuanLBDM": "0",
+ "ZhenDuanLBMC": "涓昏瘖鏂�",
+ "ZhenDuanID": "22965",
+ "ZhenDuanMC": "瀛�19鍛�",
+ "ZhenDuanYSID": "1551507108942479360",
+ "ZhenDuanYSXM": "璋㈠濡�",
+ "Icd10": "O26.900x206"
+ }
+ ],
+ "WenZhenList": [
+ {
+ "WenZhenLXDM": "1",
+ "WenZhenLXMC": "涓昏瘔",
+ "NeiRong": "鍋滅粡19+3 鍛紝浜ф銆�"
+ },
+ {
+ "WenZhenLXDM": "2",
+ "WenZhenLXMC": "鐜扮梾鍙�",
+ "NeiRong": "瀛� 19+3鍛紝宸插缓鍐岋紝瀹氭湡浜ф锛岀幇鏃犺吂鐥涳紝鏃犻槾閬撴祦琛�娴佹恫绛夊紓甯�"
+ }
+ ]
+ }
+}
+```
+
+### 2.5 鍝嶅簲璇存槑
+
+鎴愬姛鍝嶅簲锛�
+
+```json
+{
+ "Code": "0",
+ "Message": "success",
+ "Data": {
+ "XiaoXiID": "109b22c7-d6c6-49c3-adb1-cf0e6af9e9ef",
+ "ChuangJianSJ": 1793756677000
+ }
+}
+```
+
+澶辫触鍝嶅簲锛�
+
+```json
+{
+ "Code": "500",
+ "Message": "error",
+ "Data": {
+ "XiaoXiID": "109b22c7-d6c6-49c3-adb1-cf0e6af9e9ef",
+ "ChuangJianSJ": 1793756677000
+ }
+}
+```
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+| --- | --- | --- |
+| `Code` | String | `"0"` 鎴愬姛锛宍"500"` 澶辫触 |
+| `Message` | String | `success` / `error` |
+| `Data.XiaoXiID` | String | 鍘熸牱杩斿洖 `YeWuXX.XiaoXiID`锛屼笉瀛樺湪鏃跺彇 `XiaoXiTou.XiaoXiID` |
+| `Data.ChuangJianSJ` | long | 鏈嶅姟鍣ㄥ綋鍓嶆椂闂存埑锛堟绉掞級 |
+
+> 妗f鐢熸垚澶辫触宸插湪 `genePatSpecificArchive` 鍐呮崟鑾峰苟璁板綍鏃ュ織锛屼笉浼氬鑷村畬鎴愭帴璇婃帴鍙h繑鍥炲け璐ャ��
+
+---
+
+## 涓夈�佷簲涓牱渚嬬殑妗f鐢熸垚鏄犲皠
+
+| 鏍蜂緥鏂囦欢 | 鎮h�� | 闂ㄨ瘖缂栧彿 `outhospno` | 娴佹按鍙� `serialnum` | 绉戝 `deptcode` | 绉戝鍚嶇О | 涓昏瘖鏂� ICD10 | 鐩爣妗f琛� | `archiveType` |
+| --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| 濡囩-鏃╁瓡鍏崇埍.txt | 寮犳偊 | 202637799 | 1659700037955006464 | 010104010601 | 鏃╁瓡鍏崇埍闂ㄨ瘖 | O26.900x206 | `pat_maternity_archive` | 1 |
+| 濡囩-鍥寸粷缁忔湡MHI.txt | 寮犵 | 202620972 | 1656887374212886528 | 010102010207 | 濡囩鍐呭垎娉岋紙闈掓槬鏈熴�佹洿骞存湡锛夐棬璇� | N95.900 | `pat_maternity_archive` | 2 |
+| 鍎跨-钀ュ吇鎬х柧鐥�.txt | 鏉庢矃鍒� | 202651402 | 1659715824983924736 | 010104010403 | 鍎跨蹇冪悊/璇█/琛屼负鍙戣偛闂ㄨ瘖 | E46.x00x003 | `pat_child_archive` | 1 |
+| 鍎跨-瀛︿範鍥伴毦.txt | 褰泤鐞� | 202647368 | 1658992475891146752 | 010104010401 | 鍎跨淇濆仴闂ㄨ瘖 | F81.900 | `pat_child_archive` | 2 |
+| 鍎跨-楂樺嵄鍎夸笓妗�.txt | 鐜嬪崡鏄� | 202607546 | 1659487324381261824 | 010104010405 | 鏃╀骇鍎�/楂樺嵄鍎块棬璇� | P96.800x904 | `pat_child_archive` | 3 |
+
+### 3.1 閰嶇疆璇存槑
+
+閰嶇疆琛細`pat_specific_archive_generate_config`銆�
+
+| 瀛楁 | 璇存槑 |
+| --- | --- |
+| `dept_type` | `1` 绉戝锛宍2` 鐥呭尯锛涢棬璇婅褰曟寜 `1` 鍖归厤 |
+| `dept_category` | `1` 濡囩锛宍2` 鍎跨 |
+| `archive_type` | 濡囩锛歚1` 鏃╁瓡鍏崇埍銆乣2` 鍥寸粷缁忔湡MHI锛涘効绉戯細`1` 钀ュ吇鎬х柧鐥呫�乣2` 瀛︿範鍥伴毦銆乣3` 楂樺嵄鍎夸笓妗� |
+| `dept_codes` | 绉戝 Code JSON 鏁扮粍瀛楃涓� |
+| `icd10_codes` | 璇婃柇 Code JSON 鏁扮粍瀛楃涓� |
+| `orgid` | 鏈烘瀯 ID |
+| `campusid` | 闄㈠尯 ID |
+| `del_flag` | `0` 鏈夋晥锛宍1` 鍒犻櫎 |
+
+鍖归厤瑙勫垯锛�
+
+1. 浠呮煡璇� `del_flag = '0'` 鐨勯厤缃��
+2. 鏈烘瀯閰嶇疆浼樺厛锛涜鏈烘瀯娌℃湁閰嶇疆鏃舵墠浣跨敤鍏ㄥ眬閰嶇疆銆�
+3. `campusid` 涓虹┖涓嶉檺鍒讹紱涓嶄负绌烘椂蹇呴』涓庤褰曠殑闄㈠尯涓�鑷淬��
+4. 閮ㄩ棬鏉′欢涓庤瘖鏂潯浠朵负 **OR**锛氫换涓�鍛戒腑鍗崇敓鎴愩��
+5. 鍚屼竴闂ㄨ瘖璁板綍銆佸悓涓�閮ㄩ棬鍒嗙被銆佸悓涓�妗f绫诲瀷鍙敓鎴愪竴鏉℃。妗堛��
+6. 鏈厤缃�佹湭鍛戒腑鎴栫敓鎴愬紓甯稿潎涓嶉樆鏂畬鎴愭帴璇婁富娴佺▼銆�
+
+鍒濆鍖栬剼鏈細
+
+```text
+sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql
+```
+
+---
+
+## 鍥涖�佹墜鍔ㄨˉ閲囨帴鍙�
+
+### 4.1 鍩烘湰淇℃伅
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 鎺ュ彛鍦板潃 | `/monitor/his/collectMchArchive` |
+| 璇锋眰鏂瑰紡 | `POST` |
+| Content-Type | `application/json` |
+| 璁よ瘉鏂瑰紡 | 闇�鐧诲綍锛岃姹傚ご鎼哄甫 `Authorization: Bearer {token}` |
+| 鍔熻兘 | 浠� HIS 闂ㄨ瘖瑙嗗浘鎸夊氨璇婃棩鏈熻ˉ閲囦附姘村骞奸棬璇婃帴璇婂畬鎴愯褰曪紝骞剁敓鎴愪笓绉戞。妗� |
+
+### 4.2 璇锋眰鍙傛暟
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+| --- | --- | --- | --- |
+| `startTime` | Date | 鍚� | 灏辫瘖寮�濮嬫棩鏈燂紝鏍煎紡 `yyyy-MM-dd`锛涗笉浼犻粯璁ゆ槰澶� |
+| `endTime` | Date | 鍚� | 灏辫瘖缁撴潫鏃ユ湡锛屾牸寮� `yyyy-MM-dd`锛涗笉浼犻粯璁や粖澶╋紱浼犳棩鏈熸椂鑷姩琛ラ綈鍒板綋澶� `23:59:59` |
+
+璇锋眰绀轰緥锛�
+
+```json
+{
+ "startTime": "2026-11-03",
+ "endTime": "2026-11-03"
+}
+```
+
+### 4.3 鍝嶅簲璇存槑
+
+```json
+{
+ "code": 200,
+ "msg": "鎿嶄綔鎴愬姛",
+ "data": 25
+}
+```
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+| --- | --- | --- |
+| `code` | int | `200` 鎴愬姛锛宍500` 澶辫触 |
+| `msg` | String | 鎻愮ず淇℃伅 |
+| `data` | Integer | 鏈澶勭悊褰卞搷琛屾暟锛堟偅鑰呮。妗堛�侀棬璇婅褰曞啓鍏�/鏇存柊琛屾暟锛屼笉绛夊悓浜庢。妗堟潯鏁帮級 |
+
+> 璇ユ帴鍙e唴閮ㄦ牎楠� `orgid = 47226079133110211G1001`锛屽叾浠栨満鏋勭洿鎺ヨ繑鍥� 0銆�
+
+---
+
+## 浜斻�佸畾鏃朵换鍔�
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 浠诲姟鏂规硶 | `ryTask.collectMchArchive()` |
+| 鍙傛暟 | 鏃� |
+| 榛樿鏃堕棿鑼冨洿 | 鏄ㄥぉ `00:00:00` ~ 浠婂ぉ `00:00:00` |
+| 鍔熻兘 | 閲囬泦涓芥按濡囧辜闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍骞剁敓鎴愪笓绉戞。妗� |
+
+`sys_job` 閰嶇疆绀轰緥锛�
+
+| 瀛楁 | 绀轰緥鍊� |
+| --- | --- |
+| 浠诲姟鍚嶇О | 涓芥按濡囧辜闂ㄨ瘖涓撶妗f鐢熸垚 |
+| 璋冪敤鐩爣瀛楃涓� | `ryTask.collectMchArchive()` |
+| cron 琛ㄨ揪寮� | `0 30 1 * * ?` |
+| 鐘舵�� | 姝e父 |
+
+---
+
+## 鍏�佹。妗堟煡璇㈡帴鍙�
+
+妗f鏌ヨ銆佽鎯呫�佸垹闄ゆ帴鍙f部鐢ㄧ幇鏈夊骞兼。妗堟帴鍙o紝璇﹁ `doc/api/濡囦繚鎺ュ彛鏂囨。.md`銆�
+
+| 鍔熻兘 | 鎺ュ彛 |
+| --- | --- |
+| 鏌ヨ濡囩妗f鍒楄〃 | `POST /smartor/maternityArchive/selectPatMaternityArchiveList` |
+| 鑾峰彇濡囩妗f璇︽儏 | `GET /smartor/maternityArchiveDetail/getInfo/{archiveid}` |
+| 鏌ヨ鍎跨妗f鍒楄〃 | `POST /smartor/childArchive/selectPatChildArchiveList` |
+| 鑾峰彇鍎跨妗f璇︽儏 | `GET /smartor/childArchiveDetail/getInfo/{archiveid}` |
+
+鍒楄〃鏌ヨ鍙寜 `outhospno`銆乣archiveType`銆乣patname`銆乣deptcode`銆乣icd10code` 绛夋潯浠舵牳瀵圭敓鎴愮粨鏋溿��
+
+---
+
+## 涓冦�佸紓甯镐笌杈圭晫鍦烘櫙
+
+| 鍦烘櫙 | 澶勭悊鏂瑰紡 |
+| --- | --- |
+| 鏈烘瀯涓嶆槸涓芥按濡囧辜 | 涓嶇敓鎴愭。妗堬紝瀹屾垚鎺ヨ瘖鎺ュ彛姝e父杩斿洖 |
+| 鏈厤缃鍒欐垨閰嶇疆宸插垹闄� | 涓嶇敓鎴愭。妗堬紝涓嶆姤閿� |
+| 閰嶇疆 `dept_codes`銆乣icd10_codes` 閮戒负绌� | 閰嶇疆瑙嗕负鏃犳晥锛岃烦杩� |
+| `dept_type = 2`锛堢梾鍖猴級 | 闂ㄨ瘖璁板綍娌℃湁鐥呭尯瀛楁锛屼笉鍙備笌闂ㄨ瘖鍖归厤 |
+| 璇婃柇 Code 涓虹┖ | 浠呮寜绉戝鏉′欢鍖归厤锛涜嫢閰嶇疆鍙湁璇婃柇鏉′欢鍒欎笉鍛戒腑 |
+| 闂ㄨ瘖缂栧彿 `outhospno` 涓虹┖ | 璺宠繃璇ヨ褰曪紝璁板綍鍛婅鏃ュ織 |
+| 鎮h�呮。妗堜笉瀛樺湪 | 鎸夋偅鑰呯紪鍙�/璇佷欢鍙峰洖鏌ヤ粛鎵句笉鍒版椂璺宠繃 |
+| 閲嶅鍥炶皟 | 鎸変笟鍔¢敭鏇存柊宸叉湁妗f锛屼笉閲嶅鎻掑叆 |
+| 涓�鏉¤褰曞懡涓鏉¢厤缃� | 鎸変笉鍚� `dept_category + archive_type` 鍒嗗埆鐢熸垚 |
+| 閰嶇疆 JSON 鏍煎紡寮傚父 | 璁板綍鍛婅鏃ュ織锛屾寜閫楀彿鍒嗛殧鍏滃簳瑙f瀽 |
+| 妗f鐢熸垚寮傚父 | 鎹曡幏寮傚父骞惰褰曟棩蹇楋紝涓嶅奖鍝嶅畬鎴愭帴璇婂搷搴� |
+
+---
+
+## 鍏�佸彉鏇磋褰�
+
+| 鏃ユ湡 | 鍐呭 |
+| --- | --- |
+| 2026-11-04 | 鏂板涓芥按甯傚骞间繚鍋ラ櫌闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鐢熸垚濡囩/鍎跨妗f璇存槑 |
diff --git "a/docs/\345\246\207\345\271\274\344\270\223\347\247\221\346\241\243\346\241\210\347\224\237\346\210\220\346\265\213\350\257\225\346\212\245\345\221\212_20261104.md" "b/docs/\345\246\207\345\271\274\344\270\223\347\247\221\346\241\243\346\241\210\347\224\237\346\210\220\346\265\213\350\257\225\346\212\245\345\221\212_20261104.md"
new file mode 100644
index 0000000..2925443
--- /dev/null
+++ "b/docs/\345\246\207\345\271\274\344\270\223\347\247\221\346\241\243\346\241\210\347\224\237\346\210\220\346\265\213\350\257\225\346\212\245\345\221\212_20261104.md"
@@ -0,0 +1,307 @@
+# 濡囧辜涓撶妗f鐢熸垚娴嬭瘯鎶ュ憡
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 妯″潡 | 鏅鸿兘闅忚锛坰martor锛� |
+| 鍔熻兘 | 闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鐢熸垚濡囩/鍎跨涓撶妗f |
+| 閫傜敤鏈烘瀯 | `orgid = 47226079133110211G1001`锛堜附姘村競濡囧辜淇濆仴闄級 |
+| 娴嬭瘯绫诲瀷 | 寮�鍙戣嚜娴嬶紙闈欐�侀獙璇� + 鑱旇皟鐢ㄤ緥璁捐锛� |
+| 娴嬭瘯鏃ユ湡 | 2026-11-04 |
+| 鍏宠仈鏂囨。 | `doc/api/濡囧辜涓撶妗f鐢熸垚鎺ュ彛鏂囨。_20261104.md` |
+
+---
+
+## 1. 娴嬭瘯姒傝堪
+
+### 1.1 娴嬭瘯鐩爣
+
+楠岃瘉浠ヤ笅鑳藉姏锛�
+
+1. `JZ_MZ_WanChengJZ` 瀹屾垚鎺ヨ瘖鎶ユ枃鍐欏叆闂ㄨ瘖璁板綍鍚庯紝鑳芥寜閰嶇疆鐢熸垚濡囩/鍎跨妗f銆�
+2. 浜斾釜鍙傝�冩牱渚嬪垎鍒敓鎴愭纭。妗堢被鍨嬨��
+3. 浠� `orgid = 47226079133110211G1001` 鐢熸晥锛屽叾浠栨満鏋勪笉鐢熸垚銆�
+4. 閲嶅鍥炶皟銆佹棤閰嶇疆銆侀厤缃仠鐢ㄧ瓑鍦烘櫙涓嶅奖鍝嶅畬鎴愭帴璇婁富娴佺▼銆�
+5. 鎵嬪姩琛ラ噰鎺ュ彛鍜屽畾鏃朵换鍔″叆鍙e彲鐢ㄣ��
+
+### 1.2 娴嬭瘯鑼冨洿
+
+| 鑼冨洿 | 璇存槑 |
+| --- | --- |
+| 瀹屾垚鎺ヨ瘖鍥炶皟 | `/smartor/serviceExternal/generalInterface`锛屾秷鎭被鍨� `JZ_MZ_WanChengJZ` |
+| 鎵嬪姩琛ラ噰鎺ュ彛 | `/monitor/his/collectMchArchive` |
+| 瀹氭椂浠诲姟 | `ryTask.collectMchArchive()` |
+| 妗f鐢熸垚鏈嶅姟 | `PatSpecificArchiveGenerateServiceImpl` |
+| 閰嶇疆鏌ヨ | `pat_specific_archive_generate_config` |
+| 妗f钀藉簱 | `pat_maternity_archive(_detail)`銆乣pat_child_archive(_detail)` |
+
+### 1.3 涓嶅湪鏈鑼冨洿
+
+- 濡囩/鍎跨妗f椤甸潰 UI 浜や簰娴嬭瘯銆�
+- 闅忚浠诲姟鐢熸垚銆佺煭淇�/寰俊鍙戦�佹祴璇曘��
+- HIS 渚х綉缁溿�侀槻鐏銆佹帴鍙h仈璋冪幆澧冨彲鐢ㄦ�с��
+
+---
+
+## 2. 娴嬭瘯鐜
+
+| 椤圭洰 | 鍐呭 |
+| --- | --- |
+| 浠g爜鍒嗘敮 | 鏈湴 `master` 宸ヤ綔鍖� |
+| JDK | 21.0.12 |
+| Maven | 3.9.9 |
+| 搴旂敤绔彛 | 8095锛堥厤缃�硷級 |
+| 涓诲簱 | MySQL锛屽簱鍚� `smartor-lisui` 瀵瑰簲鐜 |
+| HIS 鏉ユ簮 | `healthy_outhosp` 闂ㄨ瘖瑙嗗浘 / `JZ_MZ_WanChengJZ` 瀹炴椂鎶ユ枃 |
+| 鎺ュ彛宸ュ叿 | curl / Postman锛堣仈璋冩椂浣跨敤锛� |
+
+> 鏈鏈繛鎺ュ疄闄呬笟鍔℃暟鎹簱鎵ц钀藉簱鐢ㄤ緥锛屾暟鎹簱鐩稿叧鐢ㄤ緥鏍囪涓衡�滃緟鑱旇皟鎵ц鈥濄��
+
+---
+
+## 3. 娴嬭瘯鏁版嵁
+
+娴嬭瘯鏁版嵁鐩綍锛�
+
+```text
+D:\OneDrive\Desktop\绉诲簱\濡囧辜
+```
+
+| 搴忓彿 | 鏂囦欢 | 鎮h�� | 闂ㄨ瘖缂栧彿 | 娴佹按鍙� | 绉戝 Code | 涓昏瘖鏂� ICD10 | 鏈熸湜妗f |
+| --- | --- | --- | --- | --- | --- | --- | --- |
+| 1 | 濡囩-鏃╁瓡鍏崇埍.txt | 寮犳偊 | 202637799 | 1659700037955006464 | 010104010601 | O26.900x206 | 濡囩妗f锛宍archiveType=1` |
+| 2 | 濡囩-鍥寸粷缁忔湡MHI.txt | 寮犵 | 202620972 | 1656887374212886528 | 010102010207 | N95.900 | 濡囩妗f锛宍archiveType=2` |
+| 3 | 鍎跨-钀ュ吇鎬х柧鐥�.txt | 鏉庢矃鍒� | 202651402 | 1659715824983924736 | 010104010403 | E46.x00x003 | 鍎跨妗f锛宍archiveType=1` |
+| 4 | 鍎跨-瀛︿範鍥伴毦.txt | 褰泤鐞� | 202647368 | 1658992475891146752 | 010104010401 | F81.900 | 鍎跨妗f锛宍archiveType=2` |
+| 5 | 鍎跨-楂樺嵄鍎夸笓妗�.txt | 鐜嬪崡鏄� | 202607546 | 1659487324381261824 | 010104010405 | P96.800x904 | 鍎跨妗f锛宍archiveType=3` |
+
+閰嶇疆鏂囦欢锛�
+
+```text
+sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql
+```
+
+---
+
+## 4. 娴嬭瘯鎵ц姹囨��
+
+| 绫诲埆 | 鐢ㄤ緥鏁� | 閫氳繃 | 澶辫触 | 寰呮墽琛� |
+| --- | ---: | ---: | ---: | ---: |
+| 闈欐�侀獙璇� | 3 | 3 | 0 | 0 |
+| 瑙勫垯鍖归厤妯℃嫙 | 5 | 5 | 0 | 0 |
+| 鏁版嵁搴撹惤搴撹仈璋� | 16 | 0 | 0 | 16 |
+| 鍚堣 | 24 | 8 | 0 | 16 |
+
+> 闈欐�侀獙璇佸拰瑙勫垯鍖归厤妯℃嫙宸插疄闄呮墽琛岋紱鏁版嵁搴撹惤搴撶被鐢ㄤ緥闇�鍦ㄨ仈璋冪幆澧冩墽琛屻��
+
+---
+
+## 5. 宸叉墽琛岀敤渚嬪強缁撴灉
+
+### 5.1 ST-01 浠g爜缂栬瘧
+
+鎵ц鍛戒护锛�
+
+```bash
+mvn -pl smartor,ruoyi-quartz -am -DskipTests -Dmaven.test.skip=true compile
+mvn -pl ruoyi-admin -am -DskipTests -Dmaven.test.skip=true compile
+```
+
+鎵ц缁撴灉锛�
+
+```text
+BUILD SUCCESS
+```
+
+缁撹锛氶�氳繃銆�
+
+### 5.2 ST-02 浜斾釜鍏ュ弬 JSON 鏍煎紡鏍¢獙
+
+浣跨敤 Node.js 瀵逛簲涓� txt 鏂囦欢鎵ц `JSON.parse`銆�
+
+鎵ц缁撴灉锛�
+
+```text
+OK 鍎跨-瀛︿範鍥伴毦.txt
+OK 鍎跨-钀ュ吇鎬х柧鐥�.txt
+OK 鍎跨-楂樺嵄鍎夸笓妗�.txt
+OK 濡囩-鍥寸粷缁忔湡MHI.txt
+OK 濡囩-鏃╁瓡鍏崇埍.txt
+```
+
+缁撹锛�5/5 閫氳繃銆�
+
+### 5.3 ST-03 閰嶇疆瑙勫垯鍖归厤妯℃嫙
+
+鎸� `sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql` 涓殑 5 鏉¤鍒欙紝瀵逛簲涓叆鍙傜殑 `JiuZhenKSID` 鍜屼富璇婃柇 `Icd10` 鍋� OR 鍖归厤妯℃嫙銆�
+
+鎵ц缁撴灉锛�
+
+| 鏂囦欢 | 绉戝 Code | 涓昏瘖鏂� ICD10 | 鍛戒腑瑙勫垯 | 缁撴灉 |
+| --- | --- | --- | --- | --- |
+| 濡囩-鏃╁瓡鍏崇埍.txt | 010104010601 | O26.900x206 | 鏃╁瓡鍏崇埍 / 濡囩 / `archiveType=1` | PASS |
+| 濡囩-鍥寸粷缁忔湡MHI.txt | 010102010207 | N95.900 | 鍥寸粷缁忔湡MHI / 濡囩 / `archiveType=2` | PASS |
+| 鍎跨-钀ュ吇鎬х柧鐥�.txt | 010104010403 | E46.x00x003 | 钀ュ吇鎬х柧鐥� / 鍎跨 / `archiveType=1` | PASS |
+| 鍎跨-瀛︿範鍥伴毦.txt | 010104010401 | F81.900 | 瀛︿範鍥伴毦 / 鍎跨 / `archiveType=2` | PASS |
+| 鍎跨-楂樺嵄鍎夸笓妗�.txt | 010104010405 | P96.800x904 | 楂樺嵄鍎夸笓妗� / 鍎跨 / `archiveType=3` | PASS |
+
+姹囨�伙細
+
+```text
+SUMMARY 5/5
+```
+
+缁撹锛氫簲涓牱渚嬪潎鍞竴鍛戒腑棰勬湡瑙勫垯锛屾湭鍑虹幇浜ゅ弶鍛戒腑銆�
+
+---
+
+## 6. 鑱旇皟鐢ㄤ緥锛堝緟鎵ц锛�
+
+> 浠ヤ笅鐢ㄤ緥闇�鍦ㄥ叿澶� MySQL銆丠IS 瑙嗗浘鍜屽畬鏁村簲鐢ㄧ幆澧冪殑鑱旇皟鐜鎵ц銆�
+
+### 6.1 閰嶇疆鍒濆鍖�
+
+| 鐢ㄤ緥缂栧彿 | 姝ラ | 棰勬湡缁撴灉 |
+| --- | --- | --- |
+| TC-00 | 鎵ц `sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql` | 鑴氭湰鏈熬鏍搁獙 SQL 杩斿洖 5 鏉¢厤缃紝`orgid` 鍧囦负 `47226079133110211G1001` |
+
+### 6.2 浜斾釜鏍蜂緥鐢熸垚
+
+| 鐢ㄤ緥缂栧彿 | 鍏ュ弬 | 姝ラ | 棰勬湡缁撴灉 |
+| --- | --- | --- | --- |
+| TC-01 | 濡囩-鏃╁瓡鍏崇埍.txt | POST `/smartor/serviceExternal/generalInterface`锛岀劧鍚庢煡璇� `pat_maternity_archive` | 鏂板 1 鏉� `archive_type='1'`銆乣outhospno='202637799'`銆乣patname='寮犳偊'` 鐨勫绉戞。妗堬紝璇︽儏琛ㄥ悓姝� 1 鏉� |
+| TC-02 | 濡囩-鍥寸粷缁忔湡MHI.txt | 鍚屼笂 | 鏂板 1 鏉� `archive_type='2'`銆乣outhospno='202620972'`銆乣patname='寮犵'` 鐨勫绉戞。妗� |
+| TC-03 | 鍎跨-钀ュ吇鎬х柧鐥�.txt | 鍚屼笂锛屾煡璇� `pat_child_archive` | 鏂板 1 鏉� `archive_type='1'`銆乣outhospno='202651402'`銆乣patname='鏉庢矃鍒�'` 鐨勫効绉戞。妗� |
+| TC-04 | 鍎跨-瀛︿範鍥伴毦.txt | 鍚屼笂 | 鏂板 1 鏉� `archive_type='2'`銆乣outhospno='202647368'`銆乣patname='褰泤鐞�'` 鐨勫効绉戞。妗� |
+| TC-05 | 鍎跨-楂樺嵄鍎夸笓妗�.txt | 鍚屼笂 | 鏂板 1 鏉� `archive_type='3'`銆乣outhospno='202607546'`銆乣patname='鐜嬪崡鏄�'` 鐨勫効绉戞。妗� |
+
+### 6.3 瀛楁瀹屾暣鎬�
+
+| 鐢ㄤ緥缂栧彿 | 妫�鏌ラ」 | 棰勬湡缁撴灉 |
+| --- | --- | --- |
+| TC-06 | 濡囩妗f瀛楁 | `patid`銆乣patname`銆乣birthdate`銆乣phone`銆乣deptcode`銆乣deptname`銆乣icd10code`銆乣diagname`銆乣diag_time`銆乣archive_time`銆乣orgid`銆乣campusid` 鏈夊�硷紱`source_type='1'` |
+| TC-07 | 鍎跨妗f瀛楁 | 闄や笂杩板叕鍏卞瓧娈靛锛宍parent_phone`銆乣parent_address` 灏介噺鏈夊�硷紱钀ュ吇鎬х柧鐥呮。妗� `nutrition_icd10_code`銆乣nutrition_diag_name` 涓庝富璇婃柇涓�鑷� |
+
+### 6.4 骞傜瓑涓庨殧绂�
+
+| 鐢ㄤ緥缂栧彿 | 鍦烘櫙 | 棰勬湡缁撴灉 |
+| --- | --- | --- |
+| TC-08 | 鍚屼竴鍏ュ弬杩炵画 POST 2 娆� | 涓昏〃浠嶅彧鏈� 1 鏉★紝璇︽儏琛ㄤ粛鍙湁 1 鏉★紝鍐呭鏇存柊涓烘渶鍚庝竴娆� |
+| TC-09 | 灏� `FaSongJGID` 鏀逛负鍏朵粬鏈烘瀯鍚� POST | 涓嶇敓鎴愬骞间笓绉戞。妗堬紝瀹屾垚鎺ヨ瘖鎺ュ彛姝e父杩斿洖 `Code=0` |
+| TC-10 | 灏嗗搴旈厤缃� `del_flag` 鏀逛负 `1` 鍚� POST | 涓嶇敓鎴愭。妗堬紝鎺ュ彛姝e父杩斿洖 |
+| TC-11 | 閰嶇疆 `dept_type='2'`锛堢梾鍖猴級锛岄棬璇婅褰曟棤鐥呭尯瀛楁 | 绉戝鏉′欢涓嶅懡涓紱浠呰瘖鏂潯浠跺彲鍛戒腑 |
+| TC-12 | 鍚屼竴璁板綍鍛戒腑涓ゆ潯涓嶅悓 `archiveType` 閰嶇疆 | 鍒嗗埆鐢熸垚涓ゆ潯涓嶅悓妗f绫诲瀷鐨勬。妗� |
+
+### 6.5 鎵嬪姩琛ラ噰涓庡畾鏃朵换鍔�
+
+| 鐢ㄤ緥缂栧彿 | 鍦烘櫙 | 棰勬湡缁撴灉 |
+| --- | --- | --- |
+| TC-13 | POST `/monitor/his/collectMchArchive`锛屼紶 `startTime`銆乣endTime` | 鎸夊氨璇婃棩鏈熻ˉ閲囨寚瀹氭満鏋勮褰曪紝骞惰Е鍙戞。妗堢敓鎴愶紱杩斿洖 `code=200`銆乣data` 涓哄鐞嗚鏁� |
+| TC-14 | 涓嶄紶璇锋眰浣撹皟鐢ㄦ墜鍔ㄨˉ閲囨帴鍙� | 榛樿閲囬泦鏄ㄥぉ鏁版嵁 |
+| TC-15 | 閰嶇疆骞舵墽琛� `ryTask.collectMchArchive()` | 閲囬泦鏄ㄥぉ涓芥按濡囧辜闂ㄨ瘖璁板綍骞剁敓鎴愭。妗堬紝鏃ュ織鏃犲紓甯� |
+
+---
+
+## 7. 鏁版嵁搴撴牳楠� SQL
+
+### 7.1 閰嶇疆鏍搁獙
+
+```sql
+SELECT id, dept_type, dept_category, archive_type, dept_codes, icd10_codes, orgid, campusid, del_flag
+FROM pat_specific_archive_generate_config
+WHERE orgid = '47226079133110211G1001'
+ AND del_flag = '0'
+ORDER BY dept_category, archive_type;
+```
+
+棰勬湡锛�5 鏉℃湁鏁堥厤缃��
+
+### 7.2 濡囩妗f鏍搁獙
+
+```sql
+SELECT id, archive_type, outhospno, serialnum, patid, patname, deptcode, deptname,
+ icd10code, diagname, orgid, campusid, create_time
+FROM pat_maternity_archive
+WHERE outhospno IN ('202637799', '202620972')
+ AND del_flag = '0'
+ORDER BY outhospno;
+```
+
+棰勬湡锛�
+
+| outhospno | archive_type | patname |
+| --- | --- | --- |
+| 202620972 | 2 | 寮犵 |
+| 202637799 | 1 | 寮犳偊 |
+
+### 7.3 鍎跨妗f鏍搁獙
+
+```sql
+SELECT id, archive_type, outhospno, serialnum, patid, patname, deptcode, deptname,
+ icd10code, diagname, orgid, campusid, create_time
+FROM pat_child_archive
+WHERE outhospno IN ('202651402', '202647368', '202607546')
+ AND del_flag = '0'
+ORDER BY outhospno;
+```
+
+棰勬湡锛�
+
+| outhospno | archive_type | patname |
+| --- | --- | --- |
+| 202607546 | 3 | 鐜嬪崡鏄� |
+| 202647368 | 2 | 褰泤鐞� |
+| 202651402 | 1 | 鏉庢矃鍒� |
+
+### 7.4 璇︽儏琛ㄦ牳楠�
+
+```sql
+SELECT d.id, d.archiveid, d.archive_type, d.source_type, d.outhospno, d.patid,
+ d.patname, d.deptcode, d.icd10code, d.diagname, d.orgid, d.campusid
+FROM pat_maternity_archive_detail d
+WHERE d.outhospno IN ('202637799', '202620972')
+ AND d.del_flag = '0';
+```
+
+```sql
+SELECT d.id, d.archiveid, d.archive_type, d.source_type, d.outhospno, d.patid,
+ d.patname, d.deptcode, d.icd10code, d.diagname, d.orgid, d.campusid
+FROM pat_child_archive_detail d
+WHERE d.outhospno IN ('202651402', '202647368', '202607546')
+ AND d.del_flag = '0';
+```
+
+棰勬湡锛氭瘡涓棬璇婄紪鍙峰搴� 1 鏉¤鎯咃紝`source_type='1'`锛宍archiveid` 涓庝富琛ㄤ竴鑷淬��
+
+---
+
+## 8. 椋庨櫓涓庨仐鐣欓棶棰�
+
+| 搴忓彿 | 椋庨櫓/闂 | 璇存槑 | 寤鸿 |
+| --- | --- | --- | --- |
+| 1 | 閰嶇疆琛ㄤ緷璧� | 鏈墽琛岄厤缃剼鏈垨閰嶇疆琚垹闄ゆ椂涓嶇敓鎴愭。妗� | 涓婄嚎鍓嶇‘璁� 5 鏉¢厤缃凡钀藉簱 |
+| 2 | 璇婃柇缂栫爜绮剧‘鍖归厤 | 褰撳墠鎸夊叆鍙備腑鐨勪富璇婃柇 `Icd10` 绮剧‘鍖归厤锛涚紪鐮佸崌绾�/鍙樹綋鍙兘涓嶅懡涓� | 鑱旇皟鏃剁‘璁ゆ槸鍚﹂渶瑕佹墿灞曚负鍓嶇紑鎴栫紪鐮侀泦鍚堝尮閰� |
+| 3 | 绉戝涓庤瘖鏂� OR 鍖归厤 | 閰嶇疆鍚屾椂濉啓 `dept_codes` 鍜� `icd10_codes` 鏃朵换涓�鍛戒腑鍗崇敓鎴� | 瀵圭瀹ゅ尯鍒嗗害浣庣殑瑙勫垯锛屽缓璁彧閰嶇疆璇婃柇 Code |
+| 4 | 鍎跨钀ュ吇/瀛︿範鏍蜂緥绉戝鍖哄垎搴︿綆 | 涓や釜鏍蜂緥绉戝鍚嶇О涓庢。妗堢被鍨嬪苟闈炰竴涓�瀵瑰簲 | 宸叉寜璇婃柇 Code 閰嶇疆锛岄伩鍏嶆寜绉戝璇敓鎴� |
+| 5 | 闂ㄨ瘖璁板綍鍒嗚〃 | `pat_med_outhosp` 鍙兘宸插垎琛紝鐩存帴 SQL 鏌ヨ鍙兘鏌ヤ笉鍒� | 浣跨敤 `sp_query_outhosp` 鎴栨煡璇㈠搴斿垎琛� |
+| 6 | 杩愯鐜 | 鏈鏈繛鎺ュ疄闄呮暟鎹簱鎵ц钀藉簱楠岃瘉 | 鑱旇皟鐜鎵ц绗� 6 鑺傜敤渚嬪悗鍐嶅垽瀹氫笂绾� |
+
+---
+
+## 9. 娴嬭瘯缁撹
+
+1. 浠g爜缂栬瘧閫氳繃锛屼簲涓弬鑰冨叆鍙� JSON 鏍煎紡鍚堟硶锛岃鍒欏尮閰嶆ā鎷� 5/5 閫氳繃銆�
+2. 浜斾釜鏍蜂緥鍧囧敮涓�鍛戒腑棰勬湡妗f绫诲瀷锛屾湭鍙戠幇瑙勫垯浜ゅ弶銆�
+3. 鏁版嵁搴撹惤搴撱�佸箓绛夈�佹満鏋勯殧绂荤瓑 16 涓仈璋冪敤渚嬪凡璁捐锛屽緟鑱旇皟鐜鎵ц銆�
+4. 褰撳墠缁撹锛�**鍏峰鑱旇皟鏉′欢锛岃仈璋冮�氳繃鍚庡彲涓婄嚎**銆�
+
+---
+
+## 10. 闄勫綍锛氳仈璋冩墽琛岄『搴�
+
+1. 鎵ц閰嶇疆鑴氭湰 `sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql`銆�
+2. 纭閰嶇疆鏌ヨ杩斿洖 5 鏉°��
+3. 渚濇 POST 浜斾釜鍏ュ弬鏂囦欢鍒� `/smartor/serviceExternal/generalInterface`銆�
+4. 鎸夌 7 鑺� SQL 鏍稿 `pat_maternity_archive`銆乣pat_child_archive` 鍙婅鎯呰〃銆�
+5. 鎵ц閲嶅 POST銆佸叾浠栨満鏋勩�佸仠鐢ㄩ厤缃瓑闅旂鐢ㄤ緥銆�
+6. 璋冪敤 `/monitor/his/collectMchArchive` 楠岃瘉鎵嬪姩琛ラ噰銆�
+7. 閰嶇疆 `ryTask.collectMchArchive()` 瀹氭椂浠诲姟骞惰瀵熸棩蹇椼��
diff --git a/pom.xml b/pom.xml
index 2a20aef..5aa18da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,8 @@
<kaptcha.version>2.3.3</kaptcha.version>
<pagehelper.boot.version>1.4.6</pagehelper.boot.version>
<fastjson.version>2.0.23</fastjson.version>
+ <!-- Lombok 1.18.22 is incompatible with JDK 21+ (JCTree$JCImport.qualid removed) -->
+ <lombok.version>1.18.36</lombok.version>
<oshi.version>6.4.0</oshi.version>
<commons.io.version>2.11.0</commons.io.version>
<commons.fileupload.version>1.4</commons.fileupload.version>
@@ -31,6 +33,10 @@
<poi.version>4.1.2</poi.version>
<velocity.version>2.3</velocity.version>
<jwt.version>0.9.1</jwt.version>
+ <jws.version>1.1</jws.version>
+ <jaxws.version>2.3.1</jaxws.version>
+ <jaxb.impl.version>2.3.0</jaxb.impl.version>
+ <javassist.version>3.28.0-GA</javassist.version>
</properties>
<!-- 渚濊禆澹版槑 -->
@@ -46,6 +52,44 @@
<scope>import</scope>
</dependency>
+ <!-- 瑕嗙洊 Spring Boot BOM 涓殑 Lombok 鐗堟湰锛屽吋瀹� JDK 21+ -->
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>${lombok.version}</version>
+ </dependency>
+
+ <!-- JDK 11+ 宸茬Щ闄� Java EE 妯″潡锛屾樉寮忕鐞� JAX-WS/JWS API 鐗堟湰 -->
+ <dependency>
+ <groupId>javax.jws</groupId>
+ <artifactId>javax.jws-api</artifactId>
+ <version>${jws.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.ws</groupId>
+ <artifactId>jaxws-api</artifactId>
+ <version>${jaxws.version}</version>
+ </dependency>
+
+ <!-- 缁熶竴 JAXB 鐗堟湰锛岄伩鍏� CXF 3.1.6 寮曞叆鍦� JDK 9+ 涓� POM 闈炴硶鐨� 2.2.11 -->
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ <version>${jaxb.impl.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-core</artifactId>
+ <version>${jaxb.impl.version}</version>
+ </dependency>
+
+ <!-- 缁熶竴 Javassist 鐗堟湰锛�3.20.0-GA 鐨� tools.jar systemPath 鍦� JDK 9+ 涓嬩細瀵艰嚧 POM 鏃犳晥 -->
+ <dependency>
+ <groupId>org.javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>${javassist.version}</version>
+ </dependency>
+
<!-- 闃块噷鏁版嵁搴撹繛鎺ユ睜 -->
<dependency>
<groupId>com.alibaba</groupId>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 9e1237c..86cb2e5 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -173,6 +173,16 @@
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
+ <!-- JDK 11+ 宸茬Щ闄� Java EE 妯″潡锛屾湰妯″潡鐨� WebService 鐩存帴浣跨敤 JAX-WS/JWS API -->
+ <dependency>
+ <groupId>javax.jws</groupId>
+ <artifactId>javax.jws-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.ws</groupId>
+ <artifactId>jaxws-api</artifactId>
+ </dependency>
+
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
@@ -249,17 +259,17 @@
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
+ <scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version> <!-- 璇锋牴鎹渶瑕侀�夋嫨鏈�鏂扮増鏈� -->
</dependency>
- <!--oracle-->
+ <!-- 閫氱敤宸ュ叿锛堟湰妯″潡鐩存帴浣跨敤 ruoyi-common 涓殑绫伙級 -->
<dependency>
- <groupId>com.oracle.database.jdbc</groupId>
- <artifactId>ojdbc8</artifactId>
- <scope>runtime</scope>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-common</artifactId>
</dependency>
</dependencies>
<build>
@@ -300,10 +310,6 @@
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
- </repository>
- <repository>
- <id>jcenter</id>
- <url>https://jcenter.bintray.com/</url>
</repository>
</repositories>
</project>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
index ca2d1ca..c137721 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
@@ -94,15 +94,14 @@
serviceOutPath1.setOrgname(orgname);
}
}
- if(StringUtils.isNotEmpty(serviceOutPath1.getParam2())){
- RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
- Long patId = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceOutPath1.getParam2(), pri_key));
- if(patId != null){
- PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(patId);
- serviceOutPath1.setPatArchive(patArchive);
- }
- }
-
+// if(StringUtils.isNotEmpty(serviceOutPath1.getParam2())){
+// RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+// Long patId = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceOutPath1.getParam2(), pri_key));
+// if(patId != null){
+// PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(patId);
+// serviceOutPath1.setPatArchive(patArchive);
+// }
+// }
return success(serviceOutPath1);
}
return success(null);
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index cc844a5..c722d49 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -168,6 +168,16 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
+ <!-- JDK 11+ 宸茬Щ闄� Java EE 妯″潡锛岃繖閲屾樉寮忓紩鍏� JAX-WS/JWS API -->
+ <dependency>
+ <groupId>javax.jws</groupId>
+ <artifactId>javax.jws-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.ws</groupId>
+ <artifactId>jaxws-api</artifactId>
+ </dependency>
+
<!-- AOP鏀寔 -->
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -176,7 +186,6 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
- <version>1.18.34</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
diff --git a/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/mapper/PatSpecificArchiveGenerateConfigMapper.java b/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/mapper/PatSpecificArchiveGenerateConfigMapper.java
index 4ced3cb..d8eb0a6 100644
--- a/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/mapper/PatSpecificArchiveGenerateConfigMapper.java
+++ b/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/mapper/PatSpecificArchiveGenerateConfigMapper.java
@@ -2,6 +2,7 @@
import com.ruoyi.patarchive.domain.PatSpecificArchiveGenerateConfig;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -18,6 +19,17 @@
public List<PatSpecificArchiveGenerateConfig> selectPatSpecificArchiveGenerateConfigList(PatSpecificArchiveGenerateConfig patSpecificArchiveGenerateConfig);
+ /**
+ * 鏌ヨ鏈烘瀯/闄㈠尯鍙敤鐨勪笓绉戞。妗堢敓鎴愰厤缃��
+ * 鏈烘瀯閰嶇疆浼樺厛锛涙病鏈夋満鏋勯厤缃椂鎵嶈繑鍥炲叏灞�閰嶇疆銆�
+ *
+ * @param orgid 鏈烘瀯ID
+ * @param campusid 闄㈠尯ID
+ * @return 閰嶇疆闆嗗悎
+ */
+ public List<PatSpecificArchiveGenerateConfig> selectEffectivePatSpecificArchiveGenerateConfigList(@Param("orgid") String orgid,
+ @Param("campusid") String campusid);
+
public int insertPatSpecificArchiveGenerateConfig(PatSpecificArchiveGenerateConfig patSpecificArchiveGenerateConfig);
public int updatePatSpecificArchiveGenerateConfig(PatSpecificArchiveGenerateConfig patSpecificArchiveGenerateConfig);
diff --git a/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/IPatSpecificArchiveGenerateConfigService.java b/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/IPatSpecificArchiveGenerateConfigService.java
index 3d3bb94..d00399d 100644
--- a/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/IPatSpecificArchiveGenerateConfigService.java
+++ b/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/IPatSpecificArchiveGenerateConfigService.java
@@ -16,6 +16,15 @@
public List<PatSpecificArchiveGenerateConfig> selectPatSpecificArchiveGenerateConfigList(PatSpecificArchiveGenerateConfig patSpecificArchiveGenerateConfig);
+ /**
+ * 鏌ヨ鏈烘瀯/闄㈠尯鍙敤鐨勯厤缃�傛満鏋勯厤缃紭鍏堬紝鏈烘瀯娌℃湁閰嶇疆鏃惰繑鍥炲叏灞�閰嶇疆銆�
+ *
+ * @param orgid 鏈烘瀯ID
+ * @param campusid 闄㈠尯ID
+ * @return 鍙敤閰嶇疆闆嗗悎
+ */
+ public List<PatSpecificArchiveGenerateConfig> selectEffectiveConfigList(String orgid, String campusid);
+
public int insertPatSpecificArchiveGenerateConfig(PatSpecificArchiveGenerateConfig patSpecificArchiveGenerateConfig);
public int updatePatSpecificArchiveGenerateConfig(PatSpecificArchiveGenerateConfig patSpecificArchiveGenerateConfig);
diff --git a/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/impl/PatSpecificArchiveGenerateConfigServiceImpl.java b/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/impl/PatSpecificArchiveGenerateConfigServiceImpl.java
index 1394d8e..6f02b9c 100644
--- a/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/impl/PatSpecificArchiveGenerateConfigServiceImpl.java
+++ b/ruoyi-patarchive/src/main/java/com/ruoyi/patarchive/service/impl/PatSpecificArchiveGenerateConfigServiceImpl.java
@@ -5,10 +5,13 @@
import com.ruoyi.patarchive.domain.PatSpecificArchiveGenerateConfig;
import com.ruoyi.patarchive.mapper.PatSpecificArchiveGenerateConfigMapper;
import com.ruoyi.patarchive.service.IPatSpecificArchiveGenerateConfigService;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.Collections;
import java.util.List;
+import java.util.stream.Collectors;
/**
* 涓撶妗f鐢熸垚閰嶇疆Service涓氬姟灞傚鐞�
@@ -35,6 +38,33 @@
}
@Override
+ public List<PatSpecificArchiveGenerateConfig> selectEffectiveConfigList(String orgid, String campusid)
+ {
+ List<PatSpecificArchiveGenerateConfig> configs =
+ patSpecificArchiveGenerateConfigMapper.selectEffectivePatSpecificArchiveGenerateConfigList(orgid, campusid);
+ if (CollectionUtils.isEmpty(configs))
+ {
+ return Collections.emptyList();
+ }
+
+ // 鏈烘瀯閰嶇疆浼樺厛锛氬瓨鍦ㄦ満鏋勯厤缃椂锛屼笉鍐嶄娇鐢ㄥ叏灞�閰嶇疆锛岄伩鍏嶈鍒欓噸澶嶅懡涓�
+ if (StringUtils.isNotEmpty(orgid))
+ {
+ List<PatSpecificArchiveGenerateConfig> orgConfigs = configs.stream()
+ .filter(config -> orgid.equals(config.getOrgid()))
+ .collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(orgConfigs))
+ {
+ return orgConfigs;
+ }
+ }
+
+ return configs.stream()
+ .filter(config -> StringUtils.isEmpty(config.getOrgid()))
+ .collect(Collectors.toList());
+ }
+
+ @Override
public int insertPatSpecificArchiveGenerateConfig(PatSpecificArchiveGenerateConfig patSpecificArchiveGenerateConfig)
{
patSpecificArchiveGenerateConfig.setCreateTime(DateUtils.getNowDate());
diff --git a/ruoyi-patarchive/src/main/resources/mapper/patarchive/PatSpecificArchiveGenerateConfigMapper.xml b/ruoyi-patarchive/src/main/resources/mapper/patarchive/PatSpecificArchiveGenerateConfigMapper.xml
index ceacd4f..278089b 100644
--- a/ruoyi-patarchive/src/main/resources/mapper/patarchive/PatSpecificArchiveGenerateConfigMapper.xml
+++ b/ruoyi-patarchive/src/main/resources/mapper/patarchive/PatSpecificArchiveGenerateConfigMapper.xml
@@ -57,6 +57,14 @@
</if>
</select>
+ <select id="selectEffectivePatSpecificArchiveGenerateConfigList" resultMap="PatSpecificArchiveGenerateConfigResult">
+ <include refid="selectPatSpecificArchiveGenerateConfigVo"/>
+ where del_flag = '0'
+ and (orgid = #{orgid} or orgid is null or orgid = '')
+ and (campusid is null or campusid = '' or campusid = #{campusid})
+ order by case when orgid = #{orgid} then 0 else 1 end, id asc
+ </select>
+
<select id="selectPatSpecificArchiveGenerateConfigById" parameterType="Long" resultMap="PatSpecificArchiveGenerateConfigResult">
<include refid="selectPatSpecificArchiveGenerateConfigVo"/>
where id = #{id}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java
index 67b4806..5cf62bb 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java
@@ -8,6 +8,7 @@
import com.ruoyi.datacollection.domain.HnDataGatherVO;
import com.ruoyi.common.core.domain.entity.Icd10;
import com.ruoyi.datacollection.service.IHNGatherPatArchiveService;
+import com.smartor.common.SpecificArchiveConstants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -41,6 +42,24 @@
}
/**
+ * 閲囬泦涓芥按甯傚骞间繚鍋ラ櫌闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍锛屽苟鐢熸垚濡囩/鍎跨妗f銆�
+ * 璇锋眰浣撳彲浼� startTime銆乪ndTime锛坹yyy-MM-dd 鎴� yyyy-MM-dd HH:mm:ss锛夛紝涓嶄紶榛樿閲囬泦鏄ㄥぉ銆�
+ */
+ @PostMapping("/collectMchArchive")
+ @ApiOperation("閲囬泦涓芥按濡囧辜闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍骞剁敓鎴愪笓绉戞。妗�")
+ public AjaxResult collectMchArchive(@RequestBody(required = false) HnDataGatherVO hnDataGatherVO) {
+ try {
+ HnDataGatherVO request = hnDataGatherVO != null ? hnDataGatherVO : new HnDataGatherVO();
+ Integer count = ichService.collectMchOuthospAndGenerateArchive(
+ SpecificArchiveConstants.LISHUI_MCH_ORG_ID, request.getStartTime(), request.getEndTime());
+ return AjaxResult.success(count);
+ } catch (Exception ex) {
+ log.error("閲囬泦涓芥按濡囧辜闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍澶辫触", ex);
+ return AjaxResult.error(ex.getMessage());
+ }
+ }
+
+ /**
* 鏌ヨ鐤剧梾鍒楄〃鏁版嵁閲囬泦
*/
@PostMapping("/collectIcd10")
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
index e2892fe..23de4c5 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
@@ -6,6 +6,7 @@
import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import java.util.Date;
import java.util.List;
import com.ruoyi.common.core.domain.entity.PatArchive;
import com.ruoyi.common.core.domain.entity.Icd10;
@@ -96,4 +97,15 @@
* 甯備竴鍚屾
*/
public Integer syncOper(String startTime, String endTime);
+
+ /**
+ * 閲囬泦鎸囧畾鏈烘瀯鐨勯棬璇婃帴璇婂畬鎴愯褰曪紝骞舵寜閰嶇疆鐢熸垚濡囩/鍎跨妗f銆�
+ * 褰撳墠浠呮敮鎸佷附姘村競濡囧辜淇濆仴闄紙orgid = 47226079133110211G1001锛夈��
+ *
+ * @param orgid 鏈烘瀯ID
+ * @param startTime 灏辫瘖寮�濮嬫椂闂达紝涓虹┖鏃堕粯璁ゆ槰澶� 00:00:00
+ * @param endTime 灏辫瘖缁撴潫鏃堕棿锛屼负绌烘椂榛樿浠婂ぉ 00:00:00
+ * @return 閲囬泦骞跺鐞嗙殑璁板綍鏁�
+ */
+ public Integer collectMchOuthospAndGenerateArchive(String orgid, Date startTime, Date endTime);
}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
index 29f9a5a..b7986ed 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -11,9 +11,11 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.quartz.mapper.CollectHISMapper;
import com.ruoyi.quartz.service.ICollectHISService;
+import com.smartor.common.SpecificArchiveConstants;
import com.smartor.domain.*;
import com.smartor.mapper.*;
import com.smartor.service.IPatMedOuthospService;
+import com.smartor.service.IPatSpecificArchiveGenerateService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
@@ -23,6 +25,7 @@
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
+import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -35,6 +38,7 @@
import com.ruoyi.outpatientvisit.mapper.PatMedOuthospMapper;
import com.ruoyi.othervisit.domain.PatMedOperation;
import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
+import com.ruoyi.outpatientvisit.domain.PatMedOuthospQueryReq;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
import com.ruoyi.common.core.domain.entity.PatArchive;
import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
@@ -65,6 +69,9 @@
@Autowired
private IPatMedOuthospService patMedOuthospService;
+
+ @Autowired
+ private IPatSpecificArchiveGenerateService patSpecificArchiveGenerateService;
@Autowired
private SysDept2Mapper sysDept2Mapper;
@@ -297,13 +304,36 @@
* @return
*/
private Integer syncOuthosp(String startTime, String endTime) {
+ return syncOuthosp(startTime, endTime, null, false);
+ }
+
+ /**
+ * 鍚屾闂ㄨ瘖淇℃伅銆�
+ *
+ * @param startTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿
+ * @param orgid 鏈烘瀯ID锛屼负绌烘椂鍚屾鍏ㄩ儴鏈烘瀯
+ * @param byAdmitDate true=鎸夊氨璇婃棩鏈熻繃婊わ紙琛ラ噰锛夛紱false=鎸夋渶鍚庢洿鏂版椂闂村閲忓悓姝�
+ */
+ private Integer syncOuthosp(String startTime, String endTime, String orgid, boolean byAdmitDate) {
Integer count = 0;
PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
- patMedOuthosp.setLastStartTime(startTime);
- patMedOuthosp.setLastEndTime(endTime);
+ if (byAdmitDate) {
+ patMedOuthosp.setBeginTime(parseDateTime(startTime));
+ patMedOuthosp.setEndTime(parseDateTime(endTime));
+ } else {
+ patMedOuthosp.setLastStartTime(startTime);
+ patMedOuthosp.setLastEndTime(endTime);
+ }
+ patMedOuthosp.setOrgid(orgid);
List<PatMedOuthosp> patMedOuthosps = chMapper.selectPatMedOuthospList(patMedOuthosp);
- log.info("鍚屾闂ㄨ瘖淇℃伅鏁伴噺" + patMedOuthosps.size());
+ log.info("鍚屾闂ㄨ瘖淇℃伅鏁伴噺锛歿}锛宱rgid={}锛宐yAdmitDate={}", patMedOuthosps.size(), orgid, byAdmitDate);
for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) {
+ // 鎸夋満鏋勮ˉ閲囨椂锛孒IS 瑙嗗浘鏈繑鍥� orgid 鐨勮褰曡ˉ涓婃煡璇㈡潯浠朵腑鐨勬満鏋�
+ if (StringUtils.isEmpty(patMedOuthosp1.getOrgid()) && StringUtils.isNotEmpty(orgid)) {
+ patMedOuthosp1.setOrgid(orgid);
+ }
+ PatArchive localArchive = null;
try {
//鎮h�呭熀鏈俊鎭�
PatArchive patArchive = new PatArchive();
@@ -314,26 +344,47 @@
pa1.setPatientno(patMedOuthosp1.getPatno());
List<PatArchive> patArchives1 = patArchiveMapper.selectPatArchiveList(pa1);
if (CollectionUtils.isNotEmpty(patArchives1)) {
- patArchives.get(0).setId(patArchives1.get(0).getId());
+ localArchive = patArchives1.get(0);
+ patArchives.get(0).setId(localArchive.getId());
patArchives.get(0).setUpdateTime(new Date());
count += patArchiveMapper.updatePatArchive(patArchives.get(0));
} else {
patArchives.get(0).setCreateTime(new Date());
count += patArchiveMapper.insertPatArchiveSingle(patArchives.get(0));
-
+ localArchive = patArchives.get(0);
}
}
} catch (Exception ex) {
log.info("鍚屾偅鑰呭熀鏈俊鎭�:" + ex.getMessage());
}
+ // HIS 鎮h�呬俊鎭己澶辨椂锛屼粛鎸夋偅鑰呯紪鍙峰洖鏌ユ湰鍦版。妗�
+ if (localArchive == null && StringUtils.isNotEmpty(patMedOuthosp1.getPatno())) {
+ try {
+ PatArchive localQuery = new PatArchive();
+ localQuery.setPatientno(patMedOuthosp1.getPatno());
+ List<PatArchive> localArchives = patArchiveMapper.selectPatArchiveList(localQuery);
+ if (CollectionUtils.isNotEmpty(localArchives)) {
+ localArchive = localArchives.get(0);
+ }
+ } catch (Exception ex) {
+ log.info("鍥炴煡鏈湴鎮h�呮。妗堝け璐�:" + ex.getMessage());
+ }
+ }
+
try {
- PatMedOuthosp patMedOuthospTemp = new PatMedOuthosp();
- patMedOuthospTemp.setSerialnum(patMedOuthosp1.getSerialnum());
- List<PatMedOuthosp> patMedOuthospsTemp = chMapper.selectPatMedOuthospList(patMedOuthosp);
- if (patMedOuthospsTemp.size() > 0) {
+ if (localArchive != null && localArchive.getId() != null) {
+ patMedOuthosp1.setPatid(localArchive.getId());
+ }
+ PatMedOuthosp localOuthosp = null;
+ try {
+ localOuthosp = findLocalOuthosp(patMedOuthosp1);
+ } catch (Exception e) {
+ log.warn("鍥炴煡鏈湴闂ㄨ瘖璁板綍澶辫触锛屾寜鏂板澶勭悊锛宻erialnum={}", patMedOuthosp1.getSerialnum(), e);
+ }
+ if (localOuthosp != null) {
patMedOuthosp1.setUpdateTime(new Date());
- patMedOuthosp1.setId(patMedOuthospsTemp.get(0).getId());
+ patMedOuthosp1.setId(localOuthosp.getId());
//甯備竴 闄㈠尯id瀵瑰簲orgid锛屾満鏋刬d涓洪粯璁ょ殑1
if(active.equals("hzszlyy")) {
patMedOuthosp1.setCampusid(patMedOuthosp1.getOrgid());
@@ -349,14 +400,95 @@
}
count += patMedOuthospService.insertPatMedOuthosp(patMedOuthosp1);
}
+ generateSpecificArchive(patMedOuthosp1, localArchive);
} catch (Exception ex) {
- log.info("鍚屾鍑哄叆闄�:" + ex.getMessage());
+ log.info("鍚屾闂ㄨ瘖淇℃伅:" + ex.getMessage());
}
}
return count;
}
/**
+ * 鍥炴煡鏈湴闂ㄨ瘖璁板綍锛岄伩鍏嶉噸澶嶉噰闆嗘椂鎻掑叆閲嶅鏁版嵁銆�
+ */
+ private PatMedOuthosp findLocalOuthosp(PatMedOuthosp record) {
+ if (StringUtils.isEmpty(record.getSerialnum()) && StringUtils.isEmpty(record.getOuthospno())) {
+ return null;
+ }
+ PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
+ req.setSerialnum(record.getSerialnum());
+ req.setOuthospno(record.getOuthospno());
+ req.setOrgid(record.getOrgid());
+ List<PatMedOuthosp> localList = patMedOuthospMapper.callSpQueryOuthosp(req);
+ return CollectionUtils.isNotEmpty(localList) ? localList.get(0) : null;
+ }
+
+ /**
+ * 闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍閲囬泦鍚庣敓鎴愪笓绉戞。妗堬紙浠呬附姘村競濡囧辜淇濆仴闄㈢敓鏁堬級銆�
+ */
+ private void generateSpecificArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
+ if (!SpecificArchiveConstants.LISHUI_MCH_ORG_ID.equals(patMedOuthosp.getOrgid())) {
+ return;
+ }
+ try {
+ int generated = patSpecificArchiveGenerateService.generateByOuthosp(patMedOuthosp, patArchive);
+ if (generated > 0) {
+ log.info("闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鐢熸垚涓撶妗f鎴愬姛锛宱uthospno={}锛岀敓鎴愭暟閲�={}",
+ patMedOuthosp.getOuthospno(), generated);
+ }
+ } catch (Exception e) {
+ log.error("闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鐢熸垚涓撶妗f澶辫触锛宱uthospno={}", patMedOuthosp.getOuthospno(), e);
+ }
+ }
+
+ private Date parseDateTime(String value) {
+ if (StringUtils.isEmpty(value)) {
+ return null;
+ }
+ try {
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
+ } catch (Exception e) {
+ try {
+ return new SimpleDateFormat("yyyy-MM-dd").parse(value);
+ } catch (Exception ex) {
+ log.warn("瑙f瀽闂ㄨ瘖閲囬泦鏃堕棿澶辫触锛歿}", value);
+ return null;
+ }
+ }
+ }
+
+ /**
+ * 鍓嶇/瀹氭椂浠诲姟浼犲叆 yyyy-MM-dd 鏃讹紝缁撴潫鏃堕棿琛ラ綈鍒板綋澶� 23:59:59锛岄伩鍏嶆紡鎺夊綋澶╂暟鎹��
+ */
+ private Date normalizeEndTime(Date endTime) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(endTime);
+ if (calendar.get(Calendar.HOUR_OF_DAY) == 0 && calendar.get(Calendar.MINUTE) == 0
+ && calendar.get(Calendar.SECOND) == 0 && calendar.get(Calendar.MILLISECOND) == 0) {
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
+ calendar.add(Calendar.SECOND, -1);
+ return calendar.getTime();
+ }
+ return endTime;
+ }
+
+ @Override
+ public Integer collectMchOuthospAndGenerateArchive(String orgid, Date startTime, Date endTime) {
+ if (!SpecificArchiveConstants.LISHUI_MCH_ORG_ID.equals(orgid)) {
+ log.warn("閲囬泦闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍浠呮敮鎸佷附姘村競濡囧辜淇濆仴闄紝orgid={}", orgid);
+ return 0;
+ }
+ Date end = endTime != null ? normalizeEndTime(endTime) : new Date();
+ Date start = startTime != null ? startTime : new Date(end.getTime() - 24 * 60 * 60 * 1000L);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("寮�濮嬮噰闆嗕附姘村骞奸棬璇婃帴璇婂畬鎴愯褰曪紝鏃堕棿鑼冨洿锛歿} ~ {}", sdf.format(start), sdf.format(end));
+ int count = syncOuthosp(sdf.format(start), sdf.format(end), orgid, true);
+ log.info("涓芥按濡囧辜闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍閲囬泦瀹屾垚锛屾椂闂磋寖鍥达細{} ~ {}锛屽鐞嗘暟閲忥細{}",
+ sdf.format(start), sdf.format(end), count);
+ return count;
+ }
+
+ /**
* 鍚屾鎵嬫湳淇℃伅
*
* @param
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index 3f3c482..768dc79 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -33,6 +33,7 @@
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.message.sms.provider.sltd.ws.MessageSend;
import com.smartor.common.QwenLLMUtil;
+import com.smartor.common.SpecificArchiveConstants;
import com.smartor.domain.*;
import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
import com.smartor.mapper.*;
@@ -1168,6 +1169,25 @@
Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst();
Optional<Long> id = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getId).findFirst();
if (currentSort.isPresent()) {
+ // 鏂规B锛氬彧澶勭悊褰撳墠瀛愪换鍔♀�斺�斿叕浼楀彿宸查鍙�(service_subtask.sendstate=1 + current_preachform=5)
+ // 涓旀湭濉啓鏃讹紝鎸夐粯璁ら�夐」瀹屾垚锛岄伩鍏嶈繘鍏ヤ笅涓�绉嶅彂閫佹柟寮忔垨鏈�鍚庝竴姝ヨ秴鏃躲��
+ // 鍏堢敤鍐呭瓨瀛楁蹇�熻繃婊わ紝鍏朵粬鍖婚櫌/浠诲姟/鍙戦�佹柟寮忎笉浼氳繘鍏ヤ笅闈㈢殑榛樿瀹屾垚閫昏緫銆�
+ if (IServiceSubtaskService.WECHAT_DEFAULT_COMPLETE_ORGID.equals(serviceSubtask.getOrgid())
+ && "2".equals(serviceSubtask.getType())
+ && "5".equals(serviceSubtask.getCurrentPreachform())
+ && Long.valueOf(1L).equals(serviceSubtask.getSendstate())
+ && !Long.valueOf(1L).equals(serviceSubtask.getSubmit())) {
+ try {
+ if (iServiceSubtaskService.completeWechatClaimedByDefault(serviceSubtask)) {
+ log.info("銆恈ompensateTask銆憇ubid锛歿}锛屽井淇″叕浼楀彿宸查鍙栨湭濉啓锛屾寜榛樿閫夐」瀹屾垚", serviceSubtask.getId());
+ continue;
+ }
+ } catch (Exception e) {
+ // 鍗曚釜瀛愪换鍔″け璐ヤ笉褰卞搷鍏朵粬浠诲姟锛屽洖婊氬悗缁х画鍘熻ˉ鍋挎祦绋�
+ log.error("銆恈ompensateTask銆戝井淇″叕浼楀彿榛樿瀹屾垚澶辫触锛宻ubid锛歿}锛岀户缁師琛ュ伩娴佺▼", serviceSubtask.getId(), e);
+ }
+ }
+
//1鍏堟鏌ヤ竴涓嬶紝鏄笉鏄湁鎵ц鐘舵�佹槸瀹屾垚鐨勶紙鎬曚箣鍓嶅凡缁忔湁瀹岀殑浜嗭紝娌℃湁灏唖ervuce_subtask鐨勭姸鎬佹敼鎴愬姛锛岃繖閲屽啀妫�鏌ヤ竴涓嬶級
boolean finishState = serviceSubtaskPreachforms.stream().allMatch(item -> item.getSendstate().equals("9"));
if (finishState) {
@@ -1780,6 +1800,25 @@
}
}
+ /**
+ * 閲囬泦涓芥按甯傚骞间繚鍋ラ櫌闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍锛屽苟鎸夐厤缃敓鎴愬绉�/鍎跨妗f銆�
+ * 瀹氭椂浠诲姟榛樿閲囬泦鏄ㄥぉ 00:00:00 ~ 浠婂ぉ 00:00:00銆�
+ */
+ public void collectMchArchive() {
+ try {
+ LocalDateTime todayZero = LocalDateTime.now().with(LocalTime.MIN);
+ LocalDateTime yesterdayZero = todayZero.minusDays(1);
+ Date startTime = Date.from(yesterdayZero.atZone(ZoneId.systemDefault()).toInstant());
+ Date endTime = Date.from(todayZero.atZone(ZoneId.systemDefault()).toInstant());
+ log.info("銆恈ollectMchArchive銆戝紑濮嬮噰闆嗕附姘村骞奸棬璇婃帴璇婂畬鎴愯褰�");
+ ichService.collectMchOuthospAndGenerateArchive(
+ SpecificArchiveConstants.LISHUI_MCH_ORG_ID, startTime, endTime);
+ log.info("銆恈ollectMchArchive銆戜附姘村骞奸棬璇婃帴璇婂畬鎴愯褰曢噰闆嗙粨鏉�");
+ } catch (Exception e) {
+ log.error("銆恈ollectMchArchive銆戜附姘村骞奸棬璇婃帴璇婂畬鎴愯褰曢噰闆嗗紓甯�", e);
+ }
+ }
+
public void collectHISYesterday() {
try {
// 鑾峰彇鏄ㄥぉ0鐐瑰埌浠婂ぉ0鐐圭殑鏃堕棿鑼冨洿
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
index ac3f09a..e4e6b90 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
@@ -854,26 +854,35 @@
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/getSfStatisticsCountDetailsHyperLink")
public AjaxResult getSfStatisticsCountDetailsHyperLink(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+ Integer statisticaltype = serviceSubtaskCountReq.getStatisticaltype();
+ if (statisticaltype != null && statisticaltype != 1 && statisticaltype != 2 && statisticaltype != 3) {
+ return error("缁熻缁村害statisticaltype浠呮敮鎸侊細1-鎸夌梾鍖� 2-鎸夌瀹� 3-鎸塼askid");
+ }
+ if (serviceSubtaskCountReq.getScriptid() == null
+ && StringUtils.isEmpty(serviceSubtaskCountReq.getScriptContent())) {
+ return error("闂ID(scriptid)涓嶈兘涓虹┖");
+ }
+ if (serviceSubtaskCountReq.getOptionText() == null) {
+ return error("闂閫夐」(optionText)涓嶈兘涓虹┖");
+ }
+
LoginUser loginUser = getLoginUser();
String orgid = loginUser.getUser().getOrgid();
+ serviceSubtaskCountReq.setOrgid(orgid);
+
+ // 涓� getSfStatisticsCountDetails 淇濇寔鐩稿悓鐨勯厤缃瓫閫夊彛寰�
String configKey = serviceSubtaskCountReq.getConfigKey();
if (StringUtils.isNotEmpty(configKey)) {
String configValue = sysConfigService.selectConfigByKey(configKey, orgid);
serviceSubtaskCountReq.setConfigValue(configValue);
if (StringUtils.isEmpty(configValue)) {
- String logInfo = "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
+ String logInfo = "getSfStatisticsCountDetailsHyperLink-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
log.error(logInfo);
return error(logInfo);
}
}
- String followUpCountStyle = sysConfigService.selectConfigByKey("followUpCountStyle", orgid);
- if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
- serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
- } else {
- serviceSubtaskCountReq.setFollowUpCountStyle("1");
- }
- return success(serviceSubtaskService.getSfStatisticsHyperlink(serviceSubtaskCountReq));
+ return success(serviceSubtaskService.getSfStatisticsScriptDetailsHyperlink(serviceSubtaskCountReq));
}
/**
* 鍙戦�佺煭淇℃ā鏉�
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java
index ce4902a..9204983 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java
@@ -1,6 +1,7 @@
package com.ruoyi.task.domain;
import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
@@ -79,7 +80,8 @@
@ApiModelProperty(value = "瀛愪换鍔d闆嗗悎")
private List<Long> subTaskIds;
- @ApiModelProperty(value = "绉戝鐥呭尯锛�1锛岀梾鍖虹粺璁� 2锛岀瀹ょ粺璁� 3. 鐥呯缁熻")
+ @ApiModelProperty(value = "缁熻缁村害锛�1-鎸夌梾鍖�(leavehospitaldistrictcode) 2-鎸夌瀹�(deptcode) 3-鎸塼askid")
+ @JsonAlias("statisticalType")
private Integer statisticaltype;
private String visitDeptCode;
@@ -139,6 +141,7 @@
private String scriptids;
/**
+ /**
* 鎶� scriptids锛堥�楀彿鍒嗛殧鐨勯棶棰業D瀛楃涓诧級涓ユ牸瑙f瀽涓� Long 闆嗗悎锛屼粎渚� SQL 鐨� foreach 棰勭紪璇戜娇鐢ㄣ��
* <p>
* 鍙繚鐣欑函鏁板瓧椤癸紝鍏朵綑鍐呭涓�寰嬩涪寮冿紝杩斿洖 null 琛ㄧず鈥滀笉杩囨护鈥濄��
@@ -158,6 +161,33 @@
}
return scriptidList.isEmpty() ? null : scriptidList;
}
+
+ /**
+ * 闂ID锛堥鐩槑缁嗚杩斿洖鐨� scriptid锛夛紝鐢ㄤ簬閫夐」鏁板瓧涓嬮捇
+ */
+ @ApiModelProperty(value = "闂ID")
+ @JsonAlias("scriptId")
+ private Long scriptid;
+
+ /**
+ * 闂鍐呭銆備紶鍏ュ悗鎸夐鐩唴瀹瑰尮閰嶏紝鍏煎鍚屼竴閬撻琚鍒跺埌澶氫釜浠诲姟妯℃澘鐨勫満鏅�
+ */
+ @ApiModelProperty(value = "闂鍐呭")
+ private String scriptContent;
+
+ /**
+ * 閫夐」鏂囨湰锛堥鐩槑缁嗚杩斿洖鐨� optionText锛�
+ */
+ @ApiModelProperty(value = "閫夐」鏂囨湰")
+ @JsonAlias({"optiontext", "option", "optionContent"})
+ private String optionText;
+
+ /**
+ * 棰樼洰鏄庣粏涓殑浠诲姟绫诲瀷锛坰ubtaskType锛夛紝鐢ㄤ簬涓嬮捇鏃跺尯鍒嗚闊�/闂嵎
+ */
+ @ApiModelProperty(value = "浠诲姟绫诲瀷锛堥鐩槑缁嗕腑鐨� subtaskType锛�")
+ @JsonAlias("subTaskType")
+ private String subtaskType;
/**
* 鍒嗙粍绫诲瀷 drCode, deptCode, leaveHospitalDistrictCode
@@ -280,6 +310,7 @@
private String hyperLinkInfoType;
@ApiModelProperty(value = "浠诲姟ID", required = true)
+ @JsonAlias("taskid")
private Long taskId;
@ApiModelProperty(value = "taskIds闆嗗悎")
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java
index b954c08..e7e2a02 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java
@@ -158,6 +158,14 @@
public Boolean updateServiceSubtaskByCondition(ServiceSubtask ServiceSubtask);
+ /**
+ * 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欐寜榛樿閫夐」瀹屾垚锛氬彧鏇存柊褰撳墠瀛愪换鍔★紝涓斿彧鍏佽 sendstate=1銆佹湭鎻愪氦鐨勬暟鎹��
+ *
+ * @param serviceSubtask 蹇呭~ id銆乫inishtime銆乺esult銆乺emark
+ * @return 褰卞搷琛屾暟
+ */
+ public int updateWechatDefaultComplete(ServiceSubtask serviceSubtask);
+
public Boolean updateServiceSubtaskByTaskGuid(ServiceSubtask ServiceSubtask);
/**
@@ -255,6 +263,14 @@
*/
public List<ServiceSubtaskScriptCount> getSfStatisticsScriptItemDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
+ /**
+ * 闂閫夐」鏁板瓧涓嬮捇锛氭煡璇㈤�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃
+ *
+ * @param serviceSubtaskCountReq 缁熻缁村害銆佺瀹�/鐥呭尯銆佷换鍔°�侀鐩強閫夐」鏉′欢
+ * @return service_subtask 鍒楄〃
+ */
+ public List<ServiceSubtask> getSfStatisticsScriptDetailsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
public List<PatMedRes> getDeptRanking(PatMedReq patMedReq);
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskPreachformMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskPreachformMapper.java
index 6856afa..a61f885 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskPreachformMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskPreachformMapper.java
@@ -57,6 +57,15 @@
int updateSSPByCondition(ServiceSubtaskPreachform row);
/**
+ * 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欐寜榛樿閫夐」瀹屾垚鏃讹紝灏嗗綋鍓嶅彂閫佹柟寮忕疆涓哄畬鎴�(9)銆�
+ * 浠呮洿鏂板綋鍓嶅瓙浠诲姟銆佸綋鍓嶅叕浼楀彿琛岋紝涓斿彧鍏佽浠庡凡鍙戦��(2)/宸查鍙�(3)杩佺Щ锛岄伩鍏嶅奖鍝嶅叾浠栦换鍔°��
+ *
+ * @param row 蹇呭~ id銆乻ubid銆乸reachform銆乺emark
+ * @return 褰卞搷琛屾暟
+ */
+ int updateWechatPreachformComplete(ServiceSubtaskPreachform row);
+
+ /**
* 鎸変富閿蒋鍒犮��
*/
int deleteServiceSubtaskPreachformById(Long id);
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java
index 046def5..12a8901 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java
@@ -34,6 +34,12 @@
*/
public interface IServiceSubtaskService {
/**
+ * 涓芥按涓尰闄� orgid銆�
+ * 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欐寜榛樿閫夐」瀹屾垚锛屾殏鏃跺彧瀵硅鏈烘瀯鐢熸晥锛屽叾浠栧尰闄粛璧板師琛ュ伩閫昏緫銆�
+ */
+ String WECHAT_DEFAULT_COMPLETE_ORGID = "47231022633110211A2101";
+
+ /**
* 鏌ヨ鍗曚竴浠诲姟锛堥殢璁匡級
*
* @param id 鍗曚竴浠诲姟锛堥殢璁匡級涓婚敭
@@ -183,6 +189,14 @@
public Map<String, Object> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
+ /**
+ * 闂閫夐」鏁板瓧涓嬮捇锛氭煡璇㈤�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃
+ *
+ * @param serviceSubtaskCountReq 缁熻缁村害銆佺瀹�/鐥呭尯銆佷换鍔°�侀鐩強閫夐」鏉′欢
+ * @return service_subtask 鍒楄〃
+ */
+ public List<ServiceSubtask> getSfStatisticsScriptDetailsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
public List<PatArchiveSrmVO> sendMsgTemplate(List<PatArchiveSrmVO> patArchiveSrmVOS);
public List<ServiceSubtaskDiagname> convertToDiagnameList(List<ServiceSubtask> subtaskList);
@@ -227,6 +241,19 @@
*/
public void setFailSubTaskDefalutVal(Long failDay);
+ /**
+ * 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欙細鎸夐鐩粯璁ら�夐」琛ラ綈褰撳墠瀛愪换鍔★紝骞跺皢褰撳墠瀛愪换鍔″畬鎴愩��
+ * <p>
+ * 浠呭鐞嗕紶鍏ョ殑褰撳墠瀛愪换鍔★紙subid锛夛紝鍙厑璁革細
+ * 闂嵎绫诲瀷(type=2)銆佸綋鍓嶅彂閫佹柟寮忎负鍏紬鍙�(5)銆佸瓙浠诲姟宸查鍙�(1)銆佹湭鎻愪氦(submit!=1)銆�
+ * 褰撳墠鍏紬鍙峰彂閫佹柟寮忎负宸插彂閫�(2)/宸查鍙�(3) 鐨勬暟鎹��
+ * 鍏朵粬浠诲姟銆佸叾浠栧彂閫佹柟寮忋�佸叾浠栧瓙浠诲姟鍧囦笉鍙楀奖鍝嶃��
+ *
+ * @param serviceSubtask 褰撳墠瀛愪换鍔�
+ * @return true=宸叉寜榛樿閫夐」瀹屾垚锛沠alse=涓嶆弧瓒虫潯浠舵垨娌℃湁鍙~鍏呯殑榛樿閫夐」
+ */
+ public Boolean completeWechatClaimedByDefault(ServiceSubtask serviceSubtask);
+
public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO);
public List<ServiceSubtask> gethelibraryCountHyperlink(@RequestBody HeLibraryCountVO heLibraryCountVO);
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
index 901c761..eb6683c 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
@@ -1060,10 +1060,10 @@
return "鍐嶆闅忚浠诲姟鍒涘缓澶辫触锛屾壘涓嶅埌瀵瑰簲浠诲姟 taskid = " + serviceSubtask.getTaskid() + ", 鍐嶈娆¢噸璇�";
}
// nexttaskflag=0 琛ㄧず浠诲姟閾剧粓姝紝涓嶅厑璁稿啀鐢熸垚
- if ("0".equals(serviceTask.getNexttaskflag())) {
- log.info("鏃犻渶鍐嶆闅忚锛屼换鍔″凡鏍囪鏃犲悗缁殢璁�, taskid = {}", serviceSubtask.getTaskid());
- return "鏃犻渶鍐嶆闅忚锛岃浠诲姟鏃犲悗缁殢璁垮畨鎺�";
- }
+// if ("0".equals(serviceTask.getNexttaskflag())) {
+// log.info("鏃犻渶鍐嶆闅忚锛屼换鍔″凡鏍囪鏃犲悗缁殢璁�, taskid = {}", serviceSubtask.getTaskid());
+// return "鏃犻渶鍐嶆闅忚锛岃浠诲姟鏃犲悗缁殢璁垮畨鎺�";
+// }
// 骞傜瓑鏍¢獙锛氬悓涓�鍘熶换鍔″彧鍏佽鐢熸垚涓�鏉′簩娆¢殢璁�
ServiceSubtaskEntity againQuery = new ServiceSubtaskEntity();
againQuery.setUpid(serviceSubtask.getId().intValue());
@@ -1165,6 +1165,18 @@
return "鍐嶆闅忚浠诲姟鍒涘缓澶辫触锛屾偅鑰呭嚭闄㈣褰曚笉瀹屾暣鎴栦笅涓�浠诲姟閰嶇疆寮傚父, 鍐嶈娆¢噸璇�";
}
Date now = new Date();
+ applyAgainVisitTime(serviceSubtaskAgain, serviceSubtask, nextServiceTask, config, now);
+ // 鍖荤敓澶勭悊鎰忚鍙栬嚜鏈璇锋眰锛屾寜涓嬩竴浠诲姟閲嶅缓瀛愪换鍔℃椂闇�鏄惧紡甯﹀叆锛屽惁鍒欎笉浼氳惤搴�
+ if (request != null) {
+ serviceSubtaskAgain.setDoctorOpinion(request.getDoctorOpinion());
+ serviceSubtaskAgain.setRemark(request.getRemark());
+ serviceSubtaskAgain.setDrcode(request.getDrcode());
+ serviceSubtaskAgain.setDrname(request.getDrname());
+ serviceSubtaskAgain.setNurseId(request.getNurseId());
+ serviceSubtaskAgain.setNurseName(request.getNurseName());
+ serviceSubtaskAgain.setManagementDoctor(request.getManagementDoctor());
+ serviceSubtaskAgain.setManagementDoctorCode(request.getManagementDoctorCode());
+ }
serviceSubtaskAgain.setId(null);
serviceSubtaskAgain.setUpid(serviceSubtask.getId().intValue());
serviceSubtaskAgain.setVisitCount(ObjectUtils.isNotEmpty(serviceSubtask.getVisitCount())
@@ -1173,9 +1185,6 @@
serviceSubtaskAgain.setIsVisitAgain(1);
serviceSubtaskAgain.setCreateTime(now);
serviceSubtaskAgain.setUpdateTime(now);
-
- // 浜屾闅忚鏃堕棿锛氫笂娆¢殢璁垮畬鎴愭椂闂达紙鏈畬鎴愬垯褰撳墠鏃堕棿锛�+ 涓嬩竴浠诲姟鍙戦�佸ぉ鏁帮紱杩囧幓鏃堕棿鍏滃簳涓哄綋鍓嶆椂闂�
- applyAgainVisitTime(serviceSubtaskAgain, serviceSubtask, nextServiceTask, config, now);
// 鏂颁换鍔$殑闅忚鏂瑰紡璁板綍鏈閫夋嫨鐨勫啀娆¢殢璁挎柟寮忥紱resource 鏈韩涓嶈惤搴�
serviceSubtaskAgain.setVisitType(resource);
serviceSubtaskAgain.setVisitDeptCode(visitDeptCode);
@@ -1253,6 +1262,10 @@
if (dueTime.before(now)) {
dueTime = now;
}
+ if(ObjectUtils.isNotEmpty(origin.getVisitTime())){
+ dueTime = ObjectUtils.isNotEmpty(origin.getVisitTime()) ? origin.getVisitTime() : now;
+ }
+
target.setLongSendTime(dueTime);
Date visitTime = dueTime;
if ("3".equals(nextTask.getType())) {
@@ -2448,6 +2461,9 @@
} else {
groupKey = "deptcode";
}
+ } else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 3) {
+ // 鐥呯缁熻锛氭寜浠诲姟ID鍒嗙粍锛屾瘡涓换鍔″嵆涓�涓梾绉嶉殢璁夸换鍔�
+ groupKey = "taskid";
}
List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
// 鏍规嵁鏉′欢杩涜鍒嗙粍
@@ -2473,6 +2489,9 @@
case "leavehospitaldistrictcode":
collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictcode()).orElse("Unknown")));
break;
+ case "taskid":
+ collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getTaskid()).map(String::valueOf).orElse("Unknown")));
+ break;
default:
collect = rawData.stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrcode()).orElse("Unknown")));
break;
@@ -2485,6 +2504,9 @@
continue;
}
ServiceSubtaskStatistic statistic = getStatistic(serviceSubtaskList, serviceSubtaskCountReq.getFollowUpCountStyle(), serviceSubtaskCountReq.getVisitCount());
+ if ("taskid".equals(groupKey)) {
+ applyTaskGroupInfo(statistic, serviceSubtaskList);
+ }
if (ObjectUtils.isNotEmpty(jsRates)) {
Map<String, Object> jsRateMap = jsRates.get(collectKey);
BigDecimal jsRate = new BigDecimal("0");
@@ -2573,7 +2595,16 @@
ssRate.setGroupKey(groupKey);
ssRate.setGroupKeyList(groupKeyList);
ssRate.setRateDay(serviceSubtaskCountReq.getRateDay());
- return serviceSubtaskMapper.selectTimelyRateBatch(ssRate);
+ Map<String, Map<String, Object>> rateResult = serviceSubtaskMapper.selectTimelyRateBatch(ssRate);
+ if (rateResult == null || rateResult.isEmpty()) {
+ return rateResult;
+ }
+ // taskid 涓烘暟鍊肩被鍨嬶紝MyBatis 杩斿洖鐨� Map key 鍙兘鏄� Long锛岃繖閲岀粺涓�杞垚 String 涓庡垎缁� key 瀵归綈
+ Map<String, Map<String, Object>> jsRates = new HashMap<>();
+ for (Map.Entry<String, Map<String, Object>> entry : rateResult.entrySet()) {
+ jsRates.put(String.valueOf(entry.getKey()), entry.getValue());
+ }
+ return jsRates;
}
/**
@@ -2597,6 +2628,9 @@
ServiceSubtaskStatistic totalRow = calculateTotalRow(sfStatistics);
totalRow.setLeavehospitaldistrictname("鎬昏");
totalRow.setDeptname("鎬昏");
+ if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 3) {
+ totalRow.setTaskName("鎬昏");
+ }
sfStatistics.add(totalRow);
}
@@ -2693,6 +2727,22 @@
}
return serviceSubtaskStatistics;
+ }
+
+ /**
+ * 鐥呯缁熻锛堟寜 taskid 鍒嗙粍锛夋椂琛ラ綈浠诲姟ID銆佷换鍔″悕绉板拰鐤剧梾鐥呯銆�
+ *
+ * @param statistic 缁熻缁撴灉
+ * @param serviceSubtaskList 褰撳墠浠诲姟鍒嗙粍涓嬬殑瀛愪换鍔�
+ */
+ private void applyTaskGroupInfo(ServiceSubtaskStatistic statistic, List<ServiceSubtask> serviceSubtaskList) {
+ if (statistic == null || CollectionUtils.isEmpty(serviceSubtaskList)) {
+ return;
+ }
+ ServiceSubtask first = serviceSubtaskList.get(0);
+ statistic.setTaskId(first.getTaskid());
+ statistic.setTaskName(first.getTaskName());
+ statistic.setDiagType(first.getDiagType());
}
private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList, String followUpCountStyle, Integer visitCount) {
@@ -4006,6 +4056,9 @@
} else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 2) {
// 鍘嗗彶鍏ュ弬锛�2 = 绉戝缁熻锛堝師 deptcode 鍗崇幇鍦ㄧ殑绂婚櫌绉戝 leaveldeptcode锛�
groupKey = hasDrcode ? "drcode" : "leaveldeptcode";
+ } else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 3) {
+ // 鐥呯缁熻锛氭寜浠诲姟ID鍒嗙粍锛屾瘡涓换鍔″嵆涓�涓梾绉嶉殢璁夸换鍔�
+ groupKey = "taskid";
}
serviceSubtaskCountReq.setGroupKey(groupKey);
// 鍒嗙粍鍒椾笌杩囨护鍒椾繚鎸佷竴鑷达細绂婚櫌绉戝 leaveldeptcode銆佸湪闄㈢瀹� deptcode
@@ -4049,6 +4102,35 @@
List<ServiceSubtaskStatistic> sumStatistics = serviceSubtaskMapper.getSfStatisticsScriptSum(serviceSubtaskCountReq);
if (CollectionUtils.isEmpty(sumStatistics)) {
return serviceSubtaskStatistics;
+ }
+
+ /*
+ * 鐥呯缁熻锛堟寜 taskid 鍒嗙粍锛夋椂琛ラ綈浠诲姟ID銆佷换鍔″悕绉板拰鐤剧梾鐥呯銆�
+ * 鑱氬悎 SQL 宸茶繑鍥� taskid/task_name锛岃繖閲屽啀琛� diag_type銆�
+ */
+ if ("taskid".equals(groupKey)) {
+ Map<Long, String> diagTypeCache = new HashMap<>();
+ for (ServiceSubtaskStatistic statistic : sumStatistics) {
+ Long taskId = statistic.getTaskId();
+ if (taskId == null && StringUtils.isNotEmpty(statistic.getGroupCode())) {
+ try {
+ taskId = Long.valueOf(statistic.getGroupCode());
+ } catch (NumberFormatException ignore) {
+ // 鍘嗗彶鏁版嵁鍙兘涓嶆槸鏁板�� taskid锛屼繚鎸佸師鍒嗙粍閿嵆鍙�
+ }
+ }
+ statistic.setTaskId(taskId);
+ if (StringUtils.isEmpty(statistic.getTaskName())) {
+ statistic.setTaskName(statistic.getGroupName());
+ }
+ if (taskId != null) {
+ if (!diagTypeCache.containsKey(taskId)) {
+ ServiceTask task = serviceTaskService.selectServiceTaskByTaskid(taskId);
+ diagTypeCache.put(taskId, task == null ? null : task.getDiagType());
+ }
+ statistic.setDiagType(diagTypeCache.get(taskId));
+ }
+ }
}
/*
@@ -4300,6 +4382,88 @@
result.put("rows", new ArrayList<>(pageCounts));
result.put("data", pageData);
return result;
+ }
+
+ /**
+ * 闂閫夐」鏁板瓧涓嬮捇锛氳繑鍥為�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃銆�
+ * <p>
+ * 缁熻鏄庣粏涓殑閫夐」鏁伴噺鏉ヨ嚜 service_subtask_detail 鐨�
+ * IFNULL(matchedtext, asrtext)锛屽洜姝や笅閽诲繀椤讳娇鐢ㄥ悓涓�棰樼洰鐨勭浉鍚岄�夐」杩涜鍖归厤銆�
+ *
+ * @param serviceSubtaskCountReq 涓嬮捇鏉′欢
+ * @return service_subtask 鍒楄〃
+ */
+ @Override
+ public List<ServiceSubtask> getSfStatisticsScriptDetailsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+ log.info("getSfStatisticsScriptDetailsHyperlink鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
+ if (serviceSubtaskCountReq == null) {
+ return new ArrayList<>();
+ }
+ // 鍏煎鍓嶇鐩存帴鍥炰紶缁熻鏄庣粏琛屼腑鐨� subtaskType
+ if (StringUtils.isBlank(serviceSubtaskCountReq.getType())
+ && StringUtils.isNotBlank(serviceSubtaskCountReq.getSubtaskType())) {
+ serviceSubtaskCountReq.setType(serviceSubtaskCountReq.getSubtaskType());
+ }
+ resolveScriptContentAndType(serviceSubtaskCountReq);
+ if (StringUtils.isBlank(serviceSubtaskCountReq.getScriptContent())
+ && serviceSubtaskCountReq.getScriptid() == null) {
+ log.warn("getSfStatisticsScriptDetailsHyperlink-棰樼洰scriptid鍜宻criptContent鍧囦负绌猴紝杩斿洖绌哄垪琛�");
+ return new ArrayList<>();
+ }
+ if (serviceSubtaskCountReq.getOptionText() == null) {
+ log.warn("getSfStatisticsScriptDetailsHyperlink-閫夐」optionText涓虹┖锛岃繑鍥炵┖鍒楄〃");
+ return new ArrayList<>();
+ }
+ return serviceSubtaskMapper.getSfStatisticsScriptDetailsHyperlink(serviceSubtaskCountReq);
+ }
+
+ /**
+ * 鏍规嵁 scriptid 琛ラ綈棰樼洰鍐呭鍜屼换鍔$被鍨嬨��
+ * <p>
+ * 缁熻鏄庣粏鎸夆�滈鐩唴瀹� + 浠诲姟绫诲瀷鈥濆悎骞讹紝鍚屼竴閬撻澶嶅埗鍒板涓换鍔℃ā鏉挎椂 scriptid 鍙兘涓嶅悓锛�
+ * 鍥犳浼樺厛鎸夐鐩唴瀹逛笅閽伙紱鍙湁鏌ヤ笉鍒伴鐩唴瀹规椂鎵嶉��鍖栦负 scriptid 绮剧‘鍖归厤銆�
+ */
+ private void resolveScriptContentAndType(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+ if (serviceSubtaskCountReq.getScriptid() == null) {
+ return;
+ }
+ // 宸叉湁棰樼洰鍐呭鍜屼换鍔$被鍨嬫椂鏃犻渶鍐嶆煡妯℃澘闂琛�
+ if (StringUtils.isNotBlank(serviceSubtaskCountReq.getScriptContent())
+ && StringUtils.isNotBlank(serviceSubtaskCountReq.getType())) {
+ return;
+ }
+
+ String type = serviceSubtaskCountReq.getType();
+ if (StringUtils.isBlank(type) || "1".equals(type)) {
+ IvrTaskTemplateScript ivrTaskTemplateScript =
+ iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(serviceSubtaskCountReq.getScriptid());
+ if (ObjectUtils.isNotEmpty(ivrTaskTemplateScript)) {
+ if (StringUtils.isBlank(serviceSubtaskCountReq.getType())) {
+ serviceSubtaskCountReq.setType("1");
+ }
+ if (StringUtils.isBlank(serviceSubtaskCountReq.getScriptContent())) {
+ serviceSubtaskCountReq.setScriptContent(ivrTaskTemplateScript.getScriptContent());
+ }
+ return;
+ }
+ // 鏄庣‘鎸囧畾浜嗚闊崇被鍨嬫椂涓嶅啀灏濊瘯闂嵎琛�
+ if (StringUtils.isNotBlank(type)) {
+ return;
+ }
+ }
+
+ if (StringUtils.isBlank(serviceSubtaskCountReq.getType()) || "2".equals(type)) {
+ SvyTaskTemplateScript svyTaskTemplateScript =
+ svyTaskTemplateScriptService.selectSvyTaskTemplateScriptByID(serviceSubtaskCountReq.getScriptid());
+ if (ObjectUtils.isNotEmpty(svyTaskTemplateScript)) {
+ if (StringUtils.isBlank(serviceSubtaskCountReq.getType())) {
+ serviceSubtaskCountReq.setType("2");
+ }
+ if (StringUtils.isBlank(serviceSubtaskCountReq.getScriptContent())) {
+ serviceSubtaskCountReq.setScriptContent(svyTaskTemplateScript.getScriptContent());
+ }
+ }
+ }
}
/**
@@ -4709,6 +4873,184 @@
}
}
+ /**
+ * 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欙細鎸夐鐩粯璁ら�夐」琛ラ綈褰撳墠瀛愪换鍔★紝骞跺皢褰撳墠瀛愪换鍔″畬鎴愩��
+ * <p>
+ * 鎵�鏈夋煡璇€�佹槑缁嗗啓鍏ャ�佺姸鎬佹洿鏂伴兘鍙娇鐢ㄥ綋鍓� subid锛岄伩鍏嶅奖鍝嶅叾浠栦换鍔�/瀛愪换鍔°��
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean completeWechatClaimedByDefault(ServiceSubtask serviceSubtask) {
+ if (serviceSubtask == null || serviceSubtask.getId() == null) {
+ return false;
+ }
+
+ // 閲嶆柊璇诲彇褰撳墠瀛愪换鍔★紝鎵�鏈夊垽鏂彧閽堝杩欎竴涓� subid
+ ServiceSubtask current = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtask.getId());
+ if (current == null) {
+ return false;
+ }
+ // 鍙鐞嗭細涓芥按涓尰闄€�侀棶鍗枫�佸綋鍓嶆柟寮忓叕浼楀彿銆佸凡棰嗗彇銆佹湭鎻愪氦
+ // 鍏朵粬鍖婚櫌 orgid 涓嶅尮閰嶆椂鐩存帴杩斿洖 false锛岀户缁蛋鍘熻ˉ鍋块�昏緫銆�
+ if (!IServiceSubtaskService.WECHAT_DEFAULT_COMPLETE_ORGID.equals(current.getOrgid())
+ || !"2".equals(current.getType())
+ || !"5".equals(current.getCurrentPreachform())
+ || !Long.valueOf(1L).equals(current.getSendstate())
+ || Long.valueOf(1L).equals(current.getSubmit())) {
+ return false;
+ }
+
+ // 鏌ヨ褰撳墠瀛愪换鍔¤嚜宸辩殑鍏紬鍙峰彂閫佹柟寮忥紝蹇呴』鏄凡鍙戦��(2)鎴栧凡棰嗗彇(3)
+ ServiceSubtaskPreachform query = new ServiceSubtaskPreachform();
+ query.setSubid(current.getId());
+ query.setTaskid(current.getTaskid());
+ query.setPreachform("5");
+ List<ServiceSubtaskPreachform> preachforms = taskPreachformPort.selectServiceSubtaskPreachformList(query);
+ if (CollectionUtils.isEmpty(preachforms)) {
+ return false;
+ }
+ ServiceSubtaskPreachform currentPreachform = preachforms.stream()
+ .filter(item -> "2".equals(item.getSendstate()) || "3".equals(item.getSendstate()))
+ .findFirst().orElse(null);
+ if (currentPreachform == null) {
+ return false;
+ }
+
+ // 鍙粰褰撳墠 subid 琛ラ綈榛樿閫夐」锛涜嚦灏戞湁涓�棰橀粯璁ら�夐」鎵嶇户缁�
+ int filled = fillWechatDefaultDetailForCurrentSubtask(current);
+ if (filled <= 0) {
+ log.info("銆愬井淇″叕浼楀彿榛樿瀹屾垚銆憇ubid锛歿} 娌℃湁鍙~鍏呯殑榛樿閫夐」锛岃烦杩�", current.getId());
+ return false;
+ }
+
+ // 褰撳墠鍏紬鍙峰彂閫佹柟寮忥細宸插彂閫�/宸查鍙� -> 瀹屾垚(9)
+ ServiceSubtaskPreachform updatePreachform = new ServiceSubtaskPreachform();
+ updatePreachform.setId(currentPreachform.getId());
+ updatePreachform.setSubid(current.getId());
+ updatePreachform.setPreachform("5");
+ updatePreachform.setOrgid(current.getOrgid());
+ updatePreachform.setRemark("宸查鍙栨湭濉啓锛屾寜榛樿閫夐」瀹屾垚");
+ int preachformUpdated = taskPreachformPort.updateWechatPreachformComplete(updatePreachform);
+ if (preachformUpdated == 0) {
+ throw new BaseException("寰俊鍏紬鍙烽粯璁ゅ畬鎴愬け璐ワ細鍙戦�佹柟寮忕姸鎬佸凡鍙樺寲锛宻ubid=" + current.getId());
+ }
+
+ // 褰撳墠瀛愪换鍔★細宸查鍙�(1) -> 瀹屾垚(6)锛屽彧鏇存柊杩欎竴涓� subid
+ ServiceSubtask complete = new ServiceSubtask();
+ complete.setId(current.getId());
+ complete.setOrgid(current.getOrgid());
+ complete.setFinishtime(new Date());
+ complete.setResult("success");
+ complete.setRemark("宸查鍙栨湭濉啓锛屾寜榛樿閫夐」瀹屾垚");
+ int subtaskUpdated = serviceSubtaskMapper.updateWechatDefaultComplete(complete);
+ if (subtaskUpdated == 0) {
+ throw new BaseException("寰俊鍏紬鍙烽粯璁ゅ畬鎴愬け璐ワ細瀛愪换鍔$姸鎬佸凡鍙樺寲锛宻ubid=" + current.getId());
+ }
+
+ log.info("銆愬井淇″叕浼楀彿榛樿瀹屾垚銆憇ubid锛歿}锛屽凡鎸夐粯璁ら�夐」瀹屾垚锛屽~鍏呴鐩暟锛歿}", current.getId(), filled);
+ return true;
+ }
+
+ /**
+ * 浠呯粰褰撳墠瀛愪换鍔¤ˉ榻愰棶鍗峰崟閫�/澶氶�夐涓� default_value=2 鐨勯�夐」銆�
+ * 宸叉湁闈炵┖绛旀鐨勯鐩烦杩囷紝涓嶈鐩栨偅鑰呭凡濉啓鍐呭銆�
+ *
+ * @return 瀹為檯濉厖锛堟垨姝ゅ墠宸茬敱绯荤粺榛樿濉厖锛夌殑棰樼洰鏁�
+ */
+ private int fillWechatDefaultDetailForCurrentSubtask(ServiceSubtask serviceSubtask) {
+ Long templateId = serviceSubtask.getTemplateid();
+ ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+ if (templateId == null && serviceTask != null) {
+ templateId = serviceTask.getTemplateid();
+ }
+ if (templateId == null) {
+ return 0;
+ }
+
+ SvyTaskTemplateScript scriptQuery = new SvyTaskTemplateScript();
+ scriptQuery.setTemplateID(templateId);
+ List<SvyTaskTemplateScript> scripts = svyTaskTemplateScriptService.selectSvyTaskTemplateScriptList(scriptQuery);
+ if (CollectionUtils.isEmpty(scripts)) {
+ return 0;
+ }
+
+ int filled = 0;
+ for (SvyTaskTemplateScript script : scripts) {
+ SvyTaskTemplateScriptVO scriptVO = DtoConversionUtils.sourceToTarget(script, SvyTaskTemplateScriptVO.class);
+ SvyTaskTemplateScriptVO scriptWithOptions = svyTaskTemplateScriptService.selectInfoByCondition(scriptVO);
+ if (scriptWithOptions == null
+ || scriptWithOptions.getId() == null
+ || CollectionUtils.isEmpty(scriptWithOptions.getSvyTaskTemplateTargetoptions())
+ || (!"1".equals(scriptWithOptions.getScriptType()) && !"2".equals(scriptWithOptions.getScriptType()))) {
+ continue;
+ }
+
+ List<SvyTaskTemplateTargetoption> options = scriptWithOptions.getSvyTaskTemplateTargetoptions();
+ List<SvyTaskTemplateTargetoption> defaultOptions = options.stream()
+ .filter(option -> option.getDefaultValue() != null && option.getDefaultValue() == 2L)
+ .filter(option -> StringUtils.isNotBlank(option.getOptioncontent()))
+ .collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(defaultOptions)) {
+ continue;
+ }
+
+ // 宸叉湁闈炵┖绛旀鍒欎笉瑕嗙洊锛岄伩鍏嶅奖鍝嶆偅鑰呭凡濉啓鍐呭
+ ServiceSubtaskDetail detailQuery = new ServiceSubtaskDetail();
+ detailQuery.setSubId(serviceSubtask.getId());
+ detailQuery.setScriptid(scriptWithOptions.getId());
+ List<ServiceSubtaskDetail> existingDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(detailQuery);
+ ServiceSubtaskDetail existing = CollectionUtils.isNotEmpty(existingDetails) ? existingDetails.get(0) : null;
+ if (existing != null
+ && (StringUtils.isNotBlank(existing.getAsrtext()) || StringUtils.isNotBlank(existing.getMatchedtext()))) {
+ // 涔嬪墠宸茬敱绯荤粺榛樿濉厖杩囩殑锛岃鍏ュ凡濉厖锛屼繚璇侀噸璇曞箓绛�
+ if ("DEFAULT".equals(existing.getOperate())) {
+ filled++;
+ }
+ continue;
+ }
+
+ String targetValue = options.stream()
+ .map(SvyTaskTemplateTargetoption::getOptioncontent)
+ .filter(StringUtils::isNotBlank)
+ .collect(Collectors.joining("&"));
+ String defaultValue = defaultOptions.stream()
+ .map(SvyTaskTemplateTargetoption::getOptioncontent)
+ .collect(Collectors.joining("&"));
+
+ ServiceSubtaskDetail detail = new ServiceSubtaskDetail();
+ detail.setSubId(serviceSubtask.getId());
+ detail.setTaskid(serviceSubtask.getTaskid());
+ detail.setPatid(serviceSubtask.getPatid());
+ detail.setScriptid(scriptWithOptions.getId());
+ detail.setTemplatequestionnum(scriptWithOptions.getId());
+ detail.setQuestiontext(scriptWithOptions.getScriptContent());
+ detail.setCategoryid(scriptWithOptions.getCategoryid());
+ detail.setTargetid(scriptWithOptions.getTargetid() != null ? scriptWithOptions.getTargetid().intValue() : null);
+ detail.setValueType(scriptWithOptions.getScriptType());
+ detail.setTargetvalue(targetValue);
+ detail.setAsrtext(defaultValue);
+ detail.setMatchedtext(defaultValue);
+ detail.setOperate("DEFAULT");
+ detail.setTemplateType(2);
+ detail.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
+ detail.setTemplateid(templateId.toString());
+ detail.setGuid(scriptWithOptions.getGuid());
+ detail.setOrgid(StringUtils.isNotEmpty(scriptWithOptions.getOrgid()) ? scriptWithOptions.getOrgid()
+ : (serviceTask != null ? serviceTask.getOrgid() : null));
+ detail.setCreateTime(new Date());
+ detail.setUpdateTime(new Date());
+
+ if (existing != null) {
+ detail.setId(existing.getId());
+ serviceSubtaskDetailMapper.updateServiceSubtaskDetail(detail);
+ } else {
+ serviceSubtaskDetailMapper.insertServiceSubtaskDetail(detail);
+ }
+ filled++;
+ }
+ return filled;
+ }
+
@Override
public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO) {
if (ObjectUtils.isEmpty(heLibraryCountVO)) {
diff --git a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
index c9b4b74..89625bb 100644
--- a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
@@ -108,6 +108,7 @@
<result property="loopCount" column="loop_count"/>
<result property="isManuallyCalled" column="is_manually_called"/>
<result property="campusid" column="campusid"/>
+ <result property="diagType" column="diag_type"/>
</resultMap>
<resultMap type="com.ruoyi.task.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
@@ -1418,6 +1419,25 @@
where id = #{id}
</update>
+ <!-- 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欐寜榛樿閫夐」瀹屾垚锛氬彧鏇存柊褰撳墠瀛愪换鍔°��
+ 鏉′欢 sendstate=1 + 鏈彁浜わ紝淇濊瘉鍙鐞嗗綋鍓嶈棰嗗彇涓旀湭濉啓鐨勫瓙浠诲姟锛屼笉娉㈠強鍏朵粬浠诲姟銆� -->
+ <update id="updateWechatDefaultComplete" parameterType="com.ruoyi.task.domain.ServiceSubtask">
+ update service_subtask
+ set sendstate = 6,
+ finishtime = #{finishtime},
+ result = #{result},
+ remark = case
+ when remark is null or remark = '' then #{remark}
+ else concat(remark, ',', #{remark})
+ end,
+ update_time = now(),
+ finish_state = <include refid="finishStateExpr"/>
+ where id = #{id}
+ and orgid = #{orgid}
+ and sendstate = 1
+ and (submit is null or submit != 1)
+ </update>
+
<update id="updateServiceSubtaskByPatId" parameterType="com.ruoyi.task.domain.ServiceSubtask">
update service_subtask
<trim prefix="SET" suffixOverrides=",">
@@ -1806,6 +1826,9 @@
nurse_name,
taskid,
task_name,
+ <if test="groupKey != null and groupKey == 'taskid'">
+ (SELECT st.diag_type FROM service_task st WHERE st.taskid = service_subtask.taskid LIMIT 1) AS diag_type,
+ </if>
visit_time,
visit_dept_code,
finishtime,
@@ -1854,6 +1877,13 @@
<foreach collection="deptcodes" item="deptcode" open="(" separator=","
close=")">
#{deptcode}
+ </foreach>
+ </if>
+ <if test="taskIds != null and taskIds.size() > 0">
+ AND taskid IN
+ <foreach collection="taskIds" item="taskId" open="(" separator=","
+ close=")">
+ #{taskId}
</foreach>
</if>
<if test="serviceType != null and serviceType.size() > 0">
@@ -2100,6 +2130,13 @@
#{hospitaldeptcode}
</foreach>
</if>
+ <if test="taskIds != null and taskIds.size() > 0">
+ AND taskid IN
+ <foreach collection="taskIds" item="taskId" open="(" separator=","
+ close=")">
+ #{taskId}
+ </foreach>
+ </if>
<if test="serviceType != null and serviceType.size() > 0">
AND service_type IN
<foreach collection="serviceType" item="serviceType" open="(" separator=","
@@ -2173,6 +2210,8 @@
<resultMap type="com.ruoyi.task.domain.ServiceSubtaskStatistic" id="ServiceSubtaskScriptStatisticResult">
<result property="groupCode" column="group_code"/>
<result property="groupName" column="group_name"/>
+ <result property="taskId" column="taskid"/>
+ <result property="taskName" column="task_name"/>
<result property="dischargeCount" column="discharge_count"/>
<result property="firstVisitCount" column="first_visit_count"/>
<result property="againVisitCount" column="again_visit_count"/>
@@ -2225,7 +2264,16 @@
<!-- 鍒嗙粍閿搴旂殑鏄剧ず鍚嶏細鐥呭尯缁熻鏃跺氨鏄繖涓�缁勭殑鐥呭尯鍚嶃��
浠ュ墠杩欎竴鍒楁槸 MAX(hospitaldistrictname)锛屼竴涓粍娣蜂簡澶氫釜鐥呭尯鏃朵細闅忔満鏄剧ず鍏朵腑涓�涓紝
浜庢槸鍑虹幇鈥滈�夎娑插唴绉戠梾鍖哄嵈鏄剧ず楠ㄧ涓績涓夌梾鍖衡�濄�� -->
- MAX(IFNULL(leavehospitaldistrictname, hospitaldistrictname)) as group_name,
+ <choose>
+ <when test="groupKey != null and groupKey == 'taskid'">
+ MAX(task_name) as group_name,
+ </when>
+ <otherwise>
+ MAX(IFNULL(leavehospitaldistrictname, hospitaldistrictname)) as group_name,
+ </otherwise>
+ </choose>
+ MAX(taskid) as taskid,
+ MAX(task_name) as task_name,
MAX(drcode) as drcode,
MAX(drname) as drname,
MAX(leaveldeptcode) as deptcode,
@@ -3103,6 +3151,136 @@
group by a.script_content, ss.type, IFNULL(ssd.matchedtext,ssd.asrtext)
</select>
+ <!--
+ 闂閫夐」鏁板瓧涓嬮捇锛氳繑鍥為�夋嫨浜嗘寚瀹氶�夐」鐨� service_subtask 鍒楄〃銆�
+ 杩囨护鍙e緞涓� getSfStatisticsScriptDetails / getSfStatisticsScriptItemDetails 淇濇寔涓�鑷达紝
+ 棰濆鏀寔 statisticaltype锛�1-鐥呭尯銆�2-绉戝銆�3-鐥呯銆�
+ -->
+ <select id="getSfStatisticsScriptDetailsHyperlink" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
+ resultMap="ServiceSubtaskResult">
+ SELECT ss.*
+ FROM service_subtask ss
+ WHERE ss.del_flag = 0
+ <if test="orgid != null and orgid != ''">
+ AND ss.orgid = #{orgid}
+ </if>
+ <if test="campusid != null and campusid != ''">
+ AND ss.campusid = #{campusid}
+ </if>
+ <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+ AND ss.leavehospitaldistrictcode IN
+ <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
+ close=")">
+ #{leavehospitaldistrictcode}
+ </foreach>
+ </if>
+ <if test="deptcodes != null and deptcodes.size() > 0">
+ AND ss.deptcode IN
+ <foreach collection="deptcodes" item="deptcode" open="(" separator="," close=")">
+ #{deptcode}
+ </foreach>
+ </if>
+ <if test="serviceType != null and serviceType.size() > 0">
+ AND ss.service_type IN
+ <foreach collection="serviceType" item="serviceType" open="(" separator="," close=")">
+ #{serviceType}
+ </foreach>
+ </if>
+ <if test="startTime != null and endTime != null">
+ AND ss.visit_time >= DATE(#{startTime})
+ AND ss.visit_time < DATE_ADD(DATE(#{endTime}), INTERVAL 1 DAY)
+ </if>
+ <if test="type != null and type != ''">
+ AND ss.type = #{type}
+ </if>
+
+ <!-- 缁熻缁村害锛�1-鎸夌梾鍖� 2-鎸夌瀹� 3-鎸塼askid -->
+ <if test="statisticaltype != null and statisticaltype == 1">
+ <choose>
+ <when test="deptcode != null and deptcode != ''">
+ AND ss.leavehospitaldistrictcode = #{deptcode}
+ </when>
+ <when test="leavehospitaldistrictcode != null and leavehospitaldistrictcode != ''">
+ AND ss.leavehospitaldistrictcode = #{leavehospitaldistrictcode}
+ </when>
+ </choose>
+ </if>
+ <if test="statisticaltype != null and statisticaltype == 2 and deptcode != null and deptcode != ''">
+ AND ss.deptcode = #{deptcode}
+ </if>
+ <if test="statisticaltype != null and statisticaltype == 3 and taskId != null">
+ AND ss.taskid = #{taskId}
+ </if>
+ <!-- 鍏煎涓嶄紶 statisticaltype 鏃舵寜鍗曞�兼潯浠惰繃婊� -->
+ <if test="statisticaltype == null">
+ <if test="leavehospitaldistrictcode != null and leavehospitaldistrictcode != ''">
+ AND ss.leavehospitaldistrictcode = #{leavehospitaldistrictcode}
+ </if>
+ <if test="deptcode != null and deptcode != ''">
+ AND ss.deptcode = #{deptcode}
+ </if>
+ <if test="taskId != null">
+ AND ss.taskid = #{taskId}
+ </if>
+ </if>
+
+ <!-- 棰樼洰 + 閫夐」鍖归厤锛氬彧淇濈暀鍥炵瓟涓�夋嫨浜嗚閫夐」鐨勫瓙浠诲姟 -->
+ AND EXISTS (
+ SELECT 1
+ FROM service_subtask_detail ssd
+ WHERE ssd.sub_id = ss.id
+ AND ssd.del_flag = 0
+ <if test="configValue != null and configValue != ''">
+ AND ssd.categoryid IN (${configValue})
+ </if>
+ <choose>
+ <when test="optionText != null">
+ AND IFNULL(ssd.matchedtext, ssd.asrtext) = #{optionText}
+ </when>
+ <otherwise>
+ AND 1 = 0
+ </otherwise>
+ </choose>
+ <choose>
+ <!-- 浼樺厛鎸夐鐩唴瀹瑰尮閰嶏細鍚屼竴閬撻澶嶅埗鍒板涓换鍔℃ā鏉挎椂 scriptid 涓嶅悓锛屼絾 script_content 鐩稿悓 -->
+ <when test="scriptContent != null and scriptContent != ''">
+ AND ssd.scriptid IN (
+ <choose>
+ <when test="type == '1'">
+ SELECT its.id FROM ivr_task_template_script its
+ WHERE its.script_content = #{scriptContent}
+ </when>
+ <when test="type == '2'">
+ SELECT sts.id FROM svy_task_template_script sts
+ WHERE sts.script_content = #{scriptContent}
+ </when>
+ <otherwise>
+ SELECT its.id FROM ivr_task_template_script its
+ WHERE its.script_content = #{scriptContent}
+ UNION
+ SELECT sts.id FROM svy_task_template_script sts
+ WHERE sts.script_content = #{scriptContent}
+ </otherwise>
+ </choose>
+ )
+ </when>
+ <when test="scriptid != null">
+ AND ssd.scriptid = #{scriptid}
+ </when>
+ <otherwise>
+ AND 1 = 0
+ </otherwise>
+ </choose>
+ )
+ ORDER BY ss.endtime DESC, ss.id DESC
+ <if test="pageSize != null and pageSize > 0">
+ LIMIT #{pageSize}
+ <if test="pageNum != null and pageNum >= 0">
+ OFFSET #{pageNum}
+ </if>
+ </if>
+ </select>
+
<select id="getDataByTime" resultMap="ServiceSubtaskResult">
select id,
diff --git a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskPreachformMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskPreachformMapper.xml
index 702a23d..9a39543 100644
--- a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskPreachformMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskPreachformMapper.xml
@@ -299,6 +299,24 @@
</update>
<!-- 鍘� deleteServiceSubtaskPreachformById锛�<update> 缃� del_flag=1 -->
+ <!-- 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欐寜榛樿閫夐」瀹屾垚锛氫粎鏇存柊褰撳墠瀛愪换鍔$殑褰撳墠鍏紬鍙疯銆�
+ 鍙厑璁镐粠宸插彂閫�(2)/宸查鍙�(3)杩佺Щ鍒板畬鎴�(9)锛岄伩鍏嶅苟鍙戞垨閲嶅琛ュ伩瑕嗙洊鍏朵粬鐘舵�併�� -->
+ <update id="updateWechatPreachformComplete" parameterType="com.ruoyi.task.domain.ServiceSubtaskPreachform">
+ update service_subtask_preachform
+ set sendstate = '9',
+ remark = case
+ when remark is null or remark = '' then #{remark}
+ else concat(remark, ',', #{remark})
+ end,
+ update_time = now()
+ where id = #{id}
+ and subid = #{subid}
+ and orgid = #{orgid}
+ and preachform = #{preachform}
+ and sendstate in ('2', '3')
+ </update>
+
+
<update id="deleteServiceSubtaskPreachformById" parameterType="Long">
update service_subtask_preachform
<trim prefix="SET" suffixOverrides=",">
diff --git a/smartor/pom.xml b/smartor/pom.xml
index 9efb1f9..68136bf 100644
--- a/smartor/pom.xml
+++ b/smartor/pom.xml
@@ -89,12 +89,6 @@
<artifactId>nls-sdk-recognizer</artifactId>
<version>2.2.1</version>
</dependency>
- <dependency>
- <groupId>com.alibaba.nls</groupId>
- <artifactId>nls-sdk-recognizer</artifactId>
- <version>2.2.1</version>
- <scope>compile</scope>
- </dependency>
<dependency>
<groupId>com.alibaba.nls</groupId>
diff --git a/smartor/src/main/java/com/smartor/common/SpecificArchiveConstants.java b/smartor/src/main/java/com/smartor/common/SpecificArchiveConstants.java
new file mode 100644
index 0000000..ce0c778
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/common/SpecificArchiveConstants.java
@@ -0,0 +1,21 @@
+package com.smartor.common;
+
+/**
+ * 涓撶妗f鐢熸垚鐩稿叧甯搁噺銆�
+ */
+public final class SpecificArchiveConstants {
+
+ /**
+ * 涓芥按甯傚骞间繚鍋ラ櫌鏈烘瀯ID銆�
+ * 闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍閲囬泦鍚庤嚜鍔ㄧ敓鎴愬绉�/鍎跨妗f浠呭璇ユ満鏋勭敓鏁堛��
+ */
+ public static final String LISHUI_MCH_ORG_ID = "47226079133110211G1001";
+
+ /**
+ * 涓芥按鍦板尯鏃犻櫌鍖烘蹇碉紝榛樿闄㈠尯ID銆�
+ */
+ public static final String DEFAULT_CAMPUS_ID = "1";
+
+ private SpecificArchiveConstants() {
+ }
+}
diff --git a/smartor/src/main/java/com/smartor/service/IPatSpecificArchiveGenerateService.java b/smartor/src/main/java/com/smartor/service/IPatSpecificArchiveGenerateService.java
new file mode 100644
index 0000000..4ad425f
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/IPatSpecificArchiveGenerateService.java
@@ -0,0 +1,22 @@
+package com.smartor.service;
+
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
+
+/**
+ * 涓撶妗f鐢熸垚Service鎺ュ彛銆�
+ *
+ * <p>鏍规嵁闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鍜� {@code pat_specific_archive_generate_config}
+ * 閰嶇疆鐢熸垚濡囩妗f鎴栧効绉戞。妗堛��</p>
+ */
+public interface IPatSpecificArchiveGenerateService {
+
+ /**
+ * 鏍规嵁闂ㄨ瘖璁板綍鐢熸垚涓撶妗f銆�
+ *
+ * @param patMedOuthosp 闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍
+ * @param patArchive 鎮h�呮。妗堬紝鍙负绌猴紱涓虹┖鏃舵寜闂ㄨ瘖璁板綍涓殑鎮h�呬俊鎭洖鏌�
+ * @return 鏈鐢熸垚/鏇存柊鐨勬。妗堟暟閲�
+ */
+ int generateByOuthosp(PatMedOuthosp patMedOuthosp, PatArchive patArchive);
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
index cb6bec8..eeb85f1 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -931,6 +931,8 @@
serviceSubtask.setLeaveldeptname(patMedInhosp1.getLeaveldeptname());
serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode());
serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
+ serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code());
+ serviceSubtask.setLeavediagname(patMedInhosp1.getLeavediagname());
serviceSubtask.setTemplateid(serviceTask.getTemplateid());
serviceSubtask.setTemplatename(serviceTask.getTemplatename());
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatSpecificArchiveGenerateServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatSpecificArchiveGenerateServiceImpl.java
new file mode 100644
index 0000000..91effdb
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/PatSpecificArchiveGenerateServiceImpl.java
@@ -0,0 +1,329 @@
+package com.smartor.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
+import com.ruoyi.patarchive.domain.PatSpecificArchiveGenerateConfig;
+import com.ruoyi.patarchive.mapper.PatArchiveMapper;
+import com.ruoyi.patarchive.service.IPatSpecificArchiveGenerateConfigService;
+import com.smartor.common.SpecificArchiveConstants;
+import com.smartor.domain.PatChildArchiveDetail;
+import com.smartor.domain.PatMaternityArchiveDetail;
+import com.smartor.service.IPatChildArchiveService;
+import com.smartor.service.IPatMaternityArchiveService;
+import com.smartor.service.IPatSpecificArchiveGenerateService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 涓撶妗f鐢熸垚Service涓氬姟灞傚鐞嗐��
+ *
+ * <p>鍙鐞嗕附姘村競濡囧辜淇濆仴闄紙orgid = 47226079133110211G1001锛夌殑闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍锛�
+ * 鎸� {@code pat_specific_archive_generate_config} 閰嶇疆鍖归厤绉戝鍜岃瘖鏂悗锛�
+ * 鐢熸垚瀵瑰簲绫诲瀷鐨勫绉戞。妗堟垨鍎跨妗f銆�</p>
+ */
+@Slf4j
+@Service
+public class PatSpecificArchiveGenerateServiceImpl implements IPatSpecificArchiveGenerateService {
+
+ /** 閮ㄩ棬鍒嗙被锛氬绉� */
+ private static final String DEPT_CATEGORY_GYNECOLOGY = "1";
+ /** 閮ㄩ棬鍒嗙被锛氬効绉� */
+ private static final String DEPT_CATEGORY_PEDIATRICS = "2";
+ /** 閮ㄩ棬绫诲瀷锛氱瀹� */
+ private static final String DEPT_TYPE_DEPARTMENT = "1";
+ /** 鏉ユ簮绫诲瀷锛氶棬璇婅褰� */
+ private static final String SOURCE_TYPE_OUTHOSP = "1";
+
+ @Autowired
+ private IPatSpecificArchiveGenerateConfigService patSpecificArchiveGenerateConfigService;
+
+ @Autowired
+ private IPatMaternityArchiveService patMaternityArchiveService;
+
+ @Autowired
+ private IPatChildArchiveService patChildArchiveService;
+
+ @Autowired
+ private PatArchiveMapper patArchiveMapper;
+
+ @Override
+ public int generateByOuthosp(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
+ if (patMedOuthosp == null) {
+ return 0;
+ }
+ // 浠呬附姘村競濡囧辜淇濆仴闄㈢敓鏁堬紝閬垮厤褰卞搷鍏朵粬鏈烘瀯
+ if (!SpecificArchiveConstants.LISHUI_MCH_ORG_ID.equals(patMedOuthosp.getOrgid())) {
+ return 0;
+ }
+ if (StringUtils.isBlank(patMedOuthosp.getOuthospno())) {
+ log.warn("鐢熸垚涓撶妗f璺宠繃锛氶棬璇婄紪鍙蜂负绌猴紝serialnum={}", patMedOuthosp.getSerialnum());
+ return 0;
+ }
+
+ PatArchive targetArchive = resolvePatArchive(patMedOuthosp, patArchive);
+ if (targetArchive == null && patMedOuthosp.getPatid() != null) {
+ targetArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp.getPatid());
+ }
+ Long patid = targetArchive != null ? targetArchive.getId() : patMedOuthosp.getPatid();
+ if (patid == null) {
+ log.warn("鐢熸垚涓撶妗f璺宠繃锛氭湭鎵惧埌鎮h�呮。妗堬紝outhospno={}锛宲atno={}",
+ patMedOuthosp.getOuthospno(), patMedOuthosp.getPatno());
+ return 0;
+ }
+
+ String campusid = StringUtils.isNotBlank(patMedOuthosp.getCampusid())
+ ? patMedOuthosp.getCampusid() : "1";
+ List<PatSpecificArchiveGenerateConfig> configs =
+ patSpecificArchiveGenerateConfigService.selectEffectiveConfigList(patMedOuthosp.getOrgid(), campusid);
+ if (CollectionUtils.isEmpty(configs)) {
+ log.debug("鐢熸垚涓撶妗f璺宠繃锛氭満鏋勬湭閰嶇疆妗f鐢熸垚瑙勫垯锛宱rgid={}锛宑ampusid={}",
+ patMedOuthosp.getOrgid(), campusid);
+ return 0;
+ }
+
+ // 鍚屼竴鏉¢棬璇婅褰曘�佸悓涓�閮ㄩ棬鍒嗙被銆佸悓涓�妗f绫诲瀷鍙敓鎴愪竴娆�
+ Set<String> generatedKeys = new HashSet<>();
+ int generatedCount = 0;
+ for (PatSpecificArchiveGenerateConfig config : configs) {
+ if (!matchConfig(config, patMedOuthosp)) {
+ continue;
+ }
+ String archiveType = config.getArchiveType();
+ String deptCategory = config.getDeptCategory();
+ if (StringUtils.isBlank(archiveType) || StringUtils.isBlank(deptCategory)) {
+ log.warn("鐢熸垚涓撶妗f璺宠繃锛氶厤缃笉瀹屾暣锛宑onfigId={}锛宒eptCategory={}锛宎rchiveType={}",
+ config.getId(), deptCategory, archiveType);
+ continue;
+ }
+
+ String generatedKey = deptCategory + "|" + archiveType;
+ if (!generatedKeys.add(generatedKey)) {
+ continue;
+ }
+
+ try {
+ if (DEPT_CATEGORY_GYNECOLOGY.equals(deptCategory)) {
+ PatMaternityArchiveDetail detail =
+ buildMaternityDetail(patMedOuthosp, targetArchive, config, campusid);
+ patMaternityArchiveService.insertOrUpdateMaternityArchive(detail);
+ generatedCount++;
+ } else if (DEPT_CATEGORY_PEDIATRICS.equals(deptCategory)) {
+ PatChildArchiveDetail detail =
+ buildChildDetail(patMedOuthosp, targetArchive, config, campusid);
+ patChildArchiveService.insertOrUpdateChildArchive(detail);
+ generatedCount++;
+ } else {
+ log.warn("鐢熸垚涓撶妗f璺宠繃锛氭湭鐭ラ儴闂ㄥ垎绫伙紝configId={}锛宒eptCategory={}",
+ config.getId(), deptCategory);
+ }
+ } catch (Exception e) {
+ log.error("鐢熸垚涓撶妗f澶辫触锛宑onfigId={}锛宱uthospno={}锛宒eptCategory={}锛宎rchiveType={}",
+ config.getId(), patMedOuthosp.getOuthospno(), deptCategory, archiveType, e);
+ }
+ }
+ return generatedCount;
+ }
+
+ /**
+ * 鍒ゆ柇闂ㄨ瘖璁板綍鏄惁鍛戒腑閰嶇疆銆�
+ *
+ * <p>閮ㄩ棬鏉′欢涓庤瘖鏂潯浠朵负 OR 鍏崇郴锛氫换涓�鏉′欢鍛戒腑鍗崇敓鎴愶紱涓や釜闆嗗悎閮戒负绌烘椂閰嶇疆鏃犳晥銆�</p>
+ */
+ private boolean matchConfig(PatSpecificArchiveGenerateConfig config, PatMedOuthosp patMedOuthosp) {
+ List<String> deptCodes = parseCodes(config.getDeptCodes());
+ List<String> icd10Codes = parseCodes(config.getIcd10Codes());
+ if (CollectionUtils.isEmpty(deptCodes) && CollectionUtils.isEmpty(icd10Codes)) {
+ return false;
+ }
+
+ boolean deptMatched = false;
+ if (CollectionUtils.isNotEmpty(deptCodes)) {
+ // 闂ㄨ瘖璁板綍鍙湁绉戝锛屾病鏈夌梾鍖猴紱dept_type=2锛堢梾鍖猴級涓嶅弬涓庨棬璇婂尮閰�
+ if (DEPT_TYPE_DEPARTMENT.equals(config.getDeptType())) {
+ deptMatched = containsIgnoreCase(deptCodes, patMedOuthosp.getDeptcode());
+ }
+ }
+
+ boolean diagnosisMatched = false;
+ if (CollectionUtils.isNotEmpty(icd10Codes)) {
+ String icd10code = patMedOuthosp.getIcd10code();
+ String diagname = patMedOuthosp.getDiagname();
+ diagnosisMatched = icd10Codes.stream().anyMatch(code -> {
+ if (equalsIgnoreCase(code, icd10code)) {
+ return true;
+ }
+ // 閮ㄥ垎 HIS 鏁版嵁鍙湁璇婃柇鍚嶇О娌℃湁璇婃柇鐮侊紝姝ゆ椂鍏佽鎸夎瘖鏂悕绉板厹搴曞尮閰�
+ return StringUtils.isBlank(icd10code) && equalsIgnoreCase(code, diagname);
+ });
+ }
+
+ return deptMatched || diagnosisMatched;
+ }
+
+ private PatMaternityArchiveDetail buildMaternityDetail(PatMedOuthosp patMedOuthosp, PatArchive patArchive,
+ PatSpecificArchiveGenerateConfig config, String campusid) {
+ PatMaternityArchiveDetail detail = new PatMaternityArchiveDetail();
+ detail.setArchiveType(config.getArchiveType());
+ detail.setSourceType(SOURCE_TYPE_OUTHOSP);
+ fillCommonDetail(detail, patMedOuthosp, patArchive, campusid);
+ if (patArchive != null) {
+ detail.setAddress(patArchive.getPlaceOfResidence());
+ }
+ return detail;
+ }
+
+ private PatChildArchiveDetail buildChildDetail(PatMedOuthosp patMedOuthosp, PatArchive patArchive,
+ PatSpecificArchiveGenerateConfig config, String campusid) {
+ PatChildArchiveDetail detail = new PatChildArchiveDetail();
+ detail.setArchiveType(config.getArchiveType());
+ detail.setSourceType(SOURCE_TYPE_OUTHOSP);
+ fillCommonChildDetail(detail, patMedOuthosp, patArchive, campusid);
+ detail.setParentPhone(patArchive != null
+ ? firstNotBlank(patArchive.getTelcode(), patMedOuthosp.getTelcode())
+ : patMedOuthosp.getTelcode());
+ if (patArchive != null) {
+ detail.setParentAddress(patArchive.getPlaceOfResidence());
+ }
+ // 钀ュ吇鎬х柧鐥呮。妗堝悓姝ヨ瘖鏂俊鎭紝鏂逛究鍒楄〃鐩存帴灞曠ず
+ if ("1".equals(config.getArchiveType())) {
+ detail.setNutritionIcd10Code(patMedOuthosp.getIcd10code());
+ detail.setNutritionDiagName(patMedOuthosp.getDiagname());
+ }
+ return detail;
+ }
+
+ private void fillCommonDetail(PatMaternityArchiveDetail detail, PatMedOuthosp patMedOuthosp,
+ PatArchive patArchive, String campusid) {
+ detail.setOuthospno(patMedOuthosp.getOuthospno());
+ detail.setSerialnum(patMedOuthosp.getSerialnum());
+ detail.setPatid(patArchive != null ? patArchive.getId() : patMedOuthosp.getPatid());
+ detail.setPatname(patArchive != null
+ ? firstNotBlank(patArchive.getName(), patMedOuthosp.getPatname()) : patMedOuthosp.getPatname());
+ detail.setBirthdate(patArchive != null ? patArchive.getBirthdate() : null);
+ detail.setIdcardno(patArchive != null
+ ? firstNotBlank(patArchive.getIdcardno(), patMedOuthosp.getIdcardno()) : patMedOuthosp.getIdcardno());
+ detail.setPhone(patArchive != null
+ ? firstNotBlank(patArchive.getTelcode(), patMedOuthosp.getTelcode()) : patMedOuthosp.getTelcode());
+ detail.setSex(patArchive != null && patArchive.getSex() != null
+ ? patArchive.getSex() : patMedOuthosp.getSex());
+ detail.setDiagTime(patMedOuthosp.getAdmitdate());
+ detail.setArchiveTime(new Date());
+ detail.setDoctorCode(patMedOuthosp.getDrcode());
+ detail.setDoctorName(patMedOuthosp.getDrname());
+ detail.setManagementDoctorCode(patMedOuthosp.getDrcode());
+ detail.setManagementDoctorName(patMedOuthosp.getDrname());
+ detail.setFirstDoctorCode(patMedOuthosp.getDrcode());
+ detail.setFirstDoctorName(patMedOuthosp.getDrname());
+ detail.setDeptcode(patMedOuthosp.getDeptcode());
+ detail.setDeptname(patMedOuthosp.getDeptname());
+ detail.setIcd10code(patMedOuthosp.getIcd10code());
+ detail.setDiagname(patMedOuthosp.getDiagname());
+ detail.setRegisterUser(patMedOuthosp.getDrname());
+ detail.setOrgid(patMedOuthosp.getOrgid());
+ detail.setCampusid(campusid);
+ detail.setDelFlag("0");
+ }
+
+ private void fillCommonChildDetail(PatChildArchiveDetail detail, PatMedOuthosp patMedOuthosp,
+ PatArchive patArchive, String campusid) {
+ detail.setOuthospno(patMedOuthosp.getOuthospno());
+ detail.setSerialnum(patMedOuthosp.getSerialnum());
+ detail.setPatid(patArchive != null ? patArchive.getId() : patMedOuthosp.getPatid());
+ detail.setPatname(patArchive != null
+ ? firstNotBlank(patArchive.getName(), patMedOuthosp.getPatname()) : patMedOuthosp.getPatname());
+ detail.setBirthdate(patArchive != null ? patArchive.getBirthdate() : null);
+ detail.setIdcardno(patArchive != null
+ ? firstNotBlank(patArchive.getIdcardno(), patMedOuthosp.getIdcardno()) : patMedOuthosp.getIdcardno());
+ detail.setPhone(patArchive != null
+ ? firstNotBlank(patArchive.getTelcode(), patMedOuthosp.getTelcode()) : patMedOuthosp.getTelcode());
+ detail.setSex(patArchive != null && patArchive.getSex() != null
+ ? patArchive.getSex() : patMedOuthosp.getSex());
+ detail.setDiagTime(patMedOuthosp.getAdmitdate());
+ detail.setArchiveTime(new Date());
+ detail.setDoctorCode(patMedOuthosp.getDrcode());
+ detail.setDoctorName(patMedOuthosp.getDrname());
+ detail.setManagementDoctorCode(patMedOuthosp.getDrcode());
+ detail.setManagementDoctorName(patMedOuthosp.getDrname());
+ detail.setDeptcode(patMedOuthosp.getDeptcode());
+ detail.setDeptname(patMedOuthosp.getDeptname());
+ detail.setIcd10code(patMedOuthosp.getIcd10code());
+ detail.setDiagname(patMedOuthosp.getDiagname());
+ detail.setRegisterUser(patMedOuthosp.getDrname());
+ detail.setOrgid(patMedOuthosp.getOrgid());
+ detail.setCampusid(campusid);
+ detail.setDelFlag("0");
+ }
+
+ private PatArchive resolvePatArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
+ if (patArchive != null && patArchive.getId() != null) {
+ return patArchive;
+ }
+
+ PatArchive query = new PatArchive();
+ if (StringUtils.isNotBlank(patMedOuthosp.getPatno())) {
+ query.setPatientno(patMedOuthosp.getPatno());
+ } else if (StringUtils.isNotBlank(patMedOuthosp.getIdcardno())) {
+ query.setIdcardno(patMedOuthosp.getIdcardno());
+ } else {
+ return null;
+ }
+ query.setOrgid(patMedOuthosp.getOrgid());
+
+ List<PatArchive> archives = patArchiveMapper.selectPatArchiveList(query);
+ return CollectionUtils.isNotEmpty(archives) ? archives.get(0) : null;
+ }
+
+ private List<String> parseCodes(String raw) {
+ if (StringUtils.isBlank(raw)) {
+ return Collections.emptyList();
+ }
+ String value = raw.trim();
+ try {
+ JSONArray array = JSON.parseArray(value);
+ if (array != null) {
+ List<String> result = new ArrayList<>();
+ for (Object item : array) {
+ if (item != null && StringUtils.isNotBlank(String.valueOf(item))) {
+ result.add(String.valueOf(item).trim());
+ }
+ }
+ return result;
+ }
+ } catch (Exception e) {
+ log.warn("瑙f瀽妗f鐢熸垚閰嶇疆闆嗗悎澶辫触锛屾寜閫楀彿鍒嗛殧澶勭悊锛歿}", raw);
+ }
+ return Arrays.stream(value.split(","))
+ .map(String::trim)
+ .filter(StringUtils::isNotBlank)
+ .collect(Collectors.toList());
+ }
+
+ private String firstNotBlank(String first, String second) {
+ return StringUtils.isNotBlank(first) ? first : second;
+ }
+
+ private boolean containsIgnoreCase(List<String> source, String target) {
+ if (StringUtils.isBlank(target)) {
+ return false;
+ }
+ return source.stream().anyMatch(item -> equalsIgnoreCase(item, target));
+ }
+
+ private boolean equalsIgnoreCase(String first, String second) {
+ return first != null && second != null && first.trim().equalsIgnoreCase(second.trim());
+ }
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
index 7c52ef0..859bd9c 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -19,9 +19,8 @@
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.domain.*;
import com.smartor.mapper.*;
-import com.smartor.service.IPatChildArchiveService;
-import com.smartor.service.IPatMaternityArchiveService;
import com.smartor.service.IPatMedOuthospService;
+import com.smartor.service.IPatSpecificArchiveGenerateService;
import com.smartor.service.IServiceExternalService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -69,6 +68,11 @@
@Slf4j
@Service
public class ServiceExternalServiceImpl implements IServiceExternalService {
+ /**
+ * 榫欐硥浜烘皯鍖婚櫌鏈烘瀯ID
+ */
+ private static final String LONGQUAN_PEOPLE_HOSPITAL_ORG_ID = "47240004533118111A1001";
+
@Autowired
private SysDept2Mapper sysDeptMapper;
@@ -100,9 +104,7 @@
@Autowired
private ISysConfigService configService;
@Autowired
- private IPatMaternityArchiveService patMaternityArchiveService;
- @Autowired
- private IPatChildArchiveService patChildArchiveService;
+ private IPatSpecificArchiveGenerateService patSpecificArchiveGenerateService;
@Autowired
private PatMedOuthospMapper patMedOuthospMapper;
@Autowired
@@ -1842,9 +1844,66 @@
} else {
patMedInhosp.setCreateTime(new Date());
i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp);
+ if (i == 1) {
+ //榫欐硥浜烘皯鍖婚櫌锛氭柊澧炰綇闄俊鎭椂澶勭悊鎮h�呭啀鍏ラ櫌
+ stopReadmissionFollowUpTasks(patMedInhosp);
+ }
}
if (i == 1) return true;
return false;
+ }
+
+ /**
+ * 鎮h�呭啀鍏ラ櫌澶勭悊锛氭偅鑰呭啀娆″叆闄㈠悗锛屼笂涓�娆″嚭闄㈢敓鎴愮殑寰呮墽琛岄暱鏈熼殢璁夸换鍔′笉鍐嶆墽琛屻��
+ * 鐩墠浠呭榫欐硥浜烘皯鍖婚櫌鐢熸晥锛岄伩鍏嶅奖鍝嶅叾浠栨満鏋勩��
+ *
+ * @param patMedInhosp 鏈鏂板鐨勪綇闄俊鎭�
+ */
+ private void stopReadmissionFollowUpTasks(PatMedInhosp patMedInhosp) {
+ if (!LONGQUAN_PEOPLE_HOSPITAL_ORG_ID.equals(patMedInhosp.getOrgid())) {
+ return;
+ }
+ if (Objects.isNull(patMedInhosp.getPatid()) || Objects.isNull(patMedInhosp.getStarttime())) {
+ log.warn("榫欐硥浜烘皯鍖婚櫌鎮h�呭啀鍏ラ櫌澶勭悊璺宠繃锛宲atid鎴栧叆闄㈡椂闂翠负绌猴紝inhospno={}", patMedInhosp.getInhospno());
+ return;
+ }
+ try {
+ ServiceSubtaskEntity subtask = new ServiceSubtaskEntity();
+ subtask.setPatid(patMedInhosp.getPatid());
+ subtask.setOrgid(LONGQUAN_PEOPLE_HOSPITAL_ORG_ID);
+ subtask.setSendstate(2L);
+ List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask);
+ if (CollectionUtils.isEmpty(serviceSubtaskList)) {
+ return;
+ }
+ int stopCount = 0;
+ for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+ //涓嶆槸闀挎湡浠诲姟锛屼笉澶勭悊
+ if (Objects.isNull(serviceSubtask.getLongSendTime())) {
+ continue;
+ }
+ //鍑洪櫌鏃堕棿鏅氫簬鎴栫瓑浜庢湰娆″叆闄㈡椂闂寸殑浠诲姟锛屼笉灞炰簬鏈鍏ラ櫌鍓嶇殑寰呴殢璁夸换鍔�
+ if (Objects.isNull(serviceSubtask.getEndtime())
+ || !serviceSubtask.getEndtime().before(patMedInhosp.getStarttime())) {
+ continue;
+ }
+ serviceSubtask.setSendstate(4L);
+ serviceSubtask.setIsVisitAgain(2);
+ serviceSubtask.setResult("error");
+ serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark())
+ ? serviceSubtask.getRemark() + ";鎮h�呭啀鍏ラ櫌" : "鎮h�呭啀鍏ラ櫌");
+ serviceSubtask.setUpdateTime(new Date());
+ if (Boolean.TRUE.equals(serviceSubtaskMapper.updateServiceSubtask(serviceSubtask))) {
+ stopCount++;
+ }
+ }
+ log.info("榫欐硥浜烘皯鍖婚櫌鎮h�呭啀鍏ラ櫌澶勭悊瀹屾垚锛宲atid={}锛屾湰娆″叆闄㈡椂闂�={}锛屽仠姝㈠緟鎵ц闀挎湡浠诲姟{}鏉�",
+ patMedInhosp.getPatid(), patMedInhosp.getStarttime(), stopCount);
+ } catch (Exception e) {
+ //鍐嶅叆闄换鍔″鐞嗗け璐ヤ笉褰卞搷鏈浣忛櫌淇℃伅鍏ュ簱
+ log.error("榫欐硥浜烘皯鍖婚櫌鎮h�呭啀鍏ラ櫌澶勭悊寮傚父锛宲atid={}锛宨nhospno={}",
+ patMedInhosp.getPatid(), patMedInhosp.getInhospno(), e);
+ }
}
//鏂板闅忚浠诲姟鍚屾
@@ -2480,61 +2539,20 @@
return 1;
}
- //鏂板鎮h�呬笓绉戞。妗堝熀鏈俊鎭�
+ /**
+ * 瀹屾垚鎺ヨ瘖鏃舵寜涓撶妗f鐢熸垚閰嶇疆鐢熸垚濡囩/鍎跨妗f銆�
+ *
+ * <p>鐢熸垚閫昏緫鍐呴儴鍙鎸囧畾鏈烘瀯鐢熸晥锛屾湭鍛戒腑閰嶇疆鎴栫敓鎴愬け璐ュ潎涓嶅奖鍝嶆帴璇婁富娴佺▼銆�</p>
+ */
private void genePatSpecificArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
- String deptCategory = judgeDeptCategory(patMedOuthosp.getDeptcode(), patMedOuthosp.getOrgid());
-
- boolean isGynecology = "1".equals(deptCategory); // 鏄惁濡囩
- boolean isPediatrics = "2".equals(deptCategory); // 鏄惁鍎跨
-
- if (isGynecology) {
- // 璧板绉戞。妗堢敓鎴愰�昏緫
- PatMaternityArchiveDetail patMaternityArchiveDetail
- = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatMaternityArchiveDetail.class);
- patMaternityArchiveDetail.setSourceType("1");
- patMaternityArchiveDetail.setPhone(patArchive.getTelcode());
- patMaternityArchiveDetail.setPatid(patArchive.getId());
- patMaternityArchiveDetail.setPatname(patArchive.getName());
- patMaternityArchiveDetail.setBirthdate(patArchive.getBirthdate());
- patMaternityArchiveDetail.setSex(patArchive.getSex());
- patMaternityArchiveDetail.setAddress(patArchive.getPlaceOfResidence());
- patMaternityArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno());
- patMaternityArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum());
- patMaternityArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code());
- patMaternityArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode());
- patMaternityArchiveDetail.setDeptname(patMedOuthosp.getDeptname());
- patMaternityArchiveDetail.setDoctorName(patMedOuthosp.getDrname());
- patMaternityArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode());
- patMaternityArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname());
- patMaternityArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode());
- patMaternityArchiveDetail.setOrgid(patMedOuthosp.getOrgid());
- patMaternityArchiveDetail.setCampusid(patMedOuthosp.getCampusid());
- patMaternityArchiveService.insertOrUpdateMaternityArchive(patMaternityArchiveDetail);
- } else if (isPediatrics) {
- // 璧板効绉戞。妗堢敓鎴愰�昏緫
- PatChildArchiveDetail patChildArchiveDetail
- = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatChildArchiveDetail.class);
- patChildArchiveDetail.setSourceType("1");
- patChildArchiveDetail.setPhone(patArchive.getTelcode());
- patChildArchiveDetail.setPatid(patArchive.getId());
- patChildArchiveDetail.setPatname(patArchive.getName());
- patChildArchiveDetail.setBirthdate(patArchive.getBirthdate());
- patChildArchiveDetail.setSex(patArchive.getSex());
-// patChildArchiveDetail.setAddress(patArchive.getPlaceOfResidence());
- patChildArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno());
- patChildArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum());
- patChildArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code());
- patChildArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode());
- patChildArchiveDetail.setDeptname(patMedOuthosp.getDeptname());
- patChildArchiveDetail.setDoctorName(patMedOuthosp.getDrname());
- patChildArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode());
- patChildArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname());
- patChildArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode());
- patChildArchiveDetail.setOrgid(patMedOuthosp.getOrgid());
- patChildArchiveDetail.setCampusid(patMedOuthosp.getCampusid());
- patChildArchiveService.insertOrUpdateChildArchive(patChildArchiveDetail);
- } else {
- // 鏈懡涓厤缃紝涓嶇敓鎴愭。妗�
+ try {
+ int generated = patSpecificArchiveGenerateService.generateByOuthosp(patMedOuthosp, patArchive);
+ if (generated > 0) {
+ log.info("瀹屾垚鎺ヨ瘖鑷姩鐢熸垚涓撶妗f鎴愬姛锛宱uthospno={}锛岀敓鎴愭暟閲�={}",
+ patMedOuthosp.getOuthospno(), generated);
+ }
+ } catch (Exception e) {
+ log.error("瀹屾垚鎺ヨ瘖鑷姩鐢熸垚涓撶妗f澶辫触锛宱uthospno={}", patMedOuthosp.getOuthospno(), e);
}
}
diff --git a/sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql b/sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql
new file mode 100644
index 0000000..3a7fcd8
--- /dev/null
+++ b/sql/pat_specific_archive_generate_config_lishui_mch_20261104.sql
@@ -0,0 +1,95 @@
+-- =============================================================================
+-- 涓芥按甯傚骞间繚鍋ラ櫌 涓撶妗f鐢熸垚閰嶇疆锛堜緷鎹簲涓畬鎴愭帴璇婂叆鍙傦級
+-- orgid : 47226079133110211G1001
+-- date : 2026-11-04
+-- 璇存槑 :
+-- 1. 瀹屾垚鎺ヨ瘖娑堟伅 JZ_MZ_WanChengJZ 鍐欏叆 pat_med_outhosp 鍚庯紝鎸夋湰閰嶇疆鐢熸垚妗f銆�
+-- 2. dept_codes / icd10_codes 鍧囦负 JSON 鏁扮粍瀛楃涓层��
+-- 3. 鍖归厤鍏崇郴涓� OR锛氶儴闂ㄦ潯浠舵垨璇婃柇鏉′欢浠讳竴鍛戒腑鍗崇敓鎴愩��
+-- 4. 鑴氭湰鎸� remark 鍋氬箓绛夛紝閲嶅鎵ц涓嶄細閲嶅鎻掑叆銆�
+-- =============================================================================
+
+-- 1. 濡囩-鏃╁瓡鍏崇埍
+-- 鍏ュ弬锛欽iuZhenKSID=010104010601锛堟棭瀛曞叧鐖遍棬璇婏級锛屼富璇婃柇 Icd10=O26.900x206锛堝瓡19鍛級
+INSERT INTO pat_specific_archive_generate_config
+(dept_type, dept_category, archive_type, dept_codes, icd10_codes, remark,
+ orgid, campusid, create_by, create_time, del_flag)
+SELECT '1', '1', '1', '["010104010601"]', '["O26.900x206"]',
+ '涓芥按濡囧辜-鏃╁瓡鍏崇埍锛堝畬鎴愭帴璇婂叆鍙傦級',
+ '47226079133110211G1001', '1', 'system', NOW(), '0'
+FROM DUAL
+WHERE NOT EXISTS (
+ SELECT 1 FROM pat_specific_archive_generate_config
+ WHERE orgid = '47226079133110211G1001'
+ AND remark = '涓芥按濡囧辜-鏃╁瓡鍏崇埍锛堝畬鎴愭帴璇婂叆鍙傦級'
+);
+
+-- 2. 濡囩-鍥寸粷缁忔湡 MHI
+-- 鍏ュ弬锛欽iuZhenKSID=010102010207锛堝绉戝唴鍒嗘硨闂ㄨ瘖锛夛紝涓昏瘖鏂� Icd10=N95.900
+INSERT INTO pat_specific_archive_generate_config
+(dept_type, dept_category, archive_type, dept_codes, icd10_codes, remark,
+ orgid, campusid, create_by, create_time, del_flag)
+SELECT '1', '1', '2', '["010102010207"]', '["N95.900"]',
+ '涓芥按濡囧辜-鍥寸粷缁忔湡MHI锛堝畬鎴愭帴璇婂叆鍙傦級',
+ '47226079133110211G1001', '1', 'system', NOW(), '0'
+FROM DUAL
+WHERE NOT EXISTS (
+ SELECT 1 FROM pat_specific_archive_generate_config
+ WHERE orgid = '47226079133110211G1001'
+ AND remark = '涓芥按濡囧辜-鍥寸粷缁忔湡MHI锛堝畬鎴愭帴璇婂叆鍙傦級'
+);
+
+-- 3. 鍎跨-钀ュ吇鎬х柧鐥�
+-- 鍏ュ弬锛氫富璇婃柇 Icd10=E46.x00x003锛堣惀鍏讳笉鑹級
+-- 璇存槑锛氳鏍蜂緥绉戝涓衡�滃効绔ュ績鐞�/璇█/琛屼负鍙戣偛闂ㄨ瘖鈥濓紝绉戝涓嶅叿澶囧尯鍒嗗害锛屽洜姝ゅ彧鎸夎瘖鏂尮閰嶃��
+INSERT INTO pat_specific_archive_generate_config
+(dept_type, dept_category, archive_type, dept_codes, icd10_codes, remark,
+ orgid, campusid, create_by, create_time, del_flag)
+SELECT '1', '2', '1', NULL, '["E46.x00x003"]',
+ '涓芥按濡囧辜-鍎跨钀ュ吇鎬х柧鐥咃紙瀹屾垚鎺ヨ瘖鍏ュ弬锛�',
+ '47226079133110211G1001', '1', 'system', NOW(), '0'
+FROM DUAL
+WHERE NOT EXISTS (
+ SELECT 1 FROM pat_specific_archive_generate_config
+ WHERE orgid = '47226079133110211G1001'
+ AND remark = '涓芥按濡囧辜-鍎跨钀ュ吇鎬х柧鐥咃紙瀹屾垚鎺ヨ瘖鍏ュ弬锛�'
+);
+
+-- 4. 鍎跨-瀛︿範鍥伴毦
+-- 鍏ュ弬锛氫富璇婃柇 Icd10=F81.900锛堝涔犳妧鑳藉彂鑲查殰纰嶏級锛屽瓙璇婃柇鍚� F90.000锛堟椿鍔ㄤ笌娉ㄦ剰澶辫皟锛�
+-- 璇存槑锛氳鏍蜂緥绉戝涓衡�滃効绔ヤ繚鍋ラ棬璇娾�濓紝绉戝涓嶅叿澶囧尯鍒嗗害锛屽洜姝ゅ彧鎸夎瘖鏂尮閰嶃��
+INSERT INTO pat_specific_archive_generate_config
+(dept_type, dept_category, archive_type, dept_codes, icd10_codes, remark,
+ orgid, campusid, create_by, create_time, del_flag)
+SELECT '1', '2', '2', NULL, '["F81.900","F90.000"]',
+ '涓芥按濡囧辜-鍎跨瀛︿範鍥伴毦锛堝畬鎴愭帴璇婂叆鍙傦級',
+ '47226079133110211G1001', '1', 'system', NOW(), '0'
+FROM DUAL
+WHERE NOT EXISTS (
+ SELECT 1 FROM pat_specific_archive_generate_config
+ WHERE orgid = '47226079133110211G1001'
+ AND remark = '涓芥按濡囧辜-鍎跨瀛︿範鍥伴毦锛堝畬鎴愭帴璇婂叆鍙傦級'
+);
+
+-- 5. 鍎跨-楂樺嵄鍎夸笓妗�
+-- 鍏ュ弬锛欽iuZhenKSID=010104010405锛堟棭浜у効/楂樺嵄鍎块棬璇婏級锛屼富璇婃柇 Icd10=P96.800x904锛堥珮鍗卞効锛�
+INSERT INTO pat_specific_archive_generate_config
+(dept_type, dept_category, archive_type, dept_codes, icd10_codes, remark,
+ orgid, campusid, create_by, create_time, del_flag)
+SELECT '1', '2', '3', '["010104010405"]', '["P96.800x904"]',
+ '涓芥按濡囧辜-鍎跨楂樺嵄鍎夸笓妗堬紙瀹屾垚鎺ヨ瘖鍏ュ弬锛�',
+ '47226079133110211G1001', '1', 'system', NOW(), '0'
+FROM DUAL
+WHERE NOT EXISTS (
+ SELECT 1 FROM pat_specific_archive_generate_config
+ WHERE orgid = '47226079133110211G1001'
+ AND remark = '涓芥按濡囧辜-鍎跨楂樺嵄鍎夸笓妗堬紙瀹屾垚鎺ヨ瘖鍏ュ弬锛�'
+);
+
+-- 鏍搁獙锛氬簲杩斿洖 5 鏉¢厤缃�
+SELECT id, dept_category, archive_type, dept_codes, icd10_codes, remark
+FROM pat_specific_archive_generate_config
+WHERE orgid = '47226079133110211G1001'
+ AND del_flag = '0'
+ AND remark LIKE '涓芥按濡囧辜-%锛堝畬鎴愭帴璇婂叆鍙傦級'
+ORDER BY dept_category, archive_type;
--
Gitblit v1.9.3