采用**策略模式 + 工厂模式**实现设备逻辑处理,支持不同设备类型的差异化逻辑处理。
com.mes.interaction/
├── DeviceLogicHandler.java # 处理器接口
├── BaseDeviceLogicHandler.java # 基础抽象类
├── DeviceLogicHandlerFactory.java # 工厂类
└── impl/
├── LoadVehicleLogicHandler.java # 上大车逻辑处理器
├── LargeGlassLogicHandler.java # 大理片逻辑处理器
└── GlassStorageLogicHandler.java # 玻璃存储逻辑处理器
设备逻辑参数存储在 DeviceConfig.extraParams 的 deviceLogic 节点中:
{
"connectionConfig": { ... },
"plcConfig": { ... },
"deviceLogic": {
"vehicleCapacity": 6000,
"glassIntervalMs": 1000,
"autoFeed": true,
"positionMapping": {
"POS1": 1,
"POS2": 2
}
}
}
用户调用接口
↓
Service 层获取设备配置(包含 extraParams)
↓
Factory 根据 deviceType 选择对应的 Handler
↓
Handler 从 extraParams.deviceLogic 读取配置参数
↓
Handler 根据配置参数和运行时参数执行逻辑
↓
调用 DevicePlcOperationService.writeFields() 写入PLC
@Autowired
private DeviceInteractionService deviceInteractionService;
// 执行操作
Map<String, Object> params = new HashMap<>();
params.put("glassIds", Arrays.asList("GLS001", "GLS002"));
params.put("positionCode", "POS1");
OperationResult result = deviceInteractionService.executeOperation(
deviceId,
"feedGlass",
params
);
@Autowired
private DeviceLogicHandlerFactory handlerFactory;
@Autowired
private DeviceConfigService deviceConfigService;
// 获取设备和处理器
DeviceConfig device = deviceConfigService.getDeviceById(deviceId);
DeviceLogicHandler handler = handlerFactory.getHandler(device.getDeviceType());
// 执行操作
Map<String, Object> params = new HashMap<>();
params.put("glassIds", Arrays.asList("GLS001"));
OperationResult result = handler.execute(device, "feedGlass", params);
feedGlass - 玻璃上料triggerRequest - 触发请求triggerReport - 触发汇报reset - 重置processGlass - 玻璃加工triggerRequest - 触发请求triggerReport - 触发汇报reset - 重置storeGlass - 存储玻璃retrieveGlass - 取货triggerRequest - 触发请求triggerReport - 触发汇报reset - 重置@Component
public class NewDeviceLogicHandler extends BaseDeviceLogicHandler {
public NewDeviceLogicHandler(DevicePlcOperationService devicePlcOperationService) {
super(devicePlcOperationService);
}
@Override
public String getDeviceType() {
return "新设备类型";
}
@Override
protected OperationResult doExecute(...) {
// 实现具体逻辑
}
}
public static final String NEW_DEVICE = "新设备类型";
实现 getDefaultLogicParams() 方法,返回默认的JSON配置。
validateLogicParams() 方法进行参数验证getLogicParam() 方法获取参数,支持默认值OperationResultfeedGlass() 方法,优先使用新架构,失败时降级到旧逻辑