123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>江苏工伤联网结算接口测试</title>
- <style>
- body {
- font-family: 'Microsoft YaHei', Arial, sans-serif;
- margin: 0;
- padding: 20px;
- background-color: #f0f0f0;
- }
- .container {
- max-width: 1000px;
- margin: 0 auto;
- background: white;
- border-radius: 8px;
- box-shadow: 0 2px 10px rgba(0,0,0,0.1);
- overflow: hidden;
- }
- .header {
- background: #4472C4;
- color: white;
- padding: 15px 20px;
- font-size: 16px;
- font-weight: bold;
- display: flex;
- align-items: center;
- }
- .header::before {
- content: "🏥";
- margin-right: 10px;
- font-size: 18px;
- }
- .button-group {
- padding: 20px;
- border-bottom: 1px solid #ddd;
- background: #f8f9fa;
- }
- .btn {
- background: #5B9BD5;
- color: white;
- border: none;
- padding: 8px 16px;
- margin: 4px;
- border-radius: 4px;
- cursor: pointer;
- font-size: 14px;
- min-width: 80px;
- transition: background-color 0.2s;
- }
- .btn:hover {
- background: #4682B4;
- }
- .btn:active {
- background: #2F5496;
- }
- .btn.init { background: #70AD47; }
- .btn.init:hover { background: #5A8A3A; }
- .btn.signin { background: #FFC000; color: #333; }
- .btn.signin:hover { background: #E6AC00; }
- .btn.signout { background: #FF6B6B; }
- .btn.signout:hover { background: #E55555; }
- .btn.business { background: #5B9BD5; }
- .btn.business:hover { background: #4682B4; }
- .btn.clear { background: #D9534F; }
- .btn.clear:hover { background: #C9302C; }
- .btn.reset { background: #6C757D; }
- .btn.reset:hover { background: #5A6268; }
-
- .section {
- padding: 15px 20px;
- }
- .section-title {
- font-weight: bold;
- margin-bottom: 10px;
- color: #333;
- }
- .param-area {
- width: 100%;
- height: 300px;
- border: 1px solid #ccc;
- padding: 10px;
- font-family: 'Courier New', monospace;
- font-size: 12px;
- resize: vertical;
- background: #fafafa;
- }
- .param-area:focus {
- outline: none;
- border-color: #5B9BD5;
- background: white;
- }
- .help-text {
- font-size: 12px;
- color: #666;
- margin-top: 5px;
- line-height: 1.4;
- }
- .function-help {
- background: #e8f4fd;
- border: 1px solid #b6d7ff;
- border-radius: 4px;
- padding: 10px;
- margin: 10px 0;
- font-size: 12px;
- color: #0066cc;
- }
- .status-bar {
- background: #f8f9fa;
- border-top: 1px solid #ddd;
- padding: 10px 20px;
- font-size: 12px;
- color: #666;
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
- .error-msg {
- color: #d9534f;
- font-weight: bold;
- }
- .success-msg {
- color: #5cb85c;
- font-weight: bold;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="header">
- 江苏工伤联网结算接口测试工具 - WorkInjuryInterfaceTest
- </div>
-
- <div class="button-group">
- <!-- 系统管理按钮 -->
- <button class="btn init" onclick="loadInitParams()" title="初始化工伤联网系统">初始化</button>
- <button class="btn signin" onclick="loadSignInParams()" title="操作员签到">签到</button>
- <button class="btn signout" onclick="loadSignOutParams()" title="操作员签退">签退</button>
- <button class="btn business" onclick="loadBusinessParams()" title="工伤业务交易">业务</button>
-
- <!-- 特殊功能按钮 -->
- <button class="btn" onclick="loadHealthCheckParams()" title="检查系统健康状态">健康检查</button>
- <button class="btn" onclick="loadStatsParams()" title="获取系统统计信息">统计信息</button>
-
- <!-- 执行按钮 -->
- <button class="btn" onclick="callWorkInjuryAPI()" title="调用工伤联网接口" style="background: #28A745; font-weight: bold;">🚀 调用接口1</button>
-
- <!-- 工具按钮 -->
- <button class="btn clear" onclick="clearAll()" title="清空入参和出参">清屏</button>
- <button class="btn reset" onclick="resetToDefault()" title="恢复默认参数">重置</button>
- <button class="btn" onclick="showParamExamples()" title="显示参数示例" style="background: #17A2B8;">参数示例</button>
- </div>
-
- <!-- 功能说明 -->
- <div class="function-help">
- <strong>📋 使用说明:</strong><br>
- 1. <strong>初始化</strong>:系统启动时必须先调用,配置医院信息和系统参数<br>
- 2. <strong>签到</strong>:操作员登录工伤系统,获取签到流水号(每日首次使用)<br>
- 3. <strong>签退</strong>:操作员退出工伤系统(下班时调用)<br>
- 4. <strong>业务</strong>:处理工伤患者的各种业务交易(读卡、登记、结算等)<br>
- 5. <strong>健康检查</strong>:检查系统运行状态和DLL文件<br>
- 6. <strong>统计信息</strong>:查看交易统计和系统状态<br><br>
- <strong>⚠️ 注意事项:</strong>必须按顺序操作:初始化 → 签到 → 业务交易 → 签退<br><br>
- <strong>🔧 关于"诊区"功能的说明:</strong><br>
- 原测试界面的"诊区"功能在工伤系统中不适用,因为:<br>
- • 工伤系统关注的是<strong>业务交易类型</strong>,而非物理诊疗区域<br>
- • 江苏工伤联网规范中没有诊区概念,主要是签到、读卡、登记、结算等交易<br>
- • 已改为"健康检查"功能,更符合系统监控需求
- </div>
-
- <div class="section">
- <div class="section-title">入参</div>
- <textarea id="inputParams" class="param-area" placeholder="请选择上方按钮加载默认参数,或手动输入JSON格式的请求参数..."></textarea>
- <div class="help-text">
- 💡 <strong>参数格式说明:</strong><br>
- • <strong>action</strong>: 操作类型 (init|transaction|health|stats|signin_status)<br>
- • <strong>transactionName</strong>: 交易名称 (读卡|RegisterPatient|PreSettle|Settle等)<br>
- • <strong>businessParams</strong>: 业务参数对象<br>
- • <strong>identifyMode</strong>: 识别方式 (1-实体卡|2-电子凭证)<br>
- • <strong>operatorId</strong>: 操作员编号<br>
- • <strong>operatorName</strong>: 操作员姓名<br><br>
-
- 📝 <strong>使用步骤:</strong><br>
- 1. 点击上方按钮加载对应功能的默认参数<br>
- 2. 根据实际情况修改参数值(如操作员信息、患者信息等)<br>
- 3. 点击"🚀 调用接口"按钮或双击此文本框或按Ctrl+Enter<br>
- 4. 查看下方出参框中的返回结果<br><br>
-
- <span id="currentFunction" style="color: #0066cc; font-weight: bold;">当前功能:未选择</span>
- </div>
- </div>
-
- <div class="section">
- <div class="section-title">出参</div>
- <textarea id="outputParams" class="param-area" placeholder="调用接口后,返回结果将显示在这里..." readonly></textarea>
- <div class="help-text">
- 📊 <strong>返回字段说明:</strong><br>
- • <strong>success</strong>: 调用是否成功 (true|false)<br>
- • <strong>code</strong>: 结果代码 (200-成功,其他-失败)<br>
- • <strong>message</strong>: 结果描述信息<br>
- • <strong>data</strong>: 具体业务数据<br>
- • <strong>device</strong>: 设备标识
- </div>
- </div>
-
- <div class="status-bar">
- <span id="statusMsg">就绪 - 请选择功能并配置参数</span>
- <span>接口地址: http://localhost:8321/api/entry/workinjury</span>
- </div>
- </div>
- <script>
- const inputArea = document.getElementById('inputParams');
- const outputArea = document.getElementById('outputParams');
- const statusMsg = document.getElementById('statusMsg');
-
- // 默认参数配置
- const defaultParams = {
- init: {
- action: "init",
- config: {
- fixmedinsCode: "SQ201348",
- fixmedinsName: "沭阳铭和医院",
- receiverSysCode: "JSYTH",
- interfaceVersion: "V2.1",
- operatorType: "1",
- defaultOperator: "001",
- defaultOperatorName: "收费员张三",
- logPath: "logs/workinjury/"
- }
- },
- SignIn: {
- action: "transaction",
- transactionName: "SignIn",
- identifyMode: "1",
- operatorId: "001",
- operatorName: "收费员张三",
- businessParams: {}
- },
- signout: {
- action: "transaction",
- transactionName: "SignOut",
- identifyMode: "1",
- operatorId: "001",
- operatorName: "收费员张三",
- businessParams: {}
- },
- business: {
- action: "transaction",
- transactionName: "读卡",
- identifyMode: "1",
- operatorId: "001",
- operatorName: "收费员张三",
- businessParams: {
- // 根据具体交易类型填写对应参数
- // 例如登记时需要填写:psn_no、visit_type、dept_code等
- // 例如结算时需要填写:visit_no、fee_details等
- }
- },
- health: {
- action: "health"
- },
- stats: {
- action: "stats"
- }
- };
-
- // 加载初始化参数
- function loadInitParams() {
- inputArea.value = JSON.stringify(defaultParams.init, null, 2);
- updateStatus('已加载初始化参数 - 配置医院信息和系统环境');
- updateCurrentFunction('系统初始化');
- }
-
- // 加载签到参数
- function loadSignInParams() {
- inputArea.value = JSON.stringify(defaultParams.SignIn, null, 2);
- updateStatus('已加载签到参数 - 操作员登录工伤系统');
- updateCurrentFunction('操作员签到');
- }
-
- // 加载签退参数
- function loadSignOutParams() {
- inputArea.value = JSON.stringify(defaultParams.signout, null, 2);
- updateStatus('已加载签退参数 - 操作员退出工伤系统');
- updateCurrentFunction('操作员签退');
- }
-
- // 加载业务交易参数
- function loadBusinessParams() {
- const businessExamples = [
- {
- name: "读卡",
- params: {
- action: "transaction",
- transactionName: "读卡",
- identifyMode: "1",
- operatorId: "001",
- operatorName: "收费员张三"
- }
- },
- {
- name: "患者登记",
- params: {
- action: "transaction",
- transactionName: "RegisterPatient",
- businessParams: {
- psn_no: "32010219800101001X",
- visit_type: "1",
- dept_code: "001",
- dept_name: "骨科",
- doctor_code: "DOC001",
- doctor_name: "张主任",
- diag_code: "M79.900",
- diag_name: "骨折",
- visit_time: "2024-12-01 10:30:00"
- },
- identifyMode: "1"
- }
- },
- {
- name: "费用预结算",
- params: {
- action: "transaction",
- transactionName: "PreSettle",
- businessParams: {
- visit_no: "V20241201001",
- fee_details: [
- {
- fee_ocur_time: "2024-12-01 10:30:00",
- med_list_codg: "001",
- med_list_name: "X光片检查",
- med_chrgitm_type: "4",
- fee_amt: 120.00,
- cnt: 1,
- pric: 120.00,
- spec: "胸部X光",
- dept_code: "001",
- dept_name: "骨科"
- }
- ]
- }
- }
- },
- {
- name: "正式结算",
- params: {
- action: "transaction",
- transactionName: "Settle",
- businessParams: {
- visit_no: "V20241201001",
- pre_settle_id: "PS20241201001"
- }
- }
- }
- ];
-
- // 显示业务交易选择提示
- const selected = prompt(
- "请选择业务交易类型:\n" +
- "1. 读卡\n" +
- "2. 患者登记\n" +
- "3. 费用预结算\n" +
- "4. 正式结算\n\n" +
- "请输入数字 (1-4):"
- );
-
- const index = parseInt(selected) - 1;
- if (index >= 0 && index < businessExamples.length) {
- inputArea.value = JSON.stringify(businessExamples[index].params, null, 2);
- updateStatus(`已加载业务参数 - ${businessExamples[index].name}`);
- updateCurrentFunction(`业务交易 - ${businessExamples[index].name}`);
- } else {
- inputArea.value = JSON.stringify(defaultParams.business, null, 2);
- updateStatus('已加载默认业务参数 - 读卡');
- updateCurrentFunction('业务交易 - 读卡');
- }
- }
-
- // 加载健康检查参数
- function loadHealthCheckParams() {
- inputArea.value = JSON.stringify(defaultParams.health, null, 2);
- updateStatus('已加载健康检查参数 - 系统状态诊断');
- updateCurrentFunction('系统健康检查');
- }
-
- // 加载统计信息参数
- function loadStatsParams() {
- inputArea.value = JSON.stringify(defaultParams.stats, null, 2);
- updateStatus('已加载统计信息参数 - 查看系统运行数据');
- updateCurrentFunction('系统统计信息');
- }
-
- // 清空所有内容
- function clearAll() {
- inputArea.value = '';
- outputArea.value = '';
- updateStatus('已清空所有内容');
- updateCurrentFunction('未选择');
- }
-
- // 重置为默认参数
- function resetToDefault() {
- loadInitParams();
- outputArea.value = '';
- updateStatus('已重置为默认初始化参数');
- // loadInitParams()中已包含updateCurrentFunction调用
- }
-
- // 更新状态信息
- function updateStatus(message, isError = false) {
- statusMsg.textContent = message;
- statusMsg.className = isError ? 'error-msg' : 'success-msg';
-
- // 3秒后恢复默认状态
- setTimeout(() => {
- statusMsg.textContent = '就绪 - 请选择功能并配置参数';
- statusMsg.className = '';
- }, 3000);
- }
-
- // 更新当前功能显示
- function updateCurrentFunction(functionName) {
- const currentFunctionSpan = document.getElementById('currentFunction');
- currentFunctionSpan.textContent = `当前功能:${functionName}`;
- }
-
- // 调用接口(当前只是模拟,需要连接实际接口)
- async function callWorkInjuryAPI() {
- console.log("11111111111111111111111111111111")
- try {
- const inputText = inputArea.value.trim();
- console.log("inputText111111111111111111111111",inputText)
- if (!inputText) {
- updateStatus('请先输入参数', true);
- return;
- }
-
- const params = JSON.parse(inputText);
- updateStatus('正在调用接口...');
-
- const response = await fetch('http://localhost:8321/api/entry/workinjury', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify(params)
- });
- console.log("response111111111111111",response)
- const result = await response.json();
- outputArea.value = JSON.stringify(result, null, 2);
-
- if (result.success) {
- updateStatus('接口调用成功');
- } else {
- updateStatus(`接口调用失败: ${result.message}`, true);
- }
-
- } catch (error) {
- console.log("22222222222222222222222")
- outputArea.value = JSON.stringify({
- success: false,
- error: error.message,
- timestamp: new Date().toISOString()
- }, null, 2);
- updateStatus(`调用异常: ${error.message}`, true);
- }
- }
-
- // 双击入参区域调用接口
- inputArea.addEventListener('dblclick', callWorkInjuryAPI);
-
- // 添加键盘快捷键支持
- document.addEventListener('keydown', function(e) {
- if (e.ctrlKey) {
- switch(e.key) {
- case '1': loadInitParams(); e.preventDefault(); break;
- case '2': loadSignInParams(); e.preventDefault(); break;
- case '3': loadSignOutParams(); e.preventDefault(); break;
- case '4': loadBusinessParams(); e.preventDefault(); break;
- case 'Enter': callWorkInjuryAPI(); e.preventDefault(); break;
- case 'Delete': clearAll(); e.preventDefault(); break;
- case 'r': resetToDefault(); e.preventDefault(); break;
- }
- }
- });
-
- // 显示参数示例
- function showParamExamples() {
- const examples = `
- 📋 工伤联网接口参数示例大全
- 🔧 1. 系统初始化
- {
- "action": "init",
- "config": {
- "fixmedinsCode": "SQ201348", // 医院编号(必填)
- "fixmedinsName": "沭阳铭和医院", // 医院名称(必填)
- "receiverSysCode": "JSYTH", // 固定值
- "interfaceVersion": "V2.1", // 固定值
- "operatorType": "1", // 1-人工 2-自助
- "defaultOperator": "001", // 操作员编号
- "defaultOperatorName": "收费员张三" // 操作员姓名
- }
- }
- 👤 2. 操作员签到
- {
- "action": "transaction",
- "transactionName": "SignIn",
- "identifyMode": "1", // 识别方式(保持一致性)
- "operatorId": "001", // 当前操作员编号
- "operatorName": "收费员张三", // 当前操作员姓名
- "businessParams": {} // 空的业务参数对象(必需)
- }
- 🏥 3. 工伤患者读卡
- {
- "action": "transaction",
- "transactionName": "读卡",
- "identifyMode": "1", // 1-实体卡 2-电子凭证
- "operatorId": "001",
- "operatorName": "收费员张三"
- }
- 📝 4. 患者登记
- {
- "action": "transaction",
- "transactionName": "RegisterPatient",
- "businessParams": {
- "psn_no": "32010219800101001X", // 身份证号(必填)
- "visit_type": "1", // 1-门诊 2-住院
- "dept_code": "001", // 科室编码
- "dept_name": "骨科", // 科室名称
- "doctor_code": "DOC001", // 医生编码
- "doctor_name": "张主任", // 医生姓名
- "diag_code": "M79.900", // 诊断代码
- "diag_name": "骨折" // 诊断名称
- },
- "identifyMode": "1"
- }
- 💰 5. 费用预结算
- {
- "action": "transaction",
- "transactionName": "PreSettle",
- "businessParams": {
- "visit_no": "V20241201001", // 就诊号(来自登记结果)
- "fee_details": [ // 费用明细数组
- {
- "fee_ocur_time": "2024-12-01 10:30:00",
- "med_list_codg": "001", // 项目编码
- "med_list_name": "X光检查", // 项目名称
- "med_chrgitm_type": "4", // 1-药品 2-诊疗 4-检查
- "fee_amt": 120.00, // 总金额
- "cnt": 1, // 数量
- "pric": 120.00, // 单价
- "spec": "胸部X光", // 规格
- "dept_code": "001", // 科室编码
- "dept_name": "骨科" // 科室名称
- }
- ]
- }
- }
- 💳 6. 正式结算
- {
- "action": "transaction",
- "transactionName": "Settle",
- "businessParams": {
- "visit_no": "V20241201001", // 就诊号
- "pre_settle_id": "PS20241201001" // 预结算ID(来自预结算结果)
- }
- }
- 📊 7. 健康检查
- {
- "action": "health"
- }
- 📈 8. 统计信息
- {
- "action": "stats"
- }
- ⚠️ 重要提示:
- • 患者身份证号、就诊号、预结算ID等关键参数必须使用真实有效的值
- • 医院编号和名称必须与江苏人社备案信息一致
- • 操作员信息建议使用当前登录用户的真实信息
- • 费用明细中的医疗目录编码需要符合当地医保目录规范
- `;
-
- alert(examples);
- }
-
- // 页面加载时显示欢迎信息
- window.onload = function() {
- updateStatus('工伤联网接口测试工具已就绪');
- // 默认加载初始化参数
- setTimeout(() => {
- loadInitParams();
- }, 1000);
- };
- </script>
- </body>
- </html>
-
|