新增数据清洗功能
This commit is contained in:
@@ -48,6 +48,9 @@ import {
|
||||
} from "@mui/icons-material";
|
||||
import { FixedSizeList } from "react-window";
|
||||
import { useNotification } from "@refinedev/core";
|
||||
import axios from "axios";
|
||||
import { useGetIdentity } from "@refinedev/core";
|
||||
import config, { NETWORK_NAME } from "@/config/config";
|
||||
|
||||
import { useMap } from "@app/OlMap/MapComponent";
|
||||
import { GeoJSON } from "ol/format";
|
||||
@@ -59,7 +62,6 @@ import Feature from "ol/Feature";
|
||||
import { Point } from "ol/geom";
|
||||
import { getVectorContext } from "ol/render";
|
||||
import { unByKey } from "ol/Observable";
|
||||
import config from "@/config/config";
|
||||
import dayjs, { Dayjs } from "dayjs";
|
||||
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
|
||||
import { DateTimePicker, LocalizationProvider } from "@mui/x-date-pickers";
|
||||
@@ -98,6 +100,11 @@ interface SCADADeviceListProps {
|
||||
onCleanAllData?: (from: Date, to: Date) => void;
|
||||
}
|
||||
|
||||
type IUser = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
|
||||
const SCADADeviceList: React.FC<SCADADeviceListProps> = ({
|
||||
devices = [],
|
||||
onDeviceClick,
|
||||
@@ -154,6 +161,7 @@ const SCADADeviceList: React.FC<SCADADeviceListProps> = ({
|
||||
|
||||
const map = useMap(); // 移到此处,确保在条件检查前调用
|
||||
const { open } = useNotification();
|
||||
const { data: user } = useGetIdentity<IUser>();
|
||||
|
||||
useEffect(() => {
|
||||
if (selectedDeviceIds) {
|
||||
@@ -566,18 +574,82 @@ const SCADADeviceList: React.FC<SCADADeviceListProps> = ({
|
||||
);
|
||||
|
||||
// 确认清洗
|
||||
const handleConfirmClean = useCallback(() => {
|
||||
const handleConfirmClean = useCallback(async () => {
|
||||
const error = validateTimeRange(cleanStartTime, cleanEndTime);
|
||||
if (error) {
|
||||
setTimeRangeError(error);
|
||||
return;
|
||||
}
|
||||
onCleanAllData?.(cleanStartTime.toDate(), cleanEndTime.toDate());
|
||||
|
||||
// 获取所有设备ID
|
||||
const allDeviceIds = internalDevices.map((d) => d.id);
|
||||
if (allDeviceIds.length === 0) {
|
||||
open?.({
|
||||
type: "error",
|
||||
message: "无设备可清洗",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (!user || !user.name) {
|
||||
open?.({
|
||||
type: "error",
|
||||
message: "用户信息无效,请重新登录",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const startTime = dayjs(cleanStartTime).format("YYYY-MM-DD HH:mm:ss");
|
||||
const endTime = dayjs(cleanEndTime).format("YYYY-MM-DD HH:mm:ss");
|
||||
|
||||
// 调用后端清洗接口
|
||||
const response = await axios.post(
|
||||
`${config.backendUrl}/scadadevicedatacleaning/`,
|
||||
null,
|
||||
{
|
||||
params: {
|
||||
network: NETWORK_NAME,
|
||||
ids_list: allDeviceIds.join(","), // 将数组转为逗号分隔字符串
|
||||
start_time: startTime,
|
||||
end_time: endTime,
|
||||
user_name: user.name,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
console.log("[SCADADeviceList] 全部清洗响应:", response.data);
|
||||
|
||||
// 处理成功响应
|
||||
if (response.data === "success" || response.data?.success === true) {
|
||||
open?.({
|
||||
type: "success",
|
||||
message: "全部数据清洗成功",
|
||||
description: `已完成 ${allDeviceIds.length} 个设备的数据清洗`,
|
||||
});
|
||||
|
||||
// 如果父组件提供了回调,也调用它
|
||||
onCleanAllData?.(cleanStartTime.toDate(), cleanEndTime.toDate());
|
||||
} else {
|
||||
throw new Error(response.data?.message || "清洗失败");
|
||||
}
|
||||
} catch (err: any) {
|
||||
console.error("[SCADADeviceList] 数据清洗失败:", err);
|
||||
open?.({
|
||||
type: "error",
|
||||
message: "数据清洗失败",
|
||||
description: err.response?.data?.message || err.message || "未知错误",
|
||||
});
|
||||
}
|
||||
|
||||
handleCleanDialogClose();
|
||||
}, [
|
||||
cleanStartTime,
|
||||
cleanEndTime,
|
||||
validateTimeRange,
|
||||
internalDevices,
|
||||
user,
|
||||
open,
|
||||
onCleanAllData,
|
||||
handleCleanDialogClose,
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user