chore: 【ops】枚举类新增

This commit is contained in:
lzh
2026-01-05 16:47:07 +08:00
parent da8bf53f39
commit 8d9d774622
13 changed files with 805 additions and 7 deletions

View File

@@ -0,0 +1,39 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 区域类型枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum AreaTypeEnum implements ArrayValuable<String> {
PARK("PARK", "园区"),
BUILDING("BUILDING", "楼栋"),
FLOOR("FLOOR", "楼层"),
FUNCTION("FUNCTION", "功能区域");
public static final String[] ARRAYS = Arrays.stream(values()).map(AreaTypeEnum::getType).toArray(String[]::new);
/**
* 类型
*/
private final String type;
/**
* 描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,80 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 保洁员状态枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum CleanerStatusEnum implements ArrayValuable<String> {
/**
* 空闲 - 可接新单
*/
IDLE("idle", "空闲", true),
/**
* 忙碌 - 正在执行工单
*/
BUSY("busy", "忙碌", false),
/**
* 暂停 - 临时离开(如吃饭、休息)
*/
PAUSED("paused", "暂停", false),
/**
* 离线 - 工牌离线或无心跳
*/
OFFLINE("offline", "离线", false);
public static final String[] ARRAYS = Arrays.stream(values()).map(CleanerStatusEnum::getCode).toArray(String[]::new);
/**
* 状态代码
*/
private final String code;
/**
* 状态描述
*/
private final String description;
/**
* 是否可接新单
*/
private final boolean canAcceptNewOrder;
@Override
public String[] array() {
return ARRAYS;
}
/**
* 兼容旧版本getStatus() 方法等同于 getCode()
*/
public String getStatus() {
return code;
}
/**
* 根据code获取枚举
*
* @param code 状态代码
* @return 枚举实例未找到返回OFFLINE
*/
public static CleanerStatusEnum fromCode(String code) {
return Arrays.stream(values())
.filter(e -> e.getCode().equals(code))
.findFirst()
.orElse(OFFLINE);
}
}

View File

@@ -0,0 +1,38 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 派单模式枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum DispatchModeEnum implements ArrayValuable<String> {
NORMAL("NORMAL", "普通"),
SILENT("SILENT", "静默"),
URGENT("URGENT", "紧急插队");
public static final String[] ARRAYS = Arrays.stream(values()).map(DispatchModeEnum::getMode).toArray(String[]::new);
/**
* 模式
*/
private final String mode;
/**
* 描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,104 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 派单策略枚举
* 定义工单派发给执行人员的策略
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum DispatchStrategyEnum implements ArrayValuable<String> {
/**
* 自动派单 - 系统根据规则自动分配
* 规则包括:优先级、区域匹配、技能匹配、工作量平衡等
*/
AUTO("auto", "自动派单"),
/**
* 手动派单 - 管理员手动指定执行人员
*/
MANUAL("manual", "手动派单"),
/**
* 抢单模式 - 执行人员从工单池中主动抢单
*/
GRAB("grab", "抢单模式"),
/**
* 区域优先 - 优先分配给该区域的人员
*/
AREA_PRIORITY("area_priority", "区域优先"),
/**
* 最近距离 - 分配给距离最近的人员(基于地理位置)
*/
NEAREST("nearest", "最近距离"),
/**
* 技能匹配 - 根据技能标签匹配执行人员
*/
SKILL_MATCH("skill_match", "技能匹配"),
/**
* 工作量平衡 - 分配给当前工作量最少的人员
*/
WORKLOAD_BALANCE("workload_balance", "工作量平衡"),
/**
* 轮询分配 - 按顺序轮询分配给可用人员
*/
ROUND_ROBIN("round_robin", "轮询分配");
public static final String[] ARRAYS = Arrays.stream(values()).map(DispatchStrategyEnum::getStrategy).toArray(String[]::new);
/**
* 策略代码
*/
private final String strategy;
/**
* 策略描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
/**
* 根据strategy获取枚举
*
* @param strategy 策略代码
* @return 枚举实例未找到返回AUTO
*/
public static DispatchStrategyEnum fromStrategy(String strategy) {
return Arrays.stream(values())
.filter(e -> e.getStrategy().equals(strategy))
.findFirst()
.orElse(AUTO);
}
/**
* 判断是否为自动派单策略
*/
public boolean isAuto() {
return this == AUTO || this == AREA_PRIORITY || this == NEAREST
|| this == SKILL_MATCH || this == WORKLOAD_BALANCE || this == ROUND_ROBIN;
}
/**
* 判断是否需要人工干预
*/
public boolean requireManualIntervention() {
return this == MANUAL || this == GRAB;
}
}

View File

@@ -0,0 +1,41 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 事件领域枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum EventDomainEnum implements ArrayValuable<String> {
RULE("RULE", "规则引擎"),
DISPATCH("DISPATCH", "调度"),
BADGE("BADGE", "工牌"),
BEACON("BEACON", "信标"),
SYSTEM("SYSTEM", "系统"),
PERFORMANCE("PERFORMANCE", "绩效");
public static final String[] ARRAYS = Arrays.stream(values()).map(EventDomainEnum::getDomain).toArray(String[]::new);
/**
* 领域
*/
private final String domain;
/**
* 描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,42 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 功能类型枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum FunctionTypeEnum implements ArrayValuable<String> {
MALE_TOILET("MALE_TOILET", "男卫"),
FEMALE_TOILET("FEMALE_TOILET", "女卫"),
PUBLIC("PUBLIC", "公共区"),
ELEVATOR("ELEVATOR", "电梯厅"),
LOBBY("LOBBY", "大堂"),
CORRIDOR("CORRIDOR", "走廊"),
STAIRS("STAIRS", "楼梯间");
public static final String[] ARRAYS = Arrays.stream(values()).map(FunctionTypeEnum::getType).toArray(String[]::new);
/**
* 类型
*/
private final String type;
/**
* 描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,39 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 操作人类型枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum OperatorTypeEnum implements ArrayValuable<String> {
SYSTEM("SYSTEM", "系统"),
CLEANER("CLEANER", "保洁员"),
INSPECTOR("INSPECTOR", "巡检员"),
ADMIN("ADMIN", "管理员");
public static final String[] ARRAYS = Arrays.stream(values()).map(OperatorTypeEnum::getType).toArray(String[]::new);
/**
* 类型
*/
private final String type;
/**
* 描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,112 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 工单队列状态枚举
*
* 队列状态职责:仅管理派单相关状态,不管理工单执行状态
* - 派单流程WAITING → DISPATCHED
* - 异常流程WAITING/DISPATCHED → FAILED/PAUSED/CANCELLED
* - 完成流程DISPATCHED → COMPLETED
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum OrderQueueStatusEnum implements ArrayValuable<String> {
/**
* 等待派单 - 工单已进入队列,等待派单引擎分配
*/
WAITING("waiting", "等待派单"),
/**
* 已派单 - 已分配给执行人员,等待接单
*/
DISPATCHED("dispatched", "已派单"),
/**
* 暂停中 - 任务暂停如保洁员临时离线、P0任务打断等
*/
PAUSED("paused", "暂停中"),
/**
* 已完成 - 任务已完成
*/
COMPLETED("completed", "已完成"),
/**
* 已取消 - 工单已取消
*/
CANCELLED("cancelled", "已取消"),
/**
* 派单失败 - 派单失败,可重试
*/
FAILED("failed", "派单失败");
public static final String[] ARRAYS = Arrays.stream(values()).map(OrderQueueStatusEnum::getStatus).toArray(String[]::new);
/**
* 状态代码
*/
private final String status;
/**
* 状态描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
/**
* 根据status获取枚举
*
* @param status 状态代码
* @return 枚举实例未找到返回WAITING
*/
public static OrderQueueStatusEnum fromStatus(String status) {
return Arrays.stream(values())
.filter(e -> e.getStatus().equals(status))
.findFirst()
.orElse(WAITING);
}
// ========== 业务判断方法 ==========
/**
* 判断是否为终态(不可变更)
*/
public boolean isTerminal() {
return this == COMPLETED || this == CANCELLED || this == FAILED;
}
/**
* 判断是否可以取消
*/
public boolean canCancel() {
return this == WAITING || this == DISPATCHED;
}
/**
* 判断是否正在处理中(已派单或暂停)
*/
public boolean isProcessing() {
return this == DISPATCHED || this == PAUSED;
}
/**
* 判断是否可以分配执行人员(派单)
*/
public boolean canAssign() {
return this == WAITING;
}
}

View File

@@ -0,0 +1,96 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 工单优先级枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum PriorityEnum implements ArrayValuable<Integer> {
/**
* P0 - 紧急任务,需要立即处理,可打断当前执行的任务
* 场景:溢水、危险品泄漏、严重安全事故等
*/
P0(0, "P0紧急", 0, true),
/**
* P1 - 高优先级任务,优先处理
* 场景VIP客户投诉、重要访客接待、设备故障影响运营等
*/
P1(1, "P1重要", 1, false),
/**
* P2 - 中等优先级任务,正常处理
* 场景:日常清洁超时、周期性保养等
*/
P2(2, "P2普通", 2, false),
/**
* P3 - 普通任务,按正常流程处理
* 场景:日常巡检、例行清洁等
*/
P3(3, "P3低优", 3, false);
public static final Integer[] ARRAYS = Arrays.stream(values()).map(PriorityEnum::getPriority).toArray(Integer[]::new);
/**
* 优先级级别(数字越小优先级越高)
*/
private final Integer priority;
/**
* 描述
*/
private final String description;
/**
* 队列排序权重(用于队列排序)
*/
private final Integer queueOrder;
/**
* 是否可打断当前执行的任务
*/
private final Boolean canInterrupt;
@Override
public Integer[] array() {
return ARRAYS;
}
/**
* 根据优先级级别获取枚举
*
* @param priority 优先级级别
* @return 枚举实例未找到返回P3
*/
public static PriorityEnum fromPriority(Integer priority) {
return Arrays.stream(values())
.filter(e -> e.getPriority().equals(priority))
.findFirst()
.orElse(P3);
}
/**
* 判断是否为紧急任务P0
*/
public boolean isUrgent() {
return this == P0;
}
/**
* 判断优先级是否高于指定优先级
*/
public boolean higherThan(PriorityEnum other) {
return this.priority < other.priority;
}
}

View File

@@ -0,0 +1,39 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 工单来源类型枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum SourceTypeEnum implements ArrayValuable<String> {
TRAFFIC("TRAFFIC", "系统触发"),
INSPECTION("INSPECTION", "巡检发现"),
MANUAL("MANUAL", "手动创建"),
SCHEDULE("SCHEDULE", "定时排班");
public static final String[] ARRAYS = Arrays.stream(values()).map(SourceTypeEnum::getType).toArray(String[]::new);
/**
* 类型
*/
private final String type;
/**
* 描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,136 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 工单状态枚举FSM状态机
*
* 状态流转说明:
* - 通用流程PENDING → ASSIGNED → ARRIVED → COMPLETED
* - 保洁流程PENDING → QUEUED → DISPATCHED → CONFIRMED → ARRIVED → COMPLETED
*
* 保洁员状态变化:
* - IDLE: 可以接收新工单
* - CONFIRMED开始 → BUSY: 保洁员确认后转为忙碌
* - COMPLETED后: 检查队列 → 有任务保持BUSY无任务转为IDLE
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum WorkOrderStatusEnum implements ArrayValuable<String> {
// ========== 初始状态 ==========
PENDING("PENDING", "待分配"),
// ========== 保洁业务特有状态 ==========
/** 排队中 - 已推荐保洁员,在队列中等待推送 */
QUEUED("QUEUED", "排队中"),
/** 已推送 - 已推送到工牌,等待保洁员按键确认 */
DISPATCHED("DISPATCHED", "已推送"),
/** 保洁员已确认保洁员按下确认按钮此时保洁员状态转为BUSY */
CONFIRMED("CONFIRMED", "已确认"),
// ========== 作业中 ==========
/** 已到岗/作业中(通用状态,保洁业务中表示感知信标开始作业) */
ARRIVED("ARRIVED", "已到岗"),
// ========== 暂停/完成/取消 ==========
PAUSED("PAUSED", "已暂停"),
COMPLETED("COMPLETED", "已完成"),
CANCELLED("CANCELLED", "已取消");
public static final String[] ARRAYS = Arrays.stream(values()).map(WorkOrderStatusEnum::getStatus).toArray(String[]::new);
/**
* 状态码
*/
private final String status;
/**
* 状态描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
// ========== 业务判断方法 ==========
/**
* 是否为终态(已完成或已取消)
*/
public boolean isTerminal() {
return this == COMPLETED || this == CANCELLED;
}
/**
* 是否为保洁业务特有状态
*/
public boolean isCleaningBusinessStatus() {
return this == QUEUED || this == DISPATCHED || this == CONFIRMED;
}
/**
* 是否可以确认(保洁员确认操作)
* 只有已推送状态可以确认
*/
public boolean canConfirm() {
return this == DISPATCHED;
}
/**
* 是否可以开始作业(感知信标)
* 已确认或已推送状态都可以开始作业(兼容场景)
*/
public boolean canStartWorking() {
return this == CONFIRMED || this == DISPATCHED;
}
/**
* 是否可以完成(作业完成或丢失信号)
* 只有已到岗状态可以完成
*/
public boolean canComplete() {
return this == ARRIVED;
}
/**
* 是否可以暂停
*/
public boolean canPause() {
return this == ARRIVED || this == CONFIRMED;
}
/**
* 是否可以取消
*/
public boolean canCancel() {
return !isTerminal();
}
/**
* 根据status获取枚举
*
* @param status 状态代码
* @return 枚举实例未找到返回PENDING
*/
public static WorkOrderStatusEnum fromStatus(String status) {
if (status == null) {
return PENDING;
}
for (WorkOrderStatusEnum statusEnum : values()) {
if (statusEnum.getStatus().equals(status)) {
return statusEnum;
}
}
return PENDING;
}
}

View File

@@ -0,0 +1,39 @@
package com.viewsh.module.ops.enums;
import com.viewsh.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 工单类型枚举
*
* @author lzh
*/
@AllArgsConstructor
@Getter
public enum WorkOrderTypeEnum implements ArrayValuable<String> {
CLEAN("CLEAN", "保洁"),
REPAIR("REPAIR", "维修"),
SECURITY("SECURITY", "安保"),
SERVICE("SERVICE", "客服");
public static final String[] ARRAYS = Arrays.stream(values()).map(WorkOrderTypeEnum::getType).toArray(String[]::new);
/**
* 类型
*/
private final String type;
/**
* 描述
*/
private final String description;
@Override
public String[] array() {
return ARRAYS;
}
}

View File

@@ -1,7 +0,0 @@
/**
* ops 模块 API存放工单、基础数据的 DTO 和 Feign 接口
*
* 1. Controller URL以 /ops/ 开头,避免和其它 Module 冲突
* 2. DataObject 表名:以 ops_ 开头,方便在数据库中区分
*/
package com.viewsh.module.ops;