8.8 KiB
8.8 KiB
独立团单个下单业务适配包
业务身份
| 字段 | 值 |
|---|---|
business_id |
team_order_create |
| 业务行为名称 | 独立团单个下单 |
| Skill | lwlt-newbooking |
| 标准 action | team_order_create |
| 当前状态 | 已真实验证 |
| 最近验证 | 2026-08-06;授权真实写入并完成 ERP 团号回查 |
| ERP 环境 | https://lwlt.hisy.cc/System/Mainlt.asp |
1. 用户输入模板与示例
1.1 模板
独立团单个下单
发团日期(必填):<YYYY-MM-DD>
预订客户(必填):<客户名称或唯一搜索关键词>
产品搜索(必填):<产品名称或唯一搜索关键词>
预估人数(必填):<x+x(占/不占)+x数字格式>
用房数量(必填):<x单+x标+x双数字格式>
特殊要求(选填):<其他业务要求>
1.2 示例
独立团单个下单
发团日期:09-03
预订客户:老挝联泰人名币
产品搜索:遇见老挝
预估人数:15+1
用房数量:8标1单
单个下单只能对应一个发团日期。客户和产品可以使用业务侧简称,但必须保留原始关键词;客户是用户明确事实,不能因为产品模板会回填客户就省略。
1.3 字段规则
| 用户字段 | 必填 | 标准结果 | 处理边界 |
|---|---|---|---|
| 发团日期 | 是 | data.departure_dates,单元素数组 |
当前上下文 09-03 归一为 2026-09-03;年份不明确时以运行上下文为锚点 |
| 预订客户 | 是 | data.customer.name/keyword |
ERP 客户 SelectBox 精确优先、唯一包含兜底;零/多候选均阻断;历史预定客户为兼容别名 |
| 产品搜索 | 是 | data.product.name/keyword |
ERP 产品候选内按产品名/天数做精确、连续或有序匹配;零/多候选均阻断 |
| 预估人数 | 是 | data.passenger_counts |
15+1 → adult: 15, leader: 1 |
| 用房数量 | 是 | data.room_counts |
8标1单 → {TWN: 8, SGL: 1};只写明确房型 |
价格、币种、OP、销售人员、团号前后缀、业务名称、行程和客户隐藏 ID 不是用户手填项,由 ERP 产品联动/当前登录账号解析;Skill 不编造这些值。
1.4 标准 operation 摘要
{
"action": "team_order_create",
"order_nature": "formal",
"submit_mode": "dry_run",
"data": {
"customer": { "name": "老挝联泰人民币", "keyword": "老挝联泰人名币" },
"product": { "name": "遇见老挝", "keyword": "遇见老挝" },
"departure_dates": ["2026-09-03"],
"passenger_counts": { "adult": 15, "leader": 1 },
"room_counts": { "TWN": 8, "SGL": 1 },
"resolution": {
"mode": "task_ready",
"deferred_fields": ["route", "trip", "order_number"]
}
}
}
人名币是已登记的常见输入错误:name 用于匹配时归一为“人民币”,keyword 保留原文。该别名不代表可以在人民币、美金、老挝币三条客户记录中任选。
1.5 缺失和阻断示例
- 缺少预订客户:返回
agent_parse_needs_input,不能用产品模板客户代替。 - 客户或产品匹配到零个/多个候选:插件保存前阻断,不选择第一条。
- “更新行程”按钮缺失、点击后没有
GetProduct联动、团号设置未回填:插件阻断。 - 产品联动把客户临时覆盖为产品模板客户:插件必须重新应用用户选择并校验名称、客户 ID、币种和收款客户;恢复失败则阻断。
用房数量:8没有房型分配:只询问实际房型,不询问价格或人员。
2. ERP 操作系统流程
当前页面为 https://lwlt.hisy.cc/System/Mainlt.asp,已登录主页面进入独立团计划表后的单个“下单”表单。
- 打开独立团“下单”功能,进入
/System/Business/orders_add.asp。 - 填写发团日期,表单字段为
chufa_ri。 - 在预订客户字段
zutuanshe中按用户关键字匹配当前 SelectBox 数据;点选唯一客户,同时写入页面自身映射的客户 ID、联系人/负责人和币种。 - 在产品字段
chanpinming中按用户关键字匹配并点选唯一产品。 - 必须点击产品旁的“更新行程”按钮(当前 DOM 为
#gengxinxingcheng,onclick="Find_product()"),等待GetProduct的原生 Ajax 完成回调。该联动负责回填TianShu、专线/业务名称、团号前缀/后缀、行程和产品模板价格等字段;不得用会受后台标签页节流影响的短周期页面定时轮询代替完成回调。 - ERP 当前产品联动可能覆盖客户字段;插件重新应用第 3 步的唯一客户选择,并校验客户名称、
zutuansheid、币种及收款客户行一致。 - 填写预估人数:成人
darenshu、儿童/婴儿/领队对应字段;填写用房数量:frenshu0(SGL)、frenshu1(TWN)、frenshu2(TRP)、frenshu3(DBL)。 - 做页面必填、人数/房型、产品联动、客户恢复和提交载荷预检;预检 guard 必须拦截且只保留一份
DoInfoJHpayload/protected-fields hash,正式执行只临时放行一个匹配请求并等待其原生完成回调,迟到或重复请求继续在网络前阻断。 - 保存后解析 ERP 弹窗/响应中的完整团号,随后用
JH_OrderList按日期和团号回查;回查未命中时不能标记完成。
ERP 阻断
- ERP 未登录、会话失效或权限失败;
- 客户/产品零候选或多候选;
- 未找到“更新行程”按钮、按钮未触发
GetProduct或产品联动未改变必填字段; - 团号前缀/后缀、天数、专线/业务名称、客户恢复或客户 ID 校验失败;
- 人数/房型不合法、ERP 页面自身校验弹窗、保存回执不确定或回查失败。
代码与证据
| 用途 | 入口 |
|---|---|
| 单团操作计划 | operation-plans.js |
| 单团页面适配与预检 | inpage.js |
| 后台安全门与回执 | background.js |
| 标准 operation Schema | standard_system_operation.schema.json |
| operation 测试 | operation-plans.test.mjs |
3. Skill 适配
Skill 负责识别“独立团单个下单”、保留客户/产品关键词、补齐当前上下文中的日期年份、归一化人数/房型,并输出一个完整标准 operation。Skill 不负责匹配 ERP 隐藏 ID、生成团号或声称保存成功。
当前适配文件:
三层边界:
| 层 | 本业务内容 |
|---|---|
| 用户事实 | 客户关键词、产品关键词、发团日期、人数、房型数量 |
| Skill 归一化 | 标准日期、adult/leader、TWN/SGL、已知 人名币 → 人民币 别名、formal/dry_run |
| ERP 派生/结果 | 客户 ID、产品联动字段、团号设置、价格/人员默认值、保存团号和回查证据 |
4. 真实验证结果
当前示例已在已登录 ERP 环境中按完整插件路径真实保存:
- ERP 返回成功弹窗,团号:
LLW-260903A-A; - 保存后使用
JH_OrderList按日期2026-09-03和团号回查,HTTP 200,团号标记命中 9 次; - 回查无登录失效文本、无权限错误,最终业务结果为
completed; - 实际执行顺序包含客户唯一匹配、产品精确匹配、点击“更新行程”、客户恢复复核、人数/房型填写、真实
DoInfoJH保存和回查; - 产品联动覆盖客户的行为已被记录,最终恢复为用户指定的人民币客户;
- 真实执行过程中保留完整载荷哈希和核心业务字段指纹门禁;ERP 原生序列化导致完整载荷变化时,仅在核心字段指纹一致的情况下放行。
本次授权实跑的不可变证据保存在 2026-08-12 E2E4 证据登记;不保存凭据、Cookie 或客户隐藏 ID。
5. 后续变更规则
本业务的每次新执行仍必须先完成保存前真实页面预检(包含“更新行程”按钮点击和 DoInfoJH 拦截),再由业务系统确认、执行编号和安全门放行真实保存。真实保存后要记录完整团号并回查,不能只依赖弹窗或只读取第一条回执。
以下任一变化都必须重新检查用户模板、ERP 流程和 Skill 契约:ERP 入口/字段名变化,客户/产品数据结构变化,产品联动覆盖字段变化,团号回执格式变化,或标准 operation/schema 变化。