优化
This commit is contained in:
@@ -104,6 +104,13 @@ services:
|
|||||||
CARRIER_SCHEDULE_BATCH_SIZE: ${CARRIER_SCHEDULE_BATCH_SIZE:-20}
|
CARRIER_SCHEDULE_BATCH_SIZE: ${CARRIER_SCHEDULE_BATCH_SIZE:-20}
|
||||||
CARRIER_SCHEDULE_MAX_TASKS_PER_TRIGGER: ${CARRIER_SCHEDULE_MAX_TASKS_PER_TRIGGER:-2000}
|
CARRIER_SCHEDULE_MAX_TASKS_PER_TRIGGER: ${CARRIER_SCHEDULE_MAX_TASKS_PER_TRIGGER:-2000}
|
||||||
CARRIER_SCHEDULE_LEASE_DURATION: ${CARRIER_SCHEDULE_LEASE_DURATION:-PT5M}
|
CARRIER_SCHEDULE_LEASE_DURATION: ${CARRIER_SCHEDULE_LEASE_DURATION:-PT5M}
|
||||||
|
TERMINAL_DRAYAGE_MAIL_ENABLED: ${TERMINAL_DRAYAGE_MAIL_ENABLED:-false}
|
||||||
|
TERMINAL_DRAYAGE_MAIL_HOST: ${TERMINAL_DRAYAGE_MAIL_HOST:-}
|
||||||
|
TERMINAL_DRAYAGE_MAIL_PORT: ${TERMINAL_DRAYAGE_MAIL_PORT:-587}
|
||||||
|
TERMINAL_DRAYAGE_MAIL_USERNAME: ${TERMINAL_DRAYAGE_MAIL_USERNAME:-}
|
||||||
|
TERMINAL_DRAYAGE_MAIL_PASSWORD: ${TERMINAL_DRAYAGE_MAIL_PASSWORD:-}
|
||||||
|
TERMINAL_DRAYAGE_MAIL_SSL: ${TERMINAL_DRAYAGE_MAIL_SSL:-false}
|
||||||
|
TERMINAL_DRAYAGE_MAIL_SCAN_DELAY: ${TERMINAL_DRAYAGE_MAIL_SCAN_DELAY:-10000}
|
||||||
|
|
||||||
finance:
|
finance:
|
||||||
<<: *common
|
<<: *common
|
||||||
|
|||||||
@@ -130,6 +130,14 @@ if [ "$SERVICE" = "firstleg" ]; then
|
|||||||
echo "部署 firstleg 时,环境文件必须包含非空 LASTLEG_EVENT_BRIDGE_URL" >&2
|
echo "部署 firstleg 时,环境文件必须包含非空 LASTLEG_EVENT_BRIDGE_URL" >&2
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
if [ "$(env_file_value TERMINAL_DRAYAGE_MAIL_ENABLED)" = "true" ]; then
|
||||||
|
for key in TERMINAL_DRAYAGE_MAIL_HOST TERMINAL_DRAYAGE_MAIL_PORT TERMINAL_DRAYAGE_MAIL_USERNAME TERMINAL_DRAYAGE_MAIL_PASSWORD; do
|
||||||
|
if ! env_file_has_key "$key" || [ -z "$(env_file_value "$key")" ]; then
|
||||||
|
echo "启用码头车队邮件时,环境文件必须包含非空 $key" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$SERVICE" = "lastleg-service" ]; then
|
if [ "$SERVICE" = "lastleg-service" ]; then
|
||||||
|
|||||||
@@ -18269,7 +18269,7 @@ CREATE TABLE IF NOT EXISTS fl_terminal_drayage_history (
|
|||||||
KEY idx_terminal_drayage_history(container_booking_id,created_at,id),
|
KEY idx_terminal_drayage_history(container_booking_id,created_at,id),
|
||||||
CONSTRAINT fk_terminal_drayage_history FOREIGN KEY(drayage_id) REFERENCES fl_terminal_drayage(id),
|
CONSTRAINT fk_terminal_drayage_history FOREIGN KEY(drayage_id) REFERENCES fl_terminal_drayage(id),
|
||||||
CONSTRAINT chk_terminal_drayage_history_action CHECK(action IN
|
CONSTRAINT chk_terminal_drayage_history_action CHECK(action IN
|
||||||
('SELECT_FLEET','SCHEDULE_PICKUP','RECORD_PICKUP','RECORD_EMPTY_RETURN'))
|
('SELECT_FLEET','SEND_PICKUP_EMAIL','SCHEDULE_PICKUP','RECORD_PICKUP','RECORD_EMPTY_RETURN'))
|
||||||
) ENGINE=InnoDB COMMENT='目的港码头拖车不可变操作历史';
|
) ENGINE=InnoDB COMMENT='目的港码头拖车不可变操作历史';
|
||||||
CREATE TABLE IF NOT EXISTS fl_terminal_drayage_operation (
|
CREATE TABLE IF NOT EXISTS fl_terminal_drayage_operation (
|
||||||
id BIGINT UNSIGNED NOT NULL COMMENT '幂等操作ID', container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '货柜ID',
|
id BIGINT UNSIGNED NOT NULL COMMENT '幂等操作ID', container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '货柜ID',
|
||||||
@@ -18304,6 +18304,9 @@ ALTER TABLE fl_terminal_drayage
|
|||||||
MODIFY COLUMN updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间';
|
MODIFY COLUMN updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间';
|
||||||
|
|
||||||
ALTER TABLE fl_terminal_drayage_history
|
ALTER TABLE fl_terminal_drayage_history
|
||||||
|
DROP CHECK chk_terminal_drayage_history_action,
|
||||||
|
ADD CONSTRAINT chk_terminal_drayage_history_action CHECK(action IN
|
||||||
|
('SELECT_FLEET','SEND_PICKUP_EMAIL','SCHEDULE_PICKUP','RECORD_PICKUP','RECORD_EMPTY_RETURN')),
|
||||||
MODIFY COLUMN id BIGINT UNSIGNED NOT NULL COMMENT '历史ID',
|
MODIFY COLUMN id BIGINT UNSIGNED NOT NULL COMMENT '历史ID',
|
||||||
MODIFY COLUMN drayage_id BIGINT UNSIGNED NOT NULL COMMENT '码头拖车聚合ID',
|
MODIFY COLUMN drayage_id BIGINT UNSIGNED NOT NULL COMMENT '码头拖车聚合ID',
|
||||||
MODIFY COLUMN container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '货柜ID快照',
|
MODIFY COLUMN container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '货柜ID快照',
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ CREATE TABLE IF NOT EXISTS fl_terminal_drayage_history (
|
|||||||
KEY idx_terminal_drayage_history(container_booking_id,created_at,id),
|
KEY idx_terminal_drayage_history(container_booking_id,created_at,id),
|
||||||
CONSTRAINT fk_terminal_drayage_history FOREIGN KEY(drayage_id) REFERENCES fl_terminal_drayage(id),
|
CONSTRAINT fk_terminal_drayage_history FOREIGN KEY(drayage_id) REFERENCES fl_terminal_drayage(id),
|
||||||
CONSTRAINT chk_terminal_drayage_history_action CHECK(action IN
|
CONSTRAINT chk_terminal_drayage_history_action CHECK(action IN
|
||||||
('SELECT_FLEET','SCHEDULE_PICKUP','RECORD_PICKUP','RECORD_EMPTY_RETURN'))
|
('SELECT_FLEET','SEND_PICKUP_EMAIL','SCHEDULE_PICKUP','RECORD_PICKUP','RECORD_EMPTY_RETURN'))
|
||||||
) ENGINE=InnoDB COMMENT='目的港码头拖车不可变操作历史';
|
) ENGINE=InnoDB COMMENT='目的港码头拖车不可变操作历史';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS fl_terminal_drayage_operation (
|
CREATE TABLE IF NOT EXISTS fl_terminal_drayage_operation (
|
||||||
|
|||||||
+7
-2
@@ -23,7 +23,10 @@ class TerminalDrayageSqlContractTest {
|
|||||||
if (name.equals("pendingMails")) assertThat(sql).contains("earlier.container_booking_id=m.container_booking_id", "earlier.id<m.id", "earlier.status<>'SENT'");
|
if (name.equals("pendingMails")) assertThat(sql).contains("earlier.container_booking_id=m.container_booking_id", "earlier.id<m.id", "earlier.status<>'SENT'");
|
||||||
}
|
}
|
||||||
for (Path path : java.util.List.of(Path.of("src/main/resources/db/phase3-terminal-drayage-schema.sql"), Path.of("../deploy/sql/头程数据库统一增量-MySQL8.sql"))) {
|
for (Path path : java.util.List.of(Path.of("src/main/resources/db/phase3-terminal-drayage-schema.sql"), Path.of("../deploy/sql/头程数据库统一增量-MySQL8.sql"))) {
|
||||||
assertThat(Files.readString(path)).contains("CREATE TABLE IF NOT EXISTS fl_terminal_drayage_mail (", "CHECK(status IN ('PENDING','SENDING','SENT','FAILED'))");
|
assertThat(Files.readString(path)).contains(
|
||||||
|
"CREATE TABLE IF NOT EXISTS fl_terminal_drayage_mail (",
|
||||||
|
"CHECK(status IN ('PENDING','SENDING','SENT','FAILED'))",
|
||||||
|
"('SELECT_FLEET','SEND_PICKUP_EMAIL','SCHEDULE_PICKUP','RECORD_PICKUP','RECORD_EMPTY_RETURN')");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +41,9 @@ class TerminalDrayageSqlContractTest {
|
|||||||
}
|
}
|
||||||
String release = Files.readString(Path.of("../deploy/sql/头程数据库统一增量-MySQL8.sql"));
|
String release = Files.readString(Path.of("../deploy/sql/头程数据库统一增量-MySQL8.sql"));
|
||||||
assertThat(release).contains("DROP CHECK chk_terminal_drayage_times",
|
assertThat(release).contains("DROP CHECK chk_terminal_drayage_times",
|
||||||
"ADD CONSTRAINT chk_terminal_drayage_times CHECK(");
|
"ADD CONSTRAINT chk_terminal_drayage_times CHECK(",
|
||||||
|
"DROP CHECK chk_terminal_drayage_history_action",
|
||||||
|
"ADD CONSTRAINT chk_terminal_drayage_history_action CHECK(action IN");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -130,6 +130,26 @@ test('development publishes every service on loopback without changing test defa
|
|||||||
assert.doesNotMatch(directDeployScript, /gateway\|gateway-overseas\) (?:export )?PUBLISHED_BIND_ADDRESS=0\.0\.0\.0/)
|
assert.doesNotMatch(directDeployScript, /gateway\|gateway-overseas\) (?:export )?PUBLISHED_BIND_ADDRESS=0\.0\.0\.0/)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('Firstleg deployment passes terminal drayage SMTP settings into the container', () => {
|
||||||
|
const firstlegService = serviceCompose.slice(
|
||||||
|
serviceCompose.indexOf(' firstleg:\n'),
|
||||||
|
serviceCompose.indexOf(' finance:\n')
|
||||||
|
)
|
||||||
|
for (const key of [
|
||||||
|
'TERMINAL_DRAYAGE_MAIL_ENABLED',
|
||||||
|
'TERMINAL_DRAYAGE_MAIL_HOST',
|
||||||
|
'TERMINAL_DRAYAGE_MAIL_PORT',
|
||||||
|
'TERMINAL_DRAYAGE_MAIL_USERNAME',
|
||||||
|
'TERMINAL_DRAYAGE_MAIL_PASSWORD',
|
||||||
|
'TERMINAL_DRAYAGE_MAIL_SSL',
|
||||||
|
'TERMINAL_DRAYAGE_MAIL_SCAN_DELAY'
|
||||||
|
]) {
|
||||||
|
assert.match(firstlegService, new RegExp(`^ ${key}: ` + '\\$\\{' + key, 'm'))
|
||||||
|
}
|
||||||
|
assert.match(directDeployScript, /TERMINAL_DRAYAGE_MAIL_ENABLED/)
|
||||||
|
assert.match(directDeployScript, /TERMINAL_DRAYAGE_MAIL_HOST TERMINAL_DRAYAGE_MAIL_PORT TERMINAL_DRAYAGE_MAIL_USERNAME TERMINAL_DRAYAGE_MAIL_PASSWORD/)
|
||||||
|
})
|
||||||
|
|
||||||
test('parallel image publications isolate registry credentials per Jenkins job', () => {
|
test('parallel image publications isolate registry credentials per Jenkins job', () => {
|
||||||
const imageStage = pipeline.slice(
|
const imageStage = pipeline.slice(
|
||||||
pipeline.indexOf("stage('构建并发布单服务镜像')"),
|
pipeline.indexOf("stage('构建并发布单服务镜像')"),
|
||||||
|
|||||||
Reference in New Issue
Block a user