fix: 优化过鱼数据填报逻辑

This commit is contained in:
tangwei 2026-06-04 19:42:35 +08:00
parent 17007d8a18
commit af87b8ca9a
10 changed files with 151 additions and 69 deletions

View File

@ -8,4 +8,6 @@ public class StationBasinInfo {
private String ennm; // 电站名称
private String hbrvcd; // 流域编码
private String hbrvnm; // 流域名称
private String rvcd;
private String rvnm;
}

View File

@ -40,5 +40,11 @@ public interface SdEngInfoBHMapper extends BaseMapper<SdEngInfoBH> {
List<SdEngInfoBH> selectByHbrvcdList(@Param("hbrvcdList") List<String> hbrvcdList);
/**
* 根据基地流域编码列表批量查询电站
*/
List<SdEngInfoBH> selectByRvcdList(@Param("rvcdList") List<String> rvcdList);
List<StationBasinInfo> selectStationBasinInfo();
}

View File

@ -237,6 +237,12 @@ public class FishDraftData implements Serializable {
@TableField(exist = false)
private String rvcd;
/**
* 流域编码
*/
@TableField(exist = false)
private String rvnm;
/**
* 基地流域编码
*/

View File

@ -47,6 +47,8 @@ public class ImportTaskRow implements Serializable {
private String rvcd;
private String rvnm;
private String baseId;
private String baseName;

View File

@ -133,7 +133,7 @@ public class FishImportServiceImpl implements IFishImportService {
EXCEL_COLUMN_MAPPING.put("过鱼设施名称", "fpname");
EXCEL_COLUMN_INDEX_MAPPING.put(0, "hbrvcd");
EXCEL_COLUMN_INDEX_MAPPING.put(0, "rvcd");
EXCEL_COLUMN_INDEX_MAPPING.put(1, "stationName");
EXCEL_COLUMN_INDEX_MAPPING.put(2, "stnm");
EXCEL_COLUMN_INDEX_MAPPING.put(3, "strdt");
@ -186,11 +186,11 @@ public class FishImportServiceImpl implements IFishImportService {
Map<Integer, String> columnIndexMap = new HashMap<>(EXCEL_COLUMN_INDEX_MAPPING);
Set<String> allowedHbrvcdSet = new HashSet<>();
Set<String> allowedRvcdSet = new HashSet<>();
Set<String> directStcdSet = new HashSet<>();
List<SdFpssBH> sdFpssList=new ArrayList<>();
List<SdHbrvDic> allowedHbrvcdList = new ArrayList<>();
List<SdRvcdDic> allowedRvcdList = new ArrayList<>();
List<SdEngInfoBH> directStcdList = new ArrayList<>();
if (uploadUserId != null) {
List<SysUserDataScope> permissions = userDataScopeMapper.selectValidPermissions(uploadUserId);
@ -203,8 +203,8 @@ public class FishImportServiceImpl implements IFishImportService {
continue;
}
if ("HBRVCD".equals(orgType)) {
allowedHbrvcdSet.add(orgId);
if ("RVCD".equals(orgType)) {
allowedRvcdSet.add(orgId);
} else if ("STATION".equals(orgType)) {
directStcdSet.add(orgId);
}
@ -213,9 +213,9 @@ public class FishImportServiceImpl implements IFishImportService {
}
if (!allowedHbrvcdSet.isEmpty() || !directStcdSet.isEmpty()) {
if (!allowedHbrvcdSet.isEmpty()) {
List<SdEngInfoBH> stationsFromHbrv = engInfoBHMapper.selectByHbrvcdList(new ArrayList<>(allowedHbrvcdSet));
if (!allowedRvcdSet.isEmpty() || !directStcdSet.isEmpty()) {
if (!allowedRvcdSet.isEmpty()) {
List<SdEngInfoBH> stationsFromHbrv = engInfoBHMapper.selectByRvcdList(new ArrayList<>(allowedRvcdSet));
for (SdEngInfoBH station : stationsFromHbrv) {
if (station.getStcd() != null) {
directStcdSet.add(station.getStcd());
@ -229,16 +229,16 @@ public class FishImportServiceImpl implements IFishImportService {
if (station.getStcd() != null) {
directStcdSet.add(station.getStcd());
}
if (station.getHbrvcd() != null) {
allowedHbrvcdSet.add(station.getHbrvcd());
if (station.getRvcd() != null) {
allowedRvcdSet.add(station.getRvcd());
}
}
}
}
if(!allowedHbrvcdSet.isEmpty()){
List<SdHbrvDic> sdHbrvDics = sdHbrvDicMapper.selectList(new LambdaQueryWrapper<SdHbrvDic>().in(SdHbrvDic::getHbrvcd, allowedHbrvcdSet).select(SdHbrvDic::getHbrvcd, SdHbrvDic::getHbrvnm));
allowedHbrvcdList.addAll(sdHbrvDics);
if(!allowedRvcdSet.isEmpty()){
List<SdRvcdDic> sdRvcdDics = rvcdDicMapper.selectList(new LambdaQueryWrapper<SdRvcdDic>().in(SdRvcdDic::getRvcd, allowedRvcdSet).select(SdRvcdDic::getRvcd, SdRvcdDic::getRvnm));
allowedRvcdList.addAll(sdRvcdDics);
}
if (!directStcdSet.isEmpty()) {
@ -258,7 +258,7 @@ public class FishImportServiceImpl implements IFishImportService {
continue;
}
FishImportResult.FishImportRow importRow = parseRow(result, row, columnIndexMap, i, uploadUserId,allowedHbrvcdList,directStcdList,sdFpssList);
FishImportResult.FishImportRow importRow = parseRow(result, row, columnIndexMap, i, uploadUserId,allowedRvcdList,directStcdList,sdFpssList);
result.setTotalCount(result.getTotalCount() + 1);
if (importRow.getData() != null && importRow.getWarnings().isEmpty()) {
result.addSuccessRow(importRow);
@ -274,7 +274,7 @@ public class FishImportServiceImpl implements IFishImportService {
return result;
}
private FishImportResult.FishImportRow parseRow(FishImportResult result, Row row, Map<Integer, String> columnIndexMap, int rowIndex, String userId,List<SdHbrvDic> allowedHbrvcdList,List<SdEngInfoBH> directStcdList,List<SdFpssBH> sdFpssList) {
private FishImportResult.FishImportRow parseRow(FishImportResult result, Row row, Map<Integer, String> columnIndexMap, int rowIndex, String userId,List<SdRvcdDic> allowRvcdList,List<SdEngInfoBH> directStcdList,List<SdFpssBH> sdFpssList) {
FishImportResult.FishImportRow importRow = new FishImportResult.FishImportRow(rowIndex);
@ -323,13 +323,19 @@ public class FishImportServiceImpl implements IFishImportService {
}
break;
case "rvcd":
if (StringUtils.hasText(cellValue)) {
String rvcd = resolveRiverCode(cellValue.trim());
if (rvcd == null) {
importRow.getWarnings().add(fieldName);
data.setRvcd(cellValue);
if (!StringUtils.hasText(cellValue)) {
importRow.getWarnings().add("rvcd");
data.setHbrvcd(cellValue);
data.setHbrvnm(cellValue);
} else {
String rvcdCode = allowRvcdList.stream().filter(sdRvcdDic -> sdRvcdDic.getRvnm().equals(cellValue.trim())).map(SdRvcdDic::getRvcd).findFirst().orElse( null);
if (StrUtil.isBlank(rvcdCode)) {
importRow.getWarnings().add("rvcd");
data.setRvcd(cellValue.trim());
data.setRvnm(cellValue.trim());
} else {
data.setRvcd(rvcd);
data.setRvcd(rvcdCode);
data.setRvnm(cellValue.trim());
}
}
break;
@ -338,17 +344,18 @@ public class FishImportServiceImpl implements IFishImportService {
importRow.getWarnings().add("hbrvcd");
data.setHbrvcd(cellValue);
data.setHbrvnm(cellValue);
} else {
String hbrvcdCode = allowedHbrvcdList.stream().filter(sdHbrvDic -> sdHbrvDic.getHbrvnm().equals(cellValue.trim())).map(SdHbrvDic::getHbrvcd).findFirst().orElse( null);
if (StrUtil.isBlank(hbrvcdCode)) {
importRow.getWarnings().add("hbrvcd");
data.setHbrvcd(cellValue.trim());
data.setHbrvnm(cellValue.trim());
} else {
data.setHbrvcd(hbrvcdCode);
data.setHbrvnm(cellValue.trim());
}
}
// else {
// String hbrvcdCode = allowedHbrvcdList.stream().filter(sdHbrvDic -> sdHbrvDic.getHbrvnm().equals(cellValue.trim())).map(SdHbrvDic::getHbrvcd).findFirst().orElse( null);
// if (StrUtil.isBlank(hbrvcdCode)) {
// importRow.getWarnings().add("hbrvcd");
// data.setHbrvcd(cellValue.trim());
// data.setHbrvnm(cellValue.trim());
// } else {
// data.setHbrvcd(hbrvcdCode);
// data.setHbrvnm(cellValue.trim());
// }
// }
//
break;
case "tm":
@ -618,7 +625,7 @@ public class FishImportServiceImpl implements IFishImportService {
private void validateStationFpssRelation(FishDraftData data, FishImportResult.FishImportRow importRow) {
if (importRow.getWarnings().contains("hbrvcd")) {
if (importRow.getWarnings().contains("rvcd")) {
if (!importRow.getWarnings().contains("rstcd")) {
importRow.getWarnings().add("rstcd");
}

View File

@ -263,6 +263,7 @@ public class ImportTaskServiceImpl extends ServiceImpl<ImportTaskMapper, ImportT
taskRow.setHbrvcd(data.getHbrvcd());
taskRow.setHbrvnm(data.getHbrvnm());
taskRow.setRvcd(data.getRvcd());
taskRow.setRvnm(data.getRvnm());
taskRow.setBaseId(data.getBaseId());
taskRow.setBaseName(data.getBaseName());
taskRow.setStrdt(data.getStrdt());
@ -369,6 +370,7 @@ public class ImportTaskServiceImpl extends ServiceImpl<ImportTaskMapper, ImportT
data.setHbrvcd(row.getHbrvcd());
data.setHbrvnm(row.getHbrvnm());
data.setRvcd(row.getRvcd());
data.setRvnm(row.getRvnm());
data.setBaseId(row.getBaseId());
data.setBaseName(row.getBaseName());
data.setStrdt(row.getStrdt());

View File

@ -242,7 +242,7 @@ public class SmsVerifyCodeController {
}
String stationCode = smsVerifyCodeRequest.getStationCode();
String hbrvcdCode = smsVerifyCodeRequest.getHbrvcdCode();
String rvcdCode = smsVerifyCodeRequest.getRvcdCode();
Set<String> selectedStationCodes = new HashSet<>();
if (StringUtils.isNotEmpty(stationCode)) {
@ -250,8 +250,8 @@ public class SmsVerifyCodeController {
}
Set<String> selectedBasinCodes = new HashSet<>();
if (StringUtils.isNotEmpty(hbrvcdCode)) {
selectedBasinCodes.addAll(Arrays.asList(hbrvcdCode.split(",")));
if (StringUtils.isNotEmpty(rvcdCode)) {
selectedBasinCodes.addAll(Arrays.asList(rvcdCode.split(",")));
}
// Set<String> addedStationCodes = new HashSet<>();
@ -262,13 +262,13 @@ public class SmsVerifyCodeController {
}
List<SdEngInfoBH> allStationsInBasin = engInfoBHService.lambdaQuery()
.eq(SdEngInfoBH::getHbrvcd, basinCode)
.eq(SdEngInfoBH::getRvcd, basinCode)
.list();
if (allStationsInBasin == null || allStationsInBasin.isEmpty()) {
SysUserDataScope scope = new SysUserDataScope();
scope.setUserId(userId);
scope.setOrgType("HBRVCD");
scope.setOrgType("RVCD");
scope.setOrgId(basinCode);
scope.setStatus(1);
scope.setPermissionType("READ");
@ -286,7 +286,7 @@ public class SmsVerifyCodeController {
if (allStationsSelected) {
SysUserDataScope scope = new SysUserDataScope();
scope.setUserId(userId);
scope.setOrgType("HBRVCD");
scope.setOrgType("RVCD");
scope.setOrgId(basinCode);
scope.setStatus(1);
scope.setPermissionType("READ");

View File

@ -709,24 +709,28 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
String orgId = scope.getOrgId();
String orgName = scope.getOrgName();
if ("HBRVCD".equals(orgType)) {
if (orgName != null) {
if ("RVCD".equals(orgType)) {
if (StrUtil.isNotBlank(orgName)) {
basinNameSet.add(orgName);
}
if (orgId != null) {
if (stationBasinInfos != null) {
List<String> stcdList = stationBasinInfos.stream().filter(info -> info.getHbrvcd().equals(orgId)).map(StationBasinInfo::getEnnm).toList();
stationNameSet.addAll(stcdList);
List<String> stcdList = stationBasinInfos.stream().filter(info -> info.getRvcd().equals(orgId)).map(StationBasinInfo::getEnnm).toList();
if(!stcdList.isEmpty()){
stationNameSet.addAll(stcdList);
}
}
}
} else if ("STATION".equals(orgType)) {
if (orgName != null) {
if (StrUtil.isNotBlank(orgName)) {
stationNameSet.add(orgName);
}
if (orgId != null) {
if (stationBasinInfos != null) {
String hbrbcd = stationBasinInfos.stream().filter(info -> info.getStcd().equals(orgId)).map(StationBasinInfo::getHbrvnm).findFirst().orElse(null);
basinNameSet.add(hbrbcd);
String rvcd = stationBasinInfos.stream().filter(info -> info.getStcd().equals(orgId)).map(StationBasinInfo::getRvnm).findFirst().orElse(null);
if(StrUtil.isNotBlank(rvcd)){
basinNameSet.add(rvcd);
}
}
}
}

View File

@ -103,36 +103,69 @@
ORDER BY s.CREATED_AT DESC
</select>
<select id="selectValidPermissionsWithNameByUserIds" resultMap="BaseResultMap">
SELECT
s.ID,
s.USER_ID,
s.ORG_TYPE,
s.ORG_ID,
s.PARENT_ID,
s.ORG_LEVEL,
s.PATH,
s.PERMISSION_TYPE,
s.ROLE_CODE,
s.DATA_SCOPE,
s.STATUS,
s.START_TIME,
s.END_TIME,
s.CREATED_AT,
s.CREATED_BY,
s.UPDATED_AT,
s.UPDATED_BY,
s.REMARK,
COALESCE(e.ENNM, h.HBRVNM) AS orgName
s.ID,
s.USER_ID,
s.ORG_TYPE,
s.ORG_ID,
s.PARENT_ID,
s.ORG_LEVEL,
s.PATH,
s.PERMISSION_TYPE,
s.ROLE_CODE,
s.DATA_SCOPE,
s.STATUS,
s.START_TIME,
s.END_TIME,
s.CREATED_AT,
s.CREATED_BY,
s.UPDATED_AT,
s.UPDATED_BY,
s.REMARK,
COALESCE(e.ENNM, h.RVNM) AS orgName
FROM SYS_USER_DATA_SCOPE s
LEFT JOIN SD_ENGINFO_B_H e ON s.ORG_TYPE = 'STATION' AND s.ORG_ID = e.stcd
LEFT JOIN SD_HBRV_DIC h ON s.ORG_TYPE = 'HBRVCD' AND s.ORG_ID = h.hbrvcd
LEFT JOIN SD_RVCD_DIC h ON s.ORG_TYPE = 'RVCD' AND s.ORG_ID = h.rvcd
WHERE s.USER_ID IN
<foreach collection="userIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
AND s.STATUS = 1
AND s.STATUS = 1
ORDER BY s.CREATED_AT DESC
</select>
<!-- <select id="selectValidPermissionsWithNameByUserIds" resultMap="BaseResultMap">-->
<!-- SELECT-->
<!-- s.ID,-->
<!-- s.USER_ID,-->
<!-- s.ORG_TYPE,-->
<!-- s.ORG_ID,-->
<!-- s.PARENT_ID,-->
<!-- s.ORG_LEVEL,-->
<!-- s.PATH,-->
<!-- s.PERMISSION_TYPE,-->
<!-- s.ROLE_CODE,-->
<!-- s.DATA_SCOPE,-->
<!-- s.STATUS,-->
<!-- s.START_TIME,-->
<!-- s.END_TIME,-->
<!-- s.CREATED_AT,-->
<!-- s.CREATED_BY,-->
<!-- s.UPDATED_AT,-->
<!-- s.UPDATED_BY,-->
<!-- s.REMARK,-->
<!-- COALESCE(e.ENNM, h.HBRVNM) AS orgName-->
<!-- FROM SYS_USER_DATA_SCOPE s-->
<!-- LEFT JOIN SD_ENGINFO_B_H e ON s.ORG_TYPE = 'STATION' AND s.ORG_ID = e.stcd-->
<!-- LEFT JOIN SD_HBRV_DIC h ON s.ORG_TYPE = 'HBRVCD' AND s.ORG_ID = h.hbrvcd-->
<!-- WHERE s.USER_ID IN-->
<!-- <foreach collection="userIds" item="id" open="(" separator="," close=")">-->
<!-- #{id}-->
<!-- </foreach>-->
<!-- AND s.STATUS = 1-->
<!-- ORDER BY s.CREATED_AT DESC-->
<!-- </select>-->
</mapper>

View File

@ -238,15 +238,25 @@
<result column="HBRVNM" property="hbrvnm"/>
</resultMap>
<select id="selectStationBasinInfo" resultMap="StationBasinInfoResultMap">
SELECT
e.STCD,
e.ENNM,
e.HBRVCD,
h.HBRVNM
e.RVCD,
h.RVNM
FROM SD_ENGINFO_B_H e
LEFT JOIN SD_HBRV_DIC h ON e.HBRVCD = h.HBRVCD
INNER JOIN SD_RVCD_DIC h ON e.RVCD = h.RVCD
</select>
<!-- <select id="selectStationBasinInfo" resultMap="StationBasinInfoResultMap">-->
<!-- SELECT-->
<!-- e.STCD,-->
<!-- e.ENNM,-->
<!-- e.HBRVCD,-->
<!-- h.HBRVNM-->
<!-- FROM SD_ENGINFO_B_H e-->
<!-- LEFT JOIN SD_HBRV_DIC h ON e.HBRVCD = h.HBRVCD-->
<!-- </select>-->
<select id="selectByBaseId" resultMap="BaseResultMap">
SELECT * FROM SD_ENGINFO_B_H
@ -281,4 +291,14 @@
ORDER BY HBRVCD, ORDER_INDEX ASC
</select>
<select id="selectByRvcdList" resultMap="BaseResultMap">
SELECT * FROM SD_ENGINFO_B_H
WHERE RVCD IN
<foreach collection="rvcdList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
ORDER BY HBRVCD, ORDER_INDEX ASC
</select>
</mapper>