package com.mes.device.controller; import com.mes.device.request.DevicePlcBatchRequest; import com.mes.device.service.DevicePlcOperationService; import com.mes.device.vo.DevicePlcVO; import com.mes.vo.Result; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** * 设备 PLC 操作控制器 * * @author mes * @since 2025-11-17 */ @Slf4j @Validated @RestController @RequiredArgsConstructor @RequestMapping("device/plc") @Tag(name = "设备PLC操作", description = "多设备PLC写入与状态查询接口") public class DevicePlcController { private final DevicePlcOperationService devicePlcOperationService; @PostMapping("/requests") @Operation(summary = "批量触发PLC请求", description = "对指定设备发送PLC请求字") public Result> triggerRequests( @Valid @RequestBody DevicePlcBatchRequest request) { return Result.success(devicePlcOperationService.triggerRequest(request.getDeviceIds())); } @PostMapping("/reports") @Operation(summary = "批量模拟PLC汇报", description = "对指定设备模拟PLC任务完成汇报") public Result> triggerReports( @Valid @RequestBody DevicePlcBatchRequest request) { return Result.success(devicePlcOperationService.triggerReport(request.getDeviceIds())); } @PostMapping("/resets") @Operation(summary = "批量重置PLC状态", description = "重置指定设备关联PLC的关键字段") public Result> resetPlc( @Valid @RequestBody DevicePlcBatchRequest request) { return Result.success(devicePlcOperationService.resetDevices(request.getDeviceIds())); } @PostMapping("/groups/{groupId}/request") @Operation(summary = "设备组触发PLC请求", description = "对设备组内所有设备发送PLC请求字") public Result> triggerGroupRequest( @PathVariable Long groupId) { return Result.success(devicePlcOperationService.triggerRequestByGroup(groupId)); } @PostMapping("/groups/{groupId}/report") @Operation(summary = "设备组模拟PLC汇报", description = "对设备组内所有设备模拟任务完成汇报") public Result> triggerGroupReport( @PathVariable Long groupId) { return Result.success(devicePlcOperationService.triggerReportByGroup(groupId)); } @GetMapping("/status/{deviceId}") @Operation(summary = "查询设备PLC状态", description = "读取单台设备的PLC数据") public Result readStatus(@PathVariable Long deviceId) { return Result.success(devicePlcOperationService.readStatus(deviceId)); } @GetMapping("/groups/{groupId}/status") @Operation(summary = "查询设备组PLC状态", description = "读取设备组内所有设备的PLC数据") public Result> readGroupStatus(@PathVariable Long groupId) { return Result.success(devicePlcOperationService.readStatusByGroup(groupId)); } }