feat(wms): 所有的list接口增加原料厚度以及导出增加原料厚度
- 在 WmsMaterialCoilAllExportVo 和 WmsMaterialCoilExportVo 中新增原料厚度字段 - 更新控制器中的列配置映射,添加原料厚度显示 - 实现批量查询热轧卷板原料厚度映射功能 - 重构原料厚度填充逻辑为通用方法,支持多种 VO 类型 - 在多个导出功能中集成原料厚度数据回填 - 更新 .gitignore 添加 *.json 文件忽略规则 - 优化数据库查询性能,减少重复查询操作
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -63,3 +63,4 @@ nbdist/
|
|||||||
*.local.*
|
*.local.*
|
||||||
*.py
|
*.py
|
||||||
*.pyc
|
*.pyc
|
||||||
|
*.json
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,4 +221,10 @@ public class WmsMaterialCoilAllExportVo {
|
|||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "合同编号")
|
@ExcelProperty(value = "合同编号")
|
||||||
private String contractNo;
|
private String contractNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原料厚度(从热轧卷板原料规格中提取)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "原料厚度")
|
||||||
|
private String rawMaterialThickness;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -239,4 +239,10 @@ public class WmsMaterialCoilExportVo {
|
|||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "合同编号")
|
@ExcelProperty(value = "合同编号")
|
||||||
private String contractNo;
|
private String contractNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原料厚度(从热轧卷板原料规格中提取)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "原料厚度")
|
||||||
|
private String rawMaterialThickness;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user