feat(ops): 手动派单遵循执行人忙碌状态,忙碌时入队等待

ManualOrderActionFacade.dispatch:
- 新增 strategy.isAssigneeIdle() 判断,空闲→DISPATCHED,忙碌→QUEUED
- 不再无条件直接派发

OrderBusinessStrategy:
- 新增 isAssigneeIdle() 默认方法,默认返回 true

CleanOrderBusinessStrategy:
- isAssigneeIdle 通过 BadgeDeviceStatusService.isBusy() 判断设备忙碌

SecurityOrderBusinessStrategy:
- isAssigneeIdle 通过 UserDispatchStatusService.isIdle() 判断人员忙碌

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-03-27 16:37:30 +08:00
parent 78396cf35a
commit 55ef659364
4 changed files with 39 additions and 8 deletions

View File

@@ -8,13 +8,11 @@ import com.viewsh.module.ops.enums.WorkOrderStatusEnum;
import com.viewsh.module.ops.enums.WorkOrderTypeEnum;
import com.viewsh.module.ops.security.dal.dataobject.area.OpsAreaSecurityUserDO;
import com.viewsh.module.ops.security.dal.mysql.area.OpsAreaSecurityUserMapper;
import com.viewsh.module.ops.service.dispatch.UserDispatchStatusService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import static com.viewsh.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.viewsh.module.ops.enums.ErrorCodeConstants.SECURITY_ASSIGNEE_NOT_BOUND_TO_AREA;
/**
* 安保条线策略
* <p>
@@ -32,11 +30,19 @@ public class SecurityOrderBusinessStrategy implements OrderBusinessStrategy {
@Resource
private OrderQueueService orderQueueService;
@Resource
private UserDispatchStatusService userDispatchStatusService;
@Override
public boolean supports(String businessType) {
return WorkOrderTypeEnum.SECURITY.getType().equals(businessType);
}
@Override
public boolean isAssigneeIdle(DispatchOrderCommand cmd, OpsOrderDO order) {
return userDispatchStatusService.isIdle(cmd.getAssigneeId());
}
@Override
public void validateDispatch(DispatchOrderCommand cmd, OpsOrderDO order) {
// 尝试从区域绑定记录回填姓名(不做区域限制,允许跨区域派单)