Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-csf
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xingmin
yd-csf
Commits
3dd03e29
Commit
3dd03e29
authored
Jan 14, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
push
parent
e66789f0
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
80 additions
and
23 deletions
+80
-23
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiPremiumReconciliationServiceImpl.java
+80
-23
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiPremiumReconciliationServiceImpl.java
View file @
3dd03e29
...
@@ -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
}
}
// 更新分页响应
// 更新分页响应
i
f
(!
CollectionUtils
.
isEmpty
(
iPage
.
getRecords
()))
{
i
nt
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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment