LIJU 2 weken geleden
bovenliggende
commit
e0a3dcefe2

+ 46 - 1
src/main/java/thyyxxk/sizyfeeoprnsystm/service/SiZyFeeService.java

@@ -918,7 +918,52 @@ public class SiZyFeeService {
         
         // 工伤接口返回结果处理(支持模拟接口和真实接口切换)
         Integer infcode = extractWorkInjuryResultCode(result);
-        logDao.insert(new SiLog(input, result, p.getInpatientNo(), p.getAdmissTimes(), p.getLedgerSn(), infcode, zyPreSetlmt.getPsnNo()));
+        
+        // 工伤接口日志记录(支持模拟接口和真实接口切换)
+        JSONObject logInput = new JSONObject();
+        
+        // 模拟接口处理(当前使用)
+        if (result != null && result.containsKey("data") && result.getJSONObject("data").containsKey("data")) {
+            JSONObject innerData = result.getJSONObject("data").getJSONObject("data");
+            if (innerData.containsKey("transformed_parameters")) {
+                JSONObject transformedParams = innerData.getJSONObject("transformed_parameters");
+                logInput.put("infno", transformedParams.getString("infno"));
+                logInput.put("insuplc_admdvs", "");
+                logInput.put("msgid", transformedParams.getString("msgid"));
+                logInput.put("opter", transformedParams.getString("opter"));
+            } else {
+                // 如果没有transformed_parameters,使用默认值
+                logInput.put("infno", "2206");
+                logInput.put("insuplc_admdvs", "");
+                logInput.put("msgid", "WORK_INJURY_" + System.currentTimeMillis());
+                logInput.put("opter", p.getStaffId());
+            }
+        }
+        // 真实接口处理(注释掉,需要时手动切换)
+        // else if (result != null && result.containsKey("data")) {
+        //     JSONObject data = result.getJSONObject("data");
+        //     if (data.containsKey("transformed_parameters")) {
+        //         JSONObject transformedParams = data.getJSONObject("transformed_parameters");
+        //         logInput.put("infno", transformedParams.getString("infno"));
+        //         logInput.put("insuplc_admdvs", "");
+        //         logInput.put("msgid", transformedParams.getString("msgid"));
+        //         logInput.put("opter", transformedParams.getString("opter"));
+        //     } else {
+        //         // 如果没有transformed_parameters,使用默认值
+        //         logInput.put("infno", "2206");
+        //         logInput.put("insuplc_admdvs", "");
+        //         logInput.put("msgid", "WORK_INJURY_" + System.currentTimeMillis());
+        //         logInput.put("opter", p.getStaffId());
+        //     }
+        // }
+        else {
+            // 如果result为空,使用默认值
+            logInput.put("infno", "2206");
+            logInput.put("insuplc_admdvs", "");
+            logInput.put("msgid", "WORK_INJURY_" + System.currentTimeMillis());
+            logInput.put("opter", p.getStaffId());
+        }
+        logDao.insert(new SiLog(logInput, result, p.getInpatientNo(), p.getAdmissTimes(), p.getLedgerSn(), infcode, zyPreSetlmt.getPsnNo()));
         
         if (null == infcode) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "工伤中心报错:" + 

+ 28 - 1
工伤接口切换说明.md

@@ -132,4 +132,31 @@ else if (result.containsKey("data")) {
 1. **同步切换**: URL和返回处理逻辑必须同时切换,保持一致性
 2. **重启应用**: 修改配置后需要重启应用才能生效
 3. **测试验证**: 切换后建议进行接口测试,确保功能正常
-4. **日志监控**: 切换后注意观察日志,确保接口调用正常 
+4. **日志监控**: 切换后注意观察日志,确保接口调用正常
+5. **日志记录**: 工伤接口使用 `transformed_parameters` 中的信息进行日志记录
+
+## 日志记录说明
+
+### 工伤接口日志记录
+工伤接口调用成功后,会在 `t_si_log` 表中记录详细的调用日志,包括:
+
+- **请求参数**: 从 `transformed_parameters` 中获取 `infno`、`msgid`、`opter` 等信息
+- **响应结果**: 完整的接口返回结果
+- **处理状态**: 接口调用的成功/失败状态
+- **患者信息**: 住院号、住院次数、账页号等
+
+### 日志记录位置
+- **2204 工伤费用上传**: `executeWorkInjuryUploadFees()` 方法中
+- **2205 工伤费用撤销**: `revokeWorkInjuryUploadFees()` 方法中  
+- **2206 工伤预结算**: `workInjuryPreSettlement()` 方法中
+
+### 日志字段说明
+| 字段 | 来源 | 说明 |
+|------|------|------|
+| `infno` | `transformed_parameters.infno` | 接口功能号 |
+| `msgid` | `transformed_parameters.msgid` | 消息ID |
+| `opter` | `transformed_parameters.opter` | 操作员ID |
+| `insuplc_admdvs` | 固定值 `""` | 工伤接口不需要医保区划 |
+| `body` | `logInput.toJSONString()` | 请求体 |
+| `result` | `result.toJSONString()` | 响应体 |
+| `infcode` | `extractWorkInjuryResultCode(result)` | 返回代码 |

+ 90 - 0
数据库日志字段分析.md

@@ -0,0 +1,90 @@
+# 数据库日志字段分析
+
+## 📋 SiLog表的所有字段
+
+| 序号 | 字段名 | 字段类型 | 字段说明 | 医保接口 | 工伤接口 |
+|------|--------|----------|----------|----------|----------|
+| 1 | `msgid` | String | 报文ID | ✅ 使用 | ✅ 使用 |
+| 2 | `infno` | String | 功能号 | ✅ 使用 | ✅ 使用 |
+| 3 | `insuplcAdmdvs` | String | 参保地医保区划 | ✅ 使用 | ✅ 使用 |
+| 4 | `opter` | String | 经办人 | ✅ 使用 | ✅ 使用 |
+| 5 | `body` | String | 交易输入 | ✅ 使用 | ✅ 使用 |
+| 6 | `result` | String | 交易输出 | ✅ 使用 | ✅ 使用 |
+| 7 | `patNo` | String | 住院号/门诊号 | ✅ 使用 | ✅ 使用 |
+| 8 | `times` | Integer | 住院/门诊次数 | ✅ 使用 | ✅ 使用 |
+| 9 | `ledgerSn` | Integer | 账页号 | ✅ 使用 | ✅ 使用 |
+| 10 | `logType` | Integer | 日志类别(1-住院,2-门诊) | ✅ 使用 | ✅ 使用 |
+| 11 | `infcode` | Integer | 返回代码 | ✅ 使用 | ✅ 使用 |
+| 12 | `psnNo` | String | 人员编号 | ✅ 使用 | ✅ 使用 |
+
+## 🏥 医保接口字段使用详情
+
+### 医保预结算接口 (hospitalizationPreSettlement)
+
+```java
+logDao.insert(new SiLog(input, result, p.getInpatientNo(), p.getAdmissTimes(), p.getLedgerSn(), infcode, zyPreSetlmt.getPsnNo()));
+```
+
+**字段来源**:
+- `msgid`: 从 `input.getString("msgid")` 获取
+- `infno`: 从 `input.getString("infno")` 获取
+- `insuplcAdmdvs`: 从 `input.getString("insuplc_admdvs")` 获取
+- `opter`: 从 `input.getString("opter")` 获取
+- `body`: 从 `input.toJSONString()` 获取
+- `result`: 从 `result.toJSONString()` 获取
+- `patNo`: 从 `p.getInpatientNo()` 获取
+- `times`: 从 `p.getAdmissTimes()` 获取
+- `ledgerSn`: 从 `p.getLedgerSn()` 获取
+- `logType`: 固定值 `1` (住院)
+- `infcode`: 从 `result.getInteger(RESULT_CODE)` 获取
+- `psnNo`: 从 `zyPreSetlmt.getPsnNo()` 获取
+
+## 🏭 工伤接口字段使用详情
+
+### 工伤预结算接口 (workInjuryPreSettlement)
+
+```java
+logDao.insert(new SiLog(logInput, result, p.getInpatientNo(), p.getAdmissTimes(), p.getLedgerSn(), infcode, zyPreSetlmt.getPsnNo()));
+```
+
+**字段来源**:
+- `msgid`: 从 `logInput.getString("msgid")` 获取 (手动构建)
+- `infno`: 从 `logInput.getString("infno")` 获取 (手动构建)
+- `insuplcAdmdvs`: 从 `logInput.getString("insuplc_admdvs")` 获取 (固定值 `""`)
+- `opter`: 从 `logInput.getString("opter")` 获取 (手动构建)
+- `body`: 从 `logInput.toJSONString()` 获取 (手动构建的JSON)
+- `result`: 从 `result.toJSONString()` 获取
+- `patNo`: 从 `p.getInpatientNo()` 获取
+- `times`: 从 `p.getAdmissTimes()` 获取
+- `ledgerSn`: 从 `p.getLedgerSn()` 获取
+- `logType`: 固定值 `1` (住院)
+- `infcode`: 从 `extractWorkInjuryResultCode(result)` 获取
+- `psnNo`: 从 `zyPreSetlmt.getPsnNo()` 获取
+
+## 📊 字段使用对比总结
+
+| 字段 | 医保接口来源 | 工伤接口来源 | 差异说明 |
+|------|-------------|-------------|----------|
+| `msgid` | `input.getString("msgid")` | `logInput.getString("msgid")` | 医保从标准请求头获取,工伤手动构建 |
+| `infno` | `input.getString("infno")` | `logInput.getString("infno")` | 医保从标准请求头获取,工伤手动构建 |
+| `insuplcAdmdvs` | `input.getString("insuplc_admdvs")` | 固定值 `""` | 医保有区划,工伤不需要 |
+| `opter` | `input.getString("opter")` | `logInput.getString("opter")` | 医保从标准请求头获取,工伤手动构建 |
+| `body` | `input.toJSONString()` | `logInput.toJSONString()` | 医保是完整请求,工伤是构建的日志请求 |
+| `result` | `result.toJSONString()` | `result.toJSONString()` | 相同 |
+| `patNo` | `p.getInpatientNo()` | `p.getInpatientNo()` | 相同 |
+| `times` | `p.getAdmissTimes()` | `p.getAdmissTimes()` | 相同 |
+| `ledgerSn` | `p.getLedgerSn()` | `p.getLedgerSn()` | 相同 |
+| `logType` | 固定值 `1` | 固定值 `1` | 相同 |
+| `infcode` | `result.getInteger(RESULT_CODE)` | `extractWorkInjuryResultCode(result)` | 医保直接获取,工伤需要提取 |
+| `psnNo` | `zyPreSetlmt.getPsnNo()` | `zyPreSetlmt.getPsnNo()` | 相同 |
+
+## 🔍 关键差异
+
+1. **请求头字段**: 医保接口使用标准的医保请求头格式,工伤接口需要手动构建
+2. **医保区划**: 医保接口有区划信息,工伤接口不需要
+3. **返回代码提取**: 医保接口直接获取,工伤接口需要特殊提取方法
+4. **日志记录策略**: 两者都只对预结算接口进行数据库日志记录
+
+## 📝 结论
+
+所有12个字段都被医保和工伤接口使用,但数据来源和构建方式有所不同。医保接口使用标准的医保请求格式,而工伤接口需要手动构建日志请求对象来适配数据库表结构。