package com.ruoyi.energymeter.constant;
|
|
import java.time.ZoneId;
|
|
/**
|
* 能耗表(水表/电表/气表)接入模块常量。
|
*
|
* <p>所有业务日期均按 Asia/Shanghai 计算,与服务器默认时区无关。</p>
|
*/
|
public final class EnergyMeterConstants {
|
|
private EnergyMeterConstants() {
|
}
|
|
public static final ZoneId ZONE = ZoneId.of("Asia/Shanghai");
|
|
/* ---------------- 能源类型 ---------------- */
|
public static final String TYPE_WATER = "WATER";
|
public static final String TYPE_ELECTRIC = "ELECTRIC";
|
public static final String TYPE_GAS = "GAS";
|
|
/* ---------------- 数据来源 ---------------- */
|
/** 第三方接口接入,由定时任务/手动查表落库。 */
|
public static final String SOURCE_TYPE_PROVIDER = "PROVIDER";
|
/** 手工抄表,由用户在表具台账中录入表码,用量按期差计算。 */
|
public static final String SOURCE_TYPE_MANUAL = "MANUAL";
|
/** 手工抄表数据在采集表中的来源标识。 */
|
public static final String SOURCE_MANUAL = "MANUAL";
|
|
/* ---------------- 指标编码 ---------------- */
|
public static final String METRIC_WATER_USAGE = "WATER_USAGE";
|
public static final String METRIC_WATER_READING = "WATER_READING";
|
public static final String METRIC_ELECTRIC_USAGE = "ELECTRIC_USAGE";
|
public static final String METRIC_ELECTRIC_READING = "ELECTRIC_READING";
|
public static final String METRIC_ELECTRIC_COST = "ELECTRIC_COST";
|
public static final String METRIC_GAS_USAGE = "GAS_USAGE";
|
public static final String METRIC_GAS_READING = "GAS_READING";
|
|
/* ---------------- 粒度 ---------------- */
|
public static final String GRANULARITY_DAY = "D";
|
public static final String GRANULARITY_MONTH = "M";
|
public static final String GRANULARITY_YEAR = "Y";
|
public static final String GRANULARITY_POINT = "POINT";
|
|
/* ---------------- 单位 ---------------- */
|
public static final String UNIT_WATER = "m3";
|
public static final String UNIT_ELECTRIC = "kWh";
|
public static final String UNIT_GAS = "m3";
|
public static final String UNIT_COST = "CNY";
|
|
/* ---------------- 第三方接口标识 ---------------- */
|
public static final String SOURCE_GET_USE_WATER = "GetUseWater";
|
public static final String SOURCE_GET_WATER_RAW = "GetWaterRawData";
|
public static final String SOURCE_FROZEN_ELECTRICITY = "FrozenElectricity";
|
public static final String SOURCE_ELECTRIC_QUANTITY = "ElectricQuantity";
|
public static final String SOURCE_GAS_USE = "GetGasUseData";
|
public static final String SOURCE_GAS_RAW = "GetGasRawData";
|
|
/* ---------------- 绑定与启用 ---------------- */
|
public static final String BIND_VERIFIED = "VERIFIED";
|
public static final String BIND_INVALID = "INVALID";
|
|
/* ---------------- 批次类型 ---------------- */
|
public static final String RUN_SCHEDULED = "SCHEDULED";
|
public static final String RUN_MANUAL = "MANUAL";
|
public static final String RUN_BACKFILL = "BACKFILL";
|
|
/* ---------------- 批次状态 ---------------- */
|
public static final String RUN_PENDING = "PENDING";
|
public static final String RUN_RUNNING = "RUNNING";
|
public static final String RUN_SUCCESS = "SUCCESS";
|
public static final String RUN_PARTIAL = "PARTIAL";
|
public static final String RUN_FAILED = "FAILED";
|
|
/* ---------------- 任务状态 ---------------- */
|
public static final String TASK_PENDING = "PENDING";
|
public static final String TASK_RUNNING = "RUNNING";
|
public static final String TASK_SUCCESS = "SUCCESS";
|
public static final String TASK_EMPTY = "EMPTY";
|
public static final String TASK_RETRY = "RETRY";
|
public static final String TASK_FAILED = "FAILED";
|
|
/* ---------------- 错误类别 ---------------- */
|
public static final String ERROR_UPSTREAM = "UPSTREAM_ERROR";
|
public static final String ERROR_TIMEOUT = "UPSTREAM_TIMEOUT";
|
public static final String ERROR_PARSE = "PARSE_ERROR";
|
public static final String ERROR_PAGE_INCOMPLETE = "PAGE_INCOMPLETE";
|
public static final String ERROR_ADDRESS_MISMATCH = "ADDRESS_MISMATCH";
|
|
/** 自动批次 run_key 前缀。 */
|
public static final String AUTO_RUN_KEY_PREFIX = "AUTO:";
|
|
/** 重试间隔(分钟),下标对应第几次失败。 */
|
public static final int[] RETRY_DELAY_MINUTES = {1, 5, 15};
|
|
/** 一个设备最多支持的补采跨度(自然日),超出时按分片拆分。 */
|
public static final int MAX_RANGE_DAYS = 366 * 3;
|
|
public static boolean isWater(String meterType) {
|
return TYPE_WATER.equalsIgnoreCase(meterType);
|
}
|
|
public static boolean isElectric(String meterType) {
|
return TYPE_ELECTRIC.equalsIgnoreCase(meterType);
|
}
|
|
public static boolean isGas(String meterType) {
|
return TYPE_GAS.equalsIgnoreCase(meterType);
|
}
|
|
public static boolean isManual(String sourceType) {
|
return SOURCE_TYPE_MANUAL.equalsIgnoreCase(sourceType);
|
}
|
|
/**
|
* 是否属于自动采集:第三方接入,或由系统每日自动生成数据的模拟表(如蒸汽表演示设备)。
|
*
|
* <p>模拟表的 source_type 仍是 MANUAL(不参与第三方查表),但业务上按自动采集展示与统计。</p>
|
*/
|
public static boolean isAutoCollect(String sourceType, Integer simulated) {
|
return SOURCE_TYPE_PROVIDER.equalsIgnoreCase(sourceType) || Integer.valueOf(1).equals(simulated);
|
}
|
|
public static boolean isSimulated(Integer simulated) {
|
return Integer.valueOf(1).equals(simulated);
|
}
|
|
/** 规范化能源类型,未知类型返回 null,由调用方抛出业务异常。 */
|
public static String canonicalType(String meterType) {
|
String type = meterType == null ? null : meterType.trim();
|
if (TYPE_WATER.equalsIgnoreCase(type)) {
|
return TYPE_WATER;
|
}
|
if (TYPE_ELECTRIC.equalsIgnoreCase(type)) {
|
return TYPE_ELECTRIC;
|
}
|
if (TYPE_GAS.equalsIgnoreCase(type)) {
|
return TYPE_GAS;
|
}
|
return null;
|
}
|
|
public static String typeName(String meterType) {
|
if (isWater(meterType)) {
|
return "水表";
|
}
|
if (isGas(meterType)) {
|
return "气表";
|
}
|
if (isElectric(meterType)) {
|
return "电表";
|
}
|
return meterType;
|
}
|
|
public static String usageMetric(String meterType) {
|
if (isWater(meterType)) {
|
return METRIC_WATER_USAGE;
|
}
|
if (isGas(meterType)) {
|
return METRIC_GAS_USAGE;
|
}
|
return METRIC_ELECTRIC_USAGE;
|
}
|
|
public static String readingMetric(String meterType) {
|
if (isWater(meterType)) {
|
return METRIC_WATER_READING;
|
}
|
if (isGas(meterType)) {
|
return METRIC_GAS_READING;
|
}
|
return METRIC_ELECTRIC_READING;
|
}
|
|
public static String unit(String meterType) {
|
if (isWater(meterType)) {
|
return UNIT_WATER;
|
}
|
if (isGas(meterType)) {
|
return UNIT_GAS;
|
}
|
return UNIT_ELECTRIC;
|
}
|
|
/** 期间用量的来源标识。 */
|
public static String usageSource(String meterType) {
|
if (isWater(meterType)) {
|
return SOURCE_GET_USE_WATER;
|
}
|
if (isGas(meterType)) {
|
return SOURCE_GAS_USE;
|
}
|
// 电表用量取 ElectricQuantity 的正向有功电量;FrozenElectricity 的 TotalKwh 可能恒为 null
|
return SOURCE_ELECTRIC_QUANTITY;
|
}
|
|
/** 时点示值的来源标识。 */
|
public static String readingSource(String meterType) {
|
if (isWater(meterType)) {
|
return SOURCE_GET_WATER_RAW;
|
}
|
if (isGas(meterType)) {
|
return SOURCE_GAS_RAW;
|
}
|
return SOURCE_FROZEN_ELECTRICITY;
|
}
|
}
|