huang
2025-11-26 792236ef78c2cdd3a989fb40a7f2e2487c4e17b6
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package com.mes.device.service;
 
import com.mes.device.entity.DeviceConfig;
import com.mes.device.entity.DeviceGroupConfig;
import com.mes.task.model.TaskExecutionContext;
 
import java.util.List;
import java.util.Map;
 
/**
 * 设备协调服务
 * 负责设备间数据传递、状态同步、依赖管理等协调工作
 * 
 * @author mes
 * @since 2025-01-XX
 */
public interface DeviceCoordinationService {
 
    /**
     * 协调设备组执行
     * 根据设备依赖关系和执行顺序,协调多个设备的执行
     * 
     * @param groupConfig 设备组配置
     * @param devices 设备列表(已按执行顺序排序)
     * @param context 任务执行上下文
     * @return 协调结果,包含是否可以执行、依赖关系等信息
     */
    CoordinationResult coordinateExecution(DeviceGroupConfig groupConfig, 
                                          List<DeviceConfig> devices, 
                                          TaskExecutionContext context);
 
    /**
     * 传递数据到下一个设备
     * 将当前设备的数据传递给下一个设备
     * 
     * @param fromDevice 源设备
     * @param toDevice 目标设备
     * @param data 要传递的数据
     * @param context 任务执行上下文
     * @return 是否传递成功
     */
    boolean transferData(DeviceConfig fromDevice, 
                        DeviceConfig toDevice, 
                        Map<String, Object> data, 
                        TaskExecutionContext context);
 
    /**
     * 同步设备状态
     * 将设备状态同步到共享上下文
     * 
     * @param device 设备配置
     * @param status 设备状态
     * @param context 任务执行上下文
     */
    void syncDeviceStatus(DeviceConfig device, 
                         DeviceStatus status, 
                         TaskExecutionContext context);
 
    /**
     * 检查设备依赖关系
     * 检查设备是否满足执行的前置条件
     * 
     * @param device 设备配置
     * @param context 任务执行上下文
     * @return 依赖检查结果
     */
    DependencyCheckResult checkDependencies(DeviceConfig device, 
                                            TaskExecutionContext context);
 
    /**
     * 获取设备依赖的设备列表
     * 
     * @param device 设备配置
     * @param groupConfig 设备组配置
     * @return 依赖的设备列表
     */
    List<DeviceConfig> getDependentDevices(DeviceConfig device, 
                                           DeviceGroupConfig groupConfig);
 
    /**
     * 协调结果
     */
    class CoordinationResult {
        private final boolean canExecute;
        private final String message;
        private final Map<String, Object> metadata;
 
        public CoordinationResult(boolean canExecute, String message, Map<String, Object> metadata) {
            this.canExecute = canExecute;
            this.message = message;
            this.metadata = metadata;
        }
 
        public static CoordinationResult success(String message) {
            return new CoordinationResult(true, message, null);
        }
 
        public static CoordinationResult success(String message, Map<String, Object> metadata) {
            return new CoordinationResult(true, message, metadata);
        }
 
        public static CoordinationResult failure(String message) {
            return new CoordinationResult(false, message, null);
        }
 
        public boolean canExecute() {
            return canExecute;
        }
 
        public String getMessage() {
            return message;
        }
 
        public Map<String, Object> getMetadata() {
            return metadata;
        }
    }
 
    /**
     * 设备状态
     */
    enum DeviceStatus {
        IDLE,           // 空闲
        READY,          // 就绪
        RUNNING,        // 运行中
        COMPLETED,      // 已完成
        FAILED,         // 失败
        WAITING         // 等待中
    }
 
    /**
     * 依赖检查结果
     */
    class DependencyCheckResult {
        private final boolean satisfied;
        private final String message;
        private final List<String> missingDependencies;
 
        public DependencyCheckResult(boolean satisfied, String message, List<String> missingDependencies) {
            this.satisfied = satisfied;
            this.message = message;
            this.missingDependencies = missingDependencies;
        }
 
        public static DependencyCheckResult satisfied() {
            return new DependencyCheckResult(true, "依赖条件满足", null);
        }
 
        public static DependencyCheckResult unsatisfied(String message, List<String> missingDependencies) {
            return new DependencyCheckResult(false, message, missingDependencies);
        }
 
        public boolean isSatisfied() {
            return satisfied;
        }
 
        public String getMessage() {
            return message;
        }
 
        public List<String> getMissingDependencies() {
            return missingDependencies;
        }
    }
}