chengqian
|
bf2fea24c9
|
feat:添加IP黑名单功能
|
2026-09-24 14:58:37 +08:00 |
|
qian
|
e4f31eae5c
|
feat(response):优化下拉选项
|
2026-09-22 21:46:26 +08:00 |
|
qian
|
89399a4905
|
feat(model):优化租户管理功能
|
2026-09-18 23:52:26 +08:00 |
|
chengqian
|
62a23325c7
|
improve:导出接口护栏与两端控制台查询性能优化
- 导出统一行数上限:xlsx 超限在拉取阶段截停并报错,CSV 到限截断并在文件末尾写入可见标记
- 全部导出接口 OFFSET 循环翻页改为 keyset 游标(用量日志/计费记录/成员/渠道/钱包流水)
- 用量日志导出强制时间窗(开始时间必填、跨度≤31天),校验下沉 common 供管理后台与租户端共用
- 管理后台仪表盘趋势/租户排行/模型分布/小时费用聚合加 5 分钟双层缓存
- 交易流水 Username 筛选改 EXISTS 子查询解除对 JOIN 别名的依赖,COUNT 与列表拆分免背联表
- 管理后台成员列表 COUNT 免联表(筛选条件只引用主表列)
- 租户端用量日志列表/统计/导出共用筛选构造器,COUNT 与 SUM 全程剥离联表,钱包流水 COUNT 拆分
|
2026-09-18 15:24:09 +08:00 |
|
chengqian
|
c30ec73694
|
feat(ui):优化在线体验功能
|
2026-09-15 19:46:01 +08:00 |
|
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 |
|