From e52dccdb3e118949af302ab5cfb66537242743be Mon Sep 17 00:00:00 2001 From: tangwei Date: Wed, 6 May 2026 20:40:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E9=A9=B3=E5=9B=9E=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FishDraftDataController.java | 16 + .../data/domain/BatchRejectRequest.java | 8 + .../data/service/IFishDraftDataService.java | 5 + .../impl/FishDraftDataServiceImpl.java | 53 ++- .../service/impl/FishImportServiceImpl.java | 301 ++++++++++-------- .../service/impl/SdEngInfoBHServiceImpl.java | 4 + 6 files changed, 247 insertions(+), 140 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java index 78a9ea1..942d878 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java @@ -245,6 +245,22 @@ public class FishDraftDataController { return result ? ResponseResult.success("驳回成功") : ResponseResult.error("驳回失败"); } + @PostMapping("/batchReject") + @Operation(summary = "批量驳回") + public ResponseResult batchRejectFull(@RequestBody BatchRejectRequest request) { + if (request.getApprovalIds() != null && !request.getApprovalIds().isEmpty()) { + List draft = fishDraftDataService.list(new LambdaQueryWrapper().in(FishDraftData::getApprovalId, request.getApprovalIds()).eq(FishDraftData::getStatus, "PENDING").select(FishDraftData::getId)); + List ids = draft.stream().map(FishDraftData::getId).toList(); + boolean result = fishDraftDataService.rejectBatch(ids, request.getRejectReason()); + return result ? ResponseResult.success("驳回成功") : ResponseResult.error("驳回失败"); + } + if (request.getIds() != null && !request.getIds().isEmpty()) { + boolean result = fishDraftDataService.rejectBatch(request.getIds(), request.getRejectReason()); + return result ? ResponseResult.success("驳回成功") : ResponseResult.error("驳回失败"); + } + return ResponseResult.error("请选择要驳回的数据"); + } + @PostMapping("/lockDraft") @Operation(summary = "锁定草稿") diff --git a/backend/src/main/java/com/yfd/platform/data/domain/BatchRejectRequest.java b/backend/src/main/java/com/yfd/platform/data/domain/BatchRejectRequest.java index 2b97b19..fd1deb9 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/BatchRejectRequest.java +++ b/backend/src/main/java/com/yfd/platform/data/domain/BatchRejectRequest.java @@ -3,6 +3,8 @@ package com.yfd.platform.data.domain; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.List; + /** * 审批驳回请求参数 */ @@ -13,6 +15,12 @@ public class BatchRejectRequest { @Schema(description = "草稿数据ID") private String id; + @Schema(description = "草稿数据ID列表") + private List ids; + + @Schema(description = "批次ID列表") + private List approvalIds; + @Schema(description = "驳回原因") private String rejectReason; } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/data/service/IFishDraftDataService.java b/backend/src/main/java/com/yfd/platform/data/service/IFishDraftDataService.java index 2be6536..d3b2486 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IFishDraftDataService.java +++ b/backend/src/main/java/com/yfd/platform/data/service/IFishDraftDataService.java @@ -75,6 +75,11 @@ public interface IFishDraftDataService extends IService { */ boolean batchReject(String id, String rejectReason); + /** + * 批量驳回 + */ + boolean rejectBatch(List ids, String rejectReason); + /** * 锁定草稿 */ diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java index b863e33..aeab231 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java @@ -87,7 +87,9 @@ public class FishDraftDataServiceImpl extends ServiceImpl ids, String rejectReason) { + if (ids == null || ids.isEmpty()) { + return false; + } + if (StrUtil.isBlank(rejectReason)) { + throw new IllegalArgumentException("驳回原因不能为空"); + } + Date now = new Date(); + String operatorId = SecurityUtils.getUserId(); + + List dataList = this.listByIds(ids); + Set processedApprovalIds = new HashSet<>(); + List validIds = new ArrayList<>(); + + for (FishDraftData fishDraftData : dataList) { + if ("PENDING".equals(fishDraftData.getStatus())) { + validIds.add(fishDraftData.getId()); + if (fishDraftData.getApprovalId() != null) { + processedApprovalIds.add(fishDraftData.getApprovalId()); + } + } + } + + if (!validIds.isEmpty()) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(FishDraftData::getId, validIds); + updateWrapper.set(FishDraftData::getStatus, "REJECTED"); + updateWrapper.set(FishDraftData::getApproveTime, now); + updateWrapper.set(FishDraftData::getUpdatedBy, operatorId); + this.update(updateWrapper); + + for (String approvalId : processedApprovalIds) { + approvalLogService.logReject(approvalId, operatorId, rejectReason); + ApprovalMain approvalMain = approvalMainService.getById(approvalId); + if (approvalMain != null) { + approvalMain.setStatus("REJECTED"); + approvalMain.setApproverId(operatorId); + approvalMain.setApproveTime(now); + approvalMain.setRemark(rejectReason); + approvalMainService.updateById(approvalMain); + } + } + } + + return true; + } + @Override @Transactional(rollbackFor = Exception.class) public boolean lockDraft(String id) { diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java index 8804734..ee1c0bc 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java @@ -85,14 +85,6 @@ public class FishImportServiceImpl implements IFishImportService { private static final Map FPSS_TO_STATION_CACHE = new LinkedHashMap<>(); private static final Map ISFS_DICT_CACHE = new LinkedHashMap<>(); - private static final long CACHE_EXPIRE_MILLIS = 10 * 60 * 1000; - private static long stationCacheTimestamp = 0; - private static long baseCacheTimestamp = 0; - private static long riverCacheTimestamp = 0; - private static long hbrvcdCacheTimestamp = 0; - private static long fishDictCacheTimestamp = 0; - private static long fpssCacheTimestamp = 0; - private static final String DICT_CODE_FISH = "FISH_TYPE"; private static final String DICT_CODE_DIRECTION = "FISH_DIRECTION"; private static final String DICT_CODE_ISFS = "YES_NO"; @@ -202,6 +194,62 @@ public class FishImportServiceImpl implements IFishImportService { FishImportResult.FishImportRow importRow = new FishImportResult.FishImportRow(rowIndex); FishDraftData data = new FishDraftData(); data.setId(UUID.randomUUID().toString()); + String userId = SecurityUtils.getUserId(); + Set allowedHbrvcdSet = new HashSet<>(); + Set directStcdSet = new HashSet<>(); + Set directBHSet = new HashSet<>(); + if (userId != null) { + List permissions = userDataScopeMapper.selectValidPermissions(userId); + if (permissions != null && !permissions.isEmpty()) { + for (SysUserDataScope permission : permissions) { + String orgType = permission.getOrgType(); + String orgId = permission.getOrgId(); + + if (orgId == null || orgId.isEmpty()) { + continue; + } + + if ("HBRVCD".equals(orgType)) { + allowedHbrvcdSet.add(orgId); + } else if ("STATION".equals(orgType)) { + directStcdSet.add(orgId); + } + } + } + } + + Set allStcdSet = new HashSet<>(); + + if (!allowedHbrvcdSet.isEmpty() || !directStcdSet.isEmpty()) { + if (!allowedHbrvcdSet.isEmpty()) { + List stationsFromHbrv = engInfoBHMapper.selectByHbrvcdList(new ArrayList<>(allowedHbrvcdSet)); + for (SdEngInfoBH station : stationsFromHbrv) { + if (station.getStcd() != null) { + allStcdSet.add(station.getStcd()); + } + } + } + + if (!directStcdSet.isEmpty()) { + List stationsFromStcd = engInfoBHMapper.selectBatchIds(new ArrayList<>(directStcdSet)); + for (SdEngInfoBH station : stationsFromStcd) { + if (station.getStcd() != null) { + allStcdSet.add(station.getStcd()); + } + if (station.getHbrvcd() != null) { + allowedHbrvcdSet.add(station.getHbrvcd()); + } + } + } + } + if (!directStcdSet.isEmpty()) { + List sdFpssBHS = fpssBHMapper.selectList(new LambdaQueryWrapper().in(SdFpssBH::getRstcd, allStcdSet).select(SdFpssBH::getStcd)); + for (SdFpssBH sdFpssBH : sdFpssBHS) { + if (sdFpssBH.getStcd() != null) { + directBHSet.add(sdFpssBH.getStcd()); + } + } + } for (Map.Entry entry : columnIndexMap.entrySet()) { Integer columnIndex = entry.getKey(); String fieldName = entry.getValue(); @@ -220,8 +268,15 @@ public class FishImportServiceImpl implements IFishImportService { importRow.getWarnings().add("rstcd"); data.setEnnm(cellValue.trim()); } else { - data.setEnnm(cellValue.trim()); - data.setRstcd(stcd); + if (allStcdSet.contains(stcd)) { + data.setEnnm(cellValue.trim()); + data.setRstcd(stcd); + } else { + importRow.getWarnings().add("rstcd"); + data.setEnnm(cellValue.trim()); + data.setRstcd(cellValue); + } + } } break; @@ -254,19 +309,26 @@ public class FishImportServiceImpl implements IFishImportService { } break; case "hbrvcd": - if(!StringUtils.hasText(cellValue)){ + if (!StringUtils.hasText(cellValue)) { importRow.getWarnings().add("hbrvcd"); data.setHbrvcd(cellValue); data.setHbrvnm(cellValue); - }else{ + } else { String hbrvcdCode = resolveHbrvcdCode(cellValue.trim()); if (hbrvcdCode == null) { importRow.getWarnings().add("hbrvcd"); data.setHbrvcd(cellValue.trim()); data.setHbrvnm(cellValue.trim()); - }else{ - data.setHbrvcd(hbrvcdCode); - data.setHbrvnm(cellValue.trim()); + } else { + if (allowedHbrvcdSet.contains(hbrvcdCode)) { + data.setHbrvcd(hbrvcdCode); + data.setHbrvnm(cellValue.trim()); + } else { + importRow.getWarnings().add("hbrvcd"); + data.setHbrvcd(cellValue.trim()); + data.setHbrvnm(cellValue.trim()); + } + } } // if (StringUtils.hasText(cellValue)) { @@ -434,8 +496,15 @@ public class FishImportServiceImpl implements IFishImportService { data.setStcd(cellValue.trim()); data.setStnm(cellValue.trim()); } else { - data.setStnm(cellValue.trim()); - data.setStcd(stcd); + if(directBHSet.contains(stcd)){ + data.setStnm(cellValue.trim()); + data.setStcd(stcd); + }else { + importRow.getWarnings().add("stcd"); + data.setStcd(cellValue.trim()); + data.setStnm(cellValue.trim()); + } + } } break; @@ -483,69 +552,64 @@ public class FishImportServiceImpl implements IFishImportService { } private void loadStationAndBaseCache() { - String userId = SecurityUtils.getUserId(); - Set allowedHbrvcdSet = new HashSet<>(); - Set directStcdSet = new HashSet<>(); +// String userId = SecurityUtils.getUserId(); +// Set allowedHbrvcdSet = new HashSet<>(); +// Set directStcdSet = new HashSet<>(); +// +// if (userId != null) { +// List permissions = userDataScopeMapper.selectValidPermissions(userId); +// if (permissions != null && !permissions.isEmpty()) { +// for (SysUserDataScope permission : permissions) { +// String orgType = permission.getOrgType(); +// String orgId = permission.getOrgId(); +// +// if (orgId == null || orgId.isEmpty()) { +// continue; +// } +// +// if ("HBRVCD".equals(orgType)) { +// allowedHbrvcdSet.add(orgId); +// } else if ("STATION".equals(orgType)) { +// directStcdSet.add(orgId); +// } +// } +// } +// } +// +// Set allStcdSet = new HashSet<>(); +// +// if (!allowedHbrvcdSet.isEmpty() || !directStcdSet.isEmpty()) { +// if (!allowedHbrvcdSet.isEmpty()) { +// List stationsFromHbrv = engInfoBHMapper.selectByHbrvcdList(new ArrayList<>(allowedHbrvcdSet)); +// for (SdEngInfoBH station : stationsFromHbrv) { +// if (station.getStcd() != null) { +// allStcdSet.add(station.getStcd()); +// } +// } +// } +// +// if (!directStcdSet.isEmpty()) { +// List stationsFromStcd = engInfoBHMapper.selectBatchIds(new ArrayList<>(directStcdSet)); +// for (SdEngInfoBH station : stationsFromStcd) { +// if (station.getStcd() != null) { +// allStcdSet.add(station.getStcd()); +// } +// if (station.getHbrvcd() != null) { +// allowedHbrvcdSet.add(station.getHbrvcd()); +// } +// } +// } +// } - if (userId != null) { - List permissions = userDataScopeMapper.selectValidPermissions(userId); - if (permissions != null && !permissions.isEmpty()) { - for (SysUserDataScope permission : permissions) { - String orgType = permission.getOrgType(); - String orgId = permission.getOrgId(); - - if (orgId == null || orgId.isEmpty()) { - continue; - } - - if ("HBRVCD".equals(orgType)) { - allowedHbrvcdSet.add(orgId); - } else if ("STATION".equals(orgType)) { - directStcdSet.add(orgId); - } - } - } - } - - Set allStcdSet = new HashSet<>(); - - if (!allowedHbrvcdSet.isEmpty() || !directStcdSet.isEmpty()) { - if (!allowedHbrvcdSet.isEmpty()) { - List stationsFromHbrv = engInfoBHMapper.selectByHbrvcdList(new ArrayList<>(allowedHbrvcdSet)); - for (SdEngInfoBH station : stationsFromHbrv) { - if (station.getStcd() != null) { - allStcdSet.add(station.getStcd()); - } - } - } - - if (!directStcdSet.isEmpty()) { - List stationsFromStcd = engInfoBHMapper.selectBatchIds(new ArrayList<>(directStcdSet)); - for (SdEngInfoBH station : stationsFromStcd) { - if (station.getStcd() != null) { - allStcdSet.add(station.getStcd()); - } - if (station.getHbrvcd() != null) { - allowedHbrvcdSet.add(station.getHbrvcd()); - } - } - } - } - - boolean stationCacheExpired = isCacheExpired(stationCacheTimestamp); - if (STATION_NAME_CACHE.isEmpty() || stationCacheExpired) { - if (stationCacheExpired) { - STATION_NAME_CACHE.clear(); - STATION_CODE_TO_NAME_CACHE.clear(); - STATION_TO_BASE_CACHE.clear(); - } - - List stationList; - if (!allStcdSet.isEmpty()) { - stationList = engInfoBHMapper.selectBatchIds(new ArrayList<>(allStcdSet)); - } else { - stationList = engInfoBHMapper.selectList(null); - } + if (STATION_NAME_CACHE.isEmpty()) { + List stationList = engInfoBHMapper.selectList(null); +// if (!allStcdSet.isEmpty()) { +// stationList = engInfoBHMapper.selectBatchIds(new ArrayList<>(allStcdSet)); +// } else if("admin".equals(SecurityUtils.getCurrentUsername())){ +// +// }else { +// stationList = new ArrayList<>(); +// } for (SdEngInfoBH station : stationList) { if (StringUtils.hasText(station.getEnnm())) { @@ -560,16 +624,9 @@ public class FishImportServiceImpl implements IFishImportService { } } } - stationCacheTimestamp = System.currentTimeMillis(); } - boolean baseCacheExpired = isCacheExpired(baseCacheTimestamp); - if (BASE_NAME_CACHE.isEmpty() || baseCacheExpired) { - if (baseCacheExpired) { - BASE_NAME_CACHE.clear(); - BASE_CODE_TO_NAME_CACHE.clear(); - } - + if (BASE_NAME_CACHE.isEmpty()) { List baseList = hydrobaseMapper.selectList(null); for (SdHydrobase base : baseList) { if (StringUtils.hasText(base.getBasename())) { @@ -581,16 +638,9 @@ public class FishImportServiceImpl implements IFishImportService { } } } - baseCacheTimestamp = System.currentTimeMillis(); } - boolean riverCacheExpired = isCacheExpired(riverCacheTimestamp); - if (RIVER_NAME_CACHE.isEmpty() || riverCacheExpired) { - if (riverCacheExpired) { - RIVER_NAME_CACHE.clear(); - RIVER_CODE_TO_NAME_CACHE.clear(); - } - + if (RIVER_NAME_CACHE.isEmpty()) { List riverList = rvcdDicMapper.selectList(null); for (SdRvcdDic river : riverList) { if (StringUtils.hasText(river.getRvnm())) { @@ -602,24 +652,17 @@ public class FishImportServiceImpl implements IFishImportService { } } } - riverCacheTimestamp = System.currentTimeMillis(); } - boolean hbrvcdCacheExpired = isCacheExpired(hbrvcdCacheTimestamp); - if (HBRVCD_NAME_CACHE.isEmpty() || hbrvcdCacheExpired) { - if (hbrvcdCacheExpired) { - HBRVCD_NAME_CACHE.clear(); - HBRVCD_CODE_TO_NAME_CACHE.clear(); - } - - List riverList; - if (!allowedHbrvcdSet.isEmpty()) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(SdHbrvDic::getHbrvcd, allowedHbrvcdSet); - riverList = sdHbrvDicMapper.selectList(wrapper); - } else { - riverList = sdHbrvDicMapper.selectList(null); - } + if (HBRVCD_NAME_CACHE.isEmpty()) { + List riverList = sdHbrvDicMapper.selectList(null); +// if (!allowedHbrvcdSet.isEmpty()) { +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// wrapper.in(SdHbrvDic::getHbrvcd, allowedHbrvcdSet); +// riverList = sdHbrvDicMapper.selectList(wrapper); +// } else { +// riverList = sdHbrvDicMapper.selectList(null); +// } for (SdHbrvDic river : riverList) { if (StringUtils.hasText(river.getHbrvnm())) { HBRVCD_NAME_CACHE.put(river.getHbrvnm().trim().toLowerCase(), river.getHbrvcd()); @@ -630,16 +673,9 @@ public class FishImportServiceImpl implements IFishImportService { } } } - hbrvcdCacheTimestamp = System.currentTimeMillis(); } - boolean fishDictCacheExpired = isCacheExpired(fishDictCacheTimestamp); - if (FISH_DICT_CACHE.isEmpty() || fishDictCacheExpired) { - if (fishDictCacheExpired) { - FISH_DICT_CACHE.clear(); - FISH_CODE_TO_NAME_CACHE.clear(); - } - + if (FISH_DICT_CACHE.isEmpty()) { List sdFishDictoryBS = fishDictoryBMapper.selectList(null); for (SdFishDictoryB fishDictoryB : sdFishDictoryBS) { if (StringUtils.hasText(fishDictoryB.getName())) { @@ -651,23 +687,15 @@ public class FishImportServiceImpl implements IFishImportService { } } } - fishDictCacheTimestamp = System.currentTimeMillis(); } - boolean fpssCacheExpired = isCacheExpired(fpssCacheTimestamp); - if (FPSS_BH_CACHE.isEmpty() || fpssCacheExpired) { - if (fpssCacheExpired) { - FPSS_BH_CACHE.clear(); - FPSS_CODE_TO_NAME_CACHE.clear(); - FPSS_TO_STATION_CACHE.clear(); - } - - List sdFpssBHS; - if (!allStcdSet.isEmpty()) { - sdFpssBHS = fpssBHMapper.selectList(new LambdaQueryWrapper().in(SdFpssBH::getStcd, allStcdSet)); - } else { - sdFpssBHS = fpssBHMapper.selectList(null); - } + if (FPSS_BH_CACHE.isEmpty()) { + List sdFpssBHS = fpssBHMapper.selectList(null); +// if (!allStcdSet.isEmpty()) { +// sdFpssBHS = fpssBHMapper.selectList(new LambdaQueryWrapper().in(SdFpssBH::getStcd, allStcdSet)); +// } else { +// sdFpssBHS = fpssBHMapper.selectList(null); +// } for (SdFpssBH sdFpssBH : sdFpssBHS) { if (StringUtils.hasText(sdFpssBH.getStnm())) { FPSS_BH_CACHE.put(sdFpssBH.getStnm().trim().toLowerCase(), sdFpssBH.getStcd()); @@ -681,14 +709,9 @@ public class FishImportServiceImpl implements IFishImportService { } } } - fpssCacheTimestamp = System.currentTimeMillis(); } } - private boolean isCacheExpired(long timestamp) { - return System.currentTimeMillis() - timestamp > CACHE_EXPIRE_MILLIS; - } - public String resolveStationCode(String stationName) { if (stationName == null) { diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java index 7f6e10b..9d68ba5 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java @@ -70,11 +70,13 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl selectForDropdown(SdEngInfoBHRequest sdEngInfoBHRequest) { String baseId = sdEngInfoBHRequest.getBaseId(); + String hbrvcd = sdEngInfoBHRequest.getHbrvcd(); String ennm = sdEngInfoBHRequest.getEnnm(); List rvcds = sdEngInfoBHRequest.getRvcds(); List hbrvcds = sdEngInfoBHRequest.getHbrvcds(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) + .eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd) .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, rvcds) .in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds) .like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm) @@ -175,10 +177,12 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl selectRegDropdown(SdEngInfoBHRequest sdEngInfoBHRequest) { String baseId = sdEngInfoBHRequest.getBaseId(); String ennm = sdEngInfoBHRequest.getEnnm(); + String hbrvcd = sdEngInfoBHRequest.getHbrvcd(); List rvcds = sdEngInfoBHRequest.getRvcds(); List hbrvcds = sdEngInfoBHRequest.getHbrvcds(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) + .eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd) .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, rvcds) .in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds) .like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)