Integrate GF3 SARscape flood workflow

This commit is contained in:
2026-06-02 01:25:42 +08:00
parent 16cac0e292
commit 79e08b3a47
24 changed files with 4220 additions and 84 deletions
+23 -1
View File
@@ -11,7 +11,7 @@ import { normalizePagePayload } from '../utils/appHelpers';
import { normalizeTaskStatus } from '../utils/appUiHelpers';
import { DEFAULT_LIST_PAGE_SIZE } from '../config/appConstants';
const NON_BLOCKING_TASK_TYPES = new Set(['UNPACK_ARCHIVES', 'UNPACK_SENTINEL1', 'GF3_UNPACK', 'SCAN_ASSET_INVENTORY', 'COPY_DATA']);
const NON_BLOCKING_TASK_TYPES = new Set(['UNPACK_ARCHIVES', 'UNPACK_SENTINEL1', 'GF3_UNPACK', 'GF3_SARSCAPE_PRODUCE', 'GF3_SARSCAPE_SYNC', 'GF3_SARSCAPE_CLEAN', 'SCAN_ASSET_INVENTORY', 'COPY_DATA']);
export default function useDinsarOperations({
onCleanupDinsarLayers,
@@ -235,6 +235,28 @@ export default function useDinsarOperations({
} else if (taskStatus === 'FAILED') {
addLog('error', `GF3 解包失败: ${taskInfo.message || '未知错误'}`);
}
} else if (taskInfo.task_type === 'GF3_SARSCAPE_PRODUCE') {
if (taskStatus === 'COMPLETED') {
addLog('success', taskInfo.message || 'GF3 SARscape 生产链完成。');
addLog('info', '正在同步 GF3 生产后的数据视图...');
void syncRadarViewsAfterUnpack();
} else if (taskStatus === 'FAILED') {
addLog('error', `GF3 SARscape 生产失败: ${taskInfo.message || '未知错误'}`);
}
} else if (taskInfo.task_type === 'GF3_SARSCAPE_SYNC') {
if (taskStatus === 'COMPLETED') {
addLog('success', taskInfo.message || 'GF3 SARscape 标准化完成。');
addLog('info', '正在同步 GF3 标准化后的数据视图...');
void syncRadarViewsAfterUnpack();
} else if (taskStatus === 'FAILED') {
addLog('error', `GF3 SARscape 标准化失败: ${taskInfo.message || '未知错误'}`);
}
} else if (taskInfo.task_type === 'GF3_SARSCAPE_CLEAN') {
if (taskStatus === 'COMPLETED') {
addLog('success', taskInfo.message || 'GF3 SARscape 中间数据清理完成。');
} else if (taskStatus === 'FAILED') {
addLog('error', `GF3 SARscape 中间数据清理失败: ${taskInfo.message || '未知错误'}`);
}
}
};
+1 -1
View File
@@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef, useState } from 'react';
import apiClient from '../api/client';
import { normalizeTaskStatus } from '../utils/appUiHelpers';
const NON_BLOCKING_TASK_TYPES = new Set(['UNPACK_ARCHIVES', 'UNPACK_SENTINEL1', 'GF3_UNPACK', 'SCAN_ASSET_INVENTORY', 'COPY_DATA']);
const NON_BLOCKING_TASK_TYPES = new Set(['UNPACK_ARCHIVES', 'UNPACK_SENTINEL1', 'GF3_UNPACK', 'GF3_SARSCAPE_PRODUCE', 'GF3_SARSCAPE_SYNC', 'GF3_SARSCAPE_CLEAN', 'SCAN_ASSET_INVENTORY', 'COPY_DATA']);
const isTaskNonBlocking = (taskId, taskType, nonBlockingTaskIds = []) => (
NON_BLOCKING_TASK_TYPES.has(String(taskType || '').toUpperCase())
+79 -27
View File
@@ -72,6 +72,11 @@ export default function useRadarSearch({
);
};
const getSatelliteFallbackForGroup = (groupKey) => {
const group = SATELLITE_GROUPS.find((item) => item.key === groupKey);
return Array.isArray(group?.prefixes) && group.prefixes.length > 0 ? group.prefixes[0] : '';
};
const fetchRadarImagingDates = useCallback(async () => {
try {
const response = await apiClient.get('/radar-data/imaging-dates');
@@ -132,33 +137,6 @@ export default function useRadarSearch({
}
}, [setRadarSearchOptions, setRadarSearchOptionsLoading]);
const changeSatelliteGroup = useCallback((groupKey) => {
setSelectedSatelliteGroup(groupKey);
// Clear sub-filters that may be invalid for the new satellite group
setRadarSearchDraft((prev) => ({
...prev,
satellite: '',
imaging_mode: '',
polarization: '',
satellite_mode: '',
receiving_station: '',
orbit_circle: '',
acquisition_time_utc: '',
product_type: '',
product_level: '',
product_unique_id: '',
orbit_direction: '',
}));
if (groupKey === 'all') {
fetchRadarSearchOptions([]);
} else {
const matched = getSatellitesForGroup(groupKey);
if (matched.length > 0) {
fetchRadarSearchOptions(matched);
}
}
}, [setSelectedSatelliteGroup, setRadarSearchDraft, fetchRadarSearchOptions]);
const processAndSetAllData = useCallback((data) => {
const nameCounts = {};
const dataWithDisplayNames = data.map(item => {
@@ -294,6 +272,8 @@ export default function useRadarSearch({
const matched = getSatellitesForGroup(selectedSatelliteGroup);
if (matched.length > 0) {
draftWithSatelliteGroup.satellite = matched.join(',');
} else {
draftWithSatelliteGroup.satellite = getSatelliteFallbackForGroup(selectedSatelliteGroup);
}
}
const normalizedCriteria = normalizeRadarSearchCriteria(draftWithSatelliteGroup, RADAR_SEARCH_DEFAULTS);
@@ -354,6 +334,78 @@ export default function useRadarSearch({
clearRadarSearchResults, fetchAllData,
]);
const changeSatelliteGroup = useCallback(async (groupKey) => {
const nextGroupKey = groupKey || 'all';
setSelectedSatelliteGroup(nextGroupKey);
const clearedDraft = {
...radarSearchDraft,
satellite: '',
imaging_mode: '',
polarization: '',
satellite_mode: '',
receiving_station: '',
orbit_circle: '',
acquisition_time_utc: '',
product_type: '',
product_level: '',
product_unique_id: '',
orbit_direction: '',
};
setRadarSearchDraft(clearedDraft);
let matched = [];
let satelliteFilter = '';
if (nextGroupKey === 'all') {
fetchRadarSearchOptions([]);
} else {
matched = getSatellitesForGroup(nextGroupKey);
satelliteFilter = matched.length > 0
? matched.join(',')
: getSatelliteFallbackForGroup(nextGroupKey);
if (matched.length > 0) {
fetchRadarSearchOptions(matched);
}
}
const normalizedCriteria = normalizeRadarSearchCriteria(
{
...clearedDraft,
satellite: nextGroupKey === 'all' ? '' : satelliteFilter,
},
RADAR_SEARCH_DEFAULTS
);
const requestId = radarSearchRequestSeqRef.current + 1;
radarSearchRequestSeqRef.current = requestId;
setRadarSearchApplied(normalizedCriteria);
setRadarSearchAppliedAoiMode('none');
setRadarSearchAppliedRegionTreeId('');
setRadarSearchAoiMode('none');
setRadarSearchAoiToken('');
setHasRadarSearched(true);
setIsLoading(true);
clearRadarSearchResults({ limit: radarPagination.limit });
try {
await fetchAllData({
limit: radarPagination.limit,
offset: 0,
criteria: normalizedCriteria,
aoiMode: 'none',
regionTreeId: '',
files: null,
aoiToken: '',
requestId,
});
} finally {
setIsLoading(false);
}
}, [
radarSearchDraft, radarPagination.limit, radarSearchRequestSeqRef,
setSelectedSatelliteGroup, setRadarSearchDraft, setRadarSearchApplied,
setRadarSearchAppliedAoiMode, setRadarSearchAppliedRegionTreeId,
setRadarSearchAoiMode, setRadarSearchAoiToken, setHasRadarSearched,
setIsLoading, clearRadarSearchResults, fetchAllData, fetchRadarSearchOptions,
]);
const resetRadarSearch = useCallback(() => {
setRadarSearchDraft(RADAR_SEARCH_DEFAULTS);
setRadarSearchApplied(RADAR_SEARCH_DEFAULTS);