package com.xw.yunwei.model
|
|
import com.google.gson.annotations.SerializedName
|
|
/**
|
* 电子围栏
|
*/
|
data class AreaModel(
|
|
/**
|
* 自增id,电子围栏唯一标识
|
*/
|
@SerializedName("id")
|
val id: Long? = null,
|
|
/**
|
* 围栏编号唯一
|
* 规则:城市首字母-类型简写-4位自增流水号(如 SZ-OP-001)
|
*/
|
@SerializedName("electronicNumber")
|
val electronicNumber: String? = null,
|
|
/**
|
* 围栏名称
|
*/
|
@SerializedName("electronicName")
|
val electronicName: String? = null,
|
|
/**
|
* 城市code
|
*/
|
@SerializedName("cityCode")
|
val cityCode: String? = null,
|
|
/**
|
* 围栏状态
|
* 0=草稿 1=待启用 2=启用中 3=已停用
|
*/
|
@SerializedName("status")
|
val status: Int? = null,
|
|
/**
|
* 生效类型
|
* 1=立即生效 2=定时生效
|
*/
|
@SerializedName("effectType")
|
val effectType: Int? = null,
|
|
/**
|
* 生效时间
|
* 当effectType=2时有效
|
*/
|
@SerializedName("effectTime")
|
val effectTime: String? = null,
|
|
/**
|
* 失效类型
|
* 1=永不失效 2=定时失效
|
*/
|
@SerializedName("failureType")
|
val failureType: Int? = null,
|
|
/**
|
* 失效时间
|
* 当failureType=2时有效
|
*/
|
@SerializedName("failureTime")
|
val failureTime: String? = null,
|
|
/**
|
* 运营区域数量
|
*/
|
@SerializedName("operatingAreaCount")
|
val operatingAreaCount: Long? = null,
|
|
/**
|
* 禁行区域数量
|
*/
|
@SerializedName("prohibitedAreaCount")
|
val prohibitedAreaCount: Long? = null,
|
|
/**
|
* 运营策略,JSON字符串格式
|
*/
|
@SerializedName("operationStrategy")
|
val operationStrategy: String? = null,
|
|
/**
|
* 是否删除
|
* false=未删除(0) true=已删除(1)
|
*/
|
@SerializedName("deleted")
|
val deleted: Boolean? = null,
|
|
/**
|
* 记录创建人,前端忽略
|
*/
|
@SerializedName("createBy")
|
val createBy: String? = null,
|
|
/**
|
* 记录创建时间,前端忽略
|
*/
|
@SerializedName("createTime")
|
val createTime: String? = null,
|
|
/**
|
* 记录修改人,前端忽略
|
*/
|
@SerializedName("updateBy")
|
val updateBy: String? = null,
|
|
/**
|
* 记录修改时间,前端忽略
|
*/
|
@SerializedName("updateTime")
|
val updateTime: String? = null
|
) {
|
|
// ==================== 枚举定义 ====================
|
|
/**
|
* 围栏状态枚举
|
*/
|
enum class FenceStatus(val value: Int, val description: String) {
|
DRAFT(0, "草稿"),
|
PENDING_ENABLE(1, "待启用"),
|
ENABLED(2, "启用中"),
|
DISABLED(3, "已停用");
|
|
companion object {
|
fun fromValue(value: Int?): FenceStatus? = FenceStatus.entries.find { it.value == value }
|
}
|
}
|
|
/**
|
* 生效类型枚举
|
*/
|
enum class EffectType(val value: Int, val description: String) {
|
IMMEDIATE(1, "立即生效"),
|
SCHEDULED(2, "定时生效");
|
|
companion object {
|
fun fromValue(value: Int?): EffectType? = EffectType.entries.find { it.value == value }
|
}
|
}
|
|
/**
|
* 失效类型枚举
|
*/
|
enum class FailureType(val value: Int, val description: String) {
|
NEVER(1, "永不失效"),
|
SCHEDULED(2, "定时失效");
|
|
companion object {
|
fun fromValue(value: Int?): FailureType? = FailureType.entries.find { it.value == value }
|
}
|
}
|
|
// ==================== 便捷方法 ====================
|
|
/**
|
* 获取围栏状态枚举
|
*/
|
fun getStatusEnum(): FenceStatus? = FenceStatus.fromValue(status)
|
|
/**
|
* 获取生效类型枚举
|
*/
|
fun getEffectTypeEnum(): EffectType? = EffectType.fromValue(effectType)
|
|
/**
|
* 获取失效类型枚举
|
*/
|
fun getFailureTypeEnum(): FailureType? = FailureType.fromValue(failureType)
|
|
/**
|
* 是否已删除
|
*/
|
fun isDeleted(): Boolean = deleted == true
|
|
/**
|
* 是否处于草稿状态
|
*/
|
fun isDraft(): Boolean = status == 0
|
|
/**
|
* 是否待启用
|
*/
|
fun isPendingEnable(): Boolean = status == 1
|
|
/**
|
* 是否启用中
|
*/
|
fun isEnabled(): Boolean = status == 2
|
|
/**
|
* 是否已停用
|
*/
|
fun isDisabled(): Boolean = status == 3
|
|
/**
|
* 是否立即生效
|
*/
|
fun isImmediateEffect(): Boolean = effectType == 1
|
|
/**
|
* 是否定时生效
|
*/
|
fun isScheduledEffect(): Boolean = effectType == 2
|
|
/**
|
* 是否永不失效
|
*/
|
fun isNeverExpire(): Boolean = failureType == 1
|
|
/**
|
* 是否定时失效
|
*/
|
fun isScheduledExpire(): Boolean = failureType == 2
|
|
/**
|
* 获取区域总数(运营区域+禁行区域)
|
*/
|
fun getTotalAreaCount(): Long = (operatingAreaCount ?: 0) + (prohibitedAreaCount ?: 0)
|
|
/**
|
* 获取围栏编号前缀(城市首字母)
|
*/
|
fun getCityPrefix(): String? = electronicNumber?.substringBefore("-")
|
|
/**
|
* 获取围栏编号类型(类型简写)
|
*/
|
fun getTypeCode(): String? {
|
val parts = electronicNumber?.split("-")
|
return if (parts?.size ?: 0 >= 2) parts?.get(1) else null
|
}
|
|
/**
|
* 获取围栏编号序列号
|
*/
|
fun getSerialNumber(): String? {
|
val parts = electronicNumber?.split("-")
|
return if (parts?.size ?: 0 >= 3) parts?.get(2) else null
|
}
|
|
companion object {
|
/**
|
* 围栏编号正则表达式
|
* 格式:城市首字母-类型简写-4位自增流水号
|
*/
|
const val ELECTRONIC_NUMBER_PATTERN = "^[A-Z]{2}-[A-Z]{2}-\\d{3,4}$"
|
|
/**
|
* 验证围栏编号格式是否正确
|
*/
|
fun isValidElectronicNumber(number: String?): Boolean {
|
return number?.matches(Regex(ELECTRONIC_NUMBER_PATTERN)) ?: false
|
}
|
}
|
}
|