diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java index 221aca5..4ac26bf 100644 --- a/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java +++ b/src/main/java/com/isu/gaswellwatch/modbus/data/impl/ScssPersistenceHandler.java @@ -157,7 +157,7 @@ public class ScssPersistenceHandler extends AbstractPersistenceHandler { ScssPersistenceHandler.this.setValue(ps, newRow, 34, "flowVoltageMinValue", Types.DECIMAL); ScssPersistenceHandler.this.setValue(ps, newRow, 35, "flowVoltageMaxValue", Types.DECIMAL); ScssPersistenceHandler.this.setValue(ps, newRow, 36, "continuousSamplingIntervalDuration", Types.INTEGER); - ScssPersistenceHandler.this.setValue(ps, newRow, 37, "sensorSignalEffectiveLevel", Types.INTEGER); + ScssPersistenceHandler.this.setValue(ps, newRow, 37, "sensorSignalEffectiveLevel", Types.DECIMAL); ScssPersistenceHandler.this.setValue(ps, newRow, 38, "pressureCompensationPolarityFlag", Types.INTEGER); ScssPersistenceHandler.this.setValue(ps, newRow, 39, "pressureCompensationValueSetting", Types.INTEGER); ScssPersistenceHandler.this.setValue(ps, newRow, 40, "oilPressureCompensationPolarityFlag", Types.INTEGER); diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/Command.java b/src/main/java/com/isu/gaswellwatch/vo/command/Command.java index 8c0dda2..c4b1f1a 100644 --- a/src/main/java/com/isu/gaswellwatch/vo/command/Command.java +++ b/src/main/java/com/isu/gaswellwatch/vo/command/Command.java @@ -84,6 +84,12 @@ public abstract class Command implements Serializable { public static final String SCSS_CONTROL_MODE = "SCSS.CONTROL_MODE"; public static final String SCSS_SIMPLE_LOGIC_MODE = "SCSS.SIMPLE_LOGIC_MODE"; public static final String SCSS_PLUNGER_LOGIC_MODE = "SCSS.PLUNGER_LOGIC_MODE"; + /* 时间模式 */ + public static final String SCSS_TIME_MODE = "SCSS.TIME_MODE"; + /* 套压模式 */ + public static final String SCSS_CASING_MODE = "SCSS.CASING_MODE"; + /* 采样间隔 */ + public static final String SCSS_SAMPLING_INTERVAL_MODE = "SCSS.SAMPLING_INTERVAL"; /* 点表类型:SCSS end */ diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/CasingMode.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/CasingMode.java new file mode 100644 index 0000000..1edaffc --- /dev/null +++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/CasingMode.java @@ -0,0 +1,58 @@ +package com.isu.gaswellwatch.vo.command.scss; + +import com.isu.gaswellwatch.dto.modbus.ModbusCommandDto; +import com.isu.gaswellwatch.vo.command.Command; +import com.isu.gaswellwatch.vo.command.Timing; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.math.BigDecimal; +import java.util.Collection; + +/** + * 套压模式 + * + * @author 王仕龙 + * 2024/12/10 17:01 + */ +@Getter +@Setter +@SuperBuilder +public class CasingMode extends Command implements Timing { + @Serial + private static final long serialVersionUID = -6609483152571838191L; + /** + * 开井套压 + */ + @NotNull(message = "开井套压不能为空") + private BigDecimal wellOpenPressureValue = BigDecimal.ZERO; + /** + * 关井套压 + */ + @NotNull(message = "关井套压不能为空") + private BigDecimal wellClosePressureValue = BigDecimal.ZERO; + /** + * 最小关井时间 + */ + @NotBlank(message = "最小关井时间不能为空,格式:HH:mm:ss") + private String minWellCloseTimeDuration; + /** + * 最大关井时间 + */ + @NotBlank(message = "最大关井时间不能为空,格式:HH:mm:ss") + private String maxWellCloseTimeDuration; + + public CasingMode() { + this.setCode("SCSS.CASING_MODE"); + } + + + @Override + protected Collection builderModbusCommand() { + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java index a0e6c78..f65cb67 100644 --- a/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java +++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/ControlMode.java @@ -118,7 +118,8 @@ public class ControlMode extends Command { /** * 到达传感器有效电平 */ - private int sensorSignalEffectiveLevel; + @NotNull(message = "到达传感器有效电平不能为空") + private BigDecimal sensorSignalEffectiveLevel; /** * 套压补偿极性 */ @@ -160,7 +161,7 @@ public class ControlMode extends Command { protected Collection builderModbusCommand() { StringBuilder command = new StringBuilder(250); // 地址码 功能码 起始地址 连续长度 连续字长 - // 01 10 0032 0036 6C + // 01 10 0054 0036 6C command.append("0110003200366C"); command.append(StringUtils.leftPad(Integer.toHexString(this.ctlModel), 8, "0")); command.append(StringUtils.leftPad(Integer.toHexString(this.minPressure.multiply(ONE_HUNDRED).intValue()), 8, "0")); @@ -180,7 +181,7 @@ public class ControlMode extends Command { command.append(StringUtils.leftPad(Integer.toHexString(this.flowVoltageMinValue.multiply(ONE_HUNDRED).intValue()), 8, "0")); command.append(StringUtils.leftPad(Integer.toHexString(this.flowVoltageMaxValue.multiply(ONE_HUNDRED).intValue()), 8, "0")); command.append(StringUtils.leftPad(Integer.toHexString(this.continuousSamplingIntervalDuration), 8, "0")); - command.append(StringUtils.leftPad(Integer.toHexString(this.sensorSignalEffectiveLevel), 8, "0")); + command.append(StringUtils.leftPad(Integer.toHexString(this.sensorSignalEffectiveLevel.multiply(ONE_HUNDRED).intValue()), 8, "0")); command.append(StringUtils.leftPad(Integer.toHexString(this.pressureCompensationPolarityFlag), 8, "0")); command.append(StringUtils.leftPad(Integer.toHexString(this.pressureCompensationValueSetting), 8, "0")); command.append(StringUtils.leftPad(Integer.toHexString(this.oilPressureCompensationPolarityFlag), 8, "0")); @@ -191,4 +192,5 @@ public class ControlMode extends Command { command.append(StringUtils.leftPad(Integer.toHexString(this.flowCompensationValueSetting), 8, "0")); return List.of(ModbusCommandDto.builder().command(command.toString()).length(16).build()); } + } diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/SamplingInterval.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/SamplingInterval.java new file mode 100644 index 0000000..205b296 --- /dev/null +++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/SamplingInterval.java @@ -0,0 +1,59 @@ +package com.isu.gaswellwatch.vo.command.scss; + +import com.isu.gaswellwatch.dto.modbus.ModbusCommandDto; +import com.isu.gaswellwatch.vo.command.Command; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serial; +import java.math.BigDecimal; +import java.util.Collection; +import java.util.List; + +/** + * 采样间隔 + * + * @author 王仕龙 + * 2024/12/10 17:24 + */ +@Getter +@Setter +@SuperBuilder +public class SamplingInterval extends Command { + + @Serial + private static final long serialVersionUID = -649748614798682095L; + + /** + * 连续采样间隔 + */ + private int continuousSamplingIntervalDuration; + /** + * 到达传感器有效电平 + */ + private BigDecimal sensorSignalEffectiveLevel; + + public SamplingInterval() { + this.setCode("SCSS.SAMPLING_INTERVAL"); + } + + @Override + public boolean validate() { + return super.validate() + && this.continuousSamplingIntervalDuration > 0 + && this.sensorSignalEffectiveLevel.compareTo(BigDecimal.ZERO) > 0; + } + + @Override + protected Collection builderModbusCommand() { + StringBuilder command = new StringBuilder(250); + // 地址码 功能码 起始地址 连续长度 连续字长 + // 01 10 0055 0004 08 + command.append("01100055000408"); + command.append(StringUtils.leftPad(Integer.toHexString(this.continuousSamplingIntervalDuration), 8, "0")); + command.append(StringUtils.leftPad(Integer.toHexString(this.sensorSignalEffectiveLevel.multiply(ONE_HUNDRED).intValue()), 8, "0")); + return List.of(ModbusCommandDto.builder().command(command.toString()).length(16).build()); + } +} diff --git a/src/main/java/com/isu/gaswellwatch/vo/command/scss/TimeMode.java b/src/main/java/com/isu/gaswellwatch/vo/command/scss/TimeMode.java new file mode 100644 index 0000000..b9b7d47 --- /dev/null +++ b/src/main/java/com/isu/gaswellwatch/vo/command/scss/TimeMode.java @@ -0,0 +1,96 @@ +package com.isu.gaswellwatch.vo.command.scss; + +import com.isu.gaswellwatch.dto.modbus.ModbusCommandDto; +import com.isu.gaswellwatch.vo.command.Command; +import com.isu.gaswellwatch.vo.command.Timing; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serial; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * 时间模式 + * + * @author 王仕龙 + * 2024/12/10 16:57 + */ +@Getter +@Setter +@SuperBuilder +public class TimeMode extends Command implements Timing { + + @Serial + private static final long serialVersionUID = -8623186068280286623L; + + /** + * 开井时间,以秒为单位的时间 + * 150 2 + */ + @NotBlank(message = "开井时间不能为空,格式:HH:mm:ss") + private String wellOpenTimeTimestamp; + + /** + * 关井时间 + * 158 2 + */ + @NotBlank(message = "关井时间不能为空,格式:HH:mm:ss") + private String wellCloseTimeTimestamp; + + /** + * 柱塞延迟时间 + * 200 2 + */ + @NotBlank(message = "柱塞延迟时间不能为空,格式:HH:mm:ss") + private String plungerDelayDuration; + + public TimeMode() { + this.setCode("SCSS.TIME_MODE"); + } + + @Override + public boolean validate() { + return super.validate() + && StringUtils.isNotBlank(this.wellOpenTimeTimestamp) + && StringUtils.isNotBlank(this.wellCloseTimeTimestamp) + && StringUtils.isNotBlank(this.plungerDelayDuration); + } + + @Override + protected Collection builderModbusCommand() { + List resultList = new ArrayList(3); + StringBuilder command = new StringBuilder(250); + // 地址码 功能码 起始地址 连续长度 连续字长 + // 01 10 0096 0002 04 + command.append("01100096000204"); + command.append(StringUtils.leftPad(Long.toHexString(this.toSeconds(this.wellOpenTimeTimestamp)), 8, "0")); + resultList.add(ModbusCommandDto.builder().command(command.toString()).length(16).build()); + + command.setLength(0); + // 地址码 功能码 起始地址 连续长度 连续字长 + // 01 10 0096 0002 04 + command.append("01100096000204"); + command.append(StringUtils.leftPad(Long.toHexString(this.toSeconds(this.wellOpenTimeTimestamp)), 8, "0")); + resultList.add(ModbusCommandDto.builder().command(command.toString()).length(16).build()); + + return resultList; + } + + public void setWellOpenTimeTimestamp(String wellOpenTimeTimestamp) { + this.wellOpenTimeTimestamp = this.timingValidate(wellOpenTimeTimestamp, "wellOpenTimeTimestamp"); + } + + public void setWellCloseTimeTimestamp(String wellCloseTimeTimestamp) { + this.wellCloseTimeTimestamp = this.timingValidate(wellCloseTimeTimestamp, "wellCloseTimeTimestamp"); + } + + public void setPlungerDelayDuration(String plungerDelayDuration) { + this.plungerDelayDuration = this.timingValidate(plungerDelayDuration, "plungerDelayDuration"); + } + +} diff --git a/src/main/resources/sql/CREATE_SCSS.sql b/src/main/resources/sql/CREATE_SCSS.sql index bb4a0db..0d96fde 100644 --- a/src/main/resources/sql/CREATE_SCSS.sql +++ b/src/main/resources/sql/CREATE_SCSS.sql @@ -37,7 +37,7 @@ CREATE TABLE `$TableName$` `flow_voltage_min_value` decimal(10, 2) NULL DEFAULT NULL COMMENT '流量最小电压', `flow_voltage_max_value` decimal(10, 2) NULL DEFAULT NULL COMMENT '流量最大电压', `continuous_sampling_interval_duration` int NULL DEFAULT NULL COMMENT '连续采样间隔', - `sensor_signal_effective_level` int NULL DEFAULT NULL COMMENT '到达传感器有效电平', + `sensor_signal_effective_level` decimal(10, 2) NULL DEFAULT NULL COMMENT '到达传感器有效电平', `pressure_compensation_polarity_flag` int NULL DEFAULT NULL COMMENT '套压补偿极性', `pressure_compensation_value_setting` int NULL DEFAULT NULL COMMENT '套压补偿值', `oil_pressure_compensation_polarity_flag` int NULL DEFAULT NULL COMMENT '油压补偿极性',