root
f9053356c2
refactor: 移除门店跨租户访问入口
2026-01-29 14:50:49 +00:00
root
52fb4fde72
refactor: 清理平台表述并统一为系统
2026-01-29 13:49:03 +00:00
root
77836e270f
refactor: 移除平台公告与跨租户目标
2026-01-29 13:15:53 +00:00
root
3297ff26ab
refactor: 移除平台侧能力并收紧租户隔离
2026-01-29 12:06:52 +00:00
root
86ef0d6033
feat: 新增租户管理端 TenantApi 并移除旧 API
2026-01-29 11:39:57 +00:00
725f89ae24
feat: Add tiered packaging fee support for stores
...
Introduces tiered packaging fee configuration for stores by adding OrderPackagingFeeMode and PackagingFeeTiers fields to StoreFee. Updates DTOs, validators, handlers, and mapping logic to support both fixed and tiered packaging fee modes. Adds StoreFeeTierHelper for tier normalization and serialization, and includes a database migration to persist the new fields.
2026-01-26 09:26:49 +08:00
187534ecca
fix: 允许平台账号跨租户更新门店
2026-01-21 17:21:30 +08:00
36abd83e83
chore: update store delivery zone handlers
2026-01-21 11:27:13 +08:00
8bde1a6440
fix: 门店时段与临时调整跨租户处理
2026-01-20 20:38:05 +08:00
32f5bbbd43
feat(store): 扩展临时时段配置
2026-01-20 18:41:34 +08:00
3385674490
fix: 门店资质日期字段改为date
2026-01-20 13:09:06 +08:00
30e54e2bea
fix: 修复门店租户写入与跨租户查看
2026-01-19 20:43:27 +08:00
a042c7ef82
Merge branch 'dev' of https://github.com/msumshk/TakeoutAPI into dev
2026-01-05 19:11:16 +08:00
6eea61264b
refactor: 重命名商户门店DTO
2026-01-05 10:43:04 +08:00
398c716734
fix:修复注释错误
2026-01-04 21:22:26 +08:00
fc55003d3d
完成门店管理后端接口与任务
2026-01-01 07:26:14 +08:00
b9dc49b7a9
feat:修复商户审核校验
2025-12-29 22:10:23 +08:00
7cb5e9a805
feat:补齐商户版本号
2025-12-29 21:55:05 +08:00
febef6caaf
feat:修复商户审核日志
2025-12-29 21:16:09 +08:00
dd91c1010a
feat:商户管理
2025-12-29 16:40:27 +08:00
57f4c2d394
fix: 公告模块第一次修复
2025-12-27 18:22:30 +08:00
b75f4bca54
fix: 移除AutoMapper依赖
2025-12-27 12:32:54 +08:00
04444c6554
fix: 修复公告过时警告并补齐用户权限
2025-12-27 12:32:52 +08:00
b2a90cf8af
feat: 用户管理后端与日志库迁移
2025-12-27 06:23:03 +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
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
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
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