feat(wms): 所有的list接口增加原料厚度以及导出增加原料厚度

- 在 WmsMaterialCoilAllExportVo 和 WmsMaterialCoilExportVo 中新增原料厚度字段
- 更新控制器中的列配置映射,添加原料厚度显示
- 实现批量查询热轧卷板原料厚度映射功能
- 重构原料厚度填充逻辑为通用方法,支持多种 VO 类型
- 在多个导出功能中集成原料厚度数据回填
- 更新 .gitignore 添加 *.json 文件忽略规则
- 优化数据库查询性能,减少重复查询操作
This commit is contained in:
2026-06-23 10:04:51 +08:00
parent 29d99a4f8d
commit 01128d293e
5 changed files with 80 additions and 16 deletions

3
.gitignore vendored
View File

@@ -62,4 +62,5 @@ nbdist/
/tables/
*.local.*
*.py
*.pyc
*.pyc
*.json

View File

@@ -207,6 +207,7 @@ public class WmsMaterialCoilController extends BaseController {
columns.put("theoreticalThickness", "理论厚度");
columns.put("scheduleThickness", "排产厚度");
columns.put("theoreticalLength", "理论长度");
columns.put("rawMaterialThickness", "原料厚度");
columns.put("chromePlateCoilNo", "镀铬卷号");
return R.ok(columns);
}

View File

@@ -221,4 +221,10 @@ public class WmsMaterialCoilAllExportVo {
*/
@ExcelProperty(value = "合同编号")
private String contractNo;
/**
* 原料厚度(从热轧卷板原料规格中提取)
*/
@ExcelProperty(value = "原料厚度")
private String rawMaterialThickness;
}

View File

@@ -239,4 +239,10 @@ public class WmsMaterialCoilExportVo {
*/
@ExcelProperty(value = "合同编号")
private String contractNo;
/**
* 原料厚度(从热轧卷板原料规格中提取)
*/
@ExcelProperty(value = "原料厚度")
private String rawMaterialThickness;
}

View File

@@ -597,6 +597,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
fillBindInfoForPage(bindRecords);
fillPageCommonFields(bindRecords);
fillRawMaterialThickness(bindRecords);
Page<WmsMaterialCoilBindVo> bindResult = new Page<>(result.getCurrent(), result.getSize(), result.getTotal());
bindResult.setRecords(bindRecords);
@@ -618,6 +619,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
// 填充通用字段(昵称等)
fillPageCommonFields(records);
fillRawMaterialThickness(records);
// 批量填充订单关联信息
fillOrderRelForPage(records);
@@ -639,6 +641,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
// 填充通用字段(昵称等)
fillPageCommonFields(records);
fillRawMaterialThickness(records);
// 批量查询每个钢卷的最新一条改判记录
List<com.klp.domain.vo.WmsCoilQualityRejudgeVo> latestRejudges =
@@ -792,25 +795,27 @@ 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>
* 批量查询热轧卷板原料厚度映射:入场卷号厚度
* <p>根据入场卷号列表,查 parent_coil_id 为空、itemType=raw_material、
* 且 raw_material_name 包含"热轧卷板"的记录,取 specification 中 * 前面的数字</p>
*
* @param enterCoilNos 入场卷号集合
* @return enterCoilNo → 厚度 的映射(如 "25100001" → "0.1"
*/
private void fillRawMaterialThickness(List<WmsMaterialCoilVo> records) {
List<String> enterCoilNos = records.stream()
.map(WmsMaterialCoilVo::getEnterCoilNo)
private Map<String, String> buildRawMaterialThicknessMap(Collection<String> enterCoilNos) {
if (enterCoilNos == null || enterCoilNos.isEmpty()) {
return Collections.emptyMap();
}
List<String> distinctNos = enterCoilNos.stream()
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (enterCoilNos.isEmpty()) {
return;
if (distinctNos.isEmpty()) {
return Collections.emptyMap();
}
List<Map<String, String>> rawList = baseMapper.selectRawMaterialThicknessByEnterCoilNos(enterCoilNos);
List<Map<String, String>> rawList = baseMapper.selectRawMaterialThicknessByEnterCoilNos(distinctNos);
if (rawList == null || rawList.isEmpty()) {
return;
return Collections.emptyMap();
}
// 构建 enterCoilNo → 厚度 的映射
@@ -825,8 +830,20 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
}
}
return thickMap;
}
/**
* 批量填充原料厚度到 WmsMaterialCoilVo 列表
*/
private void fillRawMaterialThickness(List<? extends WmsMaterialCoilVo> records) {
List<String> enterCoilNos = records.stream()
.map(WmsMaterialCoilVo::getEnterCoilNo)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
Map<String, String> thickMap = buildRawMaterialThicknessMap(enterCoilNos);
// 回填到每条记录
for (WmsMaterialCoilVo vo : records) {
String thickness = thickMap.get(vo.getEnterCoilNo());
if (thickness != null) {
@@ -835,6 +852,27 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
}
/**
* 通用原料厚度回填(适用于非 WmsMaterialCoilVo 子类的导出 VO
*/
private <T> void fillRawMaterialThicknessForExport(List<T> list,
java.util.function.Function<T, String> enterCoilNoGetter,
java.util.function.BiConsumer<T, String> thicknessSetter) {
List<String> enterCoilNos = list.stream()
.map(enterCoilNoGetter)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
Map<String, String> thickMap = buildRawMaterialThicknessMap(enterCoilNos);
for (T item : list) {
String thickness = thickMap.get(enterCoilNoGetter.apply(item));
if (thickness != null) {
thicknessSetter.accept(item, thickness);
}
}
}
/**
* 统计筛选条件下的全量汇总数据高性能只查sum/count
*/
@@ -3736,6 +3774,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
vo.setActualWarehouseName(null);
}
});
fillRawMaterialThicknessForExport(wmsMaterialCoilExportVos,
WmsMaterialCoilExportVo::getEnterCoilNo, WmsMaterialCoilExportVo::setRawMaterialThickness);
return wmsMaterialCoilExportVos;
}
/**
@@ -3766,6 +3806,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
}
fillRawMaterialThicknessForExport(exportVoList,
WmsMaterialCoilAllExportVo::getEnterCoilNo, WmsMaterialCoilAllExportVo::setRawMaterialThickness);
return exportVoList;
}
/**
@@ -3805,6 +3847,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
vo.setActualWarehouseName(null);
}
});
fillRawMaterialThicknessForExport(wmsMaterialCoilDeliveryExportVos,
WmsMaterialCoilDeliveryExportVo::getEnterCoilNo, WmsMaterialCoilDeliveryExportVo::setRawMaterialThickness);
return wmsMaterialCoilDeliveryExportVos;
}
@@ -3839,7 +3883,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
if (coilIds.isEmpty()) {
return Collections.emptyList();
}
return baseMapper.selectAnnealExportListByCoilIds(coilIds);
List<WmsMaterialCoilAnnealExportVo> list = baseMapper.selectAnnealExportListByCoilIds(coilIds);
fillRawMaterialThicknessForExport(list,
WmsMaterialCoilAnnealExportVo::getEnterCoilNo, WmsMaterialCoilAnnealExportVo::setRawMaterialThickness);
return list;
}
private List<Long> parseCsvLongs(String csv) {
@@ -6131,6 +6178,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
throw new RuntimeException("未找到符合条件的钢卷数据");
}
// 1.1 填充原料厚度
fillRawMaterialThickness(coilList);
// 2. 收集所有钢卷ID
List<Long> coilIds = coilList.stream()
.map(WmsMaterialCoilVo::getCoilId)