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

1
.gitignore vendored
View File

@@ -63,3 +63,4 @@ nbdist/
*.local.* *.local.*
*.py *.py
*.pyc *.pyc
*.json

View File

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

View File

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

View File

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

View File

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