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)
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(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(4, "ftp");
EXCEL_COLUMN_INDEX_MAPPING.put(5, "isfs");
@ -314,7 +314,7 @@ public class FishImportServiceImpl implements IFishImportService {
case "sourceType":
data.setSourceType(parseSourceType(cellValue.trim()));
break;
case "fpname":
case "stnm":
if (!StringUtils.hasText(cellValue)) {
missingRequiredFields.add("过鱼设施名称");
} else {
@ -322,9 +322,9 @@ public class FishImportServiceImpl implements IFishImportService {
if (stcd == null) {
importRow.getWarnings().add(fieldName);
data.setStcd(cellValue.trim());
data.setFpname(cellValue.trim());
data.setStnm(cellValue.trim());
} else {
data.setFpname(stcd);
data.setStnm(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 java.util.List;
import java.util.Set;
/**
* <p>
@ -38,6 +39,8 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
*/
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 java.util.List;
import java.util.Set;
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);
Set<String> getUserAuthorizedStationCodes();
boolean add(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 java.util.List;
import java.util.Set;
/**
* <p>
@ -33,6 +34,8 @@ public interface ISdHydrobaseService extends IService<SdHydrobase> {
*/
List<SdHydrobase> selectForDropdown(String basename);
Set<String> getUserAuthorizedStationCodes();
/**
* 新增基地
*/

View File

@ -1,15 +1,23 @@
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.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.mapper.SdEngInfoBHMapper;
import com.yfd.platform.env.service.ISdEngInfoBHService;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
@ -19,19 +27,26 @@ import java.util.List;
@Service
public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEngInfoBH> implements ISdEngInfoBHService {
@Resource
private SdEngInfoBHMapper engInfoBHMapper;
@Resource
private SysUserDataScopeMapper sysUserDataScopeMapper;
@Override
public Page<SdEngInfoBH> queryPageList(Page<SdEngInfoBH> page, String ennm, String rvcd, String baseId, String hycd) {
return this.page(page, this.lambdaQuery()
.like(ennm != null && !ennm.isEmpty(), SdEngInfoBH::getEnnm, ennm)
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
wrapper .like(ennm != null && !ennm.isEmpty(), SdEngInfoBH::getEnnm, ennm)
.eq(rvcd != null && !rvcd.isEmpty(), SdEngInfoBH::getRvcd, rvcd)
.eq(baseId != null && !baseId.isEmpty(), SdEngInfoBH::getBaseId, baseId)
.eq(hycd != null && !hycd.isEmpty(), SdEngInfoBH::getHycd, hycd)
.orderByAsc(SdEngInfoBH::getOrderIndex)
.getWrapper());
.orderByAsc(SdEngInfoBH::getOrderIndex);
Set<String> authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations != null && !authorizedStations.isEmpty()) {
wrapper.in(SdEngInfoBH::getStcd, authorizedStations);
}
return this.page(page, wrapper);
}
@Override
@ -51,12 +66,64 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
@Override
public List<SdEngInfoBH> selectForDropdown(String baseId, String ennm) {
return this.lambdaQuery()
.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
.like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)
.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();
return engInfos.stream()
.map(SdEngInfoBH::getStcd)
.collect(Collectors.toSet());
}
return stationCodes;
}
@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.extension.plugins.pagination.Page;
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.mapper.SdEngInfoBHMapper;
import com.yfd.platform.env.mapper.SdFpssBHMapper;
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.util.StringUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> implements ISdFpssBHService {
@Resource
private SysUserDataScopeMapper sysUserDataScopeMapper;
@Resource
private SdEngInfoBHMapper sdEngInfoBHMapper;
@Override
public Page<SdFpssBH> selectPage(String stcd, String sttp, String rstcd, Integer usfl, Page<SdFpssBH> page) {
LambdaQueryWrapper<SdFpssBH> wrapper = new LambdaQueryWrapper<>();
@ -31,6 +47,11 @@ public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> i
wrapper.eq(SdFpssBH::getUsfl, usfl);
}
Set<String> authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations != null && !authorizedStations.isEmpty()) {
wrapper.in(SdFpssBH::getRstcd, authorizedStations);
}
wrapper.orderByDesc(SdFpssBH::getOrderIndex);
return page(page, wrapper);
}
@ -44,15 +65,72 @@ public class SdFpssBHServiceImpl extends ServiceImpl<SdFpssBHMapper, SdFpssBH> i
@Override
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)) {
return baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId);
result = baseMapper.selectForDropdownWithBaseId(rstcd, stnm, baseId);
} else {
LambdaQueryWrapper<SdFpssBH> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(rstcd), SdFpssBH::getRstcd, rstcd)
.like(StringUtils.hasText(stnm), SdFpssBH::getStnm, stnm)
.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

View File

@ -1,14 +1,25 @@
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.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.mapper.SdEngInfoBHMapper;
import com.yfd.platform.env.mapper.SdHydrobaseMapper;
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.util.StringUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
@ -18,6 +29,12 @@ import java.util.List;
@Service
public class SdHydrobaseServiceImpl extends ServiceImpl<SdHydrobaseMapper, SdHydrobase> implements ISdHydrobaseService {
@Resource
private SysUserDataScopeMapper sysUserDataScopeMapper;
@Resource
private SdEngInfoBHMapper sdEngInfoBHMapper;
@Override
public Page<SdHydrobase> queryPageList(Page<SdHydrobase> page, String basename, String pbaseid) {
return this.page(page, this.lambdaQuery()
@ -45,10 +62,81 @@ public class SdHydrobaseServiceImpl extends ServiceImpl<SdHydrobaseMapper, SdHyd
@Override
public List<SdHydrobase> selectForDropdown(String basename) {
return this.lambdaQuery()
.like(StringUtils.hasText(basename), SdHydrobase::getBasename, basename)
.orderByAsc(SdHydrobase::getOrderIndex)
.list();
LambdaQueryWrapper<SdHydrobase> wrapper = new LambdaQueryWrapper<>();
if (StringUtils.hasText(basename)) {
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