feat(security): 安保派单补充处理人手机号,接口返回 phone 和 cameraName

- SecurityAreaAssignStrategy 注入 AdminUserApi,从用户表查询
  nickname 和 mobile 替代冗余字段
- OpsOrderSecurityExtDO 新增 assignedUserPhone 字段
- SecurityOrderEventListener.handleDispatched 写入 assignedUserId、
  assignedUserName、assignedUserPhone 到扩展表
- SecurityOrderExtQueryHandler 接口返回补充 assignedUserPhone 和
  cameraName

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-03-25 14:26:54 +08:00
parent 718d14e162
commit 0dfc669488
4 changed files with 31 additions and 4 deletions

View File

@@ -70,6 +70,10 @@ public class OpsOrderSecurityExtDO extends BaseDO {
* 处理人姓名
*/
private String assignedUserName;
/**
* 处理人手机号
*/
private String assignedUserPhone;
/**
* 班组ID
*/

View File

@@ -154,15 +154,20 @@ public class SecurityOrderEventListener {
// ==================== 状态处理方法 ====================
private void handleDispatched(Long orderId, OrderStateChangedEvent event) {
// 1. 记录下发时间
// 1. 记录下发时间 + 处理人信息
Long assigneeId = event.getPayloadLong("assigneeId");
String assigneeName = (String) event.getPayload().get("assigneeName");
String assigneePhone = (String) event.getPayload().get("assigneePhone");
OpsOrderSecurityExtDO extUpdate = new OpsOrderSecurityExtDO();
extUpdate.setOpsOrderId(orderId);
extUpdate.setDispatchedTime(LocalDateTime.now());
extUpdate.setAssignedUserId(assigneeId);
extUpdate.setAssignedUserName(assigneeName);
extUpdate.setAssignedUserPhone(assigneePhone);
securityExtMapper.insertOrUpdateSelective(extUpdate);
// 2. 业务日志
Long assigneeId = event.getPayloadLong("assigneeId");
String assigneeName = (String) event.getPayload().get("assigneeName");
String message = assigneeName != null
? String.format("工单已派发给 %s", assigneeName)
: "工单已派发";

View File

@@ -8,6 +8,8 @@ import com.viewsh.module.ops.core.dispatch.strategy.AssignStrategy;
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.system.api.user.AdminUserApi;
import com.viewsh.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -35,6 +37,9 @@ public class SecurityAreaAssignStrategy implements AssignStrategy {
@Resource
private OpsAreaSecurityUserMapper areaSecurityUserMapper;
@Resource
private AdminUserApi adminUserApi;
@PostConstruct
public void init() {
dispatchEngine.registerAssignStrategy(BUSINESS_TYPE, this);
@@ -67,8 +72,19 @@ public class SecurityAreaAssignStrategy implements AssignStrategy {
// 选择 sort 值最小的人员sort 越小优先级越高,由 Mapper 已按 sort ASC 排序)
OpsAreaSecurityUserDO chosen = users.get(0);
// 从系统用户表查询 nickname 和 mobile
String assigneeName = chosen.getUserName(); // 兜底使用冗余字段
String assigneePhone = null;
AdminUserRespDTO user = adminUserApi.getUser(chosen.getUserId()).getCheckedData();
if (user != null) {
assigneeName = user.getNickname();
assigneePhone = user.getMobile();
}
AssigneeRecommendation recommendation = AssigneeRecommendation.of(
chosen.getUserId(), chosen.getUserName(), 50, "区域排序优先分配");
chosen.getUserId(), assigneeName, 50, "区域排序优先分配");
recommendation.setAssigneePhone(assigneePhone);
recommendation.setAreaId(areaId);
return recommendation;
}

View File

@@ -91,10 +91,12 @@ public class SecurityOrderExtQueryHandler implements OrderExtQueryHandler {
extInfo.put("alarmId", ext.getAlarmId());
extInfo.put("alarmType", ext.getAlarmType());
extInfo.put("cameraId", ext.getCameraId());
extInfo.put("cameraName", ext.getCameraName());
extInfo.put("roiId", ext.getRoiId());
extInfo.put("imageUrl", OssPresignHelper.presignQuietly(fileApi, ext.getImageUrl()));
extInfo.put("assignedUserId", ext.getAssignedUserId());
extInfo.put("assignedUserName", ext.getAssignedUserName());
extInfo.put("assignedUserPhone", ext.getAssignedUserPhone());
extInfo.put("assignedTeamId", ext.getAssignedTeamId());
extInfo.put("result", ext.getResult());
extInfo.put("resultImgUrls", OssPresignHelper.presignJsonArrayQuietly(fileApi, ext.getResultImgUrls()));