feat(ops): 整改工单去重 — 已有活跃工单时升级优先级而非重复创建

- InspectionRectificationServiceImpl 先查区域活跃保洁工单:
  排队中(PENDING/QUEUED)→升级一级优先级;已派发/已到达→静默跳过
- OpsOrderMapper 新增 selectActiveCleanOrder,使用枚举替代硬编码终态
- InspectionAsyncHandler 清理归属判定注释代码,替换为 TODO 标记

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-03-22 15:00:25 +08:00
parent f213510b03
commit 47c768ec6f
3 changed files with 95 additions and 15 deletions

View File

@@ -4,6 +4,7 @@ import com.viewsh.framework.mybatis.core.mapper.BaseMapperX;
import com.viewsh.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.viewsh.module.ops.controller.admin.workorder.vo.statistics.*;
import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO;
import com.viewsh.module.ops.enums.WorkOrderStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -74,6 +75,23 @@ public interface OpsOrderMapper extends BaseMapperX<OpsOrderDO> {
.last("LIMIT 1"));
}
/**
* 查询区域内保洁类型的活跃工单(非终态,不限触发来源)
*
* @param areaId 区域ID
* @return 最近创建的活跃保洁工单,不存在返回 null
*/
default OpsOrderDO selectActiveCleanOrder(Long areaId) {
return selectOne(new LambdaQueryWrapperX<OpsOrderDO>()
.eq(OpsOrderDO::getAreaId, areaId)
.eq(OpsOrderDO::getOrderType, "CLEAN")
.notIn(OpsOrderDO::getStatus,
WorkOrderStatusEnum.COMPLETED.getStatus(),
WorkOrderStatusEnum.CANCELLED.getStatus())
.orderByDesc(OpsOrderDO::getCreateTime)
.last("LIMIT 1"));
}
// ==================== 统计聚合查询 ====================
/**