|
|
@@ -707,19 +707,25 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
/**
|
|
|
* 私有协议-跟单结算记录-结算报表查询
|
|
|
* <p>
|
|
|
- * 该方法用于查询私有协议的跟单结算报表数据,包括以下处理逻辑:
|
|
|
- * 1. 从数据库查询基础结算报表数据
|
|
|
- * 2. 调用保险公司客户端获取所有保险公司信息
|
|
|
- * 3. 如果保险公司数据为空,直接返回原始数据
|
|
|
- * 4. 匹配并填充保险公司名称
|
|
|
- * 5. 计算未结算金额(已开票金额 - 已结算金额)
|
|
|
- * 6. 计算未开票金额(累计应收 - 已开票金额)
|
|
|
+ * 该方法用于查询私有协议下跟单车险的结算报表数据,主要处理逻辑包括:
|
|
|
+ * 1. 查询跟单费用结算报表基础数据
|
|
|
+ * 2. 获取保险公司信息并映射公司名称
|
|
|
+ * 3. 按合作公司ID、年份、月份分组统计结算数据
|
|
|
+ * 4. 计算各项金额指标:总应收、已开票、未开票、已结算、未结算等
|
|
|
+ * 5. 补充收入表中的其他费用应收数据(驾意险相关费用)
|
|
|
* </p>
|
|
|
*
|
|
|
- * @param settlementReportQueryVo 结算报表查询条件对象,包含以下主要查询参数:
|
|
|
- * - companyId: 保险公司ID - contactPerson: 对接人 - contactPersonPhone: 对接人手机号 - startTime/endTime: 创建时间范围 - invoiceStartTime/invoiceEndTime: 开票时间范围 - settlementStartTime/settlementEndTime: 结算时间范围 - status: 结算状态 - invoiceTypes: 开票类型列表(1-手续费, 2-跟单费, 3-驾意险手续费, 4-驾意险跟单费) - agreementType: 协议类型 - invoiceStatus: 开票状态(0-未开票, 1-已开票) - systemCode: 租户代码 - signingStartTime/signingEndTime: 签单时间范围
|
|
|
- * @return List<FollowCompanyFeeVO> 返回跟随公司费用视图对象列表,每个对象包含:
|
|
|
- * - companyName: 保险公司名称(根据partnerCompanyId匹配填充) - companyId: 保险公司ID - contactPerson: 对接人 - contactPersonPhone: 对接人手机号 - partnerCompanyId: 分支保险公司ID - totalInvoiced: 已开票总金额 - totalUnInvoiced: 未开票总金额(计算得出:累计应收 - 已开票金额) - totalSettlementAmount: 已结算总金额 - totalUnSettlementAmount: 未结算总金额(计算得出:已开票金额 - 已结算金额) - totalPaymentDifference: 回款差额 - totalReceivable: 累计应收
|
|
|
+ * @param settlementReportQueryVo 结算报表查询条件对象,包含查询所需的过滤参数(如时间范围、公司ID等)
|
|
|
+ * @return List<FollowCompanyFeeVO> 返回跟单公司费用视图对象列表,每个对象包含:
|
|
|
+ * - partnerCompanyId: 合作公司ID
|
|
|
+ * - companyName: 合作公司名称
|
|
|
+ * - year: 年份
|
|
|
+ * - month: 月份
|
|
|
+ * - totalReceivable: 总应收金额
|
|
|
+ * - totalInvoiced: 已开票总金额
|
|
|
+ * - totalUnInvoiced: 未开票总金额
|
|
|
+ * - totalSettlementAmount: 已结算总金额
|
|
|
+ * - totalUnSettlementAmount: 未结算总金额
|
|
|
*/
|
|
|
@Override
|
|
|
public List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo) {
|
|
|
@@ -732,72 +738,74 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
// 查询所有保险公司,匹配保险公司的id和名称
|
|
|
HttpResult<Map<String, EsmInsCompany>> mapHttpResult = esmInsCompanyClient.queryAllCompanyMap();
|
|
|
Map<String, EsmInsCompany> data = mapHttpResult.getData();
|
|
|
- if (CollUtil.isEmpty(data) || CollUtil.isEmpty(followCompanyFeeVos)){
|
|
|
+ if (CollUtil.isEmpty(data)){
|
|
|
return resultList;
|
|
|
}
|
|
|
|
|
|
- // 根据分支公司分组
|
|
|
- Map<String, List<FollowCompanyFeeVO>> followMap = followCompanyFeeVos.stream().collect(Collectors.groupingBy(follow -> follow.getPartnerCompanyId() + "_" + follow.getYear() + "_" + follow.getMonth()));
|
|
|
- for (Map.Entry<String, List<FollowCompanyFeeVO>> entry : followMap.entrySet()) {
|
|
|
- // key = 合作公司ID
|
|
|
- String key = entry.getKey();
|
|
|
-
|
|
|
- // 分组参数
|
|
|
- String[] arr = key.split("_");
|
|
|
- String partnerCompanyId = arr[0];
|
|
|
- String year = arr[1];
|
|
|
- String month = arr[2];
|
|
|
-
|
|
|
-
|
|
|
- // value = 当前公司下所有VO集合
|
|
|
- List<FollowCompanyFeeVO> voList = entry.getValue();
|
|
|
-
|
|
|
- // 返回值
|
|
|
- FollowCompanyFeeVO followCompanyFeeVO = new FollowCompanyFeeVO();
|
|
|
- followCompanyFeeVO.setPartnerCompanyId(partnerCompanyId);
|
|
|
-
|
|
|
- List<String> followIds = voList.stream().map(FollowCompanyFeeVO::getFollowId).toList();
|
|
|
- List<String> invoiceIds = voList.stream().map(FollowCompanyFeeVO::getInvoiceId).toList();
|
|
|
- List<String> settlementIds = voList.stream().map(FollowCompanyFeeVO::getSettlementId).toList();
|
|
|
-
|
|
|
- // 根据所有followCompanyFeeVos的followId统计出已开票
|
|
|
- LambdaQueryWrapper<InsFeeFollowOrder> insFeeFollowOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- insFeeFollowOrderLambdaQueryWrapper.in(InsFeeFollowOrder::getId, followIds);
|
|
|
- List<InsFeeFollowOrder> insFeeFollowOrders = insFeeFollowOrderMapper.selectList(insFeeFollowOrderLambdaQueryWrapper);
|
|
|
- // 总金额
|
|
|
- InsFeeFollowOrder feeFollowOrder = CollUtil.getFirst(insFeeFollowOrders);
|
|
|
- // 取对账金额
|
|
|
- BigDecimal receivablePremium = feeFollowOrder.getReconciliationAmount();
|
|
|
- followCompanyFeeVO.setTotalReceivable(receivablePremium);
|
|
|
-
|
|
|
- BigDecimal totalInvoiced = insFeeFollowOrders.stream().map(InsFeeFollowOrder::getInvoiced).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
|
|
- // 已开票总金额
|
|
|
- followCompanyFeeVO.setTotalInvoiced(totalInvoiced);
|
|
|
-
|
|
|
- // 未结算金额
|
|
|
- followCompanyFeeVO.setTotalUnInvoiced(receivablePremium.subtract(totalInvoiced));
|
|
|
-
|
|
|
- // 统计结算金额
|
|
|
- LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- insPlyIncomeInvoiceSettlementLambdaQueryWrapper.in(InsPlyIncomeInvoiceSettlement::getId, settlementIds);
|
|
|
- List<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlements = insPlyIncomeInvoiceSettlementMapper.selectList(insPlyIncomeInvoiceSettlementLambdaQueryWrapper);
|
|
|
- BigDecimal totalSettlementAmount = insPlyIncomeInvoiceSettlements.stream().map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
|
|
- // 已结算总金额
|
|
|
- followCompanyFeeVO.setTotalSettlementAmount(totalSettlementAmount);
|
|
|
-
|
|
|
- // 未结算金额
|
|
|
- followCompanyFeeVO.setTotalUnSettlementAmount(totalInvoiced.subtract(totalSettlementAmount));
|
|
|
- followCompanyFeeVO.setCompanyName(null != data.get(partnerCompanyId) ? data.get(partnerCompanyId).getName() : "");
|
|
|
- followCompanyFeeVO.setYear(year);
|
|
|
- followCompanyFeeVO.setMonth(month);
|
|
|
-
|
|
|
- resultList.add(followCompanyFeeVO);
|
|
|
- }
|
|
|
+ if (CollUtil.isNotEmpty(followCompanyFeeVos)){
|
|
|
+ // 根据分支公司分组
|
|
|
+ Map<String, List<FollowCompanyFeeVO>> followMap = followCompanyFeeVos.stream().collect(Collectors.groupingBy(follow -> follow.getPartnerCompanyId() + "_" + follow.getYear() + "_" + follow.getMonth()));
|
|
|
+ for (Map.Entry<String, List<FollowCompanyFeeVO>> entry : followMap.entrySet()) {
|
|
|
+ // key = 合作公司ID
|
|
|
+ String key = entry.getKey();
|
|
|
+
|
|
|
+ // 分组参数
|
|
|
+ String[] arr = key.split("_");
|
|
|
+ String partnerCompanyId = arr[0];
|
|
|
+ String year = arr[1];
|
|
|
+ String month = arr[2];
|
|
|
+
|
|
|
+
|
|
|
+ // value = 当前公司下所有VO集合
|
|
|
+ List<FollowCompanyFeeVO> voList = entry.getValue();
|
|
|
+
|
|
|
+ // 返回值
|
|
|
+ FollowCompanyFeeVO followCompanyFeeVO = new FollowCompanyFeeVO();
|
|
|
+ followCompanyFeeVO.setPartnerCompanyId(partnerCompanyId);
|
|
|
+
|
|
|
+ List<String> followIds = voList.stream().map(FollowCompanyFeeVO::getFollowId).toList();
|
|
|
+ List<String> invoiceIds = voList.stream().map(FollowCompanyFeeVO::getInvoiceId).toList();
|
|
|
+ List<String> settlementIds = voList.stream().map(FollowCompanyFeeVO::getSettlementId).toList();
|
|
|
+
|
|
|
+ // 根据所有followCompanyFeeVos的followId统计出已开票
|
|
|
+ LambdaQueryWrapper<InsFeeFollowOrder> insFeeFollowOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ insFeeFollowOrderLambdaQueryWrapper.in(InsFeeFollowOrder::getId, followIds);
|
|
|
+ List<InsFeeFollowOrder> insFeeFollowOrders = insFeeFollowOrderMapper.selectList(insFeeFollowOrderLambdaQueryWrapper);
|
|
|
+ // 总金额
|
|
|
+ InsFeeFollowOrder feeFollowOrder = CollUtil.getFirst(insFeeFollowOrders);
|
|
|
+ // 取对账金额
|
|
|
+ BigDecimal receivablePremium = feeFollowOrder.getReconciliationAmount();
|
|
|
+ followCompanyFeeVO.setTotalReceivable(receivablePremium);
|
|
|
+
|
|
|
+ BigDecimal totalInvoiced = insFeeFollowOrders.stream().map(InsFeeFollowOrder::getInvoiced).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
|
|
+ // 已开票总金额
|
|
|
+ followCompanyFeeVO.setTotalInvoiced(totalInvoiced);
|
|
|
+
|
|
|
+ // 未结算金额
|
|
|
+ followCompanyFeeVO.setTotalUnInvoiced(receivablePremium.subtract(totalInvoiced));
|
|
|
+
|
|
|
+ // 统计结算金额
|
|
|
+ LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ insPlyIncomeInvoiceSettlementLambdaQueryWrapper.in(InsPlyIncomeInvoiceSettlement::getId, settlementIds);
|
|
|
+ List<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlements = insPlyIncomeInvoiceSettlementMapper.selectList(insPlyIncomeInvoiceSettlementLambdaQueryWrapper);
|
|
|
+ BigDecimal totalSettlementAmount = insPlyIncomeInvoiceSettlements.stream().map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
|
|
+ // 已结算总金额
|
|
|
+ followCompanyFeeVO.setTotalSettlementAmount(totalSettlementAmount);
|
|
|
|
|
|
+ // 未结算金额
|
|
|
+ followCompanyFeeVO.setTotalUnSettlementAmount(totalInvoiced.subtract(totalSettlementAmount));
|
|
|
+ followCompanyFeeVO.setCompanyName(null != data.get(partnerCompanyId) ? data.get(partnerCompanyId).getName() : "");
|
|
|
+ followCompanyFeeVO.setYear(year);
|
|
|
+ followCompanyFeeVO.setMonth(month);
|
|
|
+
|
|
|
+ resultList.add(followCompanyFeeVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// 根据incomes的partnerCompanyId + signYear + signMonth,过滤resultList的partnerCompanyId + year + month,根据过滤后的数据进行partnerCompanyId + signYear + signMonth的分组,然后将过滤后剩余的数据,将入到resultList中,
|
|
|
// 并且设置partnerCompanyId、year、month、totalReceivable为incomes的partnerCompanyId、signYear、signMonth、jq_other_costs_premiums + sy_other_costs_premiums
|
|
|
- List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(null, null, baseController.getSystemCode());
|
|
|
+ QueryFollowIncomeVo queryFollowIncomeVo = new QueryFollowIncomeVo(null, null, baseController.getSystemCode(), settlementReportQueryVo.getCompanyIdList());
|
|
|
+ List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(queryFollowIncomeVo);
|
|
|
if (CollUtil.isNotEmpty(incomes)) {
|
|
|
// 1. 将resultList现有数据构建 key: partnerCompanyId_year_month 映射,方便快速匹配
|
|
|
Map<String, FollowCompanyFeeVO> existVoMap = resultList.stream()
|
|
|
@@ -3700,7 +3708,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
String systemCode = baseController.getUserSystemCode();
|
|
|
|
|
|
// 查询该年份下的所有跟进收入数据,并按合作方公司ID进行分组
|
|
|
- List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(startYear, endYear, systemCode);
|
|
|
+ QueryFollowIncomeVo queryFollowIncomeVo = new QueryFollowIncomeVo(startYear, endYear, systemCode, null);
|
|
|
+ List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(queryFollowIncomeVo);
|
|
|
|
|
|
// ====================== 增加动态条件过滤 ======================
|
|
|
List<InsPlyIncomeDto> filterIncomes = new ArrayList<>();
|