Commit Graph

179 Commits

Author SHA1 Message Date
15a35d8e40 feat(billing): 新增逾期账单自动标记定时任务
1. 新增Hangfire定时任务BillingOverdueProcessJob
2. 修复逾期账单查询条件过宽问题
3. 默认每10分钟执行一次逾期检查
2025-12-18 12:14:01 +08:00
a5abd6ef90 fix(billing): 修复账单详情查询的数据库并发错误
问题:
- Npgsql.NpgsqlOperationInProgressException: A command is already in progress
- 在同一个数据库连接上,billReader 未释放就执行 paymentReader

根因:
- GetBillingDetailQueryHandler 中先查询账单并打开 billReader
- 读取账单数据后未释放 reader
- 直接在同一连接上执行支付记录查询,触发并发异常

解决方案:
- 将账单字段先读取到本地变量
- 主动 DisposeAsync 释放 billReader
- 再执行支付记录查询
- 最后用本地变量组装 BillingDetailDto
2025-12-18 11:45:44 +08:00
4b53862ded feat: 完成账单管理模块后端功能开发及API优化
核心功能:
- 账单CRUD操作(创建、查询、详情、更新状态、删除)
- 支付记录管理(创建支付、审核支付)
- 批量操作支持(批量更新账单状态)
- 统计分析功能(账单统计、逾期账单查询)
- 导出功能(Excel/PDF/CSV)

API端点 (16个):
- GET /api/admin/v1/billings - 账单列表(分页、筛选、排序)
- POST /api/admin/v1/billings - 创建账单
- GET /api/admin/v1/billings/{id} - 账单详情
- DELETE /api/admin/v1/billings/{id} - 删除账单
- PUT /api/admin/v1/billings/{id}/status - 更新状态
- POST /api/admin/v1/billings/batch/status - 批量更新
- GET /api/admin/v1/billings/{id}/payments - 支付记录
- POST /api/admin/v1/billings/{id}/payments - 创建支付
- PUT /api/admin/v1/billings/payments/{paymentId}/verify - 审核支付
- GET /api/admin/v1/billings/statistics - 统计数据
- GET /api/admin/v1/billings/overdue - 逾期账单
- POST /api/admin/v1/billings/export - 导出账单

架构优化:
- 采用CQRS模式分离读写(MediatR + Dapper + EF Core)
- 完整的领域模型设计(TenantBillingStatement, TenantPayment等)
- FluentValidation请求验证
- 状态机管理账单和支付状态流转

API设计优化 (三项改进):
1. 导出API响应Content-Type改为application/octet-stream
2. 支付审核API添加Approved和Notes可选参数,支持通过/拒绝
3. 移除TenantBillings API中重复的TenantId参数

数据库变更:
- 新增账单相关表及关系
- 支持Snowflake ID主键
- 完整的审计字段支持

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 11:24:44 +08:00
98f49ea7ad feat: 实现订阅自动化定时任务系统
新增定时任务 (Scheduler Module):
- SubscriptionAutoRenewalJob: 自动续费账单生成
- SubscriptionRenewalReminderJob: 续费提醒发送 (7/3/1天)
- SubscriptionExpiryCheckJob: 到期检查与宽限期处理

新增 Command/Handler:
- ProcessAutoRenewalCommand: 处理自动续费逻辑
- ProcessRenewalRemindersCommand: 处理续费提醒逻辑
- ProcessSubscriptionExpiryCommand: 处理订阅到期逻辑

配置项 (SubscriptionAutomationOptions):
- AutoRenewalDaysBeforeExpiry: 到期前N天生成续费账单
- ReminderDaysBeforeExpiry: 提醒天数数组
- GracePeriodDays: 宽限期天数
- 各任务执行小时配置

Repository 增强:
- ISubscriptionRepository: 新增自动化查询方法
- ITenantBillingRepository: 新增账单创建方法
- ITenantNotificationRepository: 新增通知创建方法

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 21:06:01 +08:00
ab59e2e3e2 feat: 新增配额包/支付相关实体与迁移
App:新增 operation_logs/quota_packages/tenant_payments/tenant_quota_package_purchases 表

Identity:修正 Avatar 字段类型(varchar(256)->text),保持现有数据不变
2025-12-17 17:27:45 +08:00
9c28790f5e feat: 套餐增加推荐标识与标签 2025-12-15 22:32:02 +08:00
2ed814fbe7 feat: 套餐到期分布与到期租户筛选 2025-12-15 21:46:20 +08:00
7ff66cd8e7 feat: 套餐使用统计增加MRR与ARR 2025-12-15 21:29:54 +08:00
17a697b9c8 fix: 修复套餐保存草稿被当作发布 2025-12-15 20:29:46 +08:00
2778a4ebdf feat: 套餐发布状态与可见/可购开关 2025-12-15 17:29:41 +08:00
e6a66b109a fix: 套餐使用租户查询参数类型推断 2025-12-15 16:51:53 +08:00
cbce52c8a6 fix: 套餐使用租户查询keyword为空时报错 2025-12-15 16:38:43 +08:00
a201885240 feat: 套餐使用统计与使用租户接口 2025-12-15 16:00:38 +08:00
9d80f02bc5 fix: 自助注册回填主管理员 2025-12-15 15:41:43 +08:00
2150ae8f8c fix: 重置密码忽略租户过滤 2025-12-15 15:27:32 +08:00
d2c7e1fb71 fix: 修复伪装登录与重置链接返回 2025-12-15 15:15:42 +08:00
2249588e07 feat: 支持租户伪装登录与管理员重置链接 2025-12-15 14:43:50 +08:00
d64545dd26 feat: 租户冻结解冻与订阅延期接口 2025-12-15 13:44:47 +08:00
13821f2d19 feat: 后台手动新增租户并直接入驻接口 2025-12-15 12:16:17 +08:00
5e7f7144ed feat: 审核通过时按月续费订阅 2025-12-15 11:15:21 +08:00
2339775fcb feat: 租户审核领单与强制接管 2025-12-15 10:40:50 +08:00
91c9ed413b feat: tenant detail 返回实名与套餐详情 2025-12-14 18:02:17 +08:00
4b63c1913c fix: tenants 列表查询避免 DbContext 并发 2025-12-14 16:41:34 +08:00
c5a3243bd8 feat: tenants 列表支持名称/联系人/电话/认证状态过滤 2025-12-14 16:23:32 +08:00
456b575596 fix: 自助注册租户账号仅允许字母数字 2025-12-12 22:18:33 +08:00
8b18d0cb96 feat: admin simple 登录支持 账号@手机号 2025-12-12 22:06:37 +08:00
aa81dddc16 feat: 公域租户订阅自助接口 2025-12-12 20:00:55 +08:00
ddeebc7d80 feat: 新增资质文件上传类型并修正开发 COS 配置 2025-12-12 15:32:22 +08:00
0b1f4352bc docs: 提交当前注释更新 2025-12-12 11:52:19 +08:00
2da009c68a docs: 补全租户与字典模块注释 2025-12-12 11:29:15 +08:00
641598de86 docs: 完善身份模块文档注释与字段说明 2025-12-12 11:08:39 +08:00
c7df64f2e1 feat: add public tenant packages listing and sort order 2025-12-11 23:57:04 +08:00
cf9927c078 fix: de-dup role permission binding and use raw sql replace 2025-12-06 22:52:02 +08:00
2b569d3d6f fix: validate role code uniqueness before insert 2025-12-06 15:02:38 +08:00
37dc23f0c1 feat: add permission hierarchy tree 2025-12-06 11:53:14 +08:00
d7772b0f8d fix: allow super admin tenant-scoped role ops 2025-12-05 23:07:31 +08:00
1060ab13d6 chore: remove legacy static admin menu 2025-12-05 22:35:26 +08:00
a1499fc1a1 feat: add admin menu management crud 2025-12-05 21:16:07 +08:00
3a38ade302 feat: add role template and tenant role apis 2025-12-05 20:55:56 +08:00
65acc51d25 fix: 修正租户列表菜单组件路径 2025-12-05 17:35:05 +08:00
1994ed6061 chore: 修复 Docker 配置并调整菜单排序 2025-12-05 15:09:46 +08:00
15ccff5407 feat: 管理端返回权限过滤的菜单树 2025-12-04 22:06:05 +08:00
1d7836a173 chore: 升级依赖并优化种子 2025-12-04 17:30:09 +08:00
29a46dfc17 Merge branch 'chore/comment-fix' into dev 2025-12-04 14:43:02 +08:00
37e7d721f3 docs: 完善参数注释与StyleCop配置 2025-12-04 12:45:26 +08:00
7d6b7d8760 docs: 标记自提档期完成 2025-12-04 11:51:09 +08:00
7e6125c687 feat: 完善库存锁定幂等与批次扣减策略 2025-12-04 11:31:26 +08:00
8e4c2b0e45 chore: add documentation comments and stylecop rules 2025-12-04 11:25:01 +08:00
b8d93337f2 feat: 菜品菜单查询与子资源替换完善 2025-12-04 10:42:58 +08:00
de5f13ec83 feat: 商品上架/下架与全量详情支持 2025-12-04 10:03:42 +08:00