|
|
d7434e6e8b
|
修复公告过时警告并补齐用户权限
|
2025-12-27 07:19:27 +08:00 |
|
|
|
caad541e2f
|
fix: 升级System.IO.Packaging
|
2025-12-27 06:41:08 +08:00 |
|
|
|
b2a90cf8af
|
feat: 用户管理后端与日志库迁移
|
2025-12-27 06:23:03 +08:00 |
|
|
|
0ff2794667
|
fix: 更新公告查询测试参数
|
2025-12-26 17:29:25 +08:00 |
|
|
|
ca632a7c09
|
refactor: 日志库拆分与清理用户审计
|
2025-12-26 17:24:10 +08:00 |
|
|
|
755b61a044
|
fix: 修复公告模块核心问题并完善功能
主要修复内容:
1. 修复 RowVersion 并发控制
- 配置 EF Core RowVersion 映射为 bytea 类型
- 添加 PostgreSQL 触发器自动生成 RowVersion
- 在更新/发布/撤销操作中添加 RowVersion 校验
- 移除 Application 层对 EF Core 的直接依赖
2. 修复 API 路由和校验问题
- 添加平台公告列表路由的版本化别名
- 租户公告接口添加 X-Tenant-Id 必填校验,返回 400
- 生效时间校验返回 422 而非 500
- 修复 FluentValidation 异常命名冲突
3. 实现关键词搜索功能
- 在查询参数中添加 keyword 字段
- 使用 PostgreSQL ILIKE 实现大小写不敏感搜索
- 支持标题和内容字段的模糊匹配
4. 数据库迁移
- 新增 RowVersion 触发器迁移文件
- 回填现有公告记录的 RowVersion
|
2025-12-26 09:16:07 +08:00 |
|
|
|
857f776447
|
feat: 实现完整的多租户公告管理系统
核心功能:
- 公告状态机(草稿/已发布/已撤销)支持发布、撤销和重新发布
- 发布者范围区分平台级和租户级公告
- 目标受众定向推送(全部租户/指定角色/指定用户)
- 平台管理、租户管理和应用端查询API
- 已读/未读管理和未读统计
技术实现:
- CQRS+DDD架构,清晰的领域边界和事件驱动
- 查询性能优化:数据库端排序和限制,估算策略减少内存占用
- 并发控制:修复RowVersion配置(IsRowVersion→IsConcurrencyToken)
- 完整的FluentValidation验证器和输入保护
测试验证:
- 36个测试全部通过(27单元+9集成)
- 性能测试达标(1000条数据<5秒)
- 代码质量评级A(优秀)
文档:
- 完整的ADR、API文档和迁移指南
- 交付报告和技术债务记录
|
2025-12-20 19:57:09 +08:00 |
|
|
|
00eb357e6e
|
fix: 平台订阅管理支持跨租户查询
|
2025-12-18 23:58:24 +08:00 |
|
|
|
30f44b6009
|
修复:Admin租户配额查询返回空数据(忽略全局租户过滤)
|
2025-12-18 20:56:50 +08:00 |
|
|
|
907c9938ae
|
feat(admin-api): 实现 TD-001 和 TD-002 后端接口
TD-001 - PUT /api/admin/v1/tenants/{tenantId}:
- 新增 UpdateTenantCommand + UpdateTenantCommandHandler
- Controller 新增 Update 端点(tenant:update 权限)
- 校验:租户存在、name 非空、name/contactPhone 冲突返回 409
- 仓储扩展:ITenantRepository.ExistsByNameAsync
TD-002 - GET /api/admin/v1/tenants/{tenantId}/quota-usage-history:
- 新增 CQRS Query/Handler/DTO/Validator
- 支持分页(Page>=1, PageSize 1~100)
- 支持时间范围和 QuotaType 过滤
- 新增 tenant_quota_usage_histories 表(含迁移)
- 写入点:CheckTenantQuotaCommandHandler + PurchaseQuotaPackageCommandHandler
构建验证:dotnet build 通过
数据库迁移:已应用 20251218121053_AddTenantQuotaUsageHistories
|
2025-12-18 20:19:33 +08:00 |
|
|
|
40e914dc92
|
feat: 新增一键确认收款接口
问题: 原recordPayment只创建Pending支付记录,不更新账单状态
用户点击确认收款后需要再次审核才能生效
解决方案:
- 新增POST /api/admin/v1/billings/{id}/payments/confirm接口
- 内部原子化执行: 创建支付+自动审核+更新账单状态
- 保留原recordPayment接口用于需要审核的场景
新增文件:
- ConfirmPaymentCommand.cs
- ConfirmPaymentCommandHandler.cs
- ConfirmPaymentCommandValidator.cs
|
2025-12-18 15:29:30 +08:00 |
|
|
|
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 |
|
|
|
e39a42b74c
|
fix: 修复套餐草稿默认值哨兵问题
|
2025-12-15 21:09:28 +08:00 |
|
|
|
fd377624d8
|
fix: 修复套餐新增草稿默认值与开关落库
|
2025-12-15 21:06:23 +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 |
|
|
|
f2ec40a533
|
fix: 修复COS上传图片损坏
|
2025-12-15 13:25:04 +08:00 |
|
|
|
9192ef3021
|
fix: 用户头像URL支持长链接
|
2025-12-15 12:55:58 +08:00 |
|
|
|
fca8bd989c
|
fix: 租户LogoUrl支持长链接
|
2025-12-15 12:53:38 +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 |
|
|
|
f54d4cf405
|
fix: 平台端查询租户订阅与套餐不再受租户过滤影响
|
2025-12-15 10:00:31 +08:00 |
|
|
|
f6e7fa2f4a
|
fix: 平台租户未解析时不应用租户过滤
|
2025-12-15 09:45:08 +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 |
|
|
|
624a7bc04d
|
fix: tenants 联系电话唯一索引
|
2025-12-12 22:06:24 +08:00 |
|
|
|
aa81dddc16
|
feat: 公域租户订阅自助接口
|
2025-12-12 20:00:55 +08:00 |
|
|
|
ddeebc7d80
|
feat: 新增资质文件上传类型并修正开发 COS 配置
|
2025-12-12 15:32:22 +08:00 |
|
|
|
f2267f3e81
|
fix: 更新管理端开发环境 COS 配置并关闭来源校验
|
2025-12-12 14:47:51 +08:00 |
|
|
|
0b1f4352bc
|
docs: 提交当前注释更新
|
2025-12-12 11:52:19 +08:00 |
|
|
|
2da009c68a
|
docs: 补全租户与字典模块注释
|
2025-12-12 11:29:15 +08:00 |
|