fix(data-import): 修复股权冻结导入功能中的参数映射和模板兼容性问题
- 修复了多个信用相关模块中的appellee参数映射错误 - 为Excel导入功能添加了多模板兼容支持,包括案号、暗号等不同字段名 - 增强了Excel导入的容错能力,支持多种表头配置和异常处理 - 扩展了超链接提取功能,支持从多个可能的列名获取URL信息 - 添加了fallback机制以处理不同上游数据源的字段映射差异 - 改进了空行过滤逻辑,提高了数据导入准确性
This commit is contained in:
@@ -197,13 +197,40 @@ public class CreditGqdjController extends BaseController {
|
||||
|
||||
try {
|
||||
int sheetIndex = ExcelImportSupport.findSheetIndex(file, "股权冻结", 0);
|
||||
ExcelImportSupport.ImportResult<CreditGqdjImportParam> importResult = ExcelImportSupport.read(
|
||||
file, CreditGqdjImportParam.class, this::isEmptyImportRow, sheetIndex);
|
||||
// Prefer the "best" header configuration; many upstream files have extra title rows or multi-row headers.
|
||||
ExcelImportSupport.ImportResult<CreditGqdjImportParam> importResult = ExcelImportSupport.readBest(
|
||||
file,
|
||||
CreditGqdjImportParam.class,
|
||||
this::isEmptyImportRow,
|
||||
// Score rows that look like real data (at least has a case number in either column).
|
||||
p -> p != null
|
||||
&& (!ImportHelper.isBlank(p.getCaseNumber())
|
||||
|| !ImportHelper.isBlank(p.getCaseNumber2())
|
||||
|| !ImportHelper.isBlank(p.getCaseNumber3())),
|
||||
sheetIndex
|
||||
);
|
||||
List<CreditGqdjImportParam> list = importResult.getData();
|
||||
int usedTitleRows = importResult.getTitleRows();
|
||||
int usedHeadRows = importResult.getHeadRows();
|
||||
int usedSheetIndex = importResult.getSheetIndex();
|
||||
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
// Fallback: try other sheets if the named/default sheet doesn't match.
|
||||
importResult = ExcelImportSupport.readAnySheetBest(
|
||||
file,
|
||||
CreditGqdjImportParam.class,
|
||||
this::isEmptyImportRow,
|
||||
p -> p != null
|
||||
&& (!ImportHelper.isBlank(p.getCaseNumber())
|
||||
|| !ImportHelper.isBlank(p.getCaseNumber2())
|
||||
|| !ImportHelper.isBlank(p.getCaseNumber3()))
|
||||
);
|
||||
list = importResult.getData();
|
||||
usedTitleRows = importResult.getTitleRows();
|
||||
usedHeadRows = importResult.getHeadRows();
|
||||
usedSheetIndex = importResult.getSheetIndex();
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return fail("未读取到数据,请确认模板表头与示例格式一致", null);
|
||||
}
|
||||
@@ -211,10 +238,18 @@ public class CreditGqdjController extends BaseController {
|
||||
User loginUser = getLoginUser();
|
||||
Integer currentUserId = loginUser != null ? loginUser.getUserId() : null;
|
||||
Integer currentTenantId = loginUser != null ? loginUser.getTenantId() : null;
|
||||
// easypoi 默认不会读取单元格超链接地址;url 通常挂在“执行通知文书号”列的超链接中,需要额外读取回填。
|
||||
// easypoi 默认不会读取单元格超链接地址;url 通常挂在“案号/执行通知文书号”列的超链接中,需要额外读取回填。
|
||||
String caseNumberHeader = "执行通知文书号";
|
||||
Map<String, String> urlByCaseNumber = ExcelImportSupport.readHyperlinksByHeaderKey(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, caseNumberHeader);
|
||||
// Some upstream sources use "案号" as the case number header.
|
||||
Map<String, String> urlByCaseNumberFromAh = ExcelImportSupport.readHyperlinksByHeaderKey(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号");
|
||||
urlByCaseNumberFromAh.forEach(urlByCaseNumber::putIfAbsent);
|
||||
// Some upstream sources use "暗号" as the case number header.
|
||||
Map<String, String> urlByCaseNumberFromAh2 = ExcelImportSupport.readHyperlinksByHeaderKey(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号");
|
||||
urlByCaseNumberFromAh2.forEach(urlByCaseNumber::putIfAbsent);
|
||||
// 有些源文件会单独提供“url/网址/链接”等列(可能是纯文本也可能是超链接)
|
||||
Map<String, String> urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, caseNumberHeader, "url");
|
||||
@@ -230,6 +265,40 @@ public class CreditGqdjController extends BaseController {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, caseNumberHeader, "链接");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
// Try again with "案号" as the key column name.
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "url");
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "URL");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "网址");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "链接");
|
||||
}
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
// Try again with "暗号" as the key column name.
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "url");
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "URL");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "网址");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "链接");
|
||||
}
|
||||
}
|
||||
|
||||
final int chunkSize = 500;
|
||||
final int mpBatchSize = 500;
|
||||
@@ -399,8 +468,16 @@ public class CreditGqdjController extends BaseController {
|
||||
return fail("未读取到数据,请确认文件中存在“历史股权冻结”选项卡且表头与示例格式一致", null);
|
||||
}
|
||||
|
||||
ExcelImportSupport.ImportResult<CreditGqdjImportParam> importResult = ExcelImportSupport.read(
|
||||
file, CreditGqdjImportParam.class, this::isEmptyImportRow, sheetIndex);
|
||||
ExcelImportSupport.ImportResult<CreditGqdjImportParam> importResult = ExcelImportSupport.readBest(
|
||||
file,
|
||||
CreditGqdjImportParam.class,
|
||||
this::isEmptyImportRow,
|
||||
p -> p != null
|
||||
&& (!ImportHelper.isBlank(p.getCaseNumber())
|
||||
|| !ImportHelper.isBlank(p.getCaseNumber2())
|
||||
|| !ImportHelper.isBlank(p.getCaseNumber3())),
|
||||
sheetIndex
|
||||
);
|
||||
List<CreditGqdjImportParam> list = importResult.getData();
|
||||
int usedTitleRows = importResult.getTitleRows();
|
||||
int usedHeadRows = importResult.getHeadRows();
|
||||
@@ -417,6 +494,12 @@ public class CreditGqdjController extends BaseController {
|
||||
String caseNumberHeader = "执行通知文书号";
|
||||
Map<String, String> urlByCaseNumber = ExcelImportSupport.readHyperlinksByHeaderKey(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, caseNumberHeader);
|
||||
Map<String, String> urlByCaseNumberFromAh = ExcelImportSupport.readHyperlinksByHeaderKey(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号");
|
||||
urlByCaseNumberFromAh.forEach(urlByCaseNumber::putIfAbsent);
|
||||
Map<String, String> urlByCaseNumberFromAh2 = ExcelImportSupport.readHyperlinksByHeaderKey(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号");
|
||||
urlByCaseNumberFromAh2.forEach(urlByCaseNumber::putIfAbsent);
|
||||
Map<String, String> urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, caseNumberHeader, "url");
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
@@ -431,6 +514,38 @@ public class CreditGqdjController extends BaseController {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, caseNumberHeader, "链接");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "url");
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "URL");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "网址");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "案号", "链接");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "url");
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "URL");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "网址");
|
||||
}
|
||||
if (urlByCaseNumberFromUrlCol.isEmpty()) {
|
||||
urlByCaseNumberFromUrlCol = ExcelImportSupport.readKeyValueByHeaders(
|
||||
file, usedSheetIndex, usedTitleRows, usedHeadRows, "暗号", "链接");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LinkedHashMap<String, CreditGqdj> latestByCaseNumber = new LinkedHashMap<>();
|
||||
LinkedHashMap<String, Integer> latestRowByCaseNumber = new LinkedHashMap<>();
|
||||
@@ -635,23 +750,52 @@ public class CreditGqdjController extends BaseController {
|
||||
if (param == null) {
|
||||
return true;
|
||||
}
|
||||
// Some upstream files use alternative headers that map to caseNumber2.
|
||||
return ImportHelper.isBlank(param.getCaseNumber()) && ImportHelper.isBlank(param.getCaseNumber2());
|
||||
// Don't over-filter here: if some columns are mapped but case number header differs,
|
||||
// we still want to read the row and report "案号不能为空" instead of "未读取到数据".
|
||||
return ImportHelper.isBlank(param.getCaseNumber())
|
||||
&& ImportHelper.isBlank(param.getCaseNumber2())
|
||||
&& ImportHelper.isBlank(param.getCaseNumber3())
|
||||
&& ImportHelper.isBlank(param.getAppellee())
|
||||
&& ImportHelper.isBlank(param.getAppellee2())
|
||||
&& ImportHelper.isBlank(param.getPlaintiffAppellant())
|
||||
&& ImportHelper.isBlank(param.getPlaintiffAppellant2())
|
||||
&& ImportHelper.isBlank(param.getInvolvedAmount())
|
||||
&& ImportHelper.isBlank(param.getCourtName())
|
||||
&& ImportHelper.isBlank(param.getDataType())
|
||||
&& ImportHelper.isBlank(param.getDataStatus())
|
||||
&& ImportHelper.isBlank(param.getDataStatus2())
|
||||
&& ImportHelper.isBlank(param.getFreezeDateStart())
|
||||
&& ImportHelper.isBlank(param.getFreezeDateEnd())
|
||||
&& ImportHelper.isBlank(param.getFreezeDateStart2())
|
||||
&& ImportHelper.isBlank(param.getFreezeDateEnd2())
|
||||
&& ImportHelper.isBlank(param.getPublicDate());
|
||||
}
|
||||
|
||||
private CreditGqdj convertImportParamToEntity(CreditGqdjImportParam param) {
|
||||
CreditGqdj entity = new CreditGqdj();
|
||||
|
||||
// Template compatibility: some sources use alternate headers for the same columns.
|
||||
String appellee = !ImportHelper.isBlank(param.getAppellee()) ? param.getAppellee() : param.getAppellee2();
|
||||
String plaintiffAppellant = !ImportHelper.isBlank(param.getPlaintiffAppellant())
|
||||
? param.getPlaintiffAppellant()
|
||||
: param.getPlaintiffAppellant2();
|
||||
|
||||
if (!ImportHelper.isBlank(param.getCaseNumber2())) {
|
||||
entity.setCaseNumber(param.getCaseNumber2());
|
||||
} else if (!ImportHelper.isBlank(param.getCaseNumber3())) {
|
||||
entity.setCaseNumber(param.getCaseNumber3());
|
||||
} else {
|
||||
entity.setCaseNumber(param.getCaseNumber());
|
||||
}
|
||||
entity.setAppellee(param.getAppellee());
|
||||
entity.setPlaintiffAppellant(param.getPlaintiffAppellant());
|
||||
entity.setAppellee(appellee);
|
||||
entity.setPlaintiffAppellant(plaintiffAppellant);
|
||||
entity.setInvolvedAmount(param.getInvolvedAmount());
|
||||
entity.setCourtName(param.getCourtName());
|
||||
entity.setDataStatus(param.getDataStatus());
|
||||
if (!ImportHelper.isBlank(param.getDataStatus2())) {
|
||||
entity.setDataStatus(param.getDataStatus2());
|
||||
} else {
|
||||
entity.setDataStatus(param.getDataStatus());
|
||||
}
|
||||
entity.setDataType("股权冻结");
|
||||
entity.setPublicDate(param.getPublicDate());
|
||||
if (!ImportHelper.isBlank(param.getFreezeDateStart2())) {
|
||||
|
||||
@@ -391,12 +391,24 @@ public class CreditMediationController extends BaseController {
|
||||
private CreditMediation convertImportParamToEntity(CreditMediationImportParam param) {
|
||||
CreditMediation entity = new CreditMediation();
|
||||
|
||||
entity.setOtherPartiesThirdParty(param.getOtherPartiesThirdParty());
|
||||
entity.setOccurrenceTime(param.getOccurrenceTime());
|
||||
// Template compatibility: prefer new columns ("发生时间"/"其他当事人/第三人"), fallback to legacy ones ("立案日期"/"当事人").
|
||||
String occurrenceTime = !ImportHelper.isBlank(param.getOccurrenceTime2())
|
||||
? param.getOccurrenceTime2()
|
||||
: param.getOccurrenceTime();
|
||||
String otherPartiesThirdParty = !ImportHelper.isBlank(param.getOtherPartiesThirdParty2())
|
||||
? param.getOtherPartiesThirdParty2()
|
||||
: param.getOtherPartiesThirdParty();
|
||||
|
||||
entity.setOccurrenceTime(occurrenceTime);
|
||||
entity.setOtherPartiesThirdParty(otherPartiesThirdParty);
|
||||
entity.setCaseNumber(param.getCaseNumber());
|
||||
entity.setCauseOfAction(param.getCauseOfAction());
|
||||
entity.setCourtName(param.getCourtName());
|
||||
entity.setComments(param.getComments());
|
||||
entity.setPlaintiffAppellant(param.getPlaintiffAppellant());
|
||||
entity.setAppellee(param.getAppellee());
|
||||
entity.setInvolvedAmount(param.getInvolvedAmount());
|
||||
entity.setDataStatus(param.getDataStatus());
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
@@ -114,15 +114,55 @@ public class ExcelImportSupport {
|
||||
int usedTitleRows = 0;
|
||||
int usedHeadRows = 0;
|
||||
int[][] tryConfigs = new int[][]{{1, 1}, {0, 1}, {2, 1}, {3, 1}, {0, 2}, {0, 3}, {0, 4}};
|
||||
Exception lastFailure = null;
|
||||
boolean anyImported = false;
|
||||
|
||||
for (int[] config : tryConfigs) {
|
||||
list = filterEmptyRows(importSheet(file, clazz, config[0], config[1], sheetIndex), emptyRowPredicate);
|
||||
try {
|
||||
list = filterEmptyRows(importSheet(file, clazz, config[0], config[1], sheetIndex), emptyRowPredicate);
|
||||
anyImported = true;
|
||||
} catch (Exception e) {
|
||||
// Some source files can trigger easypoi/POI runtime exceptions for certain title/head row combinations.
|
||||
// Keep trying other configurations instead of failing the whole import.
|
||||
lastFailure = e;
|
||||
continue;
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
usedTitleRows = config[0];
|
||||
usedHeadRows = config[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback for upstream files with extra banner/title rows or wider multi-row headers.
|
||||
// Keep the default fast path above for common templates.
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
final int maxTitleRows = 10;
|
||||
final int maxHeadRows = 6;
|
||||
outer:
|
||||
for (int titleRows = 0; titleRows <= maxTitleRows; titleRows++) {
|
||||
for (int headRows = 1; headRows <= maxHeadRows; headRows++) {
|
||||
try {
|
||||
list = filterEmptyRows(importSheet(file, clazz, titleRows, headRows, sheetIndex), emptyRowPredicate);
|
||||
anyImported = true;
|
||||
} catch (Exception e) {
|
||||
lastFailure = e;
|
||||
continue;
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
usedTitleRows = titleRows;
|
||||
usedHeadRows = headRows;
|
||||
break outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (list == null) {
|
||||
if (!anyImported && lastFailure != null) {
|
||||
throw lastFailure;
|
||||
}
|
||||
list = Collections.emptyList();
|
||||
}
|
||||
return new ImportResult<>(list, usedTitleRows, usedHeadRows, sheetIndex);
|
||||
}
|
||||
|
||||
@@ -135,11 +175,20 @@ public class ExcelImportSupport {
|
||||
int bestHeadRows = 0;
|
||||
int bestScore = -1;
|
||||
int bestSize = -1;
|
||||
Exception lastFailure = null;
|
||||
boolean anyImported = false;
|
||||
|
||||
int[][] tryConfigs = new int[][]{{1, 1}, {0, 1}, {2, 1}, {3, 1}, {0, 2}, {0, 3}, {0, 4}, {1, 2}, {1, 3}, {1, 4}, {2, 2}, {2, 3}, {2, 4}, {3, 2}, {3, 3}, {3, 4}};
|
||||
|
||||
for (int[] config : tryConfigs) {
|
||||
List<T> list = filterEmptyRows(importSheet(file, clazz, config[0], config[1], sheetIndex), emptyRowPredicate);
|
||||
List<T> list;
|
||||
try {
|
||||
list = filterEmptyRows(importSheet(file, clazz, config[0], config[1], sheetIndex), emptyRowPredicate);
|
||||
anyImported = true;
|
||||
} catch (Exception e) {
|
||||
lastFailure = e;
|
||||
continue;
|
||||
}
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
continue;
|
||||
}
|
||||
@@ -163,10 +212,52 @@ public class ExcelImportSupport {
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback scan: broaden the search space for messy source files (extra title rows, multi-row headers).
|
||||
if (bestList == null) {
|
||||
final int maxTitleRows = 10;
|
||||
final int maxHeadRows = 6;
|
||||
for (int titleRows = 0; titleRows <= maxTitleRows; titleRows++) {
|
||||
for (int headRows = 1; headRows <= maxHeadRows; headRows++) {
|
||||
List<T> list;
|
||||
try {
|
||||
list = filterEmptyRows(importSheet(file, clazz, titleRows, headRows, sheetIndex), emptyRowPredicate);
|
||||
anyImported = true;
|
||||
} catch (Exception e) {
|
||||
lastFailure = e;
|
||||
continue;
|
||||
}
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int score = 0;
|
||||
if (scoreRowPredicate != null) {
|
||||
for (T row : list) {
|
||||
if (scoreRowPredicate.test(row)) {
|
||||
score++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int size = list.size();
|
||||
if (score > bestScore || (score == bestScore && size > bestSize)) {
|
||||
bestList = list;
|
||||
bestTitleRows = titleRows;
|
||||
bestHeadRows = headRows;
|
||||
bestScore = score;
|
||||
bestSize = size;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bestList != null) {
|
||||
return new ImportResult<>(bestList, bestTitleRows, bestHeadRows, sheetIndex);
|
||||
}
|
||||
|
||||
if (!anyImported && lastFailure != null) {
|
||||
throw lastFailure;
|
||||
}
|
||||
return read(file, clazz, emptyRowPredicate, sheetIndex);
|
||||
}
|
||||
|
||||
|
||||
@@ -107,4 +107,8 @@ public class CreditMediation implements Serializable {
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@Schema(description = "发生时间")
|
||||
@TableField(exist = false)
|
||||
private String occurrenceTime2;
|
||||
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.occurrenceTime != null">
|
||||
AND a.occurrence_time LIKE CONCAT('%', #{param.occurrenceTime}, '%')
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.otherPartiesThirdParty != null">
|
||||
AND a.other_parties_third_party LIKE CONCAT('%', #{param.otherPartiesThirdParty}, '%')
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.otherPartiesThirdParty != null">
|
||||
AND a.other_parties_third_party LIKE CONCAT('%', #{param.otherPartiesThirdParty}, '%')
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.otherPartiesThirdParty != null">
|
||||
AND a.other_parties_third_party LIKE CONCAT('%', #{param.otherPartiesThirdParty}, '%')
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.occurrenceTime != null">
|
||||
AND a.occurrence_time LIKE CONCAT('%', #{param.occurrenceTime}, '%')
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.caseNumber != null">
|
||||
AND a.case_number LIKE CONCAT('%', #{param.caseNumber}, '%')
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.otherPartiesThirdParty != null">
|
||||
AND a.other_parties_third_party LIKE CONCAT('%', #{param.otherPartiesThirdParty}, '%')
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
AND a.plaintiff_appellant LIKE CONCAT('%', #{param.plaintiffAppellant}, '%')
|
||||
</if>
|
||||
<if test="param.appellee != null">
|
||||
AND a.appellee LIKE CONCAT('%', #{param.defendant appellee}, '%')
|
||||
AND a.appellee LIKE CONCAT('%', #{param.appellee}, '%')
|
||||
</if>
|
||||
<if test="param.otherPartiesThirdParty != null">
|
||||
AND a.other_parties_third_party LIKE CONCAT('%', #{param.otherPartiesThirdParty}, '%')
|
||||
|
||||
@@ -16,15 +16,28 @@ public class CreditGqdjImportParam implements Serializable {
|
||||
@Excel(name = "执行通知文书号")
|
||||
private String caseNumber;
|
||||
|
||||
@Excel(name = "暗号")
|
||||
// Some upstream sources use "案号" instead of "执行通知文书号".
|
||||
@Excel(name = "案号")
|
||||
private String caseNumber2;
|
||||
|
||||
// Some upstream sources use "暗号" as the case number column.
|
||||
@Excel(name = "暗号")
|
||||
private String caseNumber3;
|
||||
|
||||
@Excel(name = "被执行人")
|
||||
private String appellee;
|
||||
|
||||
// Some upstream sources use "被执行人名称" as the executed person column.
|
||||
@Excel(name = "被执行人名称")
|
||||
private String appellee2;
|
||||
|
||||
@Excel(name = "冻结股权标的企业")
|
||||
private String plaintiffAppellant;
|
||||
|
||||
// Some upstream sources use "冻结股权标的企业名称" as the target company column.
|
||||
@Excel(name = "冻结股权标的企业名称")
|
||||
private String plaintiffAppellant2;
|
||||
|
||||
@Excel(name = "被执行人持有股权、其他投资权益数额")
|
||||
private String involvedAmount;
|
||||
|
||||
@@ -37,6 +50,10 @@ public class CreditGqdjImportParam implements Serializable {
|
||||
@Excel(name = "状态")
|
||||
private String dataStatus;
|
||||
|
||||
// Some upstream sources use "数据状态" as the status column.
|
||||
@Excel(name = "数据状态")
|
||||
private String dataStatus2;
|
||||
|
||||
@Excel(name = "冻结日期自")
|
||||
private String freezeDateStart;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gxwebsoft.credit.param;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -30,4 +31,21 @@ public class CreditMediationImportParam implements Serializable {
|
||||
@Excel(name = "备注")
|
||||
private String comments;
|
||||
|
||||
@Excel(name = "原告/上诉人")
|
||||
private String plaintiffAppellant;
|
||||
|
||||
@Excel(name = "被告/被上诉人")
|
||||
private String appellee;
|
||||
|
||||
@Excel(name = "数据状态")
|
||||
private String dataStatus;
|
||||
|
||||
@Excel(name = "涉案金额")
|
||||
private String involvedAmount;
|
||||
|
||||
@Excel(name = "发生时间")
|
||||
private String occurrenceTime2;
|
||||
|
||||
@Excel(name = "其他当事人/第三人")
|
||||
private String otherPartiesThirdParty2;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user