🐛 修复码头导入父港口取列不一致导致的静默丢数据
importTerminals 中 setParentCode 取「港口编码」列,而抑制连带报错时 却用「上级港口编码」判断父行是否已声明。用户若把完整编码填入 「码头编码」并让「港口编码」留空,父港口解析失败的异常会被误判为 「父行已声明」而吞掉,码头被静默丢弃且接口返回成功。 - splitByCategory 增加码头行「港口编码」非空校验,明确报错 - 抑制逻辑改为与 setParentCode 取同一列
This commit is contained in:
+10
-1
@@ -186,6 +186,13 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
failureList.add(buildFailure(data, index, "类型只能为港口或码头"));
|
||||
continue;
|
||||
}
|
||||
// 码头行的「港口编码」既是编号前缀,也是"所属港口"的来源(见 importTerminals)。
|
||||
// 缺失时下游解析不到父港口,而该异常又会被"父行已声明"的抑制逻辑吞掉,
|
||||
// 导致码头被静默丢弃、接口却返回成功——所以必须在这里明确拦下。
|
||||
if (CATEGORY_TERMINAL.equals(category) && Func.isEmpty(trimToEmpty(excel.getPortCode()))) {
|
||||
failureList.add(buildFailure(data, index, "码头必须填写所属港口编码"));
|
||||
continue;
|
||||
}
|
||||
// 只要类型是港口就登记为"本文件已声明",即使它的编码格式不合法:
|
||||
// 这样引用它的码头行不会被连带报错,用户只需修正这一个港口行。
|
||||
if (CATEGORY_PORT.equals(category)) {
|
||||
@@ -263,7 +270,9 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
} catch (ParentPortNotFoundException exception) {
|
||||
// 上级港口就声明在本文件里,只是那一行自己校验失败(已被标红)。
|
||||
// 此时码头行本身没有问题,不再连带报错,避免用户看到"两行都错"的假象。
|
||||
if (!declaredPortCodeSet.contains(trimToEmpty(excel.getParentCode()).toUpperCase(Locale.ROOT))) {
|
||||
// 注意这里必须与上面 setParentCode 取同一列(港口编码);
|
||||
// 若改用「上级港口编码」,父港口取不到时会被误判为"已声明"而吞掉异常。
|
||||
if (!declaredPortCodeSet.contains(trimToEmpty(excel.getPortCode()).toUpperCase(Locale.ROOT))) {
|
||||
failureList.add(buildFailure(data, index, resolveMessage(exception)));
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
|
||||
Reference in New Issue
Block a user