物料导入分类问题解决
This commit is contained in:
+58
@@ -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_CODE(List 中一项) */
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user