163 lines
8.4 KiB
Java
163 lines
8.4 KiB
Java
package com.isu.gaswellwatch.vo.command;
|
||
|
||
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||
import com.isu.gaswellwatch.dto.modbus.ModbusCommandDto;
|
||
import com.isu.gaswellwatch.vo.command.etc.*;
|
||
import com.isu.gaswellwatch.vo.command.knpcv1.mode.TimingMode;
|
||
import com.isu.gaswellwatch.vo.command.knpcv1.mode.*;
|
||
import com.isu.gaswellwatch.vo.command.scss.*;
|
||
import com.isu.gaswellwatch.vo.command.weps.*;
|
||
import jakarta.validation.constraints.NotBlank;
|
||
import jakarta.validation.constraints.NotNull;
|
||
import lombok.AllArgsConstructor;
|
||
import lombok.Getter;
|
||
import lombok.NoArgsConstructor;
|
||
import lombok.Setter;
|
||
import lombok.experimental.SuperBuilder;
|
||
import org.apache.commons.lang3.StringUtils;
|
||
|
||
import java.io.Serial;
|
||
import java.io.Serializable;
|
||
import java.math.BigDecimal;
|
||
import java.security.InvalidParameterException;
|
||
import java.util.Collection;
|
||
import java.util.Objects;
|
||
|
||
/**
|
||
* @author <a href="mailto:scwsl@foxmail.com">王仕龙</a>
|
||
* 2024/11/26 19:59
|
||
*/
|
||
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "code")
|
||
@JsonSubTypes(value = {
|
||
@JsonSubTypes.Type(value = TimerMode.class, name = Command.KNPCV1_RUN_TIMER),
|
||
@JsonSubTypes.Type(value = TimingMode.class, name = Command.KNPCV1_RUN_TIMING),
|
||
@JsonSubTypes.Type(value = ManualMode.class, name = Command.KNPCV1_RUN_MANUAL),
|
||
@JsonSubTypes.Type(value = PlungerMode.class, name = Command.KNPCV1_RUN_PLUNGER),
|
||
@JsonSubTypes.Type(value = PressureMode.class, name = Command.KNPCV1_RUN_PRESSURE),
|
||
@JsonSubTypes.Type(value = TimePressureMode.class, name = Command.KNPCV1_RUN_TIME_PRESSURE),
|
||
@JsonSubTypes.Type(value = SensorDelay.class, name = Command.ETC_SENSOR_DELAY),
|
||
@JsonSubTypes.Type(value = PlungerTimer.class, name = Command.ETC_PLUNGER_TIMER),
|
||
@JsonSubTypes.Type(value = TimeFormat.class, name = Command.ETC_TIME_FORMAT),
|
||
@JsonSubTypes.Type(value = TubPressureOptimization.class, name = Command.ETC_TUB_PRESSURE_OPTIMIZATION),
|
||
@JsonSubTypes.Type(value = CasPressureOptimization.class, name = Command.ETC_CAS_PRESSURE_OPTIMIZATION),
|
||
@JsonSubTypes.Type(value = com.isu.gaswellwatch.vo.command.etc.TimingMode.class, name = Command.ETC_TIMING_MODE),
|
||
@JsonSubTypes.Type(value = SystemInfo.class, name = Command.SCSS_SYSTEM_INFO),
|
||
@JsonSubTypes.Type(value = ControlMode.class, name = Command.SCSS_CONTROL_MODE),
|
||
@JsonSubTypes.Type(value = SimpleLogicMode.class, name = Command.SCSS_SIMPLE_LOGIC_MODE),
|
||
@JsonSubTypes.Type(value = PlungerLogicMode.class, name = Command.SCSS_PLUNGER_LOGIC_MODE),
|
||
@JsonSubTypes.Type(value = CasingMode.class, name = Command.SCSS_CASING_MODE),
|
||
@JsonSubTypes.Type(value = SamplingInterval.class, name = Command.SCSS_SAMPLING_INTERVAL_MODE),
|
||
@JsonSubTypes.Type(value = TimeMode.class, name = Command.SCSS_TIME_MODE),
|
||
@JsonSubTypes.Type(value = com.isu.gaswellwatch.vo.command.etc.TurnOn.class, name = Command.ETC_TURN_ON_THE_WELL),
|
||
@JsonSubTypes.Type(value = com.isu.gaswellwatch.vo.command.etc.TurnOff.class, name = Command.ETC_TURN_OFF_THE_WELL),
|
||
@JsonSubTypes.Type(value = com.isu.gaswellwatch.vo.command.scss.TurnOn.class, name = Command.SCSS_TURN_ON_THE_WELL),
|
||
@JsonSubTypes.Type(value = com.isu.gaswellwatch.vo.command.scss.TurnOff.class, name = Command.SCSS_TURN_OFF_THE_WELL),
|
||
@JsonSubTypes.Type(value = com.isu.gaswellwatch.vo.command.knpcv1.TurnOn.class, name = Command.KNPCV1_TURN_ON_THE_WELL),
|
||
@JsonSubTypes.Type(value = com.isu.gaswellwatch.vo.command.knpcv1.TurnOff.class, name = Command.KNPCV1_TURN_OFF_THE_WELL),
|
||
@JsonSubTypes.Type(value = WepsTurnOn.class, name = Command.WEPS_TURN_ON_THE_WELL),
|
||
@JsonSubTypes.Type(value = WepsTurnOff.class, name = Command.WEPS_TURN_OFF_THE_WELL),
|
||
@JsonSubTypes.Type(value = WepsPlugControl.class, name = Command.WEPS_PLUG_CONTROL),
|
||
@JsonSubTypes.Type(value = MiWepsTurnOn.class, name = Command.MI_WEPS_TURN_ON_THE_WELL),
|
||
@JsonSubTypes.Type(value = MiWepsTurnOff.class, name = Command.MI_WEPS_TURN_OFF_THE_WELL),
|
||
@JsonSubTypes.Type(value = MiWepsPlugControl.class, name = Command.MI_WEPS_PLUG_CONTROL),
|
||
})
|
||
@Getter
|
||
@Setter
|
||
@SuperBuilder
|
||
@NoArgsConstructor
|
||
@AllArgsConstructor
|
||
public abstract class Command implements Serializable {
|
||
|
||
@Serial
|
||
private static final long serialVersionUID = -2590497444442160271L;
|
||
|
||
/* 点表类型:KNPCV1 start */
|
||
/* 开关井 */
|
||
public static final String KNPCV1_TURN_ON_THE_WELL = "KNPCV1.TURN_ON_THE_WELL";
|
||
public static final String KNPCV1_TURN_OFF_THE_WELL = "KNPCV1.TURN_OFF_THE_WELL";
|
||
/* 运行模式*/
|
||
public static final String KNPCV1_RUN_TIMER = "KNPCV1.RUN.TIMER";
|
||
public static final String KNPCV1_RUN_TIMING = "KNPCV1.RUN.TIMING";
|
||
public static final String KNPCV1_RUN_MANUAL = "KNPCV1.RUN.MANUAL";
|
||
public static final String KNPCV1_RUN_PLUNGER = "KNPCV1.RUN.PLUNGER";
|
||
public static final String KNPCV1_RUN_PRESSURE = "KNPCV1.RUN.PRESSURE";
|
||
public static final String KNPCV1_RUN_TIME_PRESSURE = "KNPCV1.RUN.TIME_PRESSURE";
|
||
/* 点表类型:KNPCV1 end */
|
||
|
||
/* 点表类型:SCSS start */
|
||
/* 系统基本信息 */
|
||
public static final String SCSS_SYSTEM_INFO = "SCSS.SYSTEM_INFO";
|
||
/* 开关井 */
|
||
public static final String SCSS_TURN_ON_THE_WELL = "SCSS.TURN_ON_THE_WELL";
|
||
public static final String SCSS_TURN_OFF_THE_WELL = "SCSS.TURN_OFF_THE_WELL";
|
||
/* 模式指令 */
|
||
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 */
|
||
|
||
/* 点表类型:ETC start */
|
||
/* 设置ETC设备时间格式 */
|
||
public static final String ETC_TIME_FORMAT = "ETC.TIME_FORMAT";
|
||
/* 开关井 */
|
||
public static final String ETC_TURN_ON_THE_WELL = "ETC.TURN_ON_THE_WELL";
|
||
public static final String ETC_TURN_OFF_THE_WELL = "ETC.TURN_OFF_THE_WELL";
|
||
/* 模式指令*/
|
||
public static final String ETC_SENSOR_DELAY = "ETC.SENSOR_DELAY";
|
||
public static final String ETC_PLUNGER_TIMER = "ETC.PLUNGER_TIMER";
|
||
/* 计时器模式 */
|
||
public static final String ETC_TIMING_MODE = "ETC.TIMING_MODE";
|
||
/* 套压优化 */
|
||
public static final String ETC_CAS_PRESSURE_OPTIMIZATION = "ETC.CAS_PRESSURE_OPTIMIZATION";
|
||
/* 油压优化 */
|
||
public static final String ETC_TUB_PRESSURE_OPTIMIZATION = "ETC.TUB_PRESSURE_OPTIMIZATION";
|
||
|
||
/* 点表类型:ETC end */
|
||
|
||
/* 点表类型:新版威尔普斯 start */
|
||
// 新版威尔普斯,柱塞模式
|
||
public static final String WEPS_TURN_ON_THE_WELL = "WEPS.TURN_ON_THE_WELL";
|
||
public static final String WEPS_TURN_OFF_THE_WELL = "WEPS.TURN_OFF_THE_WELL";
|
||
public static final String WEPS_PLUG_CONTROL = "WEPS.PLUG.CONTROL";
|
||
/* 点表类型:新版威尔普斯 end */
|
||
|
||
/* 点表类型:老版威尔普斯 start */
|
||
// 老版威尔普斯,柱塞模式
|
||
public static final String MI_WEPS_TURN_ON_THE_WELL = "MI_WEPS.TURN_ON_THE_WELL";
|
||
public static final String MI_WEPS_TURN_OFF_THE_WELL = "MI_WEPS.TURN_OFF_THE_WELL";
|
||
public static final String MI_WEPS_PLUG_CONTROL = "MI_WEPS.PLUG.CONTROL";
|
||
/* 点表类型:老版威尔普斯 end */
|
||
|
||
public static final BigDecimal ONE_SIXTY = BigDecimal.valueOf(60);
|
||
public static final BigDecimal ONE_HUNDRED = BigDecimal.valueOf(100);
|
||
public static final BigDecimal ONE_THOUSAND = BigDecimal.valueOf(1000);
|
||
|
||
@NotBlank(message = "指令编码不能为空")
|
||
private String code;
|
||
|
||
@NotNull(message = "下发设备标识不能为空")
|
||
private Long deviceId;
|
||
|
||
public final Collection<ModbusCommandDto> buildModbusCommand() {
|
||
if (!this.validate()) {
|
||
throw new InvalidParameterException("Invalid command");
|
||
}
|
||
return this.builderModbusCommand();
|
||
}
|
||
|
||
public boolean validate() {
|
||
return Objects.nonNull(this.deviceId) && StringUtils.isNotBlank(this.code);
|
||
}
|
||
|
||
protected abstract Collection<ModbusCommandDto> builderModbusCommand();
|
||
|
||
}
|