fix: 优化导入过鱼设施逻辑

This commit is contained in:
tangwei 2026-04-22 18:54:20 +08:00
parent e54a242dde
commit 84095972c8
4 changed files with 808 additions and 119 deletions

View File

@ -31,12 +31,6 @@ public class FishDraftData implements Serializable {
*/ */
private String stcd; private String stcd;
/**
* 所属基地编码
*/
@TableField(exist = false)
private String baseId;
/** /**
* 填报时间 * 填报时间
*/ */
@ -47,6 +41,7 @@ public class FishDraftData implements Serializable {
*/ */
private String ftp; private String ftp;
/** /**
* 鱼类全长 * 鱼类全长
*/ */
@ -135,24 +130,6 @@ public class FishDraftData implements Serializable {
private BigDecimal wt; private BigDecimal wt;
/**
* 电站名称
*/
@TableField(exist = false)
private String engName;
/**
* 基地名称
*/
@TableField(exist = false)
private String baseName;
/**
* 设施名称
*/
@TableField(exist = false)
private String fPname;
/** /**
* 审批完成时间 * 审批完成时间
@ -197,4 +174,42 @@ public class FishDraftData implements Serializable {
*/ */
@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy; private String updatedBy;
/**
* 所属基地编码
*/
@TableField(exist = false)
private String baseId;
/**
* 电站名称
*/
@TableField(exist = false)
private String engName;
/**
* 基地名称
*/
@TableField(exist = false)
private String baseName;
/**
* 流域编码
*/
@TableField(exist = false)
private String rvcd;
/**
* 设施名称
*/
@TableField(exist = false)
private String fpname;
/**
* 鱼类名称
*/
@TableField(exist = false)
private String ftpName;
} }

View File

@ -5,10 +5,12 @@ import com.yfd.platform.data.domain.FishImportRequest;
import com.yfd.platform.data.domain.FishImportResult; import com.yfd.platform.data.domain.FishImportResult;
import com.yfd.platform.data.service.IFishImportService; import com.yfd.platform.data.service.IFishImportService;
import com.yfd.platform.data.utils.ZipFileUtil; import com.yfd.platform.data.utils.ZipFileUtil;
import com.yfd.platform.env.domain.SdEngInfoBH; import com.yfd.platform.env.domain.*;
import com.yfd.platform.env.domain.SdHydrobase; import com.yfd.platform.env.mapper.*;
import com.yfd.platform.env.mapper.SdEngInfoBHMapper; import com.yfd.platform.system.domain.SysDictionary;
import com.yfd.platform.env.mapper.SdHydrobaseMapper; import com.yfd.platform.system.domain.SysDictionaryItems;
import com.yfd.platform.system.service.ISysDictionaryItemsService;
import com.yfd.platform.system.service.ISysDictionaryService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@ -16,7 +18,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -34,30 +35,73 @@ public class FishImportServiceImpl implements IFishImportService {
@Resource @Resource
private SdHydrobaseMapper hydrobaseMapper; private SdHydrobaseMapper hydrobaseMapper;
private static final Map<String, String> EXCEL_COLUMN_MAPPING = new LinkedHashMap<>(); @Resource
private SdRvcdDicMapper rvcdDicMapper;
private static final Map<String, String> STATION_NAME_CACHE = new HashMap<>(); @Resource
private static final Map<String, String> STATION_CODE_CACHE = new HashMap<>(); private SdFpssBHMapper fpssBHMapper;
private static final Map<String, String> BASE_NAME_CACHE = new HashMap<>();
private static final Map<String, String> BASE_CODE_CACHE = new HashMap<>(); @Resource
private SdFishDictoryBMapper fishDictoryBMapper;
@Resource
private ISysDictionaryService sysDictionaryService;
@Resource
private ISysDictionaryItemsService sysDictionaryItemsService;
private static final Map<String, String> EXCEL_COLUMN_MAPPING = new LinkedHashMap<>();
private static final Map<Integer, String> EXCEL_COLUMN_INDEX_MAPPING = new LinkedHashMap<>();
private static final Map<String, String> STATION_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> BASE_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> RIVER_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FISH_DICT_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FPSS_BH_CACHE = new LinkedHashMap<>();
private static final Map<String, String> DIRECTION_DICT_CACHE = new LinkedHashMap<>();
private static final Map<String, String> ISFS_DICT_CACHE = new LinkedHashMap<>();
private static final String DICT_CODE_FISH = "FISH_TYPE";
private static final String DICT_CODE_DIRECTION = "FISH_DIRECTION";
private static final String DICT_CODE_ISFS = "YES_NO";
static { static {
EXCEL_COLUMN_MAPPING.put("电站名称", "stcd"); EXCEL_COLUMN_MAPPING.put("电站名称", "stcd");
EXCEL_COLUMN_MAPPING.put("基地名称", "baseId"); EXCEL_COLUMN_MAPPING.put("基地名称", "baseId");
EXCEL_COLUMN_MAPPING.put("流域名称", "rvcd");
EXCEL_COLUMN_MAPPING.put("数据时间", "tm"); EXCEL_COLUMN_MAPPING.put("数据时间", "tm");
EXCEL_COLUMN_MAPPING.put("过鱼时间", "tm");
EXCEL_COLUMN_MAPPING.put("鱼类", "ftp"); EXCEL_COLUMN_MAPPING.put("鱼类", "ftp");
EXCEL_COLUMN_MAPPING.put("鱼种类", "ftp");
EXCEL_COLUMN_MAPPING.put("鱼类全长", "fsz"); EXCEL_COLUMN_MAPPING.put("鱼类全长", "fsz");
EXCEL_COLUMN_MAPPING.put("过鱼数量", "fcnt"); EXCEL_COLUMN_MAPPING.put("过鱼数量", "fcnt");
EXCEL_COLUMN_MAPPING.put("过鱼数量(尾)", "fcnt");
EXCEL_COLUMN_MAPPING.put("平均体重", "fwet"); EXCEL_COLUMN_MAPPING.put("平均体重", "fwet");
EXCEL_COLUMN_MAPPING.put("开始日期", "strdt"); EXCEL_COLUMN_MAPPING.put("开始日期", "strdt");
EXCEL_COLUMN_MAPPING.put("结束日期", "enddt"); EXCEL_COLUMN_MAPPING.put("结束日期", "enddt");
EXCEL_COLUMN_MAPPING.put("游向", "direction"); EXCEL_COLUMN_MAPPING.put("游向", "direction");
EXCEL_COLUMN_MAPPING.put("水温", "wt");
EXCEL_COLUMN_MAPPING.put("年份", "yr"); EXCEL_COLUMN_MAPPING.put("年份", "yr");
EXCEL_COLUMN_MAPPING.put("月份", "mouth"); EXCEL_COLUMN_MAPPING.put("月份", "mouth");
EXCEL_COLUMN_MAPPING.put("过鱼视频文件路径", "vdpth"); EXCEL_COLUMN_MAPPING.put("过鱼视频文件路径", "vdpth");
EXCEL_COLUMN_MAPPING.put("图片文件路径", "picpth"); EXCEL_COLUMN_MAPPING.put("图片文件路径", "picpth");
EXCEL_COLUMN_MAPPING.put("是否鱼苗", "isfs"); EXCEL_COLUMN_MAPPING.put("是否鱼苗", "isfs");
EXCEL_COLUMN_MAPPING.put("数据来源", "sourceType"); EXCEL_COLUMN_MAPPING.put("数据来源", "sourceType");
EXCEL_COLUMN_MAPPING.put("过鱼设施名称", "fpname");
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(3, "tm");
EXCEL_COLUMN_INDEX_MAPPING.put(4, "ftp");
EXCEL_COLUMN_INDEX_MAPPING.put(5, "isfs");
EXCEL_COLUMN_INDEX_MAPPING.put(6, "direction");
EXCEL_COLUMN_INDEX_MAPPING.put(7, "fcnt");
EXCEL_COLUMN_INDEX_MAPPING.put(8, "fsz");
EXCEL_COLUMN_INDEX_MAPPING.put(9, "fwet");
EXCEL_COLUMN_INDEX_MAPPING.put(10, "wt");
} }
@Override @Override
@ -96,25 +140,8 @@ public class FishImportServiceImpl implements IFishImportService {
return result; return result;
} }
Map<Integer, String> columnIndexMap = new HashMap<>();
List<String> unrecognizedHeaders = new ArrayList<>(); List<String> unrecognizedHeaders = new ArrayList<>();
Map<Integer, String> columnIndexMap = new HashMap<>(EXCEL_COLUMN_INDEX_MAPPING);
for (int i = 0; i < headerRow.getLastCellNum(); i++) {
Cell cell = headerRow.getCell(i);
if (cell != null) {
String headerName = getCellStringValue(cell).trim();
String mappedField = EXCEL_COLUMN_MAPPING.get(headerName);
if (mappedField != null) {
columnIndexMap.put(i, mappedField);
} else {
unrecognizedHeaders.add(headerName);
}
}
}
if (!unrecognizedHeaders.isEmpty()) {
result.setUnrecognizedFields(unrecognizedHeaders);
}
int totalRows = sheet.getLastRowNum(); int totalRows = sheet.getLastRowNum();
result.setTotalCount(totalRows); result.setTotalCount(totalRows);
@ -126,7 +153,7 @@ public class FishImportServiceImpl implements IFishImportService {
} }
FishImportResult.FishImportRow importRow = parseRow(row, columnIndexMap, i); FishImportResult.FishImportRow importRow = parseRow(row, columnIndexMap, i);
if (importRow.getData() != null && importRow.getUnrecognizedFields().isEmpty()) { if (importRow.getData() != null && importRow.getWarnings().isEmpty()) {
result.getSuccessRows().add(importRow); result.getSuccessRows().add(importRow);
result.setSuccessCount(result.getSuccessCount() + 1); result.setSuccessCount(result.getSuccessCount() + 1);
} else { } else {
@ -146,45 +173,93 @@ public class FishImportServiceImpl implements IFishImportService {
FishImportResult.FishImportRow importRow = new FishImportResult.FishImportRow(rowIndex); FishImportResult.FishImportRow importRow = new FishImportResult.FishImportRow(rowIndex);
FishDraftData data = new FishDraftData(); FishDraftData data = new FishDraftData();
data.setId(UUID.randomUUID().toString()); data.setId(UUID.randomUUID().toString());
List<String> unrecognizedFields = new ArrayList<>(); List<String> missingRequiredFields = new ArrayList<>();
for (Map.Entry<Integer, String> entry : columnIndexMap.entrySet()) { for (Map.Entry<Integer, String> entry : columnIndexMap.entrySet()) {
Integer columnIndex = entry.getKey(); Integer columnIndex = entry.getKey();
String fieldName = entry.getValue(); String fieldName = entry.getValue();
Cell cell = row.getCell(columnIndex); Cell cell = row.getCell(columnIndex);
String cellValue = getCellStringValue(cell); String cellValue = getCellStringValue(cell);
if (!StringUtils.hasText(cellValue)) {
continue;
}
try { try {
switch (fieldName) { switch (fieldName) {
case "stcd": case "stationName":
String stcd = resolveStationCode(cellValue.trim()); if (!StringUtils.hasText(cellValue)) {
if (stcd == null) { missingRequiredFields.add("电站名称");
importRow.getWarnings().add("无法识别的电站: " + cellValue); } else {
String stcd = resolveStationCode(cellValue.trim());
if (stcd == null) {
importRow.getWarnings().add(fieldName);
data.setEngName(cellValue.trim());
} else {
data.setEngName(cellValue.trim());
}
} }
data.setStcd(stcd);
break; break;
case "baseId": case "baseName":
String baseId = resolveBaseCode(cellValue.trim()); if (!StringUtils.hasText(cellValue)) {
if (baseId == null) { missingRequiredFields.add("水电基地");
importRow.getWarnings().add("无法识别的基地: " + cellValue); } else {
String baseId = resolveBaseCode(cellValue.trim());
if (baseId == null) {
importRow.getWarnings().add(fieldName);
data.setBaseId(cellValue.trim());
data.setBaseName(cellValue.trim());
} else {
data.setBaseId(baseId);
data.setBaseName(cellValue.trim());
}
}
break;
case "rvcd":
if (StringUtils.hasText(cellValue)) {
String rvcd = resolveRiverCode(cellValue.trim());
if (rvcd == null) {
importRow.getWarnings().add(fieldName);
} else {
data.setRvcd(rvcd);
}
} }
data.setBaseId(baseId);
break; break;
case "tm": case "tm":
data.setTm(parseDate(cellValue)); if (!StringUtils.hasText(cellValue)) {
missingRequiredFields.add("过鱼时间");
} else {
Date tm = parseDate(cellValue);
if (tm == null) {
importRow.getWarnings().add("过鱼时间格式错误: " + cellValue);
}
data.setTm(tm);
}
break; break;
case "ftp": case "ftp":
data.setFtp(cellValue.trim()); if (!StringUtils.hasText(cellValue)) {
missingRequiredFields.add("鱼种类");
} else {
String stcd = resolveFishDictCode(cellValue.trim());
if (stcd == null) {
importRow.getWarnings().add(fieldName);
data.setFtp(cellValue.trim());
data.setFtpName(cellValue.trim());
} else {
data.setFtp(stcd);
data.setFtpName(cellValue.trim());
}
}
break; break;
case "fsz": case "fsz":
data.setFsz(cellValue.trim()); data.setFsz(cellValue.trim());
break; break;
case "fcnt": case "fcnt":
data.setFcnt(parseInteger(cellValue)); if (!StringUtils.hasText(cellValue)) {
missingRequiredFields.add("过鱼数量");
} else {
Integer fcnt = parseInteger(cellValue);
if (fcnt == null) {
importRow.getWarnings().add(fieldName);
data.setFcnt(parseInteger(cellValue));
}
data.setFcnt(fcnt);
}
break; break;
case "fwet": case "fwet":
data.setFwet(cellValue.trim()); data.setFwet(cellValue.trim());
@ -196,7 +271,12 @@ public class FishImportServiceImpl implements IFishImportService {
data.setEnddt(parseDate(cellValue)); data.setEnddt(parseDate(cellValue));
break; break;
case "direction": case "direction":
data.setDirection(parseDirection(cellValue.trim())); if (!StringUtils.hasText(cellValue)) {
missingRequiredFields.add("游向");
} else {
String direction = resolveDirection(cellValue.trim(), importRow);
data.setDirection(direction);
}
break; break;
case "yr": case "yr":
data.setYr(parseInteger(cellValue)); data.setYr(parseInteger(cellValue));
@ -211,21 +291,38 @@ public class FishImportServiceImpl implements IFishImportService {
data.setPicpth(cellValue.trim()); data.setPicpth(cellValue.trim());
break; break;
case "isfs": case "isfs":
data.setIsfs(parseIsfs(cellValue)); if (StringUtils.hasText(cellValue)) {
String isfs = resolveIsfs(cellValue.trim(), importRow);
data.setIsfs("".equals(isfs) ? 1 : 0);
}
break; break;
case "sourceType": case "sourceType":
data.setSourceType(parseSourceType(cellValue.trim())); data.setSourceType(parseSourceType(cellValue.trim()));
break; break;
case "fpname":
if (!StringUtils.hasText(cellValue)) {
missingRequiredFields.add("过鱼设施名称");
} else {
String stcd = resolveFpssCode(cellValue.trim());
if (stcd == null) {
importRow.getWarnings().add(fieldName);
data.setStcd(cellValue.trim());
data.setFpname(cellValue.trim());
} else {
data.setFpname(stcd);
data.setStcd(stcd);
}
}
break;
default: default:
break; break;
} }
} catch (Exception e) { } catch (Exception e) {
importRow.getWarnings().add("字段[" + fieldName + "]解析异常: " + e.getMessage()); e.printStackTrace();
// importRow.getWarnings().add("字段[" + fieldName + "]解析异常: " + e.getMessage());
} }
} }
importRow.setData(data); importRow.setData(data);
importRow.setUnrecognizedFields(unrecognizedFields);
return importRow; return importRow;
} }
@ -237,7 +334,7 @@ public class FishImportServiceImpl implements IFishImportService {
STATION_NAME_CACHE.put(station.getEnnm().trim().toLowerCase(), station.getStcd()); STATION_NAME_CACHE.put(station.getEnnm().trim().toLowerCase(), station.getStcd());
} }
if (StringUtils.hasText(station.getStcd())) { if (StringUtils.hasText(station.getStcd())) {
STATION_CODE_CACHE.put(station.getStcd().trim().toLowerCase(), station.getStcd()); STATION_NAME_CACHE.put(station.getStcd().trim().toLowerCase(), station.getStcd());
} }
} }
} }
@ -249,12 +346,50 @@ public class FishImportServiceImpl implements IFishImportService {
BASE_NAME_CACHE.put(base.getBasename().trim().toLowerCase(), base.getBaseid()); BASE_NAME_CACHE.put(base.getBasename().trim().toLowerCase(), base.getBaseid());
} }
if (StringUtils.hasText(base.getBaseid())) { if (StringUtils.hasText(base.getBaseid())) {
BASE_CODE_CACHE.put(base.getBaseid().trim().toLowerCase(), base.getBaseid()); BASE_NAME_CACHE.put(base.getBaseid().trim().toLowerCase(), base.getBaseid());
}
}
}
if (RIVER_NAME_CACHE.isEmpty()) {
List<SdRvcdDic> riverList = rvcdDicMapper.selectList(null);
for (SdRvcdDic river : riverList) {
if (StringUtils.hasText(river.getRvnm())) {
RIVER_NAME_CACHE.put(river.getRvnm().trim().toLowerCase(), river.getRvcd());
}
if (StringUtils.hasText(river.getRvcd())) {
RIVER_NAME_CACHE.put(river.getRvcd().trim().toLowerCase(), river.getRvcd());
}
}
}
if (FISH_DICT_CACHE.isEmpty()) {
List<SdFishDictoryB> sdFishDictoryBS = fishDictoryBMapper.selectList(null);
for (SdFishDictoryB fishDictoryB : sdFishDictoryBS) {
if (StringUtils.hasText(fishDictoryB.getName())) {
FISH_DICT_CACHE.put(fishDictoryB.getName().trim().toLowerCase(), fishDictoryB.getCode());
}
if (StringUtils.hasText(fishDictoryB.getCode())) {
FISH_DICT_CACHE.put(fishDictoryB.getCode().trim().toLowerCase(), fishDictoryB.getCode());
}
}
}
if (FPSS_BH_CACHE.isEmpty()) {
List<SdFpssBH> sdFpssBHS = fpssBHMapper.selectList(null);
for (SdFpssBH sdFpssBH : sdFpssBHS) {
if (StringUtils.hasText(sdFpssBH.getStnm())) {
FPSS_BH_CACHE.put(sdFpssBH.getStnm().trim().toLowerCase(), sdFpssBH.getStcd());
}
if (StringUtils.hasText(sdFpssBH.getStcd())) {
FPSS_BH_CACHE.put(sdFpssBH.getStcd().trim().toLowerCase(), sdFpssBH.getStcd());
} }
} }
} }
} }
private String resolveStationCode(String stationName) { private String resolveStationCode(String stationName) {
if (stationName == null) { if (stationName == null) {
return null; return null;
@ -271,6 +406,38 @@ public class FishImportServiceImpl implements IFishImportService {
return null; return null;
} }
private String resolveFpssCode(String name) {
if (name == null) {
return null;
}
String lowerName = name.toLowerCase().trim();
if (FPSS_BH_CACHE.containsKey(lowerName)) {
return FPSS_BH_CACHE.get(lowerName);
}
for (Map.Entry<String, String> entry : FPSS_BH_CACHE.entrySet()) {
if (entry.getKey().contains(lowerName) || lowerName.contains(entry.getKey())) {
return entry.getValue();
}
}
return null;
}
private String resolveFishDictCode(String name) {
if (name == null) {
return null;
}
String lowerName = name.toLowerCase().trim();
if (FISH_DICT_CACHE.containsKey(lowerName)) {
return FISH_DICT_CACHE.get(lowerName);
}
for (Map.Entry<String, String> entry : FISH_DICT_CACHE.entrySet()) {
if (entry.getKey().contains(lowerName) || lowerName.contains(entry.getKey())) {
return entry.getValue();
}
}
return null;
}
private String resolveBaseCode(String baseName) { private String resolveBaseCode(String baseName) {
if (baseName == null) { if (baseName == null) {
return null; return null;
@ -287,6 +454,165 @@ public class FishImportServiceImpl implements IFishImportService {
return null; return null;
} }
private String resolveRiverCode(String riverName) {
if (riverName == null) {
return null;
}
String lowerName = riverName.toLowerCase().trim();
if (RIVER_NAME_CACHE.containsKey(lowerName)) {
return RIVER_NAME_CACHE.get(lowerName);
}
for (Map.Entry<String, String> entry : RIVER_NAME_CACHE.entrySet()) {
if (entry.getKey().contains(lowerName) || lowerName.contains(entry.getKey())) {
return entry.getValue();
}
}
return null;
}
private String validateFishType(String fishName, FishImportResult.FishImportRow importRow) {
if (fishName == null) {
return null;
}
String lowerName = fishName.toLowerCase().trim();
if (!FISH_DICT_CACHE.isEmpty()) {
if (FISH_DICT_CACHE.containsKey(lowerName)) {
return FISH_DICT_CACHE.get(lowerName);
}
for (Map.Entry<String, String> entry : FISH_DICT_CACHE.entrySet()) {
if (entry.getKey().contains(lowerName) || lowerName.contains(entry.getKey())) {
return entry.getValue();
}
}
}
importRow.getWarnings().add("鱼种类【" + fishName + "】未在字典中找到匹配,请手动确认");
return fishName;
}
private String validateFishFacility(String facilityName, FishImportResult.FishImportRow importRow) {
if (facilityName == null) {
return null;
}
String lowerName = facilityName.toLowerCase().trim();
importRow.getWarnings().add("过鱼设施【" + facilityName + "】暂无可用字典验证,请手动确认");
return facilityName;
}
private String resolveDirection(String direction, FishImportResult.FishImportRow importRow) {
if (direction == null) {
return null;
}
String lowerName = direction.toLowerCase().trim();
if (!DIRECTION_DICT_CACHE.isEmpty()) {
if (DIRECTION_DICT_CACHE.containsKey(lowerName)) {
return DIRECTION_DICT_CACHE.get(lowerName);
}
for (Map.Entry<String, String> entry : DIRECTION_DICT_CACHE.entrySet()) {
if (entry.getKey().contains(lowerName) || lowerName.contains(entry.getKey())) {
return entry.getValue();
}
}
}
if (lowerName.contains("上行") && lowerName.contains("折返")) {
return "上行折返";
} else if (lowerName.contains("下行") && lowerName.contains("折返")) {
return "下行折返";
} else if (lowerName.contains("上行")) {
return "上行";
} else if (lowerName.contains("下行")) {
return "下行";
}
importRow.getWarnings().add("无法识别的游向: " + direction + ",请手动选择");
return direction;
}
private String resolveIsfs(String value, FishImportResult.FishImportRow importRow) {
if (value == null) {
return null;
}
String lowerName = value.toLowerCase().trim();
if (!ISFS_DICT_CACHE.isEmpty()) {
if (ISFS_DICT_CACHE.containsKey(lowerName)) {
return ISFS_DICT_CACHE.get(lowerName);
}
for (Map.Entry<String, String> entry : ISFS_DICT_CACHE.entrySet()) {
if (entry.getKey().contains(lowerName) || lowerName.contains(entry.getKey())) {
return entry.getValue();
}
}
}
if (lowerName.equals("1") || lowerName.equals("") || lowerName.equals("yes") || lowerName.equals("true")) {
return "";
} else if (lowerName.equals("0") || lowerName.equals("") || lowerName.equals("no") || lowerName.equals("false")) {
return "";
}
importRow.getWarnings().add("无法识别的【是否鱼苗】值: " + value + ",将默认设置为【否】");
return "";
}
// private void loadDirectionDict() {
// if (DIRECTION_DICT_CACHE.isEmpty()) {
// try {
// SysDictionary dict = sysDictionaryService.getByDictCode(DICT_CODE_DIRECTION);
// if (dict != null) {
// List<SysDictionaryItems> items = sysDictionaryItemsService.listByDictId(dict.getId());
// for (SysDictionaryItems item : items) {
// if (StringUtils.hasText(item.getItemName())) {
// DIRECTION_DICT_CACHE.put(item.getItemName().trim().toLowerCase(), item.getItemName());
// }
// }
// }
// } catch (Exception e) {
// }
// }
// }
//
// private void loadIsfsDict() {
// if (ISFS_DICT_CACHE.isEmpty()) {
// try {
// SysDictionary dict = sysDictionaryService.getByDictCode(DICT_CODE_ISFS);
// if (dict != null) {
// List<SysDictionaryItems> items = sysDictionaryItemsService.listByDictId(dict.getId());
// for (SysDictionaryItems item : items) {
// if (StringUtils.hasText(item.getItemName())) {
// ISFS_DICT_CACHE.put(item.getItemName().trim().toLowerCase(), item.getItemName());
// }
// }
// }
// } catch (Exception e) {
// }
// }
// }
// private void loadFishDict() {
// if (FISH_DICT_CACHE.isEmpty()) {
// try {
// SysDictionary dict = sysDictionaryService.getByDictCode(DICT_CODE_FISH);
// if (dict != null) {
// List<SysDictionaryItems> items = sysDictionaryItemsService.listByDictId(dict.getId());
// for (SysDictionaryItems item : items) {
// if (StringUtils.hasText(item.getItemName())) {
// FISH_DICT_CACHE.put(item.getItemName().trim().toLowerCase(), item.getItemCode());
// }
// if (StringUtils.hasText(item.getItemCode())) {
// FISH_DICT_CACHE.put(item.getItemCode().trim().toLowerCase(), item.getItemCode());
// }
// }
// }
// } catch (Exception e) {
// }
// }
// }
private String getCellStringValue(Cell cell) { private String getCellStringValue(Cell cell) {
if (cell == null) { if (cell == null) {
return ""; return "";
@ -359,37 +685,6 @@ public class FishImportServiceImpl implements IFishImportService {
} }
} }
private String parseDirection(String direction) {
if (!StringUtils.hasText(direction)) {
return null;
}
String d = direction.toLowerCase();
if (d.contains("上行") || d.contains("up")) {
return "上行";
} else if (d.contains("下行") || d.contains("down")) {
return "下行";
} else if (d.contains("折返")) {
if (d.contains("上行")) {
return "上行折返";
} else if (d.contains("下行")) {
return "下行折返";
}
return "折返";
}
return direction;
}
private Integer parseIsfs(String value) {
if (!StringUtils.hasText(value)) {
return 0;
}
String v = value.toLowerCase().trim();
if (v.equals("1") || v.equals("") || v.equals("yes") || v.equals("鱼苗")) {
return 1;
}
return 0;
}
private String parseSourceType(String value) { private String parseSourceType(String value) {
if (!StringUtils.hasText(value)) { if (!StringUtils.hasText(value)) {
return "IMPORT"; return "IMPORT";
@ -397,7 +692,7 @@ public class FishImportServiceImpl implements IFishImportService {
String v = value.toLowerCase(); String v = value.toLowerCase();
if (v.contains("手工") || v.contains("manual") || v.contains("录入")) { if (v.contains("手工") || v.contains("manual") || v.contains("录入")) {
return "MANUAL"; return "MANUAL";
} else if (v.contains("自动") || v.contains("auto")) { } else if (v.contains("自动") || v.contains("auto") || v.contains("采集")) {
return "AUTO"; return "AUTO";
} else if (v.contains("导入") || v.contains("import")) { } else if (v.contains("导入") || v.contains("import")) {
return "IMPORT"; return "IMPORT";

View File

@ -7,6 +7,11 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
/**
* <p>
* 鱼类字典信息表
* </p>
*/
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("SD_FISHDICTORY_B") @TableName("SD_FISHDICTORY_B")
@ -14,104 +19,254 @@ public class SdFishDictoryB implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(type = IdType.INPUT) @TableId(type = IdType.INPUT)
private String id; private String id;
/**
* 编码
*/
private String code; private String code;
/**
* 名称
*/
private String name; private String name;
/**
* 英文名称
*/
private String nameEn; private String nameEn;
/**
* 俗名
*/
private String alias; private String alias;
/**
* LOGO
*/
private String logo; private String logo;
/**
* 介绍
*/
private String introduce; private String introduce;
/**
* 介绍弹窗图片
*/
private String inffile; private String inffile;
/**
*
*/
private String orders; private String orders;
/**
*
*/
private String family; private String family;
/**
*
*/
private String genus; private String genus;
/**
*
*/
private String species; private String species;
/**
* 分类1=淡水 2=海水
*/
private Integer type; private Integer type;
/**
* 成鱼大小单位cm
*/
private String fsz; private String fsz;
/**
* 是否珍稀鱼类0= 1=
*/
private Integer rare; private Integer rare;
/**
* 物种来源1=本土物种 2=外来物种
*/
private Integer specOrigin; private Integer specOrigin;
/**
* 保护类型1=濒危 2=极危 3=近危 4=易危 5=重点保护 6=无危 7=国家二级 8=市二级保护
*/
private Integer ptype; private Integer ptype;
/**
* 所属流域
*/
private String rvcd; private String rvcd;
/**
* 洄游习性
*/
private String habitMigrat; private String habitMigrat;
/**
* 摄食习性
*/
private String feedingHabit; private String feedingHabit;
/**
* 产卵特性
*/
private String spawnCharact; private String spawnCharact;
/**
* 主要食物
*/
private String food; private String food;
/**
* 觅食时段
*/
private String timeFeed; private String timeFeed;
/**
* 产地及产期
*/
private String orignDate; private String orignDate;
/**
* 适宜温度单位
*/
private String pretemp; private String pretemp;
/**
* 适宜流速单位m/s
*/
private String flowRate; private String flowRate;
/**
* 适宜水深单位m
*/
private String depth; private String depth;
/**
* 适宜底质
*/
private String botmMater; private String botmMater;
/**
* 水质要求1= 2= 3= 4= 5= 6=劣质V
*/
private String wqtq; private String wqtq;
/**
* 主要生活环境 1=流水生境 2=静缓流生境 3=洞穴生境
*/
private Integer habitat; private Integer habitat;
/**
* 种群现状 1=优势种 2=常见种 3=少见种 4=记录种
*/
private Integer situation; private Integer situation;
/**
* 资源类型 1=保护鱼类 2=特有鱼类 3=重要经济鱼类 4=濒危状况
*/
private Integer resourceType; private Integer resourceType;
/**
* 形态描述
*/
private String shapedesc; private String shapedesc;
/**
* 保护级别
*/
private String protectlvl; private String protectlvl;
/**
* 栖息习性
*/
private String habitation; private String habitation;
/**
* 附件
*/
private String fid; private String fid;
/**
* 描述
*/
private String description; private String description;
/**
* 是否启用0=禁用 1=启用
*/
private Integer enable; private Integer enable;
/**
* 系统内置项0= 1=
*/
private Integer internal; private Integer internal;
/**
* 排序
*/
private Integer orderIndex; private Integer orderIndex;
/**
* 创建人关联SYS_USER.ID
*/
private String recordUser; private String recordUser;
/**
* 创建时间
*/
private Date recordTime; private Date recordTime;
/**
* 更新人关联SYS_USER.ID
*/
private String modifyUser; private String modifyUser;
/**
* 更新时间
*/
private Date modifyTime; private Date modifyTime;
/**
* 是否已删除0=未删除 1=已删除
*/
private Integer isDeleted; private Integer isDeleted;
/**
* 删除人关联SYS_USER.ID
*/
private String deleteUser; private String deleteUser;
/**
* 删除时间
*/
private Date deleteTime; private Date deleteTime;
/**
* 产卵月份多个月份以逗号分隔
*/
private String spawnMonth; private String spawnMonth;
/**
* 数据来源
*/
private String vlsr; private String vlsr;
/**
* 数据来源时间
*/
private Date vlsrTm; private Date vlsrTm;
} }

View File

@ -1,6 +1,7 @@
package com.yfd.platform.env.domain; package com.yfd.platform.env.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
@ -9,150 +10,373 @@ import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
/**
* <p>
* 过鱼设施工程信息表
* </p>
*/
@Data @Data
@TableName("SD_FPSS_B_H") @TableName("SD_FPSS_B_H")
public class SdFpssBH implements Serializable { public class SdFpssBH implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* 过鱼设施编码
*/
@TableId(type = IdType.INPUT) @TableId(type = IdType.INPUT)
private String stcd; private String stcd;
private String sttp; /**
* 设施名称
*/
private String stnm;
/**
* 数据时间
*/
private Date tm; private Date tm;
/**
* 过鱼设施类型字典编码sd_fpss_b_h.sttp
* FP_1=鱼道 FP_2=仿自然通道 FP_3=集运鱼系统 FP_4=升鱼机 FP_5=其它过鱼方式 FP_6=网捕过坝
*/
private String sttp;
/**
* 所属建设阶段 字典编码common.blprd
* 1001000=规划 1002000=预可研 1003000=环评 1004000=可研 1005000=在建 1006000=招标设计
* 1007000=施工详图 1009000=建设 1010000=蓄水阶段环保验收 1011000=竣工 1012000=竣工环保验收 1013000=环境影响后评价
*/
private Integer blprd; private Integer blprd;
/**
* 经度单位(°)
*/
private BigDecimal lgtd; private BigDecimal lgtd;
/**
* 纬度单位(°)
*/
private BigDecimal lttd; private BigDecimal lttd;
/**
* 高程单位m
*/
private BigDecimal elev; private BigDecimal elev;
/**
* 站址/位置
*/
private String stlc; private String stlc;
/**
* 是否启用 字典编码common.enabled 0=禁用 1=启用
*/
private Integer usfl; private Integer usfl;
/**
* 数据是否接入 字典编码common.yn 0= 1=
*/
private Integer dtin; private Integer dtin;
/**
* 数据接入时间
*/
private Date dtinTm; private Date dtinTm;
/**
* 排序按照业务规则"升序"
*/
private Integer orderIndex; private Integer orderIndex;
/**
* 所属电站编码关联SD_ENGINFO_B_H.STCD
*/
private String rstcd; private String rstcd;
/**
* 规划设计日期
*/
private Date stdsdt; private Date stdsdt;
/**
* 计划开工日期
*/
private Date pststdt; private Date pststdt;
/**
* 计划完工日期
*/
private Date pesstdt; private Date pesstdt;
/**
* 开工日期
*/
private Date swdt; private Date swdt;
/**
* 建成日期
*/
private Date jcdt; private Date jcdt;
/**
* 退役/拆除日期
*/
private Date wddt; private Date wddt;
/**
* 建设状态分类0=未建/规划(3,4,5,6,为空) 1=在建(2,7,8) 2=已建(1,10,11)
*/
private Integer bldsttCode; private Integer bldsttCode;
/**
* 简介
*/
private String introduce; private String introduce;
/**
* LOGO
*/
private String logo; private String logo;
/**
* 介绍弹窗图片
*/
private String inffile; private String inffile;
/**
* 投资单位亿元
*/
private BigDecimal inv; private BigDecimal inv;
/**
* 鱼道型式
*/
private String ydxs; private String ydxs;
/**
* 鱼道总长度单位m
*/
private BigDecimal ydzcd; private BigDecimal ydzcd;
/**
* 鱼道进口运行设计水位单位m
*/
private BigDecimal ydjkz; private BigDecimal ydjkz;
/**
* 鱼道进口数量单位
*/
private Integer ydjkcnt; private Integer ydjkcnt;
/**
* 鱼道或仿自然通道-进口高程单位m
*/
private BigDecimal jkhg; private BigDecimal jkhg;
/**
* 鱼道进口诱鱼型式
*/
private String ydyyxs; private String ydyyxs;
/**
* 鱼道出口运行设计水位单位m
*/
private BigDecimal ydckz; private BigDecimal ydckz;
/**
* 鱼道出口数量单位
*/
private Integer ydckcnt; private Integer ydckcnt;
/**
* 鱼道或仿自然通道-出口高程单位m
*/
private BigDecimal ckhg; private BigDecimal ckhg;
/**
* 鱼道池室设计流速单位m/s
*/
private BigDecimal ydcsv; private BigDecimal ydcsv;
/**
* 鱼道每级池室长单位m
*/
private Integer ydcscd; private Integer ydcscd;
/**
* 鱼道每级池室宽单位m
*/
private Integer ydcskd; private Integer ydcskd;
/**
* 鱼道池室坡度
*/
private String ydcspd; private String ydcspd;
/**
* 鱼道池室数量单位
*/
private Integer ydcscnt; private Integer ydcscnt;
/**
* 鱼道休息池个数
*/
private Integer ydxxccnt; private Integer ydxxccnt;
/**
* 鱼道或仿自然通道-流速单位m/s
*/
private BigDecimal v; private BigDecimal v;
/**
* 仿自然通道断面形状
*/
private String fzrdmxz; private String fzrdmxz;
private String fzrtdz; /**
* 仿自然通道长度*宽度
*/
private String fzrtdsz;
/**
* 仿自然通道运行水深单位m
*/
private BigDecimal fzryxwdp; private BigDecimal fzryxwdp;
/**
* 仿自然通道坡降
*/
private BigDecimal fzrpj; private BigDecimal fzrpj;
private String symtlcs; /**
* 集运鱼系统或升鱼机-上游码头位置
*/
private String symtlc;
/**
* 集运鱼系统或升鱼机-上游码头型式
*/
private String symtxs; private String symtxs;
private String xymtlcs; /**
* 集运鱼系统或升鱼机-下游码头位置
*/
private String xymtlc;
/**
* 集运鱼系统或升鱼机-下游码头型式
*/
private String xymtxs; private String xymtxs;
/**
* 集运鱼系统或升鱼机-集诱鱼方式
*/
private String jyfs; private String jyfs;
/**
* 集运鱼系统或升鱼机-运鱼设施方式
*/
private String yyfs; private String yyfs;
/**
* 升鱼机集鱼槽数量单位
*/
private Integer syjcnt; private Integer syjcnt;
/**
* 升鱼机集鱼槽进口高程单位m
*/
private BigDecimal syjhg; private BigDecimal syjhg;
/**
* 升鱼机集鱼槽流量单位m3/s
*/
private BigDecimal syjq; private BigDecimal syjq;
/**
* 升鱼机断面尺寸**单位m
*/
private String syjsz; private String syjsz;
/**
* 升鱼机集鱼槽水深单位m
*/
private BigDecimal syjwdp; private BigDecimal syjwdp;
/**
* 设计过鱼规模单位
*/
private Long sjgycnt; private Long sjgycnt;
private String ZygyDx; /**
* 主要过鱼对象{[code:鱼编码1,name:鱼名称1数量],[code:鱼编码2,name:鱼名称2]...}
*/
private String zygydx;
private String ZygyDxms; /**
* 主要过鱼对象描述
*/
private String zygydxms;
private String JggyDx; /**
* 兼顾过鱼对象{[code:鱼编码1,name:鱼名称1数量],[code:鱼编码2,name:鱼名称2]...}
*/
private String jggydx;
private String JggyDxms; /**
* 兼顾过鱼对象描述
*/
private String jggydxms;
/**
* 过鱼时间
*/
private String gytm; private String gytm;
/**
* 运行时间
*/
private String yxtm; private String yxtm;
/**
* 主要过鱼月份多个月份用,隔开
*/
private String fpssmn; private String fpssmn;
/**
* 数据监测频次单位min
*/
private Integer dtfrqcy; private Integer dtfrqcy;
/**
* 基本特性参数文字描述
*/
private String jbtxcs; private String jbtxcs;
/**
* 设施是否实现鱼类上行 0= 1=
*/
private Integer isUp; private Integer isUp;
/**
* 设施是否实现鱼类下行 0= 1=
*/
private Integer isDown; private Integer isDown;
/**
* 备注
*/
private String remark; private String remark;
/**
* 数据来源
*/
private String vlsr; private String vlsr;
/**
* 数据来源时间
*/
private Date vlsrTm; private Date vlsrTm;
} }