diff --git a/business/src/main/java/com/fizz/business/dto/SegValue.java b/business/src/main/java/com/fizz/business/dto/SegValue.java index 7687615..eb33fb4 100644 --- a/business/src/main/java/com/fizz/business/dto/SegValue.java +++ b/business/src/main/java/com/fizz/business/dto/SegValue.java @@ -15,9 +15,12 @@ public class SegValue implements Serializable { private BigDecimal avg; private BigDecimal std; private int cnt; - private BigDecimal sum; + private BigDecimal sum = BigDecimal.ZERO; public void add(BigDecimal value) { + if (value == null) { + return; + } this.sum = this.sum.add(value); this.cnt++; } diff --git a/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java index f2a8c5c..2f35f9e 100644 --- a/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java @@ -135,7 +135,6 @@ public class PdoExCoilServiceImpl implements PdoExCoilService { separateFlag = true; exitMatId = exitMatId + "-" + subNum; } - log.info("这个plan里面都有啥:id{}planid{},",plan.getId(),plan.getPlanid()); ExitCoilInfoDTO exitCoil = ExitCoilInfoDTO.builder() .planId(plan.getPlanid()) .entryMatId(entryMatId) diff --git a/business/src/main/java/com/fizz/business/service/impl/SegmentService.java b/business/src/main/java/com/fizz/business/service/impl/SegmentService.java index a75fdca..27f7e02 100644 --- a/business/src/main/java/com/fizz/business/service/impl/SegmentService.java +++ b/business/src/main/java/com/fizz/business/service/impl/SegmentService.java @@ -35,10 +35,9 @@ public class SegmentService { return; } - // 1. 将动态的 Map 数据转换为 JSON 字符串 + // 1. 将动态的 Map 数据转换为 JSON 字符串(存平均值) Map totalValuesAvg = new HashMap<>(); segment.getTotalValues().forEach((key, segValue) -> { - // 这里将 key 拼接上 "_avg" 以示区分,如果需要也可以不加 totalValuesAvg.put(key + "_avg", segValue.getAverage()); }); diff --git a/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java b/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java index 50d462b..2e83fe1 100644 --- a/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java +++ b/business/src/main/java/com/fizz/business/service/strip/SegmentTrackerService.java @@ -23,12 +23,15 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.lang.reflect.Method; +import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentMap; +import static com.fizz.business.constants.enums.DeviceEnum.FUR4; + @Service @Slf4j @RequiredArgsConstructor @@ -165,6 +168,14 @@ public class SegmentTrackerService { segment.setHeadPos(segment.getHeadPos().add(weldDev)); segment.setTailPos(segment.getTailPos().add(weldDev)); + // 根据 SourceType 读取对应测量对象数据,写入段的 totalValues(Map 形式) + EnumMap sourceMessageMap = new EnumMap<>(DeviceEnum.SourceType.class); + sourceMessageMap.put(DeviceEnum.SourceType.ENTRY, entry); + sourceMessageMap.put(DeviceEnum.SourceType.FURNACE, furnace); + sourceMessageMap.put(DeviceEnum.SourceType.COAT, coat); + sourceMessageMap.put(DeviceEnum.SourceType.EXIT, exit); + sourceMessageMap.values().forEach(message -> accumulateMessageFields(segment, message)); + // 遍历所有设备,累积段在设备区域内的数据 for (DeviceEnum device : DeviceEnum.values()) { double currentDevicePos = stripPositionService.calculate(device, celLength, cxlLength); @@ -332,6 +343,27 @@ public class SegmentTrackerService { } } + /** + * 将测量对象中的数值字段累积到段的 totalValues 中 + */ + private void accumulateMessageFields(SegmentDTO segment, Object message) { + if (segment == null || message == null) { + return; + } + for (Field field : message.getClass().getDeclaredFields()) { + try { + field.setAccessible(true); + Object val = field.get(message); + if (val instanceof BigDecimal) { + setSegValue(segment.getTotalValues(), field.getName(), (BigDecimal) val); + } else if (val instanceof Number) { + setSegValue(segment.getTotalValues(), field.getName(), BigDecimal.valueOf(((Number) val).doubleValue())); + } + } catch (IllegalAccessException ignored) { + } + } + } + // 本地缓存,每个 coilId 对应已到达设备 public void trackCoilHeadPosition(String coilId, BigDecimal headPos, AppMeasureEntryMessage entry, AppMeasureExitMessage exit) {