Commit 3dd03e29 by zhangxingmin

push

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