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
3ea990f6
Commit
3ea990f6
authored
Mar 13, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into prod
parents
60a764a9
760e13be
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
493 additions
and
182 deletions
+493
-182
yd-csf-api/src/main/java/com/yd/csf/api/CsfApiApplication.java
+1
-3
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionController.java
+20
-16
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionExpectedController.java
+1
-1
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiFortuneController.java
+1
-0
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiPolicyFollowController.java
+36
-3
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateExpectedFortuneDto.java
+10
-0
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/ApiAppointmentServiceImpl.java
+3
-0
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
+0
-0
yd-csf-service/pom.xml
+7
-0
yd-csf-service/src/main/java/com/yd/csf/service/component/CommissionAsyncService.java
+2
-1
yd-csf-service/src/main/java/com/yd/csf/service/config/CsfMybatisPlusConfig.java
+25
-5
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionExpectedQueryRequest.java
+3
-5
yd-csf-service/src/main/java/com/yd/csf/service/dto/FortuneAccountExportDTO.java
+4
-0
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyFollowQueryRequest.java
+3
-3
yd-csf-service/src/main/java/com/yd/csf/service/dto/QueryPolicyAndBrokerDto.java
+5
-0
yd-csf-service/src/main/java/com/yd/csf/service/enums/CommissionStatusEnum.java
+9
-0
yd-csf-service/src/main/java/com/yd/csf/service/enums/CurrencyEnum.java
+11
-2
yd-csf-service/src/main/java/com/yd/csf/service/helper/FeignResultHelper.java
+57
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/Appointment.java
+4
-7
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionExpected.java
+5
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/FortuneAccount.java
+10
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/PolicyBroker.java
+1
-1
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
+41
-12
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
+43
-31
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/ExpectedFortuneServiceImpl.java
+3
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneAccountServiceImpl.java
+14
-3
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneServiceImpl.java
+54
-44
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyFollowServiceImpl.java
+68
-25
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionExpectedStatisticsVO.java
+10
-0
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionVO.java
+9
-0
yd-csf-service/src/main/java/com/yd/csf/service/vo/FortuneVO.java
+14
-9
yd-csf-service/src/main/resources/mappers/CommissionExpectedMapper.xml
+6
-4
yd-csf-service/src/main/resources/mappers/CommissionMapper.xml
+1
-1
yd-csf-service/src/main/resources/mappers/FortuneAccountMapper.xml
+5
-1
yd-csf-service/src/main/resources/mappers/FortuneMapper.xml
+2
-2
yd-csf-service/src/main/resources/mappers/PolicyFollowMapper.xml
+2
-1
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/CsfApiApplication.java
View file @
3ea990f6
...
...
@@ -12,9 +12,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
(
scanBasePackages
=
"com.yd"
)
@MapperScan
(
"com.yd.**.dao"
)
@EnableFeignClients
(
basePackages
=
"com.yd"
)
@ComponentScan
(
basePackages
=
{
"com.yd.auth.core"
// 包含认证模块的包路径
})
@ComponentScan
(
basePackages
=
{
"com.yd.auth.core"
,
"com.yd.csf.service.config"
})
public
class
CsfApiApplication
{
public
static
void
main
(
String
[]
args
)
{
...
...
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionController.java
View file @
3ea990f6
...
...
@@ -30,6 +30,8 @@ import org.redisson.api.RedissonClient;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.support.TransactionSynchronization
;
import
org.springframework.transaction.support.TransactionSynchronizationManager
;
import
org.springframework.transaction.support.TransactionTemplate
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
...
...
@@ -151,26 +153,28 @@ public class ApiCommissionController {
// 数据处理
List
<
Commission
>
entities
=
processData
(
dataList
,
loginUserId
,
reconciliationYearMonth
);
transactionTemplate
.
execute
(
status
->
{
// 保存来佣数据
commissionService
.
saveBatch
(
entities
);
return
null
;
});
// 1. 先保存主数据
commissionService
.
saveBatch
(
entities
);
// // 转换为 VO
// List<CommissionVO> commissionVOList = commissionService.getCommissionList(entities);
// 开启新事务,比对数据
transactionTemplate
.
execute
(
status
->
{
try
{
commissionAsyncService
.
commissionCompareBatch
(
entities
);
}
catch
(
Exception
e
)
{
// 比对失败不影响主事务,记录日志即可
e
.
printStackTrace
();
log
.
error
(
"批量导入, 比对操作执行失败, error: {}"
,
e
.
getMessage
());
}
return
null
;
});
// 2. 事务提交后执行比对
TransactionSynchronizationManager
.
registerSynchronization
(
new
TransactionSynchronization
()
{
@Override
public
void
afterCommit
()
{
try
{
// 这里会开启新事务执行更新
commissionAsyncService
.
commissionCompareBatch
(
entities
);
}
catch
(
Exception
e
)
{
log
.
error
(
"批量导入, 比对操作执行失败, error: {}"
,
e
.
getMessage
());
// 可以发送告警或记录失败任务
}
}
}
);
return
Result
.
success
(
true
);
}
...
...
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionExpectedController.java
View file @
3ea990f6
...
...
@@ -283,7 +283,7 @@ public class ApiCommissionExpectedController {
if
(!
CollectionUtils
.
isEmpty
(
allExpectedIdList
))
{
receivableReportPage
=
commissionExpectedService
.
receivableReportPage
(
reportPage
,
allExpectedIdList
);
}
enrichReceivableReportWithCompanyName
(
receivableReportPage
);
//
enrichReceivableReportWithCompanyName(receivableReportPage);
receivableReportPage
=
convertProductName
(
receivableReportPage
);
// 组装返回结果
ReceivableReportResponse
response
=
new
ReceivableReportResponse
();
...
...
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiFortuneController.java
View file @
3ea990f6
...
...
@@ -530,6 +530,7 @@ public class ApiFortuneController {
QueryWrapper
<
Fortune
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"expected_fortune_biz_id"
,
fortuneQueryRequest
.
getExpectedFortuneBizId
());
queryWrapper
.
eq
(
"status"
,
FortuneStatusEnum
.
SENT
.
getItemValue
());
queryWrapper
.
or
().
eq
(
"status"
,
FortuneStatusEnum
.
CHECKED
.
getItemValue
());
Page
<
Fortune
>
fortunePage
=
fortuneService
.
page
(
new
Page
<>(
current
,
size
),
queryWrapper
);
// 组装返回值
...
...
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiPolicyFollowController.java
View file @
3ea990f6
package
com
.
yd
.
csf
.
api
.
controller
;
import
cn.hutool.core.date.DateField
;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yd.auth.core.dto.AuthUserDto
;
...
...
@@ -28,15 +30,18 @@ import com.yd.csf.service.common.ErrorCode;
import
com.yd.csf.service.component.PolicyReportPdfService
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.enums.PolicyFollowStatusEnum
;
import
com.yd.csf.service.helper.FeignResultHelper
;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.service.*
;
import
com.yd.csf.service.vo.PolicyFollowDetailVO
;
import
com.yd.csf.service.vo.PolicyFollowRecordVO
;
import
com.yd.csf.service.vo.PolicyFollowVO
;
import
com.yd.csf.service.vo.PolicyNumberResponseVO
;
import
com.yd.feign.config.FeignTokenInterceptor
;
import
com.yd.insurance.base.feign.client.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyFeignClient
;
import
com.yd.insurance.base.feign.request.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageRequest
;
import
com.yd.product.feign.client.announcementcommissionratio.ApiAnnouncementCommissionRatioFeignClient
;
import
com.yd.product.feign.request.announcementcommissionratio.ApiAnnouncementCommissionRatioListRequest
;
import
com.yd.product.feign.response.announcementcommissionratio.ApiAnnouncementCommissionRatioListResponse
;
import
com.yd.product.feign.response.expectedspecies.ApiExpectedSpeciesListResponse
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
...
...
@@ -46,7 +51,6 @@ import org.apache.commons.lang3.StringUtils;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
...
...
@@ -91,9 +95,12 @@ public class ApiPolicyFollowController {
private
CommissionExpectedService
commissionExpectedService
;
@Resource
private
ApiPolicyFollowService
apiPolicyFollowService
;
@Resource
private
ApiExpectedFortuneService
apiExpectedFortuneService
;
@Resource
private
ApiAnnouncementCommissionRatioFeignClient
apiAnnouncementCommissionRatioFeignClient
;
@Resource
private
FeignResultHelper
feignResultHelper
;
@PostMapping
(
"/upload/excel"
)
...
...
@@ -538,6 +545,25 @@ public class ApiPolicyFollowController {
if
(!
hasCommissionInfo
)
{
return
Result
.
fail
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"产品未维护发佣信息"
);
}
//查询产品发佣配置,获取结算币种
ApiAnnouncementCommissionRatioListRequest
announcementRatioListRequest
=
new
ApiAnnouncementCommissionRatioListRequest
();
announcementRatioListRequest
.
setProductLaunchBizId
(
productLaunchBizId
);
announcementRatioListRequest
.
setEffectiveDate
(
changePolicyFollowStatusRequest
.
getEffectiveDate
());
announcementRatioListRequest
.
setPaymentTerm
(
String
.
valueOf
(
policyFollow
.
getIssueNumber
()));
try
{
feignResultHelper
.
extractListData
(
apiAnnouncementCommissionRatioFeignClient
.
list
(
announcementRatioListRequest
),
ApiAnnouncementCommissionRatioListResponse
.
class
);
}
catch
(
BusinessException
e
)
{
log
.
info
(
"===== 进入BusinessException catch块 ====="
);
log
.
info
(
"查询结算币种->保单号:{},入参request:{}"
,
policyFollow
.
getPolicyNo
(),
JSON
.
toJSONString
(
announcementRatioListRequest
));
return
Result
.
fail
(
"未查询到产品发佣配置,查询条件:"
+
transferMsg
(
announcementRatioListRequest
,
policyFollow
));
}
catch
(
Exception
e
)
{
log
.
info
(
"===== 进入Exception catch块 ====="
);
log
.
info
(
"查询结算币种->保单号:{},入参request:{}"
,
policyFollow
.
getPolicyNo
(),
JSON
.
toJSONString
(
announcementRatioListRequest
));
return
Result
.
fail
(
"未查询到产品发佣配置,查询条件:"
+
transferMsg
(
announcementRatioListRequest
,
policyFollow
));
}
}
// 修改逻辑
...
...
@@ -554,6 +580,13 @@ public class ApiPolicyFollowController {
return
Result
.
success
(
true
);
}
private
String
transferMsg
(
ApiAnnouncementCommissionRatioListRequest
announcementRatioListRequest
,
PolicyFollow
policyFollow
)
{
return
String
.
format
(
"保单生效日: %s, 供款年期: %s, 产品名称: %s, "
,
DateUtil
.
format
(
announcementRatioListRequest
.
getEffectiveDate
(),
DatePattern
.
NORM_DATE_PATTERN
),
policyFollow
.
getIssueNumber
(),
policyFollow
.
getProductName
());
}
/**
* 异步处理
*
...
...
yd-csf-api/src/main/java/com/yd/csf/api/dto/GenerateExpectedFortuneDto.java
View file @
3ea990f6
...
...
@@ -31,6 +31,16 @@ public class GenerateExpectedFortuneDto {
private
String
policyNo
;
/**
* 产品业务id
*/
private
String
productLaunchBizId
;
/**
* 保险公司业务id
*/
private
String
insuranceCompanyBizId
;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
private
Integer
fortunePeriod
;
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiExpectedFortuneService.java
View file @
3ea990f6
...
...
@@ -15,11 +15,11 @@ import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
import
com.yd.csf.service.model.CommissionRuleBinding
;
import
com.yd.csf.service.model.ExpectedFortune
;
import
com.yd.csf.service.vo.ExpectedFortuneStatisticsVO
;
import
com.yd.product.feign.response.announcementcommissionratio.ApiAnnouncementCommissionRatioListResponse
;
import
org.springframework.scheduling.annotation.Async
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.List
;
import
java.util.Map
;
public
interface
ApiExpectedFortuneService
{
Result
<
ApiGenerateExpectedFortuneResponse
>
generate
(
ApiGenerateExpectedFortuneRequest
request
);
...
...
@@ -37,7 +37,8 @@ public interface ApiExpectedFortuneService {
@Async
(
"asyncQueryExecutor"
)
Result
execute
(
List
<
QueryPolicyAndBrokerDto
>
queryPolicyAndBrokerDtoList
,
List
<
CommissionRuleBinding
>
commissionRuleBindingList
,
String
policyNo
);
String
policyNo
,
List
<
ApiAnnouncementCommissionRatioListResponse
>
announcementRatioList
);
/**
* 同步执行预计发佣生成
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiAppointmentServiceImpl.java
View file @
3ea990f6
...
...
@@ -18,6 +18,7 @@ import com.yd.csf.feign.dto.appointment.*;
import
com.yd.csf.feign.dto.appointmentfile.ApiAppointmentFileDto
;
import
com.yd.csf.feign.request.appointment.*
;
import
com.yd.csf.feign.response.appointment.*
;
import
com.yd.csf.service.dao.AppointmentMapper
;
import
com.yd.csf.service.dto.PolicySigner
;
import
com.yd.csf.service.enums.AppointmentStatusEnum
;
import
com.yd.csf.service.enums.FnaStatusEnum
;
...
...
@@ -141,6 +142,8 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
private
PolicyBrokerService
policyBrokerService
;
@Resource
private
PolicyAppointmentFileService
policyAppointmentFileService
;
@Resource
private
AppointmentMapper
appointmentMapper
;
/**
* 预约分页查询
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
View file @
3ea990f6
This diff is collapsed.
Click to expand it.
yd-csf-service/pom.xml
View file @
3ea990f6
...
...
@@ -12,6 +12,13 @@
<artifactId>
yd-csf-service
</artifactId>
<dependencies>
<!-- Java 8 时间类型支持 -->
<dependency>
<groupId>
com.fasterxml.jackson.datatype
</groupId>
<artifactId>
jackson-datatype-jsr310
</artifactId>
<version>
2.13.2
</version>
</dependency>
<!-- 公共工具类 -->
<dependency>
<groupId>
commons-io
</groupId>
...
...
yd-csf-service/src/main/java/com/yd/csf/service/component/CommissionAsyncService.java
View file @
3ea990f6
...
...
@@ -18,6 +18,7 @@ import org.apache.commons.collections4.CollectionUtils;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
...
...
@@ -40,7 +41,7 @@ public class CommissionAsyncService {
private
CommissionCompareRecordService
commissionCompareRecordService
;
// @Async("commonAsyncExecutor")
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
propagation
=
Propagation
.
REQUIRES_NEW
)
public
void
commissionCompareBatch
(
List
<
Commission
>
entities
)
{
// 根据是否关联保单号,来区分比对方式
List
<
Commission
>
hasPolicyNoList
=
new
ArrayList
<>();
...
...
yd-csf-service/src/main/java/com/yd/csf/service/config/CsfMybatisPlusConfig.java
View file @
3ea990f6
package
com
.
yd
.
csf
.
service
.
config
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.annotation.DbType
;
import
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
;
import
com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor
;
import
com.yd.auth.core.dto.AuthUserDto
;
import
com.yd.auth.core.utils.SecurityUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.ibatis.reflection.MetaObject
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Primary
;
import
java.time.LocalDateTime
;
@Slf4j
@Configuration
public
class
CsfMybatisPlusConfig
{
...
...
@@ -25,21 +31,35 @@ public class CsfMybatisPlusConfig {
}
/**
* 自动填充字段配置(如创建
时间、更新时间
)
* 自动填充字段配置(如创建
人、更新人等
)
*/
@Bean
@Primary
public
MetaObjectHandler
metaObjectHandler
()
{
log
.
info
(
"MetaObjectHandler Bean 正在创建..."
,
"MetaObjectHandler Bean 正在创建=========="
);
return
new
MetaObjectHandler
()
{
@Override
public
void
insertFill
(
MetaObject
metaObject
)
{
this
.
strictInsertFill
(
metaObject
,
"createTime"
,
LocalDateTime
.
class
,
LocalDateTime
.
now
());
//获取Security上下文当前用户的登录信息
AuthUserDto
authUserDto
=
SecurityUtil
.
getCurrentLoginUser
();
log
.
info
(
"metaObjectHandler=======insertFill自动填充获取用户信息:{}"
,
JSON
.
toJSONString
(
authUserDto
));
if
(
authUserDto
!=
null
)
{
//自动注入创建人和创建用户名
this
.
strictInsertFill
(
metaObject
,
"creatorId"
,
String
.
class
,
authUserDto
.
getUserBizId
());
this
.
strictInsertFill
(
metaObject
,
"creatorName"
,
String
.
class
,
authUserDto
.
getUsername
());
}
}
@Override
public
void
updateFill
(
MetaObject
metaObject
)
{
this
.
strictUpdateFill
(
metaObject
,
"updateTime"
,
LocalDateTime
.
class
,
LocalDateTime
.
now
());
//获取Security上下文当前用户的登录信息
AuthUserDto
authUserDto
=
SecurityUtil
.
getCurrentLoginUser
();
log
.
info
(
"metaObjectHandler=======updateFill自动填充获取用户信息:{}"
,
JSON
.
toJSONString
(
authUserDto
));
if
(
authUserDto
!=
null
)
{
//自动注入更新人和更新用户名
this
.
strictUpdateFill
(
metaObject
,
"updaterId"
,
String
.
class
,
authUserDto
.
getUserBizId
());
this
.
strictUpdateFill
(
metaObject
,
"updaterName"
,
String
.
class
,
authUserDto
.
getUsername
());
}
}
};
}
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionExpectedQueryRequest.java
View file @
3ea990f6
package
com
.
yd
.
csf
.
service
.
dto
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.yd.common.dto.PageDto
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.time.LocalDate
;
import
java.util.Date
;
import
java.util.List
;
...
...
@@ -32,15 +32,13 @@ public class CommissionExpectedQueryRequest extends PageDto {
* 预计入账日期开始 格式:yyyy-MM-dd
*/
@Schema
(
description
=
"预计入账日期开始 格式:yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
commissionDateStart
;
private
LocalDate
commissionDateStart
;
/**
* 预计入账日期结束 格式:yyyy-MM-dd
*/
@Schema
(
description
=
"预计入账日期结束 格式:yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
commissionDateEnd
;
private
LocalDate
commissionDateEnd
;
/**
* 入账期数
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/FortuneAccountExportDTO.java
View file @
3ea990f6
...
...
@@ -17,9 +17,13 @@ public class FortuneAccountExportDTO implements Serializable {
@ExcelProperty
(
"转介人"
)
private
String
broker
;
private
String
brokerBizId
;
@ExcelProperty
(
"所属团队"
)
private
String
team
;
private
String
teamBizId
;
@ExcelProperty
(
"出账币种"
)
private
String
currency
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyFollowQueryRequest.java
View file @
3ea990f6
...
...
@@ -53,8 +53,7 @@ public class PolicyFollowQueryRequest extends PageDto implements Serializable {
* 最晚缴费日期
*/
@Schema
(
description
=
"最晚缴费日期 格式: yyyy-MM-dd"
,
example
=
"2023-01-01"
,
format
=
"yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
latestPaymentDate
;
private
String
latestPaymentDate
;
/**
* 投保人业务id列表
...
...
@@ -84,7 +83,7 @@ public class PolicyFollowQueryRequest extends PageDto implements Serializable {
* 缴费年期
*/
@Schema
(
description
=
"缴费年期"
)
private
String
issueNumber
;
private
Integer
issueNumber
;
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
yd-csf-service/src/main/java/com/yd/csf/service/dto/QueryPolicyAndBrokerDto.java
View file @
3ea990f6
...
...
@@ -35,6 +35,11 @@ public class QueryPolicyAndBrokerDto {
private
String
productCode
;
/**
* 保险公司业务id
*/
private
String
insuranceCompanyBizId
;
/**
* 供款年期(字典)
*/
private
Integer
paymentTerm
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/enums/CommissionStatusEnum.java
View file @
3ea990f6
...
...
@@ -30,4 +30,13 @@ public enum CommissionStatusEnum {
public
String
getItemValue
()
{
return
itemValue
;
}
public
static
String
toLabel
(
String
itemValue
)
{
for
(
CommissionStatusEnum
anEnum
:
CommissionStatusEnum
.
values
())
{
if
(
anEnum
.
itemValue
.
equals
(
itemValue
))
{
return
anEnum
.
getItemLabel
();
}
}
return
""
;
}
}
yd-csf-service/src/main/java/com/yd/csf/service/enums/CurrencyEnum.java
View file @
3ea990f6
...
...
@@ -17,8 +17,8 @@ import org.apache.commons.lang3.ObjectUtils;
public
enum
CurrencyEnum
{
// 货币枚举
USD
(
"美元"
,
"USD"
),
CNY
(
"人民
幣
"
,
"CNY"
),
HKD
(
"港
幣
"
,
"HKD"
),
CNY
(
"人民
币
"
,
"CNY"
),
HKD
(
"港
币
"
,
"HKD"
),
AUD
(
"澳元"
,
"AUD"
),
JPY
(
"日元"
,
"JPY"
),
CAD
(
"加元"
,
"CAD"
),
...
...
@@ -65,4 +65,13 @@ public enum CurrencyEnum {
public
String
getItemValue
()
{
return
itemValue
;
}
public
static
String
toLabel
(
String
itemValue
)
{
for
(
CurrencyEnum
anEnum
:
CurrencyEnum
.
values
())
{
if
(
anEnum
.
itemValue
.
equalsIgnoreCase
(
itemValue
))
{
return
anEnum
.
getItemLabel
();
}
}
return
""
;
}
}
yd-csf-service/src/main/java/com/yd/csf/service/helper/FeignResultHelper.java
0 → 100644
View file @
3ea990f6
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
javax.annotation.Resource
;
import
java.util.List
;
@Component
public
class
FeignResultHelper
{
@Resource
private
ObjectMapper
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
yd-csf-service/src/main/java/com/yd/csf/service/model/Appointment.java
View file @
3ea990f6
package
com
.
yd
.
csf
.
service
.
model
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.*
;
import
lombok.Getter
;
import
lombok.Setter
;
...
...
@@ -342,19 +339,19 @@ public class Appointment implements Serializable {
/**
* 创建人ID
*/
@TableField
(
"creator_id"
)
@TableField
(
value
=
"creator_id"
,
fill
=
FieldFill
.
INSERT
)
private
String
creatorId
;
/**
* 创建人用户名
*/
@TableField
(
"creator_name"
)
@TableField
(
value
=
"creator_name"
,
fill
=
FieldFill
.
INSERT
)
private
String
creatorName
;
/**
* 更新人ID
*/
@TableField
(
"updater_id"
)
@TableField
(
value
=
"updater_id"
,
fill
=
FieldFill
.
UPDATE
)
private
String
updaterId
;
/**
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionExpected.java
View file @
3ea990f6
...
...
@@ -51,6 +51,11 @@ public class CommissionExpected implements Serializable {
private
BigDecimal
premium
;
/**
* 保单币种
*/
private
String
policyCurrency
;
/**
* 保险公司业务id
*/
private
String
insuranceCompanyBizId
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/FortuneAccount.java
View file @
3ea990f6
...
...
@@ -34,11 +34,21 @@ public class FortuneAccount implements Serializable {
private
String
broker
;
/**
* 转介人业务id
*/
private
String
brokerBizId
;
/**
* 所属团队
*/
private
String
team
;
/**
* 所属团队业务id
*/
private
String
teamBizId
;
/**
* 出账币种
*/
private
String
currency
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/PolicyBroker.java
View file @
3ea990f6
...
...
@@ -37,7 +37,7 @@ public class PolicyBroker implements Serializable {
private
String
brokerName
;
/**
* 转介人业务ID
(客户端用户表唯一业务ID)
* 转介人业务ID
*/
private
String
brokerBizId
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
View file @
3ea990f6
...
...
@@ -2,6 +2,8 @@ package com.yd.csf.service.service.impl;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
...
...
@@ -20,10 +22,7 @@ import com.yd.common.utils.RedisUtil;
import
com.yd.csf.service.component.ReceivableService
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.enums.CommissionExpectedStatusEnum
;
import
com.yd.csf.service.model.Commission
;
import
com.yd.csf.service.model.CommissionExpected
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.PolicyFollow
;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.service.*
;
import
com.yd.csf.service.dao.CommissionExpectedMapper
;
import
com.yd.csf.service.vo.CommissionExpectedStatisticsVO
;
...
...
@@ -297,8 +296,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
List
<
String
>
insurerCompanyBizIdList
=
commissionExpectedQueryRequest
.
getInsurerCompanyBizIdList
();
List
<
String
>
reconciliationCompanyBizIdList
=
commissionExpectedQueryRequest
.
getReconciliationCompanyBizIdList
();
List
<
String
>
statusList
=
commissionExpectedQueryRequest
.
getStatusList
();
Date
commissionDateStart
=
commissionExpectedQueryRequest
.
getCommissionDateStart
();
Date
commissionDateEnd
=
commissionExpectedQueryRequest
.
getCommissionDateEnd
();
Local
Date
commissionDateStart
=
commissionExpectedQueryRequest
.
getCommissionDateStart
();
Local
Date
commissionDateEnd
=
commissionExpectedQueryRequest
.
getCommissionDateEnd
();
Integer
commissionPeriod
=
commissionExpectedQueryRequest
.
getCommissionPeriod
();
String
productLaunchBizId
=
commissionExpectedQueryRequest
.
getProductLaunchBizId
();
String
commissionBizType
=
commissionExpectedQueryRequest
.
getCommissionBizType
();
...
...
@@ -314,8 +313,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
commissionBizType
),
"commission_biz_type"
,
commissionBizType
);
queryWrapper
.
in
(
ObjectUtils
.
isNotEmpty
(
statusList
),
"status"
,
statusList
);
// 范围查询
queryWrapper
.
g
t
(
ObjectUtils
.
isNotEmpty
(
commissionDateStart
),
"commission_date"
,
commissionDateStart
);
queryWrapper
.
l
t
(
ObjectUtils
.
isNotEmpty
(
commissionDateEnd
),
"commission_date"
,
commissionDateEnd
);
queryWrapper
.
g
e
(
ObjectUtils
.
isNotEmpty
(
commissionDateStart
),
"commission_date"
,
commissionDateStart
);
queryWrapper
.
l
e
(
ObjectUtils
.
isNotEmpty
(
commissionDateEnd
),
"commission_date"
,
commissionDateEnd
);
// 转介人所属团队业务ID 关联保单表查询
if
(
StringUtils
.
isNotBlank
(
teamBizId
))
{
queryWrapper
.
apply
(
"EXISTS (SELECT 1 FROM policy_broker pb WHERE pb.policy_no = commission_expected.policy_no AND pb.team_biz_id = {0})"
,
...
...
@@ -545,11 +544,37 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
expectedStatisticsVO
.
setPendingPaidAmount
(
BigDecimal
.
ZERO
);
expectedStatisticsVO
.
setPaidAmountRatio
(
BigDecimal
.
ZERO
);
expectedStatisticsVO
.
setTotalPolicyCount
(
0
);
expectedStatisticsVO
.
setTotalPremium
(
BigDecimal
.
ZERO
);
return
expectedStatisticsVO
;
}
// 自定义统计数据
CommissionExpectedStatisticsVO
commissionStatistics
=
baseMapper
.
getExpectedStatistics
(
expectedIds
);
// 计算总保费
String
policyNos
=
commissionStatistics
.
getPolicyNos
();
if
(
ObjectUtils
.
isNotEmpty
(
policyNos
))
{
List
<
CommissionExpected
>
commissionExpectedList
=
this
.
listByIds
(
expectedIds
);
Map
<
String
,
BigDecimal
>
exchangeRateMap
=
new
HashMap
<>();
for
(
CommissionExpected
commissionExpected
:
commissionExpectedList
)
{
exchangeRateMap
.
put
(
commissionExpected
.
getPolicyNo
(),
commissionExpected
.
getDefaultExchangeRate
());
}
Set
<
String
>
policyNoSet
=
commissionExpectedList
.
stream
().
map
(
CommissionExpected:
:
getPolicyNo
).
collect
(
Collectors
.
toSet
());
// 查询总保费
List
<
Policy
>
policyList
=
policyService
.
lambdaQuery
().
in
(
Policy:
:
getPolicyNo
,
policyNoSet
).
list
();
BigDecimal
totalPremium
=
BigDecimal
.
ZERO
;
if
(
CollectionUtils
.
isNotEmpty
(
policyList
))
{
for
(
Policy
policy
:
policyList
)
{
BigDecimal
exchangeRate
=
exchangeRateMap
.
getOrDefault
(
policy
.
getPolicyNo
(),
BigDecimal
.
ONE
);
totalPremium
=
totalPremium
.
add
(
policy
.
getTotalPaymentPremium
().
multiply
(
exchangeRate
));
}
commissionStatistics
.
setTotalPremium
(
totalPremium
);
}
}
else
{
commissionStatistics
.
setTotalPremium
(
BigDecimal
.
ZERO
);
}
BigDecimal
totalAmount
=
commissionStatistics
.
getTotalAmount
();
BigDecimal
totalPaidAmount
=
commissionStatistics
.
getTotalPaidAmount
();
// 计算待入账金额
...
...
@@ -608,12 +633,15 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
// 匹配规格并获取不匹配的条件
MatchResult
matchResult
=
matchExpectedSpecies
(
expectedSpeciesList
,
paymentTerm
,
reconciliationCompanyBizId
,
policyHolderAge
,
paymentPremium
,
effectiveDate
);
policyHolderAge
,
paymentPremium
,
effectiveDate
,
policy
);
if
(
matchResult
.
getMatchedList
().
isEmpty
())
{
String
errorMsg
=
matchResult
.
getUnmatchedConditions
().
isEmpty
()
?
"未查询到对应供款年期的佣金规格"
:
"未查询到对应供款年期的佣金规格,不匹配条件:"
+
String
.
join
(
"、"
,
matchResult
.
getUnmatchedConditions
());
log
.
info
(
"未查询到对应供款年期的佣金规格,当前规格:{}"
,
JSONUtil
.
toJsonStr
(
expectedSpeciesList
));
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
errorMsg
);
}
...
...
@@ -630,6 +658,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
commissionExpected
.
setCommissionBizType
(
"R"
);
commissionExpected
.
setPolicyNo
(
policyNo
);
commissionExpected
.
setPremium
(
paymentPremium
);
commissionExpected
.
setPolicyCurrency
(
policy
.
getCurrency
());
commissionExpected
.
setInsuranceCompanyBizId
(
insuranceCompanyBizId
);
commissionExpected
.
setProductLaunchBizId
(
productLaunchBizId
);
commissionExpected
.
setReconciliationCompany
(
reconciliationCompany
);
...
...
@@ -705,7 +734,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
*/
private
MatchResult
matchExpectedSpecies
(
List
<
ApiExpectedSpeciesListResponse
>
expectedSpeciesList
,
String
paymentTerm
,
String
reconciliationCompanyId
,
Integer
policyHolderAge
,
BigDecimal
paymentPremium
,
Date
effectiveDate
)
{
Integer
policyHolderAge
,
BigDecimal
paymentPremium
,
Date
effectiveDate
,
Policy
policy
)
{
List
<
String
>
unmatchedConditions
=
new
ArrayList
<>();
List
<
ApiExpectedSpeciesListResponse
>
currentList
=
expectedSpeciesList
;
...
...
@@ -720,7 +749,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
// 检查对账公司
currentList
=
filterAndCheck
(
currentList
,
i
->
reconciliationCompanyId
.
equals
(
i
.
getReconciliationCompany
()),
unmatchedConditions
,
"对账公司["
+
reconciliationCompanyId
+
"]"
);
unmatchedConditions
,
"对账公司["
+
policy
.
getReconciliationCompany
()
+
"]"
);
if
(
unmatchedConditions
.
size
()
>
0
)
{
return
new
MatchResult
(
Collections
.
emptyList
(),
unmatchedConditions
);
}
...
...
@@ -741,7 +770,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
// 检查生效日期
currentList
=
filterAndCheck
(
currentList
,
i
->
isEffective
(
i
.
getEffectiveStart
(),
i
.
getEffectiveEnd
(),
effectiveDate
),
unmatchedConditions
,
"生效日期["
+
effectiveDate
+
"]"
);
unmatchedConditions
,
"生效日期["
+
DateUtil
.
format
(
effectiveDate
,
"yyyy-MM-dd"
)
+
"]"
);
if
(
unmatchedConditions
.
size
()
>
0
)
{
return
new
MatchResult
(
Collections
.
emptyList
(),
unmatchedConditions
);
}
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
View file @
3ea990f6
...
...
@@ -28,15 +28,12 @@ import com.yd.csf.service.vo.CommissionStatisticsVO;
import
com.yd.csf.service.vo.CommissionVO
;
import
com.yd.insurance.base.feign.client.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyFeignClient
;
import
com.yd.insurance.base.feign.request.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageRequest
;
import
com.yd.user.feign.client.sysdict.ApiSysDictFeignClient
;
import
com.yd.user.feign.response.sysdict.GetDictItemListByDictTypeResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.MapUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.support.TransactionSynchronization
;
...
...
@@ -272,7 +269,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if
(
policy
!=
null
)
{
// 填充保费、产品名称、保险公司、对账公司
commission
.
setPremium
(
String
.
valueOf
(
policy
.
getPaymentPremium
()));
commission
.
setCurrency
(
policy
.
getCurrency
());
commission
.
setPolicyCurrency
(
policy
.
getCurrency
());
commission
.
setProductLaunchBizId
(
policy
.
getProductLaunchBizId
());
commission
.
setInsuranceCompanyBizId
(
policy
.
getInsuranceCompanyBizId
());
...
...
@@ -299,7 +295,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
// 计算来佣金额(港币)
commission
.
setHkdAmount
(
calculateHKDAmount
(
commission
.
getAmount
(),
commission
.
get
ExchangeRate
(),
commission
.
get
Currency
()));
commission
.
setHkdAmount
(
calculateHKDAmount
(
commission
.
getAmount
(),
commission
.
getCurrency
()));
}
}
...
...
@@ -378,11 +374,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if
(
commission
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"未找到该来佣记录"
);
}
Policy
policy
=
null
;
if
(
StringUtils
.
isNotBlank
(
commission
.
getPolicyNo
()))
{
Policy
policy
=
policyService
.
lambdaQuery
().
eq
(
Policy:
:
getPolicyNo
,
commission
.
getPolicyNo
()).
one
();
policy
=
policyService
.
lambdaQuery
().
eq
(
Policy:
:
getPolicyNo
,
commission
.
getPolicyNo
()).
one
();
if
(
policy
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"保单不存在:"
+
commission
.
getPolicyNo
());
}
commission
.
setPolicyCurrency
(
policy
.
getCurrency
());
}
BigDecimal
requestAmount
=
commissionUpdateRequest
.
getAmount
();
...
...
@@ -401,10 +399,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
}
// 计算来佣金额(港币)
commission
.
setHkdAmount
(
calculateHKDAmount
(
requestAmount
,
commissionUpdateRequest
.
getExchangeRate
(),
commissionUpdateRequest
.
getCurrency
()));
commission
.
setHkdAmount
(
calculateHKDAmount
(
requestAmount
,
commissionUpdateRequest
.
getCurrency
()));
// 获取当前登录用户
AuthUserDto
currentLoginUser
=
SecurityUtil
.
getCurrentLoginUser
();
...
...
@@ -442,10 +437,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return
true
;
}
private
BigDecimal
calculateHKDAmount
(
BigDecimal
requestAmount
,
BigDecimal
exchangeRate
,
String
currency
)
{
private
BigDecimal
calculateHKDAmount
(
BigDecimal
requestAmount
,
String
currency
)
{
if
(
"HKD"
.
equalsIgnoreCase
(
currency
))
{
return
requestAmount
;
}
// 查询入账币种到港币的汇率
BigDecimal
exchangeRate
=
queryExchangeRateByFeign
(
currency
,
"HKD"
);
return
requestAmount
.
multiply
(
exchangeRate
);
}
...
...
@@ -629,6 +628,15 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
filteredExpectedFortuneList2
.
add
(
expectedFortune
);
}
// 2.3 校验预计发佣记录是否有出账币种、默认结算汇率
for
(
ExpectedFortune
expectedFortune
:
filteredExpectedFortuneList2
)
{
if
(
StringUtils
.
isBlank
(
expectedFortune
.
getCurrency
()))
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"预计发佣记录"
+
expectedFortune
.
getExpectedFortuneBizId
()
+
"未配置出账币种"
);
}
if
(
expectedFortune
.
getDefaultExchangeRate
()
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"预计发佣记录"
+
expectedFortune
.
getExpectedFortuneBizId
()
+
"未配置默认结算汇率"
);
}
}
// 3. 构建实际的初始发佣记录
List
<
Fortune
>
newFortuneList
=
buildNewFortunes
(
filteredExpectedFortuneList2
,
commissions
);
...
...
@@ -721,7 +729,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if
(
result
!=
null
&&
result
.
getData
()
!=
null
)
{
return
result
.
getData
();
}
return
null
;
return
BigDecimal
.
ONE
;
}
/**
...
...
@@ -748,7 +756,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"当前结算汇率不能为空"
);
}
// 获取保单币种
String
currency
=
commissionExpected
.
getCurrency
();
String
currency
=
commissionExpected
.
get
Policy
Currency
();
// 如果当前入账币种等于保单币种,直接计算来佣比例
if
(
StringUtils
.
equalsIgnoreCase
(
currentCurrency
,
currency
))
{
...
...
@@ -824,8 +832,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
for
(
CommissionAddRequest
request
:
customerAddRequestList
)
{
Commission
commission
=
new
Commission
();
BeanUtils
.
copyProperties
(
request
,
commission
);
// 计算来佣金额(港币)
commission
.
setHkdAmount
(
calculateHKDAmount
(
request
.
getAmount
(),
request
.
get
ExchangeRate
(),
request
.
get
Currency
()));
commission
.
setHkdAmount
(
calculateHKDAmount
(
request
.
getAmount
(),
request
.
getCurrency
()));
// 入账业务id
commission
.
setCommissionBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_COMMISSION
.
getCode
()));
// 关联业务id
...
...
@@ -838,7 +847,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission
.
setProductLaunchBizId
(
policy
.
getProductLaunchBizId
());
commission
.
setInsuranceCompanyBizId
(
policy
.
getInsuranceCompanyBizId
());
commission
.
setPremium
(
Convert
.
toStr
(
policy
.
getPaymentPremium
()));
commission
.
setCurrency
(
policy
.
getCurrency
());
commission
.
setPolicyCurrency
(
policy
.
getCurrency
());
}
else
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"保单不存在, policyNo: "
+
request
.
getPolicyNo
());
...
...
@@ -857,23 +865,24 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionList
.
add
(
commission
);
}
// 提交事务,保存数据
transactionTemplate
.
execute
(
status
->
{
saveOrUpdateBatch
(
commissionList
);
return
null
;
});
// 1. 先保存主数据
saveOrUpdateBatch
(
commissionList
);
// 开启新事务,比对数据
transactionTemplate
.
execute
(
status
->
{
try
{
commissionAsyncService
.
commissionCompareBatch
(
commissionList
);
}
catch
(
Exception
e
)
{
// 比对失败不影响主事务,记录日志即可
e
.
printStackTrace
();
log
.
error
(
"批量新增, 比对操作执行失败, error: {}"
,
e
.
getMessage
());
}
return
null
;
});
// 2. 事务提交后执行比对
TransactionSynchronizationManager
.
registerSynchronization
(
new
TransactionSynchronization
()
{
@Override
public
void
afterCommit
()
{
try
{
// 这里会开启新事务执行更新
commissionAsyncService
.
commissionCompareBatch
(
commissionList
);
}
catch
(
Exception
e
)
{
log
.
error
(
"比对更新失败"
,
e
);
// 可以发送告警或记录失败任务
}
}
}
);
return
commissionList
;
}
...
...
@@ -941,6 +950,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if
(
ObjectUtils
.
isEmpty
(
request
.
getAmount
()))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"入账金额不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
request
.
getExchangeRate
()))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"结算汇率不能为空"
);
}
if
(
"R"
.
equals
(
request
.
getCommissionBizType
()))
{
// 校验保单号是否存在
if
(
ObjectUtils
.
isEmpty
(
request
.
getExchangeRate
()))
{
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/ExpectedFortuneServiceImpl.java
View file @
3ea990f6
...
...
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest
;
import
com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse
;
import
com.yd.csf.service.enums.CurrencyEnum
;
import
com.yd.csf.service.model.ExpectedFortune
;
import
com.yd.csf.service.dao.ExpectedFortuneMapper
;
import
com.yd.csf.service.model.Policy
;
...
...
@@ -133,6 +134,8 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
ApiExpectedFortunePageResponse
vo
=
new
ApiExpectedFortunePageResponse
();
BeanUtils
.
copyProperties
(
ef
,
vo
);
vo
.
setCurrency
(
CurrencyEnum
.
toLabel
(
ef
.
getCurrency
()));
String
ratio
=
finalBrokerRatioMap
.
get
(
ef
.
getBrokerBizId
());
vo
.
setCommissionRatio
(
ratio
);
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneAccountServiceImpl.java
View file @
3ea990f6
...
...
@@ -122,7 +122,9 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
FortuneAccount
fortuneAccount
=
new
FortuneAccount
();
fortuneAccount
.
setFortuneAccountBizId
(
RandomStringGenerator
.
generateBizId16
(
"fortune_account"
));
fortuneAccount
.
setBroker
(
accountExportDTO
.
getBroker
());
fortuneAccount
.
setBrokerBizId
(
accountExportDTO
.
getBrokerBizId
());
fortuneAccount
.
setTeam
(
accountExportDTO
.
getTeam
());
fortuneAccount
.
setTeamBizId
(
accountExportDTO
.
getTeamBizId
());
fortuneAccount
.
setCurrency
(
accountExportDTO
.
getCurrency
());
fortuneAccount
.
setHkdAmount
(
accountExportDTO
.
getAmount
());
fortuneAccount
.
setFortuneAccountDate
(
currentDate
);
...
...
@@ -161,6 +163,10 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
updateFortune
.
setId
(
item
.
getId
());
updateFortune
.
setFortuneAccountBizId
(
fortuneAccountBizId
);
updateFortune
.
setStatus
(
FortuneStatusEnum
.
CHECKED
.
getItemValue
());
// 处理金额字段
updateFortune
.
setCurrentPaymentHkdAmount
(
item
.
getHkdAmount
());
updateFortune
.
setCurrentPaymentRatio
(
BigDecimal
.
valueOf
(
100
));
updateFortune
.
setReconciliationOperator
(
currentLoginUser
.
getUsername
());
updateFortuneList
.
add
(
updateFortune
);
}
}
...
...
@@ -283,6 +289,10 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
.
list
();
if
(
CollectionUtils
.
isNotEmpty
(
fortunes
))
{
fortunes
.
forEach
(
f
->
{
if
(
f
.
getCurrentPaymentHkdAmount
()
==
null
)
{
f
.
setCurrentPaymentHkdAmount
(
f
.
getHkdAmount
());
f
.
setCurrentPaymentRatio
(
BigDecimal
.
valueOf
(
100
));
}
f
.
setStatus
(
FortuneStatusEnum
.
SENT
.
getItemValue
());
f
.
setActualPayoutDate
(
new
Date
());
f
.
setUpdaterId
(
loginUserId
.
toString
());
...
...
@@ -306,20 +316,20 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
.
last
(
"FOR UPDATE"
)
.
list
();
// 4.3 全量汇总:把同一 expected_fortune 下所有 fortune 的 current_payment_amount 求和
// 4.3 全量汇总:把同一 expected_fortune 下所有 fortune 的 current_payment_
hkd_
amount 求和
Map
<
String
,
BigDecimal
>
paidMap
=
fortuneService
.
lambdaQuery
()
.
in
(
Fortune:
:
getExpectedFortuneBizId
,
expectedIds
)
.
eq
(
Fortune:
:
getStatus
,
FortuneStatusEnum
.
SENT
.
getItemValue
())
.
list
()
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
Fortune:
:
getExpectedFortuneBizId
,
Collectors
.
mapping
(
Fortune:
:
getCurrentPaymentAmount
,
Collectors
.
mapping
(
Fortune:
:
getCurrentPayment
Hkd
Amount
,
Collectors
.
reducing
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
))));
// 4.4 反写 expected_fortune
expectedList
.
forEach
(
ef
->
{
BigDecimal
totalPaid
=
paidMap
.
getOrDefault
(
ef
.
getExpectedFortuneBizId
(),
BigDecimal
.
ZERO
);
BigDecimal
totalAmount
=
ef
.
getAmount
();
BigDecimal
totalAmount
=
ef
.
get
Hkd
Amount
();
BigDecimal
unpaid
=
totalAmount
.
subtract
(
totalPaid
);
String
newStatus
;
...
...
@@ -339,6 +349,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
.
set
(
ExpectedFortune:
:
getUnpaidRatio
,
unpaid
.
divide
(
totalAmount
,
4
,
RoundingMode
.
HALF_UP
).
multiply
(
BigDecimal
.
valueOf
(
100
)))
.
set
(
ExpectedFortune:
:
getStatus
,
newStatus
)
.
set
(
ExpectedFortune:
:
getActualPayoutDate
,
new
Date
())
.
set
(
ExpectedFortune:
:
getUpdaterId
,
loginUserId
.
toString
())
.
set
(
ExpectedFortune:
:
getUpdateTime
,
LocalDateTime
.
now
())
.
eq
(
ExpectedFortune:
:
getId
,
ef
.
getId
())
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneServiceImpl.java
View file @
3ea990f6
This diff is collapsed.
Click to expand it.
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyFollowServiceImpl.java
View file @
3ea990f6
...
...
@@ -113,17 +113,17 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
String
appointmentNo
=
policyFollowQueryRequest
.
getAppointmentNo
();
Date
signDateStart
=
policyFollowQueryRequest
.
getSignDateStart
();
Date
signDateEnd
=
policyFollowQueryRequest
.
getSignDateEnd
();
Date
latestPaymentDate
=
policyFollowQueryRequest
.
getLatestPaymentDate
();
String
latestPaymentDate
=
policyFollowQueryRequest
.
getLatestPaymentDate
();
List
<
String
>
insuranceCompanyBizIdList
=
policyFollowQueryRequest
.
getInsuranceCompanyBizIdList
();
List
<
String
>
productLaunchBizIdList
=
policyFollowQueryRequest
.
getProductLaunchBizIdList
();
String
issueNumber
=
policyFollowQueryRequest
.
getIssueNumber
();
Integer
issueNumber
=
policyFollowQueryRequest
.
getIssueNumber
();
queryWrapper
.
like
(
ObjectUtils
.
isNotEmpty
(
policyNo
),
"policy_no"
,
policyNo
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
status
),
"status"
,
status
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
appointmentNo
),
"appointment_no"
,
appointmentNo
);
queryWrapper
.
ge
(
ObjectUtils
.
isNotEmpty
(
signDateStart
),
"sign_date"
,
signDateStart
);
queryWrapper
.
le
(
ObjectUtils
.
isNotEmpty
(
signDateEnd
),
"sign_date"
,
signDateEnd
);
queryWrapper
.
ge
(
ObjectUtils
.
isNotEmpty
(
latestPaymentDate
),
"latest_payment_date"
,
latestPaymentDate
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
latestPaymentDate
),
"latest_payment_date"
,
latestPaymentDate
);
if
(
CollectionUtils
.
isNotEmpty
(
insuranceCompanyBizIdList
))
{
queryWrapper
.
in
(
"insurance_company_biz_id"
,
insuranceCompanyBizIdList
);
...
...
@@ -503,20 +503,21 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if
(
policy
==
null
)
{
throw
new
BusinessException
(
ErrorCode
.
NOT_FOUND_ERROR
.
getCode
(),
"policy不存在"
);
}
BigDecimal
paymentPremium
=
policy
.
getPaymentPremium
();
if
(
paymentPremium
==
null
)
{
throw
new
BusinessException
(
"期交保费不能为空"
);
}
Object
paymentTerm
=
policy
.
getPaymentTerm
();
if
(
paymentTerm
==
null
)
{
throw
new
BusinessException
(
"供款期数不能为空"
);
}
// 新单跟进,校验 policy 数据
policyFollowChangeStatusValidPolicy
(
policy
);
// 新单跟进,校验 policyFollow 数据
policyFollowChangeStatusValidPolicyFollow
(
policyFollow
);
policy
.
setPolicyNo
(
policyFollow
.
getPolicyNo
());
policy
.
setPolicyHolderAge
(
calculatePolicyHolderAge
(
policyFollow
.
getCustomerBizId
()));
policy
.
setCoolingOffEndDate
(
policyFollow
.
getCoolingOffEndDate
());
policy
.
setReconciliationCompanyBizId
(
policyFollow
.
getReconciliationCompanyBizId
());
policy
.
setReconciliationCompanyCode
(
policyFollow
.
getReconciliationCompanyCode
());
policy
.
setReconciliationCompany
(
policyFollow
.
getReconciliationCompany
());
policy
.
setInsuranceCompanyBizId
(
policyFollow
.
getInsuranceCompanyBizId
());
policy
.
setInsuranceCompany
(
policyFollow
.
getInsuranceCompany
());
policy
.
setProductName
(
policyFollow
.
getProductName
());
// 更新保单状态为生效
policy
.
setStatus
(
PolicyStatusEnum
.
INFORCE
.
getItemValue
());
// 手动映射不同名的字段
...
...
@@ -529,20 +530,24 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
//冷静期结束日期
policy
.
setCoolingOffEndDate
(
changePolicyFollowStatusRequest
.
getCoolingOffEndDate
()
!=
null
?
changePolicyFollowStatusRequest
.
getCoolingOffEndDate
()
:
policy
.
getCoolingOffEndDate
());
if
(
ObjectUtils
.
isEmpty
(
policy
.
getInsuranceCompany
())
||
ObjectUtils
.
isEmpty
(
policy
.
getInsuranceCompany
()))
{
// 获取保单产品信息,填充对账公司相关字段
PolicyProductInfo
productInfo
=
getPolicyProductInfo
(
policyFollow
.
getProductLaunchBizId
());
if
(
productInfo
!=
null
)
{
policy
.
setInsuranceCompany
(
productInfo
.
getInsuranceCompany
());
policy
.
setInsuranceCompanyBizId
(
productInfo
.
getInsuranceCompanyBizId
());
if
(
ObjectUtils
.
isEmpty
(
policy
.
getReconciliationCompany
()))
{
policy
.
setReconciliationCompany
(
productInfo
.
getReconciliationCompany
());
}
if
(
ObjectUtils
.
isEmpty
(
policy
.
getReconciliationCompanyBizId
()))
{
policy
.
setReconciliationCompanyBizId
(
productInfo
.
getReconciliationCompanyBizId
());
}
}
}
// if (ObjectUtils.isEmpty(policy.getInsuranceCompany()) || ObjectUtils.isEmpty(policy.getInsuranceCompanyBizId())) {
// // 获取保单产品信息,填充对账公司相关字段
// PolicyProductInfo productInfo = getPolicyProductInfo(policyFollow.getProductLaunchBizId());
// if (productInfo != null) {
// if (ObjectUtils.isNotEmpty(productInfo.getInsuranceCompany())) {
// policy.setInsuranceCompany(productInfo.getInsuranceCompany());
// }
// if (ObjectUtils.isNotEmpty(productInfo.getInsuranceCompanyBizId())) {
// policy.setInsuranceCompanyBizId(productInfo.getInsuranceCompanyBizId());
// }
// if (ObjectUtils.isNotEmpty(productInfo.getReconciliationCompanyBizId())) {
// policy.setReconciliationCompany(productInfo.getReconciliationCompany());
// }
// if (ObjectUtils.isNotEmpty(productInfo.getReconciliationCompanyBizId())) {
// policy.setReconciliationCompanyBizId(productInfo.getReconciliationCompanyBizId());
// }
// }
// }
// 保存保单
policyService
.
updateById
(
policy
);
...
...
@@ -573,6 +578,41 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return
true
;
}
private
void
policyFollowChangeStatusValidPolicyFollow
(
PolicyFollow
policyFollow
)
{
if
(
ObjectUtils
.
isEmpty
(
policyFollow
.
getReconciliationCompanyBizId
()))
{
throw
new
BusinessException
(
"新单跟进-基础数据,reconciliationCompanyBizId 不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
policyFollow
.
getReconciliationCompanyCode
()))
{
throw
new
BusinessException
(
"新单跟进-基础数据,reconciliationCompanyCode 不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
policyFollow
.
getReconciliationCompany
()))
{
throw
new
BusinessException
(
"新单跟进-基础数据,reconciliationCompany 不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
policyFollow
.
getInsuranceCompanyBizId
()))
{
throw
new
BusinessException
(
"新单跟进-基础数据,insuranceCompanyBizId 不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
policyFollow
.
getInsuranceCompany
()))
{
throw
new
BusinessException
(
"新单跟进-基础数据,insuranceCompany 不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
policyFollow
.
getProductName
()))
{
throw
new
BusinessException
(
"新单跟进-基础数据,productName 不能为空"
);
}
if
(
ObjectUtils
.
isEmpty
(
policyFollow
.
getProductLaunchBizId
()))
{
throw
new
BusinessException
(
"新单跟进-基础数据,productLaunchBizId 不能为空"
);
}
}
private
void
policyFollowChangeStatusValidPolicy
(
Policy
policy
)
{
BigDecimal
paymentPremium
=
policy
.
getPaymentPremium
();
if
(
paymentPremium
==
null
)
{
throw
new
BusinessException
(
"期交保费不能为空"
);
}
Object
paymentTerm
=
policy
.
getPaymentTerm
();
if
(
paymentTerm
==
null
)
{
throw
new
BusinessException
(
"供款期数不能为空"
);
}
}
private
BigDecimal
calculateTotalPaymentPremium
(
Policy
policy
)
{
BigDecimal
paymentPremium
=
policy
.
getPaymentPremium
();
Object
paymentTerm
=
policy
.
getPaymentTerm
();
...
...
@@ -667,9 +707,11 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
currency
=
"USD"
;
break
;
case
"人民幣"
:
case
"人民币"
:
currency
=
"CNY"
;
break
;
case
"港幣"
:
case
"港币"
:
currency
=
"HKD"
;
break
;
case
"澳元"
:
...
...
@@ -682,6 +724,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
currency
=
"EUR"
;
break
;
case
"英鎊"
:
case
"英镑"
:
currency
=
"GBP"
;
break
;
case
"新加坡元"
:
...
...
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionExpectedStatisticsVO.java
View file @
3ea990f6
package
com
.
yd
.
csf
.
service
.
vo
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
...
...
@@ -39,4 +40,13 @@ public class CommissionExpectedStatisticsVO {
*/
@Schema
(
description
=
"总保单数"
)
private
Integer
totalPolicyCount
;
/**
* 总保费(HKD)
*/
@Schema
(
description
=
"总保费(HKD)"
)
private
BigDecimal
totalPremium
;
@JsonIgnore
private
String
policyNos
;
}
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionVO.java
View file @
3ea990f6
package
com
.
yd
.
csf
.
service
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.yd.csf.service.enums.CommissionStatusEnum
;
import
com.yd.csf.service.model.Commission
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
...
...
@@ -165,6 +166,12 @@ public class CommissionVO implements Serializable {
private
String
commissionStatus
;
/**
* 比对状态名称
*/
@Schema
(
description
=
"比对状态 0=未比对 1=比对成功 2=比对失败 3=未匹配到预计入账记录 字典值: csf_commission_status"
)
private
String
commissionStatusName
;
/**
* 预计来佣业务id
*/
@Schema
(
description
=
"预计来佣业务id"
)
...
...
@@ -246,7 +253,9 @@ public class CommissionVO implements Serializable {
}
CommissionVO
commissionVO
=
new
CommissionVO
();
BeanUtils
.
copyProperties
(
commission
,
commissionVO
);
commissionVO
.
setCommissionStatus
(
commission
.
getStatus
());
commissionVO
.
setCommissionStatusName
(
CommissionStatusEnum
.
toLabel
(
commission
.
getStatus
()));
return
commissionVO
;
}
}
yd-csf-service/src/main/java/com/yd/csf/service/vo/FortuneVO.java
View file @
3ea990f6
package
com
.
yd
.
csf
.
service
.
vo
;
import
cn.hutool.core.util.NumberUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.yd.csf.service.
model.ExpectedFortune
;
import
com.yd.csf.service.
enums.CurrencyEnum
;
import
com.yd.csf.service.model.Fortune
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
...
...
@@ -9,7 +11,6 @@ import org.springframework.beans.BeanUtils;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDate
;
import
java.util.Date
;
...
...
@@ -232,7 +233,7 @@ public class FortuneVO implements Serializable {
*/
@Schema
(
description
=
"出账日(实)"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Local
Date
actualPayoutDate
;
private
Date
actualPayoutDate
;
/**
* 是否含税 0=No, 1=Yes
...
...
@@ -328,12 +329,16 @@ public class FortuneVO implements Serializable {
}
FortuneVO
fortuneVO
=
new
FortuneVO
();
BeanUtils
.
copyProperties
(
fortune
,
fortuneVO
);
// 待出账比例
if
(
fortuneVO
.
getCurrentPaymentRatio
()
!=
null
)
{
fortuneVO
.
setFortuneUnpaidRatio
(
BigDecimal
.
valueOf
(
100
).
subtract
(
fortuneVO
.
getCurrentPaymentRatio
()));
}
else
{
fortuneVO
.
setFortuneUnpaidRatio
(
BigDecimal
.
valueOf
(
100
));
}
// 计算待出账比例
BigDecimal
currentPaymentRatio
=
ObjectUtil
.
defaultIfNull
(
fortuneVO
.
getCurrentPaymentRatio
(),
BigDecimal
.
ZERO
);
fortuneVO
.
setCurrentPaymentRatio
(
currentPaymentRatio
);
fortuneVO
.
setFortuneUnpaidRatio
(
BigDecimal
.
valueOf
(
100
).
subtract
(
currentPaymentRatio
));
fortuneVO
.
setFortunePaidAmount
(
fortune
.
getCurrentPaymentHkdAmount
());
fortuneVO
.
setFortuneUnpaidAmount
(
NumberUtil
.
sub
(
fortune
.
getHkdAmount
(),
fortune
.
getCurrentPaymentHkdAmount
()));
fortuneVO
.
setCurrency
(
CurrencyEnum
.
toLabel
(
fortune
.
getCurrency
()));
fortuneVO
.
setPolicyCurrency
((
CurrencyEnum
.
toLabel
(
fortune
.
getPolicyCurrency
())));
return
fortuneVO
;
}
...
...
yd-csf-service/src/main/resources/mappers/CommissionExpectedMapper.xml
View file @
3ea990f6
...
...
@@ -11,6 +11,7 @@
<result
property=
"commissionBizType"
column=
"commission_biz_type"
/>
<result
property=
"policyNo"
column=
"policy_no"
/>
<result
property=
"premium"
column=
"premium"
/>
<result
property=
"policyCurrency"
column=
"policy_currency"
/>
<result
property=
"insuranceCompanyBizId"
column=
"insurance_company_biz_id"
/>
<result
property=
"productLaunchBizId"
column=
"product_launch_biz_id"
/>
<result
property=
"reconciliationCompany"
column=
"reconciliation_company"
/>
...
...
@@ -41,7 +42,7 @@
<sql
id=
"Base_Column_List"
>
id,commission_expected_biz_id,receivable_no,commission_biz_type,
policy_no,premium,insurance_company_biz_id,product_launch_biz_id,
policy_no,premium,
policy_currency,
insurance_company_biz_id,product_launch_biz_id,
reconciliation_company,reconciliation_company_code,reconciliation_company_biz_id,commission_period,
total_period,commission_name,commission_type,commission_ratio,amount,currency,default_exchange_rate,expected_amount,
commission_date,status,status_desc,paid_amount,paid_ratio,remark,is_deleted,creator_id,
...
...
@@ -52,9 +53,10 @@
SELECT
IFNULL(SUM(expected_amount),0) AS totalAmount,
IFNULL(SUM(paid_amount),0) AS totalPaidAmount,
COUNT(DISTINCT policy_no) AS totalPolicyCount
COUNT(DISTINCT policy_no) AS totalPolicyCount,
GROUP_CONCAT(DISTINCT policy_no) AS policyNos
FROM
commission_expected
commission_expected
ce
<where>
<if
test=
"expectedIds != null and expectedIds.size > 0"
>
id IN
...
...
@@ -73,7 +75,7 @@
MAX(ce.reconciliation_company_biz_id) as reconciliationCompanyBizId,
ce.commission_period as commissionPeriod,
MAX(ce.total_period) as totalPeriod,
DATE_ADD(DATE_ADD(MAX(p.effective_date), INTERVAL 2 MONTH), INTERVAL (ce.commission_period - 1) YEAR
) as commissionDate,
MAX(ce.commission_date
) as commissionDate,
ifnull(avg(ce.commission_ratio), 0) as commissionRatio,
ifnull(sum(ce.amount), 0) as amount,
MAX(ce.currency) as currency,
...
...
yd-csf-service/src/main/resources/mappers/CommissionMapper.xml
View file @
3ea990f6
...
...
@@ -107,7 +107,7 @@
) as expectePaidAmount,
COUNT(DISTINCT c.policy_no) as totalPolicyCount,
COALESCE(p.total_payment_premium * e.default_exchange_rate, 0) AS totalPremium,
COUNT(DISTINCT c.reconciliation_company) as reconciliationCompanyCount,
COUNT(DISTINCT c.reconciliation_company
_code
) as reconciliationCompanyCount,
COUNT(DISTINCT c.id) as totalCompareCommissionCount,
SUM(CASE WHEN c.status = '1' THEN 1 ELSE 0 END) as successCompareCommissionCount,
SUM(CASE WHEN c.status = '2' THEN 1 ELSE 0 END) as failedCompareCommissionCount
...
...
yd-csf-service/src/main/resources/mappers/FortuneAccountMapper.xml
View file @
3ea990f6
...
...
@@ -8,6 +8,9 @@
<id
property=
"id"
column=
"id"
/>
<result
property=
"fortuneAccountBizId"
column=
"fortune_account_biz_id"
/>
<result
property=
"broker"
column=
"broker"
/>
<result
property=
"brokerBizId"
column=
"broker_biz_id"
/>
<result
property=
"team"
column=
"team"
/>
<result
property=
"teamBizId"
column=
"team_biz_id"
/>
<result
property=
"currency"
column=
"currency"
/>
<result
property=
"amount"
column=
"amount"
/>
<result
property=
"hkdAmount"
column=
"hkd_amount"
/>
...
...
@@ -23,7 +26,8 @@
</resultMap>
<sql
id=
"Base_Column_List"
>
id,fortune_account_biz_id,broker,currency,amount,hkd_amount,status,fortune_account_date,content,remark,
id,fortune_account_biz_id,broker,broker_biz_id,team,team_biz_id,
currency,amount,hkd_amount,status,fortune_account_date,content,remark,
is_deleted,creator_id,updater_id,create_time,update_time
</sql>
</mapper>
yd-csf-service/src/main/resources/mappers/FortuneMapper.xml
View file @
3ea990f6
...
...
@@ -63,13 +63,13 @@
<select
id=
"getFortuneStatistics"
resultType=
"com.yd.csf.service.dto.FortuneStatisticsVO"
>
SELECT
f.policy_no,
SUM(CASE WHEN f.is_part = '0' THEN f.hkd_amount ELSE 0 END
) AS amount,
IFNULL(SUM(CASE WHEN f.is_part = '0' THEN f.hkd_amount ELSE 0 END),0
) AS amount,
SUM(CASE WHEN f.status = '2' THEN f.current_payment_hkd_amount ELSE 0 END) AS sentAmount,
IFNULL(
(select sum(unpaid_amount)
from expected_fortune where status = '0' and policy_no = f.policy_no
),0) AS pendingOutAmount,
SUM(CASE WHEN f.status in ('6','1') THEN f.current_payment_hkd_amount ELSE 0 END
) AS availableOutAmount,
IFNULL(SUM(CASE WHEN f.status in ('6','1') THEN f.current_payment_hkd_amount ELSE 0 END),0
) AS availableOutAmount,
COUNT(DISTINCT f.policy_no) AS totalPolicyCount
FROM fortune f
WHERE 1 = 1
...
...
yd-csf-service/src/main/resources/mappers/PolicyFollowMapper.xml
View file @
3ea990f6
...
...
@@ -82,6 +82,7 @@
<result
property=
"updaterId"
column=
"updater_id"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
<result
property=
"policyType"
column=
"policy_type"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
...
...
@@ -99,7 +100,7 @@
mailing_method,renewal_payment_method,dividend_distribution_method,delivery_no,
policy_levy,initial_premium_paid,initial_premium_due,latest_payment_date,broker_sign_date,
insurer_mailing_date,customer_sign_date,attachments,remark,is_deleted,
creator_id,updater_id,create_time,update_time
creator_id,updater_id,create_time,update_time
,policy_type
</sql>
<select
id=
"queryPolicyReportData"
resultType=
"com.yd.csf.service.dto.PolicyReportData"
>
...
...
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