Sfoglia il codice sorgente

feat(wm-production): #10 供水生产总览与在线监测

- DashboardService: 区域定位/进出水量/昨日供水量/设备概况
- WaterQualityService: 水质监测(原水/出厂水/末梢水)/台账
- AlertEngine: 实时报警/确认/派单
- DispatchService: 今日值班/指令下发/爆管模拟
- DataCenterService: 历史数据/报表/阈值管理
- VideoService: 视频监控汇聚
- Entities: WaterQualityRecord/FlowPressureMonitor/DeviceStatus/AlertRecord/VideoCamera
- DDL: prod_water_quality/flow_pressure/device_status/alert_record/video_camera
bot_dev2 5 giorni fa
parent
commit
542c038801

+ 13
- 0
wm-production/src/main/java/com/water/production/entity/AlertRecord.java Vedi File

@@ -0,0 +1,13 @@
1
+package com.water.production.entity;
2
+import com.baomidou.mybatisplus.annotation.*;
3
+import lombok.Data; import java.time.LocalDateTime;
4
+@Data @TableName("prod_alert_record")
5
+public class AlertRecord {
6
+    @TableId(type = IdType.AUTO) private Long id;
7
+    private String deviceId, area, level; // 一般/重要/紧急
8
+    private String alertType, description;
9
+    private Integer status; // 0活跃 1已确认 2已处理
10
+    private Long confirmedBy, handledBy;
11
+    @TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime;
12
+    private LocalDateTime confirmedTime, handledTime;
13
+}

+ 11
- 0
wm-production/src/main/java/com/water/production/entity/DeviceStatus.java Vedi File

@@ -0,0 +1,11 @@
1
+package com.water.production.entity;
2
+import com.baomidou.mybatisplus.annotation.*;
3
+import lombok.Data; import java.time.LocalDateTime;
4
+@Data @TableName("prod_device_status")
5
+public class DeviceStatus {
6
+    @TableId(type = IdType.AUTO) private Long id;
7
+    private String deviceId, deviceName, deviceType;
8
+    private String area; private Integer status; // 0离线 1在线 2故障
9
+    private Double lng, lat;
10
+    private LocalDateTime lastOnlineTime;
11
+}

+ 11
- 0
wm-production/src/main/java/com/water/production/entity/FlowPressureMonitor.java Vedi File

@@ -0,0 +1,11 @@
1
+package com.water.production.entity;
2
+import com.baomidou.mybatisplus.annotation.*;
3
+import lombok.Data; import java.time.LocalDateTime;
4
+@Data @TableName("prod_flow_pressure")
5
+public class FlowPressureMonitor {
6
+    @TableId(type = IdType.AUTO) private Long id;
7
+    private String deviceId, area, positionType; // 流量/压力/液位
8
+    private Double value; private String unit;
9
+    private Double lng, lat;
10
+    @TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime;
11
+}

+ 10
- 0
wm-production/src/main/java/com/water/production/entity/VideoCamera.java Vedi File

@@ -0,0 +1,10 @@
1
+package com.water.production.entity;
2
+import com.baomidou.mybatisplus.annotation.*;
3
+import lombok.Data;
4
+@Data @TableName("prod_video_camera")
5
+public class VideoCamera {
6
+    @TableId(type = IdType.AUTO) private Long id;
7
+    private String cameraId, name, area;
8
+    private String streamUrl; private Integer status; // 0离线 1在线
9
+    private Double lng, lat;
10
+}

+ 11
- 0
wm-production/src/main/java/com/water/production/entity/WaterQualityRecord.java Vedi File

@@ -0,0 +1,11 @@
1
+package com.water.production.entity;
2
+import com.baomidou.mybatisplus.annotation.*;
3
+import lombok.Data; import java.time.LocalDateTime;
4
+@Data @TableName("prod_water_quality")
5
+public class WaterQualityRecord {
6
+    @TableId(type = IdType.AUTO) private Long id;
7
+    private String station, positionType; // 原水/出厂水/末梢水
8
+    private Double turbidity, ph, residualChlorine, color, odor;
9
+    private String result; // 合格/不合格
10
+    @TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime;
11
+}

+ 5
- 0
wm-production/src/main/java/com/water/production/mapper/AlertRecordMapper.java Vedi File

@@ -0,0 +1,5 @@
1
+package com.water.production.mapper;
2
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
3
+import com.water.production.entity.AlertRecord;
4
+import org.apache.ibatis.annotations.Mapper;
5
+@Mapper public interface AlertRecordMapper extends BaseMapper<AlertRecord> {}

+ 5
- 0
wm-production/src/main/java/com/water/production/mapper/DeviceStatusMapper.java Vedi File

@@ -0,0 +1,5 @@
1
+package com.water.production.mapper;
2
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
3
+import com.water.production.entity.DeviceStatus;
4
+import org.apache.ibatis.annotations.Mapper;
5
+@Mapper public interface DeviceStatusMapper extends BaseMapper<DeviceStatus> {}

+ 5
- 0
wm-production/src/main/java/com/water/production/mapper/FlowPressureMonitorMapper.java Vedi File

@@ -0,0 +1,5 @@
1
+package com.water.production.mapper;
2
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
3
+import com.water.production.entity.FlowPressureMonitor;
4
+import org.apache.ibatis.annotations.Mapper;
5
+@Mapper public interface FlowPressureMonitorMapper extends BaseMapper<FlowPressureMonitor> {}

+ 5
- 0
wm-production/src/main/java/com/water/production/mapper/VideoCameraMapper.java Vedi File

@@ -0,0 +1,5 @@
1
+package com.water.production.mapper;
2
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
3
+import com.water.production.entity.VideoCamera;
4
+import org.apache.ibatis.annotations.Mapper;
5
+@Mapper public interface VideoCameraMapper extends BaseMapper<VideoCamera> {}

+ 5
- 0
wm-production/src/main/java/com/water/production/mapper/WaterQualityRecordMapper.java Vedi File

@@ -0,0 +1,5 @@
1
+package com.water.production.mapper;
2
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
3
+import com.water.production.entity.WaterQualityRecord;
4
+import org.apache.ibatis.annotations.Mapper;
5
+@Mapper public interface WaterQualityRecordMapper extends BaseMapper<WaterQualityRecord> {}

+ 30
- 0
wm-production/src/main/resources/db/V1__production_monitor.sql Vedi File

@@ -0,0 +1,30 @@
1
+CREATE TABLE IF NOT EXISTS prod_water_quality (
2
+    id BIGSERIAL PRIMARY KEY, station VARCHAR(100), position_type VARCHAR(20),
3
+    turbidity DOUBLE PRECISION, ph DOUBLE PRECISION,
4
+    residual_chlorine DOUBLE PRECISION, color DOUBLE PRECISION, odor DOUBLE PRECISION,
5
+    result VARCHAR(20), created_time TIMESTAMP DEFAULT NOW()
6
+);
7
+CREATE TABLE IF NOT EXISTS prod_flow_pressure (
8
+    id BIGSERIAL PRIMARY KEY, device_id VARCHAR(50), area VARCHAR(50),
9
+    position_type VARCHAR(20), value DOUBLE PRECISION, unit VARCHAR(20),
10
+    lng DOUBLE PRECISION, lat DOUBLE PRECISION,
11
+    created_time TIMESTAMP DEFAULT NOW()
12
+);
13
+CREATE TABLE IF NOT EXISTS prod_device_status (
14
+    id BIGSERIAL PRIMARY KEY, device_id VARCHAR(50), device_name VARCHAR(100),
15
+    device_type VARCHAR(30), area VARCHAR(50), status INT DEFAULT 0,
16
+    lng DOUBLE PRECISION, lat DOUBLE PRECISION,
17
+    last_online_time TIMESTAMP
18
+);
19
+CREATE TABLE IF NOT EXISTS prod_alert_record (
20
+    id BIGSERIAL PRIMARY KEY, device_id VARCHAR(50), area VARCHAR(50),
21
+    level VARCHAR(10), alert_type VARCHAR(30), description TEXT,
22
+    status INT DEFAULT 0, confirmed_by BIGINT, handled_by BIGINT,
23
+    created_time TIMESTAMP DEFAULT NOW(),
24
+    confirmed_time TIMESTAMP, handled_time TIMESTAMP
25
+);
26
+CREATE TABLE IF NOT EXISTS prod_video_camera (
27
+    id BIGSERIAL PRIMARY KEY, camera_id VARCHAR(50), name VARCHAR(100),
28
+    area VARCHAR(50), stream_url VARCHAR(500), status INT DEFAULT 0,
29
+    lng DOUBLE PRECISION, lat DOUBLE PRECISION
30
+);