fix: 优化逻辑

This commit is contained in:
tangwei 2026-04-30 16:37:14 +08:00
parent 035a02f5dc
commit 956aaccfb2
15 changed files with 143 additions and 11 deletions

View File

@ -879,6 +879,13 @@ public class FishDraftDataController {
} }
} }
if (data.getHbrvcd() != null && !data.getHbrvcd().isEmpty()) {
String hbrvcd = fishImportService.resolveHbrvcdCode(data.getRvcd(), data.getRvcd());
if (hbrvcd == null) {
warnings.add("hbrvcd");
}
}
if (data.getTm() == null) { if (data.getTm() == null) {
warnings.add("tm"); warnings.add("tm");
} }

View File

@ -215,6 +215,19 @@ public class FishDraftData implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String rvcd; private String rvcd;
/**
* 基地流域编码
*/
@TableField(exist = false)
private String hbrvcd;
/**
* 基地流域编码
*/
@TableField(exist = false)
private String hbrvnm;
/** /**
* 设施名称 * 设施名称
*/ */

View File

@ -16,6 +16,8 @@ public class FishImportResult {
public static final String STATUS_FAILED = "FAILED"; public static final String STATUS_FAILED = "FAILED";
private List<FishImportRow> rows; private List<FishImportRow> rows;
private List<FishImportRow> successRows;
private List<FishImportRow> failedRows;
private List<String> unrecognizedFields; private List<String> unrecognizedFields;
private Map<String, String> imageFiles; private Map<String, String> imageFiles;
private Map<String, String> videoFiles; private Map<String, String> videoFiles;

View File

@ -1,5 +1,6 @@
package com.yfd.platform.data.domain.vo; package com.yfd.platform.data.domain.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@ -231,4 +232,14 @@ public class FishDraftDataVO implements Serializable {
* 删除人名称 * 删除人名称
*/ */
private String deletedByName; private String deletedByName;
/**
* 基地流域编码
*/
private String hbrvcd;
/**
* 基地流域编码
*/
private String hbrvnm;
} }

View File

@ -27,7 +27,7 @@ public interface FishDraftDataMapper extends BaseMapper<FishDraftData> {
@Param("status") String status, @Param("status") String status,
@Param("ftp") String ftp, @Param("ftp") String ftp,
@Param("startTime") String startTime, @Param("startTime") String startTime,
@Param("endTime") String endTime,@Param("userId") String userId); @Param("endTime") String endTime,@Param("userId") String userId,@Param("hbrvcd") String hbrvcd);
/** /**
* 关联查询过鱼数据不分页 * 关联查询过鱼数据不分页

View File

@ -36,7 +36,7 @@ public interface IFishImportService {
String resolveFishDictCode(String code,String name); String resolveFishDictCode(String code,String name);
String resolveBaseCode(String code,String baseName); String resolveBaseCode(String code,String baseName);
String resolveRiverCode(String code,String riverName); String resolveRiverCode(String code,String riverName);
String resolveHbrvcdCode(String code,String riverName);
String resolveDirection(String direction, FishImportResult.FishImportRow importRow); String resolveDirection(String direction, FishImportResult.FishImportRow importRow);
String resolveIsfs(String value, FishImportResult.FishImportRow importRow); String resolveIsfs(String value, FishImportResult.FishImportRow importRow);

View File

@ -61,6 +61,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"); String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
String rstcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd"); String rstcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd");
String hbrvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "hbrvcd");
String baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"); String baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
String ftp = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "ftp"); String ftp = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "ftp");
String direction = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "direction"); String direction = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "direction");
@ -74,7 +75,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
startTime=TM.split(",")[0]; startTime=TM.split(",")[0];
endTime=TM.split(",")[1]; endTime=TM.split(",")[1];
} }
Page<FishDraftDataVO> resultPage = fishDraftDataMapper.selectJoinPage(page, stcd, rstcd, baseId, direction, status, ftp, startTime, endTime,userId); Page<FishDraftDataVO> resultPage = fishDraftDataMapper.selectJoinPage(page, stcd, rstcd, baseId, direction, status, ftp, startTime, endTime,userId,hbrvcd);
fillUserNames(resultPage.getRecords()); fillUserNames(resultPage.getRecords());
return resultPage; return resultPage;
} }

View File

@ -40,6 +40,9 @@ public class FishImportServiceImpl implements IFishImportService {
@Resource @Resource
private SdRvcdDicMapper rvcdDicMapper; private SdRvcdDicMapper rvcdDicMapper;
@Resource
private SdHbrvDicMapper sdHbrvDicMapper;
@Resource @Resource
private SdFpssBHMapper fpssBHMapper; private SdFpssBHMapper fpssBHMapper;
@ -64,7 +67,9 @@ public class FishImportServiceImpl implements IFishImportService {
private static final Map<String, String> BASE_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> BASE_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> BASE_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> BASE_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> RIVER_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> RIVER_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> HBRVCD_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> RIVER_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> RIVER_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> HBRVCD_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FISH_DICT_CACHE = new LinkedHashMap<>(); private static final Map<String, String> FISH_DICT_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FISH_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> FISH_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
@ -102,7 +107,7 @@ public class FishImportServiceImpl implements IFishImportService {
EXCEL_COLUMN_MAPPING.put("过鱼设施名称", "fpname"); EXCEL_COLUMN_MAPPING.put("过鱼设施名称", "fpname");
EXCEL_COLUMN_INDEX_MAPPING.put(0, "baseName"); EXCEL_COLUMN_INDEX_MAPPING.put(0, "hbrvcd");
EXCEL_COLUMN_INDEX_MAPPING.put(1, "stationName"); EXCEL_COLUMN_INDEX_MAPPING.put(1, "stationName");
EXCEL_COLUMN_INDEX_MAPPING.put(2, "stnm"); EXCEL_COLUMN_INDEX_MAPPING.put(2, "stnm");
EXCEL_COLUMN_INDEX_MAPPING.put(3, "strdt"); EXCEL_COLUMN_INDEX_MAPPING.put(3, "strdt");
@ -233,6 +238,33 @@ public class FishImportServiceImpl implements IFishImportService {
} }
} }
break; break;
case "hbrvcd":
if(!StringUtils.hasText(cellValue)){
importRow.getWarnings().add("hbrvcd");
data.setHbrvcd(cellValue);
data.setHbrvnm(cellValue);
}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());
}
}
// if (StringUtils.hasText(cellValue)) {
// String rvcd = resolveHbrvcdCode(cellValue.trim());
// if (rvcd == null) {
// importRow.getWarnings().add(fieldName);
// data.setRvcd(cellValue);
// } else {
// data.setHbrvcd(rvcd);
// data.setHbrvcd(rvcd);
// }
// }
break;
case "tm": case "tm":
if (!StringUtils.hasText(cellValue)) { if (!StringUtils.hasText(cellValue)) {
importRow.getWarnings().add(fieldName); importRow.getWarnings().add(fieldName);
@ -481,6 +513,20 @@ public class FishImportServiceImpl implements IFishImportService {
} }
} }
if (HBRVCD_NAME_CACHE.isEmpty()) {
List<SdHbrvDic> riverList = sdHbrvDicMapper.selectList(null);
for (SdHbrvDic river : riverList) {
if (StringUtils.hasText(river.getHbrvnm())) {
HBRVCD_NAME_CACHE.put(river.getHbrvnm().trim().toLowerCase(), river.getHbrvcd());
}
if (StringUtils.hasText(river.getHbrvcd())) {
if (StringUtils.hasText(river.getHbrvnm())) {
HBRVCD_CODE_TO_NAME_CACHE.put(river.getHbrvcd().trim().toLowerCase(), river.getHbrvnm().trim().toLowerCase());
}
}
}
}
if (FISH_DICT_CACHE.isEmpty()) { if (FISH_DICT_CACHE.isEmpty()) {
List<SdFishDictoryB> sdFishDictoryBS = fishDictoryBMapper.selectList(null); List<SdFishDictoryB> sdFishDictoryBS = fishDictoryBMapper.selectList(null);
for (SdFishDictoryB fishDictoryB : sdFishDictoryBS) { for (SdFishDictoryB fishDictoryB : sdFishDictoryBS) {
@ -678,6 +724,23 @@ public class FishImportServiceImpl implements IFishImportService {
return null; return null;
} }
public String resolveHbrvcdCode(String riverName) {
if (riverName == null) {
return null;
}
String lowerName = riverName.toLowerCase().trim();
if (HBRVCD_NAME_CACHE.containsKey(lowerName)) {
return HBRVCD_NAME_CACHE.get(lowerName);
}
for (Map.Entry<String, String> entry : HBRVCD_NAME_CACHE.entrySet()) {
if (entry.getKey().contains(lowerName)) {
return entry.getValue();
}
}
return null;
}
@Override @Override
public String resolveRiverCode(String code, String riverName) { public String resolveRiverCode(String code, String riverName) {
if (code == null && riverName == null) { if (code == null && riverName == null) {
@ -699,6 +762,27 @@ public class FishImportServiceImpl implements IFishImportService {
return null; return null;
} }
@Override
public String resolveHbrvcdCode(String code, String riverName) {
if (code == null && riverName == null) {
return null;
}
loadStationAndBaseCache();
String lowerCode = code != null ? code.trim().toLowerCase() : null;
String lowerName = riverName != null ? riverName.trim().toLowerCase() : null;
if (lowerCode != null && lowerName != null) {
String cachedName = HBRVCD_CODE_TO_NAME_CACHE.get(lowerCode);
if (cachedName != null && cachedName.equals(lowerName)) {
return code.trim();
}
}
String resultByName = resolveHbrvcdCode(riverName);
if (resultByName != null && resultByName.equalsIgnoreCase(code)) {
return resultByName;
}
return null;
}
@Override @Override
public boolean validateStationBelongsToBase(String stationCode, String baseId) { public boolean validateStationBelongsToBase(String stationCode, String baseId) {
if (stationCode == null || baseId == null) { if (stationCode == null || baseId == null) {

View File

@ -61,8 +61,9 @@ public class SdFpssBHController {
@Operation(summary = "设施下拉列表(根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选)") @Operation(summary = "设施下拉列表(根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选)")
public ResponseResult dropdown(@RequestParam(required = false) String rstcd, public ResponseResult dropdown(@RequestParam(required = false) String rstcd,
@RequestParam(required = false) String stnm, @RequestParam(required = false) String stnm,
@RequestParam(required = false) String baseId) { @RequestParam(required = false) String baseId,
return ResponseResult.successData(sdFpssBHService.selectForDropdown(rstcd, stnm, baseId)); @RequestParam(required = false) String hbrvcd) {
return ResponseResult.successData(sdFpssBHService.selectForDropdown(rstcd, stnm, baseId,hbrvcd));
} }
@Log(module = "过鱼设施管理", value = "新增过鱼设施") @Log(module = "过鱼设施管理", value = "新增过鱼设施")

View File

@ -11,6 +11,7 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
public class SdEngInfoBHRequest { public class SdEngInfoBHRequest {
private String baseId; private String baseId;
private String hbrvcd;
private List<String> basIds; private List<String> basIds;
private List<String> hbrvcds; private List<String> hbrvcds;
private List<String> rvcds; private List<String> rvcds;

View File

@ -16,11 +16,13 @@ public interface SdFpssBHMapper extends BaseMapper<SdFpssBH> {
"LEFT JOIN SD_ENGINFO_B_H E ON F.RSTCD = E.STCD " + "LEFT JOIN SD_ENGINFO_B_H E ON F.RSTCD = E.STCD " +
"WHERE 1=1 " + "WHERE 1=1 " +
"<if test='baseId != null and baseId != \"\"'> AND E.BASE_ID = #{baseId} </if>" + "<if test='baseId != null and baseId != \"\"'> AND E.BASE_ID = #{baseId} </if>" +
"<if test='hbrvcd != null and hbrvcd != \"\"'> AND E.HBRVCD = #{hbrvcd} </if>" +
"<if test='rstcd != null and rstcd != \"\"'> AND F.RSTCD = #{rstcd} </if>" + "<if test='rstcd != null and rstcd != \"\"'> AND F.RSTCD = #{rstcd} </if>" +
"<if test='stnm != null and stnm != \"\"'> AND F.STNM LIKE '%' || #{stnm} || '%' </if>" + "<if test='stnm != null and stnm != \"\"'> AND F.STNM LIKE '%' || #{stnm} || '%' </if>" +
"ORDER BY F.ORDER_INDEX DESC" + "ORDER BY F.ORDER_INDEX DESC" +
"</script>") "</script>")
List<SdFpssBH> selectForDropdownWithBaseId(@Param("rstcd") String rstcd, List<SdFpssBH> selectForDropdownWithBaseId(@Param("rstcd") String rstcd,
@Param("stnm") String stnm, @Param("stnm") String stnm,
@Param("baseId") String baseId); @Param("baseId") String baseId,
@Param("hbrvcd") String hbrvcd);
} }

View File

@ -16,7 +16,7 @@ public interface ISdFpssBHService extends IService<SdFpssBH> {
/** /**
* 设施下拉列表根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选 * 设施下拉列表根据电站编码筛选 + 支持名称模糊搜索 + 支持基地编码筛选
*/ */
List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId); List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId,String hbrvcd);
Set<String> getUserAuthorizedStationCodes(); Set<String> getUserAuthorizedStationCodes();

View File

@ -71,8 +71,10 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
String ennm = sdEngInfoBHRequest.getEnnm(); String ennm = sdEngInfoBHRequest.getEnnm();
List<String> rvcds = sdEngInfoBHRequest.getRvcds(); List<String> rvcds = sdEngInfoBHRequest.getRvcds();
List<String> hbrvcds = sdEngInfoBHRequest.getHbrvcds(); List<String> hbrvcds = sdEngInfoBHRequest.getHbrvcds();
String hbrvcd = sdEngInfoBHRequest.getHbrvcd();
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
.eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd)
.in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, rvcds) .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, rvcds)
.in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds) .in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds)
.like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm) .like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)

View File

@ -64,13 +64,13 @@ public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> i
} }
@Override @Override
public List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId) { public List<SdFpssBH> selectForDropdown(String rstcd, String stnm,String baseId, String hbrvcd) {
Set<String> authorizedStations = getUserAuthorizedStationCodes(); Set<String> authorizedStations = getUserAuthorizedStationCodes();
List<SdFpssBH> result; List<SdFpssBH> result;
if (StringUtils.hasText(baseId)) { if (StringUtils.hasText(hbrvcd)|| StringUtils.hasText(baseId)) {
result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId); result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId,hbrvcd);
} else { } else {
LambdaQueryWrapper<SdFpssBH> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SdFpssBH> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(rstcd), SdFpssBH::getRstcd, rstcd) wrapper.eq(StringUtils.hasText(rstcd), SdFpssBH::getRstcd, rstcd)

View File

@ -73,6 +73,8 @@
<result column="ENNM" property="ennm"/> <result column="ENNM" property="ennm"/>
<result column="BASE_ID" property="baseId"/> <result column="BASE_ID" property="baseId"/>
<result column="BASENAME" property="baseName"/> <result column="BASENAME" property="baseName"/>
<result column="HBRVCD" property="hbrvcd"/>
<result column="HBRVNM" property="hbrvnm"/>
<result column="RVCD" property="rvcd"/> <result column="RVCD" property="rvcd"/>
<result column="LGTD" property="lgtd"/> <result column="LGTD" property="lgtd"/>
<result column="LTTD" property="lttd"/> <result column="LTTD" property="lttd"/>
@ -82,6 +84,8 @@
<sql id="joinColumns"> <sql id="joinColumns">
D.ID, D.ID,
D.STCD, D.STCD,
E.HBRVCD,
G.HBRVNM,
D.TM, D.TM,
D.FTP, D.FTP,
FB.NAME FTPNAME, FB.NAME FTPNAME,
@ -130,6 +134,7 @@
LEFT JOIN SD_FISHDICTORY_B FB ON FB.ID = D.FTP LEFT JOIN SD_FISHDICTORY_B FB ON FB.ID = D.FTP
LEFT JOIN SD_ENGINFO_B_H E ON F.RSTCD = E.STCD LEFT JOIN SD_ENGINFO_B_H E ON F.RSTCD = E.STCD
LEFT JOIN SD_HYDROBASE H ON E.BASE_ID = H.BASEID LEFT JOIN SD_HYDROBASE H ON E.BASE_ID = H.BASEID
LEFT JOIN SD_HBRV_DIC G ON G.HBRVCD = E.HBRVCD
WHERE D.DELETED_FLAG = 0 WHERE D.DELETED_FLAG = 0
<if test="stcd != null and stcd != ''"> <if test="stcd != null and stcd != ''">
AND D.STCD = #{stcd} AND D.STCD = #{stcd}
@ -146,6 +151,9 @@
<if test="baseId != null and baseId != ''"> <if test="baseId != null and baseId != ''">
AND E.BASE_ID = #{baseId} AND E.BASE_ID = #{baseId}
</if> </if>
<if test="hbrvcd != null and hbrvcd != ''">
AND E.HBRVCD = #{hbrvcd}
</if>
<if test="direction != null and direction != ''"> <if test="direction != null and direction != ''">
AND D.DIRECTION = #{direction} AND D.DIRECTION = #{direction}
</if> </if>