package com.ruoyi.energymeter.constant; import java.time.ZoneId; /** * 能耗表(水表/电表/气表)接入模块常量。 * *

所有业务日期均按 Asia/Shanghai 计算,与服务器默认时区无关。

*/ 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); } /** * 是否属于自动采集:第三方接入,或由系统每日自动生成数据的模拟表(如蒸汽表演示设备)。 * *

模拟表的 source_type 仍是 MANUAL(不参与第三方查表),但业务上按自动采集展示与统计。

*/ 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; } }