半成品保存时有名称,后续详情、生产文件或打印中变为空。半成品没有基础资料表回查名称,一旦保存或复制漏字段就永久丢失。
// BizMaterialListServiceImpl.java — 物料名称回退逻辑
private String resolveMaterialName(BizMaterialListItem item) {
// BUG: materialType=3(半成品) 没有基础资料表
// 模具走 moldMapper、线材走 wireMapper 回查名称
// 半成品只能依靠保存时写入的快照字段
if (item.getMaterialType() == 1) {
Mold mold = moldMapper.selectById(item.getMaterialId());
return mold != null ? mold.getName() : item.getSnapshotName();
} else if (item.getMaterialType() == 2) {
Wire wire = wireMapper.selectById(item.getMaterialId());
return wire != null ? wire.getName() : item.getSnapshotName();
}
// 半成品:snapshotName 可能为 null
return item.getSnapshotName(); // 如果保存时漏了,这里就是 null
}
审批请求已有客户图纸,设计单保存内部图纸后,再补充客户图纸时部分图纸从页面消失。客户图纸和内部图纸应合并展示,而非互相覆盖。
// BizApprovalRequestServiceImpl.java
public DrawingAggregation getDrawingAggregation(String requestNo, String designTaskId) {
List<BizDrawing> externalDrawings = drawingMapper.selectByRequestNo(requestNo);
List<BizDrawing> internalDrawings = drawingMapper.selectByDesignTaskId(designTaskId);
// BUG: 直接覆盖而非合并
// 后补外部图纸时重建 payload,已有的内部图纸查询被覆盖
DrawingAggregation result = new DrawingAggregation();
if (CollectionUtils.isNotEmpty(externalDrawings)) {
result.setDrawings(externalDrawings); // 整列表替换
}
if (CollectionUtils.isNotEmpty(internalDrawings)) {
result.setDrawings(internalDrawings); // 再次替换,外部图纸丢失
}
return result;
}
同一审批请求下存在多个设计单时,各自生产文件中的物料行可能混入另一个设计单的数据。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
// 的图纸也被归入当前设计单,导致跨单串扰