hailin
d223671db7
fix(ledger): 分享收益筛选支持多类型(REWARD_TO_SETTLEABLE + REWARD_PENDING)
...
后端 entryType 筛选支持逗号分隔多值,前端"分享收益"同时查询两种类型,
解决未认种时收到的 REWARD_PENDING 分享权益在筛选中丢失的问题。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:02:08 -08:00
hailin
e4a2a0e37a
feat(ledger): 流水明细显示来源用户ID + 统计兼容历史批量转换数据
...
- wallet_service.dart: LedgerEntry 新增 sourceAccountFromMemo 从 memo 提取来源用户
- ledger_detail_page.dart: 流水列表项显示"来自 Dxxx"金色文字
- ledger_detail_page.dart: 权益详情弹窗添加来源用户行和备注行
- wallet-application.service.ts: 统计/趋势保留 memo 兼容历史批量转换记录
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:41:11 -08:00
hailin
d876dd1591
fix(wallet): 区分直接入账和批量转换的 REWARD_TO_SETTLEABLE
...
新增 REWARD_PENDING_CONVERTED 类型用于批量转换(待领取→可结算),
REWARD_TO_SETTLEABLE 保留给直接入账(hasPlanted=true时的新收入)。
统计排除:REWARD_PENDING_CONVERTED + REWARD_SETTLED(状态转换)
统计计入:REWARD_PENDING + REWARD_TO_SETTLEABLE(首次入账)
已迁移7条历史数据的 entry_type。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:30:47 -08:00
hailin
31e6f9e15a
fix(mobile): 预种可结算列表以wallet实际金额为准,避免已结算条目残留
...
planting-service 的分配记录不跟踪 wallet 端的结算状态,
原来的反向排除法(排除PENDING+EXPIRED)无法处理:
1. 已结算到余额(SETTLED→余额)的条目
2. hasPlanted=true 后直接进可结算、不经 pending_rewards 的条目
改为以 walletInfo.rewards.settleableUsdt 为权威来源:
- settleableUsdt=0 时直接跳过(已全部结算到余额)
- settleableUsdt>0 时按金额截断,确保展示总额不超过实际可结算
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:19:31 -08:00
hailin
eba125901c
fix(wallet): 统计排除 REWARD_SETTLED 避免三重计入
...
奖励流水三阶段 REWARD_PENDING → REWARD_TO_SETTLEABLE → REWARD_SETTLED
是同一笔钱的状态转换,只在 REWARD_PENDING 阶段计入收入。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:07:22 -08:00
hailin
b905e8cb23
fix(wallet): 统计概览排除 REWARD_TO_SETTLEABLE 避免重复计入
...
REWARD_PENDING(入账) 和 REWARD_TO_SETTLEABLE(状态转换) 是同一笔收入
的两个阶段,统计时只应计入 REWARD_PENDING,排除 REWARD_TO_SETTLEABLE。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:01:36 -08:00
hailin
ecaaf68a27
fix(wallet): settle 时清除 pending_expire_at 避免残留倒计时
...
settleUserPendingRewards 全量结算后 pendingUsdt=0,
但 pendingExpireAt 未清除导致 API 仍返回过期时间。
与 expirePendingReward/claimRewards 行为保持一致。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:52:19 -08:00
hailin
8e52535dd9
feat(mobile): 预种明细显示来源用户ID + 修复空待领取倒计时
...
1. 预种待领取/可结算明细的 memo 中追加来源用户(如"来自D26022600016的预种")
2. 修复 pendingUsdt=0 时倒计时仍然显示的问题(pending_expire_at 未清除时兜底)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:48:34 -08:00
hailin
b13d873f64
feat(mobile): 流水明细中 REWARD_PENDING 标注"已转可结算"
...
用户购买预种后 hasPlanted=true,所有 PENDING 奖励转为 SETTLED,
此时流水中历史的 REWARD_PENDING 条目追加"(已转可结算)"标注,
避免用户误以为还有未领取的奖励。仅在 pendingUsdt=0 时显示。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:15:18 -08:00
hailin
d849ca7bc2
fix(wallet): getPendingRewards 只返回 PENDING 状态记录
...
之前 getPendingRewards 没有传 status 过滤参数,返回了所有状态
(包括 SETTLED 和 EXPIRED)的记录,导致前端误将已结算的预种条目
显示在待领取列表中。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:07:31 -08:00
hailin
718e70e61a
fix(pre-planting): 修复 settleAfterPrePlanting 响应解包(TransformInterceptor)
...
wallet-service 的 TransformInterceptor 会将响应包装为 { data: {...} },
需要从 response.data.data 中提取实际数据,与 allocatePrePlantingFunds 一致。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 08:57:45 -08:00
hailin
722c124cc9
feat(pre-planting): 预种购买后自动触发待领取→可结算转换
...
购买预种份额后,planting-service 调用 wallet-service 新增的内部 API,
将用户标记为 hasPlanted=true 并结算所有 PENDING 奖励为 SETTLED。
纯新增代码,不修改任何现有方法逻辑,两步均幂等,失败不阻塞购买流程。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 08:51:03 -08:00
hailin
e9b9896317
fix(mobile): 修复预种可结算列表与金额不一致
...
问题:pre-planting/my-rewards 返回所有分配记录不区分状态,
导致 PENDING 状态的预种奖励也被错误地显示在可结算列表中,
而可结算金额(从 wallet-service 取值)正确为 0,造成列表和金额不一致。
修复:在合并预种可结算列表时,排除正在 PENDING 和 EXPIRED 状态的条目。
通过 wallet/pending-rewards 和 wallet/expired-rewards 获取实际状态,
用 sourceOrderId 交叉比对,只保留真正可结算的预种条目。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 08:24:03 -08:00
hailin
4996c1d110
feat(mobile): profile页待领取/可结算/已过期列表统一显示预种数据
...
变更概要:
- wallet_service.dart: 新增 WalletPendingRewardItem 模型和 getWalletPendingRewards() 方法
调用 GET /wallet/pending-rewards 获取 wallet-service 的待领取奖励列表
- profile_page.dart: 合并预种待领取奖励到列表中
从 wallet-service 待领取列表中筛选 PPL 前缀的预种条目,转换为 PendingRewardItem
与 reward-service 的正常认种待领取统一展示
- profile_page.dart: 已过期列表标记预种条目
wallet-service GET /wallet/expired-rewards 已包含预种过期记录,
渲染时通过 sourceOrderId.startsWith('PPL') 动态添加 [预种] 前缀
- profile_page.dart: 所有汇总金额统一从 wallet-service 取值
_pendingUsdt / _expiredUsdt / _remainingSeconds 改为从 walletInfo.rewards 读取,
wallet_accounts 包含正常认种 + 预种,是唯一的 source of truth
技术说明:
- 后端零改动,仅前端变更(零风险)
- 预种条目通过订单号 PPL 前缀与正常认种区分,避免重复显示
- 所有预种条目在卡片上显示 [预种] 前缀,方便用户区分来源
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 07:52:02 -08:00
hailin
27cd72fe01
feat(pre-planting): 预种可结算收益结算 + 前端可结算金额修正
...
背景:
预种奖励通过 planting-service → wallet-service allocateFunds 链路
直接写入 wallet_accounts.settleable_usdt,不经过 reward-service。
因此 reward-service 的一键结算(settleToBalance)无法覆盖预种部分,
且 reward-service 的 summary.settleableUsdt 不包含预种金额。
改动:
1. wallet-service 新增 POST /wallet/settle-pre-planting 端点
- 将 wallet 中剩余的 settleable_usdt 转入 available 余额
- settleable_usdt=0 时幂等跳过,不创建空流水
- 流水备注标注 [预种],payloadJson.source='pre-planting'
2. mobile-app 兑换页(trading_page):
- 可结算金额改为从 wallet-service 的 wallet.rewards.settleableUsdt 取值
(包含正常认种 + 预种的可结算部分,是唯一的 source of truth)
- 一键结算流程改为两步串行:
先调 reward-service settleToBalance(正常认种,不动现有逻辑),
再调 wallet-service settle-pre-planting(预种部分,纯增量)
3. mobile-app 我的页(profile_page):
- 并行加载新增 walletService.getMyWallet() 调用
- _settleableUsdt 改为从 wallet.rewards.settleableUsdt 取值
不涉及的系统:
- reward-service:零改动
- planting-service:零改动
- wallet-service 现有结算逻辑:零改动
- admin-web:零改动
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 07:33:53 -08:00
hailin
05e590ef04
fix(pre-planting): 修复可结算收益重复计算
...
pre-planting getMyRewards API 错误地将所有分配记录金额算作
settleableUsdt(包括 PENDING 状态的待领取奖励)。
预种奖励的 PENDING/SETTLEABLE 状态由 wallet-service 管理,
reward-service 的 getMyRewardSummary 已包含预种可结算部分,
不应重复累加。
修复:
- 后端 getMyRewards 返回 settleableUsdt: 0
- 前端"我"页面和"兑换"页面不再额外加预种 settleableUsdt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 03:34:22 -08:00
hailin
d1be7173be
fix(admin-web): 引荐树节点点击导航到用户详情页
...
setTreeRootUser 只更新树不更新页面顶部信息,导致数据不同步。
改为 router.push 导航,页面整体刷新保持一致。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 03:13:42 -08:00
hailin
cf07712a8c
fix(mobile): 兑换页可结算收益聚合正常认种+预种金额
...
之前只显示正常认种的 settleableUsdt,未包含预种收益,
导致有预种收益但显示"暂无可结算收益"。
现在并行获取两者并累加,与"我"页面保持一致。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 03:11:13 -08:00
hailin
5392c47e47
fix(admin-web): 引荐关系树节点点击切换为该节点为根显示
...
点击节点后以该节点为根重新加载树,显示其祖先链和一级下线。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 03:00:45 -08:00
hailin
e715fd2504
fix(admin-web): 引荐关系树节点点击跳转到用户详情页
...
之前点击只切换树根节点,不导航。改为 router.push 跳转。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:55:56 -08:00
hailin
292c6518ba
fix(admin-web): 隐藏钱包流水表格的类型和关联订单列
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:49:59 -08:00
hailin
0ac131a3b7
fix(admin-web): 钱包流水表格备注列显示不全
...
各列均为 flex:1 等宽导致备注内容被 ellipsis 截断,
调整各列 flex 比例并允许备注列换行显示完整文本。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:41:31 -08:00
hailin
1157760d4d
fix(pre-planting): 补充社区/省团队/市团队 API 缺失的 treeCount 参数
...
三个接口调用时未传 treeCount,导致 authorization-service 收到
Number(undefined)=NaN,addMonthlyTrees(NaN) 使字段变为 NaN,
Prisma upsert 报 PrismaClientValidationError。
修复:全部传 treeCount=0(预种不计入月度考核),
省团队补充 provinceCode,市团队补充 cityCode,
同时修正社区/团队接口返回格式为 distributions 数组。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:30:35 -08:00
hailin
e32658fc5e
fix(pre-planting): 修复 authorization-service 响应包装格式解析
...
authorization-service 全局 TransformInterceptor 将响应包装为
{ success, data: T, timestamp },预种客户端需读取 response.data.data
而非 response.data。此前因解析失败静默 fallback 到系统账户。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:22:01 -08:00
hailin
a15a4a97b1
fix(docker): 为 planting-service 添加 AUTHORIZATION_SERVICE_URL 环境变量
...
planting-service 缺少 AUTHORIZATION_SERVICE_URL 配置,
默认回退到 http://localhost:3006,在容器内无法访问 authorization-service,
导致所有授权分配请求失败走 fallback。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:15:23 -08:00
hailin
d880242807
fix(pre-planting): 修复 authorization-service API 路径错误
...
预种 client 使用 /internal/authorization/... 但 authorization-service
全局前缀为 api/v1,实际路由是 /api/v1/authorization/...。
路径不对导致所有请求 404 → catch → fallback → 全部进系统账户。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:04:09 -08:00
hailin
530aeb2a6f
feat(authorization): 新增行政区划代码↔中文名映射表,修复省市公司查询不到的问题
...
authorization_roles表的regionCode存储格式不一致(有中文名"北京"、"广东省"也有数字代码"110100"),
但查询时统一传入6位数字代码,导致findProvinceCompanyByRegion/findCityCompanyByRegion永远返回null。
新增 RegionCodeResolver 静态映射表(34个省+333个地级市),
将精确匹配 regionCode = provinceCode 改为多形式匹配 regionCode IN (所有可能形式)。
此修复同时影响正常认种和预种的省区域/市区域/省团队/市团队权益分配。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:41:48 -08:00
hailin
b9ddda2532
fix(pre-planting): 修复省市代码格式不一致导致授权分配失败
...
预种DTO接收2位省代码(如"44")和4位市代码(如"4401"),
但authorization-service需要6位标准格式(如"440000"/"440100")。
- resolveAllocations中新增padEnd(6,'0')标准化转换
- fallback系统账户生成从padStart改为padEnd(右补零)
- 正常认种不受影响(SelectProvinceCityDto直接接收6位格式)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:23:55 -08:00
hailin
3be7b47678
feat(pre-planting+mobile): 预种奖励在"我"页面展示
...
## 问题
预种奖励直接走 planting-service → wallet-service,绕过 reward-service,
导致前端"我"页面读 reward-service 的 summary/settleable 数据时看不到预种奖励。
## 方案
前端同时读 reward-service(正常认种)和 planting-service(预种),合并展示。
## 后端(planting-service)
- PrePlantingRewardEntryRepository: 新增 findByRecipientAccountSequence() 方法,
按收款方账户查询预种奖励记录(注入 PrismaService 替代事务 client)
- PrePlantingController: 新增 GET /pre-planting/my-rewards 端点,
返回当前用户作为收款方收到的预种奖励汇总+明细列表
格式与 reward-service 的 settleable 对齐(id, rightType, usdtAmount, sourceOrderNo 等)
## 前端(Flutter mobile-app)
- PrePlantingService: 新增 getMyRewards() 方法 + PrePlantingMyRewards/PrePlantingRewardItem 数据类
- profile_page.dart: 并行调用 prePlantingService.getMyRewards(),
将预种奖励转为 SettleableRewardItem 合并到可结算列表,
summary.settleableUsdt 也加上预种金额
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 22:03:53 -08:00
hailin
f32748c1d5
fix(pre-planting): 修复推荐链 API 调用的 URL 路径和返回格式解析
...
1. URL: /referrals/:id/chain → /referral/chain/:id(与正常认种对齐)
2. 返回格式: 正确解析 { ancestors: [{accountSequence, hasPlanted}] }
之前错误期望 { directReferrer: {...} },导致有推荐人也被当成无推荐人
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 21:39:07 -08:00
hailin
545e897c1f
fix(pre-planting): 预种省/市区域 API 传 treeCount=0,不计入考核
...
预种 1 份 = 1/5 棵树,如果将 portionCount 作为 treeCount 传给
authorization-service,会导致省/市公司月度考核进度被多算 5 倍。
修正:传 treeCount=0,预种阶段不累计考核棵数。
等 5 份合成 1 棵完整树后,由合成流程负责累计 1 棵的考核进度。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:57:27 -08:00
hailin
1c71cda2ec
fix(pre-planting): 修复省/市区域权益分配的三个 bug
...
问题:
1. 省/市区域 API 调用缺少必需的 treeCount 参数,导致 authorization-service
报错,每次都走 fallback 路径
2. fallback 路径没有对省/市代码做 padStart(6,'0') 补位,
生成了错误的账户ID(如 944 而非 9440000,84401 而非 8440100)
3. API 返回格式解析错误:authorization-service 返回
{ distributions: [{accountSequence, ...}] },但预种客户端错误地期望
{ accountSequence: string },导致取到 undefined
修复:
- getProvinceAreaDistribution / getCityAreaDistribution 新增 portionCount 参数
- 正确解析 distributions 数组,优先取非系统账户(省/市公司)
- fallback 中使用 padStart(6,'0') 确保 7 位标准账户 ID 格式
- resolveAllocations 调用时传入 portionCount
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:53:12 -08:00
hailin
6a659ca718
feat(admin-web): 省/市区域账户添加点击查看明细功能
...
RegionAccountsSection 新增:
- 每行添加"查看明细"按钮,点击展开该账户分类账流水
- 明细表包含 时间/类型/金额/余额/来源账户/来源备注/备注 7列
- 复用 getAllLedger API 的 provinceAccountsLedger/cityAccountsLedger 数据
- 行点击和按钮点击均可展开/收起
- 新增 clickableRow/selectedRow CSS 样式
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:37:12 -08:00
hailin
bf50810830
feat(wallet+admin-web): 系统账户流水增加来源用户账户和来源备注列
...
问题:系统账户(S0000000001等)、省/市区域/团队账户的流水明细
只显示 allocationType 英文标识,无法追溯是哪个用户的认种产生的。
解决方案:从 wallet_ledger_entries.payload_json.metadata 中提取
sourceAccountSequence 和 memo 字段,通过 API 返回给前端展示。
后端 wallet-service 改动:
- LedgerEntryDTO 新增 sourceAccountSequence / sourceMemo 两个可选字段
- 新增 extractPayloadInfo() 辅助函数统一从 payloadJson 提取信息
- 替换所有 5 处 LedgerEntryDTO 映射,使用 extractPayloadInfo()
- 向后兼容:旧记录无 metadata 时返回 null,不影响已有功能
前端 admin-web 改动:
- LedgerEntryDTO 类型新增 sourceAccountSequence / sourceMemo 字段
- 固定账户明细表格和分类账明细表格增加"来源账户"和"来源备注"列
- 新增 .sourceAccount 样式(等宽字体显示账户序列号)
数据来源说明:
- 正常认种:reward-service 传入 metadata 含完整中文 memo 和 sourceAccountSequence
- 预种:planting-service 传入 metadata 含 sourceAccountSequence 和中文 memo
- 历史记录(2026-01-04前):metadata 可能为空,显示为"-"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:22:40 -08:00
hailin
90fad63fed
fix(wallet): 优化流水memo避免正常认种来源信息重复
...
正常认种的 reward-service memo 已含"来自用户Dxxx的认种",
增加 hasSourceInfo 检查,包含"来自"时不再重复拼接来源账户。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:10:09 -08:00
hailin
299c82fc4f
fix(wallet): 流水备注增加来源用户AccountSequence和订单号
...
所有分配类型(系统账户/区域账户/用户钱包/社区权益)的流水 memo
从原来的纯英文标识改为:中文描述 | 来源: 账户序列号 (订单号)
例: [预种] 预种成本费 | 来源: D26022600000 (PPLMM6670DO9VETGK)
修改方法:
- 新增 buildAllocationMemo() 统一从 metadata 中提取 memo/sourceAccountSequence
- 替换 allocateToSystemAccount/allocateToUserWallet/allocateCommunityRight/allocateToRegionAccount 中的 memo 生成
- 兼容无 metadata 的历史调用(回退到 allocationType 英文标识)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:08:52 -08:00
hailin
05aacc0d5b
fix(admin-web): 系统账户流水备注列显示完整内容
...
移除 .memo 的 max-width/overflow/ellipsis/nowrap 截断样式,
改为 word-break: break-word 自动换行,确保备注全文可见。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:55:45 -08:00
hailin
19fca05a81
fix(pre-planting): 预种权益分配metadata与正常认种对齐 + 删除retry-rewards
...
1. executeAllocations() metadata 修复:
- 原:仅传 { source: 'PRE_PLANTING' },wallet流水缺失所有业务信息
- 现:传完整 metadata(rightType, sourceOrderNo, sourceAccountSequence,
treeCount, provinceCode, cityCode, memo),与正常认种 reward-service 一致
- wallet-service 的 prePlantingPrefix() 通过 metadata.source 添加[预种]前缀
2. SHARE_RIGHT PENDING 机制说明(无代码变更):
- 预种侧只确定收款人,全部标记 SETTLED 发给 wallet-service
- wallet-service.allocateToUserWallet() 内部根据收款方 hasPlanted 判断:
已种→SETTLEABLE / 未种→PENDING(24h过期归总部)
- 与正常认种走同一套 wallet-service 代码
3. 删除无用的 retry-rewards 端点及其 WalletServiceClient 依赖
不涉及历史数据修改,不影响正常认种流程。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:27:16 -08:00
hailin
d9c238702e
feat(pre-planting): 预种权益流水备注添加[预种]前缀
...
wallet-service 新增 prePlantingPrefix 私有方法,
当 FundAllocationItem.metadata.source === 'PRE_PLANTING' 时,
在流水 memo 中添加 "[预种] " 前缀,使用户可区分预种与普通认种权益。
仅影响 pre-planting 新增的分配流水,不修改任何普通认种 memo。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 12:34:01 -08:00
hailin
1d0e4352df
fix(pre-planting): 修复预种权益资金分配字段名错误(allocationType 丢失)
...
原 executeAllocations 使用了错误的 FundAllocationItem 字段名:
- targetAccountId → 应为 targetId
- 缺少 allocationType 字段
- targetType 错误地使用了 rightType 值而非 'USER'|'SYSTEM'
导致所有预种订单的 SHARE_RIGHT/COMMUNITY_RIGHT 等权益分配静默失败,
资金未能分配到推荐人/社区/省市账户,同时流水明细中也不显示预种记录。
修复内容:
1. WalletServiceClient 新增 allocatePrePlantingFunds 方法(使用正确格式)
2. executeAllocations 改用新方法,正确设置 targetType/targetId/allocationType
3. InternalPrePlantingController 新增 POST /admin/retry-rewards 历史数据修复端点
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 12:29:03 -08:00
hailin
62bbbca609
Revert "fix(ledger): REWARD_EXPIRED条目显示权益类型+已过期标签"
...
This reverts commit 4bd40970d0 .
2026-02-28 12:04:07 -08:00
hailin
4bd40970d0
fix(ledger): REWARD_EXPIRED条目显示权益类型+已过期标签
...
- 奖励过期条目显示具体权益名(分享权益/省团队权益等)+ 红色"已过期"标签
- 图标改为灰色 timer_off,金额文字改为灰色,背景微灰
- 与正常权益收入条目有明显视觉区分
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 12:01:36 -08:00
hailin
724fb08be4
fix(contribution): 发布过期份额同步事件 + 管理后台/挖矿app状态显示
...
- contribution-service: swapContributionForMerge 作废旧份额记录后,
立即发布 ContributionRecordSynced outbox 事件(isExpired=true),
mining-admin-service 收到后 upsert syncedContributionRecord
- mining-admin-web: 算力记录状态列改为绿色"有效"/红色"无效"
- mining-app: 贡献值记录卡片始终显示有效/无效状态标签
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 11:35:55 -08:00
hailin
a904c8bd42
feat(ledger): 预种份额在流水明细中显示合并合同下载按钮
...
- 移除硬编码"预种无合同"逻辑
- PPL 份额点击详情时,查找是否有对应的已签署合并记录
- 有签署合同则显示查看/下载按钮,调用预种合并合同 PDF 接口
- 同时新增 _viewMergeContractPdf / _downloadMergeContractPdf 方法
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 11:19:27 -08:00
hailin
1431c89684
fix(pre-planting): Decimal -> Number in totalAmount reduce
2026-02-28 11:01:37 -08:00
hailin
cd73b2dec4
fix(pre-planting): 签署合同前检查实名认证 + 修正合同金额
...
- getMergeContractPdf: KYC 为 null 时返回 400,不允许查看合同
- getMergeContractPdf: 从源订单汇总实际绿积分金额,CNY = 绿积分 × 1.1
- Flutter: KYC 错误时显示专用提示 + "去完成实名认证" 按钮
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 10:59:26 -08:00
hailin
b1e5e6b29f
feat(pre-planting): 合并合同走完整签署流程(PDF展示+手写签名)
...
- planting-service: 新增 GET /merges/:mergeNo/contract-pdf 接口,复用现有 PDF 模板
- planting-service: PrePlantingApplicationService 注入 PdfGeneratorService/IdentityServiceClient
- pre_planting_service.dart: 新增 downloadMergeContractPdf,signMergeContract 简化返回值
- 新建 PrePlantingMergeSigningPage:PDF展示→滚动到底→确认法律效力→手写签名→提交
- pending_contracts_page: 合并卡片点击跳签名页(prePlantingMergeSigning)
- pre_planting_merge_detail_page: 签署按钮跳签名页,移除直接调用逻辑
- 新增路由 /pre-planting/merge-signing/:mergeNo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 10:35:22 -08:00
hailin
2ad1936126
fix(pre-planting): 合并详情页 USDT 改为绿积分
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 10:17:12 -08:00
hailin
b17bf82443
feat(pre-planting): 新增 GET /merges/:mergeNo 合并详情接口
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 10:07:53 -08:00
hailin
7bad0a8935
fix(pre-planting): 修复编译错误(getMerges→getMyMerges、RoutePaths 缺失导入、Future.wait 类型)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 10:00:17 -08:00