PDA / GPDA 扫码盘点与仓内作业

本文整理 DGJ2.0 PDA、GPDA 相关的移动仓内作业,包括采购签收/入库、销售出库、盘点、货位调整、出库验货。它和 PC 端库存逻辑共用大量库存表,是库存一致性问题的重要入口。

业务目标

  • 服务站用 PDA 扫码完成采购签收、入库上架、销售出库、盘点和货位调整。
  • GPDA 提供更偏仓内任务的盘点、扫码、结果导出和 SKU 数量同步。
  • 所有 PDA/GPDA 的最终结果都要落到业务单据、库存流水、实时库存和操作日志里。

适用场景

  • PDA 扫码入库后库存没增加。
  • 销售出库 PDA 扫码成功,但出库单状态或库存不对。
  • 盘点单提交后盘盈盘亏未落流水。
  • GPDA 任务状态和 PC 端盘点状态不一致。
  • 货位调整后商品还在旧货位。

入口文件

  • PDA 登录和首页:application/controllers/pda/User.php
  • PDA 公共接口:application/controllers/pda/Common.php
  • PDA 采购签收/入库:application/controllers/pda/Purchase.php
  • PDA 销售出库:application/controllers/pda/Sale.php
  • PDA 盘点:application/controllers/pda/TakeStock.php
  • PDA 货位调整:application/controllers/pda/AreaChange.php
  • PDA 出库验货:application/controllers/pda/OutStockCheck.php
  • GPDA 盘点:application/controllers/inner/gpda/TakeStock.php
  • GPDA 门店:application/controllers/inner/gpda/GpdaStore.php
  • GPDA 后台库存:application/controllers/inner/gpda.back/Inventory.php

核心 Service

  • application/Services/Pda/UserSer.php
  • application/Services/Pda/SaleSer.php
  • application/Services/Pda/TakeStockSer.php
  • application/Services/Pda/AreaChangeSer.php
  • application/Services/Pda/OutStockCheckSer.php
  • application/Services/Pda/PdaOptionSer.php
  • application/Services/Gpda/TakeStockSer.php
  • application/Services/Gpda/InventorySer.php
  • 库存写入最终要关注:application/Services/Storage/InventorySer.php

核心表

| 表 | 用途 | | --- | --- | | t_scm_inventory_check | 盘点主表 | | t_scm_inventory_check_info | 盘点明细,按 sid 个位存在分表口径 | | t_sys_pda_option_log | PDA 操作日志 | | t_scm_inventory / t_scm_inventory_info | 库存流水 | | t_scm_inventory_real_time | 实时库存 | | t_scm_pu_invoice / t_scm_pu_invoice_info | 采购入库 | | t_scm_sa_invoice / t_scm_sa_invoice_info | 销售出库 | | t_bs_storage / t_bs_storage_area | 仓库和货位 |

关键接口地图

PDA 采购

  • getWmsList:采购待签收/仓库任务列表。
  • getWmsInfo:采购任务详情。
  • getFydInfo:发运单信息。
  • getSignBoxInfogetSignBoxResInfo:箱维度签收信息。
  • getSignComfirmsignIn:签收确认和签收入库前动作。
  • getInStoListgetInStoDetail:入库列表和详情。
  • getInStroComfirminStoIn:入库确认。
  • getStoAreaListgetAreaList:仓库/货位选择。

PDA 销售

  • getSaleList:待出库销售列表。
  • getSaleInfo:销售出库详情。
  • geAreaStockData:查货位库存。
  • saleStockOut:扫码出库,最终影响出库单和库存。

PDA / GPDA 盘点

  • getBillAddPage:盘点新增页面数据。
  • getPddListgetPddInfo:盘点列表和主单信息。
  • addPdd / gaddPdd:创建盘点单。
  • getScanData / ggetScanData:扫描记录。
  • addScanData / gaddScanData:新增扫码数据。
  • upPddStatus / gupPddStatus:盘点状态推进。
  • exportPddResult:GPDA 盘点结果导出。

PDA 货位调整和验货

  • AreaChange::getInvByScan:扫码找商品。
  • AreaChange::getAreaByScan:扫码找货位。
  • AreaChange::submit / batchSubmit:提交货位调整。
  • OutStockCheck::scan:出库验货扫码。
  • OutStockCheck::check:验货确认。

主流程

flowchart TD
  A["PDA 登录"] --> B["选择采购/销售/盘点/货位调整"]
  B --> C["扫码识别商品、箱码、货位或单据"]
  C --> D["校验服务站、仓库、货位、商品状态"]
  D --> E["写业务单据或扫描明细"]
  E --> F["提交确认"]
  F --> G["写库存流水"]
  G --> H["更新实时库存"]
  H --> I["记录 PDA 操作日志"]

异常流程

  • 扫码找不到商品:查条码、skuIdinvId、商品状态、是否被合并。
  • 找不到货位:查 t_bs_storage_area、仓库状态、货位是否属于当前服务站。
  • 入库重复提交:查入库单状态、PDA 操作日志、库存流水是否已写。
  • 盘点重复提交:查盘点状态、盘点明细和盘盈盘亏流水。
  • GPDA 和 PDA 数据不一致:确认是否同一个 sid、仓库、盘点单、任务号。

常用排查 SQL

-- 查盘点主单和明细
select * from t_scm_inventory_check where sid = :sid and billNo = :bill_no;
select * from t_scm_inventory_check_info where sid = :sid and PDDId = :pdd_id;

-- 查 PDA 操作日志
select * from t_sys_pda_option_log where sid = :sid order by id desc limit 50;

-- 查货位实时库存
select * from t_scm_inventory_real_time
where sid = :sid and invId = :inv_id and locationId = :location_id;

常用 rg 命令

rg -n "class Purchase|signIn|inStoIn|getInSto" application/controllers/pda application/Services/Pda
rg -n "saleStockOut|geAreaStockData|OutStockCheck" application/controllers/pda application/Services/Pda
rg -n "gaddPdd|gaddScanData|exportPddResult|sendStatusChangeMsg" application/controllers/inner/gpda application/Services/Gpda
rg -n "SYS_PDA_OPTION_LOG|SCM_INVENTORY_CHECK|SCM_INVENTORY_REAL_TIME" application

改动风险和回归清单

  • 采购签收:箱码、发运单、签收确认、重复签收。
  • 采购入库:货位选择、入库确认、库存流水、实时库存。
  • 销售出库:扫码验货、货位扣减、出库单状态。
  • 盘点:新增、扫码、提交、盘盈盘亏、导出。
  • 货位调整:单品调整、批量调整、旧货位扣减、新货位增加。
  • 登录安全:PDA 登录状态、账号锁定、服务站权限。