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
13b0cf83
Commit
13b0cf83
authored
Jun 08, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
push
parent
a132bdb6
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
197 additions
and
398 deletions
+197
-398
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionExpectedController.java
+84
-84
yd-csf-service/src/main/java/com/yd/csf/service/dao/CommissionExpectedMapper.java
+11
-11
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionExpectedService.java
+3
-3
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
+9
-9
yd-csf-service/src/main/resources/mappers/CommissionExpectedMapper.xml
+90
-291
No files found.
yd-csf-api/src/main/java/com/yd/csf/api/controller/ApiCommissionExpectedController.java
View file @
13b0cf83
...
...
@@ -351,55 +351,55 @@ public class ApiCommissionExpectedController {
* @param commissionExpectedQueryRequest
* @return
*/
//
@PostMapping("/receivable_report")
//
@Operation(summary = "应收款报表")
//
public Result<ReceivableReportResponse> receivableReport(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) {
//
//保單持有人(中/英、繁简/大小写)、签单人、转介人名称(主)、受保人(中/英、繁简/大小写)、查询保单号列表
//
List<String> queryPolicyNoList = new ArrayList<>();
//
Boolean queryFlag = false;
//
if (StringUtils.isNotBlank(commissionExpectedQueryRequest.getPolicyHolder())
//
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getSigner())
//
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getBrokerName())
//
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getInsured())
//
){
//
queryPolicyNoList = policyFollowService.queryPolicyNoList(
//
commissionExpectedQueryRequest.getPolicyHolder(),
//
commissionExpectedQueryRequest.getSigner(),
//
commissionExpectedQueryRequest.getBrokerName(),
//
commissionExpectedQueryRequest.getInsured());
//
queryFlag = true;
//
}
//
log.info("应收款报表=>receivableReport=>queryPolicyNoList:{}",JSON.toJSONString(queryPolicyNoList));
//
// 构建查询条件
//
commissionExpectedQueryRequest.setPolicyNoList(queryPolicyNoList);
//
commissionExpectedQueryRequest.setQueryFlag(queryFlag);
//
QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest);
//
//
//
List<Long> allExpectedIdList = new ArrayList<>();
//
// 先查询所有符合条件的记录ID(用于统计)
//
//
List<CommissionExpected> allCommissionExpectedList = commissionExpectedService.list(queryWrapper);
//
//
List<Long> allExpectedIdList = allCommissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList());
//
//
// 查询统计数据(基于所有符合条件的记录)
//
//
CommissionExpectedStatisticsVO statisticsVO = commissionExpectedService.getExpectedStatisticsNew(allCommissionExpectedList);
//
//
queryWrapper.select("id");
//
List<Long> allExpectedIdList = commissionExpectedService.listObjs(queryWrapper, obj -> (Long) obj);
//
//
// 应收款报表分页查询 - 按保单号和期数维度统计
//
Page<ReceivableReportVO> reportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize());
//
IPage<ReceivableReportVO> receivableReportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize());
//
if (!CollectionUtils.isEmpty(allExpectedIdList)) {
//
receivableReportPage = commissionExpectedService.receivableReportPage(reportPage, allExpectedIdList);
//
}
//
//
enrichReceivableReportWithCompanyName(receivableReportPage);
//
receivableReportPage = convertReceivableReport(receivableReportPage);
//
// 组装返回结果
//
ReceivableReportResponse response = new ReceivableReportResponse();
//
//
response.setStatisticsVO(statisticsVO);
//
response.setPage(receivableReportPage);
//
return Result.success(response);
//
}
@PostMapping
(
"/receivable_report"
)
@Operation
(
summary
=
"应收款报表"
)
public
Result
<
ReceivableReportResponse
>
receivableReport
(
@RequestBody
CommissionExpectedQueryRequest
commissionExpectedQueryRequest
)
{
//保單持有人(中/英、繁简/大小写)、签单人、转介人名称(主)、受保人(中/英、繁简/大小写)、查询保单号列表
List
<
String
>
queryPolicyNoList
=
new
ArrayList
<>();
Boolean
queryFlag
=
false
;
if
(
StringUtils
.
isNotBlank
(
commissionExpectedQueryRequest
.
getPolicyHolder
())
||
StringUtils
.
isNotBlank
(
commissionExpectedQueryRequest
.
getSigner
())
||
StringUtils
.
isNotBlank
(
commissionExpectedQueryRequest
.
getBrokerName
())
||
StringUtils
.
isNotBlank
(
commissionExpectedQueryRequest
.
getInsured
())
){
queryPolicyNoList
=
policyFollowService
.
queryPolicyNoList
(
commissionExpectedQueryRequest
.
getPolicyHolder
(),
commissionExpectedQueryRequest
.
getSigner
(),
commissionExpectedQueryRequest
.
getBrokerName
(),
commissionExpectedQueryRequest
.
getInsured
());
queryFlag
=
true
;
}
log
.
info
(
"应收款报表=>receivableReport=>queryPolicyNoList:{}"
,
JSON
.
toJSONString
(
queryPolicyNoList
));
// 构建查询条件
commissionExpectedQueryRequest
.
setPolicyNoList
(
queryPolicyNoList
);
commissionExpectedQueryRequest
.
setQueryFlag
(
queryFlag
);
QueryWrapper
<
CommissionExpected
>
queryWrapper
=
commissionExpectedService
.
getQueryWrapper
(
commissionExpectedQueryRequest
);
// List<Long> allExpectedIdList = new ArrayList<>();
// 先查询所有符合条件的记录ID(用于统计)
// List<CommissionExpected> allCommissionExpectedList = commissionExpectedService.list(queryWrapper);
// List<Long> allExpectedIdList = allCommissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList());
// 查询统计数据(基于所有符合条件的记录)
// CommissionExpectedStatisticsVO statisticsVO = commissionExpectedService.getExpectedStatisticsNew(allCommissionExpectedList);
queryWrapper
.
select
(
"id"
);
List
<
Long
>
allExpectedIdList
=
commissionExpectedService
.
listObjs
(
queryWrapper
,
obj
->
(
Long
)
obj
);
// 应收款报表分页查询 - 按保单号和期数维度统计
Page
<
ReceivableReportVO
>
reportPage
=
new
Page
<>(
commissionExpectedQueryRequest
.
getPageNo
(),
commissionExpectedQueryRequest
.
getPageSize
());
IPage
<
ReceivableReportVO
>
receivableReportPage
=
new
Page
<>(
commissionExpectedQueryRequest
.
getPageNo
(),
commissionExpectedQueryRequest
.
getPageSize
());
if
(!
CollectionUtils
.
isEmpty
(
allExpectedIdList
))
{
receivableReportPage
=
commissionExpectedService
.
receivableReportPage
(
reportPage
,
allExpectedIdList
);
}
// enrichReceivableReportWithCompanyName(receivableReportPage);
receivableReportPage
=
convertReceivableReport
(
receivableReportPage
);
// 组装返回结果
ReceivableReportResponse
response
=
new
ReceivableReportResponse
();
// response.setStatisticsVO(statisticsVO);
response
.
setPage
(
receivableReportPage
);
return
Result
.
success
(
response
);
}
@PostMapping
(
"/receivable_report/statistics"
)
...
...
@@ -447,41 +447,41 @@ public class ApiCommissionExpectedController {
return
Result
.
success
(
response
);
}
@PostMapping
(
"/receivable_report"
)
@Operation
(
summary
=
"应收款报表"
)
public
Result
<
ReceivableReportResponse
>
receivableReport
(
@RequestBody
CommissionExpectedQueryRequest
request
)
{
// 1. 根据持有人、签单人等条件查询保单号列表
List
<
String
>
queryPolicyNoList
=
new
ArrayList
<>();
Boolean
queryFlag
=
false
;
if
(
StringUtils
.
isNotBlank
(
request
.
getPolicyHolder
())
||
StringUtils
.
isNotBlank
(
request
.
getSigner
())
||
StringUtils
.
isNotBlank
(
request
.
getBrokerName
())
||
StringUtils
.
isNotBlank
(
request
.
getInsured
()))
{
queryPolicyNoList
=
policyFollowService
.
queryPolicyNoList
(
request
.
getPolicyHolder
(),
request
.
getSigner
(),
request
.
getBrokerName
(),
request
.
getInsured
());
queryFlag
=
true
;
}
log
.
info
(
"应收款报表=>receivableReport=>queryPolicyNoList:{}"
,
JSON
.
toJSONString
(
queryPolicyNoList
));
// 2. 将保单号列表设回请求对象
request
.
setPolicyNoList
(
queryPolicyNoList
);
request
.
setQueryFlag
(
queryFlag
);
// 3. 直接分页查询(无需先查 ID)
Page
<
ReceivableReportVO
>
page
=
new
Page
<>(
request
.
getPageNo
(),
request
.
getPageSize
());
IPage
<
ReceivableReportVO
>
receivableReportPage
=
commissionExpectedService
.
receivableReportPage
(
page
,
request
);
// 4. 后处理:补充产品名称等字段,以及待入账金额归零逻辑
receivableReportPage
=
convertReceivableReport
(
receivableReportPage
);
// 5. 组装返回(统计信息暂不提供,如需可后续添加单独统计查询)
ReceivableReportResponse
response
=
new
ReceivableReportResponse
();
response
.
setPage
(
receivableReportPage
);
return
Result
.
success
(
response
);
}
//
@PostMapping("/receivable_report")
//
@Operation(summary = "应收款报表")
//
public Result<ReceivableReportResponse> receivableReport(@RequestBody CommissionExpectedQueryRequest request) {
//
// 1. 根据持有人、签单人等条件查询保单号列表
//
List<String> queryPolicyNoList = new ArrayList<>();
//
Boolean queryFlag = false;
//
if (StringUtils.isNotBlank(request.getPolicyHolder())
//
|| StringUtils.isNotBlank(request.getSigner())
//
|| StringUtils.isNotBlank(request.getBrokerName())
//
|| StringUtils.isNotBlank(request.getInsured())) {
//
queryPolicyNoList = policyFollowService.queryPolicyNoList(
//
request.getPolicyHolder(),
//
request.getSigner(),
//
request.getBrokerName(),
//
request.getInsured());
//
queryFlag = true;
//
}
//
log.info("应收款报表=>receivableReport=>queryPolicyNoList:{}", JSON.toJSONString(queryPolicyNoList));
//
//
// 2. 将保单号列表设回请求对象
//
request.setPolicyNoList(queryPolicyNoList);
//
request.setQueryFlag(queryFlag);
//
//
// 3. 直接分页查询(无需先查 ID)
//
Page<ReceivableReportVO> page = new Page<>(request.getPageNo(), request.getPageSize());
//
IPage<ReceivableReportVO> receivableReportPage = commissionExpectedService.receivableReportPage(page, request);
//
//
// 4. 后处理:补充产品名称等字段,以及待入账金额归零逻辑
//
receivableReportPage = convertReceivableReport(receivableReportPage);
//
//
// 5. 组装返回(统计信息暂不提供,如需可后续添加单独统计查询)
//
ReceivableReportResponse response = new ReceivableReportResponse();
//
response.setPage(receivableReportPage);
//
return Result.success(response);
//
}
public
IPage
<
ReceivableReportVO
>
convertReceivableReport
(
IPage
<
ReceivableReportVO
>
receivableReportPage
)
{
if
(!
org
.
springframework
.
util
.
CollectionUtils
.
isEmpty
(
receivableReportPage
.
getRecords
()))
{
...
...
yd-csf-service/src/main/java/com/yd/csf/service/dao/CommissionExpectedMapper.java
View file @
13b0cf83
...
...
@@ -23,17 +23,17 @@ public interface CommissionExpectedMapper extends BaseMapper<CommissionExpected>
CommissionExpectedStatisticsVO
getExpectedStatistics
(
@Param
(
"expectedIds"
)
List
<
Long
>
expectedIds
);
//
/**
//
* 应收款报表 - 按保单号和期数维度统计(分页)
//
* @param page 分页参数
//
* @param expectedIds 预计来佣ID列表
//
* @return 应收款报表VO分页列表
//
*/
//
IPage<ReceivableReportVO> receivableReportPage(@Param("page") Page<ReceivableReportVO> page,
//
@Param("expectedIds") List<Long> expectedIds);
IPage
<
ReceivableReportVO
>
receivableReportPage
(
Page
<
ReceivableReportVO
>
page
,
@Param
(
"query"
)
CommissionExpectedQueryRequest
query
);
/**
* 应收款报表 - 按保单号和期数维度统计(分页)
* @param page 分页参数
* @param expectedIds 预计来佣ID列表
* @return 应收款报表VO分页列表
*/
IPage
<
ReceivableReportVO
>
receivableReportPage
(
@Param
(
"page"
)
Page
<
ReceivableReportVO
>
page
,
@Param
(
"expectedIds"
)
List
<
Long
>
expectedIds
);
//
IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page,
//
@Param("query") CommissionExpectedQueryRequest query);
}
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/CommissionExpectedService.java
View file @
13b0cf83
...
...
@@ -82,10 +82,10 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
* @param expectedIds 预计来佣ID列表
* @return 应收款报表VO分页列表
*/
//
IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds);
IPage
<
ReceivableReportVO
>
receivableReportPage
(
Page
<
ReceivableReportVO
>
page
,
List
<
Long
>
expectedIds
);
IPage
<
ReceivableReportVO
>
receivableReportPage
(
Page
<
ReceivableReportVO
>
page
,
CommissionExpectedQueryRequest
query
);
//
IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page,
//
CommissionExpectedQueryRequest query);
void
testExpectedCommission
(
String
policyNo
,
String
effectiveDate
,
String
coolingOffEndDate
)
throws
IOException
;
...
...
yd-csf-service/src/main/java/com/yd/csf/service/service/impl/CommissionExpectedServiceImpl.java
View file @
13b0cf83
...
...
@@ -1481,16 +1481,16 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
return
cal
.
getTime
();
}
// @Override
// public IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds) {
// return baseMapper.receivableReportPage(page, expectedIds);
// }
@Override
public
IPage
<
ReceivableReportVO
>
receivableReportPage
(
Page
<
ReceivableReportVO
>
page
,
CommissionExpectedQueryRequest
query
){
return
baseMapper
.
receivableReportPage
(
page
,
query
);
};
public
IPage
<
ReceivableReportVO
>
receivableReportPage
(
Page
<
ReceivableReportVO
>
page
,
List
<
Long
>
expectedIds
)
{
return
baseMapper
.
receivableReportPage
(
page
,
expectedIds
);
}
// @Override
// public IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page,
// CommissionExpectedQueryRequest query){
// return baseMapper.receivableReportPage(page, query);
// };
@Override
public
void
testExpectedCommission
(
String
policyNo
,
String
effectiveDate
,
String
coolingOffEndDate
)
throws
IOException
{
...
...
yd-csf-service/src/main/resources/mappers/CommissionExpectedMapper.xml
View file @
13b0cf83
...
...
@@ -67,301 +67,99 @@
</where>
</select>
<!-- ==================== 应收款报表分页查询(完全对齐 getQueryWrapper) ==================== -->
<select
id=
"receivableReportPage"
resultType=
"com.yd.csf.service.vo.ReceivableReportVO"
>
<choose>
<when
test=
"query.commissionBizType != null and query.commissionBizType != ''"
>
<if
test=
"query.commissionBizType == 'R'"
>
SELECT * FROM (
<include
refid=
"receivableReportRSql"
/>
) t
<include
refid=
"receivableReportOrderBy"
/>
</if>
<if
test=
"query.commissionBizType == 'U'"
>
SELECT * FROM (
<include
refid=
"receivableReportUSql"
/>
) u
<include
refid=
"receivableReportOrderBy"
/>
</if>
</when>
<otherwise>
SELECT * FROM (
<include
refid=
"receivableReportRSql"
/>
UNION ALL
<include
refid=
"receivableReportUSql"
/>
) tmp
<include
refid=
"receivableReportOrderBy"
/>
</otherwise>
</choose>
</select>
<!-- R 类型完整查询(不含 ORDER BY) -->
<sql
id=
"receivableReportRSql"
>
SELECT
NULL AS receivableNo,
policyNo,
policyHolder,
policyHolderEn,
insured,
insuredEn,
manualRemark,
MAX(reconciliation_company) AS reconciliationCompany,
MAX(reconciliation_company_biz_id) AS reconciliationCompanyBizId,
commission_period AS commissionPeriod,
MAX(total_period) AS totalPeriod,
MAX(commission_date) AS commissionDate,
IFNULL(SUM(commission_ratio), 0) AS commissionRatio,
IFNULL(SUM(paid_ratio), 0) AS paid,
IFNULL(SUM(amount), 0) AS amount,
MAX(currency) AS currency,
IFNULL(SUM(expected_amount), 0) AS hkdAmount,
IFNULL(SUM(paid_amount), 0) AS paidAmount,
IFNULL(SUM(expected_amount) - SUM(paid_amount), 0) AS unpaidAmount,
CASE WHEN IFNULL(SUM(expected_amount), 0) > 0
THEN ROUND(IFNULL(SUM(paid_amount), 0) / IFNULL(SUM(expected_amount), 0) * 100, 2)
ELSE 0
END AS paidRatio,
CASE WHEN IFNULL(SUM(expected_amount), 0) > 0
THEN ROUND((IFNULL(SUM(expected_amount), 0) - IFNULL(SUM(paid_amount), 0)) / IFNULL(SUM(expected_amount), 0) * 100, 2)
ELSE 0
END AS unpaidRatio,
MAX(default_exchange_rate) AS exchangeRate,
MAX(insurance_company) AS insuranceCompany,
MAX(product_name) AS productName,
IFNULL(AVG(premium), 0) AS premium,
MAX(policyCurrency) AS policyCurrency
FROM (
<include
refid=
"receivableReportRSqlBase"
/>
WHERE 1=1
AND commission_biz_type = 'R'
AND is_deleted = 0
<include
refid=
"receivableReportWhereCommon"
/>
<include
refid=
"receivableReportTeamBizIdFilter"
/>
) t
GROUP BY t.policyNo, t.commission_period
</sql>
<!-- U 类型完整查询(不含 ORDER BY) -->
<sql
id=
"receivableReportUSql"
>
SELECT
receivableNo,
policyNo,
policyHolder,
policyHolderEn,
insured,
insuredEn,
manualRemark,
reconciliation_company AS reconciliationCompany,
reconciliation_company_biz_id AS reconciliationCompanyBizId,
commission_period AS commissionPeriod,
total_period AS totalPeriod,
commission_date AS commissionDate,
NULL AS commissionRatio,
NULL AS paid,
IFNULL(amount, 0) AS amount,
currency,
IFNULL(expected_amount, 0) AS hkdAmount,
IFNULL(paid_amount, 0) AS paidAmount,
IFNULL(expected_amount - paid_amount, 0) AS unpaidAmount,
CASE WHEN IFNULL(expected_amount, 0) > 0
THEN ROUND(IFNULL(paid_amount, 0) / IFNULL(expected_amount, 0) * 100, 2)
ELSE 0
END AS paidRatio,
CASE WHEN IFNULL(expected_amount, 0) > 0
THEN ROUND((IFNULL(expected_amount, 0) - IFNULL(paid_amount, 0)) / IFNULL(expected_amount, 0) * 100, 2)
ELSE 0
END AS unpaidRatio,
default_exchange_rate AS exchangeRate,
insurance_company AS insuranceCompany,
product_name AS productName,
IFNULL(premium, 0) AS premium,
NULL AS policyCurrency
FROM (
<include
refid=
"receivableReportUSqlBase"
/>
WHERE 1=1
AND commission_biz_type = 'U'
AND is_deleted = 0
<include
refid=
"receivableReportWhereCommon"
/>
<include
refid=
"receivableReportTeamBizIdFilter"
/>
) u
</sql>
<!-- ==================== R 类型基础查询(不含聚合,不含 WHERE 条件) ==================== -->
<sql
id=
"receivableReportRSqlBase"
>
SELECT
ce.commission_biz_type,
ce.is_deleted,
ce.policy_no AS policyNo,
ce.manual_remark AS manualRemark,
ce.reconciliation_company,
ce.reconciliation_company_biz_id,
ce.commission_period,
ce.total_period,
ce.commission_date,
ce.commission_ratio,
ce.paid_ratio,
ce.amount,
ce.currency,
ce.expected_amount,
ce.paid_amount,
ce.default_exchange_rate,
ce.premium,
ce.status,
p.insurance_company,
p.product_name,
p.currency AS policyCurrency,
ph.name AS policyHolder,
ph.name_en AS policyHolderEn,
ins.name AS insured,
ins.name_en AS insuredEn
FROM commission_expected ce
LEFT JOIN policy p ON ce.policy_no = p.policy_no
LEFT JOIN (
SELECT policy_biz_id, name, name_en
FROM policy_policyholder
WHERE id IN (SELECT MIN(id) FROM policy_policyholder GROUP BY policy_biz_id)
) ph ON ph.policy_biz_id = p.policy_biz_id
LEFT JOIN (
SELECT policy_biz_id, name, name_en
FROM policy_insurant
WHERE id IN (SELECT MIN(id) FROM policy_insurant GROUP BY policy_biz_id)
) ins ON ins.policy_biz_id = p.policy_biz_id
</sql>
<!-- ==================== U 类型基础查询(不含聚合,不含 WHERE 条件) ==================== -->
<sql
id=
"receivableReportUSqlBase"
>
SELECT
ce.commission_biz_type,
ce.is_deleted,
ce.receivable_no AS receivableNo,
ce.policy_no AS policyNo,
ce.manual_remark AS manualRemark,
ce.reconciliation_company,
ce.reconciliation_company_biz_id,
ce.commission_period,
ce.total_period,
ce.commission_date,
ce.amount,
ce.currency,
ce.expected_amount,
ce.paid_amount,
ce.default_exchange_rate,
ce.premium,
ce.status,
p.insurance_company,
p.product_name,
ph.name AS policyHolder,
ph.name_en AS policyHolderEn,
ins.name AS insured,
ins.name_en AS insuredEn
FROM commission_expected ce
LEFT JOIN policy p ON ce.policy_no = p.policy_no
LEFT JOIN (
SELECT policy_biz_id, name, name_en
FROM policy_policyholder
WHERE id IN (SELECT MIN(id) FROM policy_policyholder GROUP BY policy_biz_id)
) ph ON ph.policy_biz_id = p.policy_biz_id
LEFT JOIN (
SELECT policy_biz_id, name, name_en
FROM policy_insurant
WHERE id IN (SELECT MIN(id) FROM policy_insurant GROUP BY policy_biz_id)
) ins ON ins.policy_biz_id = p.policy_biz_id
</sql>
<!-- ==================== 公共 WHERE 条件(完全对应 getQueryWrapper) ==================== -->
<sql
id=
"receivableReportWhereCommon"
>
<!-- 空结果处理:queryFlag=true 且 policyNoList 为空 -->
<if
test=
"query.queryFlag != null and query.queryFlag and (query.policyNoList == null or query.policyNoList.size == 0)"
>
AND 1=0
</if>
<!-- receivableNo -->
<if
test=
"query.receivableNo != null and query.receivableNo != ''"
>
AND ce.receivable_no = #{query.receivableNo}
</if>
<!-- policyNo (精确) -->
<if
test=
"query.policyNo != null and query.policyNo != ''"
>
AND ce.policy_no = #{query.policyNo}
</if>
<!-- policyNoList (IN) -->
<if
test=
"query.policyNoList != null and query.policyNoList.size > 0"
>
AND ce.policy_no IN
<foreach
collection=
"query.policyNoList"
item=
"no"
open=
"("
close=
")"
separator=
","
>
#{no}
</foreach>
</if>
<!-- statusList -->
<if
test=
"query.statusList != null and query.statusList.size > 0"
>
AND ce.status IN
<foreach
collection=
"query.statusList"
item=
"status"
open=
"("
close=
")"
separator=
","
>
#{status}
</foreach>
</if>
<!-- commissionDateStart -->
<if
test=
"query.commissionDateStart != null"
>
AND ce.commission_date >= #{query.commissionDateStart}
</if>
<!-- commissionDateEnd -->
<if
test=
"query.commissionDateEnd != null"
>
AND ce.commission_date
<
= #{query.commissionDateEnd}
</if>
<!-- commissionPeriod -->
<if
test=
"query.commissionPeriod != null"
>
AND ce.commission_period = #{query.commissionPeriod}
</if>
<!-- commissionType -->
<if
test=
"query.commissionType != null and query.commissionType != ''"
>
AND ce.commission_type = #{query.commissionType}
</if>
<!-- reconciliationCompanyBizIdList -->
<if
test=
"query.reconciliationCompanyBizIdList != null and query.reconciliationCompanyBizIdList.size > 0"
>
AND ce.reconciliation_company_biz_id IN
<foreach
collection=
"query.reconciliationCompanyBizIdList"
item=
"id"
open=
"("
close=
")"
separator=
","
>
#{id}
select
null as receivableNo,
ce.policy_no as policyNo,
(select pp.name from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolder,
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
(select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured,
(select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn,
ce.manual_remark as manualRemark,
MAX(ce.reconciliation_company) as reconciliationCompany,
MAX(ce.reconciliation_company_biz_id) as reconciliationCompanyBizId,
ce.commission_period as commissionPeriod,
MAX(ce.total_period) as totalPeriod,
MAX(ce.commission_date) as commissionDate,
ifnull(sum(ce.commission_ratio), 0) as commissionRatio,
ifnull(sum(ce.paid_ratio), 0) as paid,
ifnull(sum(ce.amount), 0) as amount,
MAX(ce.currency) as currency,
ifnull(sum(ce.expected_amount), 0) as hkdAmount,
ifnull(sum(ce.paid_amount), 0) as paidAmount,
ifnull(sum(ce.expected_amount) - sum(ce.paid_amount), 0) as unpaidAmount,
case when ifnull(sum(ce.expected_amount), 0) > 0
then round(ifnull(sum(ce.paid_amount), 0) / ifnull(sum(ce.expected_amount), 0) * 100, 2)
else 0
end as paidRatio,
case when ifnull(sum(ce.expected_amount), 0) > 0
then round((ifnull(sum(ce.expected_amount), 0) - ifnull(sum(ce.paid_amount), 0)) / ifnull(sum(ce.expected_amount), 0) * 100, 2)
else 0
end as unpaidRatio,
MAX(ce.default_exchange_rate) as exchangeRate,
MAX(p.insurance_company) as insuranceCompany,
MAX(p.product_name) as productName,
ifnull(avg(ce.premium), 0) as premium,
MAX(p.currency) as policyCurrency
from commission_expected ce
left join policy p on ce.policy_no = p.policy_no
<where>
ce.commission_biz_type = 'R'
<if
test=
"expectedIds != null and expectedIds.size > 0"
>
and ce.id in
<foreach
collection=
"expectedIds"
item=
"item"
open=
"("
close=
")"
separator=
","
>
#{item}
</foreach>
</if>
<!-- insurerCompanyBizIdList -->
<if
test=
"query.insurerCompanyBizIdList != null and query.insurerCompanyBizIdList.size > 0"
>
AND ce.insurance_company_biz_id IN
<foreach
collection=
"query.insurerCompanyBizIdList"
item=
"id"
open=
"("
close=
")"
separator=
","
>
#{id}
and ce.is_deleted = 0
</where>
group by ce.policy_no, ce.commission_period
union all
select
ce.receivable_no as receivableNo,
ce.policy_no as policyNo,
(select pp.name from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolder,
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
(select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured,
(select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn,
ce.manual_remark as manualRemark,
ce.reconciliation_company as reconciliationCompany,
ce.reconciliation_company_biz_id as reconciliationCompanyBizId,
ce.commission_period as commissionPeriod,
ce.total_period as totalPeriod,
ce.commission_date as commissionDate,
null as commissionRatio,
null as paid,
ifnull(ce.amount, 0) as amount,
ce.currency as currency,
ifnull(ce.expected_amount, 0) as hkdAmount,
ifnull(ce.paid_amount, 0) as paidAmount,
ifnull(ce.expected_amount - ce.paid_amount, 0) as unpaidAmount,
case when ifnull(ce.expected_amount, 0) > 0
then round(ifnull(ce.paid_amount, 0) / ifnull(ce.expected_amount, 0) * 100, 2)
else 0
end as paidRatio,
case when ifnull(ce.expected_amount, 0) > 0
then round((ifnull(ce.expected_amount, 0) - ifnull(ce.paid_amount, 0)) / ifnull(ce.expected_amount, 0) * 100, 2)
else 0
end as unpaidRatio,
ce.default_exchange_rate as exchangeRate,
p.insurance_company as insuranceCompany,
p.product_name as productName,
ifnull(ce.premium, 0) as premium,
null as policyCurrency
from commission_expected ce
left join policy p on ce.policy_no = p.policy_no
<where>
ce.commission_biz_type = 'U'
<if
test=
"expectedIds != null and expectedIds.size > 0"
>
and ce.id in
<foreach
collection=
"expectedIds"
item=
"item"
open=
"("
close=
")"
separator=
","
>
#{item}
</foreach>
</if>
<!-- productLaunchBizId -->
<if
test=
"query.productLaunchBizId != null and query.productLaunchBizId != ''"
>
AND ce.product_launch_biz_id = #{query.productLaunchBizId}
</if>
</sql>
<!-- ==================== teamBizId 过滤(EXISTS 子查询,与 getQueryWrapper 完全一致) ==================== -->
<sql
id=
"receivableReportTeamBizIdFilter"
>
<if
test=
"query.teamBizId != null and query.teamBizId != ''"
>
AND EXISTS (
SELECT 1 FROM policy_broker pb
WHERE pb.policy_no = ce.policy_no
AND pb.team_biz_id = #{query.teamBizId}
)
</if>
</sql>
<!-- ==================== 排序(支持传入 sortField 和 sortOrder) ==================== -->
<sql
id=
"receivableReportOrderBy"
>
ORDER BY
<choose>
<when
test=
"query.sortField != null and query.sortField != '' and query.sortOrder != null"
>
<if
test=
"query.sortField == 'reconciliation_company'"
>
reconciliationCompany
</if>
<if
test=
"query.sortField == 'commission_name'"
>
commissionName
</if>
<if
test=
"query.sortField == 'commission_period'"
>
commissionPeriod
</if>
<if
test=
"query.sortField == 'amount'"
>
amount
</if>
<if
test=
"query.sortField != 'reconciliation_company' and query.sortField != 'commission_name' and query.sortField != 'commission_period' and query.sortField != 'amount'"
>
commissionDate
</if>
<if
test=
"query.sortOrder == 'asc'"
>
ASC
</if>
<if
test=
"query.sortOrder != 'asc'"
>
DESC
</if>
</when>
<otherwise>
commissionDate DESC, policyNo, commissionPeriod
</otherwise>
</choose>
</sql>
and ce.is_deleted = 0
</where>
</select>
</mapper>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment