Appearance
金刚系统技术运维与排障
本页给接手人处理线上问题使用。操作生产数据前必须先判断影响范围,涉及资金、合同、保险、真实订单的修复要留操作记录。
故障快速导航
| 现象 | 先查 | 再查 | 升级条件 |
|---|---|---|---|
| 订单状态异常 | order、order_logs、business_mode | 支付、服务人员、派发和人工操作日志 | 涉及真实服务或退款时通知运营、客服和财务。 |
| 标准单未进入家政广场 | 支付状态、规则快照、来源、工种、已有广场记录 | 入广场任务结果、需求状态、订单日志 | 重复广场记录、已支付订单遗漏或并发承接立即升级。 |
| 线索派发异常 | 线索主表、区域解析、积分排名 | 派发记录、轮发位置、余额、接收开关 | 连续未派发、重复扣费或跨区域派发立即升级。 |
| 保险回调异常 | 保单本地状态、第三方流水号 | 回调日志、签名、幂等、第三方后台 | 本地与保险公司状态不一致时停止重复操作。 |
| 易宝支付异常 | 支付订单、易宝流水号 | 回调日志、签名、入账、分账和退款 | 重复扣款、金额不一致或退款不确定立即升级财务。 |
| 云函数报错 | 云效发布记录、函数实例日志 | trace_id、依赖初始化、数据库、Redis、第三方 | 大面积 5xx、启动失败或持续超时立即停止发布。 |
运行和发布
| 对象 | 方式 | 关键约束 |
|---|---|---|
storeapi | 后端云函数部署,验证通过后提交并推送远程分支触发部署。 | 云函数内不要依赖长时间后台线程。任务型逻辑走计划任务、内部接口或脚本。 |
storeui | 微信小程序,构建后提交微信审核,审核通过后按发布时间发布。 | 后端要兼容旧包,不能提前上线只支持新包的破坏性接口。 |
| 数据库 | MySQL jingangdata。 | 破坏性变更必须先备份、灰度、可回滚。 |
| Redis | 登录、缓存、任务锁等。 | 多实例任务要依赖分布式锁,不能只靠本地进程锁。 |
计划任务入口
| 任务 | 入口 | 作用 | 排查重点 |
|---|---|---|---|
| 门店积分日结 | scripts/jingang_store_score_daily_settlement_bt.sh、module_task/store_score_settlement_task.py | 写入门店积分日结流水和批次。 | 查 store_score_settlement_batch、日志文件、分布式锁。 |
| 全国标准单入广场 | scripts/cron/standard_staff_dispatch_pending.sh、scripts/run_scheduled_worker.py standard_staff_dispatch_pending | 保留历史任务名,实际扫描已支付标准单并发布到门店端家政广场。 | 查订单状态、来源、工种、支付快照和已有广场记录。 |
| 历史标准单派发超时 | scripts/cron/standard_staff_dispatch_timeout.sh、standard_staff_dispatch_timeout | 仅处理已存在的旧员工池派发记录。 | 新标准单不走该任务;历史单查 attempt、超时时间和档期释放。 |
| 标准单结算 | scripts/cron/standard_order_settlement_process.sh、standard_order_settlement_process | 把已过冻结期的服务奖金从钱包冻结金额转入可提现余额,并迁移历史易宝分账任务。 | 查结算任务状态、钱包冻结余额与流水、历史易宝分账记录和幂等键。 |
| 标准单通知 | scripts/cron/standard_order_notification_process.sh、standard_order_notification_process | 消费通知 outbox。 | 查 standard_order_notification_outbox 和微信发送结果。 |
| 月度品牌费 | scripts/run_scheduled_worker.py monthly_brand_fee、module_task/monthly_brand_fee_task.py | 扣门店钱包品牌费并影响派发状态。 | 查钱包余额、钱包流水、门店积分派发状态。 |
| 员工提现打款 | scripts/cron/staff_withdrawal_payout_process.sh | 处理员工提现申请和打款。 | 查提现申请、钱包流水、易宝状态。 |
| 员工站点等级刷新 | scripts/cron/staff_station_level_refresh.sh | 刷新员工站点等级。 | 查任务结果和等级账户。 |
| 简历分享过期 | module_task/resume_share_expire_task.py | 将过期简历分享置为失效。 | 查 resume_share_validity。 |
| 保险待支付清理 | scripts/cron/cleanup_stale_insurance_pending.py | 清理超时待支付保险记录。 | 先 dry-run,再 execute。 |
| 安心支付自动接单 | Redis 到期监听、module_task/anxin_life_auto_grab_task.py | 安心需求待抢 30 分钟后分配给交付。 | 查 demand_square、demand_channel_data、Redis 计时器和交付目标。 |
| 卡单清理 | module_task/stuck_order_cleanup_task.py | 清理长期卡住订单。 | 查规则中定义的超时小时数和订单日志。 |
常见问题排查
门店端入口不可见
- 查当前小程序角色是否为
store,本地是否有有效门店 token。 - 查
internal_user是否启用,是否有关联company_id、store_uuid、role_id。 - 查公司版本、到期时间和
contract_maintenance_mode。合同维护模式会隐藏线索、客户、订单、余额、家政人广场等入口。 - 查全部功能页是否被
companyAdminOnly或合同维护过滤。 - 查后端接口是否返回权限错误,不能只看页面按钮是否显示。
门店端订单查不到或状态不对
- 先确认订单
business_mode:历史门店订单通常是LEGACY,平台标准单是PLATFORM_STANDARD_SOURCE。 - 查
order.store_uuid、current_controller和当前账号数据范围。 - 查
order.order_status、order_status_name、order_logs。 - 若订单来自需求广场,继续查
demand_square、order_payments、分账状态。 - 若门店说“派单后员工看不到”,查
order_waiter、员工手机号对应的service_staff身份、员工端跨门店查询。
代客下单无法新建
- 当前
OrderService.create_order_service和create_proxy_order_service会在方法开头直接抛 1048 暂停异常。 - 前端
pages-home/sub-po.vue仍保留页面和表单,但会提示代客下单升级中。 - 不要把
/api/v1/order/proxy-create当作当前可用创单链路排查。 - 若后续恢复该能力,必须先移除暂停保护,再重新验收客户、地址、SKU、支付、渠道归因、门店/员工入口和通知。
前端封装有接口但后端没有路由
storeui/src/api/order.js 中 updateServiceAddress 和 addOperationLog 是遗留封装,当前 storeapi/module_admin/controller/order_controller.py 没有对应路由。接手时不要只看前端 API 文件判断功能可用,必须同时查后端 controller 注册。
门店端余额、钱包或积分异常
- 先判断当前门店是否启用新钱包读口径;未启用时看
company.balance/company_transaction。 - 新钱包看
store_wallet_account、store_wallet_transaction和idempotency_key。 - 积分看
store_score_account和store_score_transaction,不要和钱包余额混用。 - 月度品牌费、线索购买、人工调整都必须有流水或批次记录。
- 修复资金和积分时优先补偿流水或反向流水,不直接改账户余额。
历史提现提示关联钱包流水不存在
- 先核对提现申请关联的收入流水实际属于旧公司流水还是门店钱包流水,不能只按流水号格式判断。
- 旧公司提现提交后,申请金额会从可用余额转入冻结余额;页面可用余额为零不代表资金不足。
- 门店后来切换到双写或门店钱包模式时,历史提现仍按申请时的旧公司冻结余额审核、取消和完成,不迁移或重复冻结钱包资金。
- 审核通过只更新审核状态;财务真实打款并填写交易流水号后,系统才从对应冻结金额确认支出。
- 若原收入流水、提现流水或冻结金额任一缺失,停止处理并核对资金链路,不直接充值、改余额或伪造钱包流水。
员工端看不到订单
- 查员工登录态是否有效,员工
service_staff是否status = 1且未删除。 - 查订单
order_waiter是否绑定该员工;旧自动派发标准单再查 attempt。 - 查员工能力、服务区域、档期是否满足。
- 查通知 outbox 是否发送,微信 openid 是否存在。
- 查前端页面是否请求了正确 API,特别是员工端服务首页和服务记录页。
标准单一直未进入广场或未派员工
- 查订单是否已支付、业务模式是否为标准单、来源和工种是否允许入广场。
- 查
demand_square是否已有有效记录,避免把幂等跳过误判为发布失败。 - 查历史任务名
standard_staff_dispatch_pending的执行结果;当前实际动作是发布到家政广场。 - 已进入广场但无人抢时,查需求状态、过期时间和门店负责人权限。
- 门店已抢但员工看不到时,查
current_controller、order_waiter、员工归属和上架状态。 - 员工拒绝后由抢单门店负责人重新派本店员工,不查旧员工池轮排。
员工确认后状态没变
- 查 attempt 是否已更新为确认状态。
- 查
order是否同步为对应状态。 - 查
order_logs是否写入。 - 查并发锁是否导致更新被拒绝。
- 查接口返回错误和小程序端是否重试。
员工开始或完成服务失败
- 查当前订单状态是否符合状态机:开始服务要求 50,完成服务要求 60。
- 查当前员工是否对订单有权限,员工手机号是否能匹配订单服务人员。
- 开始服务必须有服务前照片;完成服务的服务后照片和签名可选。
- 查文件组是否创建成功,再查订单服务前/服务后/签名字段。
- 完成服务后继续查档期完成、结算任务、开发奖金任务和渠道通知是否成功。
员工能力、区域或休息日不生效
- 查
staff_service_capability和审核记录,确认能力是否审批通过。 - 查
standard_staff_service_region或区域申请是否生效。 - 查
staff_rest_date中具体休息日期;系统不再使用每周固定休息配置。 - 查
standard_staff_schedule_lock是否已有 ACTIVE 锁。 - 查
order_waiter + order是否已有 20/40/50/60/70 状态订单导致冲突。
员工服务奖金没到账
- 先判断订单类型:全国标准单服务奖金和安心支付佣金不是同一结算链路。
- 全国标准单查订单是否完成、
standard_order_settlement_task、等待期、员工易宝入网、真实资金开关和易宝分账记录;不要以员工钱包余额判断到账。 - 安心支付查订单是否完成、是否有核销扣款单号、
order_waiter.service_personal和staff_wallet_ledger。 - 查幂等记录,确认没有全国标准单成功分账与安心钱包重复发放冲突。
- 结果不确定时先对账,不创建新的资金请求。
门店积分异常
- 查
store_score_account当前分。 - 查
store_score_transaction对应日期和来源。 - 查是否有人工调整、日结、线索扣分或品牌费暂停影响。
- 查
store_score_settlement_batch是否成功。 - 如果影响线索派发,继续查
dispatch_status和pause_reason。
家姐联盟线索派发异常
- 查
jiejie_alliance_lead的来源、当前状态、区域解析结果和待派发时间。 - 线索同时有经纬度和地址时,以经纬度逆解析得到的省、市、区县为主,地址和来源区域只做一致性校验,不能让小区或商场名称中的行政区文字覆盖坐标结果。
- 经纬度缺失或地图服务暂时不可用时,才降级使用城市坐标范围、地址文本和来源区域映射;降级结果无法确定标准区域时进入人工处理。
- 历史误解析记录不会随规则发布自动改正,应先重新同步或重算区域,确认新区域后再重新派发,不直接修改派发记录或钱包流水。
- 查
store_lead_dispatch_record的attempt_no、目标门店、排名范围、派发状态、查看时间和冻结状态。 - 查候选门店上周积分排名、今日已派发次数、进行中线索、余额、接收人和自动接收开关。
- 查区域池、城市池、全局池是否按当前线索解析区域选择,不能只看全局积分第一名。
- 高排名门店应先进入候选顺序,但不会无限连续吃单;检查轮发游标是否在拒绝、超时、未读或余额不足后推进。
- 查
jiejie_lead_dispatch_pending、jiejie_lead_timeout_transfer、jiejie_lead_nightly_charge的任务日志、锁和最近执行结果。 - 涉及扣费时同时查钱包流水和幂等标识,不直接修改门店余额或派发记录。
合同保险待支付异常
- 查
contract_payment和store_payment_order是否支付成功。 - 查
contract_insurance是否存在待同步记录。 - 查
insurance_record是否已生成保单或停在待支付。 - 查保险支付回调和第三方请求日志。
- 若是超时记录,先使用清理脚本 dry-run 确认可处理范围。
退保文档生成失败
- 查保单是否符合退保条件:产品、状态、是否已退保、起保日期。
- 查
insurance_surrender_document是否已有草稿或生成记录。 - 查付款截图、退款账户、开户行、户名、卡号是否完整。
- 查 OBS 或远程文档服务是否返回上传地址。
- 查
insurance_operation_record是否提交第三方失败。
易宝支付或入网异常
- 查
yeepay_innet_record或yeepay_plate_qrcode当前状态。 - 查
store_payment_order是否创建成功。 - 查
yeepay_notification_log是否有回调。 - 查商户号、收款码、分账配置是否一致。
- 支付回调必须幂等,不要重复写流水。
云函数启动或接口报错
- 在云效确认失败发生在构建、部署还是发布后调用阶段,并记录提交号和流水线执行号。
- 在阿里云函数计算按函数名和时间查看实例日志,先找启动错误,再找请求异常。
- 用
trace_id、request_id、订单号或门店标识串联 controller、service 和第三方日志。 - 启动阶段重点查环境变量、模块导入、数据库、Redis、OBS 和外部服务初始化。
- 请求阶段重点查输入校验、数据库锁、第三方超时、回调签名和幂等结果。
- 云函数请求结束后不要依赖后台线程继续完成业务;结算、通知、补偿和重试要查宝塔任务或内部任务接口。
- 持续 5xx 或启动失败时暂停继续发布,按 部署与流水线 回滚。
日志和证据
| 证据 | 用途 |
|---|---|
order_logs | 订单状态变化和人工操作。 |
demand_square | 新标准单入广场、抢单状态和承接门店。 |
standard_staff_dispatch_log | 历史标准单自动派发原因,仅用于旧记录复盘。 |
standard_order_operation_log | 标准单人工处理记录。 |
staff_wallet_ledger | 员工钱包收入、提现、冻结。 |
store_wallet_transaction | 门店钱包资金流水。 |
store_score_transaction | 门店积分流水。 |
sys_oper_log | 云平台后台操作记录。 |
| 第三方回调日志表 | 支付、保险、安心生活、易宝等接口追踪。 |
上线检查
- 后端变更先跑相关单测或至少启动检查。
- 涉及
storeui时确认旧小程序兼容窗口。 - 涉及任务时确认宝塔脚本、内部接口、任务参数和日志路径。
- 涉及数据库时确认表结构、索引、幂等键和回滚方式。
- 涉及资金时必须有流水和重复执行保护。
- 涉及第三方时必须保留请求、响应和回调证据。
回滚原则
| 变更类型 | 回滚方式 |
|---|---|
| 小程序页面 | 不能即时回滚到未审核版本,只能回退到上一版已发布小程序或紧急发新包。 |
| 后端接口 | 回退代码分支并触发云函数重新部署。 |
| 规则配置 | 使用云平台恢复原配置,同时记录操作原因。 |
| 计划任务 | 先停任务或改 dry-run,再修复数据和重新执行。 |
| 钱包/积分/支付 | 不直接改余额,优先写反向流水或补偿流水。 |
| 合同/保险 | 先确认第三方状态,再修本地状态,避免本地和第三方不一致。 |