fix phase3 acceptance roots and payable validation
This commit is contained in:
@@ -41,7 +41,7 @@ public class FeePaymentSnapshotValidator {
|
||||
}
|
||||
return Snapshot.empty();
|
||||
}
|
||||
if (!"PAYABLE".equals(direction) || !MODES.contains(mode)) {
|
||||
if (!"PAYABLE".equals(direction) || mode == null || !MODES.contains(mode)) {
|
||||
throw bad("应付费用必须选择ON_ACCOUNT或DIRECT_PAID");
|
||||
}
|
||||
if ("ON_ACCOUNT".equals(mode)) {
|
||||
|
||||
@@ -10,6 +10,9 @@ CREATE TABLE IF NOT EXISTS fl_preload_plan (
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号,每次更新递增',
|
||||
items_json JSON NOT NULL COMMENT '可编辑分柜明细JSON快照;人工确认后作为预装依据',
|
||||
remark VARCHAR(1000) NULL COMMENT '预装备注',
|
||||
confirmed_by BIGINT UNSIGNED NULL COMMENT '确认预装的操作人ID',
|
||||
confirmed_by_name VARCHAR(64) NULL COMMENT '确认预装的操作人姓名快照',
|
||||
confirmed_at DATETIME(3) NULL COMMENT '预装确认时间',
|
||||
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建预装清单的操作人ID',
|
||||
created_by_name VARCHAR(64) NULL COMMENT '创建操作人姓名快照',
|
||||
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
||||
@@ -62,6 +65,13 @@ BEGIN
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
||||
CALL phase3_split_add_column('fl_preload_plan', 'confirmed_by',
|
||||
'BIGINT UNSIGNED NULL COMMENT ''确认预装的操作人ID'' AFTER remark');
|
||||
CALL phase3_split_add_column('fl_preload_plan', 'confirmed_by_name',
|
||||
'VARCHAR(64) NULL COMMENT ''确认预装的操作人姓名快照'' AFTER confirmed_by');
|
||||
CALL phase3_split_add_column('fl_preload_plan', 'confirmed_at',
|
||||
'DATETIME(3) NULL COMMENT ''预装确认时间'' AFTER confirmed_by_name');
|
||||
|
||||
CALL phase3_split_add_column('fl_inbound_order', 'parent_inbound_id',
|
||||
'BIGINT UNSIGNED NULL COMMENT ''生成本单的主入库单ID;仅二级子单有值'' AFTER id');
|
||||
CALL phase3_split_add_column('fl_inbound_order', 'split_level',
|
||||
|
||||
+23
@@ -10,10 +10,33 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class PdaSplitSettlementSqlContractTest {
|
||||
@Test
|
||||
void addsPreloadConfirmationAuditColumnsForIncrementalPdaAllocation() throws Exception {
|
||||
String moduleSql = new ClassPathResource("db/phase3-split-preload-schema.sql")
|
||||
.getContentAsString(StandardCharsets.UTF_8);
|
||||
String unifiedSql = Files.readString(Path.of("..", "deploy", "sql", "头程数据库统一增量-MySQL8.sql"),
|
||||
StandardCharsets.UTF_8);
|
||||
|
||||
assertThat(moduleSql)
|
||||
.contains("confirmed_by BIGINT UNSIGNED NULL")
|
||||
.contains("confirmed_by_name VARCHAR(64) NULL")
|
||||
.contains("confirmed_at DATETIME(3) NULL")
|
||||
.contains("phase3_split_add_column('fl_preload_plan', 'confirmed_by'")
|
||||
.contains("phase3_split_add_column('fl_preload_plan', 'confirmed_by_name'")
|
||||
.contains("phase3_split_add_column('fl_preload_plan', 'confirmed_at'");
|
||||
assertThat(unifiedSql)
|
||||
.contains("CREATE PROCEDURE migrate_preload_confirmation_columns()")
|
||||
.contains("ADD COLUMN confirmed_by BIGINT UNSIGNED NULL")
|
||||
.contains("ADD COLUMN confirmed_by_name VARCHAR(64) NULL")
|
||||
.contains("ADD COLUMN confirmed_at DATETIME(3) NULL");
|
||||
}
|
||||
|
||||
@Test
|
||||
void protectsLoadedAndRemainderSettlement() throws Exception {
|
||||
String sql = new ClassPathResource("db/phase3-inbound-parent-child-schema.sql")
|
||||
|
||||
+8
@@ -37,6 +37,14 @@ class FeePaymentSnapshotValidatorTest {
|
||||
.isInstanceOf(BizException.class).hasMessageContaining("账期应付不得");
|
||||
}
|
||||
|
||||
@Test
|
||||
void payableWithoutSettlementModeReturnsBusinessValidationInsteadOfNullPointer() {
|
||||
assertThatThrownBy(() -> validator.validate(9L, "PAYABLE", null,
|
||||
null, null, null, null))
|
||||
.isInstanceOf(BizException.class)
|
||||
.hasMessageContaining("应付费用必须选择ON_ACCOUNT或DIRECT_PAID");
|
||||
}
|
||||
|
||||
@Test
|
||||
void directPaidRequiresTimeMethodAndReferenceOrVoucher() {
|
||||
LocalDateTime paidAt = LocalDateTime.of(2026, 8, 20, 10, 0);
|
||||
|
||||
Reference in New Issue
Block a user