fix: 优化过鱼数据权限

This commit is contained in:
tangwei 2026-04-25 20:20:34 +08:00
parent 8eea3cbb74
commit 53c08bd833
8 changed files with 262 additions and 20 deletions

View File

@ -206,7 +206,7 @@ public class FishDraftData implements Serializable {
* 设施名称 * 设施名称
*/ */
@TableField(exist = false) @TableField(exist = false)
private String fpname; private String stnm;
/** /**
* 鱼类名称 * 鱼类名称

View File

@ -92,7 +92,7 @@ public class FishImportServiceImpl implements IFishImportService {
EXCEL_COLUMN_INDEX_MAPPING.put(0, "baseName"); EXCEL_COLUMN_INDEX_MAPPING.put(0, "baseName");
EXCEL_COLUMN_INDEX_MAPPING.put(1, "stationName"); EXCEL_COLUMN_INDEX_MAPPING.put(1, "stationName");
EXCEL_COLUMN_INDEX_MAPPING.put(2, "fpname"); EXCEL_COLUMN_INDEX_MAPPING.put(2, "stnm");
EXCEL_COLUMN_INDEX_MAPPING.put(3, "strdt"); EXCEL_COLUMN_INDEX_MAPPING.put(3, "strdt");
EXCEL_COLUMN_INDEX_MAPPING.put(4, "ftp"); EXCEL_COLUMN_INDEX_MAPPING.put(4, "ftp");
EXCEL_COLUMN_INDEX_MAPPING.put(5, "isfs"); EXCEL_COLUMN_INDEX_MAPPING.put(5, "isfs");
@ -314,7 +314,7 @@ public class FishImportServiceImpl implements IFishImportService {
case "sourceType": case "sourceType":
data.setSourceType(parseSourceType(cellValue.trim())); data.setSourceType(parseSourceType(cellValue.trim()));
break; break;
case "fpname": case "stnm":
if (!StringUtils.hasText(cellValue)) { if (!StringUtils.hasText(cellValue)) {
missingRequiredFields.add("过鱼设施名称"); missingRequiredFields.add("过鱼设施名称");
} else { } else {
@ -322,9 +322,9 @@ public class FishImportServiceImpl implements IFishImportService {
if (stcd == null) { if (stcd == null) {
importRow.getWarnings().add(fieldName); importRow.getWarnings().add(fieldName);
data.setStcd(cellValue.trim()); data.setStcd(cellValue.trim());
data.setFpname(cellValue.trim()); data.setStnm(cellValue.trim());
} else { } else {
data.setFpname(stcd); data.setStnm(stcd);
data.setStcd(stcd); data.setStcd(stcd);
} }
} }

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.env.domain.SdEngInfoBH; import com.yfd.platform.env.domain.SdEngInfoBH;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* <p> * <p>
@ -38,6 +39,8 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
*/ */
List<SdEngInfoBH> selectForDropdown(String baseId, String ennm); List<SdEngInfoBH> selectForDropdown(String baseId, String ennm);
Set<String> getUserAuthorizedStationCodes();
/** /**
* 新增电站 * 新增电站
*/ */

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.env.domain.SdFpssBH; import com.yfd.platform.env.domain.SdFpssBH;
import java.util.List; import java.util.List;
import java.util.Set;
public interface ISdFpssBHService extends IService<SdFpssBH> { public interface ISdFpssBHService extends IService<SdFpssBH> {
@ -17,6 +18,8 @@ public interface ISdFpssBHService extends IService<SdFpssBH> {
*/ */
List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId); List<SdFpssBH> selectForDropdown(String rstcd, String stnm, String baseId);
Set<String> getUserAuthorizedStationCodes();
boolean add(SdFpssBH sdFpssBH); boolean add(SdFpssBH sdFpssBH);
boolean updateById(SdFpssBH sdFpssBH); boolean updateById(SdFpssBH sdFpssBH);

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.env.domain.SdHydrobase; import com.yfd.platform.env.domain.SdHydrobase;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* <p> * <p>
@ -33,6 +34,8 @@ public interface ISdHydrobaseService extends IService<SdHydrobase> {
*/ */
List<SdHydrobase> selectForDropdown(String basename); List<SdHydrobase> selectForDropdown(String basename);
Set<String> getUserAuthorizedStationCodes();
/** /**
* 新增基地 * 新增基地
*/ */

View File

@ -1,15 +1,23 @@
package com.yfd.platform.env.service.impl; package com.yfd.platform.env.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.data.domain.SysUserDataScope;
import com.yfd.platform.data.mapper.SysUserDataScopeMapper;
import com.yfd.platform.env.domain.SdEngInfoBH; import com.yfd.platform.env.domain.SdEngInfoBH;
import com.yfd.platform.env.mapper.SdEngInfoBHMapper; import com.yfd.platform.env.mapper.SdEngInfoBHMapper;
import com.yfd.platform.env.service.ISdEngInfoBHService; import com.yfd.platform.env.service.ISdEngInfoBHService;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@ -19,19 +27,26 @@ import java.util.List;
@Service @Service
public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEngInfoBH> implements ISdEngInfoBHService { public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEngInfoBH> implements ISdEngInfoBHService {
@Resource @Resource
private SdEngInfoBHMapper engInfoBHMapper; private SdEngInfoBHMapper engInfoBHMapper;
@Resource
private SysUserDataScopeMapper sysUserDataScopeMapper;
@Override @Override
public Page<SdEngInfoBH> queryPageList(Page<SdEngInfoBH> page, String ennm, String rvcd, String baseId, String hycd) { public Page<SdEngInfoBH> queryPageList(Page<SdEngInfoBH> page, String ennm, String rvcd, String baseId, String hycd) {
return this.page(page, this.lambdaQuery() LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
.like(ennm != null && !ennm.isEmpty(), SdEngInfoBH::getEnnm, ennm) wrapper .like(ennm != null && !ennm.isEmpty(), SdEngInfoBH::getEnnm, ennm)
.eq(rvcd != null && !rvcd.isEmpty(), SdEngInfoBH::getRvcd, rvcd) .eq(rvcd != null && !rvcd.isEmpty(), SdEngInfoBH::getRvcd, rvcd)
.eq(baseId != null && !baseId.isEmpty(), SdEngInfoBH::getBaseId, baseId) .eq(baseId != null && !baseId.isEmpty(), SdEngInfoBH::getBaseId, baseId)
.eq(hycd != null && !hycd.isEmpty(), SdEngInfoBH::getHycd, hycd) .eq(hycd != null && !hycd.isEmpty(), SdEngInfoBH::getHycd, hycd)
.orderByAsc(SdEngInfoBH::getOrderIndex) .orderByAsc(SdEngInfoBH::getOrderIndex);
.getWrapper());
Set<String> authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations != null && !authorizedStations.isEmpty()) {
wrapper.in(SdEngInfoBH::getStcd, authorizedStations);
}
return this.page(page, wrapper);
} }
@Override @Override
@ -51,12 +66,64 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
@Override @Override
public List<SdEngInfoBH> selectForDropdown(String baseId, String ennm) { public List<SdEngInfoBH> selectForDropdown(String baseId, String ennm) {
return this.lambdaQuery() LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
.like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm) .like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)
.select(SdEngInfoBH::getStcd, SdEngInfoBH::getEnnm, SdEngInfoBH::getBaseId) .select(SdEngInfoBH::getStcd, SdEngInfoBH::getEnnm, SdEngInfoBH::getBaseId)
.orderByAsc(SdEngInfoBH::getOrderIndex) .orderByAsc(SdEngInfoBH::getOrderIndex);
Set<String> authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations != null && !authorizedStations.isEmpty()) {
wrapper.in(SdEngInfoBH::getStcd, authorizedStations);
} else {
return new ArrayList<>();
}
return this.list(wrapper);
}
@Override
public Set<String> getUserAuthorizedStationCodes() {
String userId = SecurityUtils.getUserId();
List<SysUserDataScope> sysUserDataScopes = sysUserDataScopeMapper.selectList(
new LambdaQueryWrapper<SysUserDataScope>()
.eq(SysUserDataScope::getUserId, userId)
.select(SysUserDataScope::getOrgId, SysUserDataScope::getOrgType)
);
if (sysUserDataScopes == null || sysUserDataScopes.isEmpty()) {
return new HashSet<>();
}
Set<String> stationCodes = new HashSet<>();
List<String> basinCodes = new ArrayList<>();
for (SysUserDataScope scope : sysUserDataScopes) {
String orgType = scope.getOrgType();
String orgId = scope.getOrgId();
if ("STATION".equals(orgType)) {
stationCodes.add(orgId);
} else if ("BASIN".equals(orgType)) {
basinCodes.add(orgId);
}
}
if (!stationCodes.isEmpty()) {
return stationCodes;
}
if (!basinCodes.isEmpty()) {
List<SdEngInfoBH> engInfos = this.lambdaQuery()
.select(SdEngInfoBH::getStcd)
.in(SdEngInfoBH::getRvcd, basinCodes)
.list(); .list();
return engInfos.stream()
.map(SdEngInfoBH::getStcd)
.collect(Collectors.toSet());
}
return stationCodes;
} }
@Override @Override

View File

@ -3,17 +3,33 @@ package com.yfd.platform.env.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.data.domain.SysUserDataScope;
import com.yfd.platform.data.mapper.SysUserDataScopeMapper;
import com.yfd.platform.env.domain.SdEngInfoBH;
import com.yfd.platform.env.domain.SdFpssBH; import com.yfd.platform.env.domain.SdFpssBH;
import com.yfd.platform.env.mapper.SdEngInfoBHMapper;
import com.yfd.platform.env.mapper.SdFpssBHMapper; import com.yfd.platform.env.mapper.SdFpssBHMapper;
import com.yfd.platform.env.service.ISdFpssBHService; import com.yfd.platform.env.service.ISdFpssBHService;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service @Service
public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> implements ISdFpssBHService { public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> implements ISdFpssBHService {
@Resource
private SysUserDataScopeMapper sysUserDataScopeMapper;
@Resource
private SdEngInfoBHMapper sdEngInfoBHMapper;
@Override @Override
public Page<SdFpssBH> selectPage(String stcd, String sttp, String rstcd, Integer usfl, Page<SdFpssBH> page) { public Page<SdFpssBH> selectPage(String stcd, String sttp, String rstcd, Integer usfl, Page<SdFpssBH> page) {
LambdaQueryWrapper<SdFpssBH> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SdFpssBH> wrapper = new LambdaQueryWrapper<>();
@ -31,6 +47,11 @@ public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> i
wrapper.eq(SdFpssBH::getUsfl, usfl); wrapper.eq(SdFpssBH::getUsfl, usfl);
} }
Set<String> authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations != null && !authorizedStations.isEmpty()) {
wrapper.in(SdFpssBH::getRstcd, authorizedStations);
}
wrapper.orderByDesc(SdFpssBH::getOrderIndex); wrapper.orderByDesc(SdFpssBH::getOrderIndex);
return page(page, wrapper); return page(page, wrapper);
} }
@ -44,15 +65,72 @@ 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) {
Set<String> authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations == null || authorizedStations.isEmpty()) {
return new ArrayList<>();
}
List<SdFpssBH> result;
if (StringUtils.hasText(baseId)) { if (StringUtils.hasText(baseId)) {
return baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId); result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId);
} 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)
.like(StringUtils.hasText(stnm), SdFpssBH::getStnm, stnm) .like(StringUtils.hasText(stnm), SdFpssBH::getStnm, stnm)
.orderByDesc(SdFpssBH::getOrderIndex); .orderByDesc(SdFpssBH::getOrderIndex);
return list(wrapper); result = list(wrapper);
} }
return result.stream()
.filter(fpss -> authorizedStations.contains(fpss.getRstcd()))
.collect(Collectors.toList());
}
@Override
public Set<String> getUserAuthorizedStationCodes() {
String userId = SecurityUtils.getUserId();
List<SysUserDataScope> sysUserDataScopes = sysUserDataScopeMapper.selectList(
new LambdaQueryWrapper<SysUserDataScope>()
.eq(SysUserDataScope::getUserId, userId)
.select(SysUserDataScope::getOrgId, SysUserDataScope::getOrgType)
);
if (sysUserDataScopes == null || sysUserDataScopes.isEmpty()) {
return new HashSet<>();
}
Set<String> stationCodes = new HashSet<>();
List<String> basinCodes = new ArrayList<>();
for (SysUserDataScope scope : sysUserDataScopes) {
String orgType = scope.getOrgType();
String orgId = scope.getOrgId();
if ("STATION".equals(orgType)) {
stationCodes.add(orgId);
} else if ("BASIN".equals(orgType)) {
basinCodes.add(orgId);
}
}
if (!stationCodes.isEmpty()) {
return stationCodes;
}
if (!basinCodes.isEmpty()) {
List<SdEngInfoBH> engInfos = sdEngInfoBHMapper.selectList(
new LambdaQueryWrapper<SdEngInfoBH>()
.select(SdEngInfoBH::getStcd)
.in(SdEngInfoBH::getRvcd, basinCodes)
);
return engInfos.stream()
.map(SdEngInfoBH::getStcd)
.collect(Collectors.toSet());
}
return stationCodes;
} }
@Override @Override

View File

@ -1,14 +1,25 @@
package com.yfd.platform.env.service.impl; package com.yfd.platform.env.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.data.domain.SysUserDataScope;
import com.yfd.platform.data.mapper.SysUserDataScopeMapper;
import com.yfd.platform.env.domain.SdEngInfoBH;
import com.yfd.platform.env.domain.SdHydrobase; import com.yfd.platform.env.domain.SdHydrobase;
import com.yfd.platform.env.mapper.SdEngInfoBHMapper;
import com.yfd.platform.env.mapper.SdHydrobaseMapper; import com.yfd.platform.env.mapper.SdHydrobaseMapper;
import com.yfd.platform.env.service.ISdHydrobaseService; import com.yfd.platform.env.service.ISdHydrobaseService;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@ -18,6 +29,12 @@ import java.util.List;
@Service @Service
public class SdHydrobaseServiceImpl extends ServiceImpl<SdHydrobaseMapper, SdHydrobase> implements ISdHydrobaseService { public class SdHydrobaseServiceImpl extends ServiceImpl<SdHydrobaseMapper, SdHydrobase> implements ISdHydrobaseService {
@Resource
private SysUserDataScopeMapper sysUserDataScopeMapper;
@Resource
private SdEngInfoBHMapper sdEngInfoBHMapper;
@Override @Override
public Page<SdHydrobase> queryPageList(Page<SdHydrobase> page, String basename, String pbaseid) { public Page<SdHydrobase> queryPageList(Page<SdHydrobase> page, String basename, String pbaseid) {
return this.page(page, this.lambdaQuery() return this.page(page, this.lambdaQuery()
@ -45,10 +62,81 @@ public class SdHydrobaseServiceImpl extends ServiceImpl<SdHydrobaseMapper, SdHyd
@Override @Override
public List<SdHydrobase> selectForDropdown(String basename) { public List<SdHydrobase> selectForDropdown(String basename) {
return this.lambdaQuery() LambdaQueryWrapper<SdHydrobase> wrapper = new LambdaQueryWrapper<>();
.like(StringUtils.hasText(basename), SdHydrobase::getBasename, basename)
.orderByAsc(SdHydrobase::getOrderIndex) if (StringUtils.hasText(basename)) {
.list(); wrapper.like(SdHydrobase::getBasename, basename);
}
Set<String> authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations != null && !authorizedStations.isEmpty()) {
List<SdEngInfoBH> engInfos = sdEngInfoBHMapper.selectList(
new LambdaQueryWrapper<SdEngInfoBH>()
.select(SdEngInfoBH::getBaseId)
.in(SdEngInfoBH::getStcd, authorizedStations)
);
List<String> baseIds = engInfos.stream()
.map(SdEngInfoBH::getBaseId)
.filter(id -> id != null && !id.isEmpty())
.distinct()
.collect(Collectors.toList());
if (!baseIds.isEmpty()) {
wrapper.in(SdHydrobase::getBaseid, baseIds);
} else {
return new ArrayList<>();
}
} else {
return new ArrayList<>();
}
wrapper.orderByAsc(SdHydrobase::getOrderIndex);
return this.list(wrapper);
}
@Override
public Set<String> getUserAuthorizedStationCodes() {
String userId = SecurityUtils.getUserId();
List<SysUserDataScope> sysUserDataScopes = sysUserDataScopeMapper.selectList(
new LambdaQueryWrapper<SysUserDataScope>()
.eq(SysUserDataScope::getUserId, userId)
.select(SysUserDataScope::getOrgId, SysUserDataScope::getOrgType)
);
if (sysUserDataScopes == null || sysUserDataScopes.isEmpty()) {
return new HashSet<>();
}
Set<String> stationCodes = new HashSet<>();
List<String> basinCodes = new ArrayList<>();
for (SysUserDataScope scope : sysUserDataScopes) {
String orgType = scope.getOrgType();
String orgId = scope.getOrgId();
if ("STATION".equals(orgType)) {
stationCodes.add(orgId);
} else if ("BASIN".equals(orgType)) {
basinCodes.add(orgId);
}
}
if (!stationCodes.isEmpty()) {
return stationCodes;
}
if (!basinCodes.isEmpty()) {
List<SdEngInfoBH> engInfos = sdEngInfoBHMapper.selectList(
new LambdaQueryWrapper<SdEngInfoBH>()
.select(SdEngInfoBH::getStcd)
.in(SdEngInfoBH::getRvcd, basinCodes)
);
return engInfos.stream()
.map(SdEngInfoBH::getStcd)
.collect(Collectors.toSet());
}
return stationCodes;
} }
@Override @Override