# HIS-GUI 支付系统 - 快速开始 ## 💡 5分钟快速上手 ### 编译支付系统 ```bash cd /home/e2hang/code/HIS-GUI mkdir -p build && cd build cmake .. make -j4 ``` ### 运行系统 ```bash ./his_gui ``` ## 🚀 基本使用 ### 1. 创建支付记录 **场景**:患者挂号需要支付50元 ```cpp #include "core/his_core.h" #include "models/payment.h" // 假设已有HisCore实例 core::HisCore core; // 创建支付 std::string paymentID; core.paymentService.createPayment( "P001", // 患者ID 50.0, // 金额 PaymentMethod::Cash, // 支付方式 "挂号", // 支付类型 "REG_001", // 操作ID "挂号费用", // 描述 paymentID // 输出: 支付ID ); // 完成支付 core.paymentService.completePayment(paymentID); ``` ### 2. 生成结算单 **场景**:患者出院,需要结算 ```cpp std::string settlementID; // 生成结算单 core.settlementService.generateSettlement( "P001", "张三", "2025-04-06", settlementID ); // 添加费用项 SettlementItem items[] = { {"挂号费", "Registration", "REG_001", 1, 50.0}, {"检查费", "Check", "CHECK_001", 1, 200.0}, {"药品费", "Medicine", "MED_001", 5, 20.0} }; for (const auto& item : items) { core.settlementService.addItemToSettlement(settlementID, item); } // 计算总金额 core.settlementService.calculateSettlement(settlementID); // 完成结算 core.settlementService.completeSettlement(settlementID); ``` ### 3. 查看报表 ```cpp // 获取今日统计 auto stats = core.paymentManagementService.getTodayPaymentStatistics(); printf("今日收入: ¥%.2f\n", stats.TotalRevenue); printf("已完成支付: %d笔\n", stats.CompletedPayments); // 生成日报表 auto report = core.paymentManagementService.generateDailyReport("2025-04-06"); cout << report << endl; ``` ## 📊 数据库操作示例 ### 查询患者的所有支付记录 ```cpp double totalPaid = 0; core.paymentService.findByPatientId("P001", [&totalPaid](const std::string& key, const Payment& p) { if (p.Status == "Completed") { totalPaid += p.Amount; printf("%s: ¥%.2f (%s)\n", p.PaymentType.c_str(), p.Amount, p.getMethodString().c_str()); } } ); printf("总支付: ¥%.2f\n", totalPaid); ``` ### 查询特定类型的支付 ```cpp // 查询所有"检查"类型的支付 core.paymentService.findByPaymentType("检查", [](const std::string& key, const Payment& p) { printf("%s - ID: %s, 金额: ¥%.2f\n", p.PatientID.c_str(), key.c_str(), p.Amount); } ); ``` ### 查询结算单 ```cpp // 查询患者的所有结算单 core.settlementService.findByPatientId("P001", [](const std::string& key, const Settlement& s) { printf("结算单: %s, 总额: ¥%.2f\n", key.c_str(), s.TotalAmount); } ); ``` ## 🎯 GUI使用指南 ### 支付对话框 ```cpp #include "gui/payment_dialog.h" PaymentDialog dlg(core_); dlg.setPaymentInfo("P001", "患者名字", "检查", 200.0); if (dlg.exec() == QDialog::Accepted && dlg.isPaymentSuccessful()) { QString paymentID = dlg.getPaymentID(); QMessageBox::information(nullptr, "成功", "支付ID: " + paymentID); } ``` ### 支付管理界面 ```cpp #include "gui/payment_management_dialog.h" PaymentManagementDialog dlg(core_); dlg.exec(); // 打开支付管理界面 ``` ### 结算单管理 ```cpp #include "gui/settlement_dialog.h" SettlementDialog dlg(core_); dlg.createNewSettlement("P001", "张三", "2025-04-06"); dlg.exec(); ``` ## 📁 文件位置 - **支付记录**: `data/payments.txt` - **结算单**: `data/settlements.txt` - **日志**: `logs/his.log` ## 🔑 关键类和方法 ### PaymentService | 方法 | 说明 | |-----|------| | `createPayment()` | 创建支付记录 | | `completePayment()` | 完成支付 | | `refundPayment()` | 退款 | | `getTotalPaymentAmount()` | 获取总支付金额 | | `findByPatientId()` | 按患者查询 | ### SettlementService | 方法 | 说明 | |-----|------| | `generateSettlement()` | 生成结算单 | | `addItemToSettlement()` | 添加费用项 | | `calculateSettlement()` | 计算费用 | | `completeSettlement()` | 完成结算 | | `generateSettlementReport()` | 生成报告 | ### PaymentManagementService | 方法 | 说明 | |-----|------| | `getPaymentStatistics()` | 获取统计信息 | | `generateDailyReport()` | 日报表 | | `generateMonthlyReport()` | 月报表 | | `processRefund()` | 处理退款 | ## 💻 代码示例 ### 完整的支付流程示例 ```cpp #include "core/his_core.h" #include "models/payment.h" #include "models/settlement.h" int main() { // 1. 初始化系统 core::HisCore core; std::string error; if (!core.loadDataFromFolder("./data", error)) { std::cerr << "Failed to load data: " << error << std::endl; return 1; } // 2. 创建支付(挂号) std::string paymentID; core.paymentService.createPayment( "P001", 50.0, PaymentMethod::Cash, "挂号", "REG_001", "挂号费用", paymentID ); core.paymentService.completePayment(paymentID); std::cout << "支付成功: " << paymentID << std::endl; // 3. 创建支付(检查) std::string checkPaymentID; core.paymentService.createPayment( "P001", 200.0, PaymentMethod::CreditCard, "检查", "CHECK_001", "CT扫描", checkPaymentID ); core.paymentService.completePayment(checkPaymentID); // 4. 生成结算单 std::string settlementID; core.settlementService.generateSettlement("P001", "张三", "2025-04-06", settlementID); // 5. 添加费用项 SettlementItem item1("挂号费", "Registration", "REG_001", 1, 50.0); core.settlementService.addItemToSettlement(settlementID, item1); SettlementItem item2("检查费", "Check", "CHECK_001", 1, 200.0); core.settlementService.addItemToSettlement(settlementID, item2); // 6. 计算费用 core.settlementService.calculateSettlement(settlementID); // 7. 显示结算单 auto report = core.settlementService.generateSettlementReport(settlementID); std::cout << report << std::endl; // 8. 完成结算 core.settlementService.completeSettlement(settlementID); // 9. 生成报表 auto stats = core.paymentManagementService.getPaymentStatistics(); std::cout << "总收入: ¥" << stats.TotalRevenue << std::endl; return 0; } ``` ### 输出示例 ``` 支付成功: PAY_abc123 ========== 医疗费用结算单 ========== 结算单号: SET_xyz789 患者姓名: 张三 患者ID: P001 出院日期: 2025-04-06 ---------- 费用明细 ---------- 项目: 挂号费 数量: 1, 单价: 50, 金额: 50 支付方式: 项目: 检查费 数量: 1, 单价: 200, 金额: 200 支付方式: ---------- 费用总结 ---------- 医疗总费用: ¥250.00 医保支付: ¥125.00 患者自付: ¥125.00 结算状态: Completed 备注: =================================== 总收入: ¥250.00 ``` ## 🐛 常见问题排查 ### Q: 找不到支付记录? ```cpp // 确保在生成报表前调用了 completePayment() if (core.paymentService.completePayment(paymentID)) { // 现在可以看到已完成的支付 } ``` ### Q: 结算单费用计算错误? ```cpp // 确保调用了 calculateSettlement() core.settlementService.calculateSettlement(settlementID); // 验证费用项是否正确 const Settlement* s = core.settlementService.findSettlement(settlementID); printf("总费用: %.2f\n", s->TotalAmount); ``` ### Q: 数据未保存? ```cpp // 数据自动保存到文件,检查 data/payments.txt 和 data/settlements.txt // 调试时可使用: FILE* f = fopen("data/payments.txt", "r"); // ... 检查文件内容 ... ``` ## 📚 更多文档 - [支付系统集成指南](./支付系统集成指南.md) - 详细集成说明 - [支付系统设计文档](./支付系统设计文档.md) - 系统架构和设计 - [README.md](./README.md) - 项目总体说明 ## 🆘 获取帮助 如遇到问题,请: 1. 查看日志文件:`logs/his.log` 2. 检查数据文件:`data/payments.txt` 和 `data/settlements.txt` 3. 参考集成指南和设计文档 4. 在代码中添加调试信息 --- **祝你使用愉快!** 🎉