diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java
index ff4616d..0152940 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java
@@ -12,6 +12,7 @@ public interface PersistenceHandler {
String KNPCV1_MODBUS_TYPE = "knpc";
String ETC_MODBUS_TYPE = "etc";
String SCSS_MODBUS_TYPE = "scss";
+ String WEPS_PLUG_MODBUS_TYPE = "weps_plug";
String COMMAND_CACHE = "modbus:command:";
String DEVICE_INFO_CACHE = "info:device:";
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/MinuteLocalTimeDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/MinuteLocalTimeDecodeHandler.java
new file mode 100644
index 0000000..974744a
--- /dev/null
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/MinuteLocalTimeDecodeHandler.java
@@ -0,0 +1,38 @@
+package com.isu.gaswellwatch.modbus.data.decode.impl;
+
+import com.isu.gaswellwatch.modbus.data.ModbusMessage;
+import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 本地时间类型解析器
+ *
+ * @author 王仕龙
+ * 2024/12/09 14:40
+ */
+@Component(MinuteLocalTimeDecodeHandler.NAME + DecodeHandler.DECODE_NAME)
+public class MinuteLocalTimeDecodeHandler implements DecodeHandler {
+ public static final String NAME = "minuteLocalTime";
+
+ @Override
+ public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isNotBlank(value) && NumberUtils.isCreatable(value)) {
+ long totalMinutes = NumberUtils.createLong(value);
+ long hours = TimeUnit.MINUTES.toHours(totalMinutes);
+ long minutes = totalMinutes - TimeUnit.HOURS.toSeconds(hours);
+ return String.format("%02d:%02d:00", hours, minutes);
+ }
+ return value;
+ }
+
+ @Override
+ public void decode(Map commandPointMap, ModbusMessage.MessagePoint point) {
+ point.setValue(this.decode(commandPointMap, point.getValue()));
+ }
+
+}
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/impl/WepsPlugPersistenceHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/impl/WepsPlugPersistenceHandler.java
new file mode 100644
index 0000000..fce95ae
--- /dev/null
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/impl/WepsPlugPersistenceHandler.java
@@ -0,0 +1,125 @@
+package com.isu.gaswellwatch.modbus.data.impl;
+
+import com.isu.gaswellwatch.modbus.data.PersistenceHandler;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.jdbc.core.PreparedStatementCallback;
+import org.springframework.stereotype.Component;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author 王仕龙
+ * 2025/01/09 08:59
+ */
+@Component(PersistenceHandler.WEPS_PLUG_MODBUS_TYPE)
+public class WepsPlugPersistenceHandler extends AbstractPersistenceHandler {
+
+ private static final Map WEPS_PLUG_COLUMN_MAPPING_MAP = new HashMap<>();
+
+ static {
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("cas_pressure", "casPressure"); // 套压;MPa;-3表示现场仪表通信故障
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("oil_pressure", "oilPressure"); // 油压;MPa;-3表示现场仪表通信故障
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("alarm", "alarm"); // 报警信息;1高压集气压力低2低压集气压力高3是柱塞危险上升4 柱塞快速上升次数超过设定值
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("solenoid_valve_status", "solenoidValveStatus"); // 电磁阀状态;0-未知;1-关状态;2-开状态;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("open_well_remaining_time", "openWellRemainingTime"); // 定时开井剩余时间;分钟
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("close_well_remaining_time", "closeWellRemainingTime"); // 定时关井剩余时间;分钟
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("plug_arrival_status", "plugArrivalStatus"); // 柱塞到达信号;0-未到达;1-到达;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("plug_too_fast_count", "plugTooFastCount"); // 柱塞过快次数;次
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("plug_rising_speed", "plugRisingSpeed"); // 柱塞上升速度;米/分钟
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("downstream_pressure", "downstreamPressure"); // 阀后压力;MPa;-3表示现场仪表通信故障
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("solenoid_valve_opening", "solenoidValveOpening"); // 电控阀阀门开度;%;保留1位小数;开度范围0~100%
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("reserve", "reserve"); // 预留字段;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("pre_pressure", "prePressure"); // 柱塞外输压力;MPa;-3表示现场仪表通信故障
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("run_mode", "runMode"); // 运行制度;0-未知;1-定时开关井;2-压力优化微升;3-自动优化;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("well_status", "wellStatus"); // 开关井控制;0-初始值;1-开井;2-关井;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("gas_collection_method", "gasCollectionMethod"); // 集气方式;1-高压集气;2-低压集气;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("high_pressure_protection", "highPressureProtection"); // 高压保护压力;MPa;低压集气方式 高压保护设置;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("low_pressure_protection", "lowPressureProtection"); // 低压保护压力;MPa;高压集气方式 低压保护设置;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("too_fast_count", "tooFastCount"); // 过快次数设置;次
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("dangerous_rise_time", "dangerousRiseTime"); // 危险上升时间;秒
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("too_fast_rise_time", "tooFastRiseTime"); // 过快上升时间;秒
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("open_well_time", "openWellTime"); // 开井时间设置;小时
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("close_well_time", "closeWellTime"); // 关井时间设置;小时
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("open_well_cas_pressure", "openWellCasPressure"); // 套压开井压力;MPa;压力优化微升模式;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("little_rise_cas_pressure", "littleRiseCasPressure"); // 套压微升压力;MPa;压力优化微升模式;
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("check_stability_time", "checkStabilityTime"); // 检测稳定时间;秒
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("min_close_well_time", "minCloseWellTime"); // 最小关井时间;分钟
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("max_close_well_time", "maxCloseWellTime"); // 最大关井时间;分钟
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("min_open_well_time", "minOpenWellTime"); // 最小开井时间;分钟
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("max_open_well_time", "maxOpenWellTime"); // 最大开井时间;分钟
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("well_depth", "wellDepth"); // 气井深度;米
+ WEPS_PLUG_COLUMN_MAPPING_MAP.put("produce_mode", "produceMode"); // 生产制度;1-常开;2-常关;3-柱塞气举;
+ }
+
+ @Override
+ public void createTable(String tableName, Long deviceId) {
+ this.createTable("sql/CREATE_WEPS_PLUG.sql", tableName, deviceId);
+ }
+
+ @Override
+ public Map> insert(String tableName, String cacheKey) {
+ String insertTableSQL = this.getResource("sql/INSERT_WEPS_PLUG.sql");
+ insertTableSQL = StringUtils.replace(insertTableSQL, "$TableName$", tableName);
+
+ Map oldRow = this.getLastRow(tableName);
+ Map newRow = this.redisTemplate.opsForHash().entries(cacheKey);
+
+ this.jdbcTemplate.execute(insertTableSQL, new PreparedStatementCallback