适用源码:
9da0beb8e8fdad85f50d7039408c3d98494e91c7;内容核实:2026-11-02。
开发状态:本文列举能力有源码证据;设计状态:未决规则单列;验证状态:仅定向源码核对,未执行自动测试或实服验收。默认值不代表生产配置。文档获准发布不表示技术问题已经解决。
分层与数据
命令/市场 Dialog → MarketApi、CommandMarketApi → ItemService、OrderService、OrderExecutionService → SQLite 仓储;外部经济由 EconomyHook 委托 Vault。玩家背包操作需要玩家区域线程,跨玩家调度仍须专项核验。
| 表 | 职责 | 状态边界 |
|---|---|---|
| market_items | 普通材质托管批次 | STORED/LISTED/SOLD/REMOVED,不保存装备完整数据 |
| market_orders | 方向、限价、剩余量、托管额与创建区块 | 订单成交状态不等于外部交付最终状态 |
| market_trades | 成交量、货款、运费、参与方和时间 | 是审计信息,不是外部支付成功凭证 |
| market_mailbox | 物品暂存 | PENDING/CLAIMED |
| market_payouts | 失败付款补发与尝试次数 | PENDING/PAID |
SqliteDatabase 同步管理连接,transaction 显式 commit/rollback。成交订单更新和 trade 保存共用 SQL 事务,卖单扣托管物,买单扣托管金额;Vault、背包和玩家存档不在该事务中。
生命周期与正常路径
创建卖单依赖归属本人且可用的 STORED 批次;买单预扣数量×单价。订单由 OPEN 变为 PARTIAL/FILLED,可取消为 CANCELLED;EXPIRED 枚举本身不证明完整到期退款流程。创建 clientRequestId 预查及数据库 UNIQUE 有去重作用,不能扩展为支付和交付的全链幂等。
购买卖单检查可成交、非本人、库存、空间和余额,处理买家货款与物品、订单及托管扣减、成交记录和卖家款项。向买单出售检查卖家物品、买单预算和费用,处理物品交接、托管扣减、成交和卖家净额。
费用、权限与暂存
DeliveryPricing:免费半径内为零,超出后 n×完整区块欧氏距离×k;跨世界采用固定距离。默认 r=3、k=0.2、D=400,不代表生产参数。卖单买家支付货款加运费;买单卖家承担运费,净额为负需要差额支付。
CommandMarketApi 对取消/改价检查订单归属,ItemService 取回检查批次归属及 STORED 状态;管理员命令权限不等于可任意操作他人资产。邮箱按本人加载和容量逐条领取,付款失败可进入持久补发任务。
异常恢复的现状与开发约束
现有 SQL 回滚、补偿调用、条件状态更新、补发队列、尝试次数及日志真实存在;当前外部资金、背包、玩家存档和 SQL 的一致性尚无完整验证保证。不能把一个 SQLException 或界面失败直接当作所有副作用都没有发生,也不能把某项 PENDING 当作无条件重复支付或发货授权。
部分异常的可靠恢复、未知结果处理、支付/交付幂等和跨区域线程行为仍待完善与验证。具体故障窗口和注入步骤保留在内部技术报告,本公开页不提供复现或手改资产方案。开发时需保留请求、订单、成交与后续义务关联;任何新恢复协议先在隔离环境验证,禁止直接试改生产数据。
验证与来源
本轮未运行市场回归或实服验收。后续验证应分别记录 SQL、外部账户、已保存玩家物品及未决义务,检查并发、断线、关闭和重启;不能用启动成功证明资金安全。
代码根 folia_plugin/src/main/java/com/flrv/:logic/market/service/MarketOrderExecutionService.java#executeSellOrder/executeBuyOrder、MarketOrderService.java、MarketMailboxService.java、MarketPayoutService.java(同目录)、logic/market/api/CommandMarketApi.java、logic/market/DeliveryPricing.java、infrastructure/persistence/market/及infrastructure/persistence/SqliteDatabase.java。
阅读:玩家市场指南、持久化边界、线程约束。