huang
2025-10-31 1fed5e7bab3a8f6b9adbfcd3695e14a03d47677f
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
package com.mes.controller;
 
import com.mes.entity.PlcBaseData;
import com.mes.service.PlcTestWriteService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
 
import javax.annotation.Resource;
 
/**
 * PLC测试写入控制器
 * 提供PLC测试写入相关的API接口
 * 
 * @author huang
 * @date 2025/10/29
 */
@Slf4j
@RestController
@RequestMapping("/api/plc/test")
@Api(tags = "PLC测试写入接口")
public class PlcTestWriteController {
 
    @Resource
    private PlcTestWriteService plcTestWriteService;
 
    @PostMapping("/simulate/request")
    @ApiOperation("模拟PLC发送请求字(触发MES任务下发)")
    public boolean simulatePlcRequest(
            @ApiParam(value = "项目标识,如vertical、horizontal等,不指定则使用默认项目", example = "vertical")
            @RequestParam(required = false) String projectId) {
        if (projectId != null && !projectId.trim().isEmpty()) {
            return plcTestWriteService.simulatePlcRequest(projectId.trim());
        } else {
            return plcTestWriteService.simulatePlcRequest();
        }
    }
 
    @PostMapping("/simulate/report")
    @ApiOperation("模拟PLC任务完成汇报")
    public boolean simulatePlcReport(
            @ApiParam(value = "项目标识,如vertical、horizontal等,不指定则使用默认项目", example = "vertical")
            @RequestParam(required = false) String projectId) {
        if (projectId != null && !projectId.trim().isEmpty()) {
            return plcTestWriteService.simulatePlcReport(projectId.trim());
        } else {
            return plcTestWriteService.simulatePlcReport();
        }
    }
 
    @PostMapping("/simulate/online")
    @ApiOperation("模拟PLC发送联机状态")
    public boolean simulateOnlineStatus(
            @ApiParam(value = "联机状态:1-联机,0-脱机", required = true, example = "1")
            @RequestParam int onlineState,
            @ApiParam(value = "项目标识,如vertical、horizontal等,不指定则使用默认项目", example = "vertical")
            @RequestParam(required = false) String projectId) {
        if (projectId != null && !projectId.trim().isEmpty()) {
            return plcTestWriteService.simulateOnlineStatus(onlineState, projectId.trim());
        } else {
            return plcTestWriteService.simulateOnlineStatus(onlineState);
        }
    }
 
    @PostMapping("/reset")
    @ApiOperation("重置PLC所有状态")
    public boolean resetPlc(
            @ApiParam(value = "项目标识,如vertical、horizontal等,不指定则使用默认项目", example = "vertical")
            @RequestParam(required = false) String projectId) {
        if (projectId != null && !projectId.trim().isEmpty()) {
            return plcTestWriteService.resetPlc(projectId.trim());
        } else {
            return plcTestWriteService.resetPlc();
        }
    }
 
    @GetMapping("/status")
    @ApiOperation("读取PLC当前状态")
    public PlcBaseData readPlcStatus(
            @ApiParam(value = "项目标识,如vertical、horizontal等,不指定则使用默认项目", example = "vertical")
            @RequestParam(required = false) String projectId) {
        if (projectId != null && !projectId.trim().isEmpty()) {
            return plcTestWriteService.readPlcStatus(projectId.trim());
        } else {
            return plcTestWriteService.readPlcStatus();
        }
    }
 
    @PostMapping("/current-project")
    @ApiOperation("设置当前项目标识")
    public boolean setCurrentProjectId(
            @ApiParam(value = "项目标识,如vertical、horizontal等", required = true, example = "vertical")
            @RequestParam String projectId) {
        try {
            plcTestWriteService.setCurrentProjectId(projectId.trim());
            return true;
        } catch (Exception e) {
            log.error("设置当前项目标识失败", e);
            return false;
        }
    }
 
    @GetMapping("/current-project")
    @ApiOperation("获取当前项目标识")
    public String getCurrentProjectId() {
        return plcTestWriteService.getCurrentProjectId();
    }
 
    @PostMapping("/cache/clear")
    @ApiOperation("清除S7Serializer缓存")
    public boolean clearSerializerCache(
            @ApiParam(value = "项目标识,如vertical、horizontal等,不指定则清除所有缓存", example = "vertical")
            @RequestParam(required = false) String projectId) {
        try {
            if (projectId != null && !projectId.trim().isEmpty()) {
                plcTestWriteService.clearSerializerCache(projectId.trim());
            } else {
                plcTestWriteService.clearAllSerializerCache();
            }
            return true;
        } catch (Exception e) {
            log.error("清除S7Serializer缓存失败", e);
            return false;
        }
    }
}