yeg
2026-09-02 977f2092a0c6154ae40926511603b3d11afb86d7
保留导入记录并统一有效数据身份

控制台查询纳入已提交导入记录,稳定身份包含适配器和设备拓扑字段,避免跨来源覆盖冲突。
3个文件已修改
37 ■■■■■ 已修改文件
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTestMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TestDataQueryServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TTestMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTestMapper.java
@@ -118,6 +118,8 @@
    int upsertDataOverride(TTestDataOverride override);
    List<TTestDataOverride> selectDataOverrides(@Param("testId") Long testId,
            @Param("dataType") String dataType);
    List<java.util.Map<String, Object>> selectConsoleImportRecords(@Param("testId") Long testId,
            @Param("dataType") String dataType);
    int deleteBtsSamplesByIds(@Param("testId") Long testId, @Param("sampleIds") List<Long> sampleIds);
    int deleteBtsMeasurementsBySampleIds(@Param("sampleIds") List<Long> sampleIds);
    int deleteCollectorSamplesByIds(@Param("testId") Long testId, @Param("sampleIds") List<Long> sampleIds);
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TestDataQueryServiceImpl.java
@@ -47,17 +47,32 @@
    private List<Map<String, Object>> applyEffectiveData(Long testId, String dataType,
            List<Map<String, Object>> source)
    {
        List<Map<String, Object>> effective = new java.util.ArrayList<>(
                source == null ? List.<Map<String, Object>>of() : source);
        List<Map<String, Object>> imports = mapper.selectConsoleImportRecords(testId, dataType);
        for (Map<String, Object> imported : imports == null ? List.<Map<String, Object>>of() : imports)
        {
            try
            {
                @SuppressWarnings("unchecked")
                Map<String, Object> row = (Map<String, Object>) (Map<?, ?>) JSON.parseObject(
                        String.valueOf(imported.get("rowValues")), Map.class);
                row.put("stableIdentity", imported.get("stableIdentity"));
                effective.add(row);
            }
            catch (RuntimeException ignored) { }
        }
        List<TTestDataOverride> overrides = mapper.selectDataOverrides(testId, dataType);
        if (source == null || source.isEmpty() || overrides == null || overrides.isEmpty())
            return source == null ? List.of() : source;
        if (effective.isEmpty() || overrides == null || overrides.isEmpty()) return effective;
        Map<String, TTestDataOverride> byIdentity = new HashMap<>();
        for (TTestDataOverride override : overrides)
            if (override != null && override.getStableIdentity() != null)
                byIdentity.put(override.getStableIdentity(), override);
        List<Map<String, Object>> effective = new java.util.ArrayList<>(source.size());
        for (Map<String, Object> row : source)
        List<Map<String, Object>> filtered = new java.util.ArrayList<>(effective.size());
        for (Map<String, Object> row : effective)
        {
            String identity = stableIdentity(dataType, row);
            String identity = row.get("stableIdentity") == null ? stableIdentity(dataType, row)
                    : String.valueOf(row.get("stableIdentity"));
            TTestDataOverride override = byIdentity.get(identity);
            if (override != null && Boolean.TRUE.equals(override.getDeleted())) continue;
            Map<String, Object> copy = new LinkedHashMap<>(row);
@@ -74,9 +89,9 @@
                    // 覆盖已由修订服务校验;解析异常时保留原始事实,避免查询整体失败。
                }
            }
            effective.add(copy);
            filtered.add(copy);
        }
        return effective;
        return filtered;
    }
    private String stableIdentity(String dataType, Map<String, Object> row)
ruoyi-system/src/main/resources/mapper/system/TTestMapper.xml
@@ -616,6 +616,12 @@
        from t_test_data_override where test_id = #{testId} and data_type = #{dataType}
        order by override_id
    </select>
    <select id="selectConsoleImportRecords" resultType="map">
        select stable_identity stableIdentity, cast(row_values as char) rowValues
        from t_test_console_import_record
        where test_id = #{testId} and data_type = #{dataType}
        order by import_record_id
    </select>
    <delete id="deleteBtsSamplesByIds">
        delete from t_test_sample where test_id = #{testId} and sample_id in
        <foreach collection="sampleIds" item="id" open="(" separator="," close=")">#{id}</foreach>