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
This commit is contained in:
2026-06-14 13:52:43 +08:00
parent f808efdc80
commit 542c038801
11 changed files with 111 additions and 0 deletions
@@ -0,0 +1,13 @@
package com.water.production.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import java.time.LocalDateTime;
@Data @TableName("prod_alert_record")
public class AlertRecord {
@TableId(type = IdType.AUTO) private Long id;
private String deviceId, area, level; // 一般/重要/紧急
private String alertType, description;
private Integer status; // 0活跃 1已确认 2已处理
private Long confirmedBy, handledBy;
@TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime;
private LocalDateTime confirmedTime, handledTime;
}
@@ -0,0 +1,11 @@
package com.water.production.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import java.time.LocalDateTime;
@Data @TableName("prod_device_status")
public class DeviceStatus {
@TableId(type = IdType.AUTO) private Long id;
private String deviceId, deviceName, deviceType;
private String area; private Integer status; // 0离线 1在线 2故障
private Double lng, lat;
private LocalDateTime lastOnlineTime;
}
@@ -0,0 +1,11 @@
package com.water.production.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import java.time.LocalDateTime;
@Data @TableName("prod_flow_pressure")
public class FlowPressureMonitor {
@TableId(type = IdType.AUTO) private Long id;
private String deviceId, area, positionType; // 流量/压力/液位
private Double value; private String unit;
private Double lng, lat;
@TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime;
}
@@ -0,0 +1,10 @@
package com.water.production.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
@Data @TableName("prod_video_camera")
public class VideoCamera {
@TableId(type = IdType.AUTO) private Long id;
private String cameraId, name, area;
private String streamUrl; private Integer status; // 0离线 1在线
private Double lng, lat;
}
@@ -0,0 +1,11 @@
package com.water.production.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import java.time.LocalDateTime;
@Data @TableName("prod_water_quality")
public class WaterQualityRecord {
@TableId(type = IdType.AUTO) private Long id;
private String station, positionType; // 原水/出厂水/末梢水
private Double turbidity, ph, residualChlorine, color, odor;
private String result; // 合格/不合格
@TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime;
}
@@ -0,0 +1,5 @@
package com.water.production.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.water.production.entity.AlertRecord;
import org.apache.ibatis.annotations.Mapper;
@Mapper public interface AlertRecordMapper extends BaseMapper<AlertRecord> {}
@@ -0,0 +1,5 @@
package com.water.production.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.water.production.entity.DeviceStatus;
import org.apache.ibatis.annotations.Mapper;
@Mapper public interface DeviceStatusMapper extends BaseMapper<DeviceStatus> {}
@@ -0,0 +1,5 @@
package com.water.production.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.water.production.entity.FlowPressureMonitor;
import org.apache.ibatis.annotations.Mapper;
@Mapper public interface FlowPressureMonitorMapper extends BaseMapper<FlowPressureMonitor> {}
@@ -0,0 +1,5 @@
package com.water.production.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.water.production.entity.VideoCamera;
import org.apache.ibatis.annotations.Mapper;
@Mapper public interface VideoCameraMapper extends BaseMapper<VideoCamera> {}
@@ -0,0 +1,5 @@
package com.water.production.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.water.production.entity.WaterQualityRecord;
import org.apache.ibatis.annotations.Mapper;
@Mapper public interface WaterQualityRecordMapper extends BaseMapper<WaterQualityRecord> {}
@@ -0,0 +1,30 @@
CREATE TABLE IF NOT EXISTS prod_water_quality (
id BIGSERIAL PRIMARY KEY, station VARCHAR(100), position_type VARCHAR(20),
turbidity DOUBLE PRECISION, ph DOUBLE PRECISION,
residual_chlorine DOUBLE PRECISION, color DOUBLE PRECISION, odor DOUBLE PRECISION,
result VARCHAR(20), created_time TIMESTAMP DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS prod_flow_pressure (
id BIGSERIAL PRIMARY KEY, device_id VARCHAR(50), area VARCHAR(50),
position_type VARCHAR(20), value DOUBLE PRECISION, unit VARCHAR(20),
lng DOUBLE PRECISION, lat DOUBLE PRECISION,
created_time TIMESTAMP DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS prod_device_status (
id BIGSERIAL PRIMARY KEY, device_id VARCHAR(50), device_name VARCHAR(100),
device_type VARCHAR(30), area VARCHAR(50), status INT DEFAULT 0,
lng DOUBLE PRECISION, lat DOUBLE PRECISION,
last_online_time TIMESTAMP
);
CREATE TABLE IF NOT EXISTS prod_alert_record (
id BIGSERIAL PRIMARY KEY, device_id VARCHAR(50), area VARCHAR(50),
level VARCHAR(10), alert_type VARCHAR(30), description TEXT,
status INT DEFAULT 0, confirmed_by BIGINT, handled_by BIGINT,
created_time TIMESTAMP DEFAULT NOW(),
confirmed_time TIMESTAMP, handled_time TIMESTAMP
);
CREATE TABLE IF NOT EXISTS prod_video_camera (
id BIGSERIAL PRIMARY KEY, camera_id VARCHAR(50), name VARCHAR(100),
area VARCHAR(50), stream_url VARCHAR(500), status INT DEFAULT 0,
lng DOUBLE PRECISION, lat DOUBLE PRECISION
);