Merge branch 'dev-tw'

This commit is contained in:
tangwei 2026-04-30 19:09:45 +08:00
commit 41b910c857
17 changed files with 190 additions and 48 deletions

View File

@ -865,10 +865,17 @@ public class FishDraftDataController {
warnings.add("rstcd");
}
if (data.getBaseId() != null && !data.getBaseId().isEmpty()) {
String baseId = fishImportService.resolveBaseCode(data.getBaseId(), data.getBaseName());
// if (data.getBaseId() != null && !data.getBaseId().isEmpty()) {
// String baseId = fishImportService.resolveBaseCode(data.getBaseId(), data.getBaseName());
// if (baseId == null) {
// warnings.add("baseId");
// }
// }
if (data.getHbrvcd() != null && !data.getHbrvcd().isEmpty()) {
String baseId = fishImportService.resolveHbrvcdCode(data.getHbrvcd(), data.getHbrvnm());
if (baseId == null) {
warnings.add("baseId");
warnings.add("hbrvcd");
}
}
@ -879,9 +886,16 @@ public class FishDraftDataController {
}
}
if (data.getTm() == null) {
warnings.add("tm");
}
// if (data.getHbrvcd() != null && !data.getHbrvcd().isEmpty()) {
// String hbrvcd = fishImportService.resolveHbrvcdCode(data.getHbrvcd(), data.getRvcd());
// if (hbrvcd == null) {
// warnings.add("hbrvcd");
// }
// }
// if (data.getTm() == null) {
// warnings.add("tm");
// }
if (data.getFtp() == null || data.getFtp().isEmpty()) {
warnings.add("ftp");
@ -922,9 +936,9 @@ public class FishDraftDataController {
}
}
if (StringUtils.hasText(data.getBaseId()) && StringUtils.hasText(data.getRstcd())) {
if (!fishImportService.validateStationBelongsToBase(data.getRstcd(), data.getBaseId())) {
warnings.add("baseId");
if (StringUtils.hasText(data.getHbrvcd()) && StringUtils.hasText(data.getRstcd())) {
if (!fishImportService.validateStationBelongsToBase(data.getRstcd(), data.getHbrvcd())) {
warnings.add("hbrvcd");
warnings.add("rstcd");
}
}

View File

@ -215,6 +215,19 @@ public class FishDraftData implements Serializable {
@TableField(exist = false)
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";
private List<FishImportRow> rows;
private List<FishImportRow> successRows;
private List<FishImportRow> failedRows;
private List<String> unrecognizedFields;
private Map<String, String> imageFiles;
private Map<String, String> videoFiles;

View File

@ -1,5 +1,6 @@
package com.yfd.platform.data.domain.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
@ -231,4 +232,14 @@ public class FishDraftDataVO implements Serializable {
* 删除人名称
*/
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("ftp") String ftp,
@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 resolveBaseCode(String code,String baseName);
String resolveRiverCode(String code,String riverName);
String resolveHbrvcdCode(String code,String riverName);
String resolveDirection(String direction, 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();
String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
String rstcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd");
String hbrvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "hbrvcd");
String baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
String ftp = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "ftp");
String direction = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "direction");
@ -74,7 +75,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
startTime=TM.split(",")[0];
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());
return resultPage;
}

View File

@ -40,6 +40,9 @@ public class FishImportServiceImpl implements IFishImportService {
@Resource
private SdRvcdDicMapper rvcdDicMapper;
@Resource
private SdHbrvDicMapper sdHbrvDicMapper;
@Resource
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_CODE_TO_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> 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_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
@ -102,7 +107,7 @@ public class FishImportServiceImpl implements IFishImportService {
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(2, "stnm");
EXCEL_COLUMN_INDEX_MAPPING.put(3, "strdt");
@ -233,6 +238,33 @@ public class FishImportServiceImpl implements IFishImportService {
}
}
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":
if (!StringUtils.hasText(cellValue)) {
importRow.getWarnings().add(fieldName);
@ -407,10 +439,10 @@ public class FishImportServiceImpl implements IFishImportService {
private void validateStationFpssRelation(FishDraftData data, FishImportResult.FishImportRow importRow) {
loadStationAndBaseCache();
if (StringUtils.hasText(data.getBaseId()) && StringUtils.hasText(data.getRstcd())) {
if (!validateStationBelongsToBase(data.getRstcd(), data.getBaseId())) {
if (!importRow.getWarnings().contains("baseId")) {
importRow.getWarnings().add("baseId");
if (StringUtils.hasText(data.getHbrvcd()) && StringUtils.hasText(data.getRstcd())) {
if (!validateStationBelongsToBase(data.getRstcd(), data.getHbrvcd())) {
if (!importRow.getWarnings().contains("hbrvcd")) {
importRow.getWarnings().add("hbrvcd");
}
if (!importRow.getWarnings().contains("rstcd")) {
importRow.getWarnings().add("rstcd");
@ -422,8 +454,8 @@ public class FishImportServiceImpl implements IFishImportService {
}
if (StringUtils.hasText(data.getRstcd()) && StringUtils.hasText(data.getStcd())) {
if (!validateFpssBelongsToStation(data.getStcd(), data.getRstcd())) {
if (!importRow.getWarnings().contains("baseId")) {
importRow.getWarnings().add("baseId");
if (!importRow.getWarnings().contains("hbrvcd")) {
importRow.getWarnings().add("hbrvcd");
}
if (!importRow.getWarnings().contains("stcd")) {
importRow.getWarnings().add("stcd");
@ -447,7 +479,7 @@ public class FishImportServiceImpl implements IFishImportService {
STATION_CODE_TO_NAME_CACHE.put(station.getStcd().trim().toLowerCase(), station.getEnnm().trim().toLowerCase());
}
if (StringUtils.hasText(station.getBaseId())) {
STATION_TO_BASE_CACHE.put(station.getStcd().trim().toLowerCase(), station.getBaseId());
STATION_TO_BASE_CACHE.put(station.getStcd().trim().toLowerCase(), station.getHbrvcd());
}
}
}
@ -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()) {
List<SdFishDictoryB> sdFishDictoryBS = fishDictoryBMapper.selectList(null);
for (SdFishDictoryB fishDictoryB : sdFishDictoryBS) {
@ -678,6 +724,23 @@ public class FishImportServiceImpl implements IFishImportService {
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
public String resolveRiverCode(String code, String riverName) {
if (code == null && riverName == null) {
@ -699,6 +762,27 @@ public class FishImportServiceImpl implements IFishImportService {
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
public boolean validateStationBelongsToBase(String stationCode, String baseId) {
if (stationCode == null || baseId == null) {

View File

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

View File

@ -11,6 +11,7 @@ import java.util.List;
@AllArgsConstructor
public class SdEngInfoBHRequest {
private String baseId;
private String hbrvcd;
private List<String> basIds;
private List<String> hbrvcds;
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 " +
"WHERE 1=1 " +
"<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='stnm != null and stnm != \"\"'> AND F.STNM LIKE '%' || #{stnm} || '%' </if>" +
"ORDER BY F.ORDER_INDEX DESC" +
"</script>")
List<SdFpssBH> selectForDropdownWithBaseId(@Param("rstcd") String rstcd,
@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();

View File

@ -71,8 +71,10 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
String ennm = sdEngInfoBHRequest.getEnnm();
List<String> rvcds = sdEngInfoBHRequest.getRvcds();
List<String> hbrvcds = sdEngInfoBHRequest.getHbrvcds();
String hbrvcd = sdEngInfoBHRequest.getHbrvcd();
LambdaQueryWrapper<SdEngInfoBH> 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)

View File

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

View File

@ -204,7 +204,7 @@ public class SmsVerifyCodeController {
selectedBasinCodes.addAll(Arrays.asList(hbrvcdCode.split(",")));
}
Set<String> addedStationCodes = new HashSet<>();
// Set<String> addedStationCodes = new HashSet<>();
for (String basinCode : selectedBasinCodes) {
if (StringUtils.isEmpty(basinCode)) {
@ -241,7 +241,7 @@ public class SmsVerifyCodeController {
scope.setStatus(1);
scope.setPermissionType("READ");
sysUserDataScopeService.addDataScope(scope);
addedStationCodes.add(basinCode);
// addedStationCodes.add(basinCode);
} else {
Set<String> stationsInBasinAndSelected = allStationCodesInBasin.stream()
.filter(selectedStationCodes::contains)
@ -255,27 +255,27 @@ public class SmsVerifyCodeController {
scope.setStatus(1);
scope.setPermissionType("READ");
sysUserDataScopeService.addDataScope(scope);
addedStationCodes.add(stationCd);
// addedStationCodes.add(stationCd);
}
}
}
Set<String> standaloneStations = selectedStationCodes.stream()
.filter(code -> !addedStationCodes.contains(code))
.collect(Collectors.toSet());
for (String stationCd : standaloneStations) {
if (StringUtils.isEmpty(stationCd)) {
continue;
}
SysUserDataScope scope = new SysUserDataScope();
scope.setUserId(userId);
scope.setOrgType("STATION");
scope.setOrgId(stationCd);
scope.setStatus(1);
scope.setPermissionType("READ");
sysUserDataScopeService.addDataScope(scope);
}
// Set<String> standaloneStations = selectedStationCodes.stream()
// .filter(code -> !addedStationCodes.contains(code))
// .collect(Collectors.toSet());
//
// for (String stationCd : standaloneStations) {
// if (StringUtils.isEmpty(stationCd)) {
// continue;
// }
// SysUserDataScope scope = new SysUserDataScope();
// scope.setUserId(userId);
// scope.setOrgType("STATION");
// scope.setOrgId(stationCd);
// scope.setStatus(1);
// scope.setPermissionType("READ");
// sysUserDataScopeService.addDataScope(scope);
// }
SysUser user = new SysUser();
user.setId(userId);
userService.updateUserRoles( user,"c13481a486c9ee559cf305284df4d207");
@ -316,9 +316,12 @@ public class SmsVerifyCodeController {
} catch (Exception e) {
return ResponseResult.error("密码解密失败");
}
String encodePassword = existUser.getPassword();
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encryptedPassword = passwordEncoder.encode(password);
if (passwordEncoder.matches(password, encodePassword)) {
return ResponseResult.error("新密码不能与旧密码相同");
}
boolean success = userService.updatePasswordByPhone(phone, encryptedPassword);
if (success) {
return ResponseResult.success();

View File

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

View File

@ -74,7 +74,7 @@
sys_user u
WHERE
1 = 1
AND ( ( u.REG_STATUS != 0 AND u.REG_STATUS != 2 ) OR u.REG_STATUS IS NULL )
AND ( ( u.REG_STATUS != 'PENDING' AND u.REG_STATUS != 'REJECTED' ) OR u.REG_STATUS IS NULL )
AND u.usertype != 0
<if test="orgid != null">
and u.orgid = #{orgid}