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
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
1111 additions
and
108 deletions
+1111
-108
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
+0
-0
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
+0
-0
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
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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