feat(ops): 新增工单业务日志查询接口
- OpsOrderService/Impl: 新增 getOrderBusinessLogs,将 OpsBusinessEventLogDO
转换为前端友好的 OpsOrderBusinessLogRespDTO(type/title/operator/status/extra)
- OpsOrderController: 新增 GET /business-logs/{orderId} 端点
- 新增 OpsOrderBusinessLogRespDTO 和 OpsOrderBusinessLogsRespDTO
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -118,4 +118,12 @@ public interface OpsOrderService {
|
||||
*/
|
||||
void updateIntegrationFields(Long orderId, String triggerSource, Long triggerDeviceId, String triggerDeviceKey);
|
||||
|
||||
/**
|
||||
* 获取工单业务日志
|
||||
*
|
||||
* @param orderId 工单ID
|
||||
* @return 业务日志列表响应
|
||||
*/
|
||||
OpsOrderBusinessLogsRespDTO getOrderBusinessLogs(Long orderId);
|
||||
|
||||
}
|
||||
|
||||
@@ -48,6 +48,9 @@ public class OpsOrderServiceImpl implements OpsOrderService {
|
||||
@Resource
|
||||
private OrderLifecycleManager orderLifecycleManager;
|
||||
|
||||
@Resource
|
||||
private com.viewsh.module.ops.dal.mysql.log.OpsBusinessEventLogMapper businessEventLogMapper;
|
||||
|
||||
private static final DateTimeFormatter ORDER_CODE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
|
||||
@Override
|
||||
@@ -305,6 +308,88 @@ public class OpsOrderServiceImpl implements OpsOrderService {
|
||||
orderId, triggerSource, triggerDeviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OpsOrderBusinessLogsRespDTO getOrderBusinessLogs(Long orderId) {
|
||||
// 1. 查询工单
|
||||
OpsOrderDO order = opsOrderMapper.selectById(orderId);
|
||||
if (order == null) {
|
||||
throw new RuntimeException("工单不存在: " + orderId);
|
||||
}
|
||||
|
||||
// 2. 查询业务日志(按时间倒序)
|
||||
var logDOList = businessEventLogMapper.selectListByOrderId(orderId);
|
||||
|
||||
// 3. 转换为 DTO
|
||||
var logDTOList = logDOList.stream()
|
||||
.map(this::convertToBusinessLogDTO)
|
||||
.toList();
|
||||
|
||||
// 4. 构建响应
|
||||
OpsOrderBusinessLogsRespDTO response = new OpsOrderBusinessLogsRespDTO();
|
||||
response.setOrderId(orderId);
|
||||
response.setLogs(logDTOList);
|
||||
|
||||
log.info("查询工单业务日志成功: orderId={}, logCount={}", orderId, logDTOList.size());
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换业务日志 DO 为 DTO
|
||||
*
|
||||
* @param logDO 日志 DO
|
||||
* @return 日志 DTO
|
||||
*/
|
||||
private OpsOrderBusinessLogRespDTO convertToBusinessLogDTO(com.viewsh.module.ops.dal.dataobject.log.OpsBusinessEventLogDO logDO) {
|
||||
OpsOrderBusinessLogRespDTO dto = new OpsOrderBusinessLogRespDTO();
|
||||
dto.setId(logDO.getId());
|
||||
|
||||
// type: 根据 eventDomain 映射为 system 或 user
|
||||
// SYSTEM/AUDIT → system, 其他 → user
|
||||
String type = "system";
|
||||
if (logDO.getEventDomain() != null) {
|
||||
if ("SYSTEM".equalsIgnoreCase(logDO.getEventDomain()) ||
|
||||
"AUDIT".equalsIgnoreCase(logDO.getEventDomain())) {
|
||||
type = "system";
|
||||
} else {
|
||||
type = "user";
|
||||
}
|
||||
}
|
||||
dto.setType(type);
|
||||
|
||||
// title: 优先使用 eventSummary,否则使用 eventType
|
||||
String title = logDO.getEventSummary();
|
||||
if (title == null || title.isEmpty()) {
|
||||
title = logDO.getEventType() != null ? logDO.getEventType() : "工单操作";
|
||||
}
|
||||
dto.setTitle(title);
|
||||
|
||||
// content: eventMessage
|
||||
dto.setContent(logDO.getEventMessage());
|
||||
|
||||
// operator: 优先使用 personName,否则使用 "系统"
|
||||
String operator = logDO.getPersonName();
|
||||
if (operator == null || operator.isEmpty()) {
|
||||
operator = "系统";
|
||||
}
|
||||
dto.setOperator(operator);
|
||||
|
||||
// time: eventTime
|
||||
dto.setTime(logDO.getEventTime());
|
||||
|
||||
// status: 从 eventPayload 中提取,如果没有则为 null
|
||||
String status = null;
|
||||
if (logDO.getEventPayload() != null && logDO.getEventPayload().containsKey("status")) {
|
||||
status = String.valueOf(logDO.getEventPayload().get("status"));
|
||||
}
|
||||
dto.setStatus(status);
|
||||
|
||||
// extra: eventPayload
|
||||
dto.setExtra(logDO.getEventPayload());
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成工单编号
|
||||
* 格式:WO + yyyyMMddHHmmss + 3位随机数
|
||||
|
||||
@@ -141,4 +141,13 @@ public class OpsOrderController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/business-logs/{orderId}")
|
||||
@Operation(summary = "获取工单业务日志")
|
||||
@Parameter(name = "orderId", description = "工单ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('ops:order:query')")
|
||||
public CommonResult<OpsOrderBusinessLogsRespDTO> getOrderBusinessLogs(@PathVariable("orderId") Long orderId) {
|
||||
OpsOrderBusinessLogsRespDTO logs = opsOrderService.getOrderBusinessLogs(orderId);
|
||||
return success(logs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user