Commit Graph
57 Commits
Author SHA1 Message Date
yml2213 e7b3e46378 fix(cost-center): 归档历史人工商品且保留原始数据 2026-11-02 15:47:04 +08:00
yml2213 6bf28489e0 fix(finance): 重写履约路由迁移与统一渠道配置
重写 120/121 迁移,统一内部 SKU、渠道 id、config_json 和旧规则转换。

后台渠道配置改读统一渠道表,卡券与人工配置不再写旧规则。

增加安全渠道切换,并排除已关闭、失败或过期的历史任务载体。

按生产 119 基线重跑迁移、完整履约财务链路和严格预检。
2026-11-02 15:29:13 +08:00
yml2213 2f87445ed9 fix(finance): 收敛内部 SKU 履约路由与载体状态
统一内部 SKU 与渠道主/兜底解析,禁止并列主渠道。

运营指定渠道改为先创建真实载体,失败保持明确 pending。

历史缺载体、多载体冲突和自动发货兜底统一由管道修复。

迁移人工配置与旧 sku_code 规则,补充严格预检和集成测试。
2026-11-02 15:02:49 +08:00
yml2213 5fe33b0b46 feat(finance): 统一内部 SKU 驱动的履约与财务分流
- 新增 internal_sku_mappings / internal_sku_channels,平台字段统一映射到内部中文 SKU
- 下单入口按内部 SKU 渠道决策修正默认人工路由,自动发货补全 dash sku
- 财务 channel_assign 读取统一渠道表;卡券/人工能力兜底,自动发货/接单要求真实载体
- carrier reconciliation 自动补自动发货任务和接单工单
- pending 落明确原因:无内部 SKU / 无渠道能力 / 无履约载体
- 合并、重判、旧 sku_code 规则清理、部署后 preflight 核对脚本
- 待分类队列按内部 SKU 聚合并展示原因
2026-11-02 14:17:08 +08:00
yml2213 8da669b1fd fix(finance): 卡券商品补内部 SKU 规则,待分类自动分流
- 自动创建 tpv: 商品时补渠道能力和 internal_sku 规则
- 迁移 116 为已存在的卡券商品回填内部 SKU 规则
- 同内部中文 SKU 的待分类订单自动进入第三方卡券
2026-11-02 13:36:37 +08:00
yml2213 3c4c81003f feat(finance): 商品渠道能力、自动发货转人工与成本异常收口
- 商品可同时支持自动发货/人工,新增渠道能力与成本冲销字段
- 卡券缺商品时按内部中文 SKU 自动建 tpv: 商品并补渠道规则
- 自动发货失败转人工并冲销原渠道成本
- 配置成本后按最早缺失订单生效并立即补算、关闭异常
- tpv: 商品来源计入第三方卡券
2026-11-02 13:17:15 +08:00
yml2213 eb5c18b5b5 refactor(finance): 清理 legacy_platform 的展示与死查询
- 未归一组统计默认渠道补上 third_party_voucher,移除已无数据的 legacy_platform
- 前端移除历史归档/历史平台的类型与标签
- 保留后端口径的 legacy_platform→archived 筛选别名,旧链接不报错
2026-11-01 17:32:18 +08:00
yml2213 8391912bda perf(finance): 管道增量索引与异常批量入队
生产副本 42 万单压测发现:
- carrier_missing 查询在 26 万条上 15s 超时 → 改 anti-join,异常去重改批量
- 缺成本异常逐条 3 条 SQL,12 万人工单会跑几十分钟 → 按 scope 批量入队
- 新增 117/118 部分索引,成本快照/人工挂配置/载体检查走 id 顺序扫描
- 人工挂配置查询改为按配置 SKU 数组过滤,避免全量人工单排序
2026-11-01 16:22:52 +08:00
yml2213 5d7904f6ee fix(finance): 历史订单退款不再进入新财务口径
- 断代前 archived 订单的退款只保留业务记录,不再生成冲减事实/总账
- 退款后的事实与费用重算只针对非归档订单
- 移除 refund_adjustment 渠道值的前端筛选与标签
- 迁移 116 的列约束保留,不再写入该值
2026-11-01 16:22:49 +08:00
yml2213 fd6d2d561b feat(pipeline): 渠道判定后立即归一商品并算成本
- 新增按订单项定向归一,避免新判定订单等冷通道
- 判定/指定渠道后立即归一 → 算成本 → 按业务日回填事实与总账
- 提取 refreshFactsForDates 供管道与渠道服务复用
2026-11-01 15:21:53 +08:00
yml2213 9e154cb16d fix(cost): 派生费用可随退款重算,成本版本与基线禁止追溯
- 平台费/支付费允许 estimated→estimated 按净收入重算;采购与打手报酬保持固化
- 创建成本版本时拒绝早于当前时间的 effectiveFrom
- 已有快照后禁止导入价格基线;基线生效时间改为当前
- 删除基线导入中前移现有版本生效时间的逻辑
2026-11-01 15:21:50 +08:00
yml2213 ceb786f32e fix(cost-center): 禁止追溯改价,改价只能当前或未来生效
- 后端统一校验:retroactive 请求直接拒绝,effectiveFrom 早于当前时间拒绝
- 去掉「追溯至历史订单」入口,改价只影响之后的新订单
- 历史订单成本与成交价由快照固化,不再受改价影响
2026-11-01 14:53:25 +08:00
yml2213 fed459c7aa fix(cost): 历史订单成本固化,只有预估→实际允许升级
- 已有快照不再因成本版本变更而替换,历史订单成交价与成本保持固定
- 仅接单平台「预估 → 实际」履约结算允许 supersede
- 补配价格只影响没有快照的订单;文档同步口径
2026-11-01 14:53:11 +08:00
yml2213 fca836eb4b feat(cost-center): 卡券商品创建即生成渠道规则,补齐成本项预设
- 新建 tpv: 商品时自动写 third_party_voucher 规则,避免新卡券 SKU 停在待分类
- 成本项预设新增「第三方卡券采购成本」
2026-11-01 14:46:14 +08:00
yml2213 624c0ef4af feat(finance): 历史订单退款按退款日入账
- 迁移 116 新增 refund_adjustment 渠道值,并允许该类行净收入为负
- 销售事实按退款日聚合 archived 订单的已确认退款,写冲减行
- 退款后同时回填原销售日与退款日的事实与总账
- 退款同时重算相关订单项的费用快照(比例费按净收入)
- 前端渠道筛选与标签支持「历史退款冲减」
2026-11-01 14:46:11 +08:00
yml2213 cf0d600c7d fix(cost): 快照新单优先、费用口径与回填健壮性
- 成本快照拆热/冷双通道:新单走热通道分钟级入账,历史项冷通道轮询重算
- 通用成本只允许平台费/支付费自动全量,售后损失/其他必须按商品配置
- 比例费用按扣除已确认退款后的净收入计算
- 已入账 actual 快照不再被后续预估覆盖
- 受影响日期超过 31 天时按整段重算,不再静默丢弃;关账跳过会提示
- 通用费用解析不到时计数告警;已入队的成本缺失不再重复 upsert
- 快照替换与写入放入同一事务,避免事实任务读到空窗
2026-11-01 14:46:08 +08:00
yml2213 a62f6e1ec8 fix(pipeline): 变更按业务日回填,异常自动收口,载体管道加游标
- 渠道判定/成本快照返回受影响业务日,任务按日重算事实与总账
- 人工配置或载体补齐后,manual_config_missing / carrier_missing 自动关闭
- carrier_dispatch 使用水位游标,避免每轮从 id=0 重扫
2026-10-31 20:41:43 +08:00
yml2213 42d5874411 fix(cost): 快照变更即重算,0 元占位视为缺失,通用成本入账
- 预估→实际、补配价格时 supersede 旧快照再写新行,不再一次写死
- 全局 0 元版本不产生快照,转入 cost_missing
- 比例成本按 rate_bps 计算,费率为 0 视为未配置
- 平台费/支付费/售后等通用成本模型按渠道+通用各写一条快照
2026-10-31 20:41:38 +08:00
yml2213 6cd6401eca refactor(finance)!: 事实维度与接口字段统一改名 channel
- migration 114 将 sales_daily_facts.fulfillment_mode 重命名为 channel
- DTO/查询参数/前端类型从 fulfillmentMode 统一为 channel
- 成本中心类型 FulfillmentMode 更名为 FulfillmentChannel,并补齐卡券/待分类/归档取值
- 销售事实响应分组改为 byChannel
2026-10-31 20:26:15 +08:00
yml2213 657e49f324 perf(pipeline): 已入队的异常不再重复 upsert,未映射只算已定渠道
- 载体/人工配置/人工成本三类扫描跳过已有未解决异常的订单项
- 成本中心「未映射订单项」只统计 assigned,待分类单归履约队列
2026-10-31 20:26:10 +08:00
yml2213 d979ef50d6 perf(pipeline): 订单项管道改用水位游标并只扫缺失
- 新增 watermark-store:统一读写游标/日水位/失败原因
- 渠道判定、商品归一、成本快照从上次游标继续,到表尾后回绕重试
- 成本快照只处理没有有效快照的订单项,避免每 5 分钟全量重扫
2026-10-31 20:17:33 +08:00
yml2213 ce775ca102 feat(cost-center): 第三方卡券渠道完整接入成本模型
- 商品来源筛选补 tpv: 前缀,卡券商品列表不再为空
- 成本模型新增 third_party_voucher_cost,覆盖预览/成本项/概览作用域
- 前后端成本模型枚举与下拉同步
2026-10-31 20:17:28 +08:00
yml2213 f4e0c47744 feat(cost-center): 第三方卡券渠道归一与采购价配置
- 归一新增 tpv:<SKU> 直达,卡券单无需手工映射
- 成本配置/总览/异常支持 third_party_voucher 与 archived 维度
- 新增卡券采购价面板,写入 sys_third_party_voucher_cost
- 修正 man: 商品改价误用不存在的 sys_manual_cost
2026-10-31 19:52:32 +08:00
yml2213 0ce3c8fa97 feat(fulfillment): 渠道联动与管道兜底
- 人工配置保存/删除同步渠道规则,人工确认写 channel/status
- 按 SKU 指定渠道默认同时落规则
- 管道补充:载体缺失、人工成本未记录、事实与总账按水位追赶
2026-10-31 19:52:22 +08:00
yml2213 65b7f4f9dc refactor(finance)!: 强制渠道模型,移除旧履约方式与同步链路
- 删除 fulfillment_mode 相关的旧同步/回填链路与定时任务
- 删除 cost_finance_sync、成本快照同步、人工商品归一等遗留服务
- 迁移 113 直接删除 order_items.fulfillment_mode 及其索引约束
- 断代脚本自带归档步骤,不再依赖独立回填脚本
- 退款/事实/总账统一走渠道版销售事实
2026-10-31 19:52:03 +08:00
yml2213 2ba2656d58 feat(finance): 商品归一按接单模板/人工配置直接命中,减少手工映射
- 接单平台:用工单的 product_rule_id → tpl:<rule_key> 直接归一,不再依赖渠道映射
- 人工渠道:直接使用人工 SKU 配置里指定的商品
- 成本中心「未映射订单项」排除断代归档行,避免断代后仍显示历史未映射量
2026-10-31 19:05:02 +08:00
yml2213 3b0cfbb8fa feat(finance): 商品归一、成本快照与渠道销售事实三条管道
- 商品归一统一为一个匹配器,禁止自动建商品,未命中进未归一队列
- 成本快照收敛为唯一入口:商品/规则/全局版本解析,工单验收自动升级 actual
- 异常改为 SKU 级聚合,补齐后自动关闭
- 销售事实按渠道汇总,pending 收入进 unclassified 桶,归档不进报表
2026-10-31 18:12:13 +08:00
yml2213 fb485f7e36 feat(risk-control): 新增 IP/账号手动封禁,并收口财务同步的全表更新
- 风控:worker_risk_bans 表 + 前置封禁中间件(登录一并拦截)+ 后台列表/新增/解封
- 财务:成本快照补商品维度收口到本批 order_item_id,不再整表扫 899MB 的 order_items
- 性能:order_items 覆盖索引(迁移 110)、大厅 pageSize 上限 20、已读/上传接口限流
2026-10-30 20:15:14 +08:00
yml2213 dc78dc92d1 feat(cost-center): 接单模板商品全量同步,改价默认立即生效 2026-10-29 21:44:29 +08:00
yml2213 16b62a8e6d fix(cost-center): 修复接单模板改价 SQL 参数类型推断冲突
同一个 $1 在 reward_amount 处按 bigint 推断,在 CASE ... THEN $1 ELSE 0 处
因字面量 0 被推断成 integer,node-pg 不发送参数类型时 PostgreSQL 直接报
inconsistent types deduced for parameter $1,导致改价 500。
显式写成 $1::bigint / 0::bigint,并补源码级回归测试。
2026-10-29 14:38:20 +08:00
yml2213 915ce017f3 perf(finance): 消除定时同步与后台页面的重查询
- 新增 order_items.manual_sku_key 生成列(迁移 106),统一内部 SKU 口径(skuNick → outSkuSn → sku_code → sku_name,去空格)
- 人工渠道匹配 8.4s → 62ms;人工商品归一写回 7.0s → 307ms
- 销售事实重算改为物化订单集合 + 预聚合成本/退款,6.9s → 0.5s 内
- 成本异常写入去掉逐项 LATERAL 工单探测,收口按最近 7 天窗口,7–8s → 0.5s 内
- 销售毛利订单统计去掉重复 NOT EXISTS,9.4s → 0.4s
- 接单平台店铺下拉改 EXISTS 半连接,3.1s → 0.3s
- cost-finance-sync 默认间隔 5 分钟 → 15 分钟;完整同步 51.2s → 34.9s
2026-10-28 13:41:11 +08:00
yml2213 9d5af359fa feat(finance): 完成财务控制、L1 钱包硬化与迁移收敛
- P0/P1:影子总账追加调整、关账/退款/资金/积分幂等、成本版本追溯、对账订单项维度
- 迁移收敛:原 103–114 合并为 103_finance_foundation、104_finance_controls、105_work_order_consignment
- 数据:L1 钱包 BIGINT/CHECK/奖励幂等;重复奖励审计口径修正与人工核对清单
- 报表:销售毛利缺失成本收入提示,旧收支页明确现金流口径
- 文档:同步迁移基线、合并评估、代码复核与上线说明
2026-10-27 16:08:16 +08:00
yml2213 2b967ddd4c feat(cost-center): 商品初始化/回填增加时间范围,默认最近 30 天
- 接单模板初始化预览/执行支持 dateFrom/dateTo,只使用范围内工单证据;
  范围外模板不再先建商品
- 按工单回填商品支持时间范围;人工商品归一 UI 传时间范围
- 模板初始化重置只清理范围内导入映射/订单项,避免误伤范围外数据
- 初始化/回填默认最近 30 天,自动发货仍固定 30 天
- 文档更新初始化口径与页面操作
2026-10-26 16:26:48 +08:00
yml2213 25012c30f4 perf(cost-center): 商品页跳过无关 affiliate 聚合并补部分索引 2026-10-26 16:04:52 +08:00
yml2213 a3e2bdb7c4 feat(finance): 人工成本单事务/幂等 + 配置自动匹配 + 缺成本监控
- 确认履约改为单事务:锁订单项 → 复查快照 → 扣积分/备用金 → 写成本快照;
  快照失败整体回滚,不再出现「钱扣了、成本没记」
- manual_case 的 subject_id 统一为 order_item_id,新增订单项级唯一索引(迁移 111),
  消除 manual_expenses.id / platform_credit_entries.id 跨表撞车
- 人工 SKU 匹配增加 sku_code / sku_name 兜底;保存配置立即回填最近 30 天,
  定时任务按窗口 rematch,确认时再按 SKU 兜底匹配
- 新增 manual_cost_missing 异常队列:从首次人工配置起算,确认履约立即收口
- 补单元测试与真实 PostgreSQL 集成测试(并发、重复、强制快照失败回滚、双资金链路)
- 校准财务文档并新增上线初始化/验收手册(历史人工不补录,只保证配置后的新单)

验证:backend typecheck/lint/format/check:sql/test 843(839 pass / 4 skip);
frontend typecheck/lint/test 172;迁移 111 在 scratch 库全量执行 + 重跑幂等。
2026-10-26 13:04:51 +08:00
yml2213 73908119dc style(backend): 修复 4 个文件的 Prettier 格式告警
仅按仓库 Prettier 规则换行/去多余空行,无逻辑变更:
- routes/admin/cost-center-catalog.ts
- services/cost-center/affiliate-dash-prices-baseline.ts
- services/cost-center/affiliate-product-service.ts
- services/cost-center/product-catalog-service.ts

验证:backend format:check / typecheck / lint / check:sql 通过,
tests 833 pass(3 skipped);frontend format:check 通过。
2026-10-26 12:13:08 +08:00
yml2213 12f370de15 feat(cost-center): 将统计与自动发货同步统一收敛至最近一个月并自愈历史非标SKU
- 范围收敛:将财务日期范围默认窗口、自动发货履约任务扫描、成本快照重算及定时任务默认窗口统一收敛为最近一个月(30 天),不再扫描混乱的历史遗留数据
- 脏数据清洗与自愈:在自动发货同步与基线导入时自动识别并清理历史把中文名当做 SKU 插入的 21 个非标脏商品,将关联的 116 个订单项平滑重定向至标准 38 款基线商品
- 标准提取:从履约任务 context_json 中按优先级提取标准上游 sku,通过正则仅允许合规英数标识符入库,避免中文名称污染商品目录
- 界面对齐:前端销售毛利概览默认查询最近 30 天,自动发货与目录改价追溯生效时间默认设置为近一个月(30 天前)
- 验证方式:全量单测 783 项通过、tsc 0 error、容器内执行同步后脏商品归零且销售事实精准重算
2026-10-25 16:24:50 +08:00
yml2213 e61d003342 fix(cost-center): 将自动发货价格基线转为内建常量并修复参数类型
- 提取并内建 38 条自动发货采购成本基线常量,消除生产镜像缺失 scripts 目录的 ENOENT 问题
- 在 jsonb_build_object 中增加 $5::text 类型显式强转,避免 Postgres 参数类型推断错误
- 增加同生效日期的版本就地更新逻辑,保障基线可重复无损导入
- 验证方式:npm run typecheck、npm test、生产镜像容器内真实触发导入接口返回 200
2026-10-25 16:03:16 +08:00
yml2213 b7ad69831a feat(cost-center): 统一商品成本中心为全系统唯一标准价格源并闭环改价与工单同步
- 核心架构:将商品与成本中心确立为全系统唯一标准价格源,接单模板价格在接单平台禁止编辑并提示收敛至成本中心,后端 saveAdminWorkProductRule 严格拦截价格篡改
- 改价与同步:标准商品目录与自动发货专属面板提供统一改价弹窗,支持追溯/立即生效/指定时间;改价后自动或手动将新价格同步至接单大厅待抢单工单,保持下游业务一致
- 缺陷修复:修复 cost_versions 追溯改价时因同生效时间违反 chk_cost_versions_period 检查约束及 uq_cost_versions_scope 唯一索引冲突的问题,采用 active 版本就地更新机制
- 分类树优化:工单二级分类树限定仅在工单来源展示,自动发货与人工客服彻底隐藏分类树并重置过滤条件
- 验证方式:通过后端 784 项全量测试、前后端 tsc 类型检查及前端生产构建打包
2026-10-25 15:21:34 +08:00
yml2213 88ba87efff feat(cost-center): 总览统计支持按来源收敛
页面顶部的 6 张统计卡原本是全局口径:选了「自动发货」,商品数还是 2017、
异常数还是 108,314,和下面的列表对不上。

- overview 接口接受 scope(all / affiliate_dash / work_order / manual);
- 商品、映射、成本项、生效版本、待处理异常、未映射订单项全部按来源过滤:
  商品看 canonical_sku 前缀(aff: / tpl:+wo: / man:),
  成本项与版本看 cost_model,异常与未映射订单项看 order_items.fulfillment_mode;
- 额外返回 productTotalCount(全局商品数),供「全部」徽标使用,
  避免切到单一来源后「全部」也被算成 49。

实测四种口径:
  all            商品 2017 / 映射 4897 / 成本项 3 / 版本 712 / 异常 108314 / 未映射 53901
  affiliate_dash 商品   49 / 映射    0 / 成本项 1 / 版本   0 / 异常  53204 / 未映射     0
  work_order     商品  773 / 映射 4897 / 成本项 1 / 版本 711 / 异常   1209 / 未映射     0
  manual         商品 1195 / 映射    0 / 成本项 1 / 版本   1 / 异常      0 / 未映射     0
2026-10-25 13:55:25 +08:00
yml2213 d90c066888 feat(cost-center): 成本异常 60 天归档
cost_exceptions 只增不减:本地快照 260,253 行(resolved 151,939 / open 108,314),
已处理的行只是审计痕迹,留在热表会拖慢「状态 + 时间」分页,并让唯一索引持续膨胀。

- 迁移 108:新增 cost_exceptions_archive(保留原 id 与时间字段,加 archived_at),
  热表补部分索引 idx_cost_exceptions_archivable
  (COALESCE(resolved_at, created_at)) WHERE status <> 'open',让每日任务不扫全表;
- cost-exception-archive-service:只归档 status <> 'open' 且超期的行,每批 1000 行,
  DELETE ... RETURNING + INSERT 在同一语句内完成,单批原子,不存在「删了没归档」;
- data-retention 每日任务接入;保留期走 COST_EXCEPTION_RETENTION_DAYS(默认 60);
- 新增 npm run cost-exceptions:archive(--dry-run / --days / --batch-size)。

为什么 open 行不归档:open 是待办队列,超期不等于已解决,归档等于把问题藏起来。

验证:
- 3 条 resolved 回拨到 90 天前 → 归档 3 条,热表 resolved 151,939 → 151,936;
- 1 条 open 回拨到 90 天前 → 仍在热表,未被归档;
- 归档表保留原 id 与时间,archived_at 记录归档时刻;
- 恢复测试数据后计数回到 151,939 / 108,314。
2026-10-25 12:09:20 +08:00
yml2213 fcd9b607d4 refactor(cost-center): 共享层按职责拆为四个模块
cost-center-shared.ts 804 行同时装枚举、行类型、映射、归一化,任何一处改动都会
让 8 个引用方重新编译。按职责拆开,本文件退化为统一出口(export *):

- cost-center-constants.ts    131  枚举、常量、SQL 片段
- cost-center-types.ts        220  行结构与 DTO 类型
- cost-center-mappers.ts      250  行映射与口径判断(含 CostPreview)
- cost-center-normalizers.ts  254  入参归一化与断言

同时消掉一个类型环:CostPreview 用 ReturnType<typeof mapProduct> 反推 mapper 的
返回类型,导致 types → mappers → types 互指;CostPreview 随 mapper 一起放进
mappers,依赖恢复单向。

出口保持向后兼容,8 个引用方无需改动;71 个导出逐一比对无缺失。
验证:typecheck / lint / 773 测试通过。
2026-10-25 12:02:36 +08:00
yml2213 f10fefc303 refactor(cost-center): 拆分模板引导与成本解析服务
两个千行级服务按「变化原因」拆开,函数体逐字保留:

template-bootstrap-service.ts 1407 行 →
  - template-bootstrap-service.ts   745  preview/apply、映射计划、模板商品编码
  - affiliate-product-service.ts    199  自动发货商品同步与 SKU 回填
  - work-order-product-service.ts   467  接单平台商品回填与模板发单金额同步

cost-definition-service.ts 1382 行 →
  - cost-definition-service.ts      727  成本项/成本版本/成本异常 CRUD
  - cost-resolution-service.ts      680  预览、解析上下文、快照生成

依赖方向是单向的:CRUD 依赖解析层的 4 个校验/取值函数,解析层不反向依赖;
rebuildFactsForRange 因跨文件复用改为导出。

验证:9 个导出函数全部保留(无丢失),typecheck / lint / 773 测试通过。
2026-10-25 11:49:27 +08:00
yml2213 7824170d3c fix(finance): 支持生产快照升级并修复成本回填
修复生产 101 到 112 的迁移兼容问题;接单商品回填改为分批执行;修正未验收工单成本快照的 order_id/order_item_id 映射;更新本地生产快照数据基线。
2026-10-25 11:10:33 +08:00
yml2213 faf56e567e feat(finance): P2 手动退款登记与成本异常闭环
- 迁移 112:order_refunds(订单项级退款,整单拆多条共享 batch_no,source/external_ref 预留平台 API)+ cost_exceptions.resolution_note
- 新服务 order-refund-service:整单/指定商品退款、可退金额校验、撤销、全额退完同步 pay_status
- 销售事实改为按有效退款记录冲减;无记录时仍兼容 pay_status=refunded 的历史全额退款
- 订单详情新增退款登记与退款记录表,商品明细显示收入/已退/可退
- 全额退款自动关闭该订单项成本异常并写处理备注;成本异常处理改为带备注弹窗
- 财务事件 UNION 接入退款记录,文档同步 P2 状态与 API
2026-10-24 17:18:51 +08:00
yml2213 a78cc1f984 feat(finance): P1 人工商品归一,按内部 SKU 生成 man 商品并回填
- 新服务 manual-product-normalization-service:skuNick → outSkuSn → sku_code 兜底,按内部 SKU 生成 man:<sku> 商品
- 订单项按 id 分批(2 万/批)回填,避免 15s 语句超时;同步补齐人工成本快照的商品维度
- 新增 POST /cost-center/manual-products/normalize(支持 dryRun/日期窗口),成本中心「标准商品」加「归一人工商品」按钮
- 每日 cost_finance_sync 接入最近 N 天的增量归一
- 渠道映射未归一队列增加人工单提示:人工单不能用平台 sku_code 建映射
- 文档同步:P1 标记完成,补充归一接口契约与销售事实重算结果
2026-10-24 16:54:55 +08:00
yml2213 e5122d116a feat(cost-center): 渠道映射改为诊断优先,新增未归一队列
- 顶部统计卡:标准商品 / 映射 / 未归一订单项 / 未归一 SKU 组
- 新增「未归一」队列:按来源+店铺+平台SKU+履约方式聚合,行内建映射并预填
- 目录表从 7 列精简到 4 列,匹配方式移入展开明细
- 回填订单项后自动把已归一的 product_mapping_missing 异常收口
- 新增 /cost-center/mappings/diagnostics 与 /mappings/unmapped,按履约方式拆分聚合避免全表扫描
2026-10-24 16:36:16 +08:00
yml2213 956ef5d695 refactor(cost-center): 精简成本中心,人工成本以 SKU 配置为唯一真源
- 删除「成本项目」「成本版本」「成本预览」三个 Tab:成本项只有 3 条系统内置,版本金额只是快照挂载点
- 新增只读「发单价格」面板,仅在接单平台来源显示,改价仍走接单模板后同步
- 成本预览改为弹窗,从成本异常行和订单详情「查成本」进入;人工单显示 SKU 配置成本并禁止生成快照
- 成本异常新增按原因聚合摘要接口,列表支持 reason/since 筛选,默认只看近 24 小时
- 迁移 111:把 sys_manual_service 的历史 ¥88 全局版本清零;预估同步与成本缺失判定排除 manual_actual
2026-10-24 16:07:25 +08:00
yml2213 a96229a106 feat(finance): 完善客服钱包与人工履约成本流水 2026-10-24 14:34:28 +08:00
yml2213andClaude Opus 4.5 0a743f00b1 feat(finance): 客服端「我的备用金」改为「我的钱包」,四平台并列
客服原来只能看到备用金现金,平台积分藏在 Tab 里且是空的。
现在四个钱包并列展示:南航积分 / 乐玩积分 / ROCK 积分 / 备用金现金。

后端:
- 客服查询积分账户时自动补建三个空账户,保证四个钱包始终并列展示,
  不会出现「点了没反应」的空白卡片。

前端:
- 标题「我的备用金」→「我的钱包」,菜单同步改名。
- 顶部四张卡:三个积分平台各一张(显示积分余额 + 折合金额 + 换算率标签),
  备用金现金一张。余额为 0 时置灰。
- 四个钱包卡片与备用金账户解耦:没开通备用金账户的客服也能看到积分钱包,
  只是现金卡显示「尚未开通备用金账户」。
- Tab 调整为「积分流水 / 备用金流水 / 我的支出」,积分流水独立展示
  (平台、类型、变动、余额、折合金额、备注、时间)。
- 备用金账户详情卡(账户编号、责任主管、状态、登记支出、缴回备用金)
  仍然只在有账户时显示。

校验:后端 765 项 / 0 失败,前端 143 项全通过(含 lint、tsc -b、build)。

Co-Authored-By: Claude Opus 4.5 (1M context) <noreply@anthropic.com>
2026-10-24 13:36:38 +08:00