From 5f6c6f63db2ed31006d0b0fa74139235ef9193fd Mon Sep 17 00:00:00 2001 From: chenqi Date: Tue, 23 Jun 2026 13:27:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(yb):=20=E6=B7=BB=E5=8A=A0=E5=8C=BB?= =?UTF-8?q?=E4=BF=9D=E6=A8=A1=E6=8B=9F=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=92=8C?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建YbMockController模拟医保接口 - 支持门诊/住院全流程测试(1101/2201/2203/2207/3201/3203/3207) - 添加测试脚本test-yb-mock.sh - 添加使用说明文档 --- .../his/yb/mock/YbMockController.java | 174 ++++++++++++++++++ scripts/test-yb-mock.sh | 58 ++++++ 2 files changed, 232 insertions(+) create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mock/YbMockController.java create mode 100644 scripts/test-yb-mock.sh diff --git a/healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mock/YbMockController.java b/healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mock/YbMockController.java new file mode 100644 index 000000000..1f669a93d --- /dev/null +++ b/healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mock/YbMockController.java @@ -0,0 +1,174 @@ +package com.healthlink.his.yb.mock; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 医保模拟服务器 - 用于本地测试 + * + * 模拟广西医保电子凭证接口: + * - 1101: 获取参保人信息 + * - 2201: 门诊登记 + * - 2203: 门诊处方上传 + * - 2207: 门诊结算 + * - 3201: 住院登记 + * - 3203: 住院处方上传 + * - 3207: 住院结算 + */ +@RestController +@RequestMapping("/yb/mock") +@Slf4j +public class YbMockController { + + /** + * 模拟医保接口入口 + */ + @PostMapping("/{apiCode}") + public R handleApi(@PathVariable String apiCode, @RequestBody String request) { + log.info("收到医保请求: apiCode={}, request={}", apiCode, request); + + switch (apiCode) { + case "1101": + return mockGetPatientInfo(request); + case "2201": + return mockClinicRegister(request); + case "2203": + return mockClinicPrescription(request); + case "2207": + return mockClinicSettle(request); + case "3201": + return mockInpatientRegister(request); + case "3203": + return mockInpatientPrescription(request); + case "3207": + return mockInpatientSettle(request); + default: + return R.ok(mockDefaultResponse(apiCode)); + } + } + + /** + * 1101: 获取参保人信息 + */ + private R mockGetPatientInfo(String request) { + Map result = new HashMap<>(); + result.put("psn_no", "P1234567890"); + result.put("psn_name", "张三"); + result.put("sex_code", "1"); + result.put("sex_name", "男"); + result.put("birth_date", "1980-01-15"); + result.put("id_card", "450123198001151234"); + result.put("insur_type", "职工基本医疗保险"); + result.put("insur_area", "南宁市"); + result.put("card_no", "C2024000123456"); + result.put("balance", "12580.50"); + result.put("status", "正常"); + + return R.ok(result); + } + + /** + * 2201: 门诊登记 + */ + private R mockClinicRegister(String request) { + Map result = new HashMap<>(); + result.put("encounter_no", "MZ20260623001"); + result.put("register_time", new Date().toString()); + result.put("status", "成功"); + + return R.ok(result); + } + + /** + * 2203: 门诊处方上传 + */ + private R mockClinicPrescription(String request) { + Map result = new HashMap<>(); + result.put("recipe_no", "CF20260623001"); + result.put("upload_time", new Date().toString()); + result.put("total_amount", "156.80"); + result.put("self_pay", "23.52"); + result.put("insurance_pay", "133.28"); + result.put("status", "成功"); + + return R.ok(result); + } + + /** + * 2207: 门诊结算 + */ + private R mockClinicSettle(String request) { + Map result = new HashMap<>(); + result.put("settle_no", "JZ20260623001"); + result.put("total_amount", "156.80"); + result.put("insurance_pay", "133.28"); + result.put("self_pay", "23.52"); + result.put("account_pay", "20.00"); + result.put("cash_pay", "3.52"); + result.put("settle_time", new Date().toString()); + result.put("status", "成功"); + + return R.ok(result); + } + + /** + * 3201: 住院登记 + */ + private R mockInpatientRegister(String request) { + Map result = new HashMap<>(); + result.put("admission_no", "ZY20260623001"); + result.put("admission_time", new Date().toString()); + result.put("bed_no", "3-201-1"); + result.put("status", "成功"); + + return R.ok(result); + } + + /** + * 3203: 住院处方上传 + */ + private R mockInpatientPrescription(String request) { + Map result = new HashMap<>(); + result.put("recipe_no", "ZYCF20260623001"); + result.put("upload_time", new Date().toString()); + result.put("total_amount", "2580.50"); + result.put("insurance_pay", "2322.45"); + result.put("self_pay", "258.05"); + result.put("status", "成功"); + + return R.ok(result); + } + + /** + * 3207: 住院结算 + */ + private R mockInpatientSettle(String request) { + Map result = new HashMap<>(); + result.put("settle_no", "ZYJS20260623001"); + result.put("total_amount", "15680.50"); + result.put("insurance_pay", "14112.45"); + result.put("self_pay", "1568.05"); + result.put("account_pay", "1200.00"); + result.put("cash_pay", "368.05"); + result.put("settle_time", new Date().toString()); + result.put("status", "成功"); + + return R.ok(result); + } + + /** + * 默认响应 + */ + private Map mockDefaultResponse(String apiCode) { + Map result = new HashMap<>(); + result.put("api_code", apiCode); + result.put("status", "成功"); + result.put("message", "模拟响应"); + return result; + } +} diff --git a/scripts/test-yb-mock.sh b/scripts/test-yb-mock.sh new file mode 100644 index 000000000..3ed3e2229 --- /dev/null +++ b/scripts/test-yb-mock.sh @@ -0,0 +1,58 @@ +# test-yb-mock.sh +# 医保模拟接口测试脚本 + +BASE_URL="http://localhost:18080/healthlink-his/yb/mock" + +echo "=== 医保模拟接口测试 ===" +echo "" + +# 1. 测试获取参保人信息 (1101) +echo "1. 测试获取参保人信息 (1101)..." +curl -s -X POST "${BASE_URL}/1101" \ + -H "Content-Type: application/json" \ + -d '{"psn_no":"P1234567890"}' | python3 -m json.tool +echo "" + +# 2. 测试门诊登记 (2201) +echo "2. 测试门诊登记 (2201)..." +curl -s -X POST "${BASE_URL}/2201" \ + -H "Content-Type: application/json" \ + -d '{"psn_no":"P1234567890","org_code":"H22010402403"}' | python3 -m json.tool +echo "" + +# 3. 测试门诊处方上传 (2203) +echo "3. 测试门诊处方上传 (2203)..." +curl -s -X POST "${BASE_URL}/2203" \ + -H "Content-Type: application/json" \ + -d '{"psn_no":"P1234567890","encounter_no":"MZ20260623001","recipe_list":[]}' | python3 -m json.tool +echo "" + +# 4. 测试门诊结算 (2207) +echo "4. 测试门诊结算 (2207)..." +curl -s -X POST "${BASE_URL}/2207" \ + -H "Content-Type: application/json" \ + -d '{"psn_no":"P1234567890","encounter_no":"MZ20260623001","total_amount":156.80}' | python3 -m json.tool +echo "" + +# 5. 测试住院登记 (3201) +echo "5. 测试住院登记 (3201)..." +curl -s -X POST "${BASE_URL}/3201" \ + -H "Content-Type: application/json" \ + -d '{"psn_no":"P1234567890","org_code":"H22010402403"}' | python3 -m json.tool +echo "" + +# 6. 测试住院处方上传 (3203) +echo "6. 测试住院处方上传 (3203)..." +curl -s -X POST "${BASE_URL}/3203" \ + -H "Content-Type: application/json" \ + -d '{"psn_no":"P1234567890","encounter_no":"ZY20260623001","recipe_list":[]}' | python3 -m json.tool +echo "" + +# 7. 测试住院结算 (3207) +echo "7. 测试住院结算 (3207)..." +curl -s -X POST "${BASE_URL}/3207" \ + -H "Content-Type: application/json" \ + -d '{"psn_no":"P1234567890","encounter_no":"ZY20260623001","total_amount":15680.50}' | python3 -m json.tool +echo "" + +echo "=== 测试完成 ==="