Integrate GF3 SARscape flood workflow
This commit is contained in:
@@ -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 || '未知错误'}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user