# 长沙医保 vs 江苏医保系统对比分析 ## 概述 本文档详细对比分析项目中现有的长沙医保系统(SSCard.dll)与即将集成的江苏医保系统的差异,为系统集成提供技术参考。 ## 1. 动态库对比 ### 1.1 文件结构 | 对比项 | 长沙医保 | 江苏医保 | |--------|----------|----------| | 主要DLL | SSCard.dll | 预计:JSMedInsurance.dll 或 NationECCode_JS.dll | | 辅助DLL | 可能有读卡器驱动 | 预计:多个DLL(加密、网络、读卡器等) | | 部署复杂度 | 简单 | 复杂,需要多个文件 | | 依赖关系 | 较少 | 复杂的依赖链 | ### 1.2 P/Invoke声明对比 **长沙医保:** ```csharp [DllImport("SSCard.dll", EntryPoint = "Init", CharSet = CharSet.Ansi)] private extern static Int32 Init(string pUrl, string pUser); [DllImport("SSCard.dll", EntryPoint = "ReadCardBas", CharSet = CharSet.Ansi)] private extern static Int32 ReadCardBas(StringBuilder pOutBuff, int nOutBuffLen, StringBuilder pSignBuff, int nSignBuffLen); ``` **江苏医保(预期):** ```csharp [DllImport("JSMedInsurance.dll", EntryPoint = "Init", CharSet = CharSet.Ansi)] private extern static Int32 Init(string pInitInfo, StringBuilder pErrMsg); [DllImport("JSMedInsurance.dll", EntryPoint = "ReadCardBas", CharSet = CharSet.Ansi)] private extern static Int32 ReadCardBas(StringBuilder pCardInfo, StringBuilder pBusiCardInfo); [DllImport("JSMedInsurance.dll", EntryPoint = "VerifyPIN", CharSet = CharSet.Ansi)] private extern static Int32 VerifyPIN(StringBuilder pOutBuff); [DllImport("JSMedInsurance.dll", EntryPoint = "ChangePIN", CharSet = CharSet.Ansi)] private extern static Int32 ChangePIN(StringBuilder pOutBuff); [DllImport("JSMedInsurance.dll", EntryPoint = "GetPersonInfo", CharSet = CharSet.Ansi)] private extern static Int32 GetPersonInfo(string pInData, StringBuilder pOutData); ``` ## 2. 初始化对比 ### 2.1 参数复杂度 | 对比项 | 长沙医保 | 江苏医保 | |--------|----------|----------| | 参数数量 | 2个 | 13个 | | 参数格式 | 简单字符串 | JSON格式 | | 配置复杂度 | 低 | 高 | | 网络依赖 | 无 | 需要医保平台连接 | ### 2.2 初始化代码对比 **长沙医保:** ```csharp public string InitSSCard(string url, string user) { int result = Init(url, user); return result == 0 ? "初始化成功" : "初始化失败"; } ``` **江苏医保(预期):** ```csharp public string InitJiangSuMedInsurance(JiangSuConfig config) { StringBuilder errMsg = new StringBuilder(2048); string jsonConfig = config.ToJson(); int result = Init(jsonConfig, errMsg); if (result == 0) return "初始化成功"; else return $"初始化失败: {errMsg.ToString()}"; } ``` ## 3. 读卡功能对比 ### 3.1 函数签名差异 | 对比项 | 长沙医保 | 江苏医保 | |--------|----------|----------| | 参数数量 | 4个 | 2个 | | 缓冲区管理 | 手动指定长度 | 自动分配 | | 输出格式 | 自定义格式 | 标准38号文格式 | | 业务卡串 | 简单格式 | Base64加密格式 | ### 3.2 数据格式对比 **长沙医保数据格式(推测):** ``` 自定义格式,具体结构需要查看实际输出 ``` **江苏医保数据格式:** ``` 标准38号文格式: 639900|111111198101011110|X00000019|639900D15600000500BF7C7A48FB4966|张三|00814E43238697159900BF7C7A|1.00|20101001|20201001|410100813475|终端设备号| 字段说明: 1. 发卡地区行政区划代码(卡识别码前6位) 2. 社会保障号码 3. 卡号 4. 卡识别码 5. 姓名 6. 卡复位信息(仅取历史字节) 7. 规范版本 8. 发卡日期 9. 卡有效期 10. 终端机编号 11. 终端设备号 ``` ## 4. 功能特性对比 ### 4.1 基础功能 | 功能 | 长沙医保 | 江苏医保 | 备注 | |------|----------|----------|------| | 初始化 | ✅ | ✅ | 江苏医保更复杂 | | 读社保卡 | ✅ | ✅ | 数据格式不同 | | 错误处理 | 基础 | 详细 | 江苏医保提供详细错误信息 | | 日志记录 | 不确定 | ✅ | 江苏医保强制要求日志 | ### 4.2 扩展功能 | 功能 | 长沙医保 | 江苏医保 | 备注 | |------|----------|----------|------| | PIN码验证 | ❌ | ✅ | 江苏医保支持密码管理 | | PIN码修改 | ❌ | ✅ | 江苏医保支持密码修改 | | 读身份证 | ❌ | ✅ | 江苏医保支持身份证读取 | | 电子凭证 | ❌ | ✅ | 江苏医保支持电子凭证解码 | | 电子社保卡 | ❌ | ✅ | 江苏医保支持电子社保卡 | | 四合一介质 | ❌ | ✅ | 江苏医保支持多种介质 | | 处方信息 | ❌ | ✅ | 江苏医保支持处方读取 | | 日签到 | ❌ | ✅ | 江苏医保需要每日签到 | ## 5. 技术架构对比 ### 5.1 系统架构 **长沙医保架构:** ``` 前端请求 → EntryController → SsCardBusiness → SSCard.dll → 读卡器硬件 ``` **江苏医保架构(预期):** ``` 前端请求 → EntryController → JiangSuMedInsuranceBusiness → 主DLL + 辅助DLLs → 读卡器硬件 + 网络服务 ``` ### 5.2 数据流对比 **长沙医保数据流:** ```mermaid graph LR A[前端] --> B[EntryController] B --> C[SsCardBusiness] C --> D[SSCard.dll] D --> E[读卡器] E --> D D --> C C --> B B --> A ``` **江苏医保数据流:** ```mermaid graph LR A[前端] --> B[EntryController] B --> C[JiangSuBusiness] C --> D[主DLL] D --> E[辅助DLLs] E --> F[读卡器] E --> G[网络服务] F --> E G --> E E --> D D --> C C --> B B --> A ``` ## 6. 集成实施建议 ### 6.1 并行开发策略 1. **保持长沙医保系统不变** - 现有SSCard.dll功能继续工作 - 不影响现有业务流程 2. **新增江苏医保模块** - 创建独立的JiangSuMedInsuranceBusiness类 - 实现江苏医保专用的读卡逻辑 3. **统一入口管理** - 在EntryController中添加地区识别 - 根据配置路由到不同的医保系统 ### 6.2 配置管理 ```json { "MedInsuranceConfig": { "CurrentRegion": "JiangSu", // 或 "ChangSha" "ChangSha": { "Url": "http://localhost:8080", "User": "admin" }, "JiangSu": { "IP": "192.168.100.100", "PORT": 8080, "TIMEOUT": 120, "LOG_PATH": "C:\\logs\\jiangsu\\", "CARD_PASSTYPE": "1", "EC_URL": "https://fuwu-test.nhsa.gov.cn/localcfc/api/hsecfc/localQrCodeQuery", "API_NAME": "api-powersi-test-pri", "API_VERSION": "1.0.0", "ACCESS_KEY": "your_access_key", "SECRETKEY": "your_secret_key", "ORG_ID": "your_org_id", "AREA_CODE": "320100" } } } ``` ### 6.3 数据格式统一 创建统一的读卡结果类: ```csharp public class UnifiedCardInfo { public string Region { get; set; } // 地区标识 public string Name { get; set; } // 姓名 public string IdNumber { get; set; } // 身份证号 public string SocialSecurityNumber { get; set; } // 社保号 public string CardNumber { get; set; } // 卡号 public string IssueDate { get; set; } // 发卡日期 public string ValidDate { get; set; } // 有效期 public string BusiCardInfo { get; set; } // 业务卡串 public string RawData { get; set; } // 原始数据 // 从长沙医保数据转换 public static UnifiedCardInfo FromChangShaData(string rawData) { } // 从江苏医保数据转换 public static UnifiedCardInfo FromJiangSuData(string cardInfo, string busiInfo) { } } ``` ### 6.4 错误处理统一 ```csharp public class MedInsuranceException : Exception { public string Region { get; set; } public int ErrorCode { get; set; } public string DetailMessage { get; set; } public MedInsuranceException(string region, int errorCode, string message) : base($"[{region}] {message}") { Region = region; ErrorCode = errorCode; DetailMessage = message; } } ``` ## 7. 测试策略 ### 7.1 单元测试 1. **长沙医保测试** - 确保现有功能不受影响 - 验证数据格式转换正确性 2. **江苏医保测试** - 初始化功能测试 - 读卡功能测试 - PIN码管理测试 - 错误处理测试 ### 7.2 集成测试 1. **路由测试** - 验证根据配置正确路由到对应系统 - 测试配置切换功能 2. **数据格式测试** - 验证统一数据格式转换 - 测试前端兼容性 ## 8. 风险评估 ### 8.1 技术风险 | 风险项 | 概率 | 影响 | 缓解措施 | |--------|------|------|----------| | DLL名称未知 | 高 | 中 | 提前确认真实DLL文件名 | | 函数签名差异 | 中 | 高 | 仔细对照文档实现P/Invoke | | 网络连接问题 | 中 | 高 | 实现网络状态检测和重试机制 | | 数据格式解析错误 | 低 | 高 | 充分测试各种数据情况 | ### 8.2 业务风险 | 风险项 | 概率 | 影响 | 缓解措施 | |--------|------|------|----------| | 现有系统受影响 | 低 | 高 | 严格隔离新旧系统 | | 配置错误 | 中 | 中 | 提供配置验证工具 | | 证书过期 | 低 | 中 | 实现证书监控机制 | ## 9. 实施时间线 1. **第一阶段 (1-2周)** - 确认江苏医保DLL文件和接口 - 创建基础的JiangSuMedInsuranceBusiness类 - 实现初始化和基础读卡功能 2. **第二阶段 (2-3周)** - 实现PIN码管理功能 - 实现四合一介质支持 - 创建统一数据格式转换 3. **第三阶段 (1-2周)** - 集成到EntryController - 完善错误处理和日志 - 全面测试和优化 4. **第四阶段 (1周)** - 部署测试 - 文档完善 - 培训和交付