同一审批请求下存在多个设计单时,各自生产文件中的物料行可能混入另一个设计单的数据。requestNo 聚合主表,但子表删除重建未按 designTaskId 精准限定。
// BizProductionInfoCreateServiceImpl.java
public void refreshProductionInfo(String requestNo, List<String> designTaskIds) {
// BUG: 主表按 requestNo 聚合,子表删除重建时只按 productionInfoId
// 多设计单场景下,子表删除范围过大,重建时只取第一个 designTaskId 的数据
BizProductionInfo info = productionInfoMapper.selectByRequestNo(requestNo);
if (info == null) {
info = buildNewProductionInfo(requestNo);
}
// 删除所有子快照,不限 designTaskId
productionInfoItemMapper.deleteByInfoId(info.getId());
// 重建时取所有物料行,未按 designTaskId 隔离
List<BizMaterialListItem> allItems =
materialListItemMapper.selectByRequestNo(requestNo);
// ...
}
// BizDesignTaskMapper.xml — SQL 层孤儿归并
// customerDrawingUrls 子查询中 d.design_task_id IS NULL
// 的图纸也被归入当前设计单,导致跨单串扰