Commit 3dd03e29 by zhangxingmin

push

parent e66789f0
...@@ -82,22 +82,29 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -82,22 +82,29 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
Page<ApiPremiumReconciliationPageResponse> page = new Page<>(request.getPageNo(), request.getPageSize()); Page<ApiPremiumReconciliationPageResponse> page = new Page<>(request.getPageNo(), request.getPageSize());
IPage<ApiPremiumReconciliationPageResponse> iPage = iPremiumReconciliationService.page(page, request); IPage<ApiPremiumReconciliationPageResponse> iPage = iPremiumReconciliationService.page(page, request);
// 如果没有数据,直接返回
if (iPage == null || CollectionUtils.isEmpty(iPage.getRecords())) {
return Result.success(iPage);
}
log.info("开始处理分页数据,共{}条记录", iPage.getRecords().size());
// 获取缴费方式字典数据 // 获取缴费方式字典数据
Map<String, String> paymentMethodDictMap = getPaymentMethodDict(); Map<String, String> paymentMethodDictMap = getPaymentMethodDict();
// 获取所有银行ID,准备翻译银行名称 // 获取所有银行ID,准备翻译银行名称
Set<String> bankBizIdSet = new HashSet<>(); Set<String> bankBizIdSet = new HashSet<>();
//收集返回数据的保费对账记录表唯一业务ID列表 // 收集返回数据的保费对账记录表唯一业务ID列表
List<String> premiumReconciliationBizIdList = new ArrayList<>(); List<String> premiumReconciliationBizIdList = new ArrayList<>();
//收集保单号列表 // 收集保单号列表
List<String> policyNoList = new ArrayList<>(); List<String> policyNoList = new ArrayList<>();
// 收集所有银行ID并翻译缴费方式 // 收集所有银行ID并翻译缴费方式
if (iPage != null && !CollectionUtils.isEmpty(iPage.getRecords())) {
for (ApiPremiumReconciliationPageResponse item : iPage.getRecords()) { for (ApiPremiumReconciliationPageResponse item : iPage.getRecords()) {
//收集返回数据的保费对账记录表唯一业务ID列表 // 收集返回数据的保费对账记录表唯一业务ID列表
premiumReconciliationBizIdList.add(item.getPremiumReconciliationBizId()); premiumReconciliationBizIdList.add(item.getPremiumReconciliationBizId());
policyNoList.add(item.getPolicyNo()); policyNoList.add(item.getPolicyNo());
// 翻译缴费方式 // 翻译缴费方式
if (StringUtils.isNotBlank(item.getPaymentMethod())) { if (StringUtils.isNotBlank(item.getPaymentMethod())) {
String translated = translatePaymentMethod(item.getPaymentMethod(), paymentMethodDictMap); String translated = translatePaymentMethod(item.getPaymentMethod(), paymentMethodDictMap);
...@@ -115,7 +122,8 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -115,7 +122,8 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
} }
} }
} }
}
log.info("收集到{}个对账记录ID,{}个保单号", premiumReconciliationBizIdList.size(), policyNoList.size());
// 翻译银行名称 // 翻译银行名称
if (!bankBizIdSet.isEmpty()) { if (!bankBizIdSet.isEmpty()) {
...@@ -130,12 +138,17 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -130,12 +138,17 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
} }
} }
//汇总统计付款金额和付款币种 // 汇总统计付款金额和付款币种
if (!CollectionUtils.isEmpty(premiumReconciliationBizIdList)) { if (!CollectionUtils.isEmpty(premiumReconciliationBizIdList)) {
//收集返回数据的保费对账记录表唯一业务ID列表查询返回关联的汇款记录列表 log.info("开始汇总统计付款金额,对账记录ID数量: {}", premiumReconciliationBizIdList.size());
// 收集返回数据的保费对账记录表唯一业务ID列表查询返回关联的汇款记录列表
List<ApiPremiumRemittanceDto> apiPremiumRemittanceDtoList = apiPremiumRemittanceService.list(premiumReconciliationBizIdList); List<ApiPremiumRemittanceDto> apiPremiumRemittanceDtoList = apiPremiumRemittanceService.list(premiumReconciliationBizIdList);
//查询保单列表信息 log.info("查询到{}条汇款记录", apiPremiumRemittanceDtoList != null ? apiPremiumRemittanceDtoList.size() : 0);
// 查询保单列表信息
List<Policy> policyList = policyService.queryList(QueryPolicyDto.builder().policyNoList(policyNoList).build()); List<Policy> policyList = policyService.queryList(QueryPolicyDto.builder().policyNoList(policyNoList).build());
log.info("查询到{}条保单记录", policyList != null ? policyList.size() : 0);
// 构建保单号到保单币种的映射 // 构建保单号到保单币种的映射
Map<String, String> policyNoToCurrencyMap = new HashMap<>(); Map<String, String> policyNoToCurrencyMap = new HashMap<>();
...@@ -143,19 +156,16 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -143,19 +156,16 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
for (Policy policy : policyList) { for (Policy policy : policyList) {
if (StringUtils.isNotBlank(policy.getPolicyNo()) && StringUtils.isNotBlank(policy.getCurrency())) { if (StringUtils.isNotBlank(policy.getPolicyNo()) && StringUtils.isNotBlank(policy.getCurrency())) {
policyNoToCurrencyMap.put(policy.getPolicyNo(), policy.getCurrency()); policyNoToCurrencyMap.put(policy.getPolicyNo(), policy.getCurrency());
log.debug("保单 {} 的币种: {}", policy.getPolicyNo(), policy.getCurrency());
} }
} }
} }
// 构建对账记录ID到保单号的映射 // 构建对账记录ID到保单号的映射
Map<String, String> reconciliationBizIdToPolicyNoMap = new HashMap<>(); Map<String, String> reconciliationBizIdToPolicyNoMap = new HashMap<>();
// 构建对账记录ID到响应对象的映射
Map<String, ApiPremiumReconciliationPageResponse> reconciliationMap = new HashMap<>();
if (!CollectionUtils.isEmpty(iPage.getRecords())) {
for (ApiPremiumReconciliationPageResponse item : iPage.getRecords()) { for (ApiPremiumReconciliationPageResponse item : iPage.getRecords()) {
reconciliationBizIdToPolicyNoMap.put(item.getPremiumReconciliationBizId(), item.getPolicyNo()); reconciliationBizIdToPolicyNoMap.put(item.getPremiumReconciliationBizId(), item.getPolicyNo());
reconciliationMap.put(item.getPremiumReconciliationBizId(), item); log.debug("对账记录 {} -> 保单 {}", item.getPremiumReconciliationBizId(), item.getPolicyNo());
}
} }
// 按对账记录ID分组汇款记录 // 按对账记录ID分组汇款记录
...@@ -169,12 +179,17 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -169,12 +179,17 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
reconciliationRemittanceMap reconciliationRemittanceMap
.computeIfAbsent(reconciliationBizId, k -> new ArrayList<>()) .computeIfAbsent(reconciliationBizId, k -> new ArrayList<>())
.add(remittanceDto); .add(remittanceDto);
log.debug("汇款记录: 对账ID={}, 金额={}, 币种={}",
reconciliationBizId, remittanceDto.getPaymentAmount(), remittanceDto.getPaymentCurrency());
} }
} }
} }
log.info("分组后的汇款记录: {}个分组", reconciliationRemittanceMap.size());
// 为每个对账记录计算总付款金额(转换为保单币种) // 为每个对账记录计算总付款金额(转换为保单币种)
Map<String, BigDecimal> totalPaymentAmounts = new HashMap<>(); Map<String, BigDecimal> totalPaymentAmounts = new HashMap<>();
Map<String, String> paymentCurrencies = new HashMap<>();
// 首先收集所有需要转换的请求 // 首先收集所有需要转换的请求
List<ApiExchangeRateConvertRequest> convertRequests = new ArrayList<>(); List<ApiExchangeRateConvertRequest> convertRequests = new ArrayList<>();
...@@ -196,20 +211,29 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -196,20 +211,29 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
continue; continue;
} }
log.info("开始处理对账记录: {}, 保单: {}, 保单币种: {}, 汇款记录数: {}",
reconciliationBizId, policyNo, policyCurrency, remittanceDtos.size());
// 初始化总金额 // 初始化总金额
BigDecimal totalAmount = BigDecimal.ZERO; BigDecimal totalAmount = BigDecimal.ZERO;
// 首先处理相同币种的汇款记录 // 首先处理相同币种的汇款记录
int sameCurrencyCount = 0;
for (ApiPremiumRemittanceDto remittanceDto : remittanceDtos) { for (ApiPremiumRemittanceDto remittanceDto : remittanceDtos) {
String remittanceCurrency = remittanceDto.getPaymentCurrency(); String remittanceCurrency = remittanceDto.getPaymentCurrency();
BigDecimal amount = remittanceDto.getPaymentAmount(); BigDecimal amount = remittanceDto.getPaymentAmount();
if (policyCurrency.equalsIgnoreCase(remittanceCurrency)) { if (policyCurrency.equalsIgnoreCase(remittanceCurrency)) {
totalAmount = totalAmount.add(amount); totalAmount = totalAmount.add(amount);
sameCurrencyCount++;
log.debug("相同币种汇款记录: {} {}", amount, remittanceCurrency);
} }
} }
log.debug("相同币种汇款记录数: {}, 累计金额: {}", sameCurrencyCount, totalAmount);
// 然后处理需要转换的汇款记录 // 然后处理需要转换的汇款记录
int convertCount = 0;
for (ApiPremiumRemittanceDto remittanceDto : remittanceDtos) { for (ApiPremiumRemittanceDto remittanceDto : remittanceDtos) {
String remittanceCurrency = remittanceDto.getPaymentCurrency(); String remittanceCurrency = remittanceDto.getPaymentCurrency();
BigDecimal amount = remittanceDto.getPaymentAmount(); BigDecimal amount = remittanceDto.getPaymentAmount();
...@@ -219,6 +243,9 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -219,6 +243,9 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
continue; continue;
} }
convertCount++;
log.debug("需要转换的汇款记录: {} {} -> {}", amount, remittanceCurrency, policyCurrency);
// 构建转换请求 // 构建转换请求
ApiExchangeRateConvertRequest convertRequest = new ApiExchangeRateConvertRequest(); ApiExchangeRateConvertRequest convertRequest = new ApiExchangeRateConvertRequest();
convertRequest.setAmount(amount); convertRequest.setAmount(amount);
...@@ -253,11 +280,18 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -253,11 +280,18 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
convertInfoMap.put(requestId, info); convertInfoMap.put(requestId, info);
} }
log.debug("需要转换的汇款记录数: {}", convertCount);
// 先保存相同币种的累计金额 // 先保存相同币种的累计金额
totalAmount = totalAmount.setScale(2, RoundingMode.HALF_EVEN); totalAmount = totalAmount.setScale(2, RoundingMode.HALF_EVEN);
totalPaymentAmounts.put(reconciliationBizId, totalAmount); totalPaymentAmounts.put(reconciliationBizId, totalAmount);
paymentCurrencies.put(reconciliationBizId, policyCurrency);
log.info("对账记录 {} 初始总金额: {} {}", reconciliationBizId, totalAmount, policyCurrency);
} }
log.info("总共需要转换 {} 条汇款记录", convertRequests.size());
// 批量处理汇率转换 // 批量处理汇率转换
if (!CollectionUtils.isEmpty(convertRequests)) { if (!CollectionUtils.isEmpty(convertRequests)) {
try { try {
...@@ -267,12 +301,16 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -267,12 +301,16 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
int end = Math.min(convertRequests.size(), i + batchSize); int end = Math.min(convertRequests.size(), i + batchSize);
List<ApiExchangeRateConvertRequest> batch = convertRequests.subList(i, end); List<ApiExchangeRateConvertRequest> batch = convertRequests.subList(i, end);
log.info("发送第 {} 批汇率转换请求,共 {} 条", i/batchSize + 1, batch.size());
Result<List<ApiExchangeRateConvertResponse>> batchResult = Result<List<ApiExchangeRateConvertResponse>> batchResult =
apiExchangeRateFeignClient.batchConvert(batch); apiExchangeRateFeignClient.batchConvert(batch);
if (batchResult != null && batchResult.getCode() == 200 && if (batchResult != null && batchResult.getCode() == 200 &&
!CollectionUtils.isEmpty(batchResult.getData())) { !CollectionUtils.isEmpty(batchResult.getData())) {
log.info("收到第 {} 批汇率转换响应,共 {} 条", i/batchSize + 1, batchResult.getData().size());
// 处理转换结果 // 处理转换结果
for (ApiExchangeRateConvertResponse convertResponse : batchResult.getData()) { for (ApiExchangeRateConvertResponse convertResponse : batchResult.getData()) {
String requestId = convertResponse.getRequestId(); String requestId = convertResponse.getRequestId();
...@@ -282,13 +320,26 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -282,13 +320,26 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
BigDecimal currentTotal = totalPaymentAmounts.getOrDefault(info.reconciliationBizId, BigDecimal.ZERO); BigDecimal currentTotal = totalPaymentAmounts.getOrDefault(info.reconciliationBizId, BigDecimal.ZERO);
BigDecimal convertedAmount = convertResponse.getConvertedAmount(); BigDecimal convertedAmount = convertResponse.getConvertedAmount();
log.debug("汇率转换结果: {} {} -> {} {}, 汇率={}",
convertResponse.getOriginalAmount(), convertResponse.getOriginalCurrency(),
convertedAmount, convertResponse.getTargetCurrency(), convertResponse.getExchangeRate());
// 设置精度并累加 // 设置精度并累加
convertedAmount = convertedAmount.setScale(2, RoundingMode.HALF_EVEN); convertedAmount = convertedAmount.setScale(2, RoundingMode.HALF_EVEN);
totalPaymentAmounts.put(info.reconciliationBizId, currentTotal.add(convertedAmount)); BigDecimal newTotal = currentTotal.add(convertedAmount);
totalPaymentAmounts.put(info.reconciliationBizId, newTotal);
log.debug("对账记录 {} 累加后总金额: {} (之前: {} + 转换: {})",
info.reconciliationBizId, newTotal, currentTotal, convertedAmount);
} else {
log.warn("转换结果缺少必要信息: requestId={}, info={}, convertedAmount={}",
requestId, info, convertResponse.getConvertedAmount());
} }
} }
} else { } else {
log.error("批量汇率转换失败: {}", batchResult != null ? batchResult.getMsg() : "null"); log.error("批量汇率转换失败,code: {}, msg: {}",
batchResult != null ? batchResult.getCode() : "null",
batchResult != null ? batchResult.getMsg() : "null");
} }
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -297,24 +348,30 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -297,24 +348,30 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
} }
// 更新分页响应 // 更新分页响应
if (!CollectionUtils.isEmpty(iPage.getRecords())) { int updatedCount = 0;
for (ApiPremiumReconciliationPageResponse item : iPage.getRecords()) { for (ApiPremiumReconciliationPageResponse item : iPage.getRecords()) {
String reconciliationBizId = item.getPremiumReconciliationBizId(); String reconciliationBizId = item.getPremiumReconciliationBizId();
if (totalPaymentAmounts.containsKey(reconciliationBizId)) { if (totalPaymentAmounts.containsKey(reconciliationBizId)) {
BigDecimal totalAmount = totalPaymentAmounts.get(reconciliationBizId); BigDecimal totalAmount = totalPaymentAmounts.get(reconciliationBizId);
String paymentCurrency = paymentCurrencies.get(reconciliationBizId);
log.info("更新对账记录 {}: 付款金额={} {}, 原paymentAmount={} {}",
reconciliationBizId, totalAmount, paymentCurrency,
item.getPaymentAmount(), item.getPaymentCurrency());
item.setPaymentAmount(totalAmount); item.setPaymentAmount(totalAmount);
String policyNo = reconciliationBizIdToPolicyNoMap.get(reconciliationBizId); if (StringUtils.isNotBlank(paymentCurrency)) {
if (StringUtils.isNotBlank(policyNo)) { item.setPaymentCurrency(paymentCurrency);
String policyCurrency = policyNoToCurrencyMap.get(policyNo);
if (StringUtils.isNotBlank(policyCurrency)) {
item.setPaymentCurrency(policyCurrency);
}
}
} }
updatedCount++;
} else {
log.debug("对账记录 {} 没有找到付款金额汇总", reconciliationBizId);
} }
} }
log.info("共更新了 {} 条记录的付款金额", updatedCount);
} }
return Result.success(iPage); return Result.success(iPage);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment