Commit Graph
88 Commits
Author SHA1 Message Date
qian 26c53c2228 feat(tenant):新增模型厂商和租户消费总额 2026-09-13 22:13:59 +08:00
qian b267119f12 fix(setting):修复支付配置保存失败的问题 2026-09-05 13:45:12 +08:00
qian 72fb0318f5 fix(permissions):修复租户端的权限漏洞 2026-09-05 00:31:14 +08:00
qian 8d4e8744d5 fix(help):修复帮助文档问题 2026-09-02 23:56:49 +08:00
qian 4d0e2901d9 fix(setting):渠道代理改为系统配置而不是配置文件 2026-09-01 23:34:14 +08:00
qian 3c749c6c0a fix(setting):移除设置中多个未生效设置项 2026-09-01 23:11:31 +08:00
qian e800cd4b05 fix(setting):移除安全配置中的无用配置 2026-09-01 21:34:45 +08:00
qian df78724773 fix(setting):修复注册限流不生效的问题 2026-09-01 21:20:22 +08:00
chengqian 0372d4fff5 feat(role):新增用户权限功能 2026-09-01 15:47:10 +08:00
qian 211148a0af improve(workbench):优化工作台页面 2026-08-31 23:29:21 +08:00
chengqian 8c8b63da77 fix(email):修复邮件相关功能 2026-08-31 16:21:20 +08:00
chengqian 0fd2e737ef Merge remote-tracking branch 'origin/dev' into dev 2026-08-31 15:59:55 +08:00
chengqian 1f07fae1c2 fix(email):修复邮件相关功能 2026-08-31 15:59:22 +08:00
qian cd019cf817 feat(billing):新增本位币设置,初始化时可选择全局货币单位,一旦设置就不能修改 2026-08-29 10:22:47 +08:00
chengqian 958f6c4d75 type(relay):修正测试代码里面的函数名为纯英文 2026-08-28 17:40:24 +08:00
chengqian ce59b12622 fix(cron): 兜底任务 panic,并支持自定义渠道探测间隔
panic 兜底:cron.New() 默认不带 Recover 链,robfig/cron v3 的 startJob 是裸的
`go func(){ j.Run() }()`——任意一个定时任务 panic 会直接崩掉整个进程,而不只是让该
任务失败。在 runJobInternal 内兜住并转成普通 error,进程存活且失败经 recordExecution
落进 sys_cron_jobs,管理后台可见,不再表现为一次无声重启。堆栈只进日志,避免撑爆
last_error 的展示。渠道自动探测再加一层 per-channel recover:单个渠道 panic 只跳过
自己,本轮剩余渠道继续(否则整轮被中断)。

探测间隔可配置:新增 channel_auto_test_interval_minutes(默认 5,范围 1-1440),
原先固定 */5 * * * *。用 @every 而非 */N——*/N 只在 N<60 时有意义,*/90 会被静默
解析成 */30,给出与配置不符的频率;@every 还让各实例按启动时刻错开,不会所有实例
卡在同一分钟同时探测。

配套两处基础能力:CronScheduler 记录 cron.EntryID 并新增 Reschedule(先加新条目、
成功后再摘旧条目,非法表达式时保持原调度,避免一次错配把任务彻底摘出调度器);
ConfigService 新增 OnSettingsChanged 回调钩子,挂在既有的 settings:changed 订阅上,
使配置变更能触发动作而不只是让缓存失效,多实例各自重排、无需重启。
2026-08-27 21:59:45 +08:00
qian 40e91d9450 feat(channel):新增渠道调试日志功能 2026-08-20 10:34:15 +08:00
qian 5cae607d19 feat(channel):允许禁用的渠道进行模型测试操作 2026-08-20 01:03:48 +08:00
qian add95ca5ab feat(model):模型定价分时功能 2026-08-20 01:03:47 +08:00
qian 6778c84ace feat(model):新增缓存监控指标 2026-08-16 23:59:00 +08:00
qian bb0de90181 fix(log):修复日志写入遇到特殊字符报错的问题 2026-08-16 20:11:49 +08:00
chengqian be8275a8c5 improve(model):优化模型健康状态功能 2026-08-13 15:53:09 +08:00
qian c7d15d82a4 improve(admin):优化管理功能搜索条件 2026-08-04 22:50:57 +08:00
qian e464da852c feat(payment):支付提示功能 2026-08-04 00:18:10 +08:00
chengqian 141eac106a feat:添加rpm/tpm指标 2026-08-03 15:29:38 +08:00
chengqian 2491182939 improve: 优化高并发下的异常报错问题 2026-08-03 12:21:47 +08:00
qian a4390c1cba perf(relay): 减少大模型请求路径的数据库读写
- 额度累加(IncrMemberQuotaUsed/IncrApiKeyQuotaUsed)异步化,不再阻塞请求 goroutine
  * context.WithoutCancel 脱父级取消,客户端断开不中断累加与缓存失效
- 审计日志(aud_request_logs)改批量通道写入,复用 UsageLogWriter
  * UsageLogWriter 增加可选 DB getter,支持路由到独立审计库
  * 新增 DefaultAuditLogWriter(64条/批或1s flush),OverflowSyncFallback 保证审计不丢
  * UpdateTaskAudit 重试窗口扩至10次以覆盖批量 flush 延迟
- CheckApiKeyQuota 补 Redis 缓存(60s),同请求内两次检查第二次命中缓存
  * IncrApiKeyQuotaUsed 落库后失效缓存,与成员额度缓存行为一致
- GetModelMapping/GetModelDeprecationInfo 合并对 mdl_models 的单次查询
  * modelInfoCached 扩展弃用字段,GetModelDeprecationInfo 复用600s缓存不再裸查
  * 缓存 key 加 v2 前缀隔离旧格式,避免部署窗口读到零值弃用字段
2026-08-03 00:48:21 +08:00
qian 6683ca6d40 fix(cache): 修复高并发下租户模型权限缓存缺失导致误判问题
- CheckTenantModelAccess 增加 L1/L2 双层缓存(TenantModelAccessCache,TTL 300s)
  区分「数据库无记录(IsNil=true,穿透到分组权限)」和「有记录」两种状态,
  高并发下不再每次请求都发起 LEFT JOIN 查询,消除连接池压满时的误判根因

- 修复 Cache.DeleteByPattern 遗漏 L1 gcache 清除和跨实例 pub/sub 通知的问题:
  原实现只做 Redis SCAN+批量 DEL,L1 条目靠 TTL 自然过期;
  改为 SCAN 收集所有 key → 批量 DEL L2 → 逐 key gcache.Remove + PUBLISH cache:invalidate,
  与 Cache.Delete 的三层清除行为对齐

- 新增 ClearTenantModelAccessCache(ctx, tenantID),以 {tenantID}:* 模式清除该租户缓存

- admin/tenant_model.go:BatchAssignModels / UpdateTenantModel / DeleteTenantModel
  三个写操作在 ClearTenantPriceCache 后追加 ClearTenantModelAccessCache 调用

- admin/model_group.go:invalidateTenantGroupCache 新增 ClearTenantModelAccessCache 调用,
  覆盖所有分组写操作(SetGroupModels / SetTenantGroups / UpdateModelGroup status 变更)
2026-08-02 23:59:00 +08:00
qian ab463ede83 improve(task):定时任务优化,显示中文名称 2026-08-02 17:52:21 +08:00
Qian 2ef5a40c26 新的调度方式 (#14)
重构模型渠道调度系统
2026-08-01 22:55:08 +08:00
chengqian d14e5b00e1 fix:修复租户停用后令牌还能用的bug 2026-07-27 17:45:47 +08:00
martin 92c2cc033b refactor: deduplicate task and security logic 2026-07-26 14:07:53 +08:00
martin a6ed67d841 fix: 完成 P3 细节优化项
依据《代码分析结果.md》P3 章节,逐条修复 20 项细节问题:

正确性修复:
- P3-1 锁定剩余分钟改用 math.Ceil,避免「0.9 分钟」显示为「0 分钟」
- P3-12 移除 CheckAndUpgradeLevel 中恒真的 hasUpdate 标志
- P3-14 移除 CheckTrialExpiry 中恒真表达式(count > 0 || true)调试残留,改用 RowsAffected
- P3-2 成员不存在统一返回 NewNotFoundError(404),与其它方法语义一致

安全加固:
- P3-6 X-Request-Id 加格式校验 ^[A-Za-z0-9-]{1,64}$,防日志注入
- P3-7 新增公共 EscapeLikePattern,转义 admin LIKE 搜索的 %/_ 通配符
- P3-8 Encrypt 输出加 v1: 版本前缀,Decrypt 兼容无前缀历史密文
- P3-9 turnstile 响应体读取加 64KB 上限,防内存耗尽
- P3-11 backup codes 熵由 48-bit 提升到 64-bit
- P3-15 recordAudit 对 multipart/二进制体跳过 Unmarshal 与原文落库
- P3-17 错误日志按 Content-Type 跳过 multipart/二进制体读取
- P3-16 HandleRealtime 加 panic recover 与连接生命周期日志

可维护性/一致性:
- P3-3 oauth.go 时间格式统一为 time.RFC3339
- P3-5 MsgSuccess 统一为 ok,response.go 改用常量引用
- P3-4 错误码分段策略加注释,说明空洞与跳跃的成因
- P3-13 ModelMultiplier 占位语义加注释(计费公式设计位 + 快照列)
- P3-19 抽取 registerCronJobs,主启动流程清爽

重构:
- P3-18 删除死代码 BuildBillingSummary/SummaryParams(仅测试引用),保留共用 helper
- P3-20 抽取 relay.InvalidateMemberModelScopeCache 单一失效入口,
  消除三处 member_model 前缀字面量重复(原为有意跨包失效,原建议改名会破坏)

经核实保留 + 文档化:
- P3-10 TOTP 暂保留 SHA-1:totp.Validate 硬编码 SHA-1 且存储不保存算法元信息,
  直接切 SHA-256 会导致校验恒失败,需配合 schema 改动,超出 P3 范围
2026-07-26 12:16:33 +08:00
martin b7e71c685f fix: 修复并发与一致性问题 2026-07-26 11:45:03 +08:00
martin 0f87322f49 fix: 修复 P1 功能正确性问题 2026-07-26 11:03:22 +08:00
martin 6665b1e113 refactor:重构渠道调度功能 2026-07-25 20:48:15 +08:00
martin 75bc4038db fix:修复文件管理可能导致的越权操作 2026-07-25 20:10:35 +08:00
martin e9b5592666 fix:修复租户数据导出功能 2026-07-25 19:57:50 +08:00
qian 44424dfb67 feat:统一汇率转换方向 2026-07-23 23:06:40 +08:00
chengqian 4b13477a83 fix: 修复代码分析报告中安全章节的高危问题
- 错误日志脱敏: response 包新增 sanitizeRequestBody, 对写入
  sys_error_logs 的 JSON 请求体递归脱敏 password/secret/token/code
  等敏感字段, 非 JSON 体不落原文, 防止明文密码入库
- 验证码防暴力破解: VerifyCode 验证侧增加 Redis 失败计数,
  10 分钟内失败 5 次锁定, 成功后清零
- TOTP 防重放: security.go 新增 validateTOTPOnce 守卫
  (SET NX EX 90), 4 处调用方统一接入, Redis 故障 fail-open
- 管理员 Role 补字段级白名单 v:"in:super_admin,admin" (纵深防御)
- 同步更新 docs/claude代码分析.md 安全章节处置状态
2026-07-22 18:57:11 +08:00
chengqian 527a59d557 fix: 修复代码分析报告中的低优先级问题
- notification.go: containsAny 改用 strings.Contains 简化
- docs/openapi.go: buildOpenAPISpec 透传 ctx,消除 nil context
- batch_writer.go: 缓冲区溢出丢弃记录时增加计数与告警日志
- billing/wallet.go: 删除无调用方的死代码 CheckBalance
- tenant/open_platform.go: WebhookConfigUpdate 校验受影响行数
- tenant/member_import.go: 后台导入改用 WithoutCancel 保留 request_id
- session.go: GetSessionByID/RevokeSession 增加 user_type 隔离,
  防止 admin/tenant 跨控制台按 ID 吊销他人会话
2026-07-22 18:11:02 +08:00
Qianandchengqian be9e707bfd 修复异步图片导致的多个问题 (#12)
* fix:修复响应污染问题

* fix:修改存储相关文件为中文注释

* fix:修复二次退款问题

* fix:修复多个考虑不全面问题
1.误删用户数据
2.R2存储默认区域
3.删除失败导致孤儿记录
4.网络抖动事变时重试
5.前端无限次请求获取图片
6.文件管理权限

* fix:修复字符串截断异常问题和文件下载超时问题

* fix:修复多图问题

* fix:异步生成图片时未配置oss提示错误信息

* fix:修复关闭异步后同步生成出错问题

* feat:新增文件存储测试功能,防止设置后不生效

* fix:修复同步图片转异步后计费错误

* fix:修复无下限扣款问题

* fix:修复结算重复扣款问题

* fix:修复计费出错导致的0费用结算

* fix:修复回调双重履约

* fix:修复预扣事务

* fix:修复费用字段类型问题

* fix:修复缓存问题

* fix:修复安全问题

* fix:修复数据库操作事务问题

* refactor:重构事务使用方式,改为官方推荐的dao形式

* fix:修复余额更新隐患

* fix:修复N+1查询问题

* fix:修复密钥安全问题

* fix:结算失败时打印错误日志

* improve:优化扣款

* fix:修复用户接口越权

---------

Co-authored-by: chengqian <wuchengqian@kkidc.com>
2026-07-22 17:53:18 +08:00
fa053529af 图片请求统一异步处理 (#11)
* fix:未导入unicode包

* feat:图片异步转换

* feat:添加R2支持

* feat:新增文件管理

* fix:修复错误信息双写导致响应异常

* chore:渠道列表中添加快捷启用停止按钮

* fix:修复模型异常终端导致报错的问题

* improve:优化无可用渠道的日志打印,减少日志污染

* fix:在线体验出错缺少提示信息

* fix:修复日志库问题,只有请求日志保存到独立的库中

* feat:新增阿里图片模型说明文档

* fix:阿里千问图片生成

* fix:修复图片异步控制无效问题

* improve:优化文件展示,支持缩略图查看

* feat:实时监控中添加图片异步转换池状态信息

* improve:优化在线体验页面布局

* fix:修复异步任务状态显示异常问题

* feat:图片异步任务停止时等待任务完成后再退出程序

* chore:调整存储路径

---------

Co-authored-by: qian <wuchengqian5@163.com>
Co-authored-by: chengqian <wuchengqian@kkidc.com>
2026-07-18 00:26:13 +08:00
qian 88447ac558 fix:未导入unicode包 2026-06-24 00:03:16 +08:00
79b9224968 注册功能优化 (#10)
* fix:修复权限问题

* fix:修复项目key类型错误问题

* fix:修复rbac权限问题

* fix:修复api密钥未及时失效的问题

* improve:优化渠道调度稳定性

* improve:优化路由

* fix:修复项目预算控制缺陷

* fix:加强限流等安全措施

* feat:添加限流相关字段的前端展示及接口字段

* improve:优化注册时密码要求,只需要字母和数字即可

* feat(setting):添加注册限流设置

* improve:优化前端数字类型转换

* chore:rbac权限放行

* feat:团队功能作为可选项,允许不设置团队的情况下进行注册

* feat:团队code只能设置一次

* improve:优化组织名称限制

* chore:合并数据库版本文件

---------

Co-authored-by: chengqian <wuchengqian@kkidc.com>
Co-authored-by: qian <wuchengqian5@163.com>
2026-06-23 23:07:36 +08:00
22ee0aa112 修复安全问题 (#9)
* fix:修复权限问题

* fix:修复项目key类型错误问题

* fix:修复rbac权限问题

* fix:修复api密钥未及时失效的问题

* improve:优化渠道调度稳定性

* improve:优化路由

* fix:修复项目预算控制缺陷

* fix:加强限流等安全措施

* feat:添加限流相关字段的前端展示及接口字段

* improve:优化注册时密码要求,只需要字母和数字即可

* feat(setting):添加注册限流设置

* improve:优化前端数字类型转换

* chore:rbac权限放行

---------

Co-authored-by: chengqian <wuchengqian@kkidc.com>
Co-authored-by: qian <wuchengqian5@163.com>
2026-06-23 22:47:54 +08:00
Qianandqian 501726b831 优化用户相关功能 (#8)
* improve(user):优化注册功能提示

* improve(user):优化邮箱大小写重复问题

* improve(user):添加密码强度指示器

* fix(setting):修复系统设置功能里面的数字转换问题

* feat(email):优化邮件发送功能

* chore(email):移除无用配置和日志

* fix(user):修复重置密码功能

* chore(ui):调整轮询间隔

* chore(ui):添加充值提示

* chore(ui):优化用户注册功能

* chore(sql):补充数据库变更文件

* fix(email):优化邮箱校验

---------

Co-authored-by: qian <wuchengqian5@163.com>
2026-06-17 22:47:26 +08:00
qian f5af9fbf07 fix(setting):修复公开配置项未准确设置 2026-06-13 21:09:24 +08:00
qian cea265a1dd fix:修复Turnstile真人验证功能 2026-06-13 14:36:58 +08:00
qian acd2e01ae5 feat:添加账号禁用词功能 2026-06-12 01:23:40 +08:00