#ifndef PAYMENT_MANAGEMENT_SERVICE_H #define PAYMENT_MANAGEMENT_SERVICE_H #include #include #include #include "core/his_context.h" #include "models/payment.h" #include "models/settlement.h" namespace core { // 支付统计信息 struct PaymentStatistics { double TotalRevenue; // 总收入 double CompletedAmount; // 已完成支付金额 double PendingAmount; // 待支付金额 double RefundedAmount; // 已退款金额 int TotalPayments; // 总支付数 int CompletedPayments; // 已完成支付数 int PendingPayments; // 待支付数 int RefundedPayments; // 已退款数 }; // 支付方式统计 struct PaymentMethodStatistics { std::string Method; // 支付方式 int Count; // 数量 double Amount; // 金额 }; /** * 支付管理服务 * 供管理员查看和管理所有的支付记录及结算信息 */ class PaymentManagementService { public: explicit PaymentManagementService(HisContext& ctx); // ========== 支付管理 ========== // 获取所有支付记录 void getAllPayments( const std::function& visitor) const; // 按状态过滤支付记录 void getPaymentsByStatus( const std::string& status, const std::function& visitor) const; // 获取日期范围内的支付记录 void getPaymentsByDateRange( time_t startTime, time_t endTime, const std::function& visitor) const; // 按支付方式统计 std::vector getPaymentMethodStatistics() const; // ========== 支付统计 ========== // 获取支付统计信息 PaymentStatistics getPaymentStatistics() const; // 获取今日支付统计 PaymentStatistics getTodayPaymentStatistics() const; // 获取本月支付统计 PaymentStatistics getMonthlyPaymentStatistics() const; // ========== 结算管理 ========== // 获取所有结算单 void getAllSettlements( const std::function& visitor) const; // 按状态过滤结算单 void getSettlementsByStatus( const std::string& status, const std::function& visitor) const; // 获取某个病人的所有已支付结算记录 void getSettlementsByPatientId( const std::string& patientId, const std::function& visitor) const; // 获取所有已支付的结算记录(按病人分类) void getSettlementsByPatients( const std::function& visitor) const; // 搜索病人的结算记录(支持ID、姓名、手机号模糊匹配) void searchSettlementsByPatientInfo( const std::string& keyword, const std::function& visitor) const; // ========== 报表生成 ========== // 生成日报表 std::string generateDailyReport(const std::string& date); // 生成月报表 std::string generateMonthlyReport(const std::string& month); // 生成收入报表 std::string generateRevenueReport(); // 获取最近N天的每日收入数据 std::vector> getDailyRevenueData(int days = 7) const; // 获取最近N个月的每月收入数据 std::vector> getMonthlyRevenueData(int months = 6) const; // 获取收入分类数据(按支付类型) std::vector> getRevenueByType() const; // 生成患者账单 std::string generatePatientBill(const std::string& patientId); // ========== 异常处理 ========== // 获取异常支付记录 void getAnomalousPayments( const std::function& visitor) const; // 处理退款申请 bool processRefund(const std::string& paymentId, const std::string& reason); private: HisContext& ctx_; // 检查时间是否在同一天 bool isSameDay(time_t t1, time_t t2) const; // 检查时间是否在同一月 bool isSameMonth(time_t t1, time_t t2) const; }; } // namespace core #endif