fix: 优化逻辑

This commit is contained in:
tangwei 2026-06-23 09:00:10 +08:00
parent 26837f30c5
commit 808953dc76

View File

@ -732,12 +732,8 @@ public class FprMonitorServiceImpl implements FprMonitorService {
"src.ID AS id, " +
"NVL(src.IS_DELETED, 0) AS isDeleted, " +
"src.ID AS zyFishId, " +
"NVL((SELECT MIN(rel2.RVCD) " +
" FROM SD_FISHDICTORY_RLTN_B rel2 " +
" WHERE rel2.ZY_FISH_ID = src.ID " +
" AND rel2.RVCD <> 'ZY' " +
" AND NVL(rel2.IS_DELETED, 0) = 0), 'null') AS rvcd, " +
"CAST(NULL AS VARCHAR2(1000)) AS rvcdName, " +
"NVL(relAgg.rvcd, 'null') AS rvcd, " +
"NVL(relAgg.rvcdName, '') AS rvcdName, " +
"src.NAME AS name, " +
"src.TYPE AS type, " +
"src.FAMILY AS family, " +
@ -772,6 +768,20 @@ public class FprMonitorServiceImpl implements FprMonitorService {
"src.VLSR_TM AS vlsrTm, " +
"src.SPAWN_MONTH AS spawnMonth " +
"FROM SD_FISHDICTORY_B src " +
"LEFT JOIN ( " +
" SELECT relBase.ZY_FISH_ID AS zyFishId, " +
" MIN(relBase.RVCD) AS rvcd, " +
" LISTAGG(relBase.RVNM, ',') WITHIN GROUP (ORDER BY relBase.RVNM) AS rvcdName " +
" FROM ( " +
" SELECT DISTINCT rel.ZY_FISH_ID, rel.RVCD, rv.RVNM " +
" FROM SD_FISHDICTORY_RLTN_B rel " +
" LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = rel.RVCD " +
" WHERE rel.RVCD <> 'ZY' " +
" AND NVL(rel.IS_DELETED, 0) = 0 " +
" AND rv.RVNM IS NOT NULL " +
" ) relBase " +
" GROUP BY relBase.ZY_FISH_ID " +
") relAgg ON relAgg.zyFishId = src.ID " +
"WHERE NVL(src.IS_DELETED, 0) = 0 ";
}
@ -787,49 +797,10 @@ public class FprMonitorServiceImpl implements FprMonitorService {
}
return;
}
List<String> fishIds = list.stream()
.map(item -> StrUtil.blankToDefault(item.getZyFishId(), item.getId()))
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
if (CollUtil.isEmpty(fishIds)) {
return;
}
Map<String, Object> paramMap = new HashMap<>();
List<String> placeholders = new ArrayList<>();
for (int i = 0; i < fishIds.size(); i++) {
String key = "zyFishId" + i;
paramMap.put(key, fishIds.get(i));
placeholders.add("#{map." + key + "}");
}
String sql = "SELECT rel.ZY_FISH_ID AS zyFishId, rv.RVNM AS rvcdName " +
"FROM SD_FISHDICTORY_RLTN_B rel " +
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = rel.RVCD " +
"WHERE rel.ZY_FISH_ID IN (" + String.join(", ", placeholders) + ") " +
"AND rel.RVCD <> 'ZY' " +
"AND NVL(rel.IS_DELETED, 0) = 0 " +
"AND rv.RVNM IS NOT NULL";
List<Map<String, Object>> rows = microservicDynamicSQLMapper.getAllList(sql, paramMap);
Map<String, List<String>> rvcdNameMap = new HashMap<>();
for (Map<String, Object> row : rows) {
Object fishId = row.get("ZYFISHID");
Object rvcdName = row.get("RVCDNAME");
if (fishId == null || rvcdName == null) {
continue;
}
rvcdNameMap.computeIfAbsent(String.valueOf(fishId), key -> new ArrayList<>())
.add(String.valueOf(rvcdName));
}
for (FprZyFishDicVo item : list) {
if (item == null) {
continue;
if (item != null && item.getRvcdName() == null) {
item.setRvcdName("");
}
String fishKey = StrUtil.blankToDefault(item.getZyFishId(), item.getId());
List<String> names = rvcdNameMap.getOrDefault(fishKey, new ArrayList<>()).stream()
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
item.setRvcdName(String.join(",", names));
}
}