物料导入分类问题解决

This commit is contained in:
秦鸿展
2026-04-22 22:44:39 +08:00
parent 87f64f0efa
commit 60874e7322
7 changed files with 126 additions and 0 deletions
@@ -597,6 +597,8 @@ public class MaterialBaseInfoApplicationService {
names.add(row.getMaterialClassifyImport().trim());
row.setMaterialClassifyName(names);
}
// 按组织从 system 主数据反查分类编码,与名称列表对齐
fillMaterialClassifyCodesFromSystem(row);
// 物料种类:可传编码或名称,统一回填编码+名称
if ((StringUtils.isBlank(row.getMaterialType()) || StringUtils.isBlank(row.getMaterialTypeName()))
@@ -668,6 +670,62 @@ public class MaterialBaseInfoApplicationService {
}
}
/**
* 导入时已有分类名称但缺少分类编码时,走 system 接口按组织+名称/编码/名称路径匹配并回填.
* Excel 已填写的编码列优先保留。
*/
private void fillMaterialClassifyCodesFromSystem(MaterialBaseInfoDTO row) {
if (CollectionUtils.isEmpty(row.getMaterialClassifyName()) || row.getOrganizationId() == null) {
return;
}
List<String> names = row.getMaterialClassifyName();
List<String> existing = row.getMaterialClassifyCode();
List<String> newCodes = new ArrayList<>();
for (int i = 0; i < names.size(); i++) {
String fromExcel = (existing != null && i < existing.size()) ? existing.get(i) : null;
if (StringUtils.isNotBlank(fromExcel)) {
newCodes.add(fromExcel.trim());
continue;
}
String n = StringUtils.trimToNull(names.get(i));
if (n == null) {
newCodes.add(null);
} else {
newCodes.add(resolveClassifyCodeByFeign(n, row.getOrganizationId()));
}
}
row.setMaterialClassifyCode(newCodes);
}
/** 取 system 返回的 material_classify.code,写入本表 MATERIAL_CLASSIFY_CODEList 中一项) */
private String resolveClassifyCodeByFeign(String keyword, Long organizationId) {
if (StringUtils.isBlank(keyword) || organizationId == null) {
return null;
}
try {
AjaxResult r = systemServiceFeign.matchForMaterialImport(keyword.trim(), organizationId);
if (r == null || !"200".equals(String.valueOf(r.get("code"))) || r.get("data") == null) {
return null;
}
Map<String, Object> map = JSON.parseObject(JSONObject.toJSONString(r.get("data")),
new TypeReference<Map<String, Object>>() {});
if (map == null) {
return null;
}
Object code = map.get("code");
if (code == null) {
code = map.get("Code");
}
if (code == null) {
return null;
}
return StringUtils.trimToNull(String.valueOf(code));
} catch (Exception e) {
log.warn("导入解析物料分类编码失败 keyword={} orgId={} err={}", keyword, organizationId, e.getMessage());
return null;
}
}
private List<MaterialBarCodeDO> buildImportBarCodeList(MaterialBaseInfoDTO row) {
if (StringUtils.isBlank(row.getBarCode())) {
return null;