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
c7598e16
Commit
c7598e16
authored
Dec 16, 2025
by
jianan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
应收管理、应付管理1
parent
477ad0a9
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
1263 additions
and
188 deletions
+1263
-188
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionController.java
+42
-4
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiExpectedFortuneController.java
+47
-5
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiFortuneController.java
+1
-1
yd-csf-api/src/main/java/com/yd/csf/api/dto/CommissionExcelDTO.java
+8
-0
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiExpectedFortuneService.java
+9
-0
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
+105
-12
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ApiExpectedFortunePageRequest.java
+14
-5
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ExpectedFortuneAddRequest.java
+10
-0
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ExpectedFortuneDto.java
+139
-0
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ExpectedFortuneUpdateRequest.java
+39
-0
yd-csf-feign/src/main/java/com/yd/csf/feign/response/expectedfortune/ApiExpectedFortunePageResponse.java
+18
-0
yd-csf-feign/src/main/java/com/yd/csf/feign/response/expectedfortune/PolicyInfo.java
+177
-0
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionExpectedAddDto.java
+18
-0
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionExpectedQueryRequest.java
+58
-6
yd-csf-service/src/main/java/com/yd/csf/service/dto/FortuneQueryRequest.java
+2
-2
yd-csf-service/src/main/java/com/yd/csf/service/dto/GenerateFortuneRequest.java
+7
-0
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyDto.java
+2
-3
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyFollowAggregateDto.java
+2
-1
yd-csf-service/src/main/java/com/yd/csf/service/model/Commission.java
+15
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionCompareRecord.java
+12
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionExpected.java
+20
-0
yd-csf-service/src/main/java/com/yd/csf/service/model/ExpectedFortune.java
+29
-3
yd-csf-service/src/main/java/com/yd/csf/service/model/Fortune.java
+7
-1
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionAsyncService.java
+153
-3
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionService.java
+2
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/IExpectedFortuneService.java
+2
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/ReceivableService.java
+81
-0
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
+60
-33
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
+47
-68
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/ExpectedFortuneServiceImpl.java
+46
-5
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneServiceImpl.java
+4
-2
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionExpectedStatisticsVO.java
+6
-6
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionExpectedVO.java
+41
-17
yd-csf-service/src/main/java/com/yd/csf/service/vo/ExpectedFortuneStatisticsVO.java
+3
-3
yd-csf-service/src/main/java/com/yd/csf/service/vo/FortuneVO.java
+8
-2
yd-csf-service/src/main/java/com/yd/csf/service/vo/PolicyVO.java
+14
-1
yd-csf-service/src/main/resources/mappers/CommissionCompareRecordMapper.xml
+3
-1
yd-csf-service/src/main/resources/mappers/CommissionExpectedMapper.xml
+8
-3
yd-csf-service/src/main/resources/mappers/CommissionMapper.xml
+4
-1
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionController.java
View file @
c7598e16
...
...
@@ -12,6 +12,7 @@ import com.yd.common.result.Result;
import
com.yd.csf.api.dto.CommissionExcelDTO
;
import
com.yd.csf.service.common.ErrorCode
;
import
com.yd.csf.service.dto.*
;
import
com.yd.csf.service.enums.CommissionStatusEnum
;
import
com.yd.csf.service.model.Commission
;
import
com.yd.csf.service.model.CommissionCompareRecord
;
import
com.yd.csf.service.model.CommissionEditRecord
;
...
...
@@ -80,6 +81,15 @@ public class ApiCommissionController {
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
"Excel读取失败"
,
e
);
}
// 根据来佣检核年月查询是否已存在来佣记录
List
<
Commission
>
existingCommissions
=
commissionService
.
list
(
new
QueryWrapper
<
Commission
>()
.
eq
(
"reconciliation_year_month"
,
dataList
.
get
(
0
).
getReconciliationYearMonth
()));
boolean
isAllCompareSuccess
=
existingCommissions
.
stream
()
.
allMatch
(
commission
->
commission
.
getStatus
().
equals
(
CommissionStatusEnum
.
COMPARE_SUCCESS
.
getItemValue
()));
if
(
isAllCompareSuccess
)
{
// 所有来佣记录都已检核成功,不允许上传新记录
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"当前来佣检核年月所有记录都已检核成功,不允许上传新记录,若需更新请手动操作"
);
}
// 数据校验
validateCommissionUpload
(
dataList
);
...
...
@@ -88,6 +98,10 @@ public class ApiCommissionController {
AuthUserDto
currentLoginUser
=
SecurityUtil
.
getCurrentLoginUser
();
String
loginUserId
=
currentLoginUser
.
getId
().
toString
();
// 先删除已存在的来佣记录
commissionService
.
remove
(
new
LambdaQueryWrapper
<
Commission
>()
.
eq
(
Commission:
:
getReconciliationYearMonth
,
dataList
.
get
(
0
).
getReconciliationYearMonth
()));
// 数据处理
List
<
Commission
>
entities
=
processData
(
dataList
,
loginUserId
);
...
...
@@ -120,6 +134,10 @@ public class ApiCommissionController {
}
StringBuilder
errorMsg
=
new
StringBuilder
();
for
(
CommissionExcelDTO
excelDTO
:
dataList
)
{
// 校验入账检核年月是否为空
if
(
StringUtils
.
isBlank
(
excelDTO
.
getReconciliationYearMonth
()))
{
errorMsg
.
append
(
"第"
).
append
(
dataList
.
indexOf
(
excelDTO
)
+
1
).
append
(
"行入账检核年月不能为空"
);
}
// 校验必填字段是否为空
if
(
StringUtils
.
isBlank
(
excelDTO
.
getPolicyNo
())
||
StringUtils
.
isBlank
(
excelDTO
.
getReconciliationCompany
())
||
...
...
@@ -133,6 +151,10 @@ public class ApiCommissionController {
if
(
excelDTO
.
getAmount
().
compareTo
(
BigDecimal
.
ZERO
)
<=
0
)
{
errorMsg
.
append
(
"第"
).
append
(
dataList
.
indexOf
(
excelDTO
)
+
1
).
append
(
"行来佣金额必须为正数"
);
}
// 如果没有保单号,应收账款编号不能为空
if
(
StringUtils
.
isBlank
(
excelDTO
.
getPolicyNo
())
&&
StringUtils
.
isBlank
(
excelDTO
.
getReceivableNo
()))
{
errorMsg
.
append
(
"第"
).
append
(
dataList
.
indexOf
(
excelDTO
)
+
1
).
append
(
"行无保单号时应收账款编号不能为空"
);
}
}
if
(
errorMsg
.
length
()
>
0
)
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
errorMsg
.
toString
());
...
...
@@ -157,19 +179,19 @@ public class ApiCommissionController {
}
/**
* 生成
可出账(发佣)记录,支持手动复选框选择
* 生成
实际出账(发佣)记录
*
* @param generateFortuneRequest
* @param request
* @return
*/
@PostMapping
(
"/generate/fortune"
)
@Operation
(
summary
=
"生成
可出账(发佣)记录,支持手动复选框选择
"
)
@Operation
(
summary
=
"生成
实际出账(发佣)记录
"
)
public
Result
<
Boolean
>
generateFortune
(
@RequestBody
GenerateFortuneRequest
generateFortuneRequest
,
HttpServletRequest
request
)
{
List
<
String
>
commissionBizIdList
=
generateFortuneRequest
.
getCommissionBizIdList
();
if
(
CollectionUtils
.
isEmpty
(
commissionBizIdList
))
{
return
Result
.
fail
(
ErrorCode
.
PARAMS_ERROR
.
getCode
(),
"commissionBizIdList不能为空"
);
if
(
CollectionUtils
.
isEmpty
(
commissionBizIdList
)
||
CollectionUtils
.
isEmpty
(
generateFortuneRequest
.
getExpectedFortuneIdList
())
)
{
return
Result
.
fail
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
ResultCode
.
PARAMS_ERROR
.
getMessage
()
);
}
return
Result
.
success
(
commissionService
.
generateFortune
(
generateFortuneRequest
));
}
...
...
@@ -191,6 +213,22 @@ public class ApiCommissionController {
}
/**
* 批量新增保单来佣
*
* @param customerAddRequestList
* @param request
* @return
*/
@Operation
(
summary
=
"批量新增保单来佣"
)
@PostMapping
(
"/addBatch"
)
public
Result
<
Boolean
>
addCommissionBatch
(
@RequestBody
List
<
CommissionAddRequest
>
customerAddRequestList
,
HttpServletRequest
request
)
{
if
(
CollectionUtils
.
isEmpty
(
customerAddRequestList
))
{
return
Result
.
fail
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"来佣数据不能为空"
);
}
return
Result
.
success
(
commissionService
.
addCommissionBatch
(
customerAddRequestList
));
}
/**
* 来佣比对记录列表
*/
@PostMapping
(
"/compare/records"
)
...
...
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiExpectedFortuneController.java
View file @
c7598e16
...
...
@@ -8,15 +8,14 @@ import com.yd.csf.api.dto.ApiExpectedFortuneLogDto;
import
com.yd.csf.api.service.ApiExpectedFortuneLogService
;
import
com.yd.csf.api.service.ApiExpectedFortuneService
;
import
com.yd.csf.feign.client.expectedfortune.ApiExpectedFortuneFeignClient
;
import
com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest
;
import
com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest
;
import
com.yd.csf.feign.request.expectedfortune.ExpectedFortuneStatisticsRequest
;
import
com.yd.csf.feign.request.expectedfortune.*
;
import
com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse
;
import
com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse
;
import
com.yd.csf.service.common.ErrorCode
;
import
com.yd.csf.service.vo.ExpectedFortuneStatisticsVO
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -24,6 +23,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.Map
;
/**
* 预计发佣信息
*
...
...
@@ -75,17 +76,28 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie
}
/**
* 分页查询 -
应付款管理列表(预计发佣列表)
* 分页查询 -
预计发佣
* @param request
* @return
*/
@Override
@Operation
(
summary
=
"分页查询 -
应付款管理列表(预计发佣列表)
"
)
@Operation
(
summary
=
"分页查询 -
预计发佣
"
)
public
Result
<
IPage
<
ApiExpectedFortunePageResponse
>>
page
(
ApiExpectedFortunePageRequest
request
)
{
return
apiExpectedFortuneService
.
page
(
request
);
}
/**
* 分页查询 - 应付款管理列表(预计发佣列表)
* @param request
* @return
*/
@PostMapping
(
"/list"
)
@Operation
(
summary
=
"分页查询 - 应付款管理列表(预计发佣列表)"
)
public
Result
<
Map
<
String
,
Object
>>
list
(
@RequestBody
ApiExpectedFortunePageRequest
request
)
{
return
apiExpectedFortuneService
.
list
(
request
);
}
/**
* 计算统计数据 预计发佣金额 HKD、已出账金额 HKD、待出账金额 HKD、总保单数、总保费 HKD
*/
@PostMapping
(
"/statistics"
)
...
...
@@ -98,6 +110,36 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie
}
/**
* 新增应付账款,可批量
*
* @param request
* @return
*/
@PostMapping
(
"/add"
)
@Operation
(
summary
=
"新增应付账款,可批量"
)
public
Result
<
Boolean
>
add
(
@RequestBody
ExpectedFortuneAddRequest
request
)
{
if
(
request
==
null
||
CollectionUtils
.
isEmpty
(
request
.
getAddList
()))
{
return
Result
.
fail
(
ErrorCode
.
PARAMS_ERROR
.
getCode
(),
"新增应付账款列表不能为空"
);
}
return
Result
.
success
(
apiExpectedFortuneService
.
add
(
request
));
}
/**
* 修改出账
*
* @param request
* @return
*/
@PostMapping
(
"/update"
)
@Operation
(
summary
=
"更新保单发佣信息"
)
public
Result
<
Boolean
>
update
(
@RequestBody
ExpectedFortuneUpdateRequest
request
)
{
if
(
request
==
null
||
request
.
getExpectedFortuneBizId
()
==
null
)
{
return
Result
.
fail
(
ErrorCode
.
PARAMS_ERROR
.
getCode
(),
ErrorCode
.
PARAMS_ERROR
.
getMessage
());
}
return
Result
.
success
(
apiExpectedFortuneService
.
update
(
request
));
}
/**
* 查询保单是否生成过预计发佣
* @param policyNo
* @return
...
...
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiFortuneController.java
View file @
c7598e16
...
...
@@ -465,7 +465,7 @@ public class ApiFortuneController {
// 查询条件
Wrapper
<
Fortune
>
queryWrapper
=
fortuneService
.
getQueryWrapper
(
fortuneQueryRequest
);
//
分页查询
//
todo 关联预计发佣查询列表
Page
<
Fortune
>
fortunePage
=
fortuneService
.
page
(
new
Page
<>(
current
,
size
),
queryWrapper
);
...
...
yd-csf-api/src/main/java/com/yd/csf/api/dto/CommissionExcelDTO.java
View file @
c7598e16
...
...
@@ -14,6 +14,12 @@ import java.util.Date;
@Data
public
class
CommissionExcelDTO
{
@ExcelProperty
(
"入账检核年月"
)
private
String
reconciliationYearMonth
;
@ExcelProperty
(
"应收账款编号"
)
private
String
receivableNo
;
@ExcelProperty
(
"保单号"
)
private
String
policyNo
;
...
...
@@ -53,6 +59,8 @@ public class CommissionExcelDTO {
public
static
Commission
convertToEntity
(
CommissionExcelDTO
data
,
String
loginUserId
)
{
Commission
entity
=
new
Commission
();
// 字段映射
entity
.
setReconciliationYearMonth
(
data
.
getReconciliationYearMonth
());
entity
.
setReceivableNo
(
data
.
getReceivableNo
());
entity
.
setPolicyNo
(
data
.
getPolicyNo
());
entity
.
setPremium
(
data
.
getPremium
());
entity
.
setCommissionBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_COMMISSION
.
getCode
()));
...
...
yd-csf-api/src/main/java/com/yd/csf/api/service/ApiExpectedFortuneService.java
View file @
c7598e16
...
...
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import
com.yd.common.result.Result
;
import
com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest
;
import
com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest
;
import
com.yd.csf.feign.request.expectedfortune.ExpectedFortuneAddRequest
;
import
com.yd.csf.feign.request.expectedfortune.ExpectedFortuneUpdateRequest
;
import
com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse
;
import
com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse
;
import
com.yd.csf.service.dto.QueryPolicyAndBrokerDto
;
...
...
@@ -12,6 +14,7 @@ import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import
org.springframework.scheduling.annotation.Async
;
import
java.util.List
;
import
java.util.Map
;
public
interface
ApiExpectedFortuneService
{
Result
<
ApiGenerateExpectedFortuneResponse
>
generate
(
ApiGenerateExpectedFortuneRequest
request
);
...
...
@@ -28,4 +31,10 @@ public interface ApiExpectedFortuneService {
Result
batchDelByPolicyNo
(
String
policyNo
);
ExpectedFortuneStatisticsVO
getStatistics
(
List
<
Long
>
expectedFortuneIds
);
Boolean
update
(
ExpectedFortuneUpdateRequest
request
);
Result
<
Map
<
String
,
Object
>>
list
(
ApiExpectedFortunePageRequest
request
);
Boolean
add
(
ExpectedFortuneAddRequest
request
);
}
yd-csf-api/src/main/java/com/yd/csf/api/service/impl/ApiExpectedFortuneServiceImpl.java
View file @
c7598e16
...
...
@@ -4,9 +4,12 @@ import cn.hutool.core.bean.BeanUtil;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yd.auth.core.dto.AuthUserDto
;
import
com.yd.auth.core.utils.SecurityUtil
;
import
com.yd.common.constant.RedisConstants
;
import
com.yd.common.enums.CommonEnum
;
import
com.yd.common.enums.ProjectEnum
;
import
com.yd.common.enums.ResultCode
;
import
com.yd.common.enums.TenantEnum
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
...
...
@@ -16,16 +19,17 @@ import com.yd.csf.api.dto.*;
import
com.yd.csf.api.service.ApiBasicLawCalculateService
;
import
com.yd.csf.api.service.ApiExpectedFortuneLogService
;
import
com.yd.csf.api.service.ApiExpectedFortuneService
;
import
com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest
;
import
com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest
;
import
com.yd.csf.feign.request.expectedfortune.*
;
import
com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse
;
import
com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse
;
import
com.yd.csf.service.dto.CommissionRuleBindingDto
;
import
com.yd.csf.service.dto.FortuneStatisticsVO
;
import
com.yd.csf.service.dto.QueryPolicyAndBrokerDto
;
import
com.yd.csf.service.dto.QueryPolicyBrokerDto
;
import
com.yd.csf.service.enums.FortuneStatusEnum
;
import
com.yd.csf.service.model.CommissionRuleBinding
;
import
com.yd.csf.service.model.ExpectedFortune
;
import
com.yd.csf.service.model.Fortune
;
import
com.yd.csf.service.model.PolicyBroker
;
import
com.yd.csf.service.service.ICommissionRuleBindingService
;
import
com.yd.csf.service.service.IExpectedFortuneService
;
...
...
@@ -38,6 +42,7 @@ import jodd.util.StringUtil;
import
lombok.extern.slf4j.Slf4j
;
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.context.ApplicationContext
;
import
org.springframework.scheduling.annotation.Async
;
...
...
@@ -49,9 +54,9 @@ import org.springframework.util.CollectionUtils;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDate
;
import
java.
util.ArrayList
;
import
java.util.
List
;
import
java.util.
Object
s
;
import
java.
time.LocalDateTime
;
import
java.util.
*
;
import
java.util.
stream.Collector
s
;
@Slf4j
@Service
...
...
@@ -386,9 +391,11 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
// 除以100
BigDecimal
decimalRatio
=
ratio
.
divide
(
new
BigDecimal
(
"100"
),
4
,
BigDecimal
.
ROUND_HALF_UP
);
// 计算实际发佣金额 = 标准发佣金额 × decimalRatio
// 计算实际
预计
发佣金额 = 标准发佣金额 × decimalRatio
BigDecimal
actualAmount
=
standardAmount
.
multiply
(
decimalRatio
);
fortune
.
setAmount
(
actualAmount
);
// 本次出账金额 = 实际预计发佣金额
fortune
.
setCurrentPaymentAmount
(
actualAmount
);
}
catch
(
NumberFormatException
e
)
{
// 如果比例不是有效的数字,使用标准金额
...
...
@@ -410,6 +417,66 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
return
Result
.
success
();
}
@Override
public
Result
<
Map
<
String
,
Object
>>
list
(
ApiExpectedFortunePageRequest
request
)
{
Page
<
ExpectedFortune
>
page
=
new
Page
<>(
request
.
getPageNo
(),
request
.
getPageSize
());
QueryWrapper
<
ExpectedFortune
>
queryWrapper
=
this
.
getQueryWrapper
(
request
);
IPage
<
ExpectedFortune
>
iPage
=
iExpectedFortuneService
.
page
(
page
,
queryWrapper
);
// 查询统计数据
List
<
ExpectedFortune
>
fortuneList
=
iExpectedFortuneService
.
list
(
queryWrapper
);
ExpectedFortuneStatisticsVO
statisticsVO
=
iExpectedFortuneService
.
getStatistics
(
fortuneList
.
stream
().
map
(
ExpectedFortune:
:
getId
).
collect
(
Collectors
.
toList
()));
// 组装返回结果
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
result
.
put
(
"statisticsVO"
,
statisticsVO
);
result
.
put
(
"page"
,
iExpectedFortuneService
.
getVOPage
(
iPage
));
return
Result
.
success
(
result
);
}
@Override
public
Boolean
add
(
ExpectedFortuneAddRequest
request
)
{
List
<
ExpectedFortuneDto
>
addList
=
request
.
getAddList
();
if
(
CollectionUtils
.
isEmpty
(
addList
))
{
return
true
;
}
// 查询最新一条记录
List
<
ExpectedFortune
>
latestList
=
iExpectedFortuneService
.
list
(
new
QueryWrapper
<
ExpectedFortune
>().
orderByDesc
(
"id"
).
last
(
"limit 1"
));
ExpectedFortune
latest
=
latestList
.
isEmpty
()
?
null
:
latestList
.
get
(
0
);
ArrayList
<
ExpectedFortune
>
fortuneList
=
new
ArrayList
<>();
for
(
ExpectedFortuneDto
expectedFortuneDto
:
addList
)
{
ExpectedFortune
expectedFortune
=
new
ExpectedFortune
();
BeanUtil
.
copyProperties
(
expectedFortuneDto
,
expectedFortune
);
// 预计发佣业务id
expectedFortune
.
setExpectedFortuneBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_EXPECTED_FORTUNE
.
getCode
()));
// 应付款编号
expectedFortune
.
setPayableNo
(
this
.
createPayableNo
(
expectedFortuneDto
,
latest
));
fortuneList
.
add
(
expectedFortune
);
}
iExpectedFortuneService
.
saveOrUpdateBatch
(
fortuneList
);
return
true
;
}
/**
* 创建应付款编号 应付款类型-CSF-年份后两位-6位数字(不重复)
*
* @param expectedFortuneDto
* @return
*/
private
String
createPayableNo
(
ExpectedFortuneDto
expectedFortuneDto
,
ExpectedFortune
latest
)
{
String
seq
=
"000001"
;
// 有最新记录,根据最新记录的序号生成下一个序号
if
(!
Objects
.
isNull
(
latest
))
{
seq
=
String
.
format
(
"%06d"
,
Integer
.
parseInt
(
latest
.
getPayableNo
().
substring
(
12
))
+
1
);
}
return
String
.
format
(
"%s%s%s"
,
expectedFortuneDto
.
getFortuneBizType
()
+
"-CSF"
,
LocalDate
.
now
().
getYear
()
%
100
,
seq
);
}
/**
* 分页查询 - 预计发佣
* @param request
...
...
@@ -418,11 +485,11 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Override
public
Result
<
IPage
<
ApiExpectedFortunePageResponse
>>
page
(
ApiExpectedFortunePageRequest
request
)
{
Page
<
ExpectedFortune
>
page
=
new
Page
<>(
request
.
getPageNo
(),
request
.
getPageSize
());
IPage
<
ExpectedFortune
>
iPage
=
iExpectedFortuneService
.
page
(
page
,
this
.
getQueryWrapper
(
request
));
// 转换为ApiExpectedFortunePageResponse
IPage
<
ApiExpectedFortunePageResponse
>
apiPage
=
iPage
.
convert
(
ApiExpectedFortuneServiceImpl:
:
transform
);
return
Result
.
success
(
apiPage
);
QueryWrapper
<
ExpectedFortune
>
queryWrapper
=
this
.
getQueryWrapper
(
request
);
IPage
<
ExpectedFortune
>
iPage
=
iExpectedFortuneService
.
page
(
page
,
queryWrapper
);
return
Result
.
success
(
iPage
.
convert
(
ApiExpectedFortuneServiceImpl:
:
transform
));
}
public
static
ApiExpectedFortunePageResponse
transform
(
ExpectedFortune
expectedFortune
)
{
...
...
@@ -440,30 +507,36 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
String
policyNo
=
request
.
getPolicyNo
();
LocalDate
payoutDateStart
=
request
.
getPayoutDateStart
();
LocalDate
payoutDateEnd
=
request
.
getPayoutDateEnd
();
String
status
=
request
.
getStatus
();
List
<
String
>
statusList
=
request
.
getStatusList
();
Integer
fortunePeriod
=
request
.
getFortunePeriod
();
String
fortuneName
=
request
.
getFortuneName
();
String
team
=
request
.
getTeam
();
String
teamBizId
=
request
.
getTeamBizId
();
String
insuranceCompany
=
request
.
getInsuranceCompany
();
String
productName
=
request
.
getProductName
();
// String reconciliationCompany = request.getReconciliationCompany();
String
broker
=
request
.
getBroker
();
String
signer
=
request
.
getSigner
();
String
productLaunchBizId
=
request
.
getProductLaunchBizId
();
String
fortuneBizType
=
request
.
getFortuneBizType
();
// 按保单号模糊查询
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
policyNo
),
"policy_no"
,
policyNo
);
queryWrapper
.
gt
(
ObjectUtils
.
isNotEmpty
(
payoutDateStart
),
"payout_date"
,
payoutDateStart
);
queryWrapper
.
lt
(
ObjectUtils
.
isNotEmpty
(
payoutDateEnd
),
"payout_date"
,
payoutDateEnd
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
status
),
"status"
,
status
);
queryWrapper
.
in
(
ObjectUtils
.
isNotEmpty
(
statusList
),
"status"
,
statusList
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
fortunePeriod
),
"fortune_period"
,
fortunePeriod
);
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
fortuneName
),
"fortune_name"
,
fortuneName
);
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
team
),
"team"
,
team
);
queryWrapper
.
eq
(
StringUtils
.
isNotBlank
(
teamBizId
),
"team_biz_id"
,
teamBizId
);
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
insuranceCompany
),
"insurance_company"
,
insuranceCompany
);
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
productName
),
"product_name"
,
productName
);
queryWrapper
.
eq
(
StringUtils
.
isNotBlank
(
productLaunchBizId
),
"product_launch_biz_id"
,
productLaunchBizId
);
// queryWrapper.like(StringUtils.isNotBlank(reconciliationCompany), "reconciliation_company", reconciliationCompany);
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
broker
),
"broker"
,
broker
);
queryWrapper
.
like
(
StringUtils
.
isNotBlank
(
signer
),
"signer"
,
signer
);
queryWrapper
.
eq
(
StringUtils
.
isNotBlank
(
fortuneBizType
),
"fortune_biz_type"
,
fortuneBizType
);
// 按id升序排序
queryWrapper
.
orderByAsc
(
"id"
);
...
...
@@ -514,4 +587,24 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
return
statisticsVO
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Boolean
update
(
ExpectedFortuneUpdateRequest
request
)
{
String
expectedFortuneBizId
=
request
.
getExpectedFortuneBizId
();
ExpectedFortune
expectedFortune
=
iExpectedFortuneService
.
getOne
(
new
QueryWrapper
<
ExpectedFortune
>().
eq
(
"expected_fortune_biz_id"
,
expectedFortuneBizId
));
if
(
expectedFortune
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"预计发佣数据不存在"
);
}
BeanUtils
.
copyProperties
(
request
,
expectedFortune
,
"id"
,
"expectedFortuneBizId"
);
// 获取当前登录用户
AuthUserDto
currentLoginUser
=
SecurityUtil
.
getCurrentLoginUser
();
String
loginUserId
=
currentLoginUser
.
getId
().
toString
();
expectedFortune
.
setUpdaterId
(
loginUserId
);
expectedFortune
.
setUpdateTime
(
LocalDateTime
.
now
());
return
iExpectedFortuneService
.
updateById
(
expectedFortune
);
}
}
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ApiExpectedFortunePageRequest.java
View file @
c7598e16
...
...
@@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import
lombok.Data
;
import
java.time.LocalDate
;
import
java.util.List
;
@Data
public
class
ApiExpectedFortunePageRequest
extends
PageDto
{
...
...
@@ -20,27 +21,33 @@ public class ApiExpectedFortunePageRequest extends PageDto {
@Schema
(
description
=
"预估发佣结束日期"
)
private
LocalDate
payoutDateEnd
;
@Schema
(
description
=
"
发佣状态
0=待出账 1=可出帐 2=完成出账 3=部分出账 4=保留 5=已失效"
)
private
String
status
;
@Schema
(
description
=
"
出账状态, 可多选
0=待出账 1=可出帐 2=完成出账 3=部分出账 4=保留 5=已失效"
)
private
List
<
String
>
statusList
;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
@Schema
(
description
=
"
发佣
期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)"
)
@Schema
(
description
=
"
出账
期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)"
)
private
Integer
fortunePeriod
;
@Schema
(
description
=
"
发佣名称
"
)
@Schema
(
description
=
"
出账项目
"
)
private
String
fortuneName
;
@Schema
(
description
=
"出单团队"
)
@Schema
(
description
=
"出单团队
名称
"
)
private
String
team
;
@Schema
(
description
=
"出单团队业务ID"
)
private
String
teamBizId
;
@Schema
(
description
=
"保险公司"
)
private
String
insuranceCompany
;
@Schema
(
description
=
"产品名称"
)
private
String
productName
;
@Schema
(
description
=
"产品计划:产品上架信息业务ID"
)
private
String
productLaunchBizId
;
/**
* 转介人名称
*/
...
...
@@ -50,4 +57,6 @@ public class ApiExpectedFortunePageRequest extends PageDto {
@Schema
(
description
=
"签单员名称"
)
private
String
signer
;
@Schema
(
description
=
"应付款类型 R-关联保单应付款 U-非关联保单应付款"
)
private
String
fortuneBizType
;
}
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ExpectedFortuneAddRequest.java
0 → 100644
View file @
c7598e16
package
com
.
yd
.
csf
.
feign
.
request
.
expectedfortune
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
ExpectedFortuneAddRequest
{
private
List
<
ExpectedFortuneDto
>
addList
;
}
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ExpectedFortuneDto.java
0 → 100644
View file @
c7598e16
package
com
.
yd
.
csf
.
feign
.
request
.
expectedfortune
;
import
com.yd.csf.feign.response.expectedfortune.PolicyInfo
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
@Data
public
class
ExpectedFortuneDto
{
/**
* 应付款类型 R-关联保单应付款 U-非关联保单应付款
*/
@Schema
(
description
=
"应付款类型 R-关联保单应付款 U-非关联保单应付款"
)
private
String
fortuneBizType
;
/**
* 保单号
*/
@Schema
(
description
=
"policy no"
)
private
String
policyNo
;
/**
* 产品上架信息业务ID
*/
@Schema
(
description
=
"产品上架信息业务ID"
)
private
String
productLaunchBizId
;
/**
* 保单信息
*/
@Schema
(
description
=
"policy info"
)
private
PolicyInfo
policy
;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
@Schema
(
description
=
"fortune period"
)
private
Integer
fortunePeriod
;
/**
* 发佣总期数
*/
@Schema
(
description
=
"fortune total period"
)
private
Integer
fortuneTotalPeriod
;
/**
* 转介人名称
*/
@Schema
(
description
=
"转介人名称"
)
private
String
broker
;
/**
* 转介人业务ID
*/
@Schema
(
description
=
"broker biz id"
)
private
String
brokerBizId
;
/**
* 团队名称
*/
@Schema
(
description
=
"团队名称"
)
private
String
team
;
/**
* 所属团队业务ID
*/
@Schema
(
description
=
"所属团队 biz id"
)
private
String
teamBizId
;
/**
* 发佣名称
*/
@Schema
(
description
=
"发佣名称"
)
private
String
fortuneName
;
/**
* 发佣类型
*/
@Schema
(
description
=
"发佣类型"
)
private
String
fortuneType
;
/**
* 预计应发金额
*/
@Schema
(
description
=
"预计应发金额"
)
private
BigDecimal
amount
;
/**
* 发佣币种
*/
@Schema
(
description
=
"发佣币种"
)
private
String
currency
;
/**
* 发佣状态 0=待出账 1=可出帐 2=完成出账 3=部分出账 4=保留 5=已失效
*/
@Schema
(
description
=
"发佣状态 0=待出账 1=可出帐 2=完成出账 3=部分出账 4=保留 5=已失效"
)
private
String
status
;
/**
* 预计发佣日期
*/
@Schema
(
description
=
"预计发佣日期"
)
private
LocalDate
payoutDate
;
/**
* 已出账金额
*/
@Schema
(
description
=
"已出账金额"
)
private
BigDecimal
paidAmount
;
/**
* 待出账金额
*/
@Schema
(
description
=
"待出账金额"
)
private
BigDecimal
unpaidAmount
;
/**
* 发佣比例 已发佣金额/应发佣金额
*/
@Schema
(
description
=
"发佣比例 已发佣金额/应发佣金额"
)
private
BigDecimal
paidRatio
;
/**
* 基本法项目配置表唯一业务ID
*/
@Schema
(
description
=
"rule item biz id"
)
private
String
ruleItemBizId
;
/**
* 创建时间
*/
@Schema
(
description
=
"create time"
)
private
LocalDateTime
createTime
;
}
yd-csf-feign/src/main/java/com/yd/csf/feign/request/expectedfortune/ExpectedFortuneUpdateRequest.java
0 → 100644
View file @
c7598e16
package
com
.
yd
.
csf
.
feign
.
request
.
expectedfortune
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.math.BigDecimal
;
@Data
public
class
ExpectedFortuneUpdateRequest
{
/**
* 预计发佣业务id
*/
@Schema
(
description
=
"预计发佣业务id"
)
private
String
expectedFortuneBizId
;
/**
* 出账状态
*/
@Schema
(
description
=
"出账状态 0=待出账 1=可出帐 2=完成出账 3=部分出账 4=保留 5=已失效, 字典值: csf_fortune_status"
)
private
String
status
;
/**
* 当前出账金额
*/
@Schema
(
description
=
"当前出账金额"
)
private
BigDecimal
currentPaymentAmount
;
/**
* 币种
*/
@Schema
(
description
=
"币种"
)
private
String
currency
;
/**
* 备注
*/
@Schema
(
description
=
"备注"
)
private
String
remark
;
}
yd-csf-feign/src/main/java/com/yd/csf/feign/response/expectedfortune/ApiExpectedFortunePageResponse.java
View file @
c7598e16
...
...
@@ -22,12 +22,30 @@ public class ApiExpectedFortunePageResponse {
private
String
expectedFortuneBizId
;
/**
* 应付款类型 R-关联保单应付款 U-非关联保单应付款
*/
@Schema
(
description
=
"应付款类型 R-关联保单应付款 U-非关联保单应付款"
)
private
String
fortuneBizType
;
/**
* 保单号
*/
@Schema
(
description
=
"policy no"
)
private
String
policyNo
;
/**
* 产品上架信息业务ID
*/
@Schema
(
description
=
"产品上架信息业务ID"
)
private
String
productLaunchBizId
;
/**
* 保单信息
*/
@Schema
(
description
=
"policy info"
)
private
PolicyInfo
policy
;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
@Schema
(
description
=
"fortune period"
)
...
...
yd-csf-feign/src/main/java/com/yd/csf/feign/response/expectedfortune/PolicyInfo.java
0 → 100644
View file @
c7598e16
package
com
.
yd
.
csf
.
feign
.
response
.
expectedfortune
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.Date
;
@Data
public
class
PolicyInfo
{
/**
* policy id
*/
@Schema
(
description
=
"policy id"
)
private
Long
id
;
/**
* 保单业务ID
*/
@Schema
(
description
=
"保单业务ID"
)
private
String
policyBizId
;
/**
* 保单号
*/
@Schema
(
description
=
"保单号"
)
private
String
policyNo
;
/**
* 用户业务id
*/
@Schema
(
description
=
"用户业务id"
)
private
String
userBizId
;
/**
* 产品代码
*/
@Schema
(
description
=
"产品代码"
)
private
String
productCode
;
/**
* 产品名称
*/
@Schema
(
description
=
"产品名称"
)
private
String
productName
;
/**
* 产品类别
*/
@Schema
(
description
=
"产品类别"
)
private
String
productCate
;
/**
* 保险公司
*/
@Schema
(
description
=
"保险公司"
)
private
String
insurer
;
/**
* 保险公司业务id
*/
@Schema
(
description
=
"保险公司业务id"
)
private
String
insurerBizId
;
/**
* 保單持有人
*/
@Schema
(
description
=
"保單持有人"
)
private
String
policyHolder
;
/**
* 受保人
*/
@Schema
(
description
=
"受保人"
)
private
String
insured
;
/**
* 供款年期
*/
@Schema
(
description
=
"供款年期"
)
private
Integer
paymentTerm
;
/**
* 期交保费
*/
@Schema
(
description
=
"期交保费"
)
private
BigDecimal
paymentPremium
;
/**
* 每期保费
*/
@Schema
(
description
=
"每期保费"
)
private
BigDecimal
eachIssuePremium
;
/**
* 保单状态
*/
@Schema
(
description
=
"保单状态 生效中,保单失效,期满终止,已转出,退保,被拒保,取消申请 字典值:csf_policy_status"
)
private
String
status
;
/**
* 保单币种
*/
@Schema
(
description
=
"保单币种"
)
private
String
currency
;
/**
* 首期保费(不含徽费,预缴保费)
*/
@Schema
(
description
=
"首期保费(不含徽费,预缴保费)"
)
private
Integer
initialPremium
;
/**
* 签单日期
*/
@Schema
(
description
=
"签单日期"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
signDate
;
/**
* 缮发日期
*/
@Schema
(
description
=
"缮发日期"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
issueDate
;
/**
* 生效日期
*/
@Schema
(
description
=
"生效日期"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
effectiveDate
;
/**
* 续保日期
*/
@Schema
(
description
=
"续保日期"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
renewalDate
;
/**
* 是否预缴: 0-否, 1-是
*/
@Schema
(
description
=
"是否预缴: 0-否, 1-是"
)
private
Integer
isPrepaid
;
/**
* 是否预缴: 0-否, 1-是
*/
@Schema
(
description
=
"是否预缴: 0-否, 1-是"
)
private
Integer
isPrepay
;
/**
* 预缴年期
*/
@Schema
(
description
=
"预缴年期"
)
private
Integer
prepaidTerm
;
/**
* 对账公司
*/
@Schema
(
description
=
"对账公司"
)
private
String
reconciliationCompany
;
/**
* 对账公司业务id
*/
@Schema
(
description
=
"对账公司业务id"
)
private
String
reconciliationCompanyBizId
;
/**
* 通用备注
*/
@Schema
(
description
=
"通用备注"
)
private
String
remark
;
}
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionExpectedAddDto.java
View file @
c7598e16
...
...
@@ -21,6 +21,12 @@ public class CommissionExpectedAddDto {
private
String
policyBizId
;
/**
* 应收款类型 R=关联保单应收单 U=非关联保单应收单
*/
@Schema
(
description
=
"应收款类型 R=关联保单应收单 U=非关联保单应收单"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
)
private
String
commissionBizType
;
/**
* 保单号
*/
@Schema
(
description
=
"保单号"
)
...
...
@@ -33,6 +39,12 @@ public class CommissionExpectedAddDto {
private
String
reconciliationCompany
;
/**
* 对账公司编码
*/
@Schema
(
description
=
"对账公司编码"
)
private
String
reconciliationCompanyCode
;
/**
* 对账公司业务id
*/
@Schema
(
description
=
"对账公司业务id"
)
...
...
@@ -75,6 +87,12 @@ public class CommissionExpectedAddDto {
private
String
currency
;
/**
* 来佣金额
*/
@Schema
(
description
=
"来佣金额"
)
private
BigDecimal
amount
;
/**
* 来佣日期
*/
@Schema
(
description
=
"来佣日期 format:yyyy-MM-dd"
)
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/CommissionExpectedQueryRequest.java
View file @
c7598e16
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.util.Date
;
import
java.util.List
;
@Data
public
class
CommissionExpectedQueryRequest
extends
PageDto
{
...
...
@@ -15,14 +17,64 @@ public class CommissionExpectedQueryRequest extends PageDto {
private
String
policyNo
;
/**
*
来佣
状态 0=待来佣 1=已来佣 2=部分来佣
*
入账
状态 0=待来佣 1=已来佣 2=部分来佣
*/
@Schema
(
description
=
"
来佣状态 0=待来佣 1=已来佣 2=部分来佣
"
)
private
String
status
;
@Schema
(
description
=
"
入账状态 0=待来佣 1=已来佣 2=部分来佣 可多选
"
)
private
List
<
String
>
statusList
;
/**
* 预计来佣日期
格式:yyyy-MM-dd 查询该日期及之前的预计来佣记录
* 预计来佣日期
开始 格式:yyyy-MM-dd
*/
@Schema
(
description
=
"预计来佣日期 格式:yyyy-MM-dd 查询该日期及之前的预计来佣记录"
)
private
Date
commissionDate
;
@Schema
(
description
=
"预计来佣日期开始 格式:yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
commissionDateStart
;
/**
* 预计来佣日期结束 格式:yyyy-MM-dd
*/
@Schema
(
description
=
"预计来佣日期结束 格式:yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
commissionDateEnd
;
/**
* 预计来佣期数
*/
@Schema
(
description
=
"预计来佣期数"
)
private
Integer
commissionPeriod
;
/**
* 来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
@Schema
(
description
=
"来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)"
)
private
String
commissionName
;
/**
* 对账公司
*/
@Schema
(
description
=
"对账公司"
)
private
String
reconciliationCompany
;
/**
* 保险公司业务ID
*/
@Schema
(
description
=
"保险公司业务ID"
)
private
String
insurerBizId
;
/**
* 产品上架信息表唯一业务ID
*/
@Schema
(
description
=
"产品计划: 产品上架信息表唯一业务ID"
)
private
String
productLaunchBizId
;
/**
* 应收款类型 1=关联保单应收单 2=非关联保单应收单
*/
@Schema
(
description
=
"应收款类型 1=关联保单应收单 2=非关联保单应收单"
)
private
Integer
commissionBizType
;
/**
* 转介人所属团队业务ID
*/
@Schema
(
description
=
"转介人所属团队业务ID"
)
private
String
teamBizId
;
}
yd-csf-service/src/main/java/com/yd/csf/service/dto/FortuneQueryRequest.java
View file @
c7598e16
...
...
@@ -16,9 +16,9 @@ import java.util.List;
@Data
public
class
FortuneQueryRequest
extends
PageDto
implements
Serializable
{
/**
*
发佣
状态
*
出账
状态
*/
@Schema
(
description
=
"
发佣状态 '0'-'暂不可发','1'-'可发放','2'-'已发并关账'
, 字典值: csf_fortune_status"
)
@Schema
(
description
=
"
出账状态 0=待出账 1=可出帐 2=完成出账 3=部分出账 4=保留 5=已失效
, 字典值: csf_fortune_status"
)
private
String
status
;
/**
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/GenerateFortuneRequest.java
View file @
c7598e16
...
...
@@ -3,6 +3,7 @@ package com.yd.csf.service.dto;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.time.LocalDate
;
import
java.util.List
;
@Data
...
...
@@ -10,4 +11,10 @@ public class GenerateFortuneRequest {
@Schema
(
description
=
"佣金业务id列表"
)
private
List
<
String
>
commissionBizIdList
;
@Schema
(
description
=
"expected fortune id 列表"
)
private
List
<
Long
>
expectedFortuneIdList
;
@Schema
(
description
=
"本次发佣日期"
)
private
LocalDate
payoutDate
;
}
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyDto.java
View file @
c7598e16
package
com
.
yd
.
csf
.
service
.
dto
;
import
com.yd.csf.feign.dto.appointment.ApiProductPlanAdditionalInfoDto
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.model.PolicyAdditional
;
import
com.yd.csf.service.vo.PolicyVO
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
...
...
@@ -17,7 +16,7 @@ public class PolicyDto implements Serializable {
* 产品计划(保单信息)
*/
@Schema
(
description
=
"产品计划(保单信息)"
)
private
Policy
apiProductPlanMainInfoDto
;
private
Policy
VO
apiProductPlanMainInfoDto
;
/**
* 保单附加险列表
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyFollowAggregateDto.java
View file @
c7598e16
...
...
@@ -2,6 +2,7 @@ package com.yd.csf.service.dto;
import
com.google.gson.reflect.TypeToken
;
import
com.yd.csf.service.model.*
;
import
com.yd.csf.service.vo.PolicyVO
;
import
com.yd.csf.service.utils.GSONUtil
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
...
...
@@ -89,7 +90,7 @@ public class PolicyFollowAggregateDto implements Serializable {
if
(
ObjectUtils
.
isNotEmpty
(
policy
))
{
PolicyDto
apiProductPlanInfoDto
=
new
PolicyDto
();
// 产品计划主信息
apiProductPlanInfoDto
.
setApiProductPlanMainInfoDto
(
policy
);
apiProductPlanInfoDto
.
setApiProductPlanMainInfoDto
(
PolicyVO
.
objToVo
(
policy
)
);
// 附加险列表
apiProductPlanInfoDto
.
setApiProductPlanAdditionalInfoDtoList
(
policyAdditionals
);
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/Commission.java
View file @
c7598e16
...
...
@@ -21,12 +21,22 @@ public class Commission implements Serializable {
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 应收账款编号
*/
private
String
receivableNo
;
/**
* 保单来佣业务id
*/
private
String
commissionBizId
;
/**
* 入账检核年月 yyyy-MM
*/
private
String
reconciliationYearMonth
;
/**
* 保单号
*/
private
String
policyNo
;
...
...
@@ -41,6 +51,11 @@ public class Commission implements Serializable {
*/
private
String
reconciliationCompany
;
/**
* 对账公司编码
*/
private
String
reconciliationCompanyCode
;
/**
* 对账公司业务id
*/
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionCompareRecord.java
View file @
c7598e16
...
...
@@ -81,6 +81,18 @@ public class CommissionCompareRecord implements Serializable {
@Schema
(
description
=
"入账金额"
)
private
BigDecimal
amount
;
/**
* 当前来佣比例
*/
@Schema
(
description
=
"当前来佣比例"
)
private
BigDecimal
currentCommissionRatio
;
/**
* 操作人
*/
@Schema
(
description
=
"操作人"
)
private
String
operatorName
;
/**
* 通用备注
*/
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/CommissionExpected.java
View file @
c7598e16
...
...
@@ -31,6 +31,16 @@ public class CommissionExpected implements Serializable {
private
String
commissionExpectedBizId
;
/**
* 应收账款编号
*/
private
String
receivableNo
;
/**
* 应收款类型 R=关联保单应收单 U=非关联保单应收单
*/
private
String
commissionBizType
;
/**
* 保单号
*/
private
String
policyNo
;
...
...
@@ -40,6 +50,11 @@ public class CommissionExpected implements Serializable {
*/
private
String
reconciliationCompany
;
/**
* 对账公司编码
*/
private
String
reconciliationCompanyCode
;
/**
* 对账公司业务id
*/
...
...
@@ -71,6 +86,11 @@ public class CommissionExpected implements Serializable {
private
BigDecimal
commissionRatio
;
/**
* 来佣金额
*/
private
BigDecimal
amount
;
/**
* 来佣币种
*/
private
String
currency
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/ExpectedFortune.java
View file @
c7598e16
...
...
@@ -4,10 +4,12 @@ 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
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
lombok.Getter
;
import
lombok.Setter
;
...
...
@@ -39,12 +41,30 @@ public class ExpectedFortune implements Serializable {
private
String
expectedFortuneBizId
;
/**
* 应付款类型 R-关联保单应付款 U-非关联保单应付款
*/
@TableField
(
"fortune_biz_type"
)
private
String
fortuneBizType
;
/**
* 应付款编号
*/
@TableField
(
"payable_no"
)
private
String
payableNo
;
/**
* 保单号
*/
@TableField
(
"policy_no"
)
private
String
policyNo
;
/**
* 产品上架信息业务ID
*/
@TableField
(
"product_launch_biz_id"
)
private
String
productLaunchBizId
;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
@TableField
(
"fortune_period"
)
...
...
@@ -117,18 +137,24 @@ public class ExpectedFortune implements Serializable {
private
String
currency
;
/**
* 佣金发放状态 0=待出账 1=可出帐 2=已出账
* 佣金发放状态 0=待出账 1=可出帐 2=已出账
3=部分出账 4=保留 5=已失效
*/
@TableField
(
"status"
)
private
String
status
;
/**
/**
* 本次出账金额
*/
@TableField
(
"current_payment_amount"
)
private
BigDecimal
currentPaymentAmount
;
/**
* 预计发佣日期
*/
@TableField
(
"payout_date"
)
private
LocalDate
payoutDate
;
/**
/**
* 已出账金额
*/
@TableField
(
"paid_amount"
)
...
...
yd-csf-service/src/main/java/com/yd/csf/service/model/Fortune.java
View file @
c7598e16
...
...
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.time.LocalDate
;
import
java.util.Date
;
import
lombok.Data
;
...
...
@@ -21,6 +22,11 @@ public class Fortune implements Serializable {
private
Long
id
;
/**
* 预计发佣业务ID
*/
private
String
expectedFortuneBizId
;
/**
* 保单发佣批次ID
*/
private
String
batchBizId
;
...
...
@@ -108,7 +114,7 @@ public class Fortune implements Serializable {
/**
* 发佣日期
*/
private
Date
payoutDate
;
private
Local
Date
payoutDate
;
/**
* 出账数据业务ID
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionAsyncService.java
View file @
c7598e16
...
...
@@ -12,6 +12,7 @@ import com.yd.csf.service.model.CommissionCompareRecord;
import
com.yd.csf.service.model.CommissionExpected
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Service
;
...
...
@@ -39,6 +40,94 @@ public class CommissionAsyncService {
// @Async("commonAsyncExecutor")
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
commissionCompareBatch
(
List
<
Commission
>
entities
)
{
// 根据是否有保单号,来区分比对方式
List
<
Commission
>
hasPolicyNoList
=
new
ArrayList
<>();
List
<
Commission
>
noPolicyNoList
=
new
ArrayList
<>();
for
(
Commission
entity
:
entities
)
{
if
(
StringUtils
.
isBlank
(
entity
.
getPolicyNo
()))
{
noPolicyNoList
.
add
(
entity
);
}
else
{
hasPolicyNoList
.
add
(
entity
);
}
}
if
(
CollectionUtils
.
isEmpty
(
hasPolicyNoList
))
{
normalBatch
(
hasPolicyNoList
);
}
if
(
CollectionUtils
.
isEmpty
(
noPolicyNoList
))
{
noPolicyNoBatch
(
noPolicyNoList
);
}
}
/**
* 无保单号的来佣比对
* @param noPolicyNoList
*/
private
void
noPolicyNoBatch
(
List
<
Commission
>
noPolicyNoList
)
{
// 1.根据导入的来佣获取应收款编号集合
List
<
String
>
receivableNoList
=
noPolicyNoList
.
stream
()
.
map
(
Commission:
:
getReceivableNo
)
.
collect
(
Collectors
.
toList
());
// 2.根据应收款编号查询预计来佣
List
<
CommissionExpected
>
expectedList
=
commissionExpectedService
.
lambdaQuery
()
.
in
(
CommissionExpected:
:
getReceivableNo
,
receivableNoList
)
.
list
();
// 3.根据应收款编号映射预计来佣
Map
<
String
,
CommissionExpected
>
expectedMap
=
expectedList
.
stream
()
.
collect
(
Collectors
.
toMap
(
CommissionExpected:
:
getReceivableNo
,
commissionExpected
->
commissionExpected
));
// 获取当前登录用户
AuthUserDto
currentLoginUser
=
SecurityUtil
.
getCurrentLoginUser
();
String
loginUserId
=
currentLoginUser
.
getId
().
toString
();
// 比对记录
List
<
CommissionCompareRecord
>
compareRecords
=
new
ArrayList
<>();
// 4.遍历导入的来佣,进行比对
for
(
Commission
commission
:
noPolicyNoList
)
{
// 根据应收款编号获取预计来佣
CommissionExpected
commissionExpected
=
expectedMap
.
get
(
commission
.
getReceivableNo
());
if
(
commissionExpected
==
null
)
{
continue
;
}
// 比对来佣金额是否一致
BigDecimal
expectedAmount
=
commissionExpected
.
getAmount
();
BigDecimal
actualAmount
=
commission
.
getAmount
();
if
(
expectedAmount
.
equals
(
actualAmount
)
&&
commissionExpected
.
getCurrency
().
equals
(
commission
.
getCurrency
()))
{
// 等于预计比例时,所有来佣设置为比对成功
commission
.
setStatus
(
CommissionStatusEnum
.
COMPARE_SUCCESS
.
getItemValue
());
// 创建比对记录
compareRecords
.
add
(
commissionService
.
getNewCompareRecord
(
commission
,
commissionExpected
,
currentLoginUser
));
// 对应预计来佣设置为已来佣
commissionExpected
.
setStatus
(
CommissionExpectedStatusEnum
.
COMPARED
.
getItemValue
());
// 待入账金额设置为 0
commissionExpected
.
setPaidAmount
(
BigDecimal
.
ZERO
);
// 更新预计来佣
commissionExpectedService
.
updateById
(
commissionExpected
);
// 更新已比对来佣记录
commissionService
.
updateById
(
commission
);
}
else
{
// 对应预计来佣设置为部分来佣
commissionExpected
.
setStatus
(
CommissionExpectedStatusEnum
.
PARTIAL
.
getItemValue
());
// 更新预计来佣
commissionExpectedService
.
updateById
(
commissionExpected
);
// 来佣比对失败
commission
.
setStatus
(
CommissionStatusEnum
.
COMPARE_FAIL
.
getItemValue
());
// 创建比对记录
compareRecords
.
add
(
commissionService
.
getNewCompareRecord
(
commission
,
commissionExpected
,
currentLoginUser
));
// 更新已比对来佣记录
commissionService
.
updateById
(
commission
);
}
}
// 保存比对记录
if
(
CollectionUtils
.
isNotEmpty
(
compareRecords
))
{
commissionCompareRecordService
.
saveBatch
(
compareRecords
);
}
}
private
void
normalBatch
(
List
<
Commission
>
entities
)
{
// 1.根据导入的来佣获取保单号集合
List
<
String
>
policyNoList
=
entities
.
stream
()
.
map
(
Commission:
:
getPolicyNo
)
...
...
@@ -158,10 +247,71 @@ public class CommissionAsyncService {
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
commissionCompare
(
String
commissionBizId
,
String
policyNo
,
String
commissionName
,
Integer
commissionPeriod
,
String
currency
,
String
premium
)
{
log
.
info
(
"开始执行比对事务,来佣ID: {}, 保单号: {}"
,
commissionBizId
,
policyNo
);
public
void
commissionCompare
(
Commission
commission
)
{
log
.
info
(
"开始执行比对事务,来佣ID: {}"
,
commission
.
getCommissionBizId
());
if
(
StringUtils
.
isNotBlank
(
commission
.
getPolicyNo
()))
{
normalCommission
(
commission
.
getCommissionBizId
(),
commission
.
getPolicyNo
(),
commission
.
getCommissionName
(),
commission
.
getCommissionPeriod
(),
commission
.
getCurrency
(),
commission
.
getPremium
());
}
else
{
// 无保单号,根据来佣名称、对账公司查询来佣记录
noPolicyNoCommission
(
commission
);
}
}
private
void
noPolicyNoCommission
(
Commission
commission
)
{
if
(
commission
.
getAmount
()
==
null
)
{
commission
.
setRemark
(
"来佣金额不能为空"
);
commissionService
.
updateById
(
commission
);
return
;
}
// 1.根据来佣名称、对账公司查询预计来佣
QueryWrapper
<
CommissionExpected
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"reconciliation_company"
,
commission
.
getReconciliationCompany
());
queryWrapper
.
eq
(
"commission_name"
,
commission
.
getCommissionName
());
List
<
CommissionExpected
>
expectedList
=
commissionExpectedService
.
list
(
queryWrapper
);
if
(
expectedList
.
size
()
!=
1
)
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"该预计来佣记录不存在或存在多条"
);
}
CommissionExpected
commissionExpected
=
expectedList
.
get
(
0
);
// 更新预计来佣已入账金额
commissionExpected
.
setPaidAmount
(
commission
.
getAmount
());
// 获取当前登录用户
AuthUserDto
currentLoginUser
=
SecurityUtil
.
getCurrentLoginUser
();
String
loginUserId
=
currentLoginUser
.
getId
().
toString
();
// 计算比对状态
if
(
commission
.
getAmount
().
compareTo
(
commissionExpected
.
getAmount
())
==
0
)
{
// 等于预计金额时,所有来佣设置为比对成功
commission
.
setStatus
(
CommissionStatusEnum
.
COMPARE_SUCCESS
.
getItemValue
());
// 更新来佣
commissionService
.
updateById
(
commission
);
// 对应预计来佣设置为已来佣
commissionExpected
.
setStatus
(
CommissionExpectedStatusEnum
.
COMPARED
.
getItemValue
());
// 待入账金额设置为 0
commissionExpected
.
setPaidAmount
(
BigDecimal
.
ZERO
);
// 更新预计来佣
commissionExpectedService
.
updateById
(
commissionExpected
);
// 保存比对记录
commissionService
.
saveCompareRecord
(
commission
,
commissionExpected
,
currentLoginUser
);
}
else
{
// 不等于预计比例时,设置为比对失败
commission
.
setStatus
(
CommissionStatusEnum
.
COMPARE_FAIL
.
getItemValue
());
// 更新来佣
commissionService
.
updateById
(
commission
);
// 对应预计来佣设置为部分来佣
commissionExpected
.
setStatus
(
CommissionExpectedStatusEnum
.
PARTIAL
.
getItemValue
());
// 更新预计来佣
commissionExpectedService
.
updateById
(
commissionExpected
);
// 保存比对记录
commissionService
.
saveCompareRecord
(
commission
,
commissionExpected
,
currentLoginUser
);
}
}
private
void
normalCommission
(
String
commissionBizId
,
String
policyNo
,
String
commissionName
,
Integer
commissionPeriod
,
String
currency
,
String
premium
)
{
// 查询所有已存在的来佣记录
List
<
Commission
>
existingCommissions
=
commissionService
.
list
(
new
QueryWrapper
<
Commission
>()
.
eq
(
"policy_no"
,
policyNo
)
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionService.java
View file @
c7598e16
...
...
@@ -51,4 +51,6 @@ public interface CommissionService extends IService<Commission> {
void
saveCompareRecord
(
Commission
commission
,
CommissionExpected
commissionExpected
,
AuthUserDto
currentLoginUser
);
CommissionCompareRecord
getNewCompareRecord
(
Commission
existingCommission
,
CommissionExpected
commissionExpected
,
AuthUserDto
currentLoginUser
);
Boolean
addCommissionBatch
(
List
<
CommissionAddRequest
>
customerAddRequestList
);
}
yd-csf-service/src/main/java/com/yd/csf/service/service/IExpectedFortuneService.java
View file @
c7598e16
...
...
@@ -30,4 +30,6 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> {
Boolean
batchDelByPolicyNo
(
String
policyNo
);
ExpectedFortuneStatisticsVO
getStatistics
(
List
<
Long
>
expectedFortuneIds
);
IPage
<
ApiExpectedFortunePageResponse
>
getVOPage
(
IPage
<
ExpectedFortune
>
iPage
);
}
yd-csf-service/src/main/java/com/yd/csf/service/service/ReceivableService.java
0 → 100644
View file @
c7598e16
package
com
.
yd
.
csf
.
service
.
service
;
import
com.yd.csf.service.dto.CommissionExpectedAddDto
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.ValueOperations
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.time.LocalDate
;
import
java.time.format.DateTimeFormatter
;
import
java.util.concurrent.TimeUnit
;
@Component
public
class
ReceivableService
{
@Resource
private
RedisTemplate
<
String
,
String
>
redisTemplate
;
// Redis key前缀
private
static
final
String
ADDITIONAL_NO_PREFIX
=
"receivable:additional:"
;
// 日期格式
private
static
final
DateTimeFormatter
DATE_FORMATTER
=
DateTimeFormatter
.
ofPattern
(
"yyyyMMdd"
);
public
String
generateReceivableNo
(
CommissionExpectedAddDto
addDto
)
{
// 有保单号,应收账款编号 = 保单号 + 佣金期数
if
(
StringUtils
.
isNotBlank
(
addDto
.
getPolicyNo
()))
{
return
addDto
.
getPolicyNo
()
+
addDto
.
getCommissionPeriod
();
}
// 无保单号,生成附加编号
return
generateAdditionalReceivableNo
(
addDto
);
}
private
String
generateAdditionalReceivableNo
(
CommissionExpectedAddDto
addDto
)
{
LocalDate
today
=
LocalDate
.
now
();
String
dateStr
=
today
.
format
(
DATE_FORMATTER
);
// 获取当天流水号(从1开始)
long
dailySeq
=
getDailySequence
();
// 格式:对账公司代码-年份后两位-席号(6位数字)
return
String
.
format
(
"%s%s%s%06d"
,
"R"
.
equals
(
addDto
.
getCommissionBizType
())
?
"R-"
:
"U-"
,
getCompanyCode
(
addDto
),
dateStr
.
substring
(
2
,
4
),
// 取年份后两位
dailySeq
);
}
public
String
getCompanyCode
(
CommissionExpectedAddDto
addDto
)
{
if
(
StringUtils
.
isBlank
(
addDto
.
getReconciliationCompanyCode
()))
{
// 没有对账公司编码,使用自定义公司编码
// 取MD5前6位
String
md5
=
DigestUtils
.
md5Hex
(
addDto
.
getReconciliationCompany
());
return
"UNKNOWN_"
+
md5
.
substring
(
0
,
6
).
toUpperCase
();
}
else
{
// 有对账公司编码,使用对账公司编码
return
addDto
.
getReconciliationCompanyCode
();
}
}
private
long
getDailySequence
()
{
LocalDate
today
=
LocalDate
.
now
();
String
redisKey
=
ADDITIONAL_NO_PREFIX
+
today
.
format
(
DATE_FORMATTER
);
ValueOperations
<
String
,
String
>
ops
=
redisTemplate
.
opsForValue
();
// 使用Redis的INCR命令获取自增序列
Long
seq
=
ops
.
increment
(
redisKey
,
1
);
// 如果是第一次设置(值为1),设置过期时间为1天+2小时(避免跨天问题)
if
(
seq
!=
null
&&
seq
==
1L
)
{
redisTemplate
.
expire
(
redisKey
,
26
,
TimeUnit
.
HOURS
);
// 26小时,确保覆盖全天
}
return
seq
;
}
}
\ No newline at end of file
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
View file @
c7598e16
...
...
@@ -17,14 +17,10 @@ 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.service.
CommissionExpectedService
;
import
com.yd.csf.service.service.
*
;
import
com.yd.csf.service.dao.CommissionExpectedMapper
;
import
com.yd.csf.service.service.CommissionService
;
import
com.yd.csf.service.service.PolicyFollowService
;
import
com.yd.csf.service.service.PolicyService
;
import
com.yd.csf.service.vo.CommissionExpectedStatisticsVO
;
import
com.yd.csf.service.vo.CommissionExpectedVO
;
import
com.yd.csf.service.vo.CommissionExpectedStatisticsVO
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -39,13 +35,13 @@ import java.util.*;
import
java.util.stream.Collectors
;
/**
* @author Zhang Jianan
* @description 针对表【commission_expected(预计来佣表)】的数据库操作Service实现
* @createDate 2025-10-08 19:47:40
*/
* @author Zhang Jianan
* @description 针对表【commission_expected(预计来佣表)】的数据库操作Service实现
* @createDate 2025-10-08 19:47:40
*/
@Service
public
class
CommissionExpectedServiceImpl
extends
ServiceImpl
<
CommissionExpectedMapper
,
CommissionExpected
>
implements
CommissionExpectedService
{
implements
CommissionExpectedService
{
@Resource
private
PolicyService
policyService
;
...
...
@@ -56,6 +52,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
@Resource
private
CommissionService
commissionService
;
@Resource
private
ReceivableService
receivableService
;
@Override
...
...
@@ -91,32 +89,44 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
* 校验数据
*
* @param commissionExpected
* @param add 对创建的数据进行校验
* @param add
对创建的数据进行校验
*/
@Override
public
void
validCommissionExpected
(
CommissionExpected
commissionExpected
,
boolean
add
)
{
if
(
commissionExpected
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"预计来佣对象不能为空"
);
}
String
policyNo
=
commissionExpected
.
getPolicyNo
();
if
(
StringUtils
.
isBlank
(
policyNo
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"保单号不能为空"
);
}
String
commissionName
=
commissionExpected
.
getCommissionName
();
if
(
StringUtils
.
isBlank
(
commissionName
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"来佣名称不能为空"
);
// 来佣业务类型不能为空
String
commissionBizType
=
commissionExpected
.
getCommissionBizType
();
if
(
ObjectUtils
.
isEmpty
(
commissionBizType
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"应收款类型不能为空"
);
}
BigDecimal
commissionRatio
=
commissionExpected
.
getCommissionRatio
();
if
(
ObjectUtils
.
isEmpty
(
commissionRatio
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"来佣比例不能为空"
);
}
Integer
commissionPeriod
=
commissionExpected
.
getCommissionPeriod
();
if
(
ObjectUtils
.
isEmpty
(
commissionPeriod
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"佣金期数不能为空"
);
}
Integer
totalPeriod
=
commissionExpected
.
getTotalPeriod
();
if
(
ObjectUtils
.
isEmpty
(
totalPeriod
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"总来佣期数不能为空"
);
if
(
"R"
.
equals
(
commissionBizType
))
{
// 关联保单应收单,保单号不能为空
String
policyNo
=
commissionExpected
.
getPolicyNo
();
if
(
StringUtils
.
isBlank
(
policyNo
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"保单号不能为空"
);
}
String
commissionName
=
commissionExpected
.
getCommissionName
();
if
(
StringUtils
.
isBlank
(
commissionName
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"来佣名称不能为空"
);
}
BigDecimal
commissionRatio
=
commissionExpected
.
getCommissionRatio
();
if
(
ObjectUtils
.
isEmpty
(
commissionRatio
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"来佣比例不能为空"
);
}
Integer
commissionPeriod
=
commissionExpected
.
getCommissionPeriod
();
if
(
ObjectUtils
.
isEmpty
(
commissionPeriod
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"佣金期数不能为空"
);
}
Integer
totalPeriod
=
commissionExpected
.
getTotalPeriod
();
if
(
ObjectUtils
.
isEmpty
(
totalPeriod
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"总来佣期数不能为空"
);
}
}
else
if
(
"U"
.
equals
(
commissionBizType
))
{
if
(
ObjectUtils
.
isEmpty
(
commissionExpected
.
getAmount
()))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"来佣金额不能为空"
);
}
}
// 创建数据时,参数不能为空
if
(
add
)
{
...
...
@@ -139,12 +149,27 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
}
// 获取查询参数
String
policyNo
=
commissionExpectedQueryRequest
.
getPolicyNo
();
String
status
=
commissionExpectedQueryRequest
.
getStatus
();
Date
commissionDate
=
commissionExpectedQueryRequest
.
getCommissionDate
();
String
insurerBizId
=
commissionExpectedQueryRequest
.
getInsurerBizId
();
List
<
String
>
statusList
=
commissionExpectedQueryRequest
.
getStatusList
();
Date
commissionDateStart
=
commissionExpectedQueryRequest
.
getCommissionDateStart
();
Date
commissionDateEnd
=
commissionExpectedQueryRequest
.
getCommissionDateEnd
();
String
productLaunchBizId
=
commissionExpectedQueryRequest
.
getProductLaunchBizId
();
Integer
commissionBizType
=
commissionExpectedQueryRequest
.
getCommissionBizType
();
String
teamBizId
=
commissionExpectedQueryRequest
.
getTeamBizId
();
// 精确查询
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
policyNo
),
"policy_no"
,
policyNo
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
status
),
"status"
,
status
);
queryWrapper
.
le
(
ObjectUtils
.
isNotEmpty
(
commissionDate
),
"commission_date"
,
commissionDate
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
insurerBizId
),
"insurer_biz_id"
,
insurerBizId
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
productLaunchBizId
),
"product_launch_biz_id"
,
productLaunchBizId
);
queryWrapper
.
eq
(
ObjectUtils
.
isNotEmpty
(
commissionBizType
),
"commission_biz_type"
,
commissionBizType
);
queryWrapper
.
in
(
ObjectUtils
.
isNotEmpty
(
statusList
),
"status"
,
statusList
);
// 范围查询
queryWrapper
.
gt
(
ObjectUtils
.
isNotEmpty
(
commissionDateStart
),
"commission_date"
,
commissionDateStart
);
queryWrapper
.
lt
(
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})"
,
teamBizId
);
}
// 默认排序规则
queryWrapper
.
orderByDesc
(
"commission_date"
);
// 排序字段
...
...
@@ -216,6 +241,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
validCommissionExpected
(
commissionExpected
,
true
);
if
(
StringUtils
.
isBlank
(
addDto
.
getCommissionExpectedBizId
()))
{
// 生成应收账款编号
commissionExpected
.
setReceivableNo
(
receivableService
.
generateReceivableNo
(
addDto
));
// 生成新单编号
commissionExpected
.
setCommissionExpectedBizId
(
RandomStringGenerator
.
generateBizId16
(
"commission_expected"
));
commissionExpected
.
setCreateTime
(
new
Date
());
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionServiceImpl.java
View file @
c7598e16
...
...
@@ -35,6 +35,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
...
...
@@ -159,14 +160,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
public
void
afterCommit
()
{
try
{
// 重新查询最新的数据,获取已提交的数据
commissionAsyncService
.
commissionCompare
(
commission
.
getCommissionBizId
(),
commission
.
getPolicyNo
(),
commission
.
getCommissionName
(),
commission
.
getCommissionPeriod
(),
commission
.
getCurrency
(),
commissionUpdateRequest
.
getPremium
()
);
commissionAsyncService
.
commissionCompare
(
commission
);
}
catch
(
Exception
e
)
{
// 比对失败不影响主事务,记录日志即可
log
.
error
(
"主事务提交后,比对操作执行失败,commissionBizId: {}"
,
...
...
@@ -330,61 +324,33 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Boolean
generateFortune
(
GenerateFortuneRequest
generateFortuneRequest
)
{
List
<
String
>
commissionBizIdList
=
generateFortuneRequest
.
getCommissionBizIdList
();
// 1. 查询选中来佣记录
List
<
Commission
>
commissionList
=
this
.
list
(
new
QueryWrapper
<
Commission
>().
in
(
"commission_biz_id"
,
commissionBizIdList
));
// 获取所有保单号
Set
<
String
>
policyNoSet
=
commissionList
.
stream
().
map
(
Commission:
:
getPolicyNo
).
collect
(
Collectors
.
toSet
());
if
(
generateFortuneRequest
.
getPayoutDate
()
==
null
)
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"请选择本次发佣日期"
);
}
//
2
. 查询对应的预计发佣记录
QueryWrapper
<
ExpectedFortune
>
expectedFortuneQueryWrapper
=
new
QueryWrapper
<
ExpectedFortune
>().
in
(
"policy_no"
,
policyNoSet
);
List
<
ExpectedFortune
>
expectedFortuneList
=
iExpectedFortuneService
.
list
(
expectedFortuneQueryWrapper
);
//
1
. 查询对应的预计发佣记录
List
<
Long
>
expectedFortuneIdList
=
generateFortuneRequest
.
getExpectedFortuneIdList
(
);
List
<
ExpectedFortune
>
expectedFortuneList
=
iExpectedFortuneService
.
list
ByIds
(
expectedFortuneIdList
);
if
(
CollectionUtils
.
isEmpty
(
expectedFortuneList
))
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"未找到保单对应的预计发佣记录,请先创建预计发佣记录"
);
}
else
{
Set
<
String
>
expectedPolicyNoSet
=
expectedFortuneList
.
stream
().
map
(
ExpectedFortune:
:
getPolicyNo
).
collect
(
Collectors
.
toSet
());
// 获取没有预计发佣的保单号
Set
<
String
>
notExpectedPolicyNoSet
=
policyNoSet
.
stream
().
filter
(
policyNo
->
!
expectedPolicyNoSet
.
contains
(
policyNo
)).
collect
(
Collectors
.
toSet
());
if
(!
CollectionUtils
.
isEmpty
(
notExpectedPolicyNoSet
))
{
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
"未找到以下保单对应的预计发佣记录,请先创建预计发佣记录:"
+
String
.
join
(
","
,
notExpectedPolicyNoSet
));
}
}
// 构建保单号+期次的复合键集合
Set
<
String
>
commissionPolicyPeriodKeys
=
commissionList
.
stream
()
.
map
(
commission
->
buildPolicyPeriodKey
(
commission
.
getPolicyNo
(),
commission
.
getCommissionPeriod
()))
.
collect
(
Collectors
.
toSet
());
// 3. 根据保单号查询所有发佣记录
List
<
Fortune
>
fortuneList
=
fortuneService
.
list
(
new
QueryWrapper
<
Fortune
>().
in
(
"policy_no"
,
policyNoSet
));
// 2. 根据本次发佣日期,查询本期待发佣记录
List
<
Fortune
>
fortuneList
=
fortuneService
.
list
(
new
QueryWrapper
<
Fortune
>().
in
(
"payout_date"
,
generateFortuneRequest
.
getPayoutDate
()));
// 4. 校验,如果有"可发放或已发并关账"的发佣记录,不能重复生成
for
(
Fortune
item
:
fortuneList
)
{
if
(
StringUtils
.
equals
(
item
.
getStatus
(),
FortuneStatusEnum
.
CAN_SEND
.
getItemValue
())
||
StringUtils
.
equals
(
item
.
getStatus
(),
FortuneStatusEnum
.
SENT
.
getItemValue
()))
{
throw
new
BusinessException
(
ResultCode
.
FAIL
.
getCode
(),
"该来佣记录已有出帐,不能生成"
);
}
}
// 3.根据本次发佣日期,删除旧的发佣记录,以便重新计算
fortuneService
.
removeByIds
(
fortuneList
);
// 5. 筛选匹配的预计发佣记录(优化性能)
List
<
ExpectedFortune
>
filteredExpectedFortuneList
=
expectedFortuneList
.
stream
()
.
filter
(
expectedFortune
->
commissionPolicyPeriodKeys
.
contains
(
buildPolicyPeriodKey
(
expectedFortune
.
getPolicyNo
(),
expectedFortune
.
getFortunePeriod
())))
.
collect
(
Collectors
.
toList
());
// 6.删除旧的发佣记录
fortuneService
.
remove
(
new
QueryWrapper
<
Fortune
>().
in
(
"policy_no"
,
policyNoSet
));
// 4.根据保单号查询对应来佣记录
Set
<
String
>
policyNoSet
=
expectedFortuneList
.
stream
()
.
map
(
ExpectedFortune:
:
getPolicyNo
)
.
collect
(
Collectors
.
toSet
());
// 7.1 查询所选保单号对应已发薪资记录
QueryWrapper
<
Fortune
>
fortuneQueryWrapper
=
new
QueryWrapper
<>();
fortuneQueryWrapper
.
in
(
"policy_no"
,
filteredExpectedFortuneList
.
stream
().
map
(
ExpectedFortune:
:
getPolicyNo
).
collect
(
Collectors
.
toList
()));
fortuneQueryWrapper
.
eq
(
"status"
,
FortuneStatusEnum
.
SENT
.
getItemValue
());
List
<
Fortune
>
policyPaidFortuneList
=
fortuneService
.
list
(
fortuneQueryWrapper
);
List
<
Commission
>
commissionList
=
this
.
list
(
new
QueryWrapper
<
Commission
>().
in
(
"policy_no"
,
policyNoSet
));
//
7.2
构建实际的初始发佣记录
List
<
Fortune
>
newFortuneList
=
buildNewFortunes
(
filteredExpectedFortuneList
,
commissionList
,
policyPaidFortune
List
);
//
5.
构建实际的初始发佣记录
List
<
Fortune
>
newFortuneList
=
buildNewFortunes
(
expectedFortuneList
,
commission
List
);
// List<Fortune> newFortuneList = new ArrayList<>();
// for (ExpectedFortune expectedFortune : filteredExpectedFortuneList) {
// Fortune fortune = new Fortune();
...
...
@@ -426,9 +392,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
/**
* 构建新的发佣记录
*/
private
List
<
Fortune
>
buildNewFortunes
(
List
<
ExpectedFortune
>
filteredExpectedFortuneList
,
List
<
Commission
>
commissionList
,
List
<
Fortune
>
policyPaidFortuneList
)
{
private
List
<
Fortune
>
buildNewFortunes
(
List
<
ExpectedFortune
>
expectedFortuneList
,
List
<
Commission
>
commissionList
)
{
// 构建来佣记录映射,用于快速查找
Map
<
String
,
Commission
>
commissionByPolicyPeriod
=
commissionList
.
stream
()
.
collect
(
Collectors
.
toMap
(
...
...
@@ -437,12 +402,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
));
Date
now
=
new
Date
();
return
filteredE
xpectedFortuneList
.
stream
()
return
e
xpectedFortuneList
.
stream
()
.
map
(
expectedFortune
->
{
Fortune
fortune
=
new
Fortune
();
BeanUtils
.
copyProperties
(
expectedFortune
,
fortune
);
fortune
.
setFortuneBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_FORTUNE
.
getCode
()));
fortune
.
setAmount
(
expectedFortune
.
getCurrentPaymentAmount
());
fortune
.
setExpectedFortuneBizId
(
expectedFortune
.
getExpectedFortuneBizId
());
fortune
.
setStatus
(
FortuneStatusEnum
.
CAN_SEND
.
getItemValue
());
// 关联来佣业务ID
...
...
@@ -455,9 +422,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
fortune
.
setRemark
(
"未找到当前预计发佣对应的来佣"
);
}
// 扣减已发薪资
calculateCurrentFortune
(
fortune
,
policyPaidFortuneList
);
fortune
.
setCreateTime
(
now
);
fortune
.
setUpdateTime
(
now
);
...
...
@@ -515,6 +479,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if
(
policy
==
null
&&
!
policyFollowExists
)
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"该保单号不存在,不能添加来佣"
);
}
if
(
ObjectUtils
.
isEmpty
(
commissionAddRequest
.
getPremium
()))
{
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
"保费不能为空"
);
}
// 获取当前登录用户
AuthUserDto
currentLoginUser
=
SecurityUtil
.
getCurrentLoginUser
();
...
...
@@ -546,14 +513,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
public
void
afterCommit
()
{
try
{
// 重新查询最新的数据,获取已提交的数据
commissionAsyncService
.
commissionCompare
(
commission
.
getCommissionBizId
(),
commission
.
getPolicyNo
(),
commission
.
getCommissionName
(),
commission
.
getCommissionPeriod
(),
commission
.
getCurrency
(),
commissionAddRequest
.
getPremium
()
);
commissionAsyncService
.
commissionCompare
(
commission
);
}
catch
(
Exception
e
)
{
// 比对失败不影响主事务,记录日志即可
log
.
error
(
"主事务提交后,比对操作执行失败,commissionBizId: {}"
,
...
...
@@ -646,6 +606,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionCompareRecord
.
setCommissionPeriod
(
commission
.
getCommissionPeriod
());
commissionCompareRecord
.
setTotalPeriod
(
commission
.
getTotalPeriod
());
commissionCompareRecord
.
setAmount
(
commission
.
getAmount
());
commissionCompareRecord
.
setCurrentCommissionRatio
(
commission
.
getCurrentCommissionRatio
());
commissionCompareRecord
.
setCurrency
(
commission
.
getCurrency
());
commissionCompareRecord
.
setExchangeRate
(
commission
.
getExchangeRate
());
commissionCompareRecord
.
setStatus
(
commission
.
getStatus
());
...
...
@@ -666,10 +627,28 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionCompareRecord
.
setExchangeRate
(
commission
.
getExchangeRate
());
commissionCompareRecord
.
setStatus
(
commission
.
getStatus
());
commissionCompareRecord
.
setRemark
(
commission
.
getRemark
());
commissionCompareRecord
.
setOperatorName
(
currentLoginUser
.
getUsername
());
commissionCompareRecord
.
setCreateTime
(
commission
.
getCreateTime
());
return
commissionCompareRecord
;
}
@Override
public
Boolean
addCommissionBatch
(
List
<
CommissionAddRequest
>
customerAddRequestList
)
{
if
(
CollectionUtils
.
isEmpty
(
customerAddRequestList
))
{
throw
new
BusinessException
(
ResultCode
.
PARAMS_ERROR
.
getCode
(),
"来佣数据不能为空"
);
}
List
<
Commission
>
commissionList
=
new
ArrayList
<>();
for
(
CommissionAddRequest
request
:
customerAddRequestList
)
{
Commission
commission
=
new
Commission
();
BeanUtils
.
copyProperties
(
request
,
commission
);
commission
.
setCommissionBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_COMMISSION
.
getCode
()));
commissionList
.
add
(
commission
);
}
return
this
.
saveBatch
(
commissionList
);
}
/**
* 查询列表
*
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/ExpectedFortuneServiceImpl.java
View file @
c7598e16
package
com
.
yd
.
csf
.
service
.
service
.
impl
;
import
cn.hutool.core.collection.CollUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
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.feign.response.expectedfortune.PolicyInfo
;
import
com.yd.csf.service.model.ExpectedFortune
;
import
com.yd.csf.service.dao.ExpectedFortuneMapper
;
import
com.yd.csf.service.model.Policy
;
import
com.yd.csf.service.service.IExpectedFortuneService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.yd.csf.service.service.PolicyService
;
import
com.yd.csf.service.vo.ExpectedFortuneStatisticsVO
;
import
org.
apache.ibatis.annotations.Param
;
import
org.
springframework.beans.BeanUtils
;
import
org.springframework.stereotype.Service
;
import
java
.util.Collections
;
import
java
x.annotation.Resource
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
/**
* <p>
...
...
@@ -27,10 +35,13 @@ import java.util.List;
@Service
public
class
ExpectedFortuneServiceImpl
extends
ServiceImpl
<
ExpectedFortuneMapper
,
ExpectedFortune
>
implements
IExpectedFortuneService
{
@Resource
private
PolicyService
policyService
;
@Override
public
IPage
<
ApiExpectedFortunePageResponse
>
page
(
Page
<
ApiExpectedFortunePageResponse
>
page
,
ApiExpectedFortunePageRequest
request
)
{
return
baseMapper
.
page
(
page
,
request
);
return
baseMapper
.
page
(
page
,
request
);
}
@Override
...
...
@@ -40,21 +51,51 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
/**
* 查询列表
*
* @param policyNo
* @return
*/
@Override
public
List
<
ExpectedFortune
>
queryList
(
String
policyNo
)
{
return
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
ExpectedFortune
>().
eq
(
ExpectedFortune:
:
getPolicyNo
,
policyNo
));
return
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
ExpectedFortune
>().
eq
(
ExpectedFortune:
:
getPolicyNo
,
policyNo
));
}
@Override
public
Boolean
batchDelByPolicyNo
(
String
policyNo
)
{
return
this
.
remove
(
new
LambdaQueryWrapper
<
ExpectedFortune
>().
eq
(
ExpectedFortune:
:
getPolicyNo
,
policyNo
));
return
this
.
remove
(
new
LambdaQueryWrapper
<
ExpectedFortune
>().
eq
(
ExpectedFortune:
:
getPolicyNo
,
policyNo
));
}
@Override
public
ExpectedFortuneStatisticsVO
getStatistics
(
List
<
Long
>
expectedFortuneIds
)
{
return
baseMapper
.
getStatistics
(
expectedFortuneIds
);
}
@Override
public
IPage
<
ApiExpectedFortunePageResponse
>
getVOPage
(
IPage
<
ExpectedFortune
>
iPage
)
{
List
<
ExpectedFortune
>
expectedFortuneList
=
iPage
.
getRecords
();
Page
<
ApiExpectedFortunePageResponse
>
expectedFortuneVOPage
=
new
Page
<>(
iPage
.
getCurrent
(),
iPage
.
getSize
(),
iPage
.
getTotal
());
if
(
CollUtil
.
isEmpty
(
expectedFortuneList
))
{
return
expectedFortuneVOPage
;
}
// 查询关联的保单信息
List
<
String
>
policyNoList
=
expectedFortuneList
.
stream
().
map
(
ExpectedFortune:
:
getPolicyNo
).
collect
(
Collectors
.
toList
());
QueryWrapper
<
Policy
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
in
(
"policy_no"
,
policyNoList
);
List
<
Policy
>
policyInfoList
=
policyService
.
list
(
queryWrapper
);
Map
<
String
,
Policy
>
policyMap
=
policyInfoList
.
stream
().
collect
(
Collectors
.
toMap
(
Policy:
:
getPolicyNo
,
Function
.
identity
()));
List
<
ApiExpectedFortunePageResponse
>
expectedFortuneVOList
=
expectedFortuneList
.
stream
().
map
(
expectedFortune
->
{
ApiExpectedFortunePageResponse
expectedFortuneVO
=
new
ApiExpectedFortunePageResponse
();
BeanUtils
.
copyProperties
(
expectedFortune
,
expectedFortuneVO
);
if
(
policyMap
.
get
(
expectedFortune
.
getPolicyNo
())
!=
null
)
{
PolicyInfo
policyInfo
=
new
PolicyInfo
();
BeanUtils
.
copyProperties
(
policyMap
.
get
(
expectedFortune
.
getPolicyNo
()),
policyInfo
);
expectedFortuneVO
.
setPolicy
(
policyInfo
);
}
return
expectedFortuneVO
;
}).
collect
(
Collectors
.
toList
());
expectedFortuneVOPage
.
setRecords
(
expectedFortuneVOList
);
return
expectedFortuneVOPage
;
}
}
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/FortuneServiceImpl.java
View file @
c7598e16
...
...
@@ -22,6 +22,7 @@ import com.yd.csf.service.service.CommissionService;
import
com.yd.csf.service.service.FortuneAccountService
;
import
com.yd.csf.service.service.FortuneService
;
import
com.yd.csf.service.dao.FortuneMapper
;
import
com.yd.csf.service.vo.CommissionVO
;
import
com.yd.csf.service.vo.FortuneVO
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -80,10 +81,11 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
List
<
FortuneVO
>
fortuneVOList
=
fortuneList
.
stream
().
map
(
FortuneVO:
:
objToVo
).
collect
(
Collectors
.
toList
());
// 关联查询已来佣金额
List
<
Commission
>
commissionList
=
commissionService
.
list
(
new
QueryWrapper
<
Commission
>().
in
(
"commission_biz_id"
,
fortuneList
.
stream
().
map
(
Fortune:
:
getCommissionBizId
).
collect
(
Collectors
.
toList
())));
Map
<
String
,
BigDecimal
>
commissionAmountMap
=
commissionList
.
stream
().
collect
(
Collectors
.
toMap
(
Commission:
:
getCommissionBizId
,
Commission:
:
getAmount
));
Map
<
String
,
Commission
>
commissionMap
=
commissionList
.
stream
().
collect
(
Collectors
.
toMap
(
Commission:
:
getCommissionBizId
,
commission
->
commission
));
fortuneVOList
.
forEach
(
fortuneVO
->
{
String
commissionBizId
=
fortuneVO
.
getCommissionBizId
();
fortuneVO
.
setCommissionAmount
(
commissionAmountMap
.
getOrDefault
(
commissionBizId
,
BigDecimal
.
ZERO
));
// fortuneVO.setCommissionAmount(commissionAmountMap.getOrDefault(commissionBizId, BigDecimal.ZERO));
fortuneVO
.
setCommission
(
CommissionVO
.
objToVo
(
commissionMap
.
get
(
commissionBizId
)));
});
fortuneVOPage
.
setRecords
(
fortuneVOList
);
...
...
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionExpectedStatisticsVO.java
View file @
c7598e16
...
...
@@ -11,21 +11,21 @@ import java.math.BigDecimal;
@Data
public
class
CommissionExpectedStatisticsVO
{
/**
*
总金额
*
预计入账金额(HKD)
*/
@Schema
(
description
=
"
总金额
"
)
@Schema
(
description
=
"
预计入账金额(HKD)
"
)
private
BigDecimal
totalAmount
;
/**
*
总入账金额
*
已入账金额(HKD)
*/
@Schema
(
description
=
"
总入账金额
"
)
@Schema
(
description
=
"
已入账金额(HKD)
"
)
private
BigDecimal
totalPaidAmount
;
/**
* 待入账金额
* 待入账金额
(HKD)
*/
@Schema
(
description
=
"待入账金额"
)
@Schema
(
description
=
"待入账金额
(HKD)
"
)
private
BigDecimal
pendingPaidAmount
;
/**
...
...
yd-csf-service/src/main/java/com/yd/csf/service/vo/CommissionExpectedVO.java
View file @
c7598e16
...
...
@@ -28,12 +28,36 @@ public class CommissionExpectedVO implements Serializable {
private
String
commissionExpectedBizId
;
/**
* 应收账款编号
*/
@Schema
(
description
=
"应收账款编号"
)
private
String
receivableNo
;
/**
* 应收款类型 1=关联保单应收单 2=非关联保单应收单
*/
@Schema
(
description
=
"应收款类型 1=关联保单应收单 2=非关联保单应收单"
)
private
Integer
commissionBizType
;
/**
* 保单号
*/
@Schema
(
description
=
"保单号"
)
private
String
policyNo
;
/**
* 保险公司业务ID
*/
@Schema
(
description
=
"保险公司业务ID"
)
private
String
insurerBizId
;
/**
* 产品上架信息表唯一业务ID
*/
@Schema
(
description
=
"产品计划: 产品上架信息表唯一业务ID"
)
private
String
productLaunchBizId
;
/**
* 保费
*/
@Schema
(
description
=
"保费"
)
...
...
@@ -70,9 +94,9 @@ public class CommissionExpectedVO implements Serializable {
private
String
commissionType
;
/**
* 预计
来佣
比例 (%)
* 预计
入账
比例 (%)
*/
@Schema
(
description
=
"预计
来佣
比例 (%)"
)
@Schema
(
description
=
"预计
入账
比例 (%)"
)
private
BigDecimal
commissionRatio
;
/**
...
...
@@ -95,36 +119,36 @@ public class CommissionExpectedVO implements Serializable {
private
Date
commissionDate
;
/**
*
预计来佣状态 0=待来佣 1=已来佣 2=部分来佣
*
入账状态 0=待入账 1=完成入账 2=部分入账 3=已失效
*/
@Schema
(
description
=
"
预计来佣状态 0=待来佣 1=已来佣 2=部分来佣
"
)
@Schema
(
description
=
"
入账状态 0=待入账 1=完成入账 2=部分入账 3=已失效
"
)
private
String
status
;
/**
* 预计
来佣金额
/**
* 预计
入账金额(HKD)
*/
@Schema
(
description
=
"预计
来佣金额
"
)
@Schema
(
description
=
"预计
入账金额(HKD)
"
)
private
BigDecimal
expectedAmount
;
/**
*
默认结算汇率
/**
*
结算汇率(估)
*/
@Schema
(
description
=
"
默认结算汇率
"
)
@Schema
(
description
=
"
结算汇率(估)
"
)
private
BigDecimal
defaultExchangeRate
;
/**
* 已入账来佣金额
/**
* 已入账来佣金额
(HKD)
*/
@Schema
(
description
=
"已入账来佣金额"
)
@Schema
(
description
=
"已入账来佣金额
(HKD)
"
)
private
BigDecimal
paidAmount
;
/**
* 已入账来佣比例
/**
* 已入账来佣比例
(%)
*/
@Schema
(
description
=
"已入账来佣比例"
)
@Schema
(
description
=
"已入账来佣比例
(%)
"
)
private
BigDecimal
paidRatio
;
/**
/**
* 已入账来佣列表
*/
@Schema
(
description
=
"已入账来佣列表"
)
...
...
yd-csf-service/src/main/java/com/yd/csf/service/vo/ExpectedFortuneStatisticsVO.java
View file @
c7598e16
...
...
@@ -6,15 +6,15 @@ import lombok.Data;
import
java.math.BigDecimal
;
/**
* 预计
发佣统计VO 预计发佣
金额 HKD、已出账金额 HKD、待出账金额 HKD、总保单数、总保费 HKD
* 预计
出账统计VO 预计出账
金额 HKD、已出账金额 HKD、待出账金额 HKD、总保单数、总保费 HKD
*/
@Data
public
class
ExpectedFortuneStatisticsVO
{
/**
* 预计
发佣
金额 HKD
* 预计
出账
金额 HKD
*/
@Schema
(
description
=
"预计
发佣
金额 HKD"
)
@Schema
(
description
=
"预计
出账
金额 HKD"
)
private
BigDecimal
totalExpectedAmount
;
/**
...
...
yd-csf-service/src/main/java/com/yd/csf/service/vo/FortuneVO.java
View file @
c7598e16
...
...
@@ -39,10 +39,16 @@ public class FortuneVO implements Serializable {
private
String
commissionBizId
;
/**
* 关联来佣信息
*/
@Schema
(
description
=
"关联来佣信息"
)
private
CommissionVO
commission
;
/**
* 本次已来佣金额
*/
@Schema
(
description
=
"本次已来佣金额"
)
private
Object
commissionAmount
;
//
@Schema(description = "本次已来佣金额")
//
private Object commissionAmount;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
...
...
yd-csf-service/src/main/java/com/yd/csf/service/vo/PolicyVO.java
View file @
c7598e16
package
com
.
yd
.
csf
.
service
.
vo
;
import
cn.hutool.json.JSONUtil
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.yd.csf.service.model.Policy
;
import
io.swagger.v3.oas.annotations.media.Schema
;
...
...
@@ -84,6 +83,12 @@ public class PolicyVO {
@Schema
(
description
=
"期交保费"
)
private
BigDecimal
paymentPremium
;
/**
* 每期保费
*/
@Schema
(
description
=
"每期保费"
)
private
BigDecimal
eachIssuePremium
;
/**
* 保单状态
*/
...
...
@@ -137,6 +142,12 @@ public class PolicyVO {
private
Integer
isPrepaid
;
/**
* 是否预缴: 0-否, 1-是
*/
@Schema
(
description
=
"是否预缴: 0-否, 1-是"
)
private
Integer
isPrepay
;
/**
* 预缴年期
*/
@Schema
(
description
=
"预缴年期"
)
...
...
@@ -173,6 +184,8 @@ public class PolicyVO {
}
PolicyVO
policyVO
=
new
PolicyVO
();
BeanUtils
.
copyProperties
(
policy
,
policyVO
);
policyVO
.
setEachIssuePremium
(
policy
.
getPaymentPremium
());
policyVO
.
setIsPrepay
(
policy
.
getIsPrepaid
());
return
policyVO
;
}
...
...
yd-csf-service/src/main/resources/mappers/CommissionCompareRecordMapper.xml
View file @
c7598e16
...
...
@@ -15,13 +15,15 @@
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"exchangeRate"
column=
"exchange_rate"
/>
<result
property=
"amount"
column=
"amount"
/>
<result
property=
"currentCommissionRatio"
column=
"current_commission_ratio"
/>
<result
property=
"operatorName"
column=
"operator_name"
/>
<result
property=
"remark"
column=
"remark"
/>
<result
property=
"isDeleted"
column=
"is_deleted"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id,commission_expected_biz_id,commission_biz_id,commission_period,total_period,status,
currency,create_time,exchange_rate,amount,remark,
currency,create_time,exchange_rate,amount,
current_commission_ratio,operator_name,
remark,
is_deleted
</sql>
</mapper>
yd-csf-service/src/main/resources/mappers/CommissionExpectedMapper.xml
View file @
c7598e16
...
...
@@ -7,14 +7,18 @@
<resultMap
id=
"BaseResultMap"
type=
"com.yd.csf.service.model.CommissionExpected"
>
<id
property=
"id"
column=
"id"
/>
<result
property=
"commissionExpectedBizId"
column=
"commission_expected_biz_id"
/>
<result
property=
"receivableNo"
column=
"receivable_no"
/>
<result
property=
"commissionBizType"
column=
"commission_biz_type"
/>
<result
property=
"policyNo"
column=
"policy_no"
/>
<result
property=
"reconciliationCompany"
column=
"reconciliation_company"
/>
<result
property=
"reconciliationCompanyCode"
column=
"reconciliation_company_code"
/>
<result
property=
"reconciliationCompanyBizId"
column=
"reconciliation_company_biz_id"
/>
<result
property=
"commissionPeriod"
column=
"commission_period"
/>
<result
property=
"totalPeriod"
column=
"total_period"
/>
<result
property=
"commissionName"
column=
"commission_name"
/>
<result
property=
"commissionType"
column=
"commission_type"
/>
<result
property=
"commissionRatio"
column=
"commission_ratio"
/>
<result
property=
"amount"
column=
"amount"
/>
<result
property=
"currency"
column=
"currency"
/>
<result
property=
"commissionDate"
column=
"commission_date"
/>
<result
property=
"status"
column=
"status"
/>
...
...
@@ -30,8 +34,8 @@
</resultMap>
<sql
id=
"Base_Column_List"
>
id,commission_expected_biz_id,
policy_no,reconciliation_company
,reconciliation_company_biz_id,commission_period,
total_period,commission_name,commission_type,commission_ratio,currency,default_exchange_rate,expected_amount,
id,commission_expected_biz_id,
receivable_no,commission_biz_type,policy_no,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,paid_amount,remark,is_deleted,creator_id,
updater_id,create_time,update_time
</sql>
...
...
@@ -43,10 +47,11 @@
COUNT(DISTINCT policy_no) AS totalPolicyCount
FROM
commission_expected
WHERE
<where>
id IN
<foreach
collection=
"expectedIds"
item=
"item"
open=
"("
close=
")"
separator=
","
>
#{item}
</foreach>
</where>
</select>
</mapper>
yd-csf-service/src/main/resources/mappers/CommissionMapper.xml
View file @
c7598e16
...
...
@@ -6,10 +6,13 @@
<resultMap
id=
"BaseResultMap"
type=
"com.yd.csf.service.model.Commission"
>
<id
property=
"id"
column=
"id"
/>
<result
property=
"receivableNo"
column=
"receivable_no"
/>
<result
property=
"commissionBizId"
column=
"commission_biz_id"
/>
<result
property=
"reconciliationYearMonth"
column=
"reconciliation_year_month"
/>
<result
property=
"policyNo"
column=
"policy_no"
/>
<result
property=
"premium"
column=
"premium"
/>
<result
property=
"reconciliationCompany"
column=
"reconciliation_company"
/>
<result
property=
"reconciliationCompanyCode"
column=
"reconciliation_company_code"
/>
<result
property=
"reconciliationCompanyBizId"
column=
"reconciliation_company_biz_id"
/>
<result
property=
"commissionPeriod"
column=
"commission_period"
/>
<result
property=
"totalPeriod"
column=
"total_period"
/>
...
...
@@ -32,7 +35,7 @@
</resultMap>
<sql
id=
"Base_Column_List"
>
id,
commission_biz_id,policy_no,premium,reconciliation_company
,reconciliation_company_biz_id,commission_period,
id,
receivable_no,commission_biz_id,reconciliation_year_month,policy_no,premium,reconciliation_company,reconciliation_company_code
,reconciliation_company_biz_id,commission_period,
total_period,commission_name,commission_type,exchange_rate,amount,currency,
commission_date,current_commission_ratio,period_paid_ratio,period_pending_ratio,status,remark,is_deleted,creator_id,
updater_id,create_time,update_time
...
...
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