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
6f993f22
Commit
6f993f22
authored
Mar 11, 2026
by
jianan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
生成预计发佣记录是查询出账币种、默认结算汇率2
parent
950aeb25
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
113 additions
and
50 deletions
+113
-50
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiExpectedFortuneService.java
+3
-2
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
+55
-48
yd-csf-service/src/main/java/com/yd/csf/service/helper/FeignResultHelper.java
+55
-0
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiExpectedFortuneService.java
View file @
6f993f22
...
@@ -15,11 +15,11 @@ import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
...
@@ -15,11 +15,11 @@ import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
import
com.yd.csf.service.model.CommissionRuleBinding
;
import
com.yd.csf.service.model.CommissionRuleBinding
;
import
com.yd.csf.service.model.ExpectedFortune
;
import
com.yd.csf.service.model.ExpectedFortune
;
import
com.yd.csf.service.vo.ExpectedFortuneStatisticsVO
;
import
com.yd.csf.service.vo.ExpectedFortuneStatisticsVO
;
import
com.yd.product.feign.response.announcementcommissionratio.ApiAnnouncementCommissionRatioListResponse
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.scheduling.annotation.Async
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
public
interface
ApiExpectedFortuneService
{
public
interface
ApiExpectedFortuneService
{
Result
<
ApiGenerateExpectedFortuneResponse
>
generate
(
ApiGenerateExpectedFortuneRequest
request
);
Result
<
ApiGenerateExpectedFortuneResponse
>
generate
(
ApiGenerateExpectedFortuneRequest
request
);
...
@@ -37,7 +37,8 @@ public interface ApiExpectedFortuneService {
...
@@ -37,7 +37,8 @@ public interface ApiExpectedFortuneService {
@Async
(
"asyncQueryExecutor"
)
@Async
(
"asyncQueryExecutor"
)
Result
execute
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
Result
execute
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
String
policyNo
);
String
policyNo
,
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
);
/**
/**
* 同步执行预计发佣生成
* 同步执行预计发佣生成
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
View file @
6f993f22
...
@@ -2,9 +2,6 @@ package com.yd.csf.api.service.impl;
...
@@ -2,9 +2,6 @@ package com.yd.csf.api.service.impl;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.json.JSONArray
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
...
@@ -32,6 +29,7 @@ import com.yd.csf.service.dto.CommissionRuleBindingDto;
...
@@ -32,6 +29,7 @@ import com.yd.csf.service.dto.CommissionRuleBindingDto;
import
com.yd.csf.service.dto.QueryPolicyAndBrokerDto
;
import
com.yd.csf.service.dto.QueryPolicyAndBrokerDto
;
import
com.yd.csf.service.dto.QueryPolicyBrokerDto
;
import
com.yd.csf.service.dto.QueryPolicyBrokerDto
;
import
com.yd.csf.service.enums.FortuneStatusEnum
;
import
com.yd.csf.service.enums.FortuneStatusEnum
;
import
com.yd.csf.service.helper.FeignResultHelper
;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.service.*
;
import
com.yd.csf.service.service.*
;
import
com.yd.csf.service.vo.ExpectedFortuneExportDTO
;
import
com.yd.csf.service.vo.ExpectedFortuneExportDTO
;
...
@@ -106,6 +104,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -106,6 +104,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
private
CommissionExpectedService
commissionExpectedService
;
private
CommissionExpectedService
commissionExpectedService
;
@Resource
@Resource
private
ApiAnnouncementCommissionRatioFeignClient
apiAnnouncementCommissionRatioFeignClient
;
private
ApiAnnouncementCommissionRatioFeignClient
apiAnnouncementCommissionRatioFeignClient
;
@Resource
private
FeignResultHelper
feignResultHelper
;
/**
/**
* 生成预计发佣
* 生成预计发佣
...
@@ -147,9 +147,23 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -147,9 +147,23 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
throw
new
BusinessException
(
"绑定基本法数据不存在"
);
throw
new
BusinessException
(
"绑定基本法数据不存在"
);
}
}
//查询产品发佣配置,获取结算币种
QueryPolicyAndBrokerDto
queryPolicyAndBrokerDto
=
queryPolicyAndBrokerDtoList
.
get
(
0
);
ApiAnnouncementCommissionRatioListRequest
announcementRatioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
announcementRatioListRequest
.
setProductLaunchBizId
(
queryPolicyAndBrokerDto
.
getPlanBizId
());
announcementRatioListRequest
.
setEffectiveDate
(
Date
.
from
(
queryPolicyAndBrokerDto
.
getEffectiveDate
().
atStartOfDay
(
ZoneId
.
systemDefault
()).
toInstant
()));
announcementRatioListRequest
.
setPaymentTerm
(
String
.
valueOf
(
queryPolicyAndBrokerDto
.
getPaymentTerm
()));
log
.
info
(
"查询结算币种->保单号:{},入参request:{}"
,
request
.
getPolicyNo
(),
JSON
.
toJSONString
(
announcementRatioListRequest
));
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
=
feignResultHelper
.
extractListData
(
apiAnnouncementCommissionRatioFeignClient
.
list
(
announcementRatioListRequest
),
ApiAnnouncementCommissionRatioListResponse
.
class
);
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
// 通过代理对象调用
// 通过代理对象调用
getSelf
().
execute
(
queryPolicyAndBrokerDtoList
,
commissionRuleBindingList
,
request
.
getPolicyNo
());
getSelf
().
execute
(
queryPolicyAndBrokerDtoList
,
commissionRuleBindingList
,
request
.
getPolicyNo
()
,
announcementRatioList
);
return
Result
.
success
(
null
,
"生成预计发佣正在处理....,稍后查看预计发佣列表"
);
return
Result
.
success
(
null
,
"生成预计发佣正在处理....,稍后查看预计发佣列表"
);
}
}
...
@@ -193,8 +207,22 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -193,8 +207,22 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
// throw new BusinessException("绑定基本法数据不存在");
// throw new BusinessException("绑定基本法数据不存在");
// }
// }
//查询产品发佣配置,获取结算币种
QueryPolicyAndBrokerDto
queryPolicyAndBrokerDto
=
queryPolicyAndBrokerDtoList
.
get
(
0
);
ApiAnnouncementCommissionRatioListRequest
announcementRatioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
announcementRatioListRequest
.
setProductLaunchBizId
(
queryPolicyAndBrokerDto
.
getPlanBizId
());
announcementRatioListRequest
.
setEffectiveDate
(
Date
.
from
(
queryPolicyAndBrokerDto
.
getEffectiveDate
().
atStartOfDay
(
ZoneId
.
systemDefault
()).
toInstant
()));
announcementRatioListRequest
.
setPaymentTerm
(
String
.
valueOf
(
queryPolicyAndBrokerDto
.
getPaymentTerm
()));
log
.
info
(
"查询结算币种->保单号:{},入参request:{}"
,
request
.
getPolicyNo
(),
JSON
.
toJSONString
(
announcementRatioListRequest
));
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
=
feignResultHelper
.
extractListData
(
apiAnnouncementCommissionRatioFeignClient
.
list
(
announcementRatioListRequest
),
ApiAnnouncementCommissionRatioListResponse
.
class
);
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行)
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行)
executeSync
(
queryPolicyAndBrokerDtoList
,
request
.
getPolicyNo
());
executeSync
(
queryPolicyAndBrokerDtoList
,
request
.
getPolicyNo
()
,
announcementRatioList
);
return
Result
.
success
(
null
,
"生成预计发佣成功"
);
return
Result
.
success
(
null
,
"生成预计发佣成功"
);
}
}
...
@@ -290,7 +318,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -290,7 +318,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Async
(
"commonAsyncExecutor"
)
@Async
(
"commonAsyncExecutor"
)
public
Result
execute
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
public
Result
execute
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
String
policyNo
)
{
String
policyNo
,
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
)
{
// 使用编程式事务,确保异步方法内的事务一致性
// 使用编程式事务,确保异步方法内的事务一致性
return
transactionTemplate
.
execute
(
status
->
{
return
transactionTemplate
.
execute
(
status
->
{
...
@@ -322,7 +351,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -322,7 +351,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
List
<
ExpectedFortune
>
expectedFortuneList
=
updatePayableNoBatch
(
policyNo
);
List
<
ExpectedFortune
>
expectedFortuneList
=
updatePayableNoBatch
(
policyNo
);
//默认结算汇率、港币金额
//默认结算汇率、港币金额
updateHkdAmountBatch
(
expectedFortuneList
,
queryPolicyAndBrokerDtoList
.
get
(
0
));
String
policyCurrency
=
queryPolicyAndBrokerDtoList
.
get
(
0
).
getCurrency
();
updateHkdAmountBatch
(
expectedFortuneList
,
policyCurrency
,
announcementRatioList
);
//执行成功完毕,也要销毁redis缓存
//执行成功完毕,也要销毁redis缓存
redisUtil
.
deleteObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
policyNo
);
redisUtil
.
deleteObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
policyNo
);
...
@@ -351,53 +381,30 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -351,53 +381,30 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
});
});
}
}
private
void
updateHkdAmountBatch
(
List
<
ExpectedFortune
>
expectedFortuneList
,
QueryPolicyAndBrokerDto
queryPolicyAndBrokerDto
)
{
private
void
updateHkdAmountBatch
(
List
<
ExpectedFortune
>
expectedFortuneList
,
String
policyCurrency
,
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
)
{
log
.
info
(
"------------------------开始计算默认结算汇率、港币金额----------------------"
);
log
.
info
(
"------------------------开始计算默认结算汇率、港币金额----------------------"
);
//查询结算币种
if
(!
CollectionUtils
.
isEmpty
(
announcementRatioList
))
{
ApiAnnouncementCommissionRatioListRequest
request
=
new
ApiAnnouncementCommissionRatioListRequest
();
ApiAnnouncementCommissionRatioListResponse
announcementRatio
=
announcementRatioList
.
get
(
0
);
request
.
setProductLaunchBizId
(
queryPolicyAndBrokerDto
.
getPlanBizId
());
String
currency
=
announcementRatio
.
getCurrency
();
//localDate转换为Date
request
.
setEffectiveDate
(
Date
.
from
(
queryPolicyAndBrokerDto
.
getEffectiveDate
().
atStartOfDay
(
ZoneId
.
systemDefault
()).
toInstant
()));
request
.
setPaymentTerm
(
String
.
valueOf
(
queryPolicyAndBrokerDto
.
getPaymentTerm
()));
Result
<
List
<
ApiAnnouncementCommissionRatioListResponse
>>
result
=
apiAnnouncementCommissionRatioFeignClient
.
list
(
request
);
log
.
info
(
"查询结算币种->入参request:{},出参result:{}"
,
JSON
.
toJSONString
(
request
),
JSON
.
toJSONString
(
result
));
if
(
result
.
getCode
()
==
200
)
{
// 使用 Map 来处理数据
Object
data
=
result
.
getData
();
// 将数据转换为JSONObject进行解析
JSONArray
announcementRatioList
=
JSONUtil
.
parseArray
(
data
);
//查询默认结算汇率
log
.
info
(
"结算币种:{}"
,
currency
);
if
(!
announcementRatioList
.
isEmpty
())
{
JSONObject
announcementRatio
=
announcementRatioList
.
get
(
0
,
JSONObject
.
class
);
String
currency
=
announcementRatio
.
getStr
(
"currency"
);
log
.
info
(
"结算币种:{}"
,
currency
);
BigDecimal
exchangeRate
=
queryExchangeRateByFeign
(
policyCurrency
,
currency
);
BigDecimal
exchangeRate
=
queryExchangeRateByFeign
(
queryPolicyAndBrokerDto
.
getCurrency
(),
currency
);
log
.
info
(
"结算汇率:{}"
,
exchangeRate
);
log
.
info
(
"结算汇率:{}"
,
exchangeRate
);
for
(
ExpectedFortune
expectedFortune
:
expectedFortuneList
)
{
//设置结算货币
expectedFortune
.
setCurrency
(
currency
);
//设置默认结算汇率
expectedFortune
.
setDefaultExchangeRate
(
exchangeRate
);
//设置港币金额(标准发佣金额 * 默认结算汇率)
expectedFortune
.
setHkdAmount
(
expectedFortune
.
getAmount
().
multiply
(
exchangeRate
));
for
(
ExpectedFortune
expectedFortune
:
expectedFortuneList
)
{
iExpectedFortuneService
.
updateById
(
expectedFortune
);
//设置结算货币
expectedFortune
.
setCurrency
(
currency
);
//设置默认结算汇率
expectedFortune
.
setDefaultExchangeRate
(
exchangeRate
);
//设置港币金额(标准发佣金额 * 默认结算汇率)
expectedFortune
.
setHkdAmount
(
expectedFortune
.
getAmount
().
multiply
(
exchangeRate
));
iExpectedFortuneService
.
updateById
(
expectedFortune
);
}
}
else
{
log
.
error
(
"查询结算币种失败,未查询到默认结算汇率->入参request:{},出参result:{}"
,
JSON
.
toJSONString
(
request
),
JSON
.
toJSONString
(
result
));
}
}
}
else
{
log
.
error
(
"查询结算币种失败,入参request:{},出参result:{}"
,
JSON
.
toJSONString
(
request
),
JSON
.
toJSONString
(
result
));
}
}
}
}
...
@@ -414,7 +421,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -414,7 +421,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
* @return
* @return
*/
*/
public
Result
executeSync
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
public
Result
executeSync
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
String
policyNo
)
{
String
policyNo
,
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
)
{
log
.
info
(
"同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参queryPolicyAndBrokerDtoList:{}"
,
JSON
.
toJSONString
(
queryPolicyAndBrokerDtoList
));
log
.
info
(
"同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参queryPolicyAndBrokerDtoList:{}"
,
JSON
.
toJSONString
(
queryPolicyAndBrokerDtoList
));
log
.
info
(
"同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参policyNo:{}"
,
policyNo
);
log
.
info
(
"同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参policyNo:{}"
,
policyNo
);
// 使用编程式事务,确保方法内的事务一致性
// 使用编程式事务,确保方法内的事务一致性
...
@@ -450,9 +457,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
...
@@ -450,9 +457,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
//批量设置应付款编号
//批量设置应付款编号
List
<
ExpectedFortune
>
expectedFortuneList
=
updatePayableNoBatch
(
policyNo
);
List
<
ExpectedFortune
>
expectedFortuneList
=
updatePayableNoBatch
(
policyNo
);
//默认结算汇率、港币金额
//默认结算汇率、港币金额
updateHkdAmountBatch
(
expectedFortuneList
,
queryPolicyAndBrokerDtoList
.
get
(
0
));
String
policyCurrency
=
queryPolicyAndBrokerDtoList
.
get
(
0
).
getCurrency
();
updateHkdAmountBatch
(
expectedFortuneList
,
policyCurrency
,
announcementRatioList
);;
//执行成功完毕,也要销毁redis缓存
//执行成功完毕,也要销毁redis缓存
redisUtil
.
deleteObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
policyNo
);
redisUtil
.
deleteObject
(
RedisConstants
.
EXPECTED_FORTUNE
+
policyNo
);
...
...
yd-csf-service/src/main/java/com/yd/csf/service/helper/FeignResultHelper.java
0 → 100644
View file @
6f993f22
package
com
.
yd
.
csf
.
service
.
helper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.yd.common.enums.ResultCode
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
@Component
public
class
FeignResultHelper
{
private
final
ObjectMapper
objectMapper
=
new
ObjectMapper
();
public
<
T
>
T
extractData
(
Result
<
T
>
result
)
{
if
(
result
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
"远程调用返回null"
);
}
if
(
result
.
getCode
()
!=
ResultCode
.
SUCCESS
.
getCode
())
{
throw
new
BusinessException
(
result
.
getCode
(),
result
.
getMsg
());
}
return
result
.
getData
();
}
public
<
T
>
List
<
T
>
extractListData
(
Result
<?>
result
,
Class
<
T
>
elementType
)
{
if
(
result
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
"远程调用返回null"
);
}
if
(
result
.
getCode
()
!=
ResultCode
.
SUCCESS
.
getCode
())
{
throw
new
BusinessException
(
result
.
getCode
(),
result
.
getMsg
());
}
Object
data
=
result
.
getData
();
if
(
data
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
"远程调用 result.getData() 为 null"
);
}
if
(
data
instanceof
List
)
{
if
(((
List
<?>)
data
).
isEmpty
())
{
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
"远程调用 result.getData() 为 []"
);
}
return
objectMapper
.
convertValue
(
data
,
objectMapper
.
getTypeFactory
().
constructCollectionType
(
List
.
class
,
elementType
)
);
}
else
{
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
"返回数据类型错误"
);
}
}
}
\ No newline at end of file
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