# 江苏工伤联网结算接口使用示例 ## 基础调用示例 ### 1. 初始化系统 ```csharp // 基础初始化(使用默认配置) var initResult = JiangSuWorkInjuryBusiness.Initialize(); // 或者使用自定义配置 var config = new JiangSuWorkInjuryBusiness.WorkInjuryConfig { FixmedinsCode = "SQ201348", FixmedinsName = "沭阳铭和医院", DefaultOperator = "001", DefaultOperatorName = "系统管理员" }; var initResult = JiangSuWorkInjuryBusiness.Initialize(config); Console.WriteLine($"初始化结果: {initResult["success"]}, 消息: {initResult["message"]}"); ``` ### 2. 基础交易调用 ```csharp // 方式1:使用交易名称(支持中文) var result1 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("签到"); var result2 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("读卡"); // 方式2:使用交易编号 var result3 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("9001"); // 签到 var result4 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("1101"); // 读卡 // 方式3:使用英文名称 var result5 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("SignIn"); var result6 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard"); ``` ## 完整业务流程示例 ### 1. 工伤患者就医完整流程 ```csharp // 患者信息 var patientInfo = new { visit_type = "1", // 门诊 dept_code = "001", dept_name = "骨科", doctor_code = "DOC001", doctor_name = "张主任" }; // 费用明细 var feeDetails = new object[] { new { fee_ocur_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), med_list_codg = "001", med_list_name = "拍片费", fee_amt = 120.00, cnt = 1 }, new { fee_ocur_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), med_list_codg = "002", med_list_name = "诊疗费", fee_amt = 15.00, cnt = 1 } }; // 执行完整流程(自动完成读卡->登记->预结算->结算) var processResult = JiangSuWorkInjuryBusiness.CompleteWorkInjuryProcess(patientInfo, feeDetails); Console.WriteLine($"完整流程结果: {processResult["success"]}"); foreach (var step in processResult["processSteps"]) { Console.WriteLine($"步骤{step["step"]}: {step["name"]} - {step["success"]}"); } ``` ### 2. 分步业务调用 ```csharp // 第1步:读卡 var readCardResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard"); if (!(bool)readCardResult["success"]) { Console.WriteLine($"读卡失败: {readCardResult["message"]}"); return; } // 第2步:患者登记 var registerParams = new { psn_no = readCardResult["data"]["psn_no"], // 从读卡结果获取人员编号 visit_type = "1", dept_code = "001", dept_name = "骨科" }; var registerResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("RegisterPatient", registerParams); // 第3步:费用预结算 var preSettleParams = new { visit_no = registerResult["data"]["visit_no"], // 从登记结果获取就诊号 fee_details = feeDetails }; var preSettleResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("PreSettle", preSettleParams); // 第4步:正式结算 var settleParams = new { visit_no = registerResult["data"]["visit_no"], pre_settle_id = preSettleResult["data"]["pre_settle_id"] }; var settleResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("Settle", settleParams); ``` ## 特殊业务示例 ### 1. 处方明细上传 ```csharp // 大批量处方明细 var prescriptions = new object[120]; // 假设有120条处方 for (int i = 0; i < 120; i++) { prescriptions[i] = new { med_list_codg = $"MED{i:D3}", med_list_name = $"药品{i}", cnt = 1, pric = 25.50 }; } // 自动分批上传(每批50条) var batchResult = JiangSuWorkInjuryBusiness.BatchUploadPrescriptions(prescriptions, "P123456", "V20241201001"); Console.WriteLine($"批量上传结果: 成功{batchResult["data"]["successCount"]}批,失败{batchResult["data"]["failureCount"]}批"); ``` ### 2. 智能重试机制 ```csharp // 对于可能因网络等原因失败的交易,使用智能重试 var retryResult = JiangSuWorkInjuryBusiness.SmartRetryTransaction( "PreSettle", preSettleParams, maxRetries: 3, baseDelayMs: 1000 ); if ((bool)retryResult["success"]) { Console.WriteLine($"重试成功,共尝试{retryResult["retryInfo"]["totalAttempts"]}次"); } else { Console.WriteLine($"重试{retryResult["retryInfo"]["totalAttempts"]}次后仍然失败"); } ``` ### 3. 交易冲正 ```csharp // 获取需要冲正的交易记录ID(从之前的交易结果中获取) string originalMessageId = settleResult["infRefMsgId"]?.ToString(); // 执行冲正操作 var reverseResult = JiangSuWorkInjuryBusiness.ReverseTransactionByRecord(originalMessageId); Console.WriteLine($"冲正结果: {reverseResult["success"]}, 消息: {reverseResult["message"]}"); ``` ## 系统监控和管理 ### 1. 健康检查 ```csharp // 系统健康检查 var healthResult = JiangSuWorkInjuryBusiness.HealthCheck(); var healthData = healthResult["data"]; Console.WriteLine($"系统健康状态: {healthData["overallHealth"]}"); Console.WriteLine($"DLL状态: {healthData["checks"]["dllStatus"]["success"]}"); Console.WriteLine($"初始化状态: {healthData["checks"]["initStatus"]["initialized"]}"); Console.WriteLine($"签到状态: {healthData["checks"]["signInStatus"]["signedIn"]}"); ``` ### 2. 获取系统统计 ```csharp // 获取系统运行统计 var statsResult = JiangSuWorkInjuryBusiness.GetTransactionStatistics(); var stats = statsResult["data"]; Console.WriteLine($"系统初始化: {stats["systemStatus"]["initialized"]}"); Console.WriteLine($"当前签到状态: {stats["systemStatus"]["signedIn"]}"); Console.WriteLine($"交易记录总数: {stats["transactionRecords"]["totalCount"]}"); ``` ### 3. 签到状态管理 ```csharp // 检查当前签到状态 var signInStatus = JiangSuWorkInjuryBusiness.GetSignInStatus(); var statusData = signInStatus["data"]; if ((bool)statusData["signedIn"]) { Console.WriteLine($"已签到,流水号: {statusData["signNo"]}"); Console.WriteLine($"签到时间: {statusData["signInTime"]}"); Console.WriteLine($"会话时长: {statusData["sessionDuration"]}"); } else { Console.WriteLine("未签到,需要先执行签到操作"); var signInResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("SignIn"); } // 手动签退 var signOutResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("SignOut"); ``` ## 错误处理示例 ```csharp try { var result = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard"); if ((bool)result["success"]) { // 成功处理 var cardData = result["data"]; Console.WriteLine($"读卡成功,患者: {cardData["psn_name"]}"); } else { // 错误处理 int errorCode = (int)result["code"]; string errorMessage = result["message"]?.ToString(); if (errorCode >= 2000 && errorCode < 3000) { // DLL层面错误 Console.WriteLine($"DLL调用失败: {errorMessage}"); } else if (errorCode >= 3000) { // 业务层面错误 Console.WriteLine($"业务处理失败: {errorMessage}"); Console.WriteLine($"业务错误码: {result["businessErrorCode"]}"); } else { // 系统层面错误 Console.WriteLine($"系统错误: {errorMessage}"); } } } catch (Exception ex) { Console.WriteLine($"系统异常: {ex.Message}"); } ``` ## 在HIS系统中的集成示例 ```csharp public class WorkInjuryService { // 初始化工伤联网接口 public bool InitializeWorkInjury() { var config = new JiangSuWorkInjuryBusiness.WorkInjuryConfig { FixmedinsCode = ConfigurationManager.AppSettings["WorkInjury.FixmedinsCode"], FixmedinsName = ConfigurationManager.AppSettings["WorkInjury.FixmedinsName"], DefaultOperator = GetCurrentOperatorId(), DefaultOperatorName = GetCurrentOperatorName() }; var result = JiangSuWorkInjuryBusiness.Initialize(config); return (bool)result["success"]; } // 工伤患者读卡 public WorkInjuryPatient ReadWorkInjuryCard() { var result = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard"); if (!(bool)result["success"]) { throw new BusinessException($"工伤读卡失败: {result["message"]}"); } var cardData = result["data"]; return new WorkInjuryPatient { PersonNo = cardData["psn_no"]?.ToString(), PersonName = cardData["psn_name"]?.ToString(), IdCard = cardData["psn_cert_no"]?.ToString(), // ... 其他字段映射 }; } // 工伤结算 public WorkInjurySettleResult ProcessWorkInjurySettle(string visitNo, List feeDetails) { // 转换费用明细格式 var fees = feeDetails.Select(f => new { fee_ocur_time = f.FeeTime.ToString("yyyy-MM-dd HH:mm:ss"), med_list_codg = f.MedCode, med_list_name = f.MedName, fee_amt = f.Amount, cnt = f.Count }).ToArray(); // 预结算 var preSettleParams = new { visit_no = visitNo, fee_details = fees }; var preResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("PreSettle", preSettleParams); if (!(bool)preResult["success"]) { throw new BusinessException($"工伤预结算失败: {preResult["message"]}"); } // 正式结算 var settleParams = new { visit_no = visitNo, pre_settle_id = preResult["data"]["pre_settle_id"] }; var settleResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("Settle", settleParams); if (!(bool)settleResult["success"]) { throw new BusinessException($"工伤结算失败: {settleResult["message"]}"); } // 返回结算结果 var settleData = settleResult["data"]; return new WorkInjurySettleResult { SettleId = settleData["settle_id"]?.ToString(), TotalAmount = decimal.Parse(settleData["total_amt"]?.ToString() ?? "0"), FundAmount = decimal.Parse(settleData["fund_amt"]?.ToString() ?? "0"), SelfAmount = decimal.Parse(settleData["self_amt"]?.ToString() ?? "0") }; } } ``` ## 总结 江苏工伤联网结算接口提供了: 1. **极简调用**:只需两个核心函数 `Initialize()` 和 `ProcessWorkInjuryTransaction()` 2. **全面覆盖**:支持所有工伤文档定义的17种交易类型 3. **智能化**:自动签到、自动重试、自动分批处理 4. **生产就绪**:完整的日志、监控、错误处理机制 5. **灵活集成**:可直接嵌入任何HIS系统 所有交易都通过统一的 `ProcessWorkInjuryTransaction()` 函数处理,大大简化了集成复杂度。