|
|
@@ -793,6 +793,17 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
return resultList;
|
|
|
}
|
|
|
|
|
|
+ // 查询当前公司下所有的子公司
|
|
|
+ if (StrUtil.isNotBlank(settlementReportQueryVo.getCompanyId())){
|
|
|
+ // 将全量数据按照 parentId 进行分组,key 是 parentId,value 是该 parentId 下的所有公司列表
|
|
|
+ Map<String, List<EsmInsCompany>> parentGroupMap = companyMap.values().stream()
|
|
|
+ .filter(c -> c.getParentId() != null)
|
|
|
+ .collect(Collectors.groupingBy(EsmInsCompany::getParentId));
|
|
|
+ List<String> allChildIdspOtimized = getAllChildIdsOptimized(settlementReportQueryVo.getCompanyId(), parentGroupMap);
|
|
|
+ allChildIdspOtimized.add(settlementReportQueryVo.getCompanyId());
|
|
|
+ settlementReportQueryVo.setCompanyIdList(allChildIdspOtimized);
|
|
|
+ }
|
|
|
+
|
|
|
// 2. 查询跟单主数据并分组聚合
|
|
|
List<FollowCompanyFeeVO> originalFollowList = insFeeFollowOrderMapper.selectFollowCompanySettlementReport(settlementReportQueryVo);
|
|
|
if (CollUtil.isNotEmpty(originalFollowList)) {
|
|
|
@@ -928,6 +939,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
.map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
vo.setTotalSettlementAmount(totalSettlementAmount);
|
|
|
+
|
|
|
+ // 回款差额
|
|
|
+ BigDecimal totalPaymentDifference = settlementIds.stream()
|
|
|
+ .map(settlementMap::get)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(InsPlyIncomeInvoiceSettlement::getSettlementPaymentDifference)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ vo.setTotalPaymentDifference(totalPaymentDifference);
|
|
|
+
|
|
|
// 设置未结算总金额,获取所有ins_fee_follow_order数据,只有所以的都结算了,才能算已结算
|
|
|
List<InsFeeFollowOrder> insFeeFollowOrderList = followOrderMap.values().stream().filter(insFeeFollowOrder -> insFeeFollowOrder.getYear().toString().equals(year) && insFeeFollowOrder.getMonth().toString().equals(month) && insFeeFollowOrder.getPartnerCompanyId().equals(partnerCompanyId) && insFeeFollowOrder.getInvoiceType().equals(invoiceType)).toList();
|
|
|
if (insFeeFollowOrderList.size() == insFeeFollowOrderList.stream().filter(insFeeFollowOrder -> SettlementIdentificationEnum.SETTLED.getCode().equals(insFeeFollowOrder.getSettlementIdentification())).count()){
|
|
|
@@ -991,7 +1011,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
private List<InsPlyIncomeDto> queryFollowIncomeData(SettlementReportQueryVo queryVo) {
|
|
|
QueryFollowIncomeVo incomeVo = QueryFollowIncomeVo.builder()
|
|
|
.systemCode(baseController.getSystemCode())
|
|
|
- .companyId(queryVo.getCompanyId())
|
|
|
+ .companyIdList(queryVo.getCompanyIdList())
|
|
|
.startTime(queryVo.getStartTime()).endTime(queryVo.getEndTime())
|
|
|
.signingStartTime(queryVo.getSigningStartTime()).signingEndTime(queryVo.getSigningEndTime())
|
|
|
.build();
|
|
|
@@ -6514,5 +6534,18 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
return date.atTime(23, 59, 59, 999999999);
|
|
|
}
|
|
|
+
|
|
|
+ // 递归获取所有子孙ID
|
|
|
+ private List<String> getAllChildIdsOptimized(String parentId, Map<String, List<EsmInsCompany>> parentGroupMap) {
|
|
|
+ List<String> result = new ArrayList<>();
|
|
|
+ // 直接通过 parentId 获取子节点列表,无需遍历全量数据
|
|
|
+ List<EsmInsCompany> children = parentGroupMap.getOrDefault(parentId, Collections.emptyList());
|
|
|
+
|
|
|
+ for (EsmInsCompany company : children) {
|
|
|
+ result.add(company.getId());
|
|
|
+ result.addAll(getAllChildIdsOptimized(company.getId(), parentGroupMap));
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|
|
|
|