主题
租车功能补全实施清单
目标:除暂不开通押金外,补齐平台、商户网页版、商户小程序及用户小程序的租车经营闭环。
范围与不变量
- 押金保持关闭,不创建新的租车押金支付或冻结记录,不开放用户押金操作。
- 保留先付款、后平台派车的直订模式;明确等待期限和无法履约全额退款。
- 保留按日期差计算基础租金的规则,并在付款前明确展示,不暗中更改历史价格。
- 覆盖车型直订和平台自营活动租车两条链路。
- 涉及退款、交车、库存、结算的操作必须有服务端权限、状态和并发校验。
- 额外费用需要明细、证据、用户确认和独立支付;争议进入平台处理,不自动扣款。
- 不执行生产部署、不使用真实支付或退款来测试。
实施与验收
状态说明:未开始、进行中、待验证、已验证。只有代码及相应验收证据齐备才能标记已验证。
| 编号 | 工作项 | 状态 | 验收要求 |
|---|---|---|---|
| A1 | 取消并退款与撤回重派分离 | 待验证 | 服务端已分离接口、退款幂等键和撤回重派;仍需真实隔离库验证退款队列失败恢复 |
| A2 | 退款与交还车互斥、并发状态迁移 | 待验证 | 已实现订单先锁、派单后锁、退款阻断、商户归属校验和验车状态保护;仍需数据库并发验证 |
| A3 | 精确时间车辆占用 | 待验证 | 已按预约时刻做重叠和逾期占用判断,并保留车辆锁;差价付款预留及共享占用检查已接入本人确认入口,受默认关闭的收款开关保护,到期不直接释放;仍需隔离库并发场景验证 |
| A4 | 实际履约阶段投影与三端展示 | 待验证 | 已补齐 car_rental 的指派、接单、用车、还车待确认状态及订单详情投影;三端真机/浏览器仍需验收 |
| A5 | 活动租车预约入口和服务端校验 | 进行中 | 已接通单明细活动预约及退款成功释放未交车派单;历史未配置权益、活动有效期/日期差价和复杂套餐仍需补齐 |
| A6 | 增值服务和验车资料三端明细 | 进行中 | 已补商户网页版增值服务分成、验车照片预览及必填校验;平台、用户、小程序的资料展示仍需逐项验收 |
| A7 | 派单、重派、取消、到期提醒 | 进行中 | 已复用商户通知队列处理指派、撤回及取消;取还车和费用/售后不可变通知已接入重试、租约隔离及三端入口;变更申请/处理/撤回、报价/商户意见/旧版替代和零差额生效通知保留;原车正差额新增本人确认、已付款、已关单、取消释放、付费生效、退款预备/处理中/失败/人工核查、退款结果待对账及核实全退通知,绑定实际处理事件,重复结果不重复入队;通知相关商户,消息只进入有权读取的详情,不启动付款或还车完成计时;通知任务及自动完成任务已补默认关闭、新建暂停保护,未启用;逾期、平台主动待办提醒及真实送达仍待补齐/验收 |
| A8 | 付款前退款政策、计费与人工派车说明 | 进行中 | 直订须知绑定退款版本及全文摘要,明确找车期限与还车自动完成规则;活动预约沿用已购退款快照并确认须知;活动购买前展示及微信真机仍待验收 |
| A9 | 逾期持续扫描、费用及独立支付 | 进行中 | 已实现累计扫描、商户举证报价、用户确认及独立支付,接入费用订单收入、受管微信履约队列及费用处理通知;自动政策报价、逾期提醒及真实资金/消息链路仍未验收 |
| A10 | 续租、改期、换车、提前还车 | 进行中 | 已接通四类申请、版本报价和相关商户核对,符合条件的零差额原车租期可由用户确认生效;原车正差额已有付费同意、独立订单/车辆预留、付款结果交接、生效与累计金额核对、原渠道全退及原号重试;已付生效/明确业务拒绝后退款准备、待付到期专用关单及独立释放协调保留,全部变更任务默认关闭;原退款/完成/结算/独立微信履约协调保留;三端只读差价进度区分付款、生效、关单、渠道已退和业务全退;微信预支付已有三阶段交接、持久原付款身份、固定渠道截止、未知提交严格关单及原渠道付款时间保留,严格查单和漏回调恢复已接入默认关闭的协调任务;本人专用确认/预支付/恢复/取消及用户差价付款页现支持纯微信、纯余额及余额加微信,所选渠道金额与动态约定留档,混合付款先预留余额、微信仅收余款,纯余额另行明确确认后原子扣账,原请求跨页面恢复保留余额金额;新增原车正差额资金、付费生效及退款阶段通知,待付款/待生效/渠道结果/业务全退不混淆;专用收款开关默认false,两条通用差价收款保护保留;三端累计账单已有只读实现及本地验证,见A10b;长期未知渠道/异常资料人工核查恢复、主订单退款联动、换车分段交接及归还后早还差额仍未闭环,资金/数据库/通知真实验收尚未执行,不能认定四类变更全部完成 |
| A10b | 三端累计款项账单 | 待验证 | 原单、历次独立差价、额外费用及退款分渠道展示;未确认报价不算待付款,预留不算实付,待处理退款不提前冲减净额;待核实项隐藏累计金额,商户只读其履约相关款项且不当作商户收入。四端页面、模拟资金与权限测试通过,真实隔离读取、历史凭据及渠道对账仍待验收 |
| A10c | 未交车退订与已生效差价联动 | 待验证 | 主租车自动退订申请同事务生成每笔已生效正差价的独立退款申请,继承原购买政策,平台无法履约全退;绑定原付款及原渠道,重复申请返回原批次,中断恢复复用原退款记录,完成后保留历史生效及实际交接。支持部分退款、零金额退订和多次加价;三端账单与只读进度区分处理中、待核查和已处理。隔离MySQL迁移、关联约束、回滚及队列筛选已执行;完整服务并发、真实资金、已交车人工售后及复杂活动权益尚待验收或补齐 |
| A10d | 归还后提前还车核算 | 进行中 | 已接通实际还车依据绑定的申请、版本报价、商户核对和三端历史;原车及商户分配不变的零差额用户核算结案已接通。负差额新增内部授权生成、完整原付款/已生效正差价分摊、同意与逐笔原退款预备及处理中防撤回,专用原渠道退款底层保留;新增授权时固定商户收入依据、全部退款核实后调整冻结收入及原流水回执,保留原订单与成本。没有开放负差额用户接口/页面;完整协调任务、最终生效及进度、负差额历史累计、后续售后防重复扣减、已有减价/退款历史和异常凭据处理仍待补齐。未处理申请继续阻止订单完成,不将授权、退款或内部收入调整当作结案 |
| A11 | 油电、里程、损坏及违章费用、争议 | 进行中 | 已接通商户举证、付款前争议及再次确认;已付款售后已有独立留档、退款预备记录/原号重试、部分退款累计及收入冲减,三方页面与商户两端补充材料已接通;材料只追加并阻断旧裁定,支持原请求恢复;费用/售后变化通知及退款失败/人工核查通知已入队,平台沿用处理列表;关闭或异常渠道的后续处理、历史退款核实及真实环境验收尚未完成 |
| A12 | 驾驶资格核验、交接及协议确认 | 进行中 | 已补人工资格核验、取还车版本确认/异议、平台双类异议处理、商户两端完整交接历史、完成防绕过及取还车通知;修订绑定所见版本,平台不能代用户确认或代商户交车;完整租赁协议及真实环境验收仍未完成 |
| A13 | 自动完成、找车超时与任务配置 | 进行中 | 已补找车超时全退申请及分页任务;自动完成限定已确认新须知、提醒发送成功且无还车异议,异议后永久转为本人确认,沿用结算门槛;补正早期通知/自动完成任务默认启用的缺口:两个配置缺省false,尚未执行的V005新建任务为暂停,不更新已有任务或调度归属;真实通知、数据库并发、退款恢复及部署调度归属仍待验收 |
| A14 | 租车评价、回复及平台管理 | 待验证 | 已接通本人完成订单评价、匿名/图片、单单唯一及撤下、车型公开统计、商户两端一次回复、平台独立审核及留痕;本地测试通过,真实迁移/并发、权限、上传及微信真机仍待验收 |
| A15 | 商户小程序车队和日期报价维护 | 待验证 | 已实现本商户车辆增删改、停启用、照片及日期报价/停用管理,网页版补齐停启用和日期切换刷新;权限与数据保护测试通过,真机、真实上传及数据库并发仍待验收 |
| A16 | 押金关闭防护 | 待验证 | 租车主链及共用押金服务已阻断新建、冻结和扣除,车型非零押金配置被拒绝,用户端与新订单不展示或保存待收押金;保留历史查询/取消/退还,真实历史数据及部署入口联合验收待执行 |
| V1 | 后端单元与隔离数据库集成测试 | 待验证 | 当前全量2381项,2368通过、13项环境测试跳过,零失败/错误;本轮新增52项,包括44项收入/授权/退款/账本串联、2项Mapper及6项结算/完成回归。租车MySQL测试在本机临时库通过,V022重复迁移、专用收入回执约束、真实账本写入、未提交不可见和钱包/流水/完成标记同事务回滚已检查。完整授权、退款及业务状态机仍使用模拟持久化;真实MySQL证据不等于完整服务Spring事务、并发或历史业务升级验收。统计仅取最终全量日志,不累计旧测试报告 |
| V2 | 前端行为测试及浏览器检查 | 进行中 | App与MerchantApp当前412项Node测试全部通过,本轮重跑既有测试,未新增页面或前端测试。最近两套网页生产构建、模拟接口回归和320/390/768px编译WXML检查对应此前的零差额结案;本轮没有重跑网页构建或渲染。接口与原生控件使用替身,截图仅证明当时场景,不是微信真机、真实鉴权、资金、上传或消息验收 |
| V3 | 需求逐项完成审计及交付说明 | 进行中 | 已补《租车三端完整性复核_2026-09-17.md》,区分已有页面、业务闭环与真实验收,并附当前缺口和代码证据;剩余功能及外部验收未完成,不提前宣称全功能交付 |
当前记录
- 2026-09-16:重新检查工作区,业务代码仍为审查时版本;原审查报告保留。
- 本清单记录完整目标,后续分批实现不会缩小验收范围。
2026-09-16 本轮实现及验证
- 新增用户小程序
pages/car-rental/activity-booking页面及注册:加载本人已购权益,日期自动匹配已购天数,填写驾驶人、电话、取还车地址及预约时刻,防止重复提交。 - 平台商品通过
extAttrs.rentalDaysPerUnit显式设置每份租车天数;新订单保存车型、履约类型与租期快照。商品编辑不再误提交活动类型并触发活动价格校验。 - 预约服务先锁主订单,校验本人、已支付、退款阻断、已购天数及取还车资料。重复预约返回已有派单;下单后商品修改或删除不改变新订单快照权益。
- 列表按页批量读取派单阶段,订单详情识别团购等活动下的租车履约,保留原活动类型。用户详情隐藏内部结算金额,使用中的活动租车不再显示自助退款/券码动作。
- 商户网页版补充服务数量、分成及取还车/损坏照片预览,交还车缺少照片时在页面阻断。
- 完整 Maven 回归:1518 项,1505 通过、13 项环境测试跳过;测试进程使用临时 AES 密钥,未修改业务配置。最后一处支付后快照识别修改后,定向回归91项,90通过、1项真实 MySQL 测试跳过。
- 小程序 Node 测试12项通过,包含7项新增行为测试;并非微信真机验收。
- AdminWeb、MerchantWeb 生产构建通过。Playwright 浏览器流程通过:活动租期编辑、车辆创建编辑、移动端尺寸、派车、撤回、取消退款、接单、缺少照片拦截、交还车、结算及无车状态。上传控件和业务接口使用模拟数据,不代表真实上传、付款或退款验收。
- 浏览器证据存于 WSL
/tmp/xiedao-car-rental/;回归日志位于/tmp/xiedao-all-tests-keyed.log、/tmp/xiedao-activity-tests4.log。测试源码已保留,临时日志不是生产发布凭证。 - 尚未完成:历史活动权益补录、预约有效期与活动日期差价、套餐多资源租车、退款后的活动派单释放、续租改期换车、额外费用与争议、资格核验和交接确认、自动任务、评价、小程序车队及隔离数据库并发验收。全目标保持未完成。
2026-09-16 后续退款、逾期及付款须知补齐
- 公共新退款引擎和旧退款回调均接入
CarRentalRefundCleanupService,不再仅按订单活动类型释放派单。团购等活动租车在退款成功后也会取消尚未交车的派单,并记录事件及通知商户;订单锁先于派单锁,重复执行不重复写入取消事件。 - 财务退款不代表车辆已经归还:实际交车或使用中状态不被退款钩子改成已取消,保留真实车辆占用。已还车和已完成记录保留验收状态,同时继续清理历史押金;没有创建新押金或执行真实资金操作。
- 逾期扫描兼容
java.sql.Date,历史无时刻记录使用北京时间10:00;精确时刻优先,按累计逾期天数更新。写库限制为仍未还车的状态3/4且不降低累计天数,避免旧扫描结果改写已还车记录。此处只记录逾期,不生成或扣取费用。 - 后端及商户网页版、商户小程序允许状态4“还车中”继续验收还车,沿用里程与照片校验。
- 用户直订确认页展示生效退款提示、按日期差计费、付款后平台派车及无车全退说明。规则加载失败不提交,提交前重新加载;文案变化会清除之前的勾选确认。订单继续保存原有退款策略快照。尚未增加“用户所见政策版本与下单瞬间版本必须相同”的服务端绑定,也未完成微信真机验收,A8 保持进行中。
- 新增退款清理、旧回调、活动回调、历史押金、精确逾期边界及重复提交测试。SQL 测试解析实际 MyBatis 映射,确认只更新逾期字段及状态条件;这不是实际数据库并发验收。
- 全量 Maven 回归:1548项,1534通过、14项环境测试跳过;使用临时进程级 AES 密钥。最后兼容修正后的定向回归94项,93通过、1项真实MySQL测试跳过,0失败。
- App 与 MerchantApp 全部 Node 测试218项通过;商户网页版生产构建通过。平台/商户 Playwright 模拟接口流程通过,追加状态4还车场景;截图
merchant-overdue-return.png已检查。小程序规则区域只有逻辑和模板测试,没有原生渲染验收。 - 浏览器测试新增
MerchantWeb/tests/run-car-rental.browser.mjs,自动选择空闲端口并清理其启动的前端进程。WSL启动异常期间仅停止本任务的前端进程,未重启整个WSL、未停止其他项目服务。 - 本轮日志:WSL
/tmp/xiedao-rental-full-regression.log、/tmp/xiedao-rental-refund-overdue-final.log、/tmp/xiedao-mini-full6.log、/tmp/xiedao-rental-browser6.log。截图仍在/tmp/xiedao-car-rental/。未部署,未发起真实微信付款、退款、分账或上传。 - 活动退款释放已在代码和隔离测试层补齐;额外费用与争议流程本轮只检查了现有差价订单机制,没有声称已实现。其余未完成范围仍按A1–A16逐项保留,目标未完成。
2026-09-16 追加费用、付款前争议及结算衔接
- 新增
XdCarRentalCharge、CarRentalChargeService、对应Mapper与迁移V20260916_001__car_rental_charges.sql。支持逾期、油电、超里程、损坏、违章、其他费用,保存原始单价、数量、金额、说明和1至6张凭证;原始举证不可通过处理接口覆盖。 - 商户仅能对本商户已交车派单提议费用,退款中或不可用主订单不能追加。相同请求标识重复提交幂等,携带不同明细则拒绝;数据库增加请求唯一键、独立支付订单唯一键及处理事件表。商户不能撤回已接受或已付款的费用。
- 用户确认前核对所见金额,确认后创建独立
surcharge订单,不修改基础租金、主订单状态或新建押金。不接受费用可在付款前提交异议和凭证。平台只可维持或降低金额,免收进入终态,非零结果返回用户再次确认,不自动扣款。 - App、MerchantApp、MerchantWeb、AdminWeb均已接通费用入口。平台增加全局待处理争议及派单明细入口;用户可确认、付款、取消待付款、提交付款前异议和查看记录;商户可举证、撤回未接受费用和查看处理过程。
- 独立费用沿用现有支付处理,按实际出车商户记入应得收入并扣除现行支付手续费,不增加平台抽佣。隔离生命周期测试验证10000分费用对应60分手续费和9940分商户收入,仅完成费用订单,不完成租车主订单,重复任务不重复入账。
- 取消或超时关闭租车费用订单时,外部关单失败不得本地撤销并重新收费。支付和取消回调统一先锁费用订单、再锁业务关联及费用记录;确认和付款校验所属用户、金额及订单绑定。取消待付款返回待确认,已有退款成功回调可标记费用已退款,但这不等于已完成退款发起和争议退款流程。
- 核查发现主租车完成、独立费用付款都缺少受管微信履约触发。本轮将主租车确认完成及费用付款分别接入
WxTradeFulfillmentService的虚拟服务上报队列,沿用现有上传和重试任务,不直接调用真实微信接口。重复处理不重复入队,不回退已上报、已结算或关闭的记录;履约记录漏建时可在触发时补建。新增触发值保持在既有16字符字段范围内。 - 结算条件仍为业务完成、平台结算日期已到及微信已结算全部满足。本轮测试覆盖未上报不得放款、微信已结算但日期未到不得放款、条件齐备仅释放一次,以及履约队列写入失败不得继续完成和释放收入。未绕过任何资金条件。
- 平台和商户费用展开详情原先随宽表格溢出手机弹窗,现按可见表格宽度约束,平台表单使用上方标签;补充输入框、按钮边界断言并复查桌面/手机截图。列表列仍允许正常横向滚动。截图中的照片为本地测试图片,上传控件和接口为测试替身。
- 新增三端控制器调用身份及权限声明测试,保留服务端归属、状态、金额和幂等测试。这些是本地调用与声明检查,不代表已通过真实登录、网络网关或部署环境权限验收。
- 可选
CarRentalMysqlTest已扩充费用迁移重复执行、真实Mapper读写、请求唯一性、付款绑定唯一性、原始凭证不被覆盖和事件记录检查;只允许显式指定本机127.0.0.1的临时数据库,并在结束后清理。当前未提供该环境,本机无MySQL程序,Docker也未就绪,故未执行。 - 最终完整Maven回归1587项:1573通过、14项环境测试跳过,0失败、0错误;App和MerchantApp全部231项Node测试通过;AdminWeb、MerchantWeb生产构建通过;Playwright桌面/390px手机流程通过。测试使用临时进程级AES密钥,未修改业务配置。
- 最终日志:WSL
/tmp/xiedao-charge-final-regression.log、/tmp/xiedao-charge-final-mini.log、/tmp/xiedao-charge-browser-layout.log、/tmp/xiedao-charge-admin-final-build.log、/tmp/xiedao-charge-merchant-final-build.log。截图:/tmp/xiedao-car-rental/platform-charge-review.png、platform-charge-mobile.png、merchant-charge-proposed.png、merchant-charge-mobile.png。 - 仍未完成:已付款费用的异议、退款发起及部分退款对账;费用状态通知;逾期自动报价及用户所见政策版本绑定;历史已完成订单的履约队列补录、非受管历史微信支付上报;真实迁移、并发、支付、退款、上传及微信真机验收。本轮没有部署、真实资金操作或新增押金。A9、A11仍为进行中,其余A1–A16范围没有缩减。
2026-09-16 商户车队及报价维护补齐
- 商户小程序新增
pages/car-fleet/list、edit、calendar,从租车商户工作台“车队与报价”进入,使用与网页版相同的CAR_FLEET_MANAGE权限及/api/merchant/cars接口;没有复用专车司机的车辆绑定接口。 - 支持按车型/车牌/状态筛选、创建编辑车辆、最多6张车辆照片、启停用及确认删除。编辑已有车辆时允许保留已经下架的原车型,但不能新选下架车型;服务端只接受允许编辑的字段,不接受伪造的车辆ID、商户归属、状态或删除标记。
- 月历展示基础价、日期价及停用日期,支持单日和含首尾日期的批量设置,限制1至366天。金额校验为正整数分,停用日期不提交价格;提交前确认车辆、日期范围和价格。加载失败、上传中和重复点击不会继续保存。
- 服务端车辆更新和删除先获取与派车共用的车辆锁;有未完成派单时不能删除车辆或改变车型/车牌。停用不会取消已接订单。日期报价修改也先锁车辆;指派时在车辆锁后重新读取日历,避免使用等待期间已失效的可用状态。保留订单时间对应的历史报价,不把新报价覆盖到历史订单。
- 商户网页版新增车辆启停用;切换日期立即刷新并清空旧日历,较早请求晚返回时不能覆盖新日期。读取失败阻断保存,恢复后可继续操作,重复保存受保护。手机端报价弹窗收窄,双月日期选择器使用上下布局和纵向滚动。
- 完整 Maven 回归1600项:1586通过、14项环境测试跳过,0失败、0错误。App和MerchantApp共250项Node测试通过,其中车队新增19项。后端覆盖车辆归属、字段白名单、有效报价、车辆锁顺序、活动派单限制及日历当前读;这些不能替代真实数据库并发测试。
- 新增小程序页面使用已安装的微信WCC/WCSC编译器编译通过。浏览器检查使用实际编译的WXML/WXSS及浏览器替代控件,320/390/768px截图通过;车辆照片为测试图标,未执行真实上传,也没有声称微信运行时或真机已验收。
- 日志:WSL
/tmp/xiedao-fleet-full.log、/tmp/xiedao-fleet-mini-full.log、/tmp/xiedao-fleet-render.log。小程序截图位于/tmp/xiedao-car-rental-fleet/。未部署,未触发真实付款、退款、分账或押金操作。 - 最终商户网页版生产构建通过,日志
/tmp/xiedao-fleet-web-final-build2.log;最终平台/商户Playwright模拟接口流程通过,日志/tmp/xiedao-fleet-browser-final.log。新增启停用、日期切换、整数分保存、停用清价、失败恢复及旧请求晚返回场景。复查桌面/390px弹窗和展开的手机日期选择器截图,并断言月份上下排列、日期格宽度及页面边界。截图位于/tmp/xiedao-car-rental/merchant-fleet-*.png。工作区差异空白检查通过;原有商户开发服务http://localhost:8083返回200,未停止用户已有服务。 - A15代码和本地验收已补齐,仍等待微信真机、真实权限/上传及数据库并发验收,状态保留“待验证”。其他A1–A16缺口没有缩减,全目标仍未完成。
2026-09-16 预订须知版本绑定及押金入口防护
- 新增
CarRentalCheckoutTermsService和GET /api/app/car-rental/checkout-terms,集中提供日期差计费、付款后人工派车、无法履约全退、退款规则及押金关闭说明。返回生效退款版本和完整须知的SHA-256内容摘要,避免仅靠人工维护版本号判断文案是否变更。 - 下单新增必传的
bookingTermsAccepted、bookingTermsVersion、refundPolicyVersionId。未确认、缺少须知标识、旧退款版本及篡改/不匹配的全文摘要均不能下单;不为旧客户端静默补“已同意”。上线必须协调新用户小程序与API的发布,旧客户端需要更新,不能单独启用服务端强校验后宣称客户端兼容。 - 车型直订事务中先锁退款策略,使用与策略发布相同的锁顺序保持确认版本稳定;退款快照捕获再次使用确认版本进行校验。新订单明细保存完整须知、确认版本及服务端确认时间,退款快照继续保留原配置与哈希;历史订单不被改写。
- 小程序提交前刷新完整须知;版本号、退款版本或任一文案变化均清除勾选。规则缺失、读取失败或未确认不能提交;提交瞬间收到版本冲突时刷新须知并要求重新确认,不自动重试创单或支付。新增行为测试验证实际请求字段、版本相同但文案变化、并发点击、服务端冲突及失败恢复。
- 现有平台/商户/用户生命周期测试改为实际调用须知服务和退款快照服务,仅隔离持久化与外部资金接口。验证无确认时不写订单、展示版本与保存版本/文案一致、退款快照绑定一致;这是隔离测试,不是MySQL发布策略与下单的真实并发验收。
- 核查发现原租车履约主链虽不新建押金,共用
XdRentalDepositServiceImpl仍可被租物入口用于冻结历史租车记录。本轮在新建、冻结及扣除前按业务标记、实际订单类型、租车派单及已购商品快照识别租车并拒绝,关联订单缺失也拒绝写入。包含伪装成租物的直订租车和活动租车测试;普通租物押金流程保留。 - 平台车型编辑移除押金金额输入,提交时剔除历史金额;车型服务拒绝非零押金配置,新车型默认零。用户车型接口不返回可收取的历史押金金额,新租车订单记录
depositMode=disabled、depositAmountFen=0。用户旧详情跳转页的预授权提示也已移除。历史押金查询、取消、退还路径保留,没有执行真实资金操作。 - 最终完整Maven回归1622项:1608通过、14项环境测试跳过,0失败、0错误;App与MerchantApp全部255项Node测试通过。日志:WSL
/tmp/xiedao-rental-terms-final-regression.log、/tmp/xiedao-rental-no-deposit-mini.log。使用临时进程级AES密钥,未改业务配置。 - 微信WCC/WCSC编译通过;实际编译模板配合浏览器替代控件验证320/390/768px下正常、已确认、加载中、失败和长文案五种状态。日志
/tmp/xiedao-rental-terms-render.log,截图/tmp/xiedao-car-rental-checkout/。没有微信运行时或真机验收。 - AdminWeb生产构建及平台/商户Playwright模拟接口流程通过,增加历史非零押金车型编辑检查,确认押金无输入控件且保存不回传历史金额;复查桌面/390px截图。日志
/tmp/xiedao-rental-no-deposit-admin-build.log、/tmp/xiedao-rental-no-deposit-browser.log;截图/tmp/xiedao-car-rental/platform-model-no-deposit*.png。差异空白检查通过,原有平台开发服务8081返回200。 - 本轮未部署、未进行真实支付/退款/分账。须知的具体找车等待期限仍需与A13自动任务一起补齐;活动购买/预约的确认、真实策略发布并发、历史押金数据及实际网络权限仍待验收。A8保持进行中,A16为待验证,完整目标仍未完成。
2026-09-16 找车期限、活动预约须知及超时任务
CarRentalCheckoutTermsService新增可配置的找车等待时长,默认1440分钟(24小时),允许1至10080分钟。直订从订单付款时间起算,活动租车从提交预约起算,截止均不得晚于预约取车时刻;以车行接单为找车成功。时长和完整说明参与须知摘要,配置或文案变化后必须重新确认,不影响已经保存的订单规则。- 直订付款回调读取已确认的订单明细快照,以订单保存的付款时间计算期限,不以异步履约任务执行时间重新起算;重复回调不重设期限。没有确认过找车期限的历史订单保持空值,不追溯自动取消。缺少必要时间或损坏的新规则快照会拒绝继续生成期限,交由原有付款后任务重试/人工排查。
- 活动预约信息返回购买时已冻结且通过哈希校验的退款规则,不读取当前车型直订退款政策。预约请求必须携带勾选、须知摘要及该冻结版本;派单保存完整须知JSON、服务端确认时间和截止时间。重复预约返回原派单,不重新确认或延长期限。租物预约不增加租车须知要求。
- 用户活动预约页展示日期差租期、人工派车、具体找车上限、无车全退、原订单退订规则和押金关闭说明。提交前刷新;文本/版本变化清除勾选,保留已填写资料与日期;读取失败或服务端409不会自动提交或支付。此处是活动购买后的预约确认,尚不能代替活动商品购买前的统一告知验收。
- 平台派车与商户接单在主订单、派单加锁后校验期限;取得车辆/报价锁或商户资格检查后再次校验,防止等待期间越过截止时间。撤回重派、拒单、重派均不会重置原期限。三端增加找车截止时间展示,历史空期限不伪造倒计时。
- 新增
CarRentalDispatchTimeoutTask.expireUnaccepted():固定本轮最大派单ID和扫描时刻,按ID游标分页,每笔使用独立服务事务,单笔异常记录日志并继续,避免退款阻断或失败的早期记录长期占满第一页。事务内再次锁主订单和派单,只有已支付、无阻断退款、未交车、状态0/1/8且到期的派单可进入超时取消;已接单、使用中、已归还、已完成或已取消均跳过。 - 超时复用原有平台无法履约全退申请及幂等规则,先创建退款申请,再取消派单、写
CAR_DISPATCH_TIMEOUT事件和商户通知。资金退回仍由原退款队列负责,不把提交申请说成已经到账。已有退款或写入异常不会继续取消派单;后续扫描和退款队列分别承担重试。 - 新迁移
V20260916_002__car_rental_dispatch_deadline.sql只新增可空期限/确认快照字段、索引和幂等Quartz任务,不修改历史订单。任务默认每分钟扫描,禁止同任务并行并沿用调度安全模式暂停。配置项:car-rental.dispatch-wait-minutes、car-rental.dispatch-timeout.enabled、car-rental.dispatch-timeout.batch-size(默认100、运行时限制1至500)。上线仍须先运行迁移、协调新版API和用户小程序,并确认调度归属及退款队列正常;未自动切换任何环境的任务所有权。 - 新增期限计算、真实付款时间、迟到回调、重复回调、旧订单保护、锁后状态变化、退款阻断、申请失败、任务分页隔离、须知变更、活动冻结退款政策及调度安全模式测试。可选MySQL测试扩充迁移重复执行、单个任务注册、字段读写及到期查询;本轮仍未提供隔离MySQL环境,未执行这些环境测试,不把模拟锁顺序当成真实并发验收。
- 最终全量Maven回归1639项:1625通过、14项环境测试跳过,0失败、0错误。App与MerchantApp全部259项Node测试通过;AdminWeb、MerchantWeb生产构建通过;平台/商户Playwright模拟接口流程通过并核对截止时间展示。
- 微信WCC/WCSC编译通过;直订须知和活动预约的正常、已勾选、加载中、失败、长文案五种状态,在320/390/768px使用实际编译模板及浏览器替代控件渲染通过,已复查截图。不是微信运行时或真机验收,活动测试封面使用本地标识图片,不代表实际车型照片验收。
- 本轮日志:WSL
/tmp/xiedao-dispatch-timeout-final.log、/tmp/xiedao-dispatch-timeout-mini.log、/tmp/xiedao-dispatch-timeout-admin-build.log、/tmp/xiedao-dispatch-timeout-merchant-build.log、/tmp/xiedao-dispatch-timeout-browser.log、/tmp/xiedao-dispatch-timeout-render.log。截图位于/tmp/xiedao-car-rental/、/tmp/xiedao-car-rental-checkout/。没有部署、真实支付/退款、自动扣费或新增押金。 - A13继续进行中:本轮没有实现自动完成,仍需与用户交接确认、争议阻断、完成等待期限告知及通知一起闭环。已付款费用售后、续租改期换车、资格与协议、评价、复杂活动权益和外部环境验收仍未完成,完整目标保持未完成。
2026-09-16 取车资格核验及双方交接确认
- 新增
CarRentalHandoverService、交接记录实体/Mapper及迁移V20260916_003__car_rental_pickup_handover.sql。商户现场核对驾驶人本人、驾驶证原件有效性及准驾车型,记录类别、有效期或长期有效、里程、油电量、车况说明及1至6张验车照片。有效期须覆盖当前日期及预约归还日期;这不是官方证照联网验证。 - 每次提议保存不可覆盖的完整快照、SHA-256内容摘要及取车确认约定版本。只在该新增快照保存驾驶证尾号,不上传证件照片;不代表现有订单中的原证件字段已完成全系统脱敏改造。约定明确原租金/退订规则不变、押金关闭、额外费用单独确认支付;不是完整租赁合同,也没有宣称法律或电子签署验收。
- 提议、确认及异议均先锁订单、再锁派单并检查归属、已付款状态、阻断退款及已接单未交车状态。用户确认必须携带本人看到的最新记录ID和摘要;交车前仍可提异议并撤销交车资格。商户修改内容生成新版本并要求重新确认,旧版本及异议保留。完全相同的未争议提议或确认重复提交不重复写记录;已争议后重提即使内容相同也生成新版本。
- 实际交车只接受最新已确认交接单ID,从服务端快照读取验车数据,不使用请求临时替换的里程或照片。车辆绑定、核验标记和证件有效期再次检查;记录交车时间并将交接单和派单同时更新。派单写入失败抛错回滚,防止继续更新履约;重复提交同一已完成交接单不重写交车证据和事件。事务回滚的实际数据库行为仍待隔离库验收。
- 商户可在交车前说明原因并拒绝交付,复用现有取消及全额退款申请,记录商户操作者;先申请退款后取消,不能对已交车订单使用此入口。提交退款申请不代表资金到账,没有执行真实退款。
- 用户小程序新增取车交接页和订单详情入口,可查看核验、车况、照片、约定、时间、历史摘要并确认或提异议;提交前刷新,版本变化清除勾选,不自动重试。订单取消后保留记录但禁止操作。商户网页版和小程序已分开“提交用户确认”与“确认交车”,平台新增交接记录历史视图。商户两端目前以最新交接信息为主,完整历史查看仍需补齐。
- 修正商户小程序备注框过高和旧“确认取车”标题;网页版核验弹窗在手机上保持标题和底部动作可见,中间内容可滚动。用户页和商户详情使用微信WCC/WCSC编译,订单详情入口WXML也通过编译。320/390/768px实际编译模板配合浏览器替代控件检查,覆盖确认、异议、取消、失败等状态;照片使用测试标识图,不代表真实验车图上传或微信运行时验收。
- 最终完整Maven回归1656项:1642通过、14项环境测试跳过,0失败、0错误。新增归属、退款阻断、版本与摘要损坏、资格有效期边界、异议、交车幂等、写入失败及控制器权限声明测试。生命周期测试通过真实服务与控制器串联提议、用户确认、交车、原还车及结算路径,但持久化和外部资金仍为测试替身。可选MySQL测试扩充迁移重复执行、真实Mapper和不可变数据检查,本轮未执行。
- App与MerchantApp全部269项Node测试通过;AdminWeb和MerchantWeb生产构建通过;平台/商户Playwright模拟接口流程通过,验证缺少核验资料不提交、提议不等于交车、用户确认后交车及平台留档。未部署,未执行真实付款、退款、分账、上传或新增押金。
- 日志:WSL
/tmp/xiedao-handover-complete-regression.log、/tmp/xiedao-handover-reviewed-mini.log、/tmp/xiedao-handover-reviewed-browser.log、/tmp/xiedao-handover-reviewed-render.log、/tmp/xiedao-handover-admin-build.log、/tmp/xiedao-handover-reviewed-web-build.log。截图:/tmp/xiedao-car-rental-handover/及/tmp/xiedao-car-rental/*handover*.png。 - 发布要求:先执行迁移,协调API、用户小程序及商户两端更新。旧取车接口缺少已确认交接单会被拒绝,不能单独上线服务端后声称旧客户端兼容;已经在用或归还的历史订单仍沿用原还车路径。
- A12保持进行中:尚无还车双方确认、交接争议的平台处理、完整租赁协议、交接状态通知、商户完整历史视图或真实身份/数据库/真机验收。自动完成仍未实现,A10租期和车辆变更、已付款费用售后、评价及复杂活动权益也未完成。完整目标保持未完成。
2026-09-16 还车双方确认、异议处理及完成防绕过
- 新增
CarRentalReturnHandoverService、还车Mapper及迁移V20260916_004__car_rental_return_handover.sql,还车记录独立于取车记录保存。商户登记实际归还时,保存车辆、驾驶人、取还车里程、油电量、照片、损坏说明/照片、备注、归还时间、确认约定全文与SHA-256摘要,等待用户核对。 - 区分“物理归还”与“确认完成”:商户登记后派单进入已还车状态5,沿用既有车辆占用和逾期扫描排除规则,不因用户暂未确认继续计为未还车。用户必须核对最新还车记录并明确确认,服务端将确认、交接记录完成、派单完成、主订单完成及原结算流程置于同一事务。额外费用仍是独立确认/支付,不因还车确认自动接受或扣款。
- 用户可在完成前提交还车异议,记录进入
DISPUTED,阻断租车完成入口。平台可说明依据后退回商户修订,或维持记录并要求用户重新核对;处理生成新的不可覆盖版本,原异议、处理人和处理依据保留。平台不能用此接口代替用户确认,也不能收费、退款或强制完成。取车异议的平台处理尚未补齐,不能将此还车处理能力泛化为所有交接争议已完整。 - 商户两端允许在状态5修订还车记录,提交必须携带最新还车记录ID,旧版本请求拒绝;内容变更使旧确认失效。无变化的待确认内容不新建交接版本,存在异议或要求修订时不能用原样重提绕过处理。首次保存的车牌、驾驶人、取车里程和实际归还时间不会随车队资料更新而改变;修改里程、车况、照片或说明须重新确认。
- 还车时间使用服务端实际登记时间并对齐数据库秒精度,修订不得重置,客户端伪造时间不被使用。历史已归还但未建立新交接记录的订单可由商户补交验车记录并保留原归还时间;原时间缺失则拒绝伪造为当前时间,需要平台核实。已有还车快照的修订不依赖车辆仍在当前车队中。尚未提供缺失历史时间的专用补录界面或迁移,不能声称历史数据已全部验收。
- 同步规范派单的还车照片、损坏照片、说明和备注,使用快照相同的标准化内容;修订时清空字段会明确清除旧内容,不出现快照已清空而派单仍保留旧损坏说明的矛盾。验车和损坏照片分别限制最多6张,非空损坏说明必须有凭证。
- 共用
OrderCompletionServiceImpl改为先锁订单、读取明细并检查租车还车完成凭据,再执行订单状态、促销奖励和结算。已有租车派单、直订租车及带已购租车履约快照的活动订单均受到检查,不能从券码核销或微信确认收货所调用的共用入口绕过还车确认。独立费用订单仍可按原流程完成,不会完成租车主订单。历史活动缺失快照及复杂权益识别仍属于A5待补范围,没有据此声称所有历史活动都已覆盖。 - 用户订单详情的“确认还车”不再直接完成订单,而是进入还车交接视图;展示完整资料、实际归还时间、损坏图片、平台处理及可展开历史。提交前刷新,版本变化清除勾选,错误时不自动重试完成。商户网页和小程序提供还车历史、修订入口;平台交接弹窗区分取车/还车并提供还车异议表单,列表增加待确认/异议/待修订标记。商户取车完整历史视图仍需补齐。
- 最终完整Maven回归1668项:1654通过、14项环境测试跳过,0失败、0错误。覆盖版本确认、异议、平台退回/维持不代替用户同意、车辆历史信息固定、原归还时间不变、照片与清空字段、已退款/越权/旧版本拒绝、共用完成入口防绕过和失败时不执行结算。真实服务与控制器的租车生命周期测试增加未确认时平台和共用入口均不能完成、本人确认后才进入原结算路径。
- 可选
CarRentalMysqlTest增加新迁移重复执行、真实还车Mapper、状态条件更新、历史及快照不变检查;当前仍无可用的隔离MySQL测试环境,14项环境测试包括这些跳过项,不把模拟持久化测试当作真实数据库并发或事务回滚验收。 - App与MerchantApp全部273项Node测试通过;AdminWeb与MerchantWeb生产构建通过。Playwright模拟接口流程通过平台退回修订、商户重新提交、历史原始里程保留及未确认不显示完成操作;使用真实ImageUpload组件验证320/390px下已存照片回填及预览图加载,但图片来源仍是本地测试标识,未执行真实上传。
- 用户交接页、订单详情入口和商户详情的微信WCC/WCSC编译通过;实际编译模板结合浏览器替代控件在320/390/768px检查取还车确认、还车异议、待修订、完成和展开历史等状态,复查截图。网页版详情/处理弹窗限制高度并滚动内容,修正手机查看历史时标题不可见;还车表单使用上方标签。以上不是微信运行时或真机验收。
- 本轮日志:WSL
/tmp/xiedao-return-reviewed-backend.log、/tmp/xiedao-return-mini-second.log、/tmp/xiedao-return-reviewed-browser.log、/tmp/xiedao-return-reviewed-render.log、/tmp/xiedao-return-admin-final.log、/tmp/xiedao-return-reviewed-merchant-build.log。截图位于/tmp/xiedao-car-rental/和/tmp/xiedao-car-rental-handover/。差异空白检查通过。 - 发布需要先执行V004迁移并协调API与三端客户端:旧用户确认还车请求没有交接单ID/摘要/同意标记时不能完成,平台无用户确认也不能强制完成。未部署,未进行真实付款、退款、分账、上传或新建押金。A12仍为进行中,A13自动完成及其等待期限/告知/通知仍未实现;续租改期换车、已付款费用售后、评价、复杂活动权益和真实环境验收等完整范围没有缩减。
2026-09-16 还车提醒、期限告知及自动完成
- 新预订须知加入还车自动完成等待期限,默认72小时,配置
car-rental.return-auto-complete.hours可设为0关闭或24至720小时。期限和完整说明参与须知摘要;直订付款前及活动预约前必须展示并再次确认,文案变化清除旧勾选。活动商品购买前的统一告知仍未完成。 CarRentalReturnCompletionPolicy从原订单明细或已确认活动预约快照读取并验证须知SHA-256摘要,不使用当前配置覆盖历史规则。旧订单、旧交接单及没有确认时间的记录保持人工确认,不回填自动完成期限;已存在但损坏的新规则拒绝继续,不静默当作已同意。- 首次归还交接冻结所同意的等待时长。仅在用户还车提醒成功发送后记录发送时间和截止时间,未发送成功不计时;商户收到提醒不能代替用户提醒。没有异议的修订生成新交接版本并重新提醒、重新计时,旧版通知迟到不能给新版启动期限。
- 一旦提出还车异议,本版不能自动完成,后续商户修订、平台退回或维持后重确认均保持自动时长为0,只能由用户主动确认。旧版截止保留供审计但标明已失效,平台处理不能冒充用户同意。
- 新建
CarRentalNoticeService、CarRentalNoticeDispatcher、XdCarRentalNoticeMapper:还车提议、异议、平台处理、主动完成、自动完成分别向用户和商户入队。事件、交接单及接收身份组成唯一键,通知正文不可通过重复入队覆盖;沿用现有OpenIM传输,没有向真实用户或商户发送测试消息。 - 发送任务先获取五分钟租约,在订单锁之外调用消息服务;确认成功时按订单、派单顺序加锁,并用同一租约令牌和有效期限限制回写,过期或被接管的任务不能改写结果。失败按尝试次数延后重试,最长间隔60分钟;元数据写入失败抛错,以事务回滚并保留重试机会。真实数据库回滚和并发仍待隔离环境验证。
- 此处“发送成功”是OpenIM接口接受发送,不是用户设备收到或本人已读。采用至少一次投递,网络超时或进程在发送后崩溃仍可能导致重复提醒,不宣称恰好一次送达。人工确认订单也可保存提醒发送时间,但没有自动完成截止。
- 自动任务仅处理最新待确认且已到期的交接单,事务内再次验证主订单已支付、无阻断退款、实际已还车、发送证明、冻结时长和精确截止。独立状态
AUTO_COMPLETED不写用户确认时间;公共完成入口也再次检查自动完成证据,随后沿用原微信履约、结算日期和微信结算条件,不提前释放资金。 - 新迁移
V20260916_005__car_rental_return_auto_completion.sql追加可空元数据、索引、通知表和两个每分钟Quartz任务,重复执行不重复注册、不修改旧订单。任务按固定最大ID及游标分页,每条独立处理,单笔失败不阻断后续;安全模式同时暂停还车通知和自动完成。运行开关为car-rental.return-notices.enabled、car-rental.return-auto-complete.enabled,分页配置为car-rental.return-tasks.batch-size(默认100,限制1至500)。 - 用户、商户小程序、商户网页及平台历史区分未开始计时、等待截止、仅本人确认、旧版失效及自动完成,不把自动完成显示成本人确认。用户消息进入对应还车交接页,商户消息进入租车派单详情,数值ID校验失败不跳转;通知卡片展示正文且不显示虚构实付金额。服务端仍核对订单/派单归属。
- 最终完整Maven回归1700项:1686通过、14项环境测试跳过,0失败、0错误。新增须知篡改、旧订单保护、发送租约和失败重试、期限边界、旧版阻断、异议永久关闭、任务分页与安全模式测试;真实服务生命周期分别覆盖本人确认和通知后到期自动完成,验证原结算条件及重复处理保护,持久化与外部接口仍为测试替身。
- 可选MySQL测试已增加V005重复迁移、任务唯一注册、通知正文不被重复入队改写、租约抢占和过期回写阻断、发送时间、截止查询及自动完成不写本人确认时间。隔离MySQL和可用Docker环境仍缺失,这些测试未执行;不把SQL契约测试或模拟持久化当作数据库并发验收。
- App与MerchantApp全部277项Node测试通过;AdminWeb、MerchantWeb生产构建通过。Playwright检查平台和商户自动完成状态、截止展示及通知进入指定派单;微信WCC/WCSC编译通过,取还车交接、直订/活动须知、用户/商户还车消息卡片在320/390/768px使用编译模板与浏览器替代控件检查,已复查截图。图片使用测试标识,不代表真实上传或微信真机验收。
- 日志:WSL
/tmp/xiedao-return-auto-reviewed-backend.log、/tmp/xiedao-return-auto-mini-verified.log、/tmp/xiedao-return-auto-admin-build.log、/tmp/xiedao-return-auto-merchant-build.log、/tmp/xiedao-return-auto-browser.log、/tmp/xiedao-return-auto-render-final.log、/tmp/xiedao-return-auto-checkout-render.log。截图位于/tmp/xiedao-car-rental/、/tmp/xiedao-car-rental-handover/和/tmp/xiedao-car-rental-checkout/。 - 发布仍须先执行迁移,协调API及三端客户端版本,确认调度归属、消息服务和原结算队列正常。未部署、未发送真实消息、未执行真实支付/退款/分账,也未新增押金。续租改期换车、已付款费用售后、取车争议处理/通知/完整历史、评价、完整租赁协议、复杂活动权益及真实环境验收仍未完成,完整目标保持进行中。
2026-09-16 续租、改期、换车与提前还车申请受理
- 新增
CarRentalChangeService、XdCarRentalChange、Mapper、三端控制器及迁移V20260916_006__car_rental_change_requests.sql。用户和当前履约商户可按阶段申请续租、改期、换车或提前还车;已实际交车不可再改取车时间,已实际归还不可新申请。提前还车允许当天归还的期望时间,但不代替实际验车归还记录,不据此计算退款。 - 服务端保存原商户、车辆、车型、车牌、预约时刻、履约阶段、实际交车时间及期望安排、原因、须知全文的不可变快照。上下文摘要绑定原预约及须知全文,未确认、过期摘要、无效日期、方向错误、超过366个日期差租日及越权请求均被拒绝;保留日期差计费,不改变既有价格。
- 相同申请身份和请求标识只对应一份原始内容,网络失败重试不会新建重复申请;同一派单最多存在一个未结束申请,由生成列唯一索引兜底。写入按订单、派单、申请顺序加锁,幂等查询和未结束申请检查使用禁缓存锁定读,避免事务旧快照漏掉锁等待期间已提交的申请。查询列表和上下文不代表库存或报价承诺。
- 商户可填写“支持制定方案”或“无法安排”意见;平台可驳回或转入
PLAN_REQUIRED待制定方案,申请发起人可撤回。处理须携带原始快照摘要,条件更新及事件写入失败抛错;不得用审核覆盖原申请。退款中不能新建或推进方案,仍可撤回或驳回结束申请。 - 当前状态流只有申请受理和意见处理,
PLAN_REQUIRED不是批准或生效。本轮不修改派单车辆、预约时间、占用、主订单金额或状态,不创建差价支付和退款,不新增押金。未结束申请阻断人工完成、自动完成及共用订单结算入口,但不阻止商户登记实际车辆归还。 - 用户小程序新增变更页及订单入口;商户小程序和网页新增发起、意见、撤回和历史视图;平台派单页增加全局及单派单入口、状态筛选、分页与处理记录。提交前刷新,原预约、须知或可申请类型变化会清除同意;读取失败保留历史、阻断写操作;商户小程序回到页面重新核对权限。按钮只表达申请或意见,不显示虚假变更成功。
- 已发现原共用退款流程会把主订单推进退款状态并清理履约/收入,不能直接复用来退变更差价;换车也不能仅覆盖现有
merchantCarId,否则会丢失原车交接和用车区间。后续必须补保留主订单履约的差额资金流程、占用切换及车辆分段交接。尚未实现这些功能,不能以申请入口替代A10完整验收。 - 最终完整Maven回归1720项:1706通过、14项环境测试跳过,0失败、0错误。新增服务规则、身份和权限声明、不可变Mapper、条件更新、事件失败及完成阻断测试;控制器测试是本地调用和注解检查,不是部署登录/网关验收。测试使用进程级临时AES密钥。
- 可选MySQL测试扩充V006重复执行、请求唯一性、未结束申请唯一性、终态释放、快照不可覆盖及事件读写;新增双连接可重复读场景,检查普通旧快照看不到后来提交的申请时,锁定读仍能找到。当前隔离MySQL/Docker仍不可用,这些真实数据库测试未执行;不把SQL契约和模拟持久化测试当作真实并发验收。
- App与MerchantApp全部296项Node测试通过,新增19项覆盖四类申请、须知变化、可用类型变化、失败重试、稳定请求标识、重复点击、撤回、意见及商户只读权限。用户与商户新页、修改后的详情入口通过微信WCC编译;新页WXSS编译及320/390/768px实际编译模板的浏览器替代控件渲染通过,已复查截图,不代表微信运行时或真机验收。
- AdminWeb与MerchantWeb生产构建通过。平台/商户Playwright模拟接口验证申请、日期输入、须知变更清除同意、读取失败阻断、商户意见、平台转入方案制定/驳回和原派单不变。网页与小程序截图分别位于 WSL
/tmp/xiedao-car-rental/*change*.png、/tmp/xiedao-car-rental-handover/*change*.png。 - 后端最终日志:WSL
/tmp/xiedao-change-current-read-backend.log;小程序:/tmp/xiedao-change-mini.log;原生模板模拟渲染:/tmp/xiedao-change-native-render-final.log;平台构建:/tmp/xiedao-change-admin-build.log;商户最终构建:/tmp/xiedao-change-merchant-build-final.log;最终浏览器流程:/tmp/xiedao-change-browser-final.log。原有8081/8083开发服务均返回200,测试使用独立端口并清理自建进程,未停止原有服务。 - 最终网页复核额外覆盖320px日期弹层,限制日期面板宽度并检查左右边界;桌面历史及390px平台处理截图等待临时消息消失后重新拍摄并复查。小程序新页字号改为固定像素,避免在平板宽度随屏幕被放大;修正后的模板渲染重新通过。工作区差异空白检查通过。
- 新迁移未在业务数据库执行,未部署、未发送真实通知、未进行真实付款/退款/分账/上传,也未开通押金。完整目标仍进行中,除A10剩余环节外,已付款费用售后、取车争议平台处理/通知/完整历史、评价、完整租赁协议、复杂活动权益及真实环境验收等范围保持不变。
2026-09-16 变更报价、相关商户核对及金额隔离
- 新增
CarRentalChangePlanService、报价Mapper、平台/商户/用户报价控制器及V20260916_007__car_rental_change_plans.sql。报价独立于原变更申请保存,包括原履约/资金信息、拟出车车辆、取还车地点、使用中换车的期望交接时刻、逐项有符号差额、各相关商户拟分配总额、有效期及公开说明。发布报价不修改原派单、商品总额、实付、车队占用或交接记录。 - 平台按项目、数量、单价差额和计价依据填写人工协商报价,支持正差额、零差额和拟退差额;零差价也要明确列项。金额以整数分保存并校验累计范围、拟退上限及商户分配总额,原商品总额和拟商品总额不标成实付金额。此处不是自动套用所有车型/活动日期价的重算引擎,复杂活动权益及自动报价仍待补齐。
- 原资金快照分别保存支付金额和历史余额抵扣;拟退差额的报价上限合并这两部分,不把余额付款遗漏,也不把它合并成微信退款金额。原商户分配缺失、负数、非整数分及不合理原金额拒绝继续。报价入参对金额和数量使用精确整数解析,拒绝小数截断;这仍只是报价校验,不代表差额退款发起、分渠道回退或对账已经实现。
- 报价有效期为发布时5分钟至24小时,且早于相应期望交接/还车时刻。非换车申请不能同时换车;使用中换车需要未来的单独交接时刻,取车前换车不能伪造实际在用交接。发布及商户确认会核对车辆当前占用和新增覆盖日期的停用状态;提前还车报价不要求归还车辆继续在线出车。查询和事务短锁不等于持续锁车,页面明确说明报价不预留车辆。
- 跨商户换车分别列明原出车商户和拟出车商户的变更后分配总额,必须由全部相关商户对同一版报价确认才显示
READY“商户已确认报价”。单方同意不代表另一方同意;任一相关商户无法履约时本版报价进入DECLINED,原申请仍待平台制定方案,主订单不被取消。 - 新报价生成新版本,旧版标记被替代但内容和商户意见不可覆盖。发布需携带所见最新方案ID及原申请摘要,避免旧编辑页覆盖新方案;相同请求标识只允许原操作者重试同一完整内容。商户确认绑定方案摘要,原车辆/租期/地点/金额或拟出车车辆资料变化时要求重新报价。过期、旧版、申请结束及损坏关联不能继续确认。
- 平台可查看完整报价与商户分配,查询权限账号只显示历史,不加载选车和报价编辑。商户只收到与本商户有关的方案和本商户分配金额,不能看到其他商户的内部依据;用户只收到公开报价字段,不返回原内部商户金额、分配明细或商户内部确认依据,也不把原始报价JSON整个暴露出去。拟出车商户可通过独立报价入口查看本商户待核对方案,无须先获得原派单所有权。
- 用户小程序在变更记录中查看公开报价及历史;商户小程序新增报价列表、分页及确认/无法履约操作,工作台和申请页都有入口;商户网页新增全局及单申请报价入口。页面刷新失败阻断写入、保留已读记录;平台提交后响应丢失时重试保留第一次的完整请求,不重新采用已更新的方案ID,成功后须编辑内容才可再发新版本。
- 本轮仍只实现报价及商户核对,不提供虚假的用户“接受并生效”按钮,也未创建差价支付、退款、持续占用或车辆切换。用户接受、支付待处理状态、安全关单/过期释放、退款失败恢复、原/新车辆分段交接和状态通知仍需接入。当前报价要求原申请仍适用;实际归还后补算早还差额等场景也尚未闭环,不能将提前还车报价视为全部早还售后完成。
- 可选MySQL检查已扩充V007重复迁移、真实Mapper读写、原/新商户查询范围、请求唯一性、商户意见唯一性、条件迁移及原快照不被覆盖。隔离MySQL/Docker仍不可用,实际数据库用例没有执行;模拟持久化、SQL契约和控制器本地调用不替代真实事务回滚、并发、网关或登录权限验收。
- App与MerchantApp全部302项Node测试通过。平台和商户生产构建通过;Playwright模拟接口覆盖平台逐项报价、元转整数分、提交响应丢失后的同请求重试、重复点击保护、商户报价入口和确认、平台只读历史及原派单不变。用户/商户页面通过WCC/WCSC编译,实际编译模板配合浏览器替代控件在320/390/768px检查,已复查网页与小程序截图;没有进行微信运行时、真机或真实上传验收。
- 前端日志:WSL
/tmp/xiedao-change-plan-final-mini.log、/tmp/xiedao-change-plan-browser-third.log、/tmp/xiedao-change-plan-permission-admin-build.log、/tmp/xiedao-change-plan-final-merchant.log、/tmp/xiedao-change-plan-final-render.log。截图位于/tmp/xiedao-car-rental/*plan*.png、/tmp/xiedao-car-rental-handover/merchant-plan-*.png和user-change-plans-*.png。 - 最终完整Maven回归1739项:1725通过、14项环境测试跳过,0失败、0错误。覆盖报价差额与零额/拟退额、历史余额抵扣拆分、非整数分/数量的JSON拒绝、双商户确认、旧版与金额/地点/车辆变化、重复请求、关联摘要、内部金额隔离、写入失败及控制器权限声明。最终日志为 WSL
/tmp/xiedao-change-plan-precision-backend.log;测试使用临时进程级AES密钥,未改业务配置。工作区差异空白检查通过,原有8081/8083服务均返回200,测试自建服务已退出。 - V007未在业务数据库执行。未部署、未发真实消息、未操作真实付款/退款/分账/上传,也未新增押金。A10及完整目标保持进行中,A1–A16其他未完成和未验证范围不变。
2026-09-16 零差额租期方案用户确认及实际生效
- 用户小程序接通
POST /api/app/car-rental/change-plans/{id}/accept-schedule。只处理原车、同商户、用户差额为零且商户分配总额完全不变的续租、改期和提前还车预约;正负差额、零用户差额但商户分配变化、换车、未指派车辆均不能通过此入口生效。此项不替代A10其余执行环节。 - 服务端要求本人明确同意报价摘要和生效约定摘要;重新核对最新报价、有效期、原订单/派单、金额、取还车地点、车辆资料及相关商户对同一版报价的全部确认。申请、报价、商户意见和原订单均不能因确认而被覆盖。商户意见读取改为当前锁定读,避免锁等待前的旧快照漏掉另一个已提交的确认。
- 订单、派单及方案锁后复用车辆互斥和精确时段冲突检查,核对新覆盖日期的停用状态。等待车辆核验期间过期的方案再次拒绝。无付款等待阶段,预约时刻和日期差租日直接在同一事务内更新,所以本入口不需要创建持续待付占用;有差价方案仍需要独立的持久占用及安全释放机制,尚未实现。
- 新建不可覆盖的
xd_car_rental_change_application用户确认留档及V008迁移,记录方案、本人、报价摘要、生效约定全文/摘要和生效时间,方案唯一。只更新派单预约日期、精确时刻和日期差租日,不更新车辆、真实取还车时刻、累计逾期记录、原商品总额、实付、商户分配或钱包,不新建押金。申请和方案最终为APPLIED,记录本人确认事件,解除此申请对完成流程的阻断。 - 响应丢失后使用原方案及约定摘要重试时,读取已保存的原生效记录,不重复改期、不重复留档;即使主租车后来已完成,旧确认重试仍不重新执行。已生效申请不能由撤回、驳回或重新报价撤销;后续变更必须另行申请,原申请和报价保留原时段。
- 取车前尚待确认或已确认的旧交接单转为失效,需商户按新预约重新提交并由用户核对;原确认时间、照片和内容不覆盖。使用中续租必须有归属匹配的已完成驾驶资格核验,且驾驶证有效期覆盖新还车日期。已在用的交接记录不改写。提前还车只改变计划,不代表车辆已归还,也不自动免除已发生费用和异议。
- 改期退订保留购买时政策版本及原快照;对按取车时间分档的租车退订,退款计算上下文采用经过用户确认留档验证的最新已生效预约取车时间。退款加载按订单再派单锁读取,当前取车时刻与生效方案不一致、留档缺失/损坏或已经实际交车时拒绝继续;活动商品仍按已购活动退订规则。生效约定明确告知该时间基准变化,没有改写原退款快照或发起真实退款。
- 修复真实派单普通查询与锁定查询字段不同导致的摘要不一致:锁定行不带车型名/车牌时,仅在车型、车辆及归属标识仍匹配的条件下沿用参考查询的展示字段,业务标识和时段始终以锁定行为准。新增分别模拟联表查询与仅派单列锁定查询的测试,以及真实服务串联的申请、平台受理、报价、商户确认、生效、重复确认及终态防撤销生命周期检查;数据库持久化仍为测试替身。
- 用户页面先展示生效约定并勾选,提交前重新读取方案,报价/约定/可接受状态变化或读取失败即阻断。重复点击只发一个请求;结果不明时重新查询已保存状态。主预约刷新期间返回的旧报价不能重新覆盖界面。平台、商户网页和两类小程序显示本人确认及生效时间;平台报价历史补充原预约和方案预约,用户当前预约与历史方案分别展示。
- 最终完整Maven回归1758项:1744通过、14项环境测试跳过,0失败、0错误。统计以本次完整日志为准,未把旧目录中残留的历史报告算作本轮结果。新增覆盖零差额/商户分配隔离、身份、同意版本、过期与锁等待、当前占用、交接失效、资格有效期、留档/状态写入失败、重复提交、退订时间投影、兼容原退款上下文构造及控制器身份声明。
- App与MerchantApp全部307项Node测试通过;用户确认及商户生效记录通过WCC编译,复用未修改的WXSS;实际编译模板配合浏览器替代控件在320/390/768px检查并复查截图。平台和商户网页生产构建及完整租车Playwright模拟流程通过,新增零差额生效历史展示。浏览器原车辆编辑测试明确等待初始详情加载后再输入,避免测试填值被尚未结束的初始请求覆盖。
- 后端日志:WSL
/tmp/xiedao-schedule-accept-final-backend.log;小程序:/tmp/xiedao-schedule-accept-mini.log;模板渲染:/tmp/xiedao-schedule-accept-render-final.log;网页构建:/tmp/xiedao-schedule-accept-admin-final.log、/tmp/xiedao-schedule-accept-merchant-final.log;网页流程:/tmp/xiedao-schedule-accept-browser-final.log。截图在/tmp/xiedao-car-rental/*plan-applied*.png、/tmp/xiedao-car-rental-handover/user-change-accepting-*.png、user-change-applied-*.png和merchant-plan-applied-*.png。 - V008已加入可选MySQL重复迁移、留档唯一性及不可覆盖检查,但没有在业务库或真实隔离MySQL执行,不能将事务注解/模拟失败测试称为真实回滚和并发验收。发布需先迁移并协调API及三端版本;未部署、未发送真实通知、未触发真实付款/退款/分账/上传,也未新增押金。差价资金流程、持续占用、换车、归还后早还售后、生效通知、其他A1–A16未完成项和真实环境验收全部保留,完整目标仍进行中。
2026-09-16 租车评价、商户回复及平台审核
- 新增独立
CarRentalReviewService、实体/Mapper及V009迁移,未复用物品租赁的XdRentalReview。新增/api/app/car-rental/reviews、/api/merchant/car-rental/reviews和/api/admin/car-rental/reviews控制器;只有车型公开列表匿名开放,用户操作取当前用户身份,商户操作受租车类型和专用CAR_REVIEW_MANAGE能力保护,平台查询/审核分别要求专用权限。 - 评价提交先锁本人订单、再锁关联租车派单和评价行;须主订单已完成、派单状态6且有实际归还时间。评分须为1至5的精确整数,内容1至1000字、最多6张合法图片地址,匿名设置必填。订单/派单唯一索引保留至撤下或隐藏之后;同一请求标识及相同规范化内容的重试只读原评价,不能重复写入或覆盖原文。
- 新评价进入待人工审核,不立即公开;商户仅能对本商户已公开评价回复一次,回复独立进入待审核。平台可公开或隐藏评价/回复,必须填写依据并提交当前版本;每次变化记录操作者、对象、原状态、新状态、依据及版本。历史请求精确匹配已存事件时只返回当前记录,不把后续隐藏/撤下重新执行为公开。用户可不可逆撤下本人评价,但不能重新评价或让平台恢复公开。
- 评价正文、评分、图片、匿名设置、车型/商户快照及商户回复没有覆盖接口。平台与商户保留授权订单关联;公开DTO不返回用户ID、订单ID/编号、派单ID、车牌或驾驶资格资料,匿名评价不返回真实昵称。公开回复还须独立审核通过;车型统计实时查询当前公开记录,隐藏/撤下会移出统计,不向产品元数据写缓存评分。
- 用户小程序新增评价页,从租车订单详情进入本人评价/撤下,从车型详情进入按星级筛选的公开评价和分页统计。商户网页和小程序新增专用评价页,支持状态/星级筛选、图片预览、分页及一次回复,工作台与菜单能力独立于车队管理和物品租赁评价。平台新增评价审核页、商户/车型筛选、评价与回复独立处理、完整处理记录及只读权限状态。
- 各端处理加载失败、提交中、空结果、只读、重复点击和结果不明状态。用户提交前重新读取资格;响应丢失后查询已有评价。商户回复保存成功但响应丢失时,刷新为待审核并关闭写入入口。较早列表请求晚返回不能覆盖新筛选。平台版本冲突或失败后刷新,不能用旧版本覆盖处理结果。
- 最终完整Maven回归1775项:1761通过、14项环境测试跳过,0失败、0错误。覆盖身份、完成/归还状态、精确评分、输入/图片校验、锁顺序、不可覆盖、回复归属、独立审核、撤下、过期版本、精确重试、写入失败、匿名公开DTO和控制器权限声明;商户能力测试验证租车与物品租赁隔离。最终日志为 WSL
/tmp/xiedao-review-backend-final.log,使用临时进程级AES密钥,未改业务配置。 - 可选
CarRentalMysqlTest已扩充V009重复执行、真实Mapper写入与状态条件、单单唯一、事件唯一、原文/回复不覆盖、匿名昵称、商户筛选及隐藏/撤下后的实时统计检查;本轮没有运行真实隔离MySQL,不能以SQL解析/测试替身验证代替实际并发、事务回滚和迁移验收。 - App与MerchantApp全部321项Node测试通过,商户网页能力路由测试通过,两套网页生产构建通过。评价专项Playwright模拟API流程通过:发布低星评价、商户回复与响应丢失恢复、回复独立审核、平台隐藏及审计、加载失败恢复、平台只读权限、用户已撤下状态和桌面/390px手机布局;原有租车浏览器全流程回归也通过。
- 用户/商户新页面WCC/WCSC编译通过;实际编译模板配合浏览器替代控件在320/390/768px验证表单、长内容、公开列表、待审核、撤下、只读、空结果和失败状态并检查截图。网页截图等待弹窗动画结束后复查,标题、正文和底部按钮未重叠。图片均为本地测试标识,未测试真实评价图片上传,也不是微信运行时或真机验收。
- 最终日志:
/tmp/xiedao-review-mini-final.log、/tmp/xiedao-review-capabilities.log、/tmp/xiedao-review-admin-final.log、/tmp/xiedao-review-merchant-final.log、/tmp/xiedao-review-browser-verified.log、/tmp/xiedao-review-existing-browser.log、/tmp/xiedao-review-render.log;截图位于/tmp/xiedao-car-reviews/。测试启动的网页服务均已退出,没有重启用户原有服务。 - V009未在业务库执行;发布需先完成迁移和平台/商户菜单权限验证,再协调API、两套网页及两个小程序版本。评价/回复使用人工审核,未接入新的外部内容审核或通知服务。没有部署、发真实消息、执行真实付款/退款/分账/上传或新增押金。A14记为待验证;A10差价/换车、已付款费用售后、取车争议/历史/通知、完整协议、复杂活动权益及其他真实环境验收仍全部保留,完整目标未完成。
2026-09-17 取车异议处理、完整历史及通知
- 平台新增
POST /api/admin/car-rental/dispatches/{id}/handover/review,沿用交接处理权限及操作日志。只允许处理当前版本、所属关系匹配、已接单但尚未实际交车、已付款且未进入退款的取车异议,处理依据必填;支持退回商户修订或维持记录并请用户重新确认,不能代用户确认、代商户交车或结束订单。 CarRentalHandoverService处理时保留原快照、异议及原确认时间,将旧记录标记失效并创建新版本,保存原记录ID、处理结果、依据、操作者和时间。退回修订为REVISION_REQUIRED,维持记录为新的PROPOSED,均不继承用户确认。旧处理请求重试返回版本冲突,不重复创建替代记录。- 商户修订取车单须携带打开表单时所见
handoverId,不能把后台后来刷新的版本静默换入旧草稿。相同内容的待确认/已确认单重试只读原记录;相同的争议/待修订内容不能靠重复提交清除异议。已因预约变更失效的记录可携带正确旧ID重新提议,即使验车内容没有变化,也需生成新版并由用户再次核对。 - 商户网页和小程序新增完整取车历史查询、加载失败重试和照片预览,展示驾驶人证件尾号、核验结果、预约、车况、原异议、处理依据、确认约定及版本。修订预填车况但清空三项资格核验勾选;提交期间阻断重复动作,小程序上传中不可关闭履约表单。提交结果不明时重读详情,发现新版便关闭旧表单,不自动重复写入;无法读取时保留原草稿及原版本。
- 用户交接页同时显示取车与还车的平台处理依据。平台处理页按取还车标签调用对应接口,处理中不能切换标签或表单;原争议保留在历史中,平台维持取车记录后,商户仍须等用户重新确认才能实际交车。
CarRentalNoticeService接入取车提议、本人确认、异议、平台处理和实际交车五类不可变通知,保存用户及商户消息卡片;商户实际交车成功后在同一事务中入队,原有幂等返回不重复入队。事件写入失败或通知持久化抛错会中止业务事务;真实数据库回滚仍待验收。- 用户小程序、商户小程序及商户网页消息入口识别
rentalAction=pickup,分别进入本人交接页或授权商户派单详情。通知不携带驾驶证号、驾驶人姓名或验车照片,不把“用户已确认”表述为“已交车”,也不把交车表述为订单完成。消息内容及跳转使用模拟接口测试,没有发送真实消息。 - 取车与还车复用V005通知表及现有任务,不新增迁移;取车发送确认只更新有租约保护的消息任务,不读取或更新还车交接,也不启动还车自动完成计时。消息外部发送与本地回执之间仍为至少一次投递,响应丢失可能产生重复消息,不能声称外部恰好一次送达。
- 发布前须具备V003取车交接、V005通知相关迁移及其前置迁移,协调API与商户网页/小程序版本,旧客户端缺少修订ID将被拒绝。当前
car-rental.return-notices.enabled控制共用队列,包含新增取车通知;本轮没有修改开关、任务调度归属或业务环境配置,真实送达与部署配置须联合验收。 - 最终完整Maven回归1785项:1771通过、14项环境测试跳过,0失败、0错误。覆盖取车处理结果、旧版本、关联归属、保留原异议、失效后重新提议、通知入队/失败、取车回执不触发还车计时及平台权限声明。日志为 WSL
/tmp/xiedao-pickup-backend-final.log;使用临时进程级AES密钥,未改业务配置。可选MySQL检查已增加平台处理替代记录、待修订状态及原记录不覆盖,但未运行真实隔离MySQL。 - App与MerchantApp全部325项Node测试通过,包括商户修订版本捕获、重新核验、页面方法级的历史加载/失败重试、响应丢失后的状态核对和取车消息跳转;外部接口仍为测试替身。日志为
/tmp/xiedao-pickup-mini-verified.log。两套网页生产构建通过,日志为/tmp/xiedao-pickup-admin-build.log、/tmp/xiedao-pickup-merchant-final.log。 - 平台及商户完整租车Playwright模拟流程通过,追加用户取车异议、平台要求重新确认、确认前不可交车、商户新旧记录同时展示,以及商户修订已保存但响应丢失后的状态核对。后者验证重新核验勾选、捕获原版本、旧表单关闭、不重复写入、原快照不覆盖且仍不可交车。最终日志为
/tmp/xiedao-pickup-browser-reconciled.log;手机截图位于/tmp/xiedao-car-rental/*pickup*.png,已滚动检查当前记录和原异议,预约及长时间文本正常换行,无不合理重叠。测试照片是本地标识,不是真实验车上传。 - 更新的用户交接及商户派单模板通过WCC编译,复用未修改的WCSC产物;实际编译模板与浏览器替代控件在320/390/768px验证,已检查用户平台处理展示和商户完整历史截图。日志为
/tmp/xiedao-pickup-render.log,图片位于/tmp/xiedao-car-rental-handover/;不代表微信运行时、驾驶资格真实性或真机验收。 - 本轮未部署、未迁移业务库、未发送真实通知、未触发真实付款/退款/分账/上传,也未新增押金。A7、A12仍为进行中;完整租赁协议、差价资金流程、持续占用、换车分段交接、归还后早还差额、已付款费用售后、复杂活动权益及A1–A16其余真实环境验收范围全部保留。
已付款费用售后接口与原号退款队列
- 新增
CarRentalChargeAftersaleService、XdCarRentalChargeAftersale、Mapper及V20260917_010__car_rental_charge_aftersale.sql。已付款争议与原付款前争议分别保存;申请包含独立请求标识、原因、最多6张凭证、原收费摘要、实付、已退累计及原商户收入快照。原计费金额、数量、单价和凭证不被售后裁定覆盖。 - 用户接口为
/api/app/car-rental/charges/{id}/aftersales,只接受当前本人身份。商户同路径下只读本商户收费售后,沿用租车商户类型与订单查看能力;平台新增费用售后分页、单项历史、裁定和重试接口,处理动作要求carrental:dispatch:settle并记录真实登录操作者。用户返回值不包含商户收入扣减金额值或内部操作者,三方返回均不暴露原始财务快照JSON。 - 只接受独立费用订单已完成支付业务处理、原收费仍为已支付且有剩余可退额的售后;主租车可以仍在使用中或已完成,售后不锁改原租车预约、派单、真实交还车或主租金。待处理售后拒绝另起并行申请;同一请求标识和相同内容重试只返回原记录,不能换原因或凭证覆盖。已驳回或部分退款完成后可另提新申请,旧记录保留。
- 平台裁定绑定所见申请摘要,拟退金额必须为精确整数分且不超剩余实付。零额裁定为本次不退款,正额创建独立退款待执行记录;相同操作者对同一完整裁定重试不重复创建资金记录,已处理申请不能用不同内容改判。事件及裁定持久化失败会抛错,要求整事务回滚;真实数据库回滚仍未验收。
- 支付编排新增
prepareRefund,强制加入调用方已有事务,只保存确定渠道分额及唯一退款单号、将费用订单标为退款中,不调用微信或退余额。售后裁定与该资金记录的关联在同一事务保存,后台才通过既有retryRefund按原退款单号执行,从结构上避免先发外部退款、后补售后关联。预备资金记录使用处理中状态,不能被旧待审核退款入口重复审核;完整处理依据保留在本地,支付渠道只提交简短售后编号。 - 正额裁定复用现有渠道余额计算和先微信、后余额的分拆。后台持久化租约防止同时领取及过期工作者回写;提交结果未知仍保留同一资金记录,最多自动尝试5次后转平台核查,成功回调可由后续对账完成。
CLOSED、ABNORMAL在资金记录锁定后也再次拒绝重试,不能通过旧读取结果越过渠道终态。 - 预备记录首次提交成功也会将微信状态推进到处理中,进入现有查单任务;此前该更新只接受失败记录。纯余额预备退款首次执行时补记支付单退款累计,同资金记录成功后重试不重复退余额或累计。现有非租车退款测试同时回归,未调用真实微信或余额业务账户。
- 对账严格核对售后、费用订单、用户、资金记录、金额及原收费摘要。部分退款成功后保留收费已支付状态及原金额,将独立费用订单恢复原完成状态,保存本次已退金额和累计;全额退清才将收费及补费业务关联标为已退款,原价款不变。旧成功回调重放不会再次把已部分退款完成或新一轮退款中的费用订单改回旧状态。处理事件分别标明申请、拟退和实际已退,审核成功不表述为退款到账。
- 商户扣减使用原收入快照的累计比例:本次扣减为“原收入 × 退后累计/实付”的向下取整值减去退前对应值。分次退款总扣减不会超过原收入,退清时恰好扣完原净收入;账本以资金退款记录幂等留痕,不改写支付时收入字段。已有未关联本售后机制的历史资金退款会阻断新裁定,需人工核实,不能把它当作从未退过钱。
- 待处理、退款中、失败或待平台核查的售后阻断该独立费用订单继续释放结算,包括资金已成功但账本尚未对账的短暂阶段。检查与提交共用费用订单锁,原微信结算及平台结算日期门槛继续生效;已释放收入沿用原账本扣减能力。本地测试证明调用条件和锁顺序,不代表真实并发或资金库验收。
- 新增
CarRentalChargeRefundTask,固定扫描上界和截止时刻、分页处理并隔离单条失败;配置car-rental.charge-refunds.enabled默认关闭,新建Quartz任务默认暂停,且已加入安全模式暂停名单。发布前须完成V010及既有租车费用迁移、真实隔离验收、调度归属核对并显式启用,不自动转移生产调度责任。 - 已补单元、SQL契约、控制器身份/权限及任务测试;真实服务串联使用模拟持久化和外部支付替身,覆盖微信6000分加余额4000分的付款,先退8000分再退剩余2000分、同单重复回调及跨后续退款重放,商户原收入9940分分两次冲减7952分与1988分。没有执行真实资金操作。
- 最终完整Maven回归1816项:1802通过、14项环境测试跳过,0失败、0错误;日志为 WSL
/tmp/xiedao-aftersale-backend-current.log,测试使用临时进程级AES密钥,未修改业务配置。最终售后服务15项、退款工作者6项测试通过,控制器身份与权限、任务开关及安全模式测试也通过;这是本地调用与模拟验证,不是生产资金或网络权限验收。差异空白检查通过,新文件也已单独检查。 - 可选MySQL测试已增加V010重复迁移、任务默认暂停、请求唯一、当前锁定读、原快照与裁定不可覆盖、租约保护、原资金记录重排队、退款累计及完成幂等检查。未运行真实隔离MySQL;迁移、事务回滚、并发和原号退款恢复仍需真实隔离环境验收。
- 本阶段没有修改前端页面,尚不能从完整三端界面完成已付款售后。用户提交/证据/进度页、商户查看及补充处理、平台售后处理页、消息通知、关闭/异常渠道核实后的后续处理、历史退款补录与微信真机验收继续待办。旧前端测试证据不覆盖新售后接口,也不能据此把A11标为完成。
- 未执行迁移或部署,未发送真实消息、未触发真实付款/退款/分账/上传,也未新增押金。A10差价支付退款、持续占用、换车分段交接、归还后早还差额、完整租赁协议、复杂活动权益及A1–A16其他未完成范围保持不变。
已付款费用售后三方页面及结果恢复
- 用户原费用页新增已付款售后入口、原因和最多6张凭证、申请历史、平台处理依据、退款单号及微信/余额退款安排。原收费金额与本次拟退、本次已退、售后累计已退分开展示;累计仅计已完成售后,首次读取失败显示待核对,不显示虚假的零额结果。存在处理中或未知状态时不开放新申请,部分退款或不退款后可在服务端条件允许时再次申请。
- 用户提交前重新读取历史,第一份完整请求先保存到本地恢复记录再发送;请求结果不明时锁住原因与凭证,刷新或重新打开页面后按原请求标识核对,已找到的申请不重复发送,未找到时仍只重试同一完整内容。读取失败、上传选择阶段、上传中及重复点击均阻断写入。本地恢复记录失败不会先发请求;这不是微信设备存储或真实网络超时验收。
- 商户网页费用展开区及商户小程序费用页接通本人收费的售后原因、用户凭证、历史处理与退款进度。本次收入拟扣减和对账完成后的已扣减明确区分,原收费与原凭证不改写;读取失败保留上次记录并标明错误。商户补充原因/凭证及其不可覆盖留档尚未实现,不把本轮只读页面视为完整商户售后处理。
- 平台费用争议增加已付款售后分页及状态筛选;单派单费用展开区可查看该费用全部售后。展示经收费摘要校验的原计费依据/凭证、用户申请凭证、实付及此前退款、平台依据、渠道安排及收入冲减。新增公开收费上下文,不修改原售后快照JSON/摘要;用户返回值仍隐藏商户身份字段、内部操作者及收入扣减金额。
- 裁定金额由元文本精确转为整数分,拒绝负值、多于两位小数及超出剩余实付。提交前重读同一申请并核对摘要,弹窗明确本次不退款或拟退金额;相同裁定结果不明时保留第一份金额/依据,先读结果再允许原内容重试。仅该已具备服务端幂等的裁定请求关闭公共一秒重复请求拦截,页面仍串行防连点,服务端仍绑定申请摘要及原操作者/完整裁定。
- 平台退款重试按原退款单号核对并重新排队,不创建替代资金记录。返回的可重试标识同时检查售后状态、渠道关闭/异常、资金已成功和活动租约;成功资金尚未对账明确显示等待对账,不给出重复退款按钮。裁定及重试同时有前端权限判断,只有查询权限的账号能看证据但没有裁定表单和退款重试入口,服务端原权限要求保持不变。
- 完整Maven回归1818项:1804通过、14项环境测试跳过,0失败、0错误;日志为 WSL
/tmp/xiedao-aftersale-ui-backend.log。使用临时进程级AES密钥,未改业务配置。统计采用本次Maven各模块结果,未把历史遗留的旧测试报告计入本轮结果。 - App与MerchantApp全部334项Node测试通过;日志
/tmp/xiedao-aftersale-mini.log。新增9项前端行为测试覆盖已付款申请、已提交但响应丢失、跨页面原内容重试、失败读取恢复、部分/累计退款、未知状态、新增图片选择锁、本地保存失败、防连点及商户只读进度。既有付款确认、付款前争议和独立费用关单测试仍通过。 - 平台与商户网页生产构建通过;日志
/tmp/xiedao-aftersale-admin-build.log、/tmp/xiedao-aftersale-merchant-build.log。新增Playwright售后专项通过,覆盖平台全局和派单内入口、整数分裁定、已写入/未写入两类响应丢失、原退款号重试、关闭/异常展示、旧摘要、读取失败、只读权限及商户原凭证和实际扣减;模拟接口没有触发真实退款。日志/tmp/xiedao-aftersale-browser.log。 - 原租车Playwright模拟回归亦通过,覆盖活动租期、车队、派单/撤回/取消退款、接单、验车图片、交还车、结算、费用提议及付款前异议、变更申请/商户意见/平台处理和移动日历;日志
/tmp/xiedao-aftersale-rental-regression.log。本轮测试自建服务均已退出,没有部署或替换业务服务。 - 用户和商户费用模板均通过WCC/WCSC编译,实际编译结果配合浏览器替代控件在320/390/768px检查,覆盖申请、结果待核对、部分退款、渠道异常、完成和读取失败。已复查网页桌面/手机、嵌套费用展开和小程序长文本截图;小程序输入区补上稳定高度,长单号与原因可以换行。日志
/tmp/xiedao-aftersale-render.log,截图位于/tmp/xiedao-car-aftersales/。这不替代微信运行时、真机及真实图片上传验收。 - 未执行迁移或部署,未开通退款定时任务、押金或自动扣款,未发送真实通知或进行真实资金/上传操作。A11仍为进行中;商户补充举证、售后通知、渠道关闭/异常核实后的处理、历史退款核实、真实隔离迁移/并发/回滚/退款及微信真机继续待办。A10差价支付退款、持续占用、换车分段交接、归还后早还差额、完整租赁协议、复杂活动权益及A1–A16其他范围全部保留。
已付款费用售后商户补充举证
- 新增
XdCarRentalChargeResponse、只追加Mapper和V20260917_011__car_rental_charge_responses.sql。材料独立于用户售后申请及原收费保存,包含本次补充请求标识、所属申请/商户、原申请摘要、前一版材料摘要、说明和最多6张凭证;新材料不覆盖原收费、用户原申请、商户旧材料或财务记录。迁移只创建新表,不修改旧快照或调度任务。 - 商户新增
POST /api/merchant/car-rental/charges/aftersales/{id}/responses,要求租车商户类型与履约能力,服务端核对原收费商户归属。说明必填、最多1000字,凭证沿用已有地址/数量校验;仅待平台裁定的售后可追加材料。平台裁定完成后不能另加新材料,同一已成功请求仍可按完整原内容重试并读取现有历史。 - 补充与裁定共用费用订单、补费关系、收费和售后申请的锁顺序,再使用当前锁定读读取材料。每份材料的摘要与上一版相连,校验申请、商户、原文和顺序;新材料改变
reviewHash,但不改变原申请requestHash。裁定必须同时绑定两者,新增材料后旧裁定被拒绝,不能因等待锁前的旧快照漏掉已提交证据。裁定事件保存所用材料摘要,补充事件保存新材料摘要。 - 平台裁定入参新增必填的
reviewHash。前后端需配套升级并先完成V011迁移;缺失材料摘要的旧调用不能默认当作已经查看材料。平台刷新发现材料版本不同会清除旧金额/处理依据,提交前还会重新读取;已有材料变化的原裁定重试也不会绕过核对。既有退款准备、原号重试、分渠道金额及对账逻辑保持不变。 - 商户网页版和小程序接通说明/图片提交、只读完整补充历史及原请求恢复,页面明确材料对本订单用户及平台可见。用户费用售后页和平台全局/派单内售后页同步展示补充说明、图片及时间,不返回原始补充快照JSON。商户网页只有订单查看能力时没有补充表单,接口仍独立校验履约能力及商户归属。
- 第一份完整补充内容保存到页面恢复记录后才发送,响应不明时锁住内容与凭证,刷新/重新打开后先按请求标识核对,再允许原内容重试。同一已提交材料不重复追加;如果该请求未出现在历史里而材料版本已变化或平台已裁定,停止旧请求,不自动换摘要再提交,保留说明供重新核对。
- 商户网页使用现有商户图片上传接口和原生上传控件;小程序复用既有商户图片服务。选择/上传期间不能提交;上传失败有明确错误并阻断补充提交,必须明确移除失败凭证后才能继续,避免无声遗漏证据。本轮上传和图片预览均使用本地测试图与模拟接口,没有上传到业务服务。
- 完整Maven回归1827项:1813通过、14项环境测试跳过,0失败、0错误;日志
/tmp/xiedao-charge-responses-backend.log,使用临时进程级AES密钥,未修改业务配置。新增8项服务测试及1项Mapper契约测试,覆盖只追加历史、后续举证/裁定后的原请求重试、旧裁定拦截、身份/凭证/版本、锁等待后当前材料、损坏/乱序留档及插入/审计失败。控制器身份和能力测试已同步;模拟异常抛出不等于真实事务回滚验收。 - 可选MySQL用例已增加V011重复执行、真实Mapper读取/追加、同申请请求唯一性及区分大小写、原材料不被后续插入覆盖检查。隔离数据库仍不可用,没有执行真实迁移、回滚或并发测试。
- App与MerchantApp全部342项Node测试通过;日志
/tmp/xiedao-charge-responses-mini.log。新增商户补充请求的双摘要绑定、提交响应丢失、页面重建、旧材料/已裁定拦截、选择图片与读取失败阻断、防连点、本地保存失败、只读入口及失败上传确认。小程序费用页通过WCC/WCSC编译,实际模板在320/390/768px渲染并复查用户材料展示、商户补充表单/恢复及上传失败状态;日志/tmp/xiedao-charge-responses-render.log。 - 两端网页生产构建通过,日志
/tmp/xiedao-charge-responses-admin-build.log、/tmp/xiedao-charge-responses-merchant-build.log。Playwright售后专项覆盖上传中和失败状态、图片预览、原请求跨重载恢复、保留先前材料、同申请仅材料变化时拦截平台旧裁定及商户只读权限;日志/tmp/xiedao-charge-responses-browser.log。原租车模拟回归亦通过,日志/tmp/xiedao-charge-responses-regression.log;截图位于/tmp/xiedao-car-aftersales/。这些测试不替代登录网关、真实上传、资金或微信运行时验收。 - 未执行业务库迁移、部署、真实通知/上传/付款/退款/分账,未启用退款任务、押金或自动扣款。A11继续进行中,售后通知、关闭/异常渠道核实后的后续处理、历史退款核实及真实环境验收仍待办;A10差价资金与持续占用、换车分段交接、归还后早还差额、完整租赁协议、复杂活动权益及A1–A16其余范围保持不变。
费用与售后通知、退款任务状态及消息入口
- 费用处理事件使用新增
XdCarRentalChargeEvent接收数据库生成ID,通知唯一身份绑定每次事件及接收方,不再试图用费用ID区分多轮确认、取消或平台处理。沿用V001事件表及V005通知表,不新增迁移,不补发历史事件。费用提议、确认、异议、平台处理、撤回、支付完成、支付取消及退款完成均在原事务中保存事件和用户/商户通知。 - 售后申请、商户补充材料、平台裁定、原退款重排队、本次实际退款对账完成接入同一通知队列。卡片只带必要业务标识和状态说明,不携带申请正文、举证图片、驾驶资料、内部操作者、商户收入或拟退金额;具体明细仍需经本人订单/商户归属验证后读取。审核拟退、执行未完成、待平台核查、本次退款完成分开表述;部分退款不表述为全部退清,旧消息提醒查看最新进度。
- 新增事务方法
releaseRefund,后台退款工作者的失败、处理中及待人工核查状态通过该方法回写。锁顺序沿用费用订单、补费关联、收费及售后,不获取租车主订单/派单锁;数据库租约令牌及未过期条件匹配才可推进状态和通知。相同失败/人工核查状态的重复扫描不反复入队,已经人工核查的状态不被失败回写降级。状态与通知写入失败须共同回滚;真实事务回滚仍未验收。 - 费用通知入队只使用已校验并锁定的收费归属,不套用交接通知的主订单锁流程;费用发送回执仅更新带租约保护的通知记录,不读取或修改取还车记录,不启动/重置还车自动完成期限。投递复用OpenIM工作者、五分钟租约、失败退避和过期领取。外部发送与本地回执之间仍是至少一次投递,响应丢失可能造成重复消息,没有声称外部恰好一次送达。
- 用户小程序消息进入本人订单费用页;商户小程序进入派单费用页;商户网页进入费用弹窗,继续加载授权派单状态以决定能否提议。三端从结构化标识构建路径,拒绝非法或不安全整数,不信任卡片自带任意地址。网页切换费用派单时清空旧列表并丢弃较早请求,防止旧结果覆盖新入口。
- 商户小程序费用页改为订单查看权限准入,履约权限控制新增、撤回及补充举证。商户网页租车路由也要求租车类型和订单查看权限,其他商户类型及仅消息权限不可进入;只读账号可查派单、费用及售后,履约/变更写入入口隐藏,费用操作及主履约方法同时有本地权限阻断。后端原查看/履约权限声明不变;真实登录网关及实际菜单下发仍需部署环境验收。
- 完整Maven回归1835项:1821通过、14项环境测试跳过,0失败、0错误;日志
/tmp/xiedao-charge-notices-backend.log。新增8项测试覆盖每次事件身份、两方卡片隐私、拟退/实退、主订单锁与计时隔离、任一接收方通知保存失败、租约失败不入队、人工核查不降级及真实服务串联的精确重试。可选MySQL用例追加生成事件ID检查,但隔离MySQL/Docker仍不可用;本地模拟抛错不等于真实回滚或并发验收。测试采用临时进程级AES密钥,未改业务配置。 - App与MerchantApp全部345项Node测试通过,新增费用消息路径校验、商户网页消息路径函数以及商户小程序只读入口测试;日志
/tmp/xiedao-charge-notices-mini.log。商户网页17项路由权限测试通过,日志/tmp/xiedao-charge-notices-capabilities.log;测试账号明确提供商户能力,不再以平台通配权限模拟商户履约资格。 - 商户网页最终生产构建通过,日志
/tmp/xiedao-charge-notices-merchant-final.log。原租车浏览器全流程与已付款售后专项通过,日志/tmp/xiedao-charge-notices-browser.log、/tmp/xiedao-charge-notices-aftersales.log;费用消息直接打开、只读操作隐藏及320/390/1280px布局有新增检查,已复查窄屏截图/tmp/xiedao-car-rental/merchant-charge-notice-320.png。所有接口、资金及上传仍为模拟。 - 更新的商户费用WXML通过WCC编译,复用未改WXSS编译结果;用户/商户费用实际编译模板在320/390/768px渲染通过,日志
/tmp/xiedao-charge-notices-render.log。本轮未修改消息卡片模板,沿用其通知型卡片不展示虚假实付额的分支;不代表微信运行时、真实IM送达或设备验收。 - 通知仍受共用的
car-rental.return-notices.enabled及carRentalReturnTask.deliverNotices()调度控制,费用退款任务仍独立且默认关闭;没有启用任务、转移调度责任、部署、执行迁移、发送真实消息、上传、付款、退款、分账或新增押金。平台沿用费用争议及售后处理列表,主动待办推送仍未新增。A7/A9/A11继续进行中,关闭/异常渠道后续核实、历史退款、A10差价与持续占用/换车、归还后早还差额、完整协议、复杂活动权益及全部真实环境验收范围保留。
差价付款绑定库存预留基础及最终回归
- 新增
CarRentalChangeReservationService、实体/Mapper及V20260917_012__car_rental_change_reservations.sql。这是分阶段内部基础,没有控制器、付款回调或定时任务调用该服务,当前业务运行不会创建这类预留。通用补费创建明确拒绝CAR_RENTAL_CHANGE,在完整协调流程接通前不开放差价收款。 - 预留绑定原订单、派单、用户、方案摘要、同商户原车和独立支付订单,保存原始使用起止与截止时间。方案、付款订单及商户差额分配必须与原报价一致,核对最新版、有效期、商户同意、原预约/地点/金额、车辆资料、当前占用及新增覆盖日期停用状态。当前仅支持用户正差额、商户分配增加在零至用户差额之间的原车租期方案,不支持换车、负差额或分段交接。
- 创建要求已有事务,供后续协调器与独立支付订单共同提交;锁顺序以原订单、派单、申请为先,再获取方案、支付关系、车辆和预留。相同完整请求只读取原留档,不延长截止,不重复建占用,也不重建已释放记录。不修改原商品总额、实付、商户分配、车辆、实际取还车或预约时刻,不进行资金操作。
- 未解除的
HELD预留进入候选车辆、最终锁定可用性和冲突检查,使用前闭后开的精确时间区间。截止只代表需要核对付款结果,不会直接释放;原派单已终止也不忽略未解除预留。车队车型/车牌修改和删除检查包含预留,并保留先锁车辆、随后非锁定查询的顺序,不在该维护入口反向获取派单锁。真实锁等待行为仍未验证。 - 预留方案进入
PAYMENT_RESERVED后,申请撤回、驳回、重新制定方案及新变更受服务端保护。释放仅接受支付订单和关联同时取消、用户确认留档与实际预约均匹配的已生效方案,或成功退款留档完整覆盖差额。仅付款成功、期限已过、退款处理中、部分退款、重复或归属不符的资金记录均不能释放;原始预留和首次释放原因保留,已生效方案不被改成取消。 - 数据表以方案主键、支付单唯一及未释放派单生成列唯一约束兜底;释放状态校验明确要求非空原因与时间。付款创建、用户付费同意及驾驶资格核验、回调后的协调任务、二次适用性校验、生效留档、失败退款、累计差额金额展示及主订单取消/退款联动仍待实现。不得把本阶段预留基础当作持续占用与资金流程已经闭环。
- 针对最终共享查询及测试文件重新执行完整Maven回归,1851项:1837通过、14项环境测试跳过,0失败、0错误。日志为 WSL
/tmp/xiedao-change-holds-final-backend.log,以本次各模块结果统计,未计入旧报告。新增16项包含11项预留服务、3项Mapper/结构、1项申请保护及1项通用差价入口阻断;测试使用临时进程级AES密钥,未修改业务配置。 - 可选MySQL用例扩充V012重复执行、真实Mapper读写、到期仍占用、时段边界、排除本派单、最终锁定查询、车队保护、唯一约束及释放留档检查。隔离MySQL/Docker仍不可用,实际迁移、并发及事务回滚没有执行。代码检视、SQL契约和模拟持久化不替代这些验收。
- 本阶段未修改前端,未重跑网页构建、小程序和浏览器测试;此前结果仅保留为对应阶段证据。受版本控制的差异空白检查通过;全部未跟踪文件检查仅发现原审查报告第3/4行既有Markdown双空格换行,予以保留,本阶段新增代码未发现空白错误。
- 未执行业务库迁移、部署、真实付款/退款/分账/通知/上传,未启用任务或押金。发布前必须先完成V012迁移,因为共享车辆查询已引用新表;此要求不等于当前代码可发布。A1–A16完整目标继续进行中,其他未完成及未验证范围全部保留。
付费同意留档、支付结果交接与取消核对
- 新增
CarRentalChangePaymentService、确认留档实体/Mapper及V013迁移。内部prepare接收本人、方案摘要、生效约定摘要及明确同意,保存约定全文、摘要、同意时间和付款截止。独立差价订单、明细、补费关联、车辆预留、方案支付标识及本人同意由同一事务提交;不触发外部付款、钱包扣款、退款、通知或押金。 - 当前准备范围为已接单/使用中的同商户原车正差额租期方案,商户新增分配须在零至用户差额之间,原订单须有唯一匹配明细。仍复用方案、用户、原预约/金额/地点、商户确认、库存与停用日期核验;使用中延长租期在创建付款前验证已完成的驾驶资格记录及新租期有效性。不覆盖原商品总额、原实付、商户原分配、预约或真实交接。
- 方案新增只绑定一次的
payment_order_id,创建预留时同时从READY进入PAYMENT_RESERVED。此标识从已锁定的方案读取,使确认重试和取消核对能先锁支付订单,再锁支付关联、确认记录及车辆/预留;不提前锁预留或补费关联来反查支付单,避免与其他派车的车辆检查形成反向等待。释放也改用方案支付标识和当前预留行核对,不依赖事务旧快照寻找预留。 - 相同方案及同意摘要重试读取原付款、原同意和原截止,不创建替代订单、不延长占用、不重建已取消记录。原请求结束或原租车继续履约后也保留第一次同意;不同本人、方案/约定版本、付款身份或金额不能冒充原确认。专用差价准备方法要求已有事务,通用补费创建仍明确拒绝新触发类型。
- 租车变更的支付后置处理只将结果保存为PAID待协调,不把补费关联直接标为APPLIED,也不完成差价订单或原租车。原补费手续费明细计算保留,但在变更生效协调前不进入商户钱包账本、结算计划、推广结算或履约完成上报。原租车额外费用仍沿用已验证的入账与完成流程,本轮有真实服务串联的本地回归。
- 支付结果持久保存当前结果版本及已处理版本。重复支付/取消/退款报告不增加新版本;旧版本回执不能确认较新的结果。回写只获取支付侧订单、补费关联和确认记录锁,不获取租车原订单/派单/车辆锁。资金渠道金额、用户、原报价、商户差额和确认全文摘要均需匹配。已取消后的支付成功等冲突拒绝静默覆盖,留待原渠道核实。
- 通用订单REFUNDED状态只记录为
REFUND_REPORTED核对信号,不宣称差价已全退、不把补费关联直接改为全退,也不据此释放车辆。内部reconcileCancelled只消费订单、补费关联及结果留档均已取消的结果,在同一事务核实释放预留、结束本版方案、保存处理回执及取消事件;原变更申请仍可重新制定方案,原预约不变。取消重复核对不再释放或重复记事件。 - 共用完成入口和商户结算入口新增差价变更门槛:须存在已生效方案/申请、与原付费同意一致的本人留档,以及该支付单对应的已生效释放记录;仅订单PAID/COMPLETED或已有结算计划不能绕过。取消及超时关单沿用严格外部关闭确认,服务不可用或关单失败保留待付,不直接释放预留。
- 当前没有控制器或定时任务调用
prepare或reconcileCancelled,也没有提供用户付费确认页面。原预支付入口和支付编排入口均显式阻断该触发类型,包括钱包路径;不因内部准备代码存在就允许真实收款。支付后的预约重验与生效、失败差价退款及恢复、累计金额展示、主订单退款联动、到期协调调度和三端结果通知仍需继续实现,不能将本阶段称为付费变更已上线。 - 最终完整Maven回归1880项:1866通过、14项环境测试跳过,0失败、0错误;日志为 WSL
/tmp/xiedao-change-payment-backend.log,使用临时进程级AES密钥,按本次模块结果统计。新增29项包含20项准备/结果/取消服务测试、4项Mapper与结构测试,以及完成、结算、双支付入口和关单保护的补充覆盖。最初编译发现本模块没有Lombok,已改用现有实体的显式访问方法,没有引入新依赖;最终测试覆盖修正后文件。 - 可选MySQL检查扩充V013重复执行、方案支付标识单次绑定、原报价不改写、确认/付款唯一性、结果版本、陈旧回执阻断、原同意与截止保留,以及双连接旧快照后的当前锁定读。没有可用隔离MySQL,实际迁移、锁等待、并发和事务回滚仍未执行;模拟持久化的异常测试不代替真实回滚验收。
- 本轮未修改前端,未重跑网页构建、小程序或浏览器测试;旧前端证据仍仅适用于对应阶段。受控代码及本轮新增文件未发现空白错误,原审查报告的两处Markdown双空格换行保留。未执行业务库迁移、部署、真实付款/退款/分账/通知/上传,也未启用任务或押金。V013需要在未来启用准备流程前执行;不改写历史同意或补造历史支付标识。A1–A16完整范围和其他待办保持不变。
付费方案内部生效、累计金额与结算保护
- 新增
CarRentalChangeExecutionService.applyPaid,仅供后续原订单协调流程调用,没有控制器、回调或定时任务调用。按原订单/派单/申请、方案、差价支付及确认记录的顺序核验,支付侧回调不反向获取原租车锁。当前支持同商户原车的正差额租期方案,不包含换车、负差额或新用户收款入口。 - 生效前重新核对本人付费同意、最新方案、原商户对同版方案的确认、原预约/地点/车辆、累计金额、驾驶资格、精确时间冲突和新增覆盖日期停用状态。支付记录须唯一成功、正反向关联同一独立差价单、金额和本人匹配;微信部分有渠道流水,支付时刻不早于同意时刻且不晚于原付款截止。及时付款允许在报价过期后协调,但当前期望租期仍须适用;过期后实际付款不能直接改期。
- 新增
CarRentalChangeFundingReader,在持有差价订单锁时,通过独立只读事务查询最新已提交退款记录,不锁退款行,不复用原事务的旧快照,避免与先锁退款的旧退款处理形成反向锁等待。任何退款记录,包括失败、关闭及已驳回等尚需核实的历史,均阻断直接生效和后续完成;成功付款记录存在非零退款累计也不能用于生效。此为保守阻断,尚未实现核实后自动恢复;事务注解和本地调用测试不代表真实隔离及并发已验收。 - 核验通过后,在同一事务中保存原付费同意对应的生效留档,更新预约日期/精确时刻及日期差租日,将方案、申请和补费关联标记生效,核实后释放本方案预留,保存支付结果版本回执及审计事件。取车前旧的待确认/已确认交接单失效而不覆盖原材料;使用中的真实交接、原商品总额、原实付、原商户分配、车辆及原商户/平台处理依据不改写。任一步写入失败抛错,不把失败描述成已生效。
- 差价商户收入仅按新增分配冻结,手续费按实际微信付款部分及本商户新增分配比例计算,钱包部分不虚增微信手续费;商户新增分配为零时不伪造冻结收入。这里不完成差价订单、不放款、不启动实际结算或对外履约上报。原租车完成后的差价完成/受管微信履约/结算协调仍待接入。
financialWithChanges按方案ID顺序重建本次变更前累计商品金额、微信付款、钱包抵扣和商户分配。逐笔验证原申请、本人生效留档、前后金额连续性、同商户分配及独立差价订单;已退款/退款中、存在退款记录、错绑和损坏历史拒绝继续报价或接受。零差额不增加累计金额,不改写原订单。平台发布、商户确认、零差额确认及正差额预留复用该核对。变更后总额限制仍为100万元。- 已生效重复处理核对原生效记录、原付费约定、预留释放及结果回执,不重复改期或入账;即使已有后续预约,也不把当前预约改回旧方案。差价共用完成/结算门槛要求原租车已完成、差价为已付/已完成、原本人及申请绑定、已处理支付结果和完整释放记录;差价退款中/已退款或存在待核实退款记录时继续阻断。主订单退款与差价资金联动尚未闭环,不能据此宣称全部结算竞态已解决。
- 最终完整Maven回归1909项:1895通过、14项环境测试跳过,0失败、0错误。相比上一阶段新增29项,覆盖累计资金、付费生效、成功付款/退款及版本保护、原申请服务与准备/预留/执行串联、混合渠道和零商户收入、交接失效、持久化失败、重复处理及完成保护。持久化、资金账本及外部系统仍用测试替身,未声称实际事务回滚或真实资金流转。最终日志为 WSL
/tmp/xiedao-change-apply-final-backend.log,使用临时进程级AES密钥。 - 可选隔离MySQL用例新增双连接旧快照后的已生效历史当前读、按ID排序、其他派单隔离及申请状态不一致时仍返回方案供服务拒绝的检查。当前14项环境测试仍跳过,这些数据库用例没有执行;没有在业务库执行迁移。本轮不新增迁移文件,继续依赖先前V006至V013相应结构。
- 本轮未修改前端,未重跑网页构建、小程序或浏览器测试。原三端金额标签中的“原订单”尚须在开放连续付费变更前调整为“本次变更前累计金额”,同时单列原订单金额及历次差价/退款明细。尚无用户付费确认、到期结果协调、失败原渠道退款及恢复、差价完成/结算联动或生效通知,收款入口继续关闭。
- 受版本控制文件及本阶段新增文件空白检查通过;原审查报告两处Markdown双空格换行保留。未部署、未发送真实消息、未执行真实付款/退款/分账/上传,未启用任务、押金或自动扣款。A1–A16及其他待办范围全部保留,完整目标保持进行中。
主租车完成后的差价履约与结算协调
- 新增
CarRentalChangeCompletionService,把差价订单完成与微信履约交接分为独立事务。第一步沿用原订单、派单、申请、方案再差价订单的顺序,核验原租车已完成、真实归还及有效还车确认、本人生效留档、成功资金记录、无待核实退款、原差价收入明细与冻结状态;主租车仍在用、退款中或缺少完成依据时不推进。 - 差价订单通过共用
OrderCompletionService和订单状态机完成,新增商户收入进入现有结算计划与待结算账本,不重新冻结、不增加原订单金额、不改写真实交接。沿用差价订单现有结算策略、受管微信状态及发货同步门槛,并核对保存后的结算金额和商户归属;完成订单不代表微信已结算或收入已可提现。 - V014为原付费同意表追加可空
completed_at、fulfillment_queued_at及扫描索引。完成时间只保存一次,原本人同意、摘要、付款截止和支付结果不可覆盖;差价完成、结算计划、待办及事件在同一事务内提交。已有完成待办的重试不再次调用共用完成服务,不重置完成时间或重新入账。 - 第二步只读取已提交的完成/生效依据,在独立只读事务中核对原租车和差价订单最新完成状态及退款历史,再进入现有支付单级微信履约服务。此阶段不获取原租车或差价订单锁,避免持有订单锁后反向等待支付/履约回调;原租车完成阶段也不调用需要支付记录锁的微信触发方法。真实数据库锁等待和并发仍未验收。
- 新增
RENTAL_CHANGE微信履约触发类型,受管微信付款按虚拟服务留存差价履约明细,核对付款状态、退款累计、履约归属、触发类型及实际保存的发货记录。关闭、有退款、其他业务触发或缺少明细不能记为已交接;重复调用不重复写发货记录,不重置已进入人工核查的上传状态。钱包及非受管付款不伪造微信发货记录;交接时间只代表本地处理完成,不是微信上传、确认或结算成功证明。 - 履约队列写入和差价交接回执在同一事务中保存,失败抛错,完成待办仍可在下一轮继续处理。已有微信上传重试和人工核查仍由原队列负责;不因本轮任务再次扫描就重置人工处理状态,也不把队列异常标成实际送达。退款发生后的资金与主订单协调仍需继续补齐。
- 新增
carRentalChangeCompletionTask.process(),固定本轮最大方案ID,分别分页处理差价完成和履约交接,逐条异常不阻断后续,分页乱序/越界拒绝继续。每批默认100、限制1至500;开关car-rental.change-completion.enabled默认false,V014中的Quartz任务默认暂停,且已加入调度安全模式。没有启用任务或转移调度责任,也没有接通原支付结果的自动生效/退款协调。 - 完整Maven回归1931项:1917通过、14项环境测试跳过,0失败、0错误。新增22项覆盖两步协调、原租车和退款阻断、收入/结算计划核验、完成/交接写入失败、重复处理、微信记录归属、关闭/退款及人工状态、非受管付款、独立只读事务声明、分页和安全模式。共用订单完成、订单状态机及商户结算服务有实际类串联,验证差价仅生成一份计划,受管微信未结算时不放款、模拟最终结算后仅释放一次;账本、数据库和微信状态仍为测试替身,不代表真实资金或回调验收。
- 最终后端日志为 WSL
/tmp/xiedao-change-completion-backend.log,测试使用临时进程级AES密钥。可选MySQL检查增加V014重复迁移、任务唯一且暂停、完成/交接标记单次写入、陈旧时间阻断、待办扫描和原同意保留;隔离环境用例仍未执行。没有执行业务库迁移、真实微信上传、付款、退款、分账、消息或部署。 - 本轮未修改前端,未重跑网页构建、小程序或浏览器验证;三端累计账单/文案、用户付费确认、生效及退款通知、失败差价退款、主订单退款联动、换车分段交接、归还后早还差额、完整租赁协议、复杂活动权益及全部真实环境验收范围保留。空白检查仅保留原审查报告两处Markdown双空格换行。押金、自动扣款及新差价收款入口保持关闭,A1–A16完整目标继续进行中。
未生效差价原渠道退款与预留释放
- 新增
CarRentalChangeRefundService、独立退款工作记录/Mapper及V015迁移。方案、差价订单、成功付款、资金退款记录和退款单号分别有唯一约束;固定本人、原订单/派单、报价摘要、原付款ID、微信/余额分额及首次原因/操作者。更新语句不能覆盖这些字段,重试也不能换单号或改写首次处理依据。 - 内部准备沿用原订单、派单、申请、方案、差价订单、补费关联、本人同意和工作记录锁定顺序。仅限已确认付款但尚未生效的原车正差额方案;已有生效留档、完成标记、冻结/入账状态、商户账本或结算计划均拒绝进入此流程。不要求原租车仍可改期,因此主订单正在退款、已归还或原预约后来变化时,仍可退回未生效差价;不覆盖原租金、原商户分配、原预约或真实交接。
- 支付编排新增显式原付款ID的
prepareRefund重载,验证本人、单订单正反向关联及完整渠道金额,避免选中失败的旧付款尝试。旧重载和其他既有退款调用保留;没有宣称全站旧首条付款关联逻辑已统一修复。准备强制加入已有事务,只保存资金退款记录并将该独立差价订单置为退款中,不调用微信或退余额;工作记录与资金回执、事件在同一事务保存。 - 将生效资金核验与补偿时间条件区分:生效仍拒绝超过原截止的付款;补偿允许已核实的逾期成功付款,但不接受早于本人同意的付款、缺失/重复成功记录、渠道/归属不符或已有待核实退款。付款成功不等于方案已生效,也不能因付款逾期而拒绝退回已收差价。
- 对账使用独立只读READ_COMMITTED事务读取已提交付款、退款和商户入账证据,不在持有订单锁时反向锁退款/付款记录。必须只有唯一且匹配的退款记录、原成功付款和正反向关联,原退款单号、本人及全渠道分额均需一致;微信还须成功状态、原退款流水和成功时间,余额须成功状态。通用
SUCCESS、订单REFUNDED或多个退款记录相加达到原金额均不能单独作为释放依据。 - 不以支付主单退款累计作为唯一成功证明。现有混合退款重试分支的累计字段可能滞后,本阶段没有改动其历史累计语义;核验拒绝负数/超额累计,最终依据仍为唯一原退款及各渠道成功留档。渠道异常、历史不一致或证据缺失保留人工核查,不能伪造成功或替换原退款。
- 核验全退后,同一事务记录退款结果版本、将独立补费关联标为全退、完成退款工作记录、核实释放预留、取消此版方案并保存回执及事件。车辆释放入口独立重验完成工作记录、本人付款/退款证据与未生效状态,替换原先仅累计成功退款金额的宽松检查。申请可以保留待重新制订方案,原预约不变;重复对账只验证原完成与释放留档,不再次释放或重复退款。
- 新增
CarRentalChangeRefundDispatcher和carRentalChangeRefundTask.process(),仅消费已保存退款记录,通过五分钟租约及条件回写处理,使用原退款记录重试;自动尝试达到上限或原渠道关闭/异常则转人工核查。人工状态仍允许晚到的成功结果对账,不自动重新发起退款。源业务异常和持久化异常没有被简单归类为应退款,永久变更失败的自动判定仍未接入。 - 新任务固定本轮最大方案ID和截止时刻、限制分页大小、拒绝乱序/越界页,并隔离单项失败。
car-rental.change-refunds.enabled默认false,V015中的Quartz任务默认暂停,已加入安全模式;未修改调度归属、启用开关或运行真实退款任务。外部接口响应丢失仍通过原号恢复,不能声称网络调用恰好一次。 - 最终完整Maven回归1965项:1951通过、14项环境测试跳过,0失败、0错误,较上一阶段新增34项。实际准备、预留、退款编排及回调服务串联覆盖微信2000分加余额3000分全退、纯余额5000分、旧失败付款忽略、主订单变化/逾期、幂等、错误资金证据、保存失败和锁顺序。数据库、钱包和微信仍为测试替身,异常传播测试不代表真实事务已回滚。全量首次因临时测试密钥编码不符中止,修正为项目要求的32字节Base64后完整重跑通过,没有修改业务密钥或配置。
- 最终后端日志为 WSL
/tmp/xiedao-change-refund-backend.log。可选MySQL检查增加V015重复迁移、任务唯一且暂停、原资金身份唯一、当前锁定读、租约保护、首次原因/分额保留、完成幂等及显式回滚检查;隔离环境用例仍未执行,没有在业务库运行迁移。受控及未跟踪文件空白检查仅保留原审查报告两处Markdown双空格换行。 - 本轮未修改前端,未重跑网页构建、小程序或浏览器验证;尚无控制器/自动失败判定调用此退款准备入口,也未提供用户差价退款进度、商户处置和平台核查页面或通知。收款仍关闭。主订单退款联动、到期协调、换车分段交接、归还后早还差额、完整协议、复杂活动权益、逾期/平台主动提醒及A1–A16所有其余待办和真实验收继续保留。未部署、未执行真实付款/退款/分账/通知/上传,押金和自动扣款保持关闭,完整目标仍未完成。
差价支付结果自动协调与实际支付号关单
- 新增
CarRentalChangeCoordinatorService、分步调度器及carRentalChangeCoordinatorTask.process()。已付款的生效判断与未生效退款准备共享原订单、派单、申请、方案及支付侧锁,处于同一事务;不能先退出生效事务,再用过时的失败判断另起退款。已有退款工作记录只进入原单对账,不改写首次原因或创建第二条退款。 - 生效服务只把写入前明确识别的业务拒绝转换为退款理由,包括原租车已结束、车辆已实际归还、原预约/车辆安排已变化、期望租期已不能执行、超过原付款截止、车型/车辆资料变化、车辆冲突或停用,以及已核实驾驶证有效期不足。退款准备仍独立核对原资金、本人同意、未生效状态和没有商户入账;业务不能履行不等于可以对错误资金记录退款。
- 原订单正在退款且结果尚未定案、报价/资金关联损坏、核验资料缺失或格式错误、数据库或账本失败仍抛错并保留核查/重试,不被泛化成应退款。生效写入后的异常不能转换成退款成功或另起补偿;相关异常要求事务回滚。驾驶证覆盖判断复用交接服务,原准备/交接入口仍以原校验信息拒绝无效资格,不降低人工核验要求。
- 新增
CarRentalChangeClosingService。用户取消和通用订单超时入口识别差价触发类型后进入专用流程;到期以本人第一次确认保存的截止为准,不按普通订单统一时长抢先取消。通用支付主单的关单方法明确拒绝直接关闭租车变更付款,防止只处理某次付款或在服务缺失时绕过专用核验。 - 专用关单先锁独立差价订单、补费关联及同意,再通过独立只读事务读取付款尝试;验证本人、金额、未成功状态、无退款、唯一记录以及单订单正反向归属。微信部分逐一关闭全部实际支付号,同时关闭可能存在的旧业务订单号;并不因业务订单号在微信不存在就假定其他实际支付号已关闭。成功付款迹象、错误归属、重复/合单关联及不完整资金记录均阻断操作。
- 外部关单全部确认后才保存原关单依据、推进独立订单取消及支付结果交接。任何一次网络错误、
ORDERPAID或依据保存失败都会阻止本地取消和车辆释放;部分外部号已关闭但后续失败时,可按原号重试,不能把未知结果记为关单成功。未实际走微信的纯余额待付单不伪造微信调用,已消耗余额的取消仍由既有订单状态机处理;没有真实余额资金测试。 - V016追加只写一次的
closed_at、close_evidence_json、close_evidence_hash,保留原确认全文、摘要、接受时间、截止及付款结果版本。关单依据绑定本人、差价订单、报价、原支付号/渠道分额和取消原因;不向历史已取消记录补造依据。缺少或错绑依据的旧取消结果不再足以释放车辆,须核查。 - 车辆释放在另一阶段按原租车锁序进行,独立验证取消结果及关单依据,并重新读取付款尝试与原依据逐项比较。关单后出现新付款尝试、成功付款、退款或关联变化均阻断释放;重复取消不重置第一次关单依据。此检查不代替未来收款入口与取消共用支付订单锁的要求,开放收款前仍须联验支付创建、回调和关单竞态。
- 定时任务只扫描付款预留中的待处理结果或已到截止的待付方案,固定最大方案ID和截止、限制批大小、拒绝非法分页并隔离单项异常。外部关单在获取原租车锁之前完成,再进入原租车侧协调;不在持有原租车锁时调用支付主单关单方法。
car-rental.change-coordinator.enabled默认false,V016新任务默认暂停,已加入安全模式,没有转移调度责任。 - 最终完整Maven回归1999项:1985通过、14项环境测试跳过,0失败、0错误,较前阶段新增34项。覆盖实际生效与退款准备服务串联、晚付款/原预约变化/车辆冲突、驾驶资格拒绝与错误区分、写入后失败不转退款、实际及旧支付号关单顺序、到期/本人/未知结果/重复与新付款保护、共享取消与超时分流、当前读和事务声明、扫描及安全模式。数据库和微信仍用替身,不能将模拟状态与注解检查视为真实锁等待、回滚或资金验收。
- 最终日志为 WSL
/tmp/xiedao-change-coordinator-backend-final.log,使用临时进程级32字节Base64测试密钥。初次编译发现项目通用异常类不可继承,已改用私有业务拒绝类型并在原入口转换;全量发现旧取消测试仍走通用关单,已更新为验证专用路由并保留失败不取消的断言,最终完整重跑通过。中途一次只读文件检查的WSL客户端连接失败,确认测试已结束后重新检查,没有重启WSL或用户服务。 - 可选MySQL检查增加V016重复迁移、任务唯一且暂停、关单依据单次写入、原同意/截止不变及已完成单不能记录关单。隔离环境用例仍未运行,未在业务库执行迁移。未修改前端,未重跑网页/小程序/浏览器测试;三端付费确认、原单及累计账单、退款进度/消息、异常核查入口与真正的支付创建仍需接通和验收。收款继续关闭,主订单退款联动、换车分段交接、归还后早还差额、完整协议、复杂活动权益及A1–A16其余待办全部保留,完整目标未完成。
三端差价进度与原单、累计及退款金额展示
- 新增
CarRentalChangeProgressService,通过现有平台、商户、用户报价列表的公开paymentProgress字段返回只读进度,不新增收款、代付、退款或人工改状态入口。仅有独立付款绑定的方案读取资金进度;此前无独立付款的报价仍返回空字段。沿用现有本人、商户及平台权限范围,重新核对方案、原申请、用户、原单、独立订单、同意全文摘要与车辆预留。 - 读取使用独立只读REPEATABLE_READ事务,不锁原单、方案或资金记录、不推进任何状态。取消及待付的付款尝试继续使用既有独立只读资金读取,避免把较早快照里的待付当作可取消证明。状态/留档不一致只返回固定的“待平台核实”提示,隐藏可能错绑的订单号、金额和时间;数据库异常继续抛出并显示读取失败,不伪装成业务处理成功。实际隔离语义与并发尚未在真实MySQL验收。
- 独立区分待付、到期待关单、已付款待生效、已生效、取消待释放、已取消释放、退款处理中、退款待人工核查、原渠道已退但业务待核对、已全退释放。订单的PAID、REFUNDED及退款主状态SUCCESS均不是单独的完成证明。付款进度与实际生效共用原成功资金绑定校验;全退继续复用原资金/原退款号及各渠道证据,还须有完成工作记录、回执、方案终态和对应车辆释放留档。
- 退款展示区分本次应退与微信/余额实际已退。微信须同时有渠道成功状态、原渠道退款流水和成功时间,余额须有成功留档;纯余额不伪造微信成功。已经渠道全退但未完成业务核对时不显示“已全退并解除预留”,部分渠道完成和人工核查亦不声称全部完成。公开字段不包含openid、支付/退款流水、内部操作者、错误原文、租约令牌、用户驾驶资料或商户收入。
- 用户与商户小程序、平台与商户网页均接入只读进度,保留原同意时间及截止。报价的“原商品总额”改为“本次变更前累计金额”,对已有差价单另列原订单商品总额、本次差价及本次应退/分渠道已退;这不是跨全部方案的完整累计实付/退款账单。已有付款预留时不再显示报价阶段“不锁定车辆”的通用须知;刷新中或读取失败时隐藏旧资金进度,未知金额不默认显示已退0元。
- 最终完整Maven回归2015项:2001通过、14项环境测试跳过,0失败、0错误;日志 WSL
/tmp/xiedao-change-progress-backend-final.log。新增16项,其中15项进度服务测试及1项三端公开视图授权/字段测试;实际准备、生效、预留服务有本地串联,但数据库和资金仍使用替身。初次定向测试把准备阶段锁调用误计为读取阶段,已限定验证范围后完整重跑;没有改动业务密钥,测试仍使用临时进程级32字节Base64密钥。 - App与MerchantApp全部347项Node测试通过,日志
/tmp/xiedao-change-progress-mini.log;新增两端只读进度、分渠道金额及未知金额行为测试。两端网页生产构建通过,日志/tmp/xiedao-change-progress-admin-build.log、/tmp/xiedao-change-progress-merchant-build.log。租车浏览器最终回归通过,覆盖新增进度及旧履约流程,日志/tmp/xiedao-change-progress-browser-final.log,截图位于/tmp/xiedao-car-rental/;用户/商户变更WXML重新编译,复用未改WXSS的编译结果,实际模板在320/390/768px检查通过,日志/tmp/xiedao-change-progress-render.log,截图/tmp/xiedao-car-rental-handover/。网页测试库首次查找不存在的默认浏览器,改为指定本机已安装浏览器后重跑,没有更新项目依赖。已复查长单号、部分退款及核查状态截图,并修正测试样本中的旧报价金额,使样本逐项差额与付款金额一致;测试自建前端服务在结束后退出,没有停止用户原有服务。 - 本阶段未移除两条现有差价收款保护。后续核对实际SQL后修正:通用重试代码虽设置了新的到期值,但现有
updateRecord不写回expire_time,不能据此断言数据库截止已被延长。实际缺口是通用渠道请求未绑定用户原截止,且首次预支付与本地付款身份处于同一事务,外部可支付结果可能与本地回滚不一致。专用持久付款身份、不可延长的渠道截止、收款与取消互斥、用户付费确认/付款恢复、变更及退款通知、连续累计账单、平台异常恢复、主订单退款联动、换车分段交接、归还后早还差额、完整租赁协议、复杂活动权益、逾期/平台主动提醒及A1–A16其余待办均保留。 - 本轮不新增或执行业务库迁移,仍依赖此前差价相关结构;没有启用调度任务、改变调度归属、部署、真实付款/退款/分账/通知/上传,押金和自动扣款保持关闭。三端进度代码及模拟验证不等于收款已开放或全部功能完成,目标继续进行中。
差价预支付持久身份、固定渠道截止与提交前后关单
- 新增内部
CarRentalChangeCollectionService与分阶段调度器。先在独立事务保存唯一PAY付款号、本人、openid、渠道金额、独立订单正反向关联及原截止,再在另一事务保存“开始向渠道提交”标记,最后在第三事务请求预支付并留存确认时间。调度器禁止加入外层事务,各阶段为REQUIRES_NEW;真实Spring代理配合事务记录器验证前两次提交先于外部调用、提交阶段抛错只回滚第三次事务,但这不是数据库持久性或真实资金验收。 - V017仅新增付款身份、渠道提交开始/确认时间及唯一索引,不补造历史身份,不启用任务。身份与两个时间只写一次,不覆盖原本人同意、原金额或原截止;创建前有未绑定付款尝试则停止核查,不直接接管旧付款。重试严格使用原身份、原openid、同一独立订单和原渠道金额,不新建第二付款号、不延长有效期。
- 提交与取消沿用独立订单、补费关系、同意记录的锁顺序。持有订单锁期间只经新只读事务核对资金,不更新或锁定既有资金记录,避免反向等待支付回调的资金锁。独立付款及“开始提交”标记已在渠道请求前提交,因此渠道成功后回执保存失败、签名失败或网络结果未知时,原付款号仍可核对/重试。创建、标记、关联及回执任一步保存失败均抛错;测试中的异常传播不代表真实事务回滚已验收。
- 平台微信适配器增加仅供专用流程使用的固定截止预支付方法,实际请求携带原截止的
time_expire,时区与秒级格式有HTTP请求捕获测试。已过截止、截止与付款留档不同、付款人不同以及开发模拟openid不能进入该渠道方法;不自动补足渠道最短剩余时间或延长截止。拒绝缺失预支付标识;专用失败提示不向客户端返回底层签名请求详情。普通订单旧预支付方法保留原契约,未进行全站付款语义改造。 - 专用关单对真实PAY付款号改用严格关单:
ORDER_NOT_EXIST不再作为已关闭证明,网络未知与已付款结果也阻止本地取消和库存释放,避免仍在途的请求稍后创建可支付订单。只有绑定本次持久身份且明确从未开始提交的付款才可跳过该PAY号的外部关单;可能存在的旧业务订单号仍按原方式处理。取消先于提交标记时,后续标记/预支付被订单状态阻断;标记之后结果未知时保留原号与预留,不能因查不到订单自动释放。长期不存在或到期的未知提交,仍须补齐可靠查单与人工核查恢复。 - 核查并修复PAY回调丢弃渠道成功时间的问题:验证回调后将带时区的原付款时刻按同一瞬时传递给支付编排;错误时间不退化为当前时间。租车差价缺少渠道时间时在资金状态更新前阻断,不因支付关联上的类型字段缺失就绕过。非租车付款缺失时间的旧兼容行为保留。此变更用于避免把迟到回调误判为逾期付款,不代表主动查单恢复也已接通。
- 本阶段专用收款组件尚无控制器、页面或任务调用,原两条通用差价收款保护继续关闭。内部准备当前只支持既有原车正差额确认所生成的纯微信订单;余额或混合渠道不得静默改为微信全额再收,相关钱包收款仍待完成。没有把内部组件等同于用户已能付款,用户付费确认、主动查单/失联恢复、三端付款交互、变更通知、全部主订单退款/换车/早还/协议/活动权益及A1–A16其他要求继续保留。
- 最终完整Maven回归2039项:2025通过、14项环境测试跳过,0失败、0错误;日志 WSL
/tmp/xiedao-change-collection-backend-verified.log。新增24项:14项收款及Spring事务边界、1项Mapper协议、1项差价原成功时间保护、6项微信适配器请求/关单/签名参数以及2项控制器回调时间测试。原有实际准备、预留、取消和释放服务有本地串联,HTTP、数据库及资金仍为测试替身,没有使用真实微信交易或宣称真实并发通过。途中修正了测试模拟覆盖产生的提前副作用、基础类型匹配器、可选迁移装配,并将易被金额规则误识别的付款ID字段改名为fundingId;没有放宽金额命名校验。测试仍使用临时进程级32字节Base64密钥,未修改业务密钥。 - 本轮未修改前端,未重跑网页构建、小程序和浏览器;上一轮三端只读进度证据仍仅属于对应版本。不执行业务库迁移、部署、真实付款/退款/分账/消息/上传,押金、自动扣款及新任务保持关闭。V017已扩充可选MySQL重复迁移、一次绑定、时间不覆盖、原截止不变与唯一性检查,隔离MySQL/Docker仍未可用,实际数据库用例没有执行。微信官方页面查询本轮没有取得可用内容,未以此声称已完成真实渠道规则验收。
原付款严格查单与漏回调恢复
- 新增专用
queryPayment,通过原PAY付款号查单,不复用将查不到和网络失败统一返回null的旧查询。核对渠道商户号、应用、原付款号、JSAPI类型、精确整数金额和CNY币种;成功结果还须匹配原付款人、渠道流水及带时区的原成功时间。缺失付款号不以请求号补造,分数金额不截断,缺失成功时间不以观察时间替代。旧通用查询契约不变。 ORDER_NOT_EXIST、网络失败、空返回、未知状态和凭据不符均不作为未付款或已关闭证明。渠道REFUND不被视为本地全退完成,进入待核查;NOTPAY、USERPAYING、CLOSED等观察结果本身不修改订单、释放库存或允许换号付款。到期取消仍须走既有严格关单并保存依据。- 新增
CarRentalChangeRecoveryService与分步调度器。先在只读事务核对原方案、同意、独立订单及唯一资金关联;事务结束后才查渠道;成功回写在另一事务按资金记录、独立订单、补费关联、同意的顺序锁定并重验。回写不锁原租车或车辆,避免与回调锁序相反;查单期间取消、退款、资金身份变化或已有不同流水/时间均拒绝覆盖。 - 成功恢复复用支付编排和业务结果交接,保存原付款时间并将差价留在已付待协调状态,不直接改预约、解除预留或完成租车。已保存SUCCESS但尚未交接的资金结果可以用原留档补齐业务结果,不重复查渠道或再次收款。真实晚付款仍记录为已付,再由原协调器判断不能履行后的退款准备;不能因超过截止就按未付取消。
- 默认关闭的协调任务先恢复原付款,再重新读取已提交的业务结果,最后按结果进入生效/退款准备或到期关单。扫描增加已开始渠道提交、尚未到截止的待付方案,覆盖回调丢失及业务交接未完成;保留固定上界、批量分页和逐项异常隔离。协调/查单调度器禁止加入外层事务。本轮没有新增迁移,扫描依赖此前V017字段,任务仍未启用。
- 最终完整Maven回归2062项:2048通过、14项环境测试跳过,零失败、零错误。较上一阶段新增23项,包含13项恢复服务与事务边界、7项适配器严格查单、3项协调顺序测试;Mapper契约同步覆盖提前恢复扫描。实际准备、预留、收款身份、支付编排和结果留档有本地服务串联,数据库、订单状态机和HTTP仍使用替身,未进行真实付款。
- 最终日志为 WSL
/tmp/xiedao-change-recovery-backend-final.log,测试使用临时进程级32字节Base64密钥,未修改业务配置。Spring真实代理与事务记录器验证只读结束后才查渠道、回写失败触发回滚流程,不代表真实数据库已回滚或并发验收通过。隔离MySQL与迁移环境测试仍跳过,未在业务库运行迁移;新增文件与受版本控制差异空白检查通过。 - 本轮没有新增用户控制器或页面,不能把内部恢复视为用户已能付费变更;两条原收款保护保留,余额收款、付费确认及原请求跨重载恢复、变更通知、完整累计账单、长期查不到/异常渠道人工处置仍待补齐。主订单退款联动、换车分段交接、归还后早还差额、完整租赁协议、复杂活动权益、逾期/平台主动提醒及A1–A16其余要求全部保留。未重跑前端验证,未部署、发送消息或执行真实资金/上传操作;押金和自动扣款关闭。官方微信页面检索未取得可用内容,渠道规则、真实验签及设备验收未完成,完整目标仍进行中。
用户差价确认、独立付款与跨页面恢复
- 新增本人专用
GET /api/app/car-rental/change-plans/{id}/payment及其prepare、prepay、recover、cancel四个POST操作,统一通过@CurrentUser取得本人和openid。服务端同时核对申请与原租车订单归属,付款和取消始终从已保存同意解析独立订单,客户端不能指定付款人、资金记录、金额、商户分配或渠道。新增单方案用户视图沿用公开报价字段,不含内部商户分配或商户处理理由。 CarRentalChangeUserPaymentService禁止加入外层事务,复用已验证的独立准备、三阶段收款、原付款核查、严格关单及原租车协调。首次确认要求明确同意及报价/约定双版本,确认只生成差价订单和预留,不收款;已保存的原确认重试只返回原留档,不重建订单或延长截止。付款只返回调用微信所需的五个签名字段,不返回openid或资金单号。恢复与取消先授权再调用已有服务,未知结果阻止关单/释放,外部错误不将签名请求明文返回用户。- 新增
car-rental.change-payments.enabled发布开关,默认false,控制新确认和预支付。已有本人订单的查询、原确认恢复、核对及取消不因停收而关闭;通用补费/支付入口原有两条租期差价收款保护仍保留。当前专用入口仅支持准备服务已实现的同商户原车正差额纯微信付款,余额/混合旧单不会显示微信全额付款,原租车已取消、退款中、已退款或已完成时不提供继续付款。此处的无锁入口检查不替代已有付款后适用性核查或真实数据库并发验收。 - 用户小程序新增
change-payment页面并注册,从本人正差额报价和已有付款进度进入。分开展示报价、原单/变更前累计/本次差额、独立付款截止、付款/生效/退款进度及本人确认的原约定;“确认报价并生成差价订单”和微信付款是两次独立操作。退出微信付款弹窗不等于取消订单,微信弹窗success不直接认定付款或变更成功;返回、重新进入和刷新按服务端进度核对,未生效退款仍区分微信与余额实际已退。 - 首次确认正文及双版本先保存在按本人、原订单和方案隔离的恢复记录,再发送确认。保存/恢复失败不提交新确认;响应丢失后只核对或重试原请求,页面重建不自动确认或付款;发现服务端已有相同本人同意才清理恢复记录。报价/约定变化、账号不一致、读取失败和旧请求不匹配均阻止继续提交;重复点击及微信弹窗期间的页面返回不重复发起预支付。查询失败隐藏旧资金进度,不声称预约未变化或款项已取消。
- 最终完整Maven回归2079项:2065通过、14项环境测试跳过,零失败、零错误。较上一阶段新增17项,含14项用户工作流、2项控制器身份/输入字段、1项单方案公开视图检查;实际同意准备/预留服务串联保留,数据库、支付调度和用户解析仍以测试替身或注解检查验证,不等同于真实HTTP鉴权、事务回滚或微信验收。日志为 WSL
/tmp/xiedao-change-user-payment-backend-final.log,使用临时进程级32字节Base64测试密钥,未改业务配置。 - App与MerchantApp全部370项Node测试通过,新增23项;日志
/tmp/xiedao-change-user-payment-mini-final.log。新付款页WXML/WXSS及更新的用户报价WXML通过微信编译器,用户报价未改样式沿用原编译结果。实际编译模板配合浏览器替代控件在320/390/768px覆盖新确认、停收、待付款、原请求重试/版本冲突、存储错误、加载/读取失败、未知渠道、到期、已生效和分渠道退款,复查窄屏截图无横向溢出或按钮文字重叠。日志/tmp/xiedao-change-user-payment-render-final.log,截图位于/tmp/xiedao-car-rental-handover/user-change-payment-*.png;这些不是微信运行时或真机验证。 - 本轮不新增迁移,继续依赖已列出的差价结构至V017;未执行业务库迁移、部署、启用任何任务、真实付款/退款/消息/分账/上传,押金及自动扣款关闭。开启收款前仍须完成隔离数据库与微信真实验收,并确认协调、退款、完成/履约任务的配置、启用及调度归属;单一开关不是发布验收证明。官方接口检索本轮仍未取得可用内容,未以本地SDK模拟宣称渠道规则已验证。钱包收款、完整累计账单、三端变更通知、主订单退款联动、换车分段交接、归还后早还差额、完整租赁协议、复杂活动权益及A1–A16其余工作均保留,整体目标仍未完成。
变更申请、报价及零差额生效通知
- 变更申请提交、商户反馈、平台转入报价/驳回、申请撤回,以及报价发布、商户核对/拒绝、旧版替代、本人零差额确认生效接入现有租车通知队列。新增带数据库生成ID的事件对象与Mapper方法,继续写入原V006处理记录表;旧差价资金事件接口保留。通知以实际处理事件ID隔离,不以申请ID或方案ID覆盖多次处理。
- 业务写入和通知入队处于原有事务,事件写入失败、缺少生成ID或任一接收人通知保存失败均抛错,不返回业务成功。原请求、同版报价、原商户意见或已生效确认的重试只读留档,不重复生成通知;旧报价替代与新报价分别留痕。真实数据库回滚与并发仍未验收,测试中的异常传播不等于数据库已证明回滚。
- 未指定商户的申请仍通知本人;存在报价时通知用户、原出车商户和拟出车商户,并按商户身份去重。撤回/驳回读取最近报价,使当前拟出车商户也能获知报价失效;历史报价被替代时通知该旧版的相关商户,不把新报价资料发给不再参与的新旧商户之外的对象。
- 消息只包含公开关联ID、固定状态和说明,不包含原申请原因、完整快照、车牌、驾驶资料、商户分配或内部意见。商户已确认报价不表述为预约已生效;零差额生效明确没有资金变动,不代表已交车/归还。撤回、驳回或替代不表述为原订单取消或退款。
- 用户消息进入本人变更记录页;商户无报价的申请消息进入授权派单变更页,报价消息按申请ID进入相关商户报价列表,不要求拟出车商户拥有原派单详情权限。两端小程序与商户网页均从已验证ID构造本地路径,不采用消息中附带的任意路径;进入页面只读取,不能自动确认方案或启动付款。
- 商户网页新增消息直接打开申请/报价、初次打开立即加载、关闭后切回全部报价,以及只读账号的按钮和方法双重限制。请求失败及过期结果沿用既有保护。两个小程序仅更新消息路由,未新增页面、模板或样式。
- 变更通知回执只更新有租约约束的通知任务,不锁原订单/派单,不读写还车交接,也不启动或重置还车自动完成期限。继续复用
car-rental.return-notices.enabled和既有消息任务,没有启用开关或变更调度归属。外部发送与本地回执仍是至少一次投递,真实送达及网络响应丢失下的重复消息需要验收。 - 最终完整Maven回归2091项:2077通过、14项环境测试跳过,零失败/错误;新增12项。申请、平台转报价、商户核对及零差额生效串联测试使用实际通知服务和模拟Mapper,验证每个事件分别入队及重复确认不重发。日志为 WSL
/tmp/xiedao-change-notice-backend-final.log,测试使用临时进程级AES密钥,未改业务配置。首次定向回归的测试替身覆盖触发了旧模拟回答,已改用无副作用的覆盖方式后完成全量重跑。 - App与MerchantApp全部372项Node测试通过,日志
/tmp/xiedao-change-notice-mini.log;商户能力17项通过,日志/tmp/xiedao-change-notice-capabilities.log。商户网页最终构建日志/tmp/xiedao-change-notice-merchant-verified.log。租车浏览器最终复跑日志/tmp/xiedao-change-notice-browser-final-clean.log,通知截图位于/tmp/xiedao-car-rental/merchant-change-notice-*.png,检查320/390/1280px报价和390px申请入口,未见文字重叠或横向溢出;页面可纵向滚动。浏览器首次测试暴露的测试变量重名、模块导入和初次加载问题已修正,最终记录以无热更新的复跑为准。 - 无新增迁移,通知依赖V005、申请事件依赖V006、报价依赖V007、零差额生效依赖V008及其前置结构。可选MySQL测试补充真实生成事件ID与原审计记录并存检查,但Docker/隔离数据库环境仍不可用,未执行真实库测试。没有执行业务库迁移、部署、真实消息、付款/退款/分账/上传或启用任务;押金及自动扣款关闭。
- 本阶段不包含差价确认、付款、付款取消、付费方案生效、原渠道退款进度通知或平台主动待办推送,不能据此将“全部变更通知”标记完成。余额收款、完整累计账单、主订单退款联动、换车分段交接、归还后早还差额、完整协议、复杂活动权益、异常渠道恢复及A1–A16其余要求继续保留,整体目标未完成。
差价余额预留与付款扣账基础
- 新增
CarRentalChangeWalletService、预留实体/Mapper及V018迁移。服务要求已有事务,预留绑定本人、原同意摘要、方案、独立差价订单、唯一正反向资金关联及原付款截止。可用余额不足或钱包停用时不新建预留;已保存的精确重试不重复冻结,不重建已扣账或释放的预留。这是本人付款金额的预留,不是租车押金。 - 扣账须有原成功资金记录及匹配的HELD留档,按实际预留金额同时减少总余额和冻结额、增加消费累计,并保存普通消费流水及唯一流水身份。重复扣账核对原消费凭据,不再次减少余额。已授权且成功付款的预留允许在钱包后来停用或超过截止后扣账;是否还能变更预约、是否需退款仍由原协调器核对,不能把扣账等同于方案生效。
- 释放仅消费已保存的严格关单/取消依据,原订单、关联、同意、付款尝试、渠道金额及付款号须一致。期限已过、渠道结果未知或已经扣账均不能按未付释放。锁序为独立订单、补费关联、同意、预留、钱包,不在该服务反向锁资金或原租车。付款回调中的差价余额部分改走预留扣账;专用关单在保存取消结果后释放余额,包含取消重试。无有效预留的旧混合差价记录保守阻断,不补造历史预留。
- 普通钱包消费、可用额查询及共享余额更新保护其他付款预留;所有余额变动必须成功保存流水才可返回成功。模拟充值原本可被已登录用户直接增加余额,现默认关闭;仅明确开启且激活dev、未激活prod/production时可使用,并校验正整数分及金额上限。没有修改业务开关、账户余额或业务密钥。
- 本阶段没有将创建预留接入用户收款,没有新增余额渠道确认。用户差价确认、预支付及恢复仍按既有纯微信范围保护;原两条通用差价收款保护、默认关闭的专用收款开关及全部任务保持原样。纯余额/混合付款、付款渠道与金额的不可变本人同意、异常旧单恢复仍待实现。
- 已核实上一轮后台会话正常结束,全量2122项:2108通过、14项环境测试跳过,零失败/错误,日志为 WSL
/tmp/xiedao-change-wallet-backend-final.log。较通知阶段新增31项;定向首跑的两处测试替身/断言问题已修正后才进行该全量测试。可选MySQL测试增加V018重复迁移、真实余额保护、流水/预留回滚及释放检查,但隔离环境不可用,实际测试未执行,不能以模拟异常传播代替回滚或并发验收。
钱包可用余额与实际流水展示
- 钱包返回值保留原
balanceFen总额及frozenAmountFen预留额,另加计算字段availableBalanceFen,不把总额悄悄改成可用额,不新增数据库列。共享只读消费余额查询在钱包停用时返回零,套餐未指定抵扣额的自动填充改为使用此查询,不再取总余额。 - 小程序共用下单、商城与套餐下单采用同一个余额解析方法,扣除其他付款预留;未知状态、缺少计数、非整数分、超出安全整数、预留超过总额或服务端可用额矛盾均不提供抵扣。商城和套餐读取失败清除旧余额选择;不会增加微信已授权付款或自动切换已保存差价渠道。
- 用户钱包页分别显示可用额、账户总额及付款预留,停用钱包另行标明不可付款。余额与明细读取失败时清除过时数据、显示重试,不将失败冒充零余额或空流水;连续刷新及退出后迟到的响应不能覆盖当前页面。仅真实扣账写入消费流水,预留本身不伪装成支出。
- 同时修复原钱包页将实际数组误读为分页对象、按错误字段判断收支/说明的问题。使用后台的direction、remark和createTime,保留关联订单号;基于已返回的本人全部流水做收入/支出筛选及每页十条的本地展示,不反复调用无分页接口造成重复明细。长期大量流水的服务端分页仍沿用原接口限制,本轮没有伪称完成此通用钱包性能优化。
- 最终完整Maven回归2126项:2112通过、14项环境测试跳过,零失败/错误,日志 WSL
/tmp/xiedao-wallet-visibility-backend.log。较余额基础阶段新增4项可用额/停用/无钱包查询及序列化测试;上述两轮均使用临时进程级AES密钥,没有变更业务密钥。钱包余额、扣账及收款测试仍使用模拟数据。 - App与MerchantApp全部383项Node测试通过,日志 WSL
/tmp/xiedao-wallet-visibility-mini-verified.log,新增11项行为测试。首跑发现的旧源码位置断言和异步测试替身问题已修正。钱包页面与共用标签组件通过WCC/WCSC,六种状态在320/390/768px渲染通过;复查正常、错误及极大金额截图,大额流水单独占行、不拆散金额,不出现横向溢出。日志/tmp/xiedao-wallet-visibility-render-final.log,截图/tmp/xiedao-wallet-visibility/。使用实际编译模板与浏览器代替控件/组件属性传递,不代表微信运行时、真机或真实鉴权。 - 受控文件差异空白检查通过。本轮未修改两套网页、未重跑网页构建,不启动新开发服务;没有部署、业务库迁移、真实付款/退款/分账/充值/通知/上传,也没有启用任务、押金或自动扣款。V018须在未来接入差价余额预留前迁移和验证;钱包收款入口、完整累计账单、资金通知、主订单退款联动、换车分段交接、归还后早还差额、完整协议、复杂活动权益、逾期/平台主动通知、异常渠道恢复及A1–A16其他要求全部保留,完整目标仍未完成。
原车正差额的纯余额与混合付款
- 为本人付费确认新增可选
walletAmountFen,缺省零保持原纯微信方式;字段使用严格整数分反序列化,拒绝小数、字符串、布尔值或超出Long范围的JSON值。原零差额确认拒绝非零余额。服务端核对正差额总额、可用余额和本人选择,动态约定明确本次余额/微信各多少分、何时预留/扣账及取消方式;约定摘要随渠道金额变化,旧勾选不能直接确认新金额。 - V019为原同意表增加可空
accepted_wallet_fen、accepted_wechat_fen。本次余额选择与独立差价单的实际渠道金额同事务保存,后续任何状态/资金身份更新都不覆盖这两个字段;不回填或伪造旧记录。旧纯微信同意仍能使用,缺少明确选择的旧混合/纯余额单不开放新收款或补造预留,保留人工核实要求。 - 混合收款在保存唯一原资金身份及正反向订单关联的同一事务内创建余额预留,提交微信前再次核验预留归属、状态及钱包计数;余额不足、留档失败、预留缺失或渠道金额被改写均不发起微信。微信只收取本人确认的余款,原PAY号、原截止和首次提交时间保留;重复请求不重复冻结,不把余额不足改成微信全额收款。
- 新增本人
POST /payment/wallet入口。用户另行确认纯余额付款后,先建立原付款身份/预留,再在独立事务按资金、差价订单、关联、同意、预留、钱包的顺序核对;原成功资金记录、预留扣账/流水、订单已付及业务结果交接须共同成功。纯余额不调用微信、不要求openid、不伪造微信流水或受管履约记录;精确重试核对原CAPTURED凭据,不重复扣账或生成新付款。 - 纯余额尚未扣账的恢复仅查询,不自动消费;已成功且有原扣账凭据、但缺业务结果的记录可补交接,不重新扣款。混合付款继续通过原微信渠道查单/回调恢复,并核对原余额扣账。未知微信结果不释放余额或车辆;专用取消沿用严格关闭依据,已核实未付才解除本笔余额预留,保留其他付款预留;已扣账不能冒充未付释放。此处不改变主订单、真实交接、原商品金额或原商户分配。
- 用户页面增加余额抵扣选择与分渠道金额,切换选择需重新读取约定并取消原勾选;确认报价和实际付款仍是两次操作。余额及混合付款额外明确确认,混合付款按钮只显示微信金额,纯余额不打开微信付款弹窗。确认响应丢失后的恢复记录包含原余额金额,页面重建先恢复原渠道约定,不默认为微信全额,也不自动重提确认或付款。金额不一致、损坏恢复记录、余额不足及读取失败均阻止继续收款。
- 完整后端最终回归2143项:2129通过、14项环境测试跳过,零失败/错误;较上一轮新增17项。测试串联真实同意准备、收款、余额服务、查单恢复和方案生效,验证纯余额与混合资金不会改变原订单金额;原退款测试也补入明确余额渠道留档。数据库、微信、订单状态持久化及钱包流水仍用测试替身,不等同于真实事务回滚/并发或微信验收。最终日志 WSL
/tmp/xiedao-wallet-collection-backend-verified.log,仍用临时进程级AES密钥;前两次全量通过后又补充预留计数保护,最终证据以该日志为准。 - App与MerchantApp全部390项Node测试通过,最终日志
/tmp/xiedao-wallet-change-mini-verified.log,新增7项。差价付款页通过WCC/WCSC编译;实际模板在320/390/768px覆盖既有状态及新增混合/余额确认、待付款、余额不足,复查user-change-payment-mixed-pending-320.png与user-change-payment-wallet-ready-320.png,金额/按钮未见重叠。日志/tmp/xiedao-wallet-change-render.log,截图仍在/tmp/xiedao-car-rental-handover/。浏览器使用替代原生控件,不是微信真机验收。 - 可选MySQL测试加入V019重复执行、选择金额写入及后续结果迁移后不被覆盖;隔离数据库/Docker仍不可用,真实测试未执行。没有新开发服务或两套网页改动,未重跑网页构建;没有部署、业务库迁移、真实付款/退款/充值/分账/消息/上传,押金、自动扣款及所有任务仍关闭。
- 专用收款总开关继续默认false。开启前仍须完成V018/V019及此前结构迁移、隔离库与微信验收,并确认协调、退款、完成/履约任务的配置与调度归属;本轮有代码和模拟验证不等于可发布。完整累计账单、资金/付费生效通知、主订单退款联动、换车分段交接、归还后早还差额、完整协议、复杂活动权益、逾期/平台主动提醒、长期未知/异常渠道人工恢复及A1–A16其他要求全部保留,完整目标仍未完成。
原车差价资金通知与任务启用保护
- 复查此前余额及混合收款的事务入口、原付款重试、成功后恢复及取消释放,保留原有身份/金额/凭据校验,不放开历史无明确余额同意的记录。新增通知不改变收款、退款、库存或入账决策;模拟测试继续覆盖纯余额及混合支付,真实事务回滚与并发仍未验收。
CarRentalNoticeService.recordChangePayment在原业务事务中保存带生成ID的变更事件及不可变通知。本人差价确认、付款结果、专用关单、取消释放、付费方案生效、未生效退款预备和核实全退均接入;原事件动作和内部处理明细保留,改用生成事件ID隔离通知,不重复写一条相同业务审计。处理、同意或入队保存失败须抛错,不能返回业务成功。- 付款结果只读取原方案和申请身份,不增加原订单、派单、方案或申请锁;退款任务释放只锁本笔退款工作记录,按有效租约更新成功且状态实际变化才通知。重复失败不反复入队,过期租约和已完成任务不新建失败通知,人工核查状态不会被再次扫描降回普通处理中。复用既有原号退款和消息重试,不新增自动重扣或改变退款渠道。
- 用户和相关商户按身份去重接收。通知只包含公开关联ID、固定状态及说明,不带原原因、内部意见、商户分配、车牌、驾驶资料、支付/退款单号或微信身份。确认、付款、生效、关单和取消释放分开通知;一般退款结果仅提示待对账,只有原渠道与业务全额对账和释放完成后才提示未生效差价全退,并明确不代表主租车订单全退。
- 小程序和商户网页沿用现有只读变更详情入口;通知不会打开微信支付、替用户确认报价或启动还车完成计时。页面、样式和网页业务代码本轮未改动,未重跑网页构建或渲染,不将此前截图当成本轮真实消息送达证据。外部发送与本地回执仍为至少一次投递,网络回执丢失时的重复消息须真实验收。
- 发布保护复查发现早期
CarRentalReturnTask两个开关缺省为true,V005两个任务新建状态为运行;这与“尚未验收不自动启用”的目标不一致。本轮将通知发送和还车自动完成开关缺省改为false,尚未执行的V005新建任务改为暂停。没有修改已有业务库的任务状态、环境配置或调度归属。已在其他环境登记过旧V005时,不可直接用修改文件覆盖或修复迁移校验记录,需另行核实迁移历史及发布安排。 - 最终完整Maven回归2156项:2142通过、14项环境测试跳过,零失败/错误;新增13项。最终日志 WSL
/tmp/xiedao-change-financial-notice-backend-verified.log,使用临时进程级AES密钥。新增资金通知生命周期采用实际服务及模拟Mapper;任务默认关闭另用真实Spring容器绑定验证。首次编译的方法名、定向测试的旧只读断言和新增容器测试的替身注册问题均已修正,最终证据以修正后的全量通过为准;异常传播不等于已验证真实数据库回滚。 - App与MerchantApp全部391项Node测试通过,新增1项覆盖11类资金消息只读导航,日志 WSL
/tmp/xiedao-change-financial-notice-mini.log。无需新增迁移表,继续依赖V005通知表、V006事件表及当前差价资金结构;可选真实MySQL/迁移测试仍未执行。代码与清单的受控文件空白检查通过,本轮未启动开发服务。 - 专用差价收款及各变更资金任务仍默认关闭,两条通用差价收款保护保留。没有部署、执行迁移、真实收付款/余额充值/通知/上传/分账或启用任务,押金继续关闭。完整累计账单、主订单退款联动、换车分段交接、归还后早还差额、完整协议、复杂活动权益、逾期/平台主动通知、长期未知与异常渠道人工恢复及A1–A16其他验收要求全部保留,完整目标仍未完成。
2026-09-17 三端累计账单与原资金凭据核对
- 新增
CarRentalBillService、CarRentalBillMoneyReader及三方只读接口,用户按本人订单读取,商户按当前归属派单和相关方案/费用读取,平台沿用派单查询权限。以独立只读REPEATABLE_READ事务读取已保存凭据;不向微信查单、不锁业务订单、不推进付款、退款、交接或结算。商户视图明确为履约相关用户款项,不是收入账本。 - 汇总原订单、历次独立变更差价、活动日期差价和额外费用,保留原单商品金额及每项业务阶段;未确认报价单列,不增加待付款。实际微信/余额已付、已退、净额、待付、待处理退款和余额预留分开计算,不把退款申请当作到账或把预留当作消费。
- 资金读取核对付款本人、订单正反向关联、渠道分摊、成功时间及原微信凭据,差价绑定本人原同意中的付款身份/截止。即使本订单在合并付款中的微信分摊为零,微信主付款仍须有完整原交易凭据。余额实付/退款核对原消费/退款流水,差价还须有匹配预留/扣账记录;不根据订单状态补造历史成功资金记录。
- 每笔退款绑定原成功付款,核对渠道金额和累计上限;微信已退须有原退款流水与成功时间,余额已退须与真实流水相符。业务关联或资金凭据不完整时保留待核实条目并隐藏整单累计金额;读取错误清除旧账单,不展示伪零额。单项资金未知与整个请求失败分开处理。
- 用户及商户小程序新增独立账单页,平台和商户网页新增只读弹窗及派单入口。四端使用整数分校验,保留大整数金额精度;前端复核累计与分项一致性,拒绝重复条目、错误路由身份、超额退款及不安全数值。刷新、退出、关闭及迟到响应不会主动发起任何资金操作。
- 后端完整回归2184项:2170通过、14项环境测试跳过,零失败/错误,日志 WSL
/tmp/xiedao-rental-bill-backend.log;较前阶段新增28项。测试进程使用临时AES密钥,未改业务配置。测试目录留有此前失败报告,本次结果按完整运行日志的各模块汇总计算,不把旧报告混入本轮统计。 - 两个小程序399项Node测试通过,日志
/tmp/xiedao-rental-bill-mini-verified.log;两套网页生产构建通过,日志/tmp/xiedao-rental-bill-admin-build.log、/tmp/xiedao-rental-bill-merchant-build.log。账单浏览器测试脚本补齐关闭动画等待及项目既有WASM启动脚本后最终通过,日志/tmp/xiedao-rental-bill-browser.log。两套网页320/390/1280px、两个编译后小程序模板320/390/768px均已检查;复看320px大额、正常与390px待核实截图,无金额截断或横向溢出。截图位于/tmp/xiedao-rental-bill/,不是微信真机或真实支付验收。 - 无新增数据库迁移;只读账单依赖已有及本任务此前新增结构。未执行业务库迁移、生产部署、真实付款/退款/充值/分账/通知/上传,未启用押金、自动扣款、专用差价收款或定时任务。主订单与差价退款联动、换车分段交接、归还后早还差额、完整协议、复杂活动权益、主动提醒、异常渠道人工恢复及真实环境验收仍未闭环,整体目标保持未完成。
2026-09-17 未交车退订与历次已生效差价关联退款
- 新增
CarRentalLinkedRefundService及V020关联表。自动退订主申请与历次已生效正差价申请在同一事务保存,平台无法履约取消也接入;关联固定原申请、原快照、原租车、方案、本人、商户、差价订单、成功付款ID及渠道金额。方案和差价订单分别唯一,Mapper不提供覆盖或删除关联的方法。外部打款不在准备事务内执行。 - 普通退订继承购买时保存的政策版本和配置,按同一次申请时刻及变更后的取车锚点计算,不读取现行发布政策;平台无法履约按每笔原实付全退。部分退款保留原规则手续费,不把保留费用说成全退;零金额退订只结束服务、不伪造资金退款记录,失败待核查时仍展示已核实的原实付。
- 仅支持尚未实际交车、原车同商户且历史和资金证据完整的自动退订。已交车、需人工裁定、已有冲突退款、原商户冻结/履约状态或资金凭据不一致时拒绝按此路径处理。单独从差价订单申请退款被阻断;未生效差价继续走原补偿流程,不能混用。只有零差额历史时不进入付费联动处理。
- 先核验整个已生效历史的累计金额,再逐笔准备原渠道退款;支持连续多次加价,每笔保留各自成功付款和退款身份。源申请重试返回原关联批次,关联写入或通知失败不被重复键处理吞掉。失败传播和事务声明已测试,但模拟服务测试不代表完整真实事务回滚已验收。
- 沿用现有退款队列,派发及重试前以独立只读事务重新核验原关联,不获取主租车或派单锁;使用原预备退款记录,不再由普通退款执行器创建另一笔。新增仅针对关联退款的十分钟处理中断恢复,按限定批次重新入队,保留原退款ID;不重置失败人工状态或创建新的退款号。仍是可重试的原号调用,不承诺外部网络调用恰好一次。
- 渠道完成后由原退款成功服务冲减本笔商户收入并保留应留费用,再标记独立差价退订与结果回执;原方案/申请的生效留档、历史同意、真实交接及主订单原商品金额不改写。三端进度区分
CANCELLATION_REFUNDING、CANCELLATION_REVIEW、CANCELLATION_REFUNDED,已生效退订不再提供付款恢复按钮。 - 新增退订差价准备和核实完成通知,沿用不可变事件及原消息队列。通知明确按原规则处理、保留历史生效,单笔处理完成不代表主单和其他款项全部退清;不暴露资金身份或商户分配,不自动付款、退款或确认交接。四端账单增加对应中文状态。
- 本轮新建仅监听本机的临时MySQL 8.0.36容器,租车集成测试创建并清理随机独立库,未使用任何业务库。首次真实执行暴露测试会话的读锁未释放,已修正手动事务边界后重跑。V001至V020相应租车迁移重复执行、车队/库存和归属查询、变更/预留/钱包数据持久化、关联唯一与金额约束、未提交不可见及回滚、超时恢复筛选均在真实MySQL执行;这仍不是整套服务的并发压测、历史业务库升级或真实支付验收。
- 最终完整Maven回归2205项:2192通过、13项环境测试跳过,零失败/错误;较账单阶段新增21项,原来跳过的租车MySQL用例本次通过。最终日志 WSL
/tmp/xiedao-linked-refund-backend-verified.log,使用临时进程级AES密钥,不修改业务密钥。新增测试覆盖连续两笔生效差价的独立原付款退款、纯微信/纯余额/混合退款、原规则部分退及零退、原申请批次重试、错误身份与写入失败、完成收入冲减、只读锁声明、队列中断恢复和零退款失败展示。资金与完整服务持久化仍用替身,真实MySQL证据限于上项说明的范围。 - App与MerchantApp共400项Node测试通过,两套网页生产构建通过;账单浏览器覆盖平台/商户网页320/390/1280px、两个编译后小程序320/390/768px并增加关联退订场景。复看四端截图,未见金额截断、文字重叠或横向溢出。日志为 WSL
/tmp/xiedao-linked-refund-mini.log、/tmp/xiedao-linked-refund-admin-build.log、/tmp/xiedao-linked-refund-merchant-build.log、/tmp/xiedao-linked-refund-browser.log,截图/tmp/xiedao-linked-refund-bill/;接口和原生控件仍使用替身。 - V020及此前结构须按正式迁移流程验收;没有部署、执行业务库迁移、真实付款/退款/充值/分账/通知/上传,也未启用任何任务、专用差价收款、押金或自动扣款。已交车人工售后和差额退款、换车分段交接、完整租赁协议、复杂活动权益、主动提醒、长期异常渠道恢复及真实环境验收仍未完成。总体目标保持进行中,A10c不代表整个租车退订与售后范围全部完成。
- 验证结束后仅停止本轮创建的临时数据库容器,由其自动清理;网页构建和浏览器测试进程均已退出。受控及新增文件空白检查仅保留初始审查报告两处Markdown双空格换行,没有修改这些原记录。
2026-09-17 归还后提前还车申请与报价依据
- 新增
CarRentalReturnEvidenceService,核对订单、派单、用户、商户、车辆及最新还车快照摘要,实际归还时间必须与派单相同、在取车之后且确实早于原预约结束。只有已归还待完成阶段及可核对的记录才能进入早还核算;未来时间、错绑、损坏或缺失记录不会被当作已归还依据。 - 用户和商户可按服务端记录的实际归还分钟提交早还申请,不能随意输入过去时间;申请快照保留记录ID、版本和实际时刻,同意摘要随依据变化。响应丢失后相同请求保留原申请,不因修订重写原证据。归还前已提交的早还申请可继续核算,原期望日期不被实际日期覆盖,两者分别展示。
- 平台新增有派单指派权限保护的还车依据读取接口,报价须携带平台看过的记录ID和版本,提交时在原锁序中重新核验;看到旧记录或未看到记录都不能直接发布。归还后按交接留档中的车辆核算,不依赖车辆仍在当前可用车队或车型目录中。
- 归还后报价只允许零/负差额,报价截止可晚于已过去的实际及预约还车时间,但仍限制为当前5分钟至24小时;额外费用继续单独举证。报价保存不可变实际还车依据,商户同意前重新核对;修订或异议后公开状态为“须重新报价”或“待核实”,三端保留旧报价且禁止继续确认。
- 明确限制:本阶段只完成申请、报价和商户核对,不执行用户负差额接受、退款、收入调整或结案;归还后的零差额报价也不走原租期变更接口。未处理变更继续阻止订单完成,不能借撤回或驳回掩盖应处理退款。换车分段交接及全部原待办继续保留。
- 最终后端全量2220项:2207通过、13项环境测试跳过,零失败/错误;新增14项早还场景及1项接口权限/调用测试。日志 WSL
/tmp/xiedao-early-return-backend-verified.log。租车MySQL测试使用本轮仅监听127.0.0.1的临时MySQL 8.0.36,现有迁移与Mapper集成检查通过;不是新早还完整服务并发或真实资金验收。测试仍用临时进程级AES密钥,未修改业务密钥。 - App与MerchantApp共406项Node测试通过,两套网页生产构建通过。网页模拟接口回归增加商户归还申请、依据变化重新同意、平台旧依据拒绝及刷新后发布、读失败阻断和旧版报价不能确认;平台表单320/390/1280px检查通过。两端变更申请、商户报价的实际编译WXML在320/390/768px通过新增早还及修订状态检查。日志 WSL
/tmp/xiedao-early-return-mini.log、/tmp/xiedao-early-return-admin-build.log、/tmp/xiedao-early-return-merchant-build.log、/tmp/xiedao-early-return-browser.log、/tmp/xiedao-early-return-render.log,截图在/tmp/xiedao-car-rental/和/tmp/xiedao-car-rental-handover/;不是微信真机验收。 - 无新增数据库迁移,使用既有变更及交接快照结构。没有部署、业务库迁移、真实收付款/分账/通知/上传或启用押金、专用差价收款和任务。临时数据库已停止并自动清理。补充当前三端复核报告,整体目标保持进行中。
2026-09-17 提前还车减价专用退款底层
- 新增V021用户授权及原渠道退款关联表,Mapper只提供插入和读取,不提供覆盖或删除。固定方案、用户、主租车、原付款、分渠道金额、通知/方案/分摊摘要和原退款号;方案/付款订单及原退款号各自唯一。没有回填或制造历史同意,也没有执行业务库迁移。
CarRentalReductionRefundService只处理已留档的负差额早还授权。准备须在调用方事务内进行,校验原成功付款及真实记录资金后创建专用退款,不使用普通退款的订单终止和优惠券返还逻辑。重试沿用原退款号;未知提交保留待核查结果,不能先退余额或另建退款。- 支付编排器在普通成功/重试逻辑之前按专用类型或不可变关联分流。微信成功凭据与整体退款完成分开保存,余额退款、退款完成和付款累计写入同一事务;异常不能返回成功。保留主订单PAID/COMPLETED及原商品金额,不执行商户收入调整或还车结案。
- 现有退款同步任务对专用减价走严格查单路径,核对原退款号、原付款号、微信交易号、原微信总额、请求退款额及币种。请求金额与付款人实际退款额不混用;小数/溢出金额、缺少凭据、错误身份/时间均拒绝完成。回调及专用查单保留偏移时区对应的真实时刻。合并付款的全退标记依据整笔付款累计,而非仅本订单金额。
- 后端最终全量2269项:2256通过、13项环境测试跳过,零失败/错误;较前阶段新增49项。44项减价服务测试另含原号篡改拒绝、合并付款、真实原纯余额渠道、授权前成功时间拒绝、下游写入失败及锁序/事务声明。最终日志 WSL
/tmp/xiedao-reduction-refund-backend-verified.log;第一轮全量的模拟查单默认空对象与预期null不一致已修正后完整重跑。 - 租车MySQL测试在临时本机MySQL 8.0.36通过,扩充真实Mapper的授权/原号读写、唯一与金额约束、成功凭据与整体完成分离、未提交隔离及回滚。资金服务、钱包和微信仍用替身;不声称已验证整套业务事务或并发。自动容器发现相关环境测试仍有跳过,不影响手工创建隔离库执行的租车MySQL测试。
- App与MerchantApp共406项Node测试通过,日志 WSL
/tmp/xiedao-reduction-refund-mini.log。本轮未修改页面、未重跑网页构建或渲染,没有新开发服务。没有部署、业务库迁移、真实付款/退款/分账/通知/上传,也未启用押金、专用差价收款或调度任务。 - 仍未完成: 用户授权生成与负差额接受接口、全量原付款分摊协调、商户协商收入调整、退款后的应用/完成及四端进度、负差额历史财务累计和最终账单、归还后零差额结案。测试手工构造REDUCTION_PENDING及授权只验证内部资金原语,不代表用户功能已开放。换车、异常恢复、完整协议、复杂权益、主动提醒和真实环境验收等原范围全部保留,整体目标继续进行。
2026-09-17 原车原商户分配的提前还车零差额结案
- 新增独立
accept-return用户确认入口,与未归还的租期生效接口分离。只支持有真实还车依据、原车、原商户且分配不变的零差额方案;负差额、换车和商户分配调整继续拒绝通过该入口执行。 - 在原事务和锁序内核验本人、原申请、最新报价、同意约定、全部商户核对、历史金额、真实归还记录及版本。保存不可变用户确认和结案事件后结束本次变更,不修改原预约、实际交接、原金额和商户分配;其他费用、异议及主订单完成继续按原规则处理。精确重试读取原结案留档,后续订单完成或记录修订不改写历史同意。
- 用户小程序提供专用核算约定、确认操作、原回执和还车单入口;平台、商户网页及商户小程序分别显示零差额核算结案和时间。通知限定本人及相关商户,明确不代表交接确认或主订单完成;账单单列“提前还车零差额核算”,不增加任何实付或退款金额。
- 后端最终全量2287项:2274通过、13项环境测试跳过,零失败/错误;新增17项早还服务测试及1项控制器测试,包含实际通知、账单及完成门槛联动。隔离MySQL的租车Mapper/迁移测试通过,完整业务服务仍用模拟持久化,不能据此宣称完整事务或并发已验收。
- 两个小程序最终重跑412项Node测试通过;两套网页生产构建和模拟接口浏览器回归通过。一次浏览器重跑在新增场景之前因本地动态模块读取失败中断,后续独立重跑通过。实际编译的小程序模板在320/390/768px通过最终渲染,修正确认按钮打断WXML条件链导致的旧报价误提示,更新早还场景文案后再次渲染并复查四端320px截图。没有微信真机验收。
- 证据日志为WSL
/tmp/xiedao-zero-return-backend.log、/tmp/xiedao-zero-return-mini.log、/tmp/xiedao-zero-return-admin-build.log、/tmp/xiedao-zero-return-merchant-build.log、/tmp/xiedao-zero-return-browser.log、/tmp/xiedao-zero-return-render.log。续接阶段核对既有后端/构建结果,重跑最终小程序测试和模板渲染,没有重复后端全量或构建。 - 无新增数据库迁移,没有部署、执行业务库迁移、真实收退款/分账/通知/上传,未启用押金、专用差价收款或任务。负差额授权生成、接受与分摊协调、商户收入调整及最终账单、零差额商户分配调整、换车、异常资金恢复、协议、复杂权益、主动提醒和真实环境验收仍未完成;整体目标继续进行。
2026-09-17 提前还车负差额授权生成与逐笔原退款预备
- 新增内部
CarRentalReductionAuthorizationService,提供重新核对的约定预览与明确同意处理。按主订单、派单、申请、方案的现有锁序检查本人、真实还车记录及版本、原车、最新且未过期报价、相关商户同意、原预约和累计金额;服务端生成约定及分摊摘要,客户端不能指定退款对象、付款身份或金额。 - 先核对完整原租车及所有已生效正差价,再分摊本次退款。按最近生效差价到主租车的顺序逐笔处理,复用既有微信优先、余额补足规则,约定明确此顺序;未被选中的旧付款也须通过核对。支持多笔差价、纯微信、纯余额、混合付款及原合并付款中的本租车份额,不退其他订单的金额,不补造历史缺失的付款身份。
- 本人同意、方案转入
REDUCTION_PENDING、各笔固定原退款号及关联、处理事件和限定本人/相关商户的通知在同一事务入口保存。任何一步失败都抛错,不返回业务成功;此入口不调用微信或钱包,不修改主订单、原预约、实际交接、商户收入或优惠券,不将准备退款当作到账。确认时间按授权表的秒精度保存。 - 精确重复确认返回原同意及分摊,不重新生成退款;原报价后来过期或还车记录修订仍保留历史同意。读取及重试核对授权摘要、原退款关联及资金记录,损坏或缺失不会冒充正常已受理。已有授权但缺最终应用留档时不能冒充已结案。
- 已授权减价纳入原变更处理保护,不能通过撤回、驳回、重新报价或另一差价流程绕过;报价过期不释放处理中状态,未处理申请继续阻止主订单完成。没有更改原车可用时间或新增车辆预留。通知只进入详情,不自动确认、付款或退款,不表示到账、交接完成或核算结案。
- 最终完整Maven回归2329项:2316通过、13项环境测试跳过,零失败/错误,较上一阶段新增42项。41项授权服务测试连接实际还车证据、财务累计、账单资金读取、退款预备/执行及通知服务;覆盖三笔付款分摊、合并支付份额、原号重试、凭据变化重新同意、多步写入失败和纯余额/混合退款不终止订单。首次定向运行的测试替身重设错误已修正,之后两次全量通过;最后补充秒精度及合并付款场景后的最终证据为WSL
/tmp/xiedao-reduction-authorization-backend-verified.log。 - 租车MySQL用例在本轮仅监听127.0.0.1的临时MySQL 8.0.36通过,耗时14.97秒。扩充真实Mapper检查,确认旧读取快照之后能锁读已提交减价状态、过期且没有独立付款订单的已授权减价仍受保护、条件状态迁移不能重复执行,以及最终生效后解除处理保护。没有新增迁移;复用V021及原结构。完整授权及退款服务仍使用模拟业务持久化,未声称完整真实事务回滚或并发已经验收。
- App与MerchantApp全部412项Node测试通过,日志WSL
/tmp/xiedao-reduction-authorization-mini.log,增加减价授权通知只读导航覆盖。本轮未修改页面,没有重跑网页构建或模板渲染;没有微信真机或真实消息送达验收。 - 仍未完成: 负差额HTTP接口和用户页面、原退款完整协调及长期异常恢复、商户收入调整、最终生效和还车完成/结算衔接、负差额历史财务累计、已有减价/退款或历史缺失资金凭据的处理及三端最终进度。没有把内部授权服务开放为用户功能;换车分段交接、零差额商户分配调整、完整协议、复杂活动权益、主动提醒及A1–A16真实环境验收全部保留。
- 未部署、未执行业务库迁移、未进行真实收付款/退款/分账/通知/上传,未启用押金、专用收款或调度任务。临时测试密钥仅用于Maven进程,没有修改业务密钥。最终测试进程已退出,本轮临时数据库已停止并确认自动清理,没有新开发服务遗留;整体目标继续进行。
2026-09-17 提前还车商户收入调整基础及结算读取
- 新增内部
CarRentalReductionIncomeService与V022收入依据/回执表。在原用户授权事务中核对并固定主租车、历次已生效差价的原商户金额、净收入、商品明细摘要及冻结流水;所有原退款预备之前保存收入依据。当前只支持原车原商户、原收入非负、没有既往退款或收入调整且尚未结算的情况,不制造历史凭据。 - 商户报价约定新增原成本保留规则,旧约定须重新报价。按最近生效差价到主租车分配商户金额变化,调增也受各原付款订单金额约束;保持原已扣成本,调整后净收入最低为零,不重新计收手续费。保留原订单总额、商品明细和历史交接。
- 收入应用先在独立只读READ_COMMITTED事务核对整个原退款批次,避免反向取得退款/付款回调锁;存在待处理、部分成功或异常退款时不调整收入。成功退款须有整体完成时间,错误身份、损坏依据或缺失回执均不能视为完成。
- 专用账本取得商户钱包锁后更新冻结额和累计收入,保存精确流水及不可变关联;不增加可提现余额。零变化同样留痕,精确重试核对原流水而不重复写入。任何保存失败抛错;专用服务要求调用方事务,不能把模拟异常传播当作完整数据库回滚证明。
- 完成和结算读取专用净收入,并重新验证已应用依据、原明细净额、回执及真实流水。原净收入为零而后续增加时,正确从新增冻结额转待结算,不重复增加累计收入;调整后零收入保留零金额结算计划,避免永久挂起。普通无调整订单保留原正收入明细的计划规则。
- 最终全量2381项:2368通过、13项环境测试跳过,零失败/错误,比授权阶段新增52项。44项串联测试使用实际授权、专用退款核验、收入服务及商户账本,业务Mapper、微信、用户钱包和状态机仍是替身;覆盖多笔分配、原费用保留、零收入/补增、整批退款等待、重复执行、凭据变更、写入失败及结算读取。首轮定向暴露旧测试未注入新依赖和旧交互断言,已修正;另明确区分无调整与零收入,最终版本再次完整回归。
- 本轮仅监听127.0.0.1的临时MySQL 8.0.36用例通过,最终耗时18.35秒;V022重复执行、Mapper构造映射、主键及流水唯一性、金额约束、条件完成标记、跨会话未提交不可见均已验证。实际账本绑定真实Mapper,在手动管理的MyBatis事务中验证钱包/流水/回执/完成标记共同回滚和原依据重试。没有覆盖完整授权退款Spring事务、并发压测或业务历史库升级。
- 后端最终日志WSL
/tmp/xiedao-reduction-income-backend-verified.log;App与MerchantApp全部412项测试通过,日志/tmp/xiedao-reduction-income-mini.log。没有页面改动,本轮未重跑网页构建、模板渲染或微信真机验收。测试密钥仅在Maven进程中临时设置,没有修改业务配置。 - 仍未完成: 负差额HTTP入口与用户页面、完整退款协调、方案/申请最终生效、三端最终进度及账单、负差额历史累计、原差价含退款后的履约/结算门槛、后续普通售后按已调整净收入防重复扣减、重复减价及历史缺失资金身份处理。没有调用新增收入服务来完成真实业务,也没有开放完整减价流程。零差额商户重分配、换车、异常资金恢复、活动权益、完整协议、主动提醒及全部真实环境验收继续保留。
- 未部署、未执行业务库迁移、未真实收付款/退款/分账/通知/上传,押金、专用收款及各任务继续保持关闭。整体目标仍未完成。
当前三端结论
归还后早还申请与报价依据、原车辆及商户分配不变的零差额用户核算结案已补齐。负差额进一步增加内部授权生成、原付款分摊、逐笔退款预备和退款后的商户冻结收入调整,但未开放用户接口和页面,尚缺完整协调、最终生效及历史财务/后续售后的衔接。下表中的“归还后早还差额”仍指这些未闭环工作,以及零差额但商户分配变化的处理,不因内部服务进展或零差额入口而将整个早还范围划为完成。A10中的主订单退款联动已经完成A10c限定的未交车自动退订子范围,已交车人工售后与复杂权益仍待补齐。
| 视角 | 已具备或本轮补齐 | 尚未闭环的主要工作 |
|---|---|---|
| 平台 | 车型、增值服务、派单、撤回重派、取消退款、找车超时任务、费用争议/已付款售后、取还车历史及异议处理、完成与结算保护、变更申请及版本报价、评价/回复审核和分渠道累计账单;未交车退订与历次已生效差价联动及原号中断恢复;原分配不变的早还零差额结案留档;本轮未启用任务 | 主动待办、关闭及异常退款后续处理、历史退款核实、已交车人工售后及复杂权益退款联动、换车切换、完整协议、真实渠道/调度/通知/结算和业务迁移权限验收 |
| 商户 | 两端车队和日期报价、接拒单、资格核验、交还车与版本修订/历史/异议、举证收费及售后材料、变更申请和报价核对、零差额租期履行、评价回复;阶段通知及本商户履约相关用户款项账单;新增关联退订进度和本笔收入冲减,账单不作为商户收入 | 复杂差价方案执行、换车分段交接、归还后早还差额、逾期通知、小程序真机及真实退款/消息/上传验收 |
| 用户 | 车型直订、单明细活动预约、须知版本确认、取还车及异议、费用确认/支付/售后、四类变更申请与报价历史、零差额生效、评价;原车正差额支持明确纯微信/纯余额/混合渠道及原金额恢复/取消,受默认关闭的发布开关保护;钱包、分渠道累计账单及阶段消息;新增未交车主单退订自动关联历次生效差价,原规则部分退/零退不冒充全退 | 活动购买前告知及历史权益/复杂套餐、异常渠道恢复、换车确认、归还后早还差额、完整协议、真实付款退款/消息/上传/真机验收 |
结论保持:正常履约与部分异常处理已有代码和本地模拟验证,尚不能认定为除押金外的全功能完成或可直接生产验收。