package com.mes.device.controller; import com.mes.device.entity.DeviceStatus; import com.mes.device.service.DeviceStatusService; import com.mes.vo.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; /** * 设备状态管理控制器 */ @RestController @RequestMapping("device/status") @Api(tags = "设备状态管理") @Validated @RequiredArgsConstructor public class DeviceStatusController { private final DeviceStatusService deviceStatusService; @PostMapping("/update") @ApiOperation("更新设备在线状态") public Result updateDeviceOnlineStatus( @Valid @RequestBody DeviceStatusUpdateRequest request) { try { boolean success = deviceStatusService.updateDeviceOnlineStatus( request.getDeviceId(), request.getStatus() ); if (success) { return Result.success(true); } else { return Result.error("更新设备在线状态失败"); } } catch (Exception e) { return Result.error("更新设备在线状态失败: " + e.getMessage()); } } @PostMapping("/batch-update") @ApiOperation("批量更新设备在线状态") public Result batchUpdateDeviceOnlineStatus( @Valid @RequestBody DeviceStatusBatchUpdateRequest request) { try { boolean success = deviceStatusService.batchUpdateDeviceOnlineStatus( request.getDeviceIds(), request.getStatus() ); if (success) { return Result.success(true); } else { return Result.error("批量更新设备在线状态失败"); } } catch (Exception e) { return Result.error("批量更新设备在线状态失败: " + e.getMessage()); } } @GetMapping("/latest/{deviceId}") @ApiOperation("获取设备最新状态") public Result getLatestStatus( @ApiParam(value = "设备配置ID", required = true) @PathVariable Long deviceId) { try { DeviceStatus status = deviceStatusService.getLatestByDeviceConfigId(deviceId); return Result.success(status); } catch (Exception e) { return Result.error("获取设备状态失败: " + e.getMessage()); } } @PostMapping("/heartbeat") @ApiOperation("记录设备心跳") public Result recordHeartbeat( @Valid @RequestBody DeviceHeartbeatRequest request) { try { boolean success = deviceStatusService.recordHeartbeat( request.getDeviceId(), request.getStatus() ); if (success) { return Result.success(true); } else { return Result.error("记录设备心跳失败"); } } catch (Exception e) { return Result.error("记录设备心跳失败: " + e.getMessage()); } } /** * 设备状态更新请求 */ @Data public static class DeviceStatusUpdateRequest { @NotNull(message = "设备ID不能为空") @ApiParam(value = "设备配置ID", required = true) private Long deviceId; @NotEmpty(message = "设备状态不能为空") @ApiParam(value = "设备状态(ONLINE/OFFLINE/BUSY/ERROR/MAINTENANCE)", required = true) private String status; } /** * 批量设备状态更新请求 */ @Data public static class DeviceStatusBatchUpdateRequest { @NotEmpty(message = "设备ID列表不能为空") @ApiParam(value = "设备配置ID列表", required = true) private List deviceIds; @NotEmpty(message = "设备状态不能为空") @ApiParam(value = "设备状态(ONLINE/OFFLINE/BUSY/ERROR/MAINTENANCE)", required = true) private String status; } /** * 设备心跳请求 */ @Data public static class DeviceHeartbeatRequest { @NotEmpty(message = "设备ID不能为空") @ApiParam(value = "设备ID(device_config.device_id)", required = true) private String deviceId; @ApiParam(value = "设备状态(可选,默认为ONLINE)") private String status; } }