Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
fly_moon_payment fly_moon_payment
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 6
    • Merge requests 6
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

已经迁移到新的代码仓库,使用飞书登录 https://gitlab.deeplink.media/

  • Administrator
  • fly_moon_paymentfly_moon_payment
  • Merge requests
  • !87

Merged
Created May 20, 2026 by 吴成琦@HugoMaintainer3 of 3 tasks completed3/3 tasks

fix(api): bump flymoon-payment-api 1.0.20260520 + enum-by-name serialization (LES-1184)

  • Overview 0
  • Commits 2
  • Changes 4

背景

Trial 用户在 SIT 上调 /agent/points/info 接口返回 500。根因:5/13 在 fly_moon_payment 加了 SubscriptionTypeEnum.trial(ordinal 2),但没 bump flymoon-payment-api 版本号 / 没重新发布 jar,fly_moon_agent(consumer)拉的还是 5/8 的 1.0.20260508,反序列化 ordinal=2 直接抛 No enum ordinal SubscriptionTypeEnum.2,所有读 AgentUserPointsVO / AgentSubscriptionVO 等含此枚举字段的 Dubbo 返回 VO 的 agent 端接口都会 500,首屏必调的 /agent/points/info 一定踩。

详情见 LES-1184 评论 d8a427ec LES-1184 → 跳转。

改动清单

  • flymoon-payment-api/pom.xml — <version> 1.0.20260508 → 1.0.20260520
  • flymoon-payment-api/.../enums/SubscriptionTypeEnum.java — 加 @JSONType(serializeFeatures = JSONWriter.Feature.WriteEnumsUsingName),wire 从 ordinal 切到名字
  • flymoon-payment-provider/pom.xml — flymoon-payment-api.version 同步抬到 1.0.20260520
  • flymoon-payment-provider/src/test/.../SubscriptionTypeEnumSerializationTest.java — 新增 4 个 case 钉住按名序列化(含 VO 端到端 roundtrip),防止之后再次回退

根因分析

  • Bug 表现:trial 用户调 /sit-api/agent/points/info → 500,agent pod 抛 org.apache.dubbo.rpc.RpcException: StatusRpcException: INTERNAL : Deserialize response failed ... fastjson2.JSONException: No enum ordinal com.flymoon.payment.api.domain.enums.SubscriptionTypeEnum.2
  • 触发条件:用户 agent_subscription.current_subscription_type='trial'(即买过 7 天体验套餐),任意 Dubbo 调用返回含 SubscriptionTypeEnum 字段的 VO
  • 根因位置:flymoon-payment-api/pom.xml:8 — version 一直停在 1.0.20260508(5/13 加枚举值的 commit 814bcd3 漏 bump)
  • 修复方案:
    1. 抬 api 版本号到 1.0.20260520,CI publish 到 Nexus 后 consumer 重新构建就能拿到含 trial 的新 jar
    2. 在 enum 上加 @JSONType(WriteEnumsUsingName) 全局按名序列化,wire 从 2 变成 "trial"。fastjson2 默认会按名解析字符串 enum,所以即使下次再有新枚举值漏 bump,老 consumer 收到的会是清晰的 No enum constant ... newvalue,不是诡异 ordinal 错误。
  • 影响评估:
    • 兼容性:本 MR 是 wire 格式破坏性变更(int→string)。fly_moon_agent 必须配套抬版本号到 1.0.20260520 才能正确解析新 wire;否则老 jar 读到 "trial" 会抛 No enum constant(依旧 500,但语义更清晰),不会读到错误的 monthly/annually。
    • 部署顺序硬约束:必须先发布 payment-api 1.0.20260520 到 Nexus,再 build fly_moon_agent(见下方"线下验证 / 部署顺序")。

测试

  • mvn -B test (flymoon-payment-provider) — 141/141 通过,含新增的 SubscriptionTypeEnumSerializationTest 4 个 case
  • 本地 mvn -B install 出 flymoon-payment-api-1.0.20260520.jar,flymoon-payment-provider 用新 api 编译通过
  • fly_moon_agent 用本地新 api jar 编译通过(验证消费侧不会报 cannot find symbol)

线下验证 / 部署顺序

部署顺序硬依赖(请 Archiver 把控):

  1. 合本 MR 到 sit_0519 → Jenkins 构建 fly_moon_payment → CI publish flymoon-payment-api-1.0.20260520 到 Nexus(如果 Jenkins job 没有 mvn deploy step,需手动 mvn deploy -pl flymoon-payment-api -am 或加一个 publish step)
  2. 配套 MR:fly_moon_agent 同 task-id 分支 agent/claude-opus-4-7/2fc134(已开,见 fly_moon_agent!new)合入 sit_0519 → Jenkins 构建 fly_moon_agent → pull 新 jar → 部署 S1
  3. 验证:trial 用户调 /sit-api/agent/points/info 200,能正常看到积分

由于跨仓库部署顺序敏感(payment 必须先 publish jar),未在本 MR 内单独触发 Jenkins,等 Archiver 统一调度。

  • 测试 URL:https://s1.jennie.im/find(trial 用户登录后访问)
  • 触发用户:initial1wu+free@gmail.com(LES-1184 报告者)

相关

  • Issue: LES-1184 [http://multica.deeplink.media/-/issues/420221d2-ed21-4950-8b91-71038d96b8e1]
  • 配套 MR: fly_moon_agent 同分支 agent/claude-opus-4-7/2fc134
  • Agent-Task-Id: 20260520-2fc134
Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: agent/claude-opus-4-7/2fc134