feat(scada): align map asset fields

This commit is contained in:
2026-07-15 18:30:12 +08:00
parent 16ecb69d00
commit 055335e404
11 changed files with 153 additions and 71 deletions
+9 -10
View File
@@ -61,25 +61,24 @@ describe("drainage feature adapter", () => {
);
});
it("uses the promoted SCADA point id for feature-state interactions", () => {
it("uses the promoted SCADA id for feature-state interactions", () => {
const detail = toDetailFeature({
id: "aaedc54a-e5b4-5791-b729-4b7e838a8d00",
id: "4bfa834b-cbbb-5f35-9523-7487ac021ed2",
sourceLayer: SOURCE_LAYERS.scada,
properties: {
id: "4bfa834b-cbbb-5f35-9523-7487ac021ed2",
point_id: "aaedc54a-e5b4-5791-b729-4b7e838a8d00",
point_external_id: "36455",
point_name: "DY22东市南街环城南路西段交叉口",
device_external_id: "26825171",
device_type_name: "2代水质仪"
scada_id: "4bfa834b-cbbb-5f35-9523-7487ac021ed2",
site_external_id: "36455",
name: "DY22东市南街环城南路西段交叉口",
external_id: "26825171",
kind: "water_quality"
}
} as unknown as MapGeoJSONFeature);
expect(detail).toMatchObject({
id: "aaedc54a-e5b4-5791-b729-4b7e838a8d00",
id: "4bfa834b-cbbb-5f35-9523-7487ac021ed2",
layer: "scada",
title: "DY22东市南街环城南路西段交叉口",
subtitle: "2代水质仪 · 设备 26825171"
subtitle: "water_quality · 设备 26825171"
});
});
});
+5 -3
View File
@@ -3,10 +3,12 @@ import type { DetailFeature } from "../types";
import { formatValue } from "../utils/format-value";
import { SOURCE_LAYERS, type WaterNetworkSourceId } from "./sources";
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
export function getFeatureId(feature: MapGeoJSONFeature) {
const layer = getWaterNetworkSourceId(feature);
const raw = layer === "scada"
? feature.id ?? feature.properties?.id ?? feature.properties?.point_id ?? feature.properties?.point_external_id
? feature.properties?.scada_id ?? (typeof feature.id === "string" && UUID_PATTERN.test(feature.id) ? feature.id : undefined)
: feature.id ?? feature.properties?.id;
return raw === undefined || raw === null ? "" : String(raw);
@@ -70,8 +72,8 @@ function getFeaturePresentation(
};
case "scada":
return {
title: String(properties.point_name || `SCADA 测点 ${displayId}`),
subtitle: `${formatValue(properties.device_type_name)} · 设备 ${formatValue(properties.device_external_id)}`
title: String(properties.name || `SCADA 测点 ${displayId}`),
subtitle: `${formatValue(properties.kind)} · 设备 ${formatValue(properties.external_id)}`
};
}
}
+4 -4
View File
@@ -14,10 +14,10 @@ import { waterNetworkLayers } from "./layers";
describe("SCADA map presentation", () => {
it("maps the three authoritative device types and falls back to unknown", () => {
expect(SCADA_ICON_EXPRESSION).toEqual([
"match", ["to-number", ["get", "device_type_id"]],
72, SCADA_IMAGE_IDS.waterQuality,
58, SCADA_IMAGE_IDS.radarLevel,
45, SCADA_IMAGE_IDS.ultrasonicFlow,
"match", ["get", "kind"],
"water_quality", SCADA_IMAGE_IDS.waterQuality,
"radar_level", SCADA_IMAGE_IDS.radarLevel,
"ultrasonic_flow", SCADA_IMAGE_IDS.ultrasonicFlow,
SCADA_IMAGE_IDS.unknown
]);
});
+4 -4
View File
@@ -27,10 +27,10 @@ export const SCADA_IMAGE_IDS = {
} as const;
export const SCADA_ICON_EXPRESSION: ExpressionSpecification = [
"match", ["to-number", ["get", "device_type_id"]],
72, SCADA_IMAGE_IDS.waterQuality,
58, SCADA_IMAGE_IDS.radarLevel,
45, SCADA_IMAGE_IDS.ultrasonicFlow,
"match", ["get", "kind"],
"water_quality", SCADA_IMAGE_IDS.waterQuality,
"radar_level", SCADA_IMAGE_IDS.radarLevel,
"ultrasonic_flow", SCADA_IMAGE_IDS.ultrasonicFlow,
SCADA_IMAGE_IDS.unknown
];
+1 -1
View File
@@ -10,7 +10,7 @@ describe("createWaterNetworkSources", () => {
expect(scada.tiles).toEqual([
expect.stringContaining("/lingang:scada_points/point/WebMercatorQuad/")
]);
expect(scada.promoteId).toBe("point_id");
expect(scada.promoteId).toBe("scada_id");
});
});
+1 -1
View File
@@ -64,7 +64,7 @@ export function createWaterNetworkSources() {
SOURCE_LAYERS.scada,
"point",
[121.7350340307058, 30.84636502815, 121.97051839928491, 30.994737681416165],
"point_id"
"scada_id"
)
};
}