huang
2025-11-20 366ba040d2447bacd3455299425e3166f1f992bb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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<Boolean> 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<Boolean> 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<DeviceStatus> 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<Boolean> 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<Long> 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;
    }
}