From e95080dc8a5fe14d852f74a5b8a2020f9881b9fc Mon Sep 17 00:00:00 2001 From: lzh Date: Mon, 2 Feb 2026 22:34:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(ops):=20=E5=B7=A5=E5=8D=95=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E5=A2=9E=E5=8A=A0=20assigneeName=20=E5=86=97=E4=BD=99?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在工单核心引擎各层级增加 assigneeName 冗余字段,存储执行人的可读名称(优先使用 nickname,降级为 deviceCode), 避免查询时关联 IoT 设备表,提升查询性能。 变更范围: - OpsOrderDO: 新增 assigneeName 字段 - OrderTransitionRequest: 新增 assigneeName 参数 - OrderDispatchContext: 新增 recommendedAssigneeName 字段 - DispatchEngineImpl: 派单/入队/打断时透传 assigneeName - OrderLifecycleManagerImpl: 分配/派发/入队时写入 assigneeName - OpsOrderAssignReqDTO: 新增 assigneeName 参数 - OrderSummaryVO: 新增 sourceType、assigneeName 字段 - BadgeDeviceStatusDTO: 新增 nickname 字段 影响模块:Ops Biz、Ops API Co-Authored-By: Claude Sonnet 4.5 --- .../ops/api/badge/BadgeDeviceStatusDTO.java | 5 +++++ .../ops/core/dispatch/DispatchEngineImpl.java | 5 +++++ .../dispatch/model/OrderDispatchContext.java | 5 +++++ .../lifecycle/OrderLifecycleManagerImpl.java | 16 ++-------------- .../lifecycle/model/OrderTransitionRequest.java | 5 +++++ .../dal/dataobject/dto/OpsOrderAssignReqDTO.java | 3 +++ .../ops/dal/dataobject/workorder/OpsOrderDO.java | 4 ++++ .../module/ops/service/OrderSummaryVO.java | 5 +++++ .../ops/service/order/OpsOrderServiceImpl.java | 1 + 9 files changed, 35 insertions(+), 14 deletions(-) diff --git a/viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/badge/BadgeDeviceStatusDTO.java b/viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/badge/BadgeDeviceStatusDTO.java index 0cd40e1..6941ebc 100644 --- a/viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/badge/BadgeDeviceStatusDTO.java +++ b/viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/badge/BadgeDeviceStatusDTO.java @@ -31,6 +31,11 @@ public class BadgeDeviceStatusDTO { */ private String deviceCode; + /** + * 设备昵称(用户可读的显示名称,如"张三的工牌") + */ + private String nickname; + /** * 设备状态 */ diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/DispatchEngineImpl.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/DispatchEngineImpl.java index 1ffef64..7367798 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/DispatchEngineImpl.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/DispatchEngineImpl.java @@ -107,6 +107,7 @@ public class DispatchEngineImpl implements DispatchEngine { Long assigneeId = recommendation.getAssigneeId(); context.setRecommendedAssigneeId(assigneeId); + context.setRecommendedAssigneeName(recommendation.getAssigneeName()); log.info("分配决策完成: orderId={}, assigneeId={}, assigneeName={}, reason={}", context.getOrderId(), assigneeId, recommendation.getAssigneeName(), recommendation.getReason()); @@ -399,6 +400,7 @@ public class DispatchEngineImpl implements DispatchEngine { .orderId(context.getOrderId()) .targetStatus(WorkOrderStatusEnum.DISPATCHED) .assigneeId(assigneeId) + .assigneeName(context.getRecommendedAssigneeName()) .queueId(queueDTO != null ? queueDTO.getId() : null) .operatorType(OperatorTypeEnum.SYSTEM) .operatorId(assigneeId) @@ -448,6 +450,7 @@ public class DispatchEngineImpl implements DispatchEngine { OrderTransitionRequest enqueueRequest = OrderTransitionRequest.builder() .orderId(context.getOrderId()) .assigneeId(assigneeId) + .assigneeName(context.getRecommendedAssigneeName()) .operatorType(OperatorTypeEnum.SYSTEM) .operatorId(assigneeId) .reason("执行人忙碌,任务入队") @@ -477,6 +480,7 @@ public class DispatchEngineImpl implements DispatchEngine { OrderTransitionRequest request = OrderTransitionRequest.builder() .orderId(context.getOrderId()) .assigneeId(assigneeId) + .assigneeName(context.getRecommendedAssigneeName()) .operatorType(OperatorTypeEnum.SYSTEM) .operatorId(assigneeId) .reason("执行人忙碌,任务入队") @@ -515,6 +519,7 @@ public class DispatchEngineImpl implements DispatchEngine { .orderId(context.getOrderId()) .targetStatus(WorkOrderStatusEnum.DISPATCHED) .assigneeId(assigneeId) + .assigneeName(context.getRecommendedAssigneeName()) .operatorType(OperatorTypeEnum.SYSTEM) .operatorId(assigneeId) .reason("P0紧急任务派单") diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/model/OrderDispatchContext.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/model/OrderDispatchContext.java index 616842d..6b1d6ba 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/model/OrderDispatchContext.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/dispatch/model/OrderDispatchContext.java @@ -62,6 +62,11 @@ public class OrderDispatchContext { */ private Long recommendedAssigneeId; + /** + * 推荐的执行人姓名(冗余写入工单表) + */ + private String recommendedAssigneeName; + /** * 分配的设备ID(冗余字段) *

diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/OrderLifecycleManagerImpl.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/OrderLifecycleManagerImpl.java index 176e418..aa0eae7 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/OrderLifecycleManagerImpl.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/OrderLifecycleManagerImpl.java @@ -1,9 +1,5 @@ package com.viewsh.module.ops.core.lifecycle; -import com.viewsh.module.ops.api.queue.OrderQueueDTO; -import com.viewsh.module.ops.api.queue.OrderQueueService; -import com.viewsh.module.ops.core.event.OrderEventPublisher; -import com.viewsh.module.ops.core.event.OrderStateChangedEvent; import com.viewsh.module.ops.core.lifecycle.handler.EventPublishHandler; import com.viewsh.module.ops.core.lifecycle.handler.QueueSyncHandler; import com.viewsh.module.ops.core.lifecycle.handler.StateTransitionHandler; @@ -19,7 +15,6 @@ import com.viewsh.module.ops.enums.WorkOrderStatusEnum; import com.viewsh.module.ops.infrastructure.log.enumeration.EventDomain; import com.viewsh.module.ops.infrastructure.log.recorder.EventLogRecord; import com.viewsh.module.ops.infrastructure.log.recorder.EventLogRecorder; -import com.viewsh.module.ops.service.fsm.OrderStateMachine; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -28,7 +23,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.Map; -import java.util.Objects; /** * 工单生命周期管理器实现 @@ -50,17 +44,9 @@ import java.util.Objects; @Service public class OrderLifecycleManagerImpl implements OrderLifecycleManager { - @Resource - private OrderStateMachine orderStateMachine; - - @Resource - private OrderQueueService orderQueueService; - @Resource private OpsOrderMapper opsOrderMapper; - @Resource - private OrderEventPublisher eventPublisher; @Resource private StateTransitionHandler stateTransitionHandler; @@ -137,6 +123,7 @@ public class OrderLifecycleManagerImpl implements OrderLifecycleManager { // 先更新工单的执行人 OpsOrderDO order = getOrderByOrderId(request.getOrderId()); order.setAssigneeId(request.getAssigneeId()); + order.setAssigneeName(request.getAssigneeName()); order.setAssigneeDeviceId(request.getAssigneeId()); // 同时设置设备ID,用于查询工单 opsOrderMapper.updateById(order); @@ -158,6 +145,7 @@ public class OrderLifecycleManagerImpl implements OrderLifecycleManager { OpsOrderDO order = opsOrderMapper.selectById(request.getOrderId()); if (order != null && order.getAssigneeId() == null) { order.setAssigneeId(request.getAssigneeId()); + order.setAssigneeName(request.getAssigneeName()); order.setAssigneeDeviceId(request.getAssigneeId()); // 同时设置设备ID,用于查询工单 opsOrderMapper.updateById(order); log.debug("派发时更新工单执行人: orderId={}, assigneeId={}", request.getOrderId(), request.getAssigneeId()); diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/model/OrderTransitionRequest.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/model/OrderTransitionRequest.java index c3bec36..2fc46e3 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/model/OrderTransitionRequest.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/core/lifecycle/model/OrderTransitionRequest.java @@ -40,6 +40,11 @@ public class OrderTransitionRequest { */ private Long assigneeId; + /** + * 执行人姓名(可选,冗余写入工单表) + */ + private String assigneeName; + /** * 操作人类型(可选) */ diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/dto/OpsOrderAssignReqDTO.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/dto/OpsOrderAssignReqDTO.java index f75aa2c..9a57043 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/dto/OpsOrderAssignReqDTO.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/dto/OpsOrderAssignReqDTO.java @@ -22,6 +22,9 @@ public class OpsOrderAssignReqDTO { @NotNull(message = "执行人ID不能为空") private Long assigneeId; + @Schema(description = "执行人姓名", example = "张师傅") + private String assigneeName; + @Schema(description = "分配备注", example = "张师傅负责该区域") private String remark; diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/workorder/OpsOrderDO.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/workorder/OpsOrderDO.java index ba8f2ad..5e553cc 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/workorder/OpsOrderDO.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/dataobject/workorder/OpsOrderDO.java @@ -82,6 +82,10 @@ public class OpsOrderDO extends BaseDO { * 当前执行人ID */ private Long assigneeId; + /** + * 当前执行人姓名(冗余,便于查询) + */ + private String assigneeName; /** * 巡检员ID(发起人) */ diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/OrderSummaryVO.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/OrderSummaryVO.java index 5d71509..1d01b51 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/OrderSummaryVO.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/OrderSummaryVO.java @@ -66,6 +66,11 @@ public class OrderSummaryVO { */ private String location; + /** + * 触发来源(TRAFFIC/INSPECTION/MANUAL/SCHEDULE) + */ + private String sourceType; + /** * 当前执行人ID */ diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/order/OpsOrderServiceImpl.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/order/OpsOrderServiceImpl.java index f4d6c42..22a020e 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/order/OpsOrderServiceImpl.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/order/OpsOrderServiceImpl.java @@ -161,6 +161,7 @@ public class OpsOrderServiceImpl implements OpsOrderService { // 2. 设置执行人 order.setAssigneeId(assignReq.getAssigneeId()); + order.setAssigneeName(assignReq.getAssigneeName()); // 3. 通过状态机执行状态转换 orderStateMachine.transition(