refactor(system): 优化客户结算功能

- 重构客户结算明细的更新逻辑,分为创建和更新两个步骤
- 在 FactoryInfoMapper 中使用 COALESCE 函数处理结算金额为空的情况
This commit is contained in:
furongxin 2025-03-03 19:29:55 +08:00
parent d726cc5abb
commit 4bba4a5507
2 changed files with 17 additions and 6 deletions

View File

@ -95,8 +95,19 @@ public class CustomerSettlementServiceImpl implements CustomerSettlementService
// 同步更新结算明细 // 同步更新结算明细
if (CollUtil.isNotEmpty(updateReqVO.getSettlementItems())) { if (CollUtil.isNotEmpty(updateReqVO.getSettlementItems())) {
// 获取需创建的 结算明细
List<SettlementItemDO> createDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream()
.filter(item -> item.getId() == null)
.collect(Collectors.toList());
// 获取需更新的 结算明细
List<SettlementItemDO> updateDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream()
.filter(item -> item.getId() != null)
.collect(Collectors.toList());
//插入
settlementItemMapper.insertBatch(createDO);
// 更新 // 更新
settlementItemMapper.updateBatch(BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class)); settlementItemMapper.updateBatch(updateDO);
} }
customerSettlementMapper.updateById(updateObj); customerSettlementMapper.updateById(updateObj);

View File

@ -47,11 +47,11 @@
scs.customer_id AS factoryId, scs.customer_id AS factoryId,
factory.short_name AS factoryName, factory.short_name AS factoryName,
scs.settlement_month,-- 收入明细 scs.settlement_month,-- 收入明细
SUM( CASE WHEN ssi.business_type = 1 THEN ssi.settlement_amount ELSE 0 END ) AS forkliftRevenue,-- 叉车收入 SUM( CASE WHEN ssi.business_type = 1 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS forkliftRevenue,-- 叉车收入
SUM( CASE WHEN ssi.business_type = 2 THEN ssi.settlement_amount ELSE 0 END ) AS packageRevenue,-- 打包收入 SUM( CASE WHEN ssi.business_type = 2 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS packageRevenue,-- 打包收入
SUM( CASE WHEN ssi.business_type = 3 THEN ssi.settlement_amount ELSE 0 END ) AS porterageRevenue,-- 搬运收入 SUM( CASE WHEN ssi.business_type = 3 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS porterageRevenue,-- 搬运收入
SUM( CASE WHEN ssi.business_type = 4 THEN ssi.settlement_amount ELSE 0 END ) AS forkliftRentalRevenue,-- 叉车租赁收入 SUM( CASE WHEN ssi.business_type = 4 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS forkliftRentalRevenue,-- 叉车租赁收入
SUM( CASE WHEN ssi.business_type = 5 THEN ssi.settlement_amount ELSE 0 END ) AS transportationRevenue,-- 运输收入 SUM( CASE WHEN ssi.business_type = 5 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS transportationRevenue,-- 运输收入
SUM( CASE WHEN ssi.business_type = 1 THEN ssi.deduction_amount ELSE 0 END ) AS forkliftDeduction,-- 叉车扣款 SUM( CASE WHEN ssi.business_type = 1 THEN ssi.deduction_amount ELSE 0 END ) AS forkliftDeduction,-- 叉车扣款
SUM( CASE WHEN ssi.business_type = 2 THEN ssi.deduction_amount ELSE 0 END ) AS packageDeduction,-- 打包扣款 SUM( CASE WHEN ssi.business_type = 2 THEN ssi.deduction_amount ELSE 0 END ) AS packageDeduction,-- 打包扣款
SUM( CASE WHEN ssi.business_type = 3 THEN ssi.deduction_amount ELSE 0 END ) AS porterageDeduction,-- 搬运扣款 SUM( CASE WHEN ssi.business_type = 3 THEN ssi.deduction_amount ELSE 0 END ) AS porterageDeduction,-- 搬运扣款