Merge branch 'master' of http://124.222.218.198:3000/XW-AIOT/aiot-platform-cloud into feature/cleaning-inspection

This commit is contained in:
lzh
2026-03-18 23:01:09 +08:00
118 changed files with 8562 additions and 3944 deletions

View File

@@ -40,13 +40,8 @@ public class OrderQueueDTO {
/**
* 队列分数(用于排序)
* 计算公式:优先级分 + 时间戳
* - P0: 0 + timestamp
* - P1: 1000000 + timestamp
* - P2: 2000000 + timestamp
* - P3: 3000000 + timestamp
*
* 用于数据库层面的排序,优先级高的排在前面,同优先级按时间排序
* 计算公式:优先级分 + 楼层差分 - 等待老化分
* 分数越小越靠前,用于等待队列的动态重排
*/
private Double queueScore;
@@ -95,6 +90,31 @@ public class OrderQueueDTO {
*/
private LocalDateTime updateTime;
/**
* 评分基准楼层
*/
private Integer baseFloorNo;
/**
* 目标工单楼层
*/
private Integer targetFloorNo;
/**
* 楼层差
*/
private Integer floorDiff;
/**
* 等待分钟数
*/
private Long waitMinutes;
/**
* 分数更新时间
*/
private LocalDateTime scoreUpdateTime;
// ========== 兼容旧字段名的getter方法 ==========
/**

View File

@@ -164,6 +164,15 @@ public interface OrderQueueService {
*/
List<OrderQueueDTO> getWaitingTasksByUserIdFromDb(Long userId);
/**
* 按当前上下文重算指定执行人等待队列的总分并返回最新排序结果
*
* @param userId 执行人ID
* @param fallbackAreaId 当没有执行中工单时可使用的楼层基准区域ID
* @return 已按最新总分排序的 WAITING 工单列表
*/
List<OrderQueueDTO> rebuildWaitingTasksByUserId(Long userId, Long fallbackAreaId);
/**
* 获取用户的暂停任务列表PAUSED状态按暂停时间排序
*

View File

@@ -16,11 +16,18 @@ public interface ErrorCodeConstants {
ErrorCode AREA_PARENT_LOOP = new ErrorCode(1_020_001_003, "不能将父级设置为自己或子孙节点");
ErrorCode AREA_CODE_EXISTS = new ErrorCode(1_020_001_004, "区域编码已存在");
// ========== 安保工单 1-020-003-000 ============
ErrorCode SECURITY_ORDER_NOT_FOUND = new ErrorCode(1_020_003_000, "工单不存在");
ErrorCode SECURITY_ORDER_TYPE_MISMATCH = new ErrorCode(1_020_003_001, "工单类型不匹配,期望安保工单");
ErrorCode SECURITY_AREA_USER_DUPLICATE = new ErrorCode(1_020_003_002, "该安保人员已绑定到此区域");
ErrorCode SECURITY_AREA_USER_NOT_FOUND = new ErrorCode(1_020_003_003, "绑定记录不存在");
// ========== 区域设备关联 1-020-002-000 ============
ErrorCode DEVICE_NOT_FOUND = new ErrorCode(1_020_002_000, "设备不存在");
ErrorCode DEVICE_ALREADY_BOUND = new ErrorCode(1_020_002_001, "该工牌已绑定至此区域");
ErrorCode DEVICE_TYPE_ALREADY_BOUND = new ErrorCode(1_020_002_002, "该区域已绑定{},一个区域只能绑定一个");
ErrorCode DEVICE_RELATION_NOT_FOUND = new ErrorCode(1_020_002_003, "设备关联关系不存在");
ErrorCode IOT_SERVICE_UNAVAILABLE = new ErrorCode(1_020_002_004, "IoT 设备服务不可用,请稍后重试");
// ========== 巡检模块 1-020-003-000 ============
ErrorCode INSPECTION_TEMPLATE_NOT_FOUND = new ErrorCode(1_020_003_000, "巡检模板不存在");

View File

@@ -18,7 +18,8 @@ public enum OperatorTypeEnum implements ArrayValuable<String> {
SYSTEM("SYSTEM", "系统"),
CLEANER("CLEANER", "保洁员"),
INSPECTOR("INSPECTOR", "巡检员"),
ADMIN("ADMIN", "管理员");
ADMIN("ADMIN", "管理员"),
SECURITY_GUARD("SECURITY_GUARD", "安保员");
public static final String[] ARRAYS = Arrays.stream(values()).map(OperatorTypeEnum::getType).toArray(String[]::new);

View File

@@ -18,7 +18,8 @@ public enum SourceTypeEnum implements ArrayValuable<String> {
TRAFFIC("TRAFFIC", "系统触发"),
INSPECTION("INSPECTION", "巡检发现"),
MANUAL("MANUAL", "手动创建"),
SCHEDULE("SCHEDULE", "定时排班");
SCHEDULE("SCHEDULE", "定时排班"),
ALARM("ALARM", "告警触发");
public static final String[] ARRAYS = Arrays.stream(values()).map(SourceTypeEnum::getType).toArray(String[]::new);