feat(material): 添加钢卷原料厚度自动提取功能

- 新增 WmsMaterialCoilMapper.selectRawMaterialThicknessByEnterCoilNos 方法
- 添加 MyBatis 映射查询热轧卷板原料规格
- 在 WmsMaterialCoilServiceImpl 中实现 fillRawMaterialThickness 方法
- 自动从规格字段提取 * 前的数字作为厚度值
- 在 WmsMaterialCoilVo 中新增 rawMaterialThickness 字段
- 分页查询时自动填充原料厚度信息
This commit is contained in:
2026-06-22 18:04:07 +08:00
parent 7efa20dd94
commit 416202360b
4 changed files with 75 additions and 0 deletions

View File

@@ -577,6 +577,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
return TableDataInfo.build(result);
}
fillPageCommonFields(records);
fillRawMaterialThickness(records);
return TableDataInfo.build(result);
}
@@ -790,6 +791,50 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
}
/**
* 批量填充原料厚度:根据入场卷号查询热轧卷板原料的规格,提取*前面的数字作为厚度
* <p>逻辑:同一个 enterCoilNo 下,找 parent_coil_id 为空、itemType=raw_material、
* 且关联的 wms_raw_material.raw_material_name 包含"热轧卷板"的记录,
* 取 specification 中 * 前面的数字(如 0.1*1000 → 0.1</p>
*/
private void fillRawMaterialThickness(List<WmsMaterialCoilVo> records) {
List<String> enterCoilNos = records.stream()
.map(WmsMaterialCoilVo::getEnterCoilNo)
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (enterCoilNos.isEmpty()) {
return;
}
List<Map<String, String>> rawList = baseMapper.selectRawMaterialThicknessByEnterCoilNos(enterCoilNos);
if (rawList == null || rawList.isEmpty()) {
return;
}
// 构建 enterCoilNo → 厚度 的映射
Map<String, String> thickMap = new HashMap<>();
for (Map<String, String> row : rawList) {
String enterCoilNo = row.get("enterCoilNo");
String spec = row.get("specification");
if (StringUtils.isNotBlank(enterCoilNo) && StringUtils.isNotBlank(spec)) {
int starIdx = spec.indexOf('*');
if (starIdx > 0) {
thickMap.put(enterCoilNo, spec.substring(0, starIdx));
}
}
}
// 回填到每条记录
for (WmsMaterialCoilVo vo : records) {
String thickness = thickMap.get(vo.getEnterCoilNo());
if (thickness != null) {
vo.setRawMaterialThickness(thickness);
}
}
}
/**
* 统计筛选条件下的全量汇总数据高性能只查sum/count
*/