Skip to content

Latest commit

 

History

History
1115 lines (948 loc) · 77.8 KB

File metadata and controls

1115 lines (948 loc) · 77.8 KB

WMS 仓储管理系统 — 项目开发日志

一、项目概览

项目 说明
名称 WMS 仓储管理系统(汽车零部件入库)
前端 Vue 3 + Element Plus + Vite
后端 Spring Boot 3.2.5 + Spring Security + JPA
数据库 H2 文件型数据库(backend/data/wmsdb)
认证 JWT(jjwt 0.12.5)+ BCrypt 密码加密
默认账号 admin / admin123

2026-06-16 出库单看板关联与搜索完善

  • 出库单管理新增供应商、出库类型搜索,出库类型包括:出库、退库、调账出库、调账退库(无实物)。
  • 出库单实体新增供应商、出库类型字段,出库明细新增看板号字段。
  • 新建出库单时按供应商筛选零件和已入库看板,选择看板后自动带出零件、数量、仓库、库位、器具等看板内容。
  • 后端创建出库单时校验看板必须为已入库、未封存、未被其他未完成出库单占用,并保存关联看板号。
  • 扫码出库时校验扫码看板必须属于当前出库单,避免同零件错扫其他批次看板。
  • 扫码出库页面的出库单下拉项显示关联看板号;单个待出库看板时可自动带入看板号。
  • 验证:mvn -q -DskipTests compile 通过,npm run build 通过。

2026-06-16 独立出库看板与摄像头扫码出库

  • 新增 outbound_kanban 出库看板表,出库单创建后自动生成独立出库看板,出库看板号与库存/入库看板号分离。
  • 出库看板携带零件名、实际出库数量、看板编号、供应商、仓库、库位、出库单号、来源库存看板号等信息。
  • 出库单明细中 kanbanNo 调整为出库看板号,新增 sourceKanbanNo 追溯来源库存看板。
  • 出库单管理列表直接显示出库看板二维码,并支持打印出库看板。
  • 扫码出库改为扫描出库看板号,后端通过来源库存看板完成状态更新、FIFO 校验和库存流水写入。
  • 扫码出库页面新增摄像头扫码功能,识别二维码后自动查询出库看板详情。
  • 验证:mvn -q -DskipTests compile 通过,npm run build 通过;浏览器访问 localhost:3000 被当前环境企业网络策略拦截,未做页面级点击验证。

2026-06-16 修正出库单自动生成看板逻辑

  • 出库单新建逻辑改为和入库单一致:用户只填写客户、供应商、出库类型、零件和数量,保存后后端自动生成相关出库看板。
  • 新建出库单页面移除“选择库存来源看板”的必填操作,避免把自动生成看板流程变成手动关联看板流程。
  • 后端创建出库单时根据零件和数量自动匹配已入库、未封存、未被占用且数量足够的库存看板,写入 sourceKanbanNo 作为追溯来源,并立即生成 OKB... 出库看板号。
  • 扫码出库继续扫描出库看板号;出库时按出库看板实际数量扣减来源库存看板,若来源库存看板有剩余数量则保留剩余库存。
  • 验证:mvn -q -DskipTests compile 通过,npm run build 通过。

2026-06-16 转包单管理

  • 新增转包单实体 RepackOrder 和转包单明细 RepackOrderItem,支持按单管理转包作业。
  • 新增 /api/repack/orders/api/repack/order/api/repack/order/{id}/execute/api/repack/order/{id}/void 接口。
  • 转包作业页面改为转包单管理模式,支持新建转包单、执行转包、作废转包单,并保留转包记录列表。
  • 新建转包单参考新建入库单:选择供应商后选择该供应商已入库、未封存的来源看板,填写目标器具、转包数量、操作人和备注。
  • 转包单支持按状态(待转包、转包中、已完成、作废)、转包单号、供应商搜索。
  • 执行转包单后自动生成新看板,更新来源看板余额,并写入转包记录。
  • 权限补充:operations.repack 可访问转包单接口、供应商列表和看板列表。
  • 验证:mvn -q -DskipTests compile 通过,npm run build 通过。

2026-06-16 转包单目标仓库/库位

  • 转包单明细新增目标仓库和目标库位字段,支持为转包后的新看板选择新的存放位置。
  • 新建转包单页面在每条明细中增加“新仓库”“新库位”选择,库位会按所选仓库过滤。
  • 后端创建转包单时校验目标仓库、目标库位必须存在,且库位必须属于所选仓库。
  • 执行转包单生成新看板时,新看板的 warehouseNamelocationName 写入用户选择的新仓库/新库位。
  • 权限补充:operations.repack 可访问仓库/库位列表。
  • 验证:mvn -q -DskipTests compile 通过,npm run build 通过。

二、技术架构

2.1 前后端通信

  • 前端 Vite 开发服务器端口 3000(实际 3002),配置代理 /apihttp://localhost:8080
  • Axios 封装(src/utils/request.js),统一注入 JWT Token、拦截 401 自动跳转登录页
  • 后端 SecurityConfig 放行 /api/login,其余接口需 Bearer Token

2.2 项目结构

shixun/
├── backend/                          # Spring Boot 后端
│   ├── src/main/java/com/example/demo/
│   │   ├── config/
│   │   │   ├── DataInitializer.java     # 初始化演示数据
│   │   │   ├── JwtAuthFilter.java       # JWT 鉴权过滤器
│   │   │   └── SecurityConfig.java      # Spring Security 配置
│   │   ├── controller/
│   │   │   ├── AuthController.java       # 登录/用户信息
│   │   │   ├── BaseInfoController.java   # 基础信息 CRUD
│   │   │   ├── InboundOrderController.java # 入库单管理
│   │   │   ├── KanbanController.java     # 看板生成/扫码入库
│   │   │   ├── InventoryController.java  # 库存查询/追溯
│   │   │   └── MenuController.java       # 动态菜单
│   │   ├── entity/                       # JPA 实体(13张表)
│   │   ├── repository/                   # JPA 仓库接口
│   │   └── util/JwtUtil.java             # JWT 工具类
│   ├── src/main/resources/application.yml
│   └── pom.xml
│
├── frontend/                         # Vue 3 前端
│   ├── src/
│   │   ├── api/index.js                 # 所有后端接口封装
│   │   ├── router/index.js              # 路由 + 导航守卫
│   │   ├── stores/user.js               # Pinia 用户状态
│   │   ├── utils/request.js             # Axios 实例 + 拦截器
│   │   ├── views/
│   │   │   ├── Login.vue                # 登录页
│   │   │   ├── Layout.vue               # 主布局(菜单+标签页+内容区)
│   │   │   ├── Home.vue                 # 首页
│   │   │   ├── baseinfo/                # 基础信息:供应商/客户/零件/仓库库位/器具
│   │   │   ├── inbound/                 # 入库业务:入库单/看板管理/扫码入库
│   │   │   ├── inventory/               # 库存:库存总览/库存追溯
│   │   │   └── children/                # 系统:用户管理/角色管理
│   │   └── main.js
│   ├── vite.config.js
│   └── package.json

三、数据库表结构(9张业务表)

表名 实体 说明
supplier_info Supplier 供应商(编码、名称、联系人、手机号、座机号、地址、级别)
customer_info Customer 客户(编码、名称、联系人、手机号、座机号、地址、级别)
part_info Part 零件(编码、名称、规格、单位、所属供应商)
warehouse_info Warehouse 仓库(编码、名称、区域、库位容量总和)
location_info Location 库位(编码、名称、容量、所属仓库)
container_info Container 器具类型定义(编码、名称、类型、供应商代码、零件号、车型、规格、单箱容量)
inbound_order InboundOrder 入库单(单号、供应商、状态、类型、来源订单号)
inbound_order_item InboundOrderItem 入库单明细(零件、计划数量、实收数量、仓库、库位、器具)
kanban Kanban 看板(编号、状态、仓库、入库单关联、二维码)
inventory_record InventoryRecord 库存记录(扫码入库产生的流水)
user_info User 用户(登录认证)
menu_info Menu 菜单配置

四、核心业务流程

4.1 登录流程

  1. 用户输入用户名密码 → AuthController.login()
  2. BCrypt 校验密码 → JwtUtil.generateToken() 生成 JWT
  3. 前端存入 localStorage.token,路由守卫检查后进入主界面
  4. 每次请求由 JwtAuthFilter 拦截验证 Token

4.2 入库单创建流程

  1. 选择供应商 → 后端返回该供应商所有零件
  2. 零件列表以表格展示,每行独立选择:仓库、零件、数量、器具、库位
  3. 批量导入支持文本解析(格式:零件编码,数量,仓库编码,器具编码,库位编码
  4. 库位容量校验(红色"超容量!"警告)
  5. 提交后自动生成看板,状态直接变为 CONFIRMED

4.3 入库单修改流程

  1. 点击修改 → 显示该入库单现有明细(非全量零件表)
  2. 每行可独立修改:零件(下拉更换)、数量、仓库、器具、库位
  3. 可删除行、添加新行
  4. 保存后自动清除旧看板并重新生成所有未入库的新看板
  5. 未改动的已入库看板不受影响

4.4 看板生成与扫码入库

  1. 入库单创建/修改时自动生成看板,无需手动点击"生成"
  2. 看板状态:PRINTED(待扫描)→ SCANNED(已入库)→ VOIDED(已作废)
  3. 部分入库后自动生成剩余数量新看板:扫完一张 → 剩余数量自动出新看板
  4. 扫码入库写入 InventoryRecord,更新 actualQty,同步订单状态

4.5 入库单状态流转

DRAFT(草稿)→ 自动生成看板 → CONFIRMED(已确认)
→ 部分扫码入库 → PARTIAL(部分入库)
→ 全部扫码入库 → COMPLETED(已完成)
→ 作废 → VOIDED(已作废)

4.6 入库单删除

  • 允许删除 DRAFT / CONFIRMED / PARTIAL / COMPLETED 状态
  • 级联删除:库存记录 → 看板 → 入库单,完全清除痕迹

4.7 库存追溯

  • 按零件追溯:输入零件编码 → 查询所有入库记录
  • 按看板追溯:输入看板号 → 查询该看板对应的入库流水

五、功能模块清单

菜单 路由 功能
首页 /home 欢迎页面
入库管理
入库单管理 /inbound/order 创建/修改/删除/作废/打印,搜索(供应商下拉+状态+单号)
看板管理 /inbound/kanban 搜索/打印/批量打印/导出CSV,仓库/供应商/零件下拉筛选
扫码入库 /inbound/scan 输入看板号扫码入库,自动生成剩余看板
基础信息
供应商管理 /baseinfo/supplier 供应商 CRUD
客户管理 /baseinfo/customer 客户 CRUD
零件管理 /baseinfo/part 零件 CRUD,按供应商筛选
仓库库位 /baseinfo/warehouse 仓库 CRUD + 库位 CRUD(含容量)
器具管理 /baseinfo/container 器具类型定义(纯类型表,无数量追踪)
库存管理
库存总览 /inventory/stock 按零件汇总库存数量
库存追溯 /inventory/trace 按零件/看板追溯入库记录
系统管理
用户管理 /system/user 用户 CRUD
角色管理 /system/role 角色 CRUD

六、关键接口一览

方法 路径 说明
POST /api/login 登录
GET /api/userinfo 获取当前用户信息
GET /api/menus 获取菜单列表
GET/POST/PUT/DELETE /api/baseinfo/supplier(s) 供应商 CRUD
GET/POST/PUT/DELETE /api/baseinfo/customer(s) 客户 CRUD
GET/POST/PUT/DELETE /api/baseinfo/part(s) 零件 CRUD
GET/POST/PUT/DELETE /api/baseinfo/warehouse(s) 仓库 CRUD
GET/POST/PUT/DELETE /api/baseinfo/location(s) 库位 CRUD
GET/POST/PUT/DELETE /api/baseinfo/container(s) 器具 CRUD
GET /api/inbound/orders 入库单列表(搜索/筛选)
GET/POST/PUT/DELETE /api/inbound/order(/{id}) 入库单 CRUD
PUT /api/inbound/order/{id}/void 作废入库单
GET /api/inbound/order/{id}/kanbans 查看入库单关联看板
POST /api/kanban/generate/{orderId} 手动生成看板(旧看板自动清除)
GET /api/kanban/list 看板列表(搜索/筛选)
GET /api/kanban/scan/{kanbanNo} 根据看板号查询
POST /api/kanban/scan/{kanbanNo} 扫码入库(自动生成剩余看板)
GET /api/inventory/trace/{partCode} 按零件追溯
GET /api/inventory/kanban-trace/{kanbanNo} 按看板追溯
GET /api/inventory/stock-summary 库存总览
GET /api/inventory/location-summary 库位库存监控

七、重要功能迭代记录

7.1 每行独立仓库库位

  • InboundOrderItem 新增 warehouseId / warehouseName 字段
  • Kanban 新增持久化 warehouseName 字段
  • 新建/编辑时每行独立选择仓库,库位按所选仓库过滤
  • 切换行仓库时自动清空该行库位
  • 打印单增加仓库列

7.2 看板自动生成

  • 新建入库单 → 自动生成看板,状态直接 CONFIRMED
  • 修改入库单 → 自动清除旧看板并重新生成
  • 扫码入库后 → 自动为剩余数量生成新看板
  • generateKanban 放开限制(旧未入库看板自动清除后重新生成)
  • 前端去掉"生成"按钮(全自动)

7.3 入库单删除级联

  • 允许删除 DRAFT / CONFIRMED / PARTIAL / COMPLETED 状态
  • 级联删除:InventoryRecordKanbanInboundOrder
  • 只有 VOIDED(已作废)不可删除

7.4 编辑模式重构

  • 编辑弹窗直接显示入库单现有明细,而非全量零件表
  • 每行零件可下拉更换,规格/单位自动跟随
  • 供应商/仓库/入库类型/订单号均可修改
  • 支持删除行、添加新行
  • 保存时只对变更项更新看板,未改动项保持原样(后续改为全量更新)

7.5 搜索优化

  • 入库单管理:供应商改为下拉选择
  • 看板管理:仓库、供应商、零件号改为下拉选择(零件支持输入过滤)
  • 入库单管理增加订单号搜索字段

7.6 看板管理增强

  • 表格增加勾选框,支持批量打印(每张看板独立分页,含二维码)
  • 支持导出 CSV(UTF-8 带 BOM,Excel 可直接打开)
  • 弹窗表格列宽优化,去掉空白列,二维码完整显示
  • 关联看板弹窗支持批量打印

7.7 器具管理简化

  • 去掉"现有/空闲"列、"状态"列、"所在库位"列
  • 器具变为纯类型定义表

7.8 仓库容量与库位分类

  • Warehouse 新增 capacity 属性,由所属全部库位容量自动求和
  • 库位新增、修改、删除后自动重新计算相关仓库容量
  • 仓库库位页面按仓库分组显示库位,并支持按仓库筛选
  • 仓库列表直接展示仓库容量,分组标题展示库位数和容量合计

7.9 手工入库

  • 入库类型删除"手工调账",保留正常入库和整托入库
  • 入库单操作新增"手工入库"
  • 手工入库将剩余数量直接写入库存,库存流水类型为 MANUAL_INBOUND
  • 手工入库会删除未扫描看板,保留已扫描看板作为历史记录
  • 入库单增加 manualInbound 标记,手工入库完成后禁止再次生成看板
  • 库存汇总和库存追溯将手工入库记录按入库数量计算

7.10 供应商与客户搜索

  • 供应商、客户新增座机号和级别属性,原 phone 字段作为手机号
  • 两个页面均支持按编号、名称、地址、手机号、座机号、联系人、级别独立组合搜索

7.11 器具属性与搜索

  • 器具新增供应商代码、零件号、车型属性
  • 器具管理支持按零件号、供应商代码、车型、器具类型、器具代码组合搜索

八、Bug 修复记录

8.1 零件表格不显示

  • 原因el-table-column 作用域插槽用 #default="{r}",Element Plus 暴露的是 { row }
  • 修复:全部改为 #default="{ row }"

8.2 入库单列表不显示

  • 原因:操作列 #default="{ row:r }" 重命名后 v-if 仍写 row.status
  • 修复:改为 r.status

8.3 仓库不支持编辑删除

  • 修复:后端新增 PUT/DELETE 接口,前端新增对应按钮

8.4 入库单乱码

  • 现象:部分持久化数据中文字段为 ?
  • 修复:启动时根据主数据自动修复损坏字段

8.5 看板未入库状态冗余

  • NOT_INBOUNDSEALEDTRANSFER_INBOUND 从未被后端设置
  • 修复:前端下拉只保留"待扫描/已入库/已作废"

九、启动方式

后端

cd backend
mvn spring-boot:run
# http://localhost:8080

前端

cd frontend
npm install
npm run dev
# http://localhost:3002

访问

http://localhost:3002,账号 admin,密码 admin123


十、技术要点(答辩用)

要点 说明
JWT 认证 登录返回 Token,Authorization: Bearer xxxJwtAuthFilter 拦截验证
路由守卫 router.beforeEach 检查 token,无则跳转登录页
菜单-标签联动 el-menu + el-tabs,点击菜单加标签,关闭标签跳转相邻
前后端打通 Vite 代理 /api → 后端 8080,Axios 统一封装
Spring Security /api/login 放行,STATELESS 会话
JPA 关联 InboundOrderInboundOrderItem 单向 @OneToMany(cascade=ALL)
看板自动同步 创建/修改/扫码后自动调用 buildKanbans() 同步看板
级联删除 删除入库单时联动清除看板+库存记录
H2 数据库 文件持久化,ddl-auto: update 自动建表
Element Plus 表格、表单、对话框、选择器、标签页等组件

十一、2026-06-11 产品资料对照补全

11.1 看板生命周期

  • 看板新增封存、解封能力,封存看板禁止入库、转包和出库。
  • 看板管理列表直接展示二维码,支持单张打印、批量打印和 CSV 导出。
  • 看板状态补充已出库、已转包、封存、转包入库等业务展示和筛选。
  • 修复部分扫码后对整张入库单重复生成剩余看板的问题;现在仅生成当前看板的余额看板。

11.2 出库与扫码防错

  • 新增出库单管理,支持客户、零件计划数量、执行数量、状态和作废。
  • 新增带单/无单扫码出库,写入 OUTBOUND 库存流水并更新出库单进度。
  • 零件新增客户条码,出库时执行内部看板条码与客户条码比对。
  • 同零件按入库时间执行先进先出;非最早批次会预警,可确认例外后强制出库。

11.3 转包作业

  • 新增转包页面,支持更换目标器具、部分转包、整托转包。
  • 转包生成新的唯一看板,保留来源看板、转包数量、来源余额、器具变化和操作记录。
  • 目标器具容量不足时阻止转包。

11.4 库存监控

  • 零件新增低储阈值和高储阈值。
  • 库存总览和库位监控按零件阈值显示缺货、低储、高储、正常状态,不再使用固定数值。

11.5 用户、角色与权限

  • 用户和角色从内存测试数据改为 H2 持久化数据。
  • 用户管理支持新增、编辑、启停、重置密码和删除。
  • 角色管理支持菜单功能权限配置。
  • 登录、动态菜单和后端接口均校验角色权限,避免绕过前端直接调用无权限接口。

11.6 验证

  • 后端执行 mvn -q -DskipTests package 通过。

2026-06-25 看板关联追溯规则校正

修改内容

  1. 库存追溯查询普通库存看板时,若没有不带单出库或手持转包关系,只显示该看板自身。
  2. 不带单出库现在会生成独立的出库看板,来源库存看板追溯时显示自身和关联出库看板。
  3. 带单出库看板保持独立存在,追溯出库看板或被扣减的库存看板时不再互相串联。
  4. 手持转包生成的转包看板继续显示来源/目标相关看板;普通新建转包单生成的转包看板保持独立存在。
  5. 清理库存追溯旧的出库关联判断,避免历史流水导致看板关系误连。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 已通过 /api/inventory/kanban-trace/{kanbanNo} 抽查普通库存看板、带单出库看板、手持转包看板、新建转包单看板的返回数量和关联关系。

2026-06-25 库存流水与看板库存对账修复

检查结果

  1. 按库存流水汇总和当前在库看板汇总对账,发现 PT001 流水净库存为 300,但在库看板合计为 355,相差 55。
  2. 差异来源为两类历史数据:出库看板 OKB1781593117949157 缺少来源库存看板,两个已完成转包入库看板 RKB1781587009466391RKB1782124170726836 缺少对应 REPACK_INBOUND 库存流水。

修复内容

  1. 已按 FIFO 规则将 OKB1781593117949157 关联到来源库存看板 KB1781353524661-A1A84F,并将该来源看板数量从 50 调整为 40。
  2. 已同步修复出库明细和库存流水中的来源看板号。
  3. 已为 RKB1781587009466391RKB1782124170726836 补充转包入库流水,数量分别为 20、25。
  4. 修复前已备份数据库文件:backend/data/wmsdb.mv.db.bak-20260625-093900

验证

  • 按零件对账:PT001=345PT002=30PT003=20PT004=100PT005=50,库存流水与当前在库看板全部一致。
  • 按库位对账:PT001/A-01-01=300PT001/A-01-02=45PT002/A-01-01=30PT003/B-01-01=20PT004/B-01-01=100PT005/C-01-01=50,差异均为 0。
  • 检查所有库存流水看板号均能找到对应看板,所有库存流水单据号均能找到对应入库/出库/转包单。
  • 已重启后端,并通过 /api/inventory/total-stock-report/api/inventory/stock-summary 验证页面接口库存数量一致。

2026-06-25 入库单供应商首选仓库学习逻辑

修改内容

  1. 新增 /api/inbound/supplier-storage/{supplierId} 接口,返回供应商是否已有历史入库单、当前推荐仓库和推荐库位。
  2. 新建入库单批量添加明细时,优先使用后端返回的推荐仓库和推荐库位;没有历史推荐时再使用供应商首选仓库或默认仓库。
  3. 新建入库单保存时,会将本次实际选择的仓库写回供应商首选仓库,后续该供应商入库单会继续推荐该仓库。
  4. 若供应商已有历史入库单,且本次选择的仓库和推荐仓库不同,保存前提示“该供应商的货物已存放在某个仓库,是否确定更改以后的存放位置”;若该供应商从未新建过入库单,则首次另选仓库不会提醒。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仍有既有第三方 @vueuse/core 注释警告和 chunk 体积提示,不影响构建结果。
  • 已重启后端,并通过 /api/inbound/supplier-storage/{supplierId} 抽查有历史入库单和无历史入库单供应商,hasInboundOrders 与推荐仓库返回正常。

2026-06-25 入库单删除保护与首次仓库推荐说明

检查结果

  1. RK20260611153059 状态为部分入库,是因为计划入库 PT001 100,实际入库 50;该 50 已被出库单 OUT1781575388968 使用。
  2. RK20260611164232 状态为部分入库,是因为计划入库 PT001 50、PT002 20,实际只有 PT002 入库 20;其中 10 已被出库单 OUT1781579161848 使用。
  3. 这两张入库单不能直接删除,否则会留下关联出库单和出库流水,破坏库存对应关系。

修改内容

  1. 入库单删除接口新增保护:若入库看板已出库或被出库看板引用,则阻止直接删除,并提示先处理关联出库单和库存流水。
  2. 新建入库单界面补充供应商仓库推荐提示:供应商从未建过入库单时也会推荐一个仓库,但本次可直接改选,保存后作为以后首选仓库。
  3. 批量添加明细页顶部显示本次实际推荐仓库,而不是只显示供应商表中的历史首选仓库。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仍有既有第三方 @vueuse/core 注释警告和 chunk 体积提示,不影响构建结果。
  • 已重启后端,调用删除 RK20260611153059 对应接口返回保护提示,单据仍保留。

2026-06-25 入库批量仓库库位选择与旧异常单据清理

修改内容

  1. 新建入库单的批量添加明细页新增批量设置仓库/库位工具栏,可勾选多条零件后统一选择仓库和库位,并应用到选中明细。
  2. 入库单删除接口保留关联出库保护,避免误删仍有关联出库链路的正常业务单据。

数据清理

  1. 已备份数据库:backend/data/wmsdb.mv.db.bak-20260625-100731-before-delete-rk-old
  2. 已删除异常入库单 RK20260611153059RK20260611164232 及其入库明细。
  3. 已同步删除相关入库看板 KB1781163059138-33KB1781167352420-176AE5KB1781167793791-B313F3
  4. 已同步删除相关出库单 OUT1781575388968OUT1781579161848、出库看板 OKB1781575388998474OKB1781579161873975 及相关库存流水。

验证

  • 目标入库单、入库看板、出库单、出库看板、库存流水查询剩余数量均为 0。
  • 按零件对账:PT001=345PT002=20PT003=20PT004=100PT005=50,库存流水与当前在库看板全部一致。
  • 按库位对账差异均为 0。
  • 后端执行 mvn -q -DskipTests package 通过;前端执行 npm run build 通过。
  • 已重启后端,并通过库存接口确认两张入库单已删除、库存数量正常。

2026-06-25 看板管理自动同步

修改内容

  1. 看板管理页面在 KeepAlive 缓存下重新激活时会立即同步看板列表,不再依赖浏览器整页刷新。
  2. 页面停留期间每 2.5 秒静默同步一次 /api/kanban/all,新生成的入库、出库、转包看板会自动出现在看板管理列表。
  3. 扫码入库、出库、转包、封存、解封等状态变化会通过自动同步刷新到看板管理列表;窗口重新聚焦时也会立即同步一次。
  4. 手动“查询”仍会重置到第一页;自动同步会保留当前分页和选中项,界面不再显示“立即同步”和“自动同步中”。

验证

  • 前端执行 npm run build 通过,仍有既有第三方 @vueuse/core 注释警告和 chunk 体积提示,不影响构建结果。
  • 当前环境未暴露内置浏览器插件所需执行工具,未做页面点击验证。

2026-06-24 手持转包撤销与页面状态保留

修改内容

  1. 手持转包生成的未完成转包单不再出现在转包单管理界面,避免在管理界面二次执行导致重复扣减和库存不足。
  2. 新增手持转包待处理单接口,手持转包页会重新加载未完成的转包看板,切到看板管理再返回不会丢失本次生成的转包单状态。
  3. 新增未扫描前撤销手持转包功能,撤销时删除未扫描的转包看板,并恢复来源入库/库存/出库看板的数量和状态。
  4. 手持转包扣减流水改为关联转包单号,撤销时可准确回滚;同时兼容历史 HAND_REPACK 流水清理。
  5. 主布局路由页面加入 KeepAlive,切换菜单时保留页面已输入内容和表格状态。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。
  • 已重启后端,接口验证手持待处理单和来源看板查询均返回正常。

2026-06-25 库存追溯关联出库看板

修改内容

  1. 修复普通库存看板追溯只查询同号库存流水的问题,改为同时反查以该看板为来源的出库看板、转包看板和相关库存流水。
  2. 带单出库后续生成的库存流水改为记录被扣减的来源库存看板号,便于按库存看板准确追溯。
  3. 对历史已生成的出库流水增加兼容:旧流水如果只记录出库看板号,会按出库看板来源和库位匹配到对应来源看板。
  4. 库存追溯页面新增“库存看板状态”和“出库看板”类型显示,并增加“当前状态”列,避免只看到入库流水时误判状态。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。
  • 已用 KB1781163074786-33 验证:追溯结果包含入库 50、当前库存看板状态已出库/数量 40、关联出库看板和对应出库 40。

2026-06-25 看板追溯改为看板关系视图

修改内容

  1. 看板追溯从“库存流水 + 看板状态”混合列表改为纯看板关系列表。
  2. 查询普通库存看板时,只返回该库存看板本身、以它为来源的出库看板、相关转包看板。
  3. 查询转包看板时,返回转包看板本身及来源/目标相关看板。
  4. 每条看板记录的数量使用该看板自身数量,不再把库存流水数量混在看板列表中。
  5. 后端增加 typeLabel 中文类型,前端优先显示中文类型,避免 STOCK_KANBANOUTBOUND_KANBAN 暴露在界面上。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。
  • 已用 KB1781163074786-33 验证:结果只包含库存看板 KB1781163074786-33 数量 40 和相关出库看板 OKB1782122945796780 数量 50。

2026-06-25 看板追溯数量口径修正

修改内容

  1. 看板追溯进一步改为只显示相关看板,不再显示入库、出库、转包库存流水行。
  2. 每条记录的数量固定使用该看板自身数量,例如库存看板显示库存看板当前数量,出库看板显示出库看板数量。
  3. 后端为看板类型返回中文 typeLabel,前端优先显示中文类型,避免界面出现 STOCK_KANBANOUTBOUND_KANBAN 等英文枚举。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。
  • 已用 KB1781163074786-33 验证:结果只返回库存看板 KB1781163074786-33 和关联出库看板 OKB1782122945796780,数量分别为各自看板数量。

2026-06-25 混乱看板链路数据清理

清理内容

  1. 删除库存看板 KB1781163074786-33
  2. 删除关联库存看板 KB1781167352407-D7545B
  3. 删除混合关联的出库看板 OKB1782122945796780
  4. 删除对应出库单 OUT1782122945796 及其出库明细。
  5. 删除相关库存流水:两条入库流水、两条出库流水、一条历史 HAND_REPACK 转包出库孤儿流水。
  6. 将入库单 RK20260611153059 的 PT001 实际入库数回退为 50,状态改为 PARTIAL
  7. 将入库单 RK20260611164232 的 PT001 实际入库数回退为 0,状态改为 PARTIAL

验证

  • 数据库复查:上述两个库存看板、一个出库看板、一个出库单、相关库存流水均为 0。
  • 接口复查:看板管理和库存追溯均查不到 KB1781163074786-33KB1781167352407-D7545BOKB1782122945796780

2026-06-24 手持转包流程重构

修改内容

  1. 手持转包不再直接生成库存看板,改为先生成 ZB... 转包单和按器具容量拆分的 RKB... 转包看板。
  2. 新增可转包来源看板查询接口,支持未入库看板、已入库库存看板、未出库出库看板作为来源。
  3. 新增转包看板扫码接口:扫描转包看板后,按来源类型记录为转包入库或转包出库。
  4. 未入库看板转包时,有余量则原看板数量减少且仍可继续入库,无余量则原看板标记为已转包。
  5. 已入库库存看板转包时,先扣减来源库存并记录转包出库流水,再生成转包单和转包看板,后续扫描转包看板生成转包入库库存看板。
  6. 未出库出库看板转包时,有余量则来源出库看板数量减少,无余量则来源出库看板标记为已转包,扫描转包看板后记录转包出库。
  7. 转包单、转包明细和转包看板增加来源看板号/来源业务类型字段,用于从转包单追溯到原看板。
  8. 桌面端手持转包页和手机端转包页改为“两步流程”:先扫来源生成转包单,再扫转包看板完成记录。
  9. 看板管理补充 REPACK_INBOUNDREPACK_OUTBOUND 状态中文显示。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仅有第三方库 pure annotation 和 chunk size 的非阻塞警告。

2026-06-24 转包看板快捷记录与追溯

修改内容

  1. 桌面端手持转包页新增摄像头扫描来源看板、摄像头扫描转包看板。
  2. 桌面端手持转包页本次生成的转包看板列表新增“直接记录”和“一键记录全部”,不用逐张手动输入。
  3. 手机端转包页同步新增生成后直接记录、一键记录功能,保留摄像头扫描。
  4. 手机端转包单看板列表新增单张记录和一键记录待记录看板。
  5. 库存追溯支持输入 RKB... 转包看板号,展示转包看板、来源看板、目标看板和同一转包单相关流水。
  6. 库存追溯页面新增来源看板、目标看板列,并补充“转包看板”类型显示。

验证

  • 后端执行 mvn -q -DskipTests package 通过,并重启 8080 服务。
  • 前端执行 npm run build 通过,仅有第三方库 pure annotation 和 chunk size 的非阻塞警告。
  • 登录后调用 /api/inventory/kanban-trace/RKB_NOT_EXISTS 返回正常空列表,确认追溯接口可访问。

2026-06-24 手持转包页面打开失败修复

修改内容

  1. 手持转包桌面端和手机端页面初始化增加容错,器具列表或转包记录接口异常时不再阻断页面打开。
  2. 重启后端服务,使新增的转包来源查询、转包看板扫码接口生效。
  3. 验证 /api/kanban/repack-source/{kanbanNo}/api/baseinfo/containers/api/kanban/repack-records 接口可访问。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仅有第三方库 pure annotation 和 chunk size 的非阻塞警告。
  • 前端执行 npm run build 通过。

2026-06-24 转包器具容量与手机端单据同步

修改内容

  1. 新建转包单时,后端按目标器具容量自动拆分转包明细,保证单张转包看板数量不超过单个器具容量。
  2. 转包单保存前增加器具容量提醒,提示数量、器具容量、需要几个器具,以及最后一个是否装满。
  3. 手机端新增入库单、出库单、转包单页面,可以查看桌面端创建的单据和关联看板,并直接执行入库、出库、转包。
  4. 手机端首页新增“入库单 / 出库单 / 转包单”入口,同时保留扫码入库、带单出库、不带单出库、手持转包、退库、封存解封入口。
  5. 路由文件和新增手机端页面统一整理为正常中文标题,避免页面标题乱码。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仅有第三方库 pure annotation 和 chunk size 的非阻塞警告。

2026-06-24 手持转包看板单据号修正

修改内容

  1. 修正手持转包生成的新库存看板沿用来源入库单号的问题。
  2. 手持转包生成的新看板不再写入 orderNo,来源关系通过 sourceKanbanNo 保留。
  3. 手持转包入库库存流水的关联单号改为 HAND_REPACK,避免和入库单号 RK... 混淆。

验证

  • 后端执行 mvn -q -DskipTests package 通过。

2026-06-24 手持转包历史数据清理与数据体检

修改内容

  1. 清理历史手持转包新看板误挂入库单号的数据,共清理 3 张库存看板的 RK... 单据号。
  2. 清理历史转包库存流水误挂入库单号的数据,共将 2 条 REPACK_INBOUND / REPACK_OUTBOUND 流水关联单号改为 HAND_REPACK
  3. 后端手持转包逻辑同步修正,后续手持转包出库、入库流水均使用 HAND_REPACK,不再沿用来源入库单号。
  4. 检查转包看板/转包单编号、库存看板数量、转包记录来源/目标看板、出入库/转包明细关联、基础资料外键、重复编码和无效数量,未发现其他明显数据错误。

验证

  • 后端执行 mvn -q -DskipTests package 通过。

2026-06-24 手机端单据入口归类

修改内容

  1. 手机端首页取消独立的“入库单 / 出库单 / 转包单”入口,恢复为按作业功能展示。
  2. 入库单入口移动到手机端扫码入库页面顶部。
  3. 出库单入口移动到手机端带单出库页面顶部。
  4. 转包单入口移动到手机端转包页面顶部。

验证

  • 前端执行 npm run build 通过,仅有第三方库 pure annotation 和 chunk size 的非阻塞警告。
  • 实际接口验证:登录、角色菜单、封存/解封、FIFO 拦截、用户/角色 CRUD 均通过。
  • 浏览器验证:看板二维码、出库、转包、库存监控、用户和角色页面正常渲染,无控制台错误。

2026-06-16 转包单数量输入框

  • 调整新建转包单明细行的数量输入框宽度,并允许明细行在空间不足时换行,避免数字显示不完整。
  • 验证:前端执行 npm run build 通过。

2026-06-16 出库历史与基础数据绑定完善

  • 出库单创建支持按 FIFO 从多张库存看板拆分占用库存,并为每个来源库存看板生成独立出库看板。
  • 扫码出库的 FIFO 校验会排除已被其他未完成出库单预占的库存看板,避免错误拦截;出库后继续写入库存流水并更新库存看板、出库看板、出库单状态。
  • 新增出库历史接口和出库单管理页历史列表,支持按出库单号、客户、供应商、出库类型等条件查看已出库记录。
  • 入库看板生成按器具包装容量自动拆分;入库单保存时后端根据供应商、零件、仓库、库位、器具 ID 回填并校验基础数据绑定。
  • 入库单页面器具下拉按当前供应商和零件过滤,并显示器具容量,避免选到不适配的包装器具。
  • 验证:后端执行 mvn -q -DskipTests package 通过;前端执行 npm run build 通过。

2026-06-16 看板管理独立与转包专属看板

  • 将看板管理从入库管理中独立为单独菜单,新增 kanban.manage 权限,并兼容旧的 /inbound/kanban 路由跳转。
  • 新增统一看板列表接口,汇总入库/库存看板、出库看板、转包专属看板;前端看板管理页展示看板类型、单据号、状态,并支持打印和导出。
  • 新增转包专属看板 RKB...,创建转包单时自动生成,执行转包后更新为已转包并关联新库存看板。
  • 转包单管理页显示并可打印转包专属看板,新增删除转包单功能,删除时同步删除专属转包看板。
  • 验证:后端执行 mvn -q -DskipTests package 通过;前端执行 npm run build 通过。

2026-06-16 转包执行入口修复

  • 转包单管理列表新增“执行转包”按钮,待转包单可直接执行。
  • 后端补充 /api/repack/order/{id}/execute 接口,执行后生成转包后的库存看板,更新转包专属看板为已转包,并将转包单状态置为已完成。
  • 验证:后端执行 mvn -q -DskipTests package 通过;前端执行 npm run build 通过。

2026-06-16 看板管理分页

  • 看板管理列表移除二维码列,二维码仅在打印看板时生成。
  • 看板管理列表新增前端分页,支持 10、20、50、100 条每页。
  • 验证:前端执行 npm run build 通过。

2026-06-16 13:00:39 - 出库单功能改造

改造内容

  1. 出库单前端重写:参考入库单模式,改为供应商筛选+批量选择零件+看板弹窗

    • 选择供应商后,自动过滤该供应商的零件列表(带勾选框)
    • 支持批量文本导入物料
    • 每条明细可设置仓库、库位
    • 看板通过独立弹窗查看(不再内嵌在表格中)
    • 看板弹窗支持批量打印
    • 新增删除按钮
  2. 后端OutboundController简化

    • 创建出库单不再依赖库存看板,直接生成出库看板
    • 新增deleteOrder端点(删除出库单及相关看板/库存记录)
    • 查询接口参数改为 supplier/status/orderNo
  3. OutboundOrderItem实体扩展:新增warehouseId、locationId字段

测试流程

  1. 登录 admin/admin123
  2. 先到入库管理新建入库单并扫码入库(产生库存)
  3. 再到出库管理 → 出库单管理 → 新建出库单
  4. 选择客户+供应商 → 勾选零件 → 设置数量和仓库库位 → 保存
  5. 点击"看板"查看生成的出库看板
  6. 点击"打印"进行批量打印

2026-06-16 13:15:30 - 转包管理界面简化

修改内容

  1. RepackOrderItem实体简化:移除sourceKanbanNo、sourceContainerCode等库存绑定字段,改为planQty/actualQty/containerCode等简洁字段
  2. RepackOrderController简化:创建转包单不再绑定入库看板,直接为每条明细生成转包看板;移除execute执行转包逻辑
  3. RepackManage.vue重写:搜索栏(状态/单号/供应商)、列表(单号/供应商/状态/操作)、新建(供应商筛选+批量勾选+文本导入)、看板弹窗(独立对话框+批量打印)

2026-06-16 统一建单组件、库存总报表与扫码出库简化

修改内容

  1. 新增统一明细组件 OrderItemBuilder.vue,新建入库单、出库单、转包单共用同一套供应商零件批量添加和明细编辑逻辑。
  2. 新建入库单、出库单、转包单选择供应商后,明细列表默认保持为空;点击“批量添加”后只展示当前供应商的零件,勾选确认后回到原建单界面生成明细。
  3. 明细自动带出首选仓库、库位和匹配器具;器具下拉展示容量,并根据填写数量提示器具数和最后一个器具是否未装满。
  4. 库存管理新增“总库存报表”,展示各零件总库存、低储阈值、高储阈值和库存状态,并将缺货/低储数据排在最前。
  5. 扫码出库页面简化为和扫码入库一致的操作组件:支持摄像头扫码,也支持手工填写出库看板号,其余客户条码、订单选择等输入移除。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。

2026-06-22 出库客户、转包执行与库存追溯修正

修改内容

  1. 新建出库单恢复客户必选,下单时仍需选择客户、供应商和出库类型。
  2. 出库批量添加页和建单明细预览中,库存位置改为“仓库”“库位”两列分开展示。
  3. 无库存零件的出库数量输入框禁用,不能继续填写数量;库存不足仍在确认添加和后端保存时拦截。
  4. 当前数据库中“广州电装有限公司”的异常转包单及关联转包看板已删除;启动初始化中也加入了幂等清理,避免残留。
  5. 转包单新增“向下转包/向上转包”和“允许余量”属性。
  6. 新增“手持转包”页面,支持扫描/输入来源库存看板、选择目标器具、填写转包数量并执行转包;数量小于来源数量时保留来源余量。
  7. 转包执行和手持转包统一写入“转包出库/转包入库”库存流水,净库存不变,避免旧逻辑直接生成库存看板导致库存口径不一致。
  8. 库存追溯的零件编号改为下拉选择,支持输入过滤。
  9. 库存追溯类型显示补充“转包出库”“转包入库”。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。
  • 前端构建仍有第三方依赖注释警告和 chunk 大小提示,不影响打包结果。

2026-06-16 独立批量明细页与供应商首选仓库

修改内容

  1. 新增独立批量明细页面 OrderItemBatchPicker.vue,新建入库单、出库单、转包单从共用明细组件跳转进入该页面。
  2. 批量明细页面不再只选零件,而是在同一大页面内完成零件勾选、数量、仓库、库位、器具选择,并显示器具容量和未装满提示。
  3. 从建单界面跳转批量明细页前会暂存草稿,确认后自动返回原建单界面并恢复供应商、单据表头和明细。
  4. 供应商新增首选仓库属性,供应商管理支持维护首选仓库;批量明细页默认使用该供应商对应仓库作为首选仓库。
  5. 初始化数据改为按编码幂等补齐,新增多个供应商及其零件,零件统一进入零件管理;已有数据库启动时不会重复插入。
  6. 零件管理搜索改为按零件编号、零件名、供应商独立筛选。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。

2026-06-16 批量删除、分页与页面拆分

修改内容

  1. 主数据初始化继续扩充,每个供应商新增更多零件;供应商首选仓库仅作为默认推荐,不限制多个供应商共用同一个仓库。
  2. 入库单、出库单、转包单、供应商、客户、零件、仓库、库位、器具、用户、角色等带删除能力的列表新增批量删除。
  3. 入库单、出库单、转包单、看板、库存监控、总库存报表、供应商、客户、零件、仓库、库位、器具、用户、角色等数据量较大的列表新增分页。
  4. 仓库和库位拆成独立页面:仓库管理只维护仓库,库位管理独立维护库位并保留批量新增库位。
  5. 库存监控和总库存报表拆成独立页面,避免不同类型库存记录挤在同一个界面。
  6. 动态菜单、前端路由和角色权限补充“库位管理”“总库存报表”入口。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。

2026-06-16 菜单滚动修复

修改内容

  1. 主布局侧边栏改为纵向弹性布局,顶部 logo 固定高度,菜单区域独立滚动。
  2. 修复页面缩放 100% 时底部菜单被裁切、无法下滑查看的问题。

验证

  • 前端执行 npm run build 通过。

2026-06-22 扫码出库历史

修改内容

  1. 扫码出库界面新增“最近出库记录”列表,展示出库看板号、出库单号、零件、供应商、仓库、库位、数量、操作人和出库时间。
  2. 页面进入时自动加载最近出库记录,确认扫码出库成功后自动刷新历史。
  3. 历史列表复用已有 /api/outbound/recent 接口,保持和扫码入库页“最近入库记录”的使用方式一致。

验证

  • 前端执行 npm run build 通过。

2026-06-22 单张看板封存解封与手机端

修改内容

  1. 扫码入库界面的单张看板详情新增封存、解封按钮,可直接对当前查询出的看板操作。
  2. 入库单关联看板弹窗新增单张看板封存、解封入口,操作后自动刷新关联看板列表。
  3. 新增手机端入口 /mobile,提供手机首页、手机扫码入库、手机扫码出库、手机看板查询。
  4. 手机扫码入库和扫码出库均支持摄像头扫码和手工输入看板号。
  5. 手机看板查询支持单张入库/库存看板查询,并可执行封存、解封操作。
  6. 桌面首页新增“手机端”快捷入口。

验证

  • 前端执行 npm run build 通过。

2026-06-22 出库库存预警、FIFO 扣减与转包结余

修改内容

  1. 新建出库单改为只选择供应商和出库类型,取消建单时必须选择客户的限制。
  2. 新建出库单保存前,后端按零件汇总校验可用库存;无库存或库存不足会直接返回明确提示,不再等到扫码出库才提醒。
  3. 出库扫码修复为按库存看板入库时间 FIFO 连续扣减多张看板,解决总库存足够但第一张看板数量不足时误报库存不足的问题;库存流水按实际扣减的来源看板逐条记录,避免跨库位出库时库存监控漏扣。
  4. 新增出库可用库存接口,批量添加出库明细时展示可用库存、仓库/库位存储位置和库存提示。
  5. 出库批量添加页面不再要求选择仓库、库位、器具;仓库和库位只作为零件当前存储位置展示。
  6. 新增“转包结余”页面,支持按转包单号、零件编号搜索,列表展示转包单号、零件编号、计划数量、完成数量和转包结余。
  7. 仓储作业菜单新增“转包结余”入口,并复用转包作业权限。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。

2026-06-22 转包库存校验、出库双模式、手机端补齐

修改内容

  1. 新建转包单时增加库存校验,提交前先检查所选零件的可用库存,避免库存不足时先建单。
  2. 出库功能增加带单和不带单两种模式,带单沿用出库看板流程,不带单可直接扫描库存看板出库。
  3. 手机端新增封存/解封、转包、退库、带单出库入口,并提供独立页面。
  4. 新增退库接口,支持按数量把已出库看板退回库存,并记录库存流水。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。

2026-06-22 出库功能拆分与手机扫码封存

修改内容

  1. 桌面端出库扫码拆分为两个独立页面:带单出库 /outbound/scan 和不带单出库 /outbound/direct-scan
  2. 仓储作业菜单新增“不带单出库”,并复用出库扫码权限。
  3. 手机端出库拆分为“带单出库”和“不带单出库”两个入口,避免在同一页面切换模式。
  4. 手机端封存/解封页面新增摄像头扫码,可直接扫描库存看板后封存或解封。
  5. 首页“扫码入库”快捷入口改用摄像头风格图标。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过。

2026-06-24 转包看板入库逻辑清理

修改内容

  1. 转包看板扫描/执行后不再额外生成普通入库看板,直接把转包看板标记为 REPACK_INBOUND
  2. 转包入库流水改为记录转包看板号,库存追溯可直接追到对应 RKB 看板。
  3. 手持转包旧入口同步改为复用转包单/转包看板流程,避免误调用旧逻辑再次生成普通看板。
  4. 清理历史误生成的普通入库看板数据,已将相关转包入库流水迁回转包看板号。

验证

  • 后端执行 mvn -q -DskipTests package 通过。

2026-06-25 批量出入库、转包供应商修复与菜单优化

修改内容

  1. 扫码入库、带单出库、不带单出库均新增批量操作弹窗,支持勾选多条看板并逐行选择数量后一键执行。
  2. 转包作业新增扫描看板后可选择仓库、库位、器具,确保转包目标信息完整。
  3. 转包单管理界面移除"转包方向"列,避免显示问号。
  4. 菜单标题全面更新:入库、出库、转包相关标签改为更清晰的描述。
  5. 新增出库待处理看板接口 /outbound/pending,支持前端获取未出库看板列表。
  6. 新增通用转包扫描接口 universalRepackScan,支持扫描入库/出库/转包看板后生成对应转包单和转包看板。
  7. InboundOrderRepository 新增 findByOrderNo 方法,用于查询入库单获取供应商等信息。
  8. MenuController 使用 Unicode 转义处理中文标题,避免终端乱码。
  9. 修复 RepackOrderController 编译错误:
    • executeRepackTransfer 方法中将 inboundOrderRepo.findByOrderNo 改回 orderRepo.findByOrderNo,因此处查询的是转包单而非入库单。
    • createRepackFromKanban 方法中供应商名优先取看板自身 supplierName,若为空则通过 inboundOrderRepo.findByOrderNo 查询原入库单补全供应商,确保转包单管理界面正确显示供应商。
  10. 转包单管理界面:扫描其他看板生成的转包单供应商与原看板保持一致,正确记录在列表中。

涉及文件

  • frontend/src/views/inbound/KanbanScan.vue
  • frontend/src/views/outbound/OutboundScan.vue
  • frontend/src/views/outbound/DirectOutboundScan.vue
  • frontend/src/views/operations/RepackManage.vue
  • frontend/src/views/operations/RepackScan.vue
  • frontend/src/router/index.js
  • frontend/src/api/outbound.js
  • frontend/src/api/operations.js
  • backend/.../repository/InboundOrderRepository.java
  • backend/.../controller/RepackOrderController.java
  • backend/.../controller/OutboundController.java
  • backend/.../controller/MenuController.java

验证

  • 后端执行 mvn compile 通过。

2026-06-25 转包规则基础数据

  1. 新增转包规则基础数据 repack_rule,按供应商+零件维护原包装容量、转包容量、推荐器具类型和备注。
  2. 基础信息菜单新增“转包规则”页面,支持按供应商、零件编号、零件名称、器具类型搜索,支持新增、编辑、删除、批量删除和分页。
  3. 新建转包单批量添加明细时,会自动读取该供应商零件的转包规则,带出默认转包数量、转包容量和推荐器具类型;用户仍可在明细中调整数量、仓库、库位、器具和转包容量。
  4. 后端创建转包单时也会按转包规则兜底补齐容量信息,并优先用转包容量拆分转包看板,避免单张转包看板数量超过维护的转包容器容量。
  5. 手持转包在未手动选择目标器具时,优先按转包规则推荐目标器具类型和容量;没有维护规则时才沿用来源器具。
  6. 初始化演示数据补充若干条转包规则,便于直接演示“一箱100个转包为5个容量20容器”的场景。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过;仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。

2026-06-25 转包库存口径与总库存筛选

  1. 修复新建转包单库存校验只统计普通 SCANNED 入库看板的问题,现已把 REPACK_INBOUND 转包入库看板也纳入可转包库存。
  2. 执行转包单时支持从普通库存看板和转包入库看板中按时间顺序扣减,转包入库看板被扣完后会标记为已转包,部分扣减则保留剩余数量。
  3. 总库存报表改为按当前有效库存看板汇总,避免历史库存流水正负号不一致导致库存被算高。
  4. 库存追溯的入库、出库合计改为按绝对值统计,避免负数出库流水被再次相减。
  5. 总库存报表新增筛选栏,可按库存状态(缺货、低储、高储、正常)、零件编号、供应商筛选,并保留分页。
  6. 已用 PT005 车身控制模块临时创建数量 100 的转包单验证库存校验通过,随后删除测试单和关联转包看板。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过;仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。

2026-06-25 转包规则并入零件管理

  1. 将原包装容量、转包容量、转包器具类型并入零件基础资料,作为 Part 的直接属性维护。
  2. 零件管理列表和新增/编辑表单新增“原包装容量 / 转包容量 / 转包器具类型”字段,转包器具类型复用现有器具类型并允许手动输入。
  3. 新建转包单批量添加明细时不再请求独立转包规则接口,直接读取所选零件的转包属性,自动带出默认转包数量、转包容量和推荐器具类型。
  4. 后端创建转包单、手持转包时也改为读取零件属性进行默认推荐和看板拆分。
  5. 移除前端“转包规则”独立页面、路由、菜单和角色权限项,避免基础数据重复维护。
  6. 保留旧 repack_rule 表和仓库类仅用于启动时把历史规则迁移到零件字段;后续用户统一在零件管理维护。

验证

  • 后端执行 mvn -q -DskipTests package 通过,并已重启。
  • 前端执行 npm run build 通过;仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。
  • 验证菜单不再包含 /baseinfo/repack-rule;PT001 历史转包规则已同步到零件字段。

2026-06-25 零件转包容量属性补齐

  1. 为所有零件补齐 originalPackageQtytargetPackageQtyrepackContainerType,启动初始化会自动迁移旧转包规则并给缺失零件设置默认原包装容量、转包容量和转包器具类型。
  2. 零件管理新增/编辑表单要求填写原包装容量、转包容量、转包器具类型,列表同步展示这些字段。
  3. 零件文本导入格式改为:零件编号、零件名称、规格、单位、供应商、低储、高储、客户条码、原包装容量、转包容量、转包器具类型。
  4. 零件 Excel 导入识别新增字段表头,支持“原包装容量 / 转包容量 / 转包器具类型”等中文表头和对应英文/拼音字段。
  5. 后端新增、编辑、批量导入零件统一校验:原包装容量和转包容量必须大于 0,转包容量不能大于原包装容量,转包器具类型不能为空。
  6. 初始化新增 RPK010/RPK020/RPK030/RPK050/RPK100 等转包器具,覆盖 10、20、30、50、100 的常用转包容量。

验证

  • 后端执行 mvn -q -DskipTests package 通过,并已重启。
  • 前端执行 npm run build 通过;仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。
  • 接口验证当前 66 个零件的新属性缺失数为 0,转包器具种子数据 5 条均存在,重复零件编号会返回 400 拦截。

2026-06-28 基础资料批量导入、仓库容量、转包预校验与数据清理

  1. 客户、供应商、器具、仓库管理增加批量导入能力,支持粘贴文本和识别 Excel;前端页面补充中文导入说明,后端新增对应批量保存接口并做编号/名称等基础校验。
  2. 仓库总容量改为仓库自身属性,列表同时展示库位容量合计、剩余容量和是否超容;新增/批量新增库位时会按仓库容量进行超容警告。
  3. 新建转包单的批量添加页面改为提前读取可转包库存并提示库存是否充足;转包器具推荐优先匹配零件维护的转包容量,避免首选器具容量与转包容量不一致。
  4. 入库单、出库单、转包单共用的明细批量添加组件整理为中文界面,支持批量选择仓库/库位/器具;入库单管理页同步整理乱码,并把关联看板中的 REPACKED 状态显示为“已转包”。
  5. 手持转包作业增加未转包看板批量转包,并把来源类型显示为中文;系统默认空数据、选择器等 Element Plus 文案切换为中文。
  6. 清理乱数据:删除看板 RKB1782368704819302、来源入库看板 KB1782311114980-9C5B43 及其关联转包单、转包看板、转包明细和库存流水,保留同入库单下其他正常看板。
  7. 验证:后端 mvn -q -DskipTests package 通过;前端 npm run build 通过;接口验证仓库容量字段、转包库存预检查接口正常,已清理看板查询返回不存在。

2026-06-28 仓库剩余容量、转包状态与看板筛选修复

  1. 仓库管理的“剩余容量”改为仓库总容量减实际库存数量;“库位容量合计”仍保留用于库位规划和超容量警告。
  2. 修复转包单带结余看板时状态停留在 PARTIAL 的问题:转包单状态改为按关联转包看板是否仍有待扫描看板判断,全部处理后为“已完成”。
  3. 将转包单 ZB1782377323211 状态修正为 COMPLETED,该单数据为带结余场景,不属于需要删除的乱数据。
  4. 重写看板管理页面中文文案,状态显示不再透出英文枚举,并新增“待出库”状态筛选。
  5. 重写基础资料后端控制器,清理历史乱码文案,保留供应商、客户、零件、仓库、库位、器具的原有增删改查和批量导入接口。
  6. 验证:后端 mvn -q -DskipTests package 通过;前端 npm run build 通过;接口确认仓库剩余容量、待出库筛选、ZB1782377323211 状态均正常。

2026-06-28 AI仓库管理员

  1. 新增内置角色 AI_ADMIN 和默认账号 ai_admin / ai123456,拥有全部仓库业务和系统维护权限。
  2. 新增独立菜单“AI仓库管理员”和页面 /ai/admin,提供库存摘要、异常数据监控、常用业务入口和问答查询。
  3. 新增后端接口 /api/ai-admin/summary/api/ai-admin/anomalies/api/ai-admin/ask,支持查询总库存、零件库存、高低储/缺货、看板追溯和异常数据。
  4. 新增定时异常检查,每 5 分钟刷新库存告警、仓库超容、零件转包资料缺失、转包单/看板状态不一致等监控数据。
  5. 整理角色权限页面、前端路由标题和全局请求错误提示为正常中文,并新增 ai.admin 权限项。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。
  • 已重启后端并验证 ai_admin 登录、/api/menus 包含 /ai/admin/api/ai-admin/summary/api/ai-admin/ask 正常返回。

2026-06-28 可执行型AI仓库管理员与AI预警

  1. 将 AI 仓库管理员从“功能入口集合”升级为对话式工作台,支持一句话生成可执行计划,用户确认后再执行写操作。
  2. 新增后端动作接口:
    • POST /api/ai-admin/chat:自然语言对话、查询或生成执行计划。
    • POST /api/ai-admin/execute:确认执行 AI 计划。
    • GET /api/ai-admin/forecast:AI 预警列表。
    • GET /api/ai-admin/model-status:大模型接入状态。
  3. AI 执行动作复用现有业务控制器,不绕过原有入库、出库、转包和基础资料校验;支持扫码入库、带单出库、不带单出库、转包扫描、执行转包单、新建入库/出库/转包单,以及部分基础资料新增、编辑、删除。
  4. 写操作统一生成执行计划,展示动作、参数、风险等级、缺失信息和确认按钮;缺少供应商、客户、零件、数量等关键信息时不会执行。
  5. 大模型接入改为可配置模式:通过 WMS_AI_API_URLWMS_AI_API_KEYWMS_AI_MODEL 接入兼容 OpenAI Chat Completions 的免费模型服务;未配置时自动使用本地规则解析。
  6. AI 预警重点改为未来缺货和呆滞/积压识别:基于当前有效库存、近30天出库/转包出库流水估算日均消耗和预计缺货天数;基于近60天无出库和高储低消耗识别呆滞或积压风险。未新增零件或批次字段。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。
  • 已重启后端并验证 ai_admin 登录、模型状态、AI预警、普通问答、自然语言计划生成;使用假看板执行计划会被现有业务校验拦截,未写入数据。

2026-06-28 DeepSeek 默认接入配置

  1. 新增 backend/src/main/resources/application.properties,写入 DeepSeek Chat Completions 地址和默认模型 deepseek-v4-flash,使普通启动后端时默认使用 DeepSeek。
  2. AiWarehouseActionController 改为同时读取环境变量、Spring 配置和 JVM 参数;优先级为环境变量 > 项目配置 > JVM 参数,方便后续临时切换模型。
  3. 保留 application.yml 中原有数据库配置,新增 application.properties 只维护 AI 配置,避免改变 H2 数据库启动行为。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 不额外传环境变量重启后端,/api/ai-admin/model-status 返回 enabled=true,模型为 deepseek-v4-flash

2026-06-28 用户级AI模型配置

  1. 移除项目配置文件中的明文 DeepSeek API Key,仅保留默认 API 地址和默认模型 deepseek-v4-flash
  2. 新增 ai_user_config 表,用于按登录用户名保存每个用户自己的 AI API 地址、模型和 API Key。
  3. 新增接口:
    • GET /api/ai-admin/model-config:读取当前用户 AI 配置,API Key 只返回脱敏状态。
    • POST /api/ai-admin/model-config:保存或清除当前用户自己的 API Key。
  4. AI 调用优先读取当前登录用户的配置;若当前用户未配置 API Key,则退回本地规则解析。环境变量/JVM 参数仍保留为临时全局覆盖方式。
  5. 前端 AI 仓库管理员页面新增“AI配置”入口,可填写 DeepSeek API 地址、模型和 API Key,保存后该用户后续自动使用自己的配置。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。
  • 不使用环境变量重启后端,未配置用户返回本地规则;为 ai_admin 保存 API Key 后,/api/ai-admin/model-status 返回 enabled=truesource=user:ai_admin

2026-06-28 普通用户AI菜单权限修复

  1. 修复现有数据库中 USER 角色缺少 ai.admin 权限导致普通用户看不到“AI仓库管理员”菜单的问题。
  2. 启动初始化逻辑补充兜底方法,确保后续启动时 USER 角色会自动包含 kanban.manageinventory.reportai.admin
  3. 已直接更新当前 H2 数据库中的 USER 角色权限,普通用户无需等下次初始化。

验证

  • 使用 user / user123 登录后,请求 /api/menus 已包含 /ai/admin
  • 普通用户请求 /api/ai-admin/model-status 返回 200;未配置个人 API Key 时显示本地规则。
  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。

2026-06-28 首页AI管理员入口

  1. 首页快捷入口新增“AI仓库管理员”卡片,点击进入 /ai/admin
  2. 顺手整理首页标题、说明和快捷入口文案为正常中文。

验证

  • 前端执行 npm run build 通过,仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。

2026-06-28 AI单据类型误判修复

  1. 修复用户要求生成入库单时,DeepSeek 可能误判成出库单的问题。
  2. AI 计划生成新增“明确意图优先”逻辑:用户原话包含“新建/创建/生成入库单”时,直接锁定 CREATE_INBOUND_ORDER,不再先交给大模型判断;出库单、转包单、扫码入库/出库/转包同理。
  3. 大模型返回动作后新增本地归一化校验,原话明确的入库/出库/转包动作会覆盖模型误判。
  4. 执行计划新增一致性拦截:如果计划说明包含入库但动作是出库,或说明包含出库但动作是入库,会拒绝执行并要求重新生成计划。

验证

  • 使用“新建入库单 PT005 数量100”测试,返回动作固定为 CREATE_INBOUND_ORDER,不会生成出库计划。
  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过,仍有既有 @vueuse/core pure annotation 和 chunk size 构建警告。

2026-06-28 AI管理员入库计划预览与过程反馈修复

  1. 修复自然语言“新建某供应商某零件数量X的入库单”无法命中入库单计划的问题;现在只要同时包含“新建/创建/生成/添加”和“入库单/出库单/转包单”,即可锁定对应单据类型,避免大模型或本地规则误判。
  2. 修复入库单计划参数错误携带 outboundType=出库 的问题;出库类型现在只在新建出库单时出现。
  3. AI 新建入库/转包单时自动按供应商首选仓库、该仓库首个库位、供应商/零件/容量匹配的器具生成推荐明细;计划预览展示仓库、库位、器具、器具容量、需要几个器具以及是否装满。
  4. AI 执行入库/转包单时同步写入推荐的仓库、库位、器具和转包容量相关字段,避免预览和实际保存不一致。
  5. AI 管理员前端计划卡片改为中文表头,优先展示后端返回的中文预览字段,并新增与手动新建单据类似的明细表。
  6. AI 对话增加“思考中”和“执行中”的过程反馈,用户发送指令或确认执行后能看到当前处理阶段。
  7. 保留 AI 预警能力:库存风险仍通过当前库存、近30天出库消耗和近60天无出库记录分析未来缺货、呆滞和积压风险。

验证

  • 后端执行 mvn -q -DskipTests package 通过。
  • 前端执行 npm run build 通过;仍有既有的 @vueuse/core pure annotation 和 chunk size 构建警告。
  • 接口验证:“新建惠州住友线束公司仪表板线束数量200的入库单”返回 CREATE_INBOUND_ORDER,不再包含 outboundType,并返回仓库、库位、器具容量和装满提示。

2026-06-28 入库看板完成状态、AI执行跳登录与批量导入测试文件

  1. 入库单状态刷新逻辑改为按关联看板处理状态判断:入库看板被扫码入库、转包或后续出库后均视为已处理;同一入库单下没有待入库看板时状态为 COMPLETED,仍有待入库看板时才显示 PARTIAL
  2. 手持转包生成转包单、撤销手持转包、扫码入库生成结余看板等路径都会刷新来源入库单状态,避免入库单长期停留在“部分入库”。
  3. 入库单修改时保留已入库、已转包、已出库等已处理看板,不再把已转包看板当作普通未入库看板清理。
  4. 前端请求拦截器只在明确“未登录/Token过期/失效”的认证错误时跳转登录页;AI执行计划不存在、过期或业务执行失败时只提示错误并停留在当前页面。
  5. 新增批量导入测试数据文件,目录:outputs/batch-import-tests
    • 文本:客户、供应商、仓库、器具各 1 个 .txt,可直接复制到对应批量导入文本框。
    • Excel:客户、供应商、仓库、器具各 1 个 .xlsx,第一行即中文表头,可直接上传识别。

验证

  • 后端在停止旧运行进程后执行 mvn -q -DskipTests package 通过,并已重新启动。
  • 前端执行 npm run build 通过;仍有既有的 @vueuse/core pure annotation 和 chunk size 构建警告。
  • 接口验证:登录后请求 /api/ai-admin/execute 使用不存在的计划编号返回业务 code=400,不是认证 401,不会触发跳转登录。

2026-06-29 AI执行入库单与入库单完成状态修复

  1. 修复 AI 仓库管理员确认执行新建入库单时跳转登录页的问题:后端放行 /error,避免业务异常被 Spring Security 二次包装成“未登录或Token已过期”;前端请求拦截器仅在明确认证过期时跳登录。
  2. 修复 AI 执行新建入库单返回“执行失败:null”的问题:AI 组装入库/出库/转包单明细时改用可变列表,避免 JPA 持久化不可变 List.of 明细时抛空消息异常。
  3. AI 执行接口去掉外层大事务,保留各业务接口自身事务与校验,避免内部业务失败把整个 AI 执行提交阶段变成 500。
  4. AI 执行成功后的返回结果改为轻量摘要,只返回单据编号、状态、供应商、明细数量等关键信息,避免直接序列化 JPA 实体导致懒加载或循环引用风险。
  5. 入库单状态刷新逻辑统一:关联入库看板只要全部处于已入库、已转包或已出库等已处理状态,入库单状态自动改为 COMPLETED;仍有待入库看板时才保持 PARTIAL
  6. 已直接修复异常数据:RK20260625140241RK20260624222514 当前状态均已改为 COMPLETED,其关联看板状态分别为 SCANNED/REPACKED,符合“已处理完成”的判断。

验证

  • 后端执行 mvn -q -DskipTests package 通过,并已重新启动。
  • 接口验证:使用 user / user123 登录后,AI 生成“新建惠州住友线束公司仪表板线束数量1的入库单”计划,确认执行返回 code=200,成功生成入库单和 1 张看板;测试生成的 RK20260629135645 已通过删除接口清理。
  • 数据库验证:RK20260625140241RK20260624222514 查询状态均为 COMPLETED

2026-06-29 AI执行结果跳转入库单管理

  1. 核对当前数据:AI 生成的 RK20260629140234 已存在于 INBOUND_ORDER,并且两个入库看板均关联同一个 orderId/orderNo,后端实际已生成入库单和看板。
  2. 优化 AI 仓库管理员执行结果展示:当执行结果是入库单、出库单或转包单时,结果表会显示“已生成单据,并已自动生成关联看板”,并提供“查看入库单/出库单/转包单”按钮。
  3. 入库单管理页面支持通过路由参数 inboundOrderNo 自动筛选对应入库单;从 AI 执行结果点击“查看入库单”后,会直接进入入库单管理并定位到刚生成的单据。

验证

  • 前端执行 npm run build 通过;仍只有既有的 @vueuse/core pure annotation 和 chunk size 警告。

2026-06-29 AI入库单默认入库类型

  1. AI 新建入库单计划参数新增 inboundType=正常入库,确认卡片会和供应商、零件、数量、仓库、库位、器具等信息一起显示“入库类型:正常入库”。
  2. AI 确认执行新建入库单时同步写入 InboundOrder.inboundType,执行结果摘要也返回 inboundType,入库单管理列表不再出现类型为空。
  3. 入库单创建/修改接口增加兜底逻辑:如果其他入口没有传入入库类型,也默认保存为“正常入库”。
  4. 已修复当前历史空类型数据:RK20260629141053 已更新为“正常入库”,当前 INBOUND_ORDER 中入库类型为空的记录数为 0。

验证

  • 后端执行 mvn -q -DskipTests package 通过,并已重启。
  • 接口验证:AI 生成“新建惠州住友线束公司仪表板线束数量1的入库单”时,计划预览包含“入库类型:正常入库”;确认执行后返回结果和入库单列表接口均包含 inboundType=正常入库。测试生成的 RK20260629141457 已删除清理。

2026-06-29 AI待补全计划记忆

  1. AI 仓库管理员新增按登录用户保存的待补全计划记忆:当用户要求新建出库单但缺少客户等关键信息时,系统会保存这条未完成计划。
  2. 用户下一句补充“客户是xxx”等信息时,AI 会优先尝试补全上一条缺信息的单据计划,而不是重新理解成“新增客户”。
  3. 目前支持补全新建入库单、出库单、转包单中的客户、供应商、零件、数量等缺失项;补全后仍然生成确认计划,用户确认后才执行写入。
  4. 为避免误触发,用户明确说“新增/添加/新建/创建客户、供应商、零件、仓库、库位、器具”等基础资料维护时,不会被待补全计划拦截,仍按基础资料新增处理。

验证

  • 后端执行 mvn -q -DskipTests package 通过,并已重启。
  • 接口验证:先发送“新建惠州住友线束公司仪表板线束数量1的出库单”,返回 need_more_info 且缺少“客户”;再发送“客户是一汽-大众佛山工厂”,返回 CREATE_OUTBOUND_ORDER 确认计划,客户被正确补入。
  • 边界验证:存在缺客户计划时发送“新增客户测试客户A”,仍返回 ADD_BASE,不会误补到出库单。

2026-06-29 AI仓库管理员常用功能测试

  1. 自动接口测试覆盖:
    • 总库存问答:通过,返回 answer 模式。
    • PT020 库存查询:通过,返回回答和库存条目。
    • 未来缺货预警:通过,返回 8 条 forecast。
    • 异常数据检查:通过,返回 answer 模式。
    • 新建入库单计划:通过,动作 CREATE_INBOUND_ORDER,包含 inboundType、仓库、库位、器具等参数。
    • 新建出库单计划:通过,动作 CREATE_OUTBOUND_ORDER,能识别客户、供应商、零件和出库类型。
    • 新建转包单计划:通过,动作 CREATE_REPACK_ORDER,返回明细预览。
    • 缺客户记忆补全:通过,先提示缺客户,再输入“客户是一汽-大众佛山工厂”后继续补全为出库单计划。
    • 明确新增客户边界:通过,存在待补全计划时输入“新增客户测试客户A”仍识别为 ADD_BASE
    • 不存在计划 ID 执行:通过,返回业务错误,不跳登录。
  2. 写入类测试:
    • AI 新建入库单执行:通过,生成 RK20260629143457 和 1 张入库看板,验证 inboundType 非空后已删除清理。
    • AI 新建出库单执行:先检查惠州住友无可用库存,因此按库存跳过;随后改用有库存的 SUP001/PT001 数量 1 执行,通过,生成 OUT1782714931294 和 1 张出库看板,已删除清理。
  3. 清理验证:
    • RK20260629143457 已不存在。
    • OUT1782714931294 及其出库看板已不存在。

说明

  • PowerShell 对接口返回中文的显示存在乱码,因此自动断言优先检查动作、ID、字段存在性、记录数量和清理结果,避免把终端编码问题误判为业务失败。

2026-06-29 AI仓库管理员计划预警与测试脚本完善

  1. AI 新建出库单、转包单时在计划阶段增加库存校验:计划预览会返回当前可用库存、计划数量和是否库存充足;库存不足时不会直接进入可执行计划,先提示用户处理。
  2. AI 执行结果摘要增加自动生成看板数量,前端结果文案改为显示“状态”和“已自动生成 N 张关联看板”,更接近实际业务单据反馈。
  3. 修复待补全计划的边界问题:上一条库存不足/缺信息计划不会再污染下一条明确的新建入库单、出库单或转包单指令。
  4. 修复库存不足提示里“计划数量”被误识别为“缺少数量”的问题,避免下一句的数量被拿去修改上一条计划。
  5. 新增可复用自动测试脚本 scripts/test-ai-admin.ps1,覆盖库存问答、零件库存查询、缺货预警、异常检查、入库/出库/转包计划、库存不足提醒、客户记忆补全、明确新增客户边界、错误计划执行、入库/出库实际执行和自动清理。
  6. 测试脚本中的中文指令改为运行时 UTF-8 解码,避免 Windows PowerShell 默认编码导致中文乱码、AI 意图误判。

验证

  • 后端执行 mvn -q -DskipTests package 通过,并已重新启动。
  • 前端执行 npm run build 通过;仍只有既有的 @vueuse/core pure annotation 和 chunk size 警告。
  • 自动测试执行 powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\test-ai-admin.ps1 通过。
  • 测试生成的 RK20260629144820OUT1782715700657 已由脚本调用删除接口清理。