Junjie
2026-04-27 8b1129e0fc329b5d69428e2a813baec64bee1625
fix: preserve unlimited station task limits in snapshot
1个文件已添加
1个文件已修改
84 ■■■■ 已修改文件
src/main/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImpl.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImplTest.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImpl.java
@@ -212,11 +212,13 @@
                "aiAutoTuneIntervalMinutes",
                DEFAULT_AI_AUTO_TUNE_INTERVAL_MINUTES
        ));
        List<BasCrnp> crnList = loadCrnList();
        List<BasDualCrnp> dualCrnList = loadDualCrnList();
        snapshot.setStationOutTaskLimits(loadStationOutTaskLimits());
        snapshot.setCrnMaxOutTask(loadCrnMaxOutTask());
        snapshot.setCrnMaxInTask(loadCrnMaxInTask());
        snapshot.setDualCrnMaxOutTask(loadDualCrnMaxOutTask());
        snapshot.setDualCrnMaxInTask(loadDualCrnMaxInTask());
        snapshot.setCrnMaxOutTask(buildCrnMaxOutTask(crnList));
        snapshot.setCrnMaxInTask(buildCrnMaxInTask(crnList));
        snapshot.setDualCrnMaxOutTask(buildDualCrnMaxOutTask(dualCrnList));
        snapshot.setDualCrnMaxInTask(buildDualCrnMaxInTask(dualCrnList));
        return snapshot;
    }
@@ -242,41 +244,58 @@
        }
        QueryWrapper<BasStation> wrapper = new QueryWrapper<>();
        wrapper.orderByAsc("station_id");
        for (BasStation station : safeList(basStationService.list(wrapper))) {
        return buildStationOutTaskLimitMap(basStationService.list(wrapper));
    }
    Map<String, Integer> buildStationOutTaskLimitMap(List<BasStation> stationList) {
        Map<String, Integer> result = new LinkedHashMap<>();
        for (BasStation station : safeList(stationList)) {
            if (station != null && station.getStationId() != null) {
                result.put(String.valueOf(station.getStationId()), defaultInt(station.getOutTaskLimit()));
                result.put(String.valueOf(station.getStationId()), station.getOutTaskLimit());
            }
        }
        return result;
    }
    private Map<String, Integer> loadCrnMaxOutTask() {
    private Map<String, Integer> buildCrnMaxOutTask(List<BasCrnp> crnList) {
        Map<String, Integer> result = new LinkedHashMap<>();
        for (BasCrnp crn : loadCrnList()) {
        for (BasCrnp crn : safeList(crnList)) {
            if (crn == null || crn.getCrnNo() == null) {
                continue;
            }
            result.put(String.valueOf(crn.getCrnNo()), defaultInt(crn.getMaxOutTask()));
        }
        return result;
    }
    private Map<String, Integer> loadCrnMaxInTask() {
    private Map<String, Integer> buildCrnMaxInTask(List<BasCrnp> crnList) {
        Map<String, Integer> result = new LinkedHashMap<>();
        for (BasCrnp crn : loadCrnList()) {
        for (BasCrnp crn : safeList(crnList)) {
            if (crn == null || crn.getCrnNo() == null) {
                continue;
            }
            result.put(String.valueOf(crn.getCrnNo()), defaultInt(crn.getMaxInTask()));
        }
        return result;
    }
    private Map<String, Integer> loadDualCrnMaxOutTask() {
    private Map<String, Integer> buildDualCrnMaxOutTask(List<BasDualCrnp> dualCrnList) {
        Map<String, Integer> result = new LinkedHashMap<>();
        for (BasDualCrnp dualCrn : loadDualCrnList()) {
        for (BasDualCrnp dualCrn : safeList(dualCrnList)) {
            if (dualCrn == null || dualCrn.getCrnNo() == null) {
                continue;
            }
            result.put(String.valueOf(dualCrn.getCrnNo()), defaultInt(dualCrn.getMaxOutTask()));
        }
        return result;
    }
    private Map<String, Integer> loadDualCrnMaxInTask() {
    private Map<String, Integer> buildDualCrnMaxInTask(List<BasDualCrnp> dualCrnList) {
        Map<String, Integer> result = new LinkedHashMap<>();
        for (BasDualCrnp dualCrn : loadDualCrnList()) {
        for (BasDualCrnp dualCrn : safeList(dualCrnList)) {
            if (dualCrn == null || dualCrn.getCrnNo() == null) {
                continue;
            }
            result.put(String.valueOf(dualCrn.getCrnNo()), defaultInt(dualCrn.getMaxInTask()));
        }
        return result;
src/test/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImplTest.java
New file
@@ -0,0 +1,37 @@
package com.zy.ai.service.impl;
import com.zy.asrs.entity.BasStation;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
class AutoTuneSnapshotServiceImplTest {
    @Test
    void buildStationOutTaskLimitMapPreservesNullZeroAndNegativeLimits() {
        AutoTuneSnapshotServiceImpl service = new AutoTuneSnapshotServiceImpl();
        Map<String, Integer> result = service.buildStationOutTaskLimitMap(Arrays.asList(
                station(101, null),
                station(102, 0),
                station(103, -1),
                station(104, 5)
        ));
        assertNull(result.get("101"));
        assertEquals(0, result.get("102"));
        assertEquals(-1, result.get("103"));
        assertEquals(5, result.get("104"));
    }
    private BasStation station(Integer stationId, Integer outTaskLimit) {
        BasStation station = new BasStation();
        station.setStationId(stationId);
        station.setOutTaskLimit(outTaskLimit);
        return station;
    }
}