Prechádzať zdrojové kódy

feat(water-level): 添加水位监测数据管理功能

- 创建WaterLevelApplication主应用类并配置包扫描路径
- 定义WaterMonitorData实体类用于水位监测数据存储
- 实现WaterMonitorDataController提供分页查询、统计分析等REST接口
- 开发WaterMonitorDataMapper及XML映射文件处理数据库操作
- 构建WaterMonitorDataService业务层封装统计功能
- 实现分页查询、设备分组统计、超限数据查询等核心功能
- 添加在线设备统计、最新数据获取等可视化分析接口
林仔 2 mesiacov pred
rodič
commit
a27a55c400

+ 114 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/base/water/WaterMonitorDataController.java

@@ -0,0 +1,114 @@
+package com.zksy.web.controller.base.water;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.base.water.domain.WaterMonitorData;
+import com.zksy.base.water.service.WaterMonitorDataService;
+import com.zksy.common.annotation.Anonymous;
+import com.zksy.common.core.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 水位监测数据分析统计接口
+ *
+ * @author zksy
+ */
+@RestController
+@RequestMapping("/water/monitor")
+@Api(tags = "水位监测数据分析统计接口")
+@Anonymous
+public class WaterMonitorDataController {
+
+    @Autowired
+    private WaterMonitorDataService waterMonitorDataService;
+
+    /**
+     * 分页查询水位监测数据
+     */
+    @GetMapping("/visualization/page")
+    @ApiOperation(value = "分页查询水位监测数据", notes = "支持设备编码模糊查询、数据类型筛选")
+    public AjaxResult page(
+            @ApiParam(value = "页码", defaultValue = "1") @RequestParam(defaultValue = "1") Integer pageNum,
+            @ApiParam(value = "每页条数", defaultValue = "10") @RequestParam(defaultValue = "10") Integer pageSize,
+            @ApiParam(value = "设备编码") @RequestParam(required = false) String deviceCode,
+            @ApiParam(value = "数据类型(0x31=上报,0x34=结束)") @RequestParam(required = false) String dataType) {
+        WaterMonitorData waterMonitorData = new WaterMonitorData();
+        waterMonitorData.setDeviceCode(deviceCode);
+        waterMonitorData.setDataType(dataType);
+        Page<WaterMonitorData> page = new Page<>(pageNum, pageSize);
+        IPage<WaterMonitorData> resultPage = waterMonitorDataService.selectWaterMonitorDataPage(page, waterMonitorData);
+        return AjaxResult.success("查询成功", resultPage);
+    }
+
+    /**
+     * 按设备分组统计水位数据(最大值、最小值、平均值)
+     */
+    @GetMapping("/visualization/statistics/device")
+    @ApiOperation(value = "按设备分组统计水位数据", notes = "统计指定时间段内各设备的水位最大/最小/平均值")
+    public AjaxResult statisticsByDevice(
+            @ApiParam(value = "开始时间", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
+            @ApiParam(value = "结束时间", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {
+        List<Map<String, Object>> statistics = waterMonitorDataService.statisticsByDevice(startTime, endTime);
+        return AjaxResult.success("统计成功", statistics);
+    }
+
+    /**
+     * 查询水位超限数据
+     */
+    @GetMapping("/visualization/over-limit")
+    @ApiOperation(value = "查询水位超限数据", notes = "查询指定时间段内水位超过阈值的监测数据")
+    public AjaxResult selectOverLimitData(
+            @ApiParam(value = "页码", defaultValue = "1") @RequestParam(defaultValue = "1") Integer pageNum,
+            @ApiParam(value = "每页条数", defaultValue = "10") @RequestParam(defaultValue = "10") Integer pageSize,
+            @ApiParam(value = "水位阈值", required = true) @RequestParam String threshold,
+            @ApiParam(value = "开始时间", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
+            @ApiParam(value = "结束时间", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {
+        Page<WaterMonitorData> page = new Page<>(pageNum, pageSize);
+        IPage<WaterMonitorData> resultPage = waterMonitorDataService.selectOverLimitData(page, threshold, startTime, endTime);
+        return AjaxResult.success("查询成功", resultPage);
+    }
+
+    /**
+     * 统计在线设备数量(按天)
+     */
+    @GetMapping("/visualization/statistics/online-device")
+    @ApiOperation(value = "统计在线设备数量", notes = "统计指定时间段内每天的在线设备数量")
+    public AjaxResult statisticsOnlineDevice(
+            @ApiParam(value = "开始时间", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
+            @ApiParam(value = "结束时间", required = true) @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {
+        List<Map<String, Object>> statistics = waterMonitorDataService.statisticsOnlineDevice(startTime, endTime);
+        return AjaxResult.success("统计成功", statistics);
+    }
+
+    /**
+     * 获取各设备最新的水位监测数据
+     */
+    @GetMapping("/visualization/latest/device")
+    @ApiOperation(value = "获取各设备最新数据", notes = "获取每个设备最新上报的水位监测数据")
+    public AjaxResult getLatestDataByDevice() {
+        List<WaterMonitorData> latestData = waterMonitorDataService.getLatestDataByDevice();
+        return AjaxResult.success("查询成功", latestData);
+    }
+    /**
+     * 获取所有设备编码
+     */
+    @GetMapping("/visualization/devices")
+    @ApiOperation(value = "获取所有设备编码", notes = "获取所有设备编码")
+    public AjaxResult getAllDeviceCodes() {
+        List<String> deviceCodes = waterMonitorDataService.listObjs(new QueryWrapper<WaterMonitorData>().select("DISTINCT device_code"));
+        return AjaxResult.success("查询成功", deviceCodes);
+    }
+}

+ 170 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/water/domain/WaterMonitorData.java

@@ -0,0 +1,170 @@
+package com.zksy.base.water.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+
+/**
+ * 水位监测数据记录表
+ * @TableName water_monitor_data
+ */
+@TableName(value ="water_monitor_data")
+@Data
+public class WaterMonitorData implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+     * 系统识别码
+     */
+    @TableField(value = "system_identifier")
+    private String systemIdentifier;
+
+    /**
+     * 整帧长度(字节数)
+     */
+    @TableField(value = "frame_length")
+    private String frameLength;
+
+    /**
+     * 包序号
+     */
+    @TableField(value = "packet_sequence")
+    private String packetSequence;
+
+    /**
+     * 数据类型(0x31=上报,0x34=结束)
+     */
+    @TableField(value = "data_type")
+    private String dataType;
+
+    /**
+     * 源地址(BCD格式)
+     */
+    @TableField(value = "source_addr")
+    private String sourceAddr;
+
+    /**
+     * 目的地址长度
+     */
+    @TableField(value = "dest_addr_length")
+    private String destAddrLength;
+
+    /**
+     * 目的地址(BCD格式)
+     */
+    @TableField(value = "dest_addr")
+    private String destAddr;
+
+    /**
+     * 设备编码
+     */
+    @TableField(value = "device_code")
+    private String deviceCode;
+
+    /**
+     * 功能码
+     */
+    @TableField(value = "function_code")
+    private String functionCode;
+
+    /**
+     * 保留1
+     */
+    @TableField(value = "reserve1")
+    private String reserve1;
+
+    /**
+     * 记录数量
+     */
+    @TableField(value = "record_count")
+    private String recordCount;
+
+    /**
+     * 记录格式(按位判断字段)
+     */
+    @TableField(value = "record_format")
+    private String recordFormat;
+
+    /**
+     * 电源电压(V)
+     */
+    @TableField(value = "power_voltage")
+    private String powerVoltage;
+
+    /**
+     * 现场状态
+     */
+    @TableField(value = "field_status")
+    private String fieldStatus;
+
+    /**
+     * 是否最后一包(现场状态D3位)
+     */
+    @TableField(value = "is_last_packet")
+    private Integer isLastPacket;
+
+    /**
+     * 协议版本
+     */
+    @TableField(value = "protocol_version")
+    private String protocolVersion;
+
+    /**
+     * 参数版本
+     */
+    @TableField(value = "param_version")
+    private String paramVersion;
+
+    /**
+     * 信号质量
+     */
+    @TableField(value = "signal_quality")
+    private String signalQuality;
+
+    /**
+     * 保留3
+     */
+    @TableField(value = "reserve3")
+    private String reserve3;
+
+    /**
+     * 时间戳(2000-1-1开始)
+     */
+    @TableField(value = "timestamp_since")
+    private LocalDateTime timestampSince;
+
+    /**
+     * 水位
+     */
+    @TableField(value = "water_level")
+    private String waterLevel;
+
+    /**
+     * 开关量
+     */
+    @TableField(value = "switch_value")
+    private String switchValue;
+
+    /**
+     * 历史记录详情(多字段拼接)
+     */
+    @TableField(value = "history_records")
+    private String historyRecords;
+
+    /**
+     * 数据插入时间
+     */
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 55 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/water/mapper/WaterMonitorDataMapper.java

@@ -0,0 +1,55 @@
+package com.zksy.base.water.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.base.water.domain.WaterMonitorData;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 水位监测数据 Mapper 接口
+ *
+ * @author zksy
+ */
+public interface WaterMonitorDataMapper extends BaseMapper<WaterMonitorData> {
+
+    /**
+     * 按设备分组统计水位数据
+     */
+    @Select("SELECT device_code, " +
+            "MAX(water_level) as max_water_level, " +
+            "MIN(water_level) as min_water_level, " +
+            "AVG(water_level) as avg_water_level " +
+            "FROM water_monitor_data " +
+            "WHERE create_time BETWEEN #{startTime} AND #{endTime} " +
+            "GROUP BY device_code")
+    List<Map<String, Object>> statisticsByDevice(@Param("startTime") LocalDateTime startTime,
+                                                 @Param("endTime") LocalDateTime endTime);
+
+    /**
+     * 查询水位超限数据(自定义阈值)
+     */
+    @Select("SELECT * FROM water_monitor_data " +
+            "WHERE water_level > #{threshold} " +
+            "AND create_time BETWEEN #{startTime} AND #{endTime}")
+    IPage<WaterMonitorData> selectOverLimitData(Page<WaterMonitorData> page,
+                                                @Param("threshold") String threshold,
+                                                @Param("startTime") LocalDateTime startTime,
+                                                @Param("endTime") LocalDateTime endTime);
+
+    /**
+     * 按时间维度统计设备在线状态
+     */
+    @Select("SELECT DATE(create_time) as stat_date, " +
+            "COUNT(DISTINCT device_code) as online_device_count " +
+            "FROM water_monitor_data " +
+            "WHERE create_time BETWEEN #{startTime} AND #{endTime} " +
+            "GROUP BY DATE(create_time)")
+    List<Map<String, Object>> statisticsOnlineDevice(@Param("startTime") LocalDateTime startTime,
+                                                     @Param("endTime") LocalDateTime endTime);
+}

+ 42 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/water/service/WaterMonitorDataService.java

@@ -0,0 +1,42 @@
+package com.zksy.base.water.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.base.water.domain.WaterMonitorData;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 水位监测数据 业务层
+ * @author zksy
+ */
+public interface WaterMonitorDataService extends IService<WaterMonitorData> {
+    /**
+     * 分页查询水位监测数据
+     */
+    IPage<WaterMonitorData> selectWaterMonitorDataPage(Page<WaterMonitorData> page, WaterMonitorData waterMonitorData);
+
+    /**
+     * 按设备分组统计水位数据
+     */
+    List<Map<String, Object>> statisticsByDevice(LocalDateTime startTime, LocalDateTime endTime);
+
+    /**
+     * 查询水位超限数据
+     */
+    IPage<WaterMonitorData> selectOverLimitData(Page<WaterMonitorData> page, String threshold,
+                                                LocalDateTime startTime, LocalDateTime endTime);
+
+    /**
+     * 统计指定时间段内在线设备数量(按天)
+     */
+    List<Map<String, Object>> statisticsOnlineDevice(LocalDateTime startTime, LocalDateTime endTime);
+
+    /**
+     * 获取最新的水位监测数据(按设备分组)
+     */
+    List<WaterMonitorData> getLatestDataByDevice();
+}

+ 68 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/water/service/impl/WaterMonitorDataServiceImpl.java

@@ -0,0 +1,68 @@
+package com.zksy.base.water.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.base.water.domain.WaterMonitorData;
+import com.zksy.base.water.service.WaterMonitorDataService;
+import com.zksy.base.water.mapper.WaterMonitorDataMapper;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 针对表【water_monitor_data(水位监测数据记录表)】的数据库操作Service实现
+* @createDate 2026-01-21 11:15:38
+*/
+@Service
+public class WaterMonitorDataServiceImpl extends ServiceImpl<WaterMonitorDataMapper, WaterMonitorData>
+    implements WaterMonitorDataService{
+    @Override
+    public IPage<WaterMonitorData> selectWaterMonitorDataPage(Page<WaterMonitorData> page, WaterMonitorData waterMonitorData) {
+        LambdaQueryWrapper<WaterMonitorData> queryWrapper = new LambdaQueryWrapper<>();
+        // 设备编码模糊查询
+        if (waterMonitorData.getDeviceCode() != null && !waterMonitorData.getDeviceCode().isEmpty()) {
+            queryWrapper.like(WaterMonitorData::getDeviceCode, waterMonitorData.getDeviceCode());
+        }
+        // 数据类型筛选
+        if (waterMonitorData.getDataType() != null && !waterMonitorData.getDataType().isEmpty()) {
+            queryWrapper.eq(WaterMonitorData::getDataType, waterMonitorData.getDataType());
+        }
+        // 按创建时间降序排列
+        queryWrapper.orderByDesc(WaterMonitorData::getCreateTime);
+        return baseMapper.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<Map<String, Object>> statisticsByDevice(LocalDateTime startTime, LocalDateTime endTime) {
+        return baseMapper.statisticsByDevice(startTime, endTime);
+    }
+
+    @Override
+    public IPage<WaterMonitorData> selectOverLimitData(Page<WaterMonitorData> page, String threshold,
+                                                       LocalDateTime startTime, LocalDateTime endTime) {
+        return baseMapper.selectOverLimitData(page, threshold, startTime, endTime);
+    }
+
+    @Override
+    public List<Map<String, Object>> statisticsOnlineDevice(LocalDateTime startTime, LocalDateTime endTime) {
+        return baseMapper.statisticsOnlineDevice(startTime, endTime);
+    }
+
+    @Override
+    public List<WaterMonitorData> getLatestDataByDevice() {
+        // 子查询获取每个设备最新的记录ID
+        String sql = "SELECT MAX(id) FROM water_monitor_data GROUP BY device_code";
+        LambdaQueryWrapper<WaterMonitorData> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.inSql(WaterMonitorData::getId, sql);
+        return baseMapper.selectList(queryWrapper);
+    }
+}
+
+
+
+

+ 46 - 0
pipe-network-service/zksy-system/src/main/resources/mapper/base/water/WaterMonitorDataMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zksy.base.water.mapper.WaterMonitorDataMapper">
+
+    <resultMap id="BaseResultMap" type="com.zksy.base.water.domain.WaterMonitorData">
+            <id property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="systemIdentifier" column="system_identifier" jdbcType="VARCHAR"/>
+            <result property="frameLength" column="frame_length" jdbcType="VARCHAR"/>
+            <result property="packetSequence" column="packet_sequence" jdbcType="VARCHAR"/>
+            <result property="dataType" column="data_type" jdbcType="VARCHAR"/>
+            <result property="sourceAddr" column="source_addr" jdbcType="VARCHAR"/>
+            <result property="destAddrLength" column="dest_addr_length" jdbcType="VARCHAR"/>
+            <result property="destAddr" column="dest_addr" jdbcType="VARCHAR"/>
+            <result property="deviceCode" column="device_code" jdbcType="VARCHAR"/>
+            <result property="functionCode" column="function_code" jdbcType="VARCHAR"/>
+            <result property="reserve1" column="reserve1" jdbcType="VARCHAR"/>
+            <result property="recordCount" column="record_count" jdbcType="VARCHAR"/>
+            <result property="recordFormat" column="record_format" jdbcType="VARCHAR"/>
+            <result property="powerVoltage" column="power_voltage" jdbcType="VARCHAR"/>
+            <result property="fieldStatus" column="field_status" jdbcType="VARCHAR"/>
+            <result property="isLastPacket" column="is_last_packet" jdbcType="TINYINT"/>
+            <result property="protocolVersion" column="protocol_version" jdbcType="VARCHAR"/>
+            <result property="paramVersion" column="param_version" jdbcType="VARCHAR"/>
+            <result property="signalQuality" column="signal_quality" jdbcType="VARCHAR"/>
+            <result property="reserve3" column="reserve3" jdbcType="VARCHAR"/>
+            <result property="timestampSince" column="timestamp_since" jdbcType="TIMESTAMP"/>
+            <result property="waterLevel" column="water_level" jdbcType="VARCHAR"/>
+            <result property="switchValue" column="switch_value" jdbcType="VARCHAR"/>
+            <result property="historyRecords" column="history_records" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,system_identifier,frame_length,
+        packet_sequence,data_type,source_addr,
+        dest_addr_length,dest_addr,device_code,
+        function_code,reserve1,record_count,
+        record_format,power_voltage,field_status,
+        is_last_packet,protocol_version,param_version,
+        signal_quality,reserve3,timestamp_since,
+        water_level,switch_value,history_records,
+        create_time
+    </sql>
+</mapper>

+ 26 - 0
water-level-service/src/main/java/com/zksy/water/WaterLevelApplication.java

@@ -0,0 +1,26 @@
+package com.zksy.water;
+
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@MapperScan({
+        "com.zksy.water.mapper",
+        "com.zksy.base.mapper",
+        "com.zksy.system.mapper"
+})
+@SpringBootApplication(scanBasePackages = {
+        "com.zksy.water",
+        "com.zksy.api",
+        "com.zksy.base.service",
+        "com.zksy.system.service",
+        "com.zksy.common",
+        "com.zksy.utils"
+})
+public class WaterLevelApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(WaterLevelApplication.class, args);
+        System.out.println("平升水位流量计服务启动成功");
+    }
+}

+ 170 - 0
water-level-service/src/main/java/com/zksy/water/domain/WaterMonitorData.java

@@ -0,0 +1,170 @@
+package com.zksy.water.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+
+/**
+ * 水位监测数据记录表
+ * @TableName water_monitor_data
+ */
+@TableName(value ="water_monitor_data")
+@Data
+public class WaterMonitorData implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+
+    /**
+     * 系统识别码
+     */
+    @TableField(value = "system_identifier")
+    private String systemIdentifier;
+
+    /**
+     * 整帧长度(字节数)
+     */
+    @TableField(value = "frame_length")
+    private String frameLength;
+
+    /**
+     * 包序号
+     */
+    @TableField(value = "packet_sequence")
+    private String packetSequence;
+
+    /**
+     * 数据类型(0x31=上报,0x34=结束)
+     */
+    @TableField(value = "data_type")
+    private String dataType;
+
+    /**
+     * 源地址(BCD格式)
+     */
+    @TableField(value = "source_addr")
+    private String sourceAddr;
+
+    /**
+     * 目的地址长度
+     */
+    @TableField(value = "dest_addr_length")
+    private String destAddrLength;
+
+    /**
+     * 目的地址(BCD格式)
+     */
+    @TableField(value = "dest_addr")
+    private String destAddr;
+
+    /**
+     * 设备编码
+     */
+    @TableField(value = "device_code")
+    private String deviceCode;
+
+    /**
+     * 功能码
+     */
+    @TableField(value = "function_code")
+    private String functionCode;
+
+    /**
+     * 保留1
+     */
+    @TableField(value = "reserve1")
+    private String reserve1;
+
+    /**
+     * 记录数量
+     */
+    @TableField(value = "record_count")
+    private String recordCount;
+
+    /**
+     * 记录格式(按位判断字段)
+     */
+    @TableField(value = "record_format")
+    private String recordFormat;
+
+    /**
+     * 电源电压(V)
+     */
+    @TableField(value = "power_voltage")
+    private String powerVoltage;
+
+    /**
+     * 现场状态
+     */
+    @TableField(value = "field_status")
+    private String fieldStatus;
+
+    /**
+     * 是否最后一包(现场状态D3位)
+     */
+    @TableField(value = "is_last_packet")
+    private Boolean isLastPacket;
+
+    /**
+     * 协议版本
+     */
+    @TableField(value = "protocol_version")
+    private String protocolVersion;
+
+    /**
+     * 参数版本
+     */
+    @TableField(value = "param_version")
+    private String paramVersion;
+
+    /**
+     * 信号质量
+     */
+    @TableField(value = "signal_quality")
+    private String signalQuality;
+
+    /**
+     * 保留3
+     */
+    @TableField(value = "reserve3")
+    private String reserve3;
+
+    /**
+     * 时间戳(2000-1-1开始)
+     */
+    @TableField(value = "timestamp_since")
+    private LocalDateTime timestampSince;
+
+    /**
+     * 水位
+     */
+    @TableField(value = "water_level")
+    private String waterLevel;
+
+    /**
+     * 开关量
+     */
+    @TableField(value = "switch_value")
+    private String switchValue;
+
+    /**
+     * 历史记录详情(多字段拼接)
+     */
+    @TableField(value = "history_records")
+    private String historyRecords;
+
+    /**
+     * 数据插入时间
+     */
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 18 - 0
water-level-service/src/main/java/com/zksy/water/mapper/WaterMonitorDataMapper.java

@@ -0,0 +1,18 @@
+package com.zksy.water.mapper;
+
+import com.zksy.water.domain.WaterMonitorData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【water_monitor_data(水位监测数据记录表)】的数据库操作Mapper
+* @createDate 2026-01-19 11:28:38
+* @Entity com.zksy.water.domain.WaterMonitorData
+*/
+public interface WaterMonitorDataMapper extends BaseMapper<WaterMonitorData> {
+
+}
+
+
+
+

+ 13 - 0
water-level-service/src/main/java/com/zksy/water/service/WaterMonitorDataService.java

@@ -0,0 +1,13 @@
+package com.zksy.water.service;
+
+import com.zksy.water.domain.WaterMonitorData;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【water_monitor_data(水位监测数据记录表)】的数据库操作Service
+* @createDate 2026-01-19 11:28:38
+*/
+public interface WaterMonitorDataService extends IService<WaterMonitorData> {
+
+}

+ 22 - 0
water-level-service/src/main/java/com/zksy/water/service/impl/WaterMonitorDataServiceImpl.java

@@ -0,0 +1,22 @@
+package com.zksy.water.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.water.domain.WaterMonitorData;
+import com.zksy.water.service.WaterMonitorDataService;
+import com.zksy.water.mapper.WaterMonitorDataMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【water_monitor_data(水位监测数据记录表)】的数据库操作Service实现
+* @createDate 2026-01-19 11:28:38
+*/
+@Service
+public class WaterMonitorDataServiceImpl extends ServiceImpl<WaterMonitorDataMapper, WaterMonitorData>
+    implements WaterMonitorDataService{
+
+}
+
+
+
+

+ 46 - 0
water-level-service/src/main/resources/mapper/WaterMonitorDataMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zksy.water.mapper.WaterMonitorDataMapper">
+
+    <resultMap id="BaseResultMap" type="com.zksy.water.domain.WaterMonitorData">
+            <id property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="systemIdentifier" column="system_identifier" jdbcType="VARCHAR"/>
+            <result property="frameLength" column="frame_length" jdbcType="VARCHAR"/>
+            <result property="packetSequence" column="packet_sequence" jdbcType="VARCHAR"/>
+            <result property="dataType" column="data_type" jdbcType="VARCHAR"/>
+            <result property="sourceAddr" column="source_addr" jdbcType="VARCHAR"/>
+            <result property="destAddrLength" column="dest_addr_length" jdbcType="VARCHAR"/>
+            <result property="destAddr" column="dest_addr" jdbcType="VARCHAR"/>
+            <result property="deviceCode" column="device_code" jdbcType="VARCHAR"/>
+            <result property="functionCode" column="function_code" jdbcType="VARCHAR"/>
+            <result property="reserve1" column="reserve1" jdbcType="VARCHAR"/>
+            <result property="recordCount" column="record_count" jdbcType="VARCHAR"/>
+            <result property="recordFormat" column="record_format" jdbcType="VARCHAR"/>
+            <result property="powerVoltage" column="power_voltage" jdbcType="VARCHAR"/>
+            <result property="fieldStatus" column="field_status" jdbcType="VARCHAR"/>
+            <result property="isLastPacket" column="is_last_packet" jdbcType="TINYINT"/>
+            <result property="protocolVersion" column="protocol_version" jdbcType="VARCHAR"/>
+            <result property="paramVersion" column="param_version" jdbcType="VARCHAR"/>
+            <result property="signalQuality" column="signal_quality" jdbcType="VARCHAR"/>
+            <result property="reserve3" column="reserve3" jdbcType="VARCHAR"/>
+            <result property="timestampSince" column="timestamp_since" jdbcType="TIMESTAMP"/>
+            <result property="waterLevel" column="water_level" jdbcType="VARCHAR"/>
+            <result property="switchValue" column="switch_value" jdbcType="VARCHAR"/>
+            <result property="historyRecords" column="history_records" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,system_identifier,frame_length,
+        packet_sequence,data_type,source_addr,
+        dest_addr_length,dest_addr,device_code,
+        function_code,reserve1,record_count,
+        record_format,power_voltage,field_status,
+        is_last_packet,protocol_version,param_version,
+        signal_quality,reserve3,timestamp_since,
+        water_level,switch_value,history_records,
+        create_time
+    </sql>
+</mapper>