|
@ -130,7 +130,7 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
// 不是查询历史报告,则展示最新一条数据 |
|
|
// 不是查询历史报告,则展示最新一条数据 |
|
|
lqw.isNull(AnalysisReport::getHistory); |
|
|
lqw.isNull(AnalysisReport::getHistory); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
lqw.orderByDesc(AnalysisReport::getCreateTime); |
|
|
return lqw; |
|
|
return lqw; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -215,6 +215,7 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
|
|
|
|
|
|
if (null != analysisReport) { |
|
|
if (null != analysisReport) { |
|
|
analysisReport.setHistory("1"); |
|
|
analysisReport.setHistory("1"); |
|
|
|
|
|
analysisReport.setUpdateTime(new Date()); |
|
|
baseMapper.updateById(analysisReport); |
|
|
baseMapper.updateById(analysisReport); |
|
|
} |
|
|
} |
|
|
boolean b = baseMapper.insert(add) > 0; |
|
|
boolean b = baseMapper.insert(add) > 0; |
|
@ -234,18 +235,27 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private File generateWordFileByTemplate(JSONObject esData, AnalysisReportVo vo, String caseId) throws Exception { |
|
|
private File generateWordFileByTemplate(JSONObject esData, AnalysisReportVo vo, String caseId) throws Exception { |
|
|
|
|
|
List<BankStatement> bsList = new ArrayList<>(); |
|
|
|
|
|
if (esData.containsKey("dc_bank_statement")) { |
|
|
|
|
|
bsList = esData.getBeanList("dc_bank_statement", BankStatement.class); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 一、基础信息 |
|
|
// 一、基础信息 |
|
|
setValueByPublicFamily(esData, vo); |
|
|
setValueByPublicFamily(esData, vo); |
|
|
setPhoneByBankStatement(esData, vo); |
|
|
|
|
|
|
|
|
if(CollectionUtil.isNotEmpty(bsList)){ |
|
|
|
|
|
|
|
|
|
|
|
setPhoneByBankStatement(bsList, vo); |
|
|
|
|
|
|
|
|
// 二、账户总体情况 |
|
|
// 二、账户总体情况 |
|
|
handleOverallAccountInfo(esData, vo); |
|
|
|
|
|
|
|
|
handleOverallAccountInfo(bsList, vo); |
|
|
|
|
|
|
|
|
// 三、涉嫌关联交易 |
|
|
// 三、涉嫌关联交易 |
|
|
handleConnectedTransaction(esData, vo, caseId); |
|
|
|
|
|
|
|
|
handleConnectedTransaction(bsList, vo, caseId); |
|
|
|
|
|
|
|
|
// 四、其他可疑交易 |
|
|
// 四、其他可疑交易 |
|
|
handleSuspiciousTransactions(esData, vo); |
|
|
|
|
|
|
|
|
handleSuspiciousTransactions(bsList, vo); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 五、可疑资金来源及去向 |
|
|
// 五、可疑资金来源及去向 |
|
|
// 六、存取现情况 |
|
|
// 六、存取现情况 |
|
@ -530,10 +540,7 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
/** |
|
|
/** |
|
|
* 可疑交易 |
|
|
* 可疑交易 |
|
|
*/ |
|
|
*/ |
|
|
private void handleSuspiciousTransactions(JSONObject esData, AnalysisReportVo vo) { |
|
|
|
|
|
if (!esData.containsKey("dc_bank_statement")) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private void handleSuspiciousTransactions(List<BankStatement> bsList, AnalysisReportVo vo) { |
|
|
|
|
|
|
|
|
// 交易笔数 |
|
|
// 交易笔数 |
|
|
Integer transCount = vo.getTransCount(); |
|
|
Integer transCount = vo.getTransCount(); |
|
@ -541,7 +548,6 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
|
|
|
|
|
|
// 筛选某人作为交易对手的流水数据,其中有交易时间,以及交易金额,进为转入金额,出为转出金额,获取交易备注 |
|
|
// 筛选某人作为交易对手的流水数据,其中有交易时间,以及交易金额,进为转入金额,出为转出金额,获取交易备注 |
|
|
String name = vo.getName(); |
|
|
String name = vo.getName(); |
|
|
String idCard = vo.getIdCard(); |
|
|
|
|
|
|
|
|
|
|
|
List<AnalysisReportVo.ConnectedTransItem> transItems = vo.getTransItems(); // 涉嫌关联交易 |
|
|
List<AnalysisReportVo.ConnectedTransItem> transItems = vo.getTransItems(); // 涉嫌关联交易 |
|
|
Set<String> nameSet = transItems.stream() |
|
|
Set<String> nameSet = transItems.stream() |
|
@ -552,9 +558,12 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
// 分析theList |
|
|
// 分析theList |
|
|
Map<String, List<BankStatement>> counterpartyBSMap = new HashMap<>(); |
|
|
Map<String, List<BankStatement>> counterpartyBSMap = new HashMap<>(); |
|
|
// 可疑交易 跟 涉嫌关联交易 不重合 |
|
|
// 可疑交易 跟 涉嫌关联交易 不重合 |
|
|
List<BankStatement> bsList = esData.getBeanList("dc_bank_statement", BankStatement.class); |
|
|
|
|
|
|
|
|
|
|
|
for (BankStatement bs : bsList) { |
|
|
for (BankStatement bs : bsList) { |
|
|
String counterpartyName = bs.getCounterpartyName(); |
|
|
String counterpartyName = bs.getCounterpartyName(); |
|
|
|
|
|
if (StringUtils.isEmpty(counterpartyName)) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
if (StrUtil.isNotEmpty(counterpartyName)) { |
|
|
if (StrUtil.isNotEmpty(counterpartyName)) { |
|
|
if(filterByCounterpartyName(counterpartyName,1)){ |
|
|
if(filterByCounterpartyName(counterpartyName,1)){ |
|
|
continue; |
|
|
continue; |
|
@ -568,30 +577,10 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
if (StringUtils.isNotEmpty(counterpartyName) && counterpartyName.equals(vo.getName())) { |
|
|
if (StringUtils.isNotEmpty(counterpartyName) && counterpartyName.equals(vo.getName())) { |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
if(StrUtil.isEmpty(idCard)){ |
|
|
|
|
|
if (Objects.equals(bs.getCardHolderName().trim(), name) |
|
|
if (Objects.equals(bs.getCardHolderName().trim(), name) |
|
|
&& !nameSet.contains(bs.getCounterpartyName().trim())){ |
|
|
&& !nameSet.contains(bs.getCounterpartyName().trim())){ |
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(counterpartyName)) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
List<BankStatement> list = counterpartyBSMap.getOrDefault(counterpartyName, null); |
|
|
|
|
|
if (list == null) { |
|
|
|
|
|
counterpartyBSMap.put(counterpartyName, new ArrayList<>()); |
|
|
|
|
|
} |
|
|
|
|
|
counterpartyBSMap.get(counterpartyName).add(bs); |
|
|
|
|
|
} |
|
|
|
|
|
}else { |
|
|
|
|
|
if (StrUtil.isBlank(bs.getIdCardNo())) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
if (Objects.equals(bs.getCardHolderName().trim(), name) |
|
|
|
|
|
&& Objects.equals(bs.getIdCardNo().trim(), idCard) |
|
|
|
|
|
&& (StrUtil.isNotBlank(bs.getCounterpartyName()) |
|
|
|
|
|
&& !nameSet.contains(bs.getCounterpartyName().trim()))) { |
|
|
|
|
|
if (StringUtils.isEmpty(counterpartyName)) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<BankStatement> list = counterpartyBSMap.getOrDefault(counterpartyName, null); |
|
|
List<BankStatement> list = counterpartyBSMap.getOrDefault(counterpartyName, null); |
|
|
if (list == null) { |
|
|
if (list == null) { |
|
|
counterpartyBSMap.put(counterpartyName, new ArrayList<>()); |
|
|
counterpartyBSMap.put(counterpartyName, new ArrayList<>()); |
|
@ -600,9 +589,6 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<AnalysisReportVo.ConnectedTransItem> rst = new ArrayList<>(); |
|
|
List<AnalysisReportVo.ConnectedTransItem> rst = new ArrayList<>(); |
|
|
|
|
|
|
|
|
//同时满足两个条件的数据会重复 |
|
|
//同时满足两个条件的数据会重复 |
|
@ -1115,6 +1101,7 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
String tpCardHolderName = tpEntry.getKey(); |
|
|
String tpCardHolderName = tpEntry.getKey(); |
|
|
|
|
|
|
|
|
List<BankStatement> bsList = tpEntry.getValue(); |
|
|
List<BankStatement> bsList = tpEntry.getValue(); |
|
|
|
|
|
try { |
|
|
Set<String> tpCounterpartyAccountSet = bsList.stream().filter(item -> StrUtil.isNotEmpty(item.getCounterpartyAccount())).map(BankStatement::getCounterpartyAccount).collect(Collectors.toSet()); |
|
|
Set<String> tpCounterpartyAccountSet = bsList.stream().filter(item -> StrUtil.isNotEmpty(item.getCounterpartyAccount())).map(BankStatement::getCounterpartyAccount).collect(Collectors.toSet()); |
|
|
Set<String> tpCounterpartyNameSet = bsList.stream().filter(item -> StrUtil.isNotEmpty(item.getCounterpartyName())).map(BankStatement::getCounterpartyName).collect(Collectors.toSet()); |
|
|
Set<String> tpCounterpartyNameSet = bsList.stream().filter(item -> StrUtil.isNotEmpty(item.getCounterpartyName())).map(BankStatement::getCounterpartyName).collect(Collectors.toSet()); |
|
|
|
|
|
|
|
@ -1133,6 +1120,10 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
connectedTransactionCommonMethod(tpMap,counterpartyName,indirectItem,counterpartyNameMainList); |
|
|
connectedTransactionCommonMethod(tpMap,counterpartyName,indirectItem,counterpartyNameMainList); |
|
|
rst.add(indirectItem); |
|
|
rst.add(indirectItem); |
|
|
} |
|
|
} |
|
|
|
|
|
}catch (Exception e){ |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -1399,15 +1390,13 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
/** |
|
|
/** |
|
|
* 涉嫌关联交易 |
|
|
* 涉嫌关联交易 |
|
|
*/ |
|
|
*/ |
|
|
private void handleConnectedTransaction(JSONObject esData, AnalysisReportVo vo, String caseId) { |
|
|
|
|
|
if (!esData.containsKey("dc_bank_statement")) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private void handleConnectedTransaction(List<BankStatement> mainBsList, AnalysisReportVo vo, String caseId) { |
|
|
|
|
|
|
|
|
String name = vo.getName(); |
|
|
String name = vo.getName(); |
|
|
if(StrUtil.isEmpty(name)){ |
|
|
if(StrUtil.isEmpty(name)){ |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
List<BankStatement> mainBsList = esData.getBeanList("dc_bank_statement", BankStatement.class); |
|
|
|
|
|
|
|
|
|
|
|
List<AnalysisReportVo.ConnectedTransItem> rst = null; |
|
|
List<AnalysisReportVo.ConnectedTransItem> rst = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1521,13 +1510,7 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
/** |
|
|
/** |
|
|
* 账户总体情况 |
|
|
* 账户总体情况 |
|
|
*/ |
|
|
*/ |
|
|
private void handleOverallAccountInfo(JSONObject esData, AnalysisReportVo vo) { |
|
|
|
|
|
if (!esData.containsKey("dc_bank_statement")) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 分析流水 |
|
|
|
|
|
List<BankStatement> bsList = esData.getBeanList("dc_bank_statement", BankStatement.class); |
|
|
|
|
|
|
|
|
private void handleOverallAccountInfo(List<BankStatement> bsList, AnalysisReportVo vo) { |
|
|
|
|
|
|
|
|
Map<String, List<BankStatement>> groupByCard = bsList.stream().filter(i ->StrUtil.isNotEmpty(i.getCardNumber())).collect(Collectors.groupingBy(BankStatement::getCardNumber)); |
|
|
Map<String, List<BankStatement>> groupByCard = bsList.stream().filter(i ->StrUtil.isNotEmpty(i.getCardNumber())).collect(Collectors.groupingBy(BankStatement::getCardNumber)); |
|
|
|
|
|
|
|
@ -1741,13 +1724,9 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void setPhoneByBankStatement(JSONObject esData, AnalysisReportVo vo) { |
|
|
|
|
|
if (!esData.containsKey("dc_bank_statement")) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
List<BankStatement> list = esData.getBeanList("dc_bank_statement", BankStatement.class); |
|
|
|
|
|
|
|
|
private void setPhoneByBankStatement(List<BankStatement> bsList, AnalysisReportVo vo) { |
|
|
Set<String> phoneSet = new HashSet<>(); |
|
|
Set<String> phoneSet = new HashSet<>(); |
|
|
for (BankStatement p : list) { |
|
|
|
|
|
|
|
|
for (BankStatement p : bsList) { |
|
|
if (!(StrUtil.isNotBlank(p.getCardHolderName()) && StrUtil.isNotBlank(p.getIdCardNo()))) { |
|
|
if (!(StrUtil.isNotBlank(p.getCardHolderName()) && StrUtil.isNotBlank(p.getIdCardNo()))) { |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|