XuqmGroup
ff9f91d341
fix(xiaomi): 修复 HyperOS 推送参数错误(channel_id → extra.channel_id)
...
旧 API 用 channel_id 字段,HyperOS V3 API 要求改用 extra.channel_id。
错误参数名导致所有小米推送返回 27001(channel相关信息不匹配)。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 18:16:41 +08:00
Jenkins CI
bc6135027f
ci: bump versions [push-service=1.0.7] [skip ci]
2026-06-26 17:37:23 +08:00
XuqmGroup
60bc428e02
fix(xiaomi): 推送请求增加 INFO 日志,方便排查 27001 问题
2026-06-26 17:33:18 +08:00
Jenkins CI
7eb4d5ca1a
ci: bump versions [tenant-service=1.0.9] [skip ci]
2026-06-26 16:21:59 +08:00
XuqmGroup
a20dd0db16
fix(tenant): listByApp 按平台去重,返回每个平台的服务记录
...
原实现按 serviceType findFirst,导致同一 serviceType 下不同平台
的配置(如 ANDROID/IOS/HARMONY PUSH)只返回第一条,ANDROID 推送
配置对外不可见。改为按 (serviceType, platform) 组合去重。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 16:17:01 +08:00
Jenkins CI
6830237a0e
ci: bump versions [push-service=1.0.6] [skip ci]
2026-06-26 13:50:58 +08:00
XuqmGroup
7194126a4c
fix(push): 修复设备换绑驱逐时 NonUniqueResultException
...
findByAppKeyAndDeviceId / findByAppKeyAndToken 改为返回 List,
避免 DB 中存在多条同 appKey+deviceId 记录时 Hibernate 抛出
NonUniqueResultException(HTTP 500)。
驱逐逻辑改为 stream + forEach,将所有旧用户记录一并清除。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 13:49:39 +08:00
Jenkins CI
86ab6e73ba
ci: bump versions [push-service=1.0.5] [skip ci]
2026-06-26 13:44:39 +08:00
XuqmGroup
b4c236d234
fix(push): InternalPushController 补传 deviceId;设备换绑时驱逐原用户
...
- InternalPushController.testOffline 补传 deviceId=null,修复编译失败
- DeviceTokenRepository 新增 findByAppKeyAndDeviceId / findByAppKeyAndToken
- registerToken 在同 appKey 下同设备/同 token 被新用户注册时,
自动删除旧用户的 push token,防止旧用户继续收到新用户的消息
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 13:42:48 +08:00
XuqmGroup
68f6145c71
feat(push): 测试推送支持指定设备;改进小米/VIVO 错误日志
...
- TestOfflineRequest 新增 deviceId 字段,可直接推送到指定设备
- PushDispatcher 新增 pushToSpecificDevice(绕过 receivePush 过滤,适合测试)
- sendTestOfflineMessage:指定设备时 targetCount=1(设备已找到),sent=false 表示厂商拒绝
- XiaomiPushProvider:21301 鉴权失败时打印 appKey + 前缀供排查
- VivoPushProvider:发送失败时打印 VIVO 返回的错误码和描述
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 13:21:23 +08:00
Jenkins CI
c1a96af765
ci: bump versions [push-service=1.0.4] [skip ci]
2026-06-26 13:00:06 +08:00
XuqmGroup
a1f231ae10
fix(push): 改 ddl-auto 为 none,解决自定义迁移与 Hibernate 验证的启动顺序冲突
...
Hibernate validate 在 ApplicationReadyEvent 之前执行,
PushSchemaMigrationService 在 ApplicationReadyEvent 触发,导致每次
新增实体字段时服务启动失败(502)。
改为 none 后由 PushSchemaMigrationService 负责所有 DDL 变更。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 12:58:53 +08:00
Jenkins CI
f920da042e
ci: bump versions [push-service=1.0.3] [skip ci]
2026-06-26 12:46:25 +08:00
XuqmGroup
18efcc1364
fix(push): PushAuthController.login 补传 romVersion 参数
...
registerToken 新增了 romVersion 参数,/auth/login 端点漏传导致编译失败。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 12:41:49 +08:00
XuqmGroup
83ca8c0f49
feat(push): 添加 romVersion 字段及设备 Token 查询接口
...
- DeviceTokenEntity: 新增 rom_version 字段(厂商系统版本)
- PushController: register 接口添加可选 romVersion 参数
- PushDispatcher: 注册时保存 romVersion
- PushDiagnosticsService.DeviceInfo: 返回 romVersion
- PushManagementController: 新增 GET /admin/devices/{id}/token 接口(管理端查完整 token)
- PushSchemaMigrationService: 添加 v20260626_add_rom_version 迁移
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 12:24:58 +08:00
Jenkins CI
0b1b4af8b3
ci: bump versions [push-service=1.0.2] [skip ci]
2026-06-26 11:26:41 +08:00
XuqmGroup
46b437d5c9
fix(push): 删除 push 表中遗留的 app_id 字段
...
push_device_token 和 push_device_login_log 中存在 NOT NULL 的 app_id 列,
为历史遗留字段(系统已统一使用 appKey),导致 INSERT 时报错 500。
通过 PushSchemaMigrationService 新增迁移删除该字段及对应的旧索引/约束,
并重建 idx_push_device_log_user_time 索引到正确的 app_key 列。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 11:25:27 +08:00
Jenkins CI
74028060a8
ci: bump versions [push-service=1.0.1] [skip ci]
2026-06-26 11:04:00 +08:00
2b2144fc6b
fix(push): 开放 SDK 设备注册相关接口,无需 JWT
...
register/unregister/receive-push 只需 appKey+userId,
外部用户(无 userSig)应可正常完成 push 设备注册。
send 接口保持需要认证。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 10:54:25 +08:00
Jenkins CI
4c2e66eb72
ci: bump versions [tenant-service=1.0.8] [skip ci]
2026-06-25 17:25:23 +08:00
XuqmGroup
1bd9a39422
fix(push-config): 解决 schemaV2 vendors 嵌套与 upsert 问题
...
- SdkConfigController: 向 SDK 下发 pushConfig 时自动解包 vendors 层,客户端 SDK 读取 xiaomi/vivo 等顶层字段
- FeatureServiceManager.updateConfig: 改为 upsert 模式,服务未激活时先创建再更新,不再报 404
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 16:58:30 +08:00
Jenkins CI
6b73a757fb
ci: bump xuqm-bugcollect-service=1.0.19 [skip ci]
2026-06-24 20:34:34 +08:00
Jenkins CI
71821f1862
ci: bump versions [file-service=1.0.1] [skip ci]
2026-06-24 19:05:33 +08:00
XuqmGroup
227425b80a
fix(bugcollect): 修复 trend 接口 500 — GROUP BY 兼容 MySQL only_full_group_by
...
SELECT e.createdAt 配合 GROUP BY DATE(e.createdAt) 在 MySQL strict mode
下触发 Expression #1 of SELECT list is not in GROUP BY clause 错误。
改为 MIN(e.createdAt) 作为聚合列,类型不变,LogService 无需修改。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 18:53:49 +08:00
Jenkins CI
16dcd5ebac
ci: bump versions [tenant-service=1.0.7] [skip ci]
2026-06-24 18:25:59 +08:00
XuqmGroup
beb8b57fc1
fix: checkForUpdates 中排除 nginx 版本对比
...
nginx 使用官方镜像,不携带语义版本标签,在版本对比表格中显示
"未知 / 未知" 无实际意义。将 nginx 保留在 OTHER_SERVICES(一键更新
时仍会重建容器),但从 checkForUpdates() 的 services map 中移除。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 18:20:25 +08:00
Jenkins CI
e402366f0d
ci: bump versions [tenant-service=1.0.6] [skip ci]
2026-06-24 17:04:44 +08:00
XuqmGroup
1151724a2a
fix: readCurrentVersion 优先读 /app/SERVICE_VERSION,修复 currentVersion 永远返回 "1.0.0"
...
Dockerfile 中 COPY VERSION /app/VERSION 拷贝的是 repo 根目录的静态文件(始终是 "1.0.0"),
实际构建版本通过 build-arg SERVICE_VERSION 写入 /app/SERVICE_VERSION。
改为优先读 /app/SERVICE_VERSION,使 check-update 返回正确的 currentVersion。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 17:01:59 +08:00
Jenkins CI
b851a83e10
ci: bump versions [tenant-service=1.0.5] [skip ci]
2026-06-24 16:46:14 +08:00
XuqmGroup
9580f77b68
fix: 服务 changed 状态以本地/云端版本比对为准,不依赖 manifest 的 changed 字段
...
manifest.changed 是 Jenkins 构建时标记的,表示"本次 release 有改动",
不能反映私有部署是否需要更新。改为 current != latest 比对,
避免 current==latest 时误报"有更新"。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 16:42:56 +08:00
Jenkins CI
15a1d79d39
ci: bump versions [tenant-service=1.0.4] [skip ci]
2026-06-24 16:37:20 +08:00
XuqmGroup
e3ec7828fc
fix: check-update 正确映射 bugcollect-service 在 manifest 中的 key
...
versions.json 中 bugcollect-service 的 key 是其镜像名 xuqm-bugcollect-service,
导致 latest 字段为空。复用 SERVICE_IMAGE_OVERRIDES 做 manifest key 转换,
使 bugcollect-service 能正确读取到云端最新版本。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 16:28:24 +08:00
Jenkins CI
c9a3bb5208
ci: bump versions [tenant-service=1.0.3] [skip ci]
2026-06-24 16:17:44 +08:00
XuqmGroup
0f0d0a6b8e
fix(tenant-service): 放开 /api/system/versions/manifest 无需鉴权
...
私有部署通过此端点从云端拉取最新版本清单(VERSIONS_MANIFEST_URL),
不能要求登录态,否则私有服务器无法获取更新信息。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 16:14:57 +08:00
Jenkins CI
cfc028b7eb
ci: bump versions [tenant-service=1.0.2] [skip ci]
2026-06-24 16:13:08 +08:00
XuqmGroup
d3f0c0305a
feat(tenant-service): nginx 配置改为模板驱动,随发版自动同步
...
将 nginx 配置打包进 JAR(src/main/resources/nginx/xuqm.conf),
一键更新时自动同步到宿主机挂载目录并重建 nginx 容器。
新增服务只需修改该文件并发版,不再需要为每个变更写 patchNginxXxx() 方法。
同时补入 update-service WebSocket 路由(/ws/),
该路由原本由 patchNginxWebSocket() 注入,因 /ws/im 已存在导致条件误判未生效。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 16:10:26 +08:00
Jenkins CI
aad4fabeb1
ci: bump versions [tenant-service=1.0.1] [skip ci]
2026-06-24 16:06:58 +08:00
XuqmGroup
821745de6b
fix(tenant-service): check-update nginx 版本读取报错
...
从运行容器的真实镜像读取版本标签,而非构造 registry/nginx:latest。
nginx 使用官方镜像(nginx:1.27-alpine),构造路径本地不存在导致 "no such object" 错误。
同时修复 docker inspect 错误退出码未判断的问题,避免将错误信息写入版本号字段。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 16:04:59 +08:00
XuqmGroup
93b1b41ede
fix(system-update): 修复 check-update 显示 "no such object" 及 bugcollect-service 无法被一键更新
...
1. readLocalServiceVersions() 改用 resolveServiceImageName() 获取完整
镜像名(含 registry 前缀),不再硬编码 "xuqmgroup/{svc}:latest"。
2. resolveServiceImageName() 通过 SERVICE_IMAGE_OVERRIDES 处理镜像名与
compose service 名不一致的例外(bugcollect-service → xuqm-bugcollect-service)。
3. 新增 SERVICE_COMPOSE_PROFILES 映射与 composeCmd() 辅助方法,为带
profile 的服务(bugcollect-service:bugcollect)自动注入 --profile 参数,
使 pull / up 命令能正常识别并更新这些服务。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 15:40:43 +08:00
Jenkins CI
1131a0c614
ci: bump xuqm-bugcollect-service=1.0.18 [skip ci]
2026-06-24 15:22:22 +08:00
XuqmGroup
a934abe7aa
fix(db): 修复 sourcemap 上传因唯一约束缺少 build_id 导致 HTTP 500
...
uk_map 约束为 (app_key, platform, app_version, bundle_name),未包含
build_id。Gradle 插件每次构建生成不同 buildId,服务端查不到记录后尝试
INSERT,触发 Duplicate entry 约束冲突返回 500。
V8 migration:删除旧约束,重建为
(app_key, platform, app_version, build_id, bundle_name)。
MySQL UNIQUE 对 NULL 视为不相等,历史 build_id=NULL 记录不受影响;
应用层已通过 findByBuildIdIsNull 防止 NULL 记录重复插入。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 15:19:03 +08:00
XuqmGroup
bb40b13189
fix: 修正 tenant-service bugcollect-api-url 默认值
...
SDK_BUGCOLLECT_API_URL 默认值从 https://dev.xuqinmin.com/api/bugcollect
改为 https://dev.xuqinmin.com/api 。
BugCollect SDK 的 LogUploader 会在 logApiUrl 后自动拼接
/bugcollect/v1/issues/batch,URL 中不应包含 /bugcollect 路径。
旧默认值导致最终请求路径变为 /api/bugcollect/bugcollect/v1/...(路径重复)。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 22:03:14 +08:00
XuqmGroup
e294d42dff
fix(bugcollect): 修复 V6 no-op 导致 build_id 列缺失引发的 502
...
V6 迁移原为空操作(SELECT 1),导致 log_issue_events 和 log_sourcemaps
表缺少 build_id 列,服务启动时 Hibernate schema 校验失败并持续重启。
- 重写 V6 为实际 DDL(ALTER TABLE ... ADD COLUMN build_id)
- 新增 V7 幂等修复迁移,使用条件预处理语句,对已有列的部署安全跳过
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 18:53:57 +08:00
XuqmGroup
ddaf2829cc
Merge remote-tracking branch 'origin/main'
2026-06-23 16:43:48 +08:00
XuqmGroup
028ebf4222
fix(file): 解决文件下载和时间戳处理问题
...
- 实现文件名扩展名推断逻辑,从URL路径自动提取并添加扩展名
- 添加下载错误处理和日志记录功能
- 在下载失败时显示错误通知而非成功通知
- 将服务器时间戳处理统一调整为CST(亚洲/上海)时区
- 更新sdk-core版本号至1.1.6-SNAPSHOT
2026-06-23 16:43:19 +08:00
Jenkins CI
3fe8ce87c7
ci: bump xuqm-bugcollect-service=1.0.17 [skip ci]
2026-06-23 12:09:13 +08:00
XuqmGroup
45ea8060b9
feat(sourcemap): 新增单条删除和全量裁剪接口,列表按上传时间倒序
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 11:56:40 +08:00
Jenkins CI
4c27eb2b97
ci: bump xuqm-bugcollect-service=1.0.16 [skip ci]
2026-06-23 11:42:41 +08:00
XuqmGroup
67f9b37fe8
fix(bugcollect): 新 issue 创建时漏插 log_issue_users 导致 affectedUsers 偏低
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 11:39:51 +08:00
XuqmGroup
d02cd10714
feat(sourcemap): 上传后自动裁剪,每版本保留最新 3 条,最多保留 5 个版本
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 11:39:21 +08:00