package com.mes.interaction.flow; import com.mes.device.entity.DeviceConfig; import com.mes.interaction.DeviceInteraction; import com.mes.interaction.base.InteractionContext; import com.mes.interaction.base.InteractionResult; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 大理片交互实现 */ @Component public class LargeGlassInteraction implements DeviceInteraction { @Override public String getDeviceType() { return DeviceConfig.DeviceType.LARGE_GLASS; } @Override public InteractionResult execute(InteractionContext context) { try { // 前置条件验证 if (context.getCurrentDevice() == null) { return InteractionResult.fail("设备配置不存在"); } // 检查大车设备是否完成 Object source = context.getSharedData().get("glassesFromVehicle"); List glassQueue = castList(source); if (CollectionUtils.isEmpty(glassQueue)) { // 也尝试从上下文获取 glassQueue = context.getLoadedGlassIds(); if (CollectionUtils.isEmpty(glassQueue)) { return InteractionResult.waitResult("等待大车设备输出", null); } } // 验证玻璃ID for (String glassId : glassQueue) { if (glassId == null || glassId.trim().isEmpty()) { return InteractionResult.fail("玻璃ID不能为空"); } } // 执行大理片处理 List processed = new ArrayList<>(glassQueue); context.setProcessedGlassIds(processed); context.getSharedData().put("processedGlasses", processed); context.getSharedData().put("largeGlassProcessTime", System.currentTimeMillis()); // 后置条件检查 if (context.getProcessedGlassIds().isEmpty()) { return InteractionResult.fail("大理片处理失败:处理后的玻璃ID列表为空"); } Map data = new HashMap<>(); data.put("processedCount", processed.size()); data.put("processedGlasses", processed); data.put("deviceId", context.getCurrentDevice().getId()); data.put("deviceCode", context.getCurrentDevice().getDeviceCode()); return InteractionResult.success(data); } catch (Exception e) { return InteractionResult.fail("大理片交互执行异常: " + e.getMessage()); } } @SuppressWarnings("unchecked") private List castList(Object value) { if (value instanceof List) { return (List) value; } return null; } }