From b938f36e9dabed8b298349597d400fc587a8e025 Mon Sep 17 00:00:00 2001 From: xuyuncong <3422692813@qq.com> Date: Mon, 3 Nov 2025 18:00:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BB=9F=E8=AE=A1=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/mapper/RepairStatisticsMapper.java | 11 +++ .../impl/RepairStatisticsServiceImpl.java | 76 +++++++++++++++++-- .../mapper/base/RepairStatisticsMapper.xml | 13 ++++ 3 files changed, 95 insertions(+), 5 deletions(-) diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java index e6613ecd..c52cb6de 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/mapper/RepairStatisticsMapper.java @@ -264,4 +264,15 @@ public interface RepairStatisticsMapper { Map calculateAmountStatsByWorkType(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("workType") String workType); + + /** + * 根据工种类型获取工单结算统计数据 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param workType 工种类型 + * @return 结算统计数据列表 + */ + List> selectSumAmountByWorkType(@Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("workType") String workType); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java index 21397a08..aaebcef9 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairStatisticsServiceImpl.java @@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets; import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService; import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO; import cn.iocoder.yudao.util.StringUtils; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -22,8 +23,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import cn.iocoder.yudao.module.tickets.vo.TicketsSettlementVO; +import cn.hutool.core.util.ObjectUtil; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -43,6 +47,9 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { @Resource private RepairStatisticsMapper statisticsMapper; + @Resource + private cn.iocoder.yudao.module.tickets.mapper.DlRepairTicketsMapper repairTicketsMapper; + @Resource private DlRepairTicketsService ticketsService; @@ -70,6 +77,64 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { return resultMap; } + /** + * 按工种类型统计金额信息(已收款、未收款、待收款) + */ + private Map calculateAmountStatsByWorkType(String startDate, String endDate, String workType) { + Map amountMap = new HashMap<>(); + + // 调用我们新创建的selectSumAmountByWorkType方法获取数据 + List> receivables = statisticsMapper.selectSumAmountByWorkType(startDate, endDate, workType); + BigDecimal receivableAmount = BigDecimal.ZERO; + Integer receivableCount = 0; + BigDecimal receivedAmount = BigDecimal.ZERO; + Integer receivedCount = 0; + for (Map receivable : receivables) { + // 转换为TicketsSettlementVO + Object otherData = receivable.get("otherData"); + if (ObjectUtil.isNull(otherData)) { + continue; + } + TicketsSettlementVO settlement = JSONObject.parseObject( + otherData.toString(), TicketsSettlementVO.class + ); + + //计算实付金额的总和 + BigDecimal actualMoney = settlement.getActualMoney(); + if (actualMoney == null) { + continue; + } + receivableAmount = receivableAmount.add(actualMoney); + + receivableCount++; + + //判断是否是已经确认收款的 + Object payType = receivable.get("payType"); + if (payType != null && "03".equals(payType.toString())) { + // 计算已收款金额 + BigDecimal isConfirmedReceive = settlement.getActualMoney(); + receivedAmount = receivedAmount.add(isConfirmedReceive); + + receivedCount++; + } + } + amountMap.put("receivableAmount", receivableAmount != null ? receivableAmount : BigDecimal.ZERO); + amountMap.put("receivableCount", receivableCount); + + // 已收款:应收款里面出纳确认收款的金额 + amountMap.put("receivedAmount", receivedAmount != null ? receivedAmount : BigDecimal.ZERO); + amountMap.put("receivedCount", receivedCount); + + // 待收款:应收 - 已收 + BigDecimal receivable = (BigDecimal) amountMap.get("receivableAmount"); + BigDecimal received = (BigDecimal) amountMap.get("receivedAmount"); + BigDecimal pendingAmount = receivable.subtract(received); + amountMap.put("pendingAmount", pendingAmount); + amountMap.put("pendingCount", receivableCount - receivedCount); + + return amountMap; + } + /** * 客户来源分析饼图 * @@ -475,7 +540,7 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { }}); /*总检 合格了多少 返工了多少*/ - + return resp; } @@ -545,10 +610,11 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { // 添加到结果map resultMap.put("stats", statsList); - // 统计金额信息 - Map amountStats = statisticsMapper.calculateAmountStatsByWorkType(startDate, endDate, workType); - if (amountStats != null) - resultMap.putAll(amountStats); + // 统计金额信息(已收款、未收款、待收款) + Map amountStats = calculateAmountStatsByWorkType(startDate, endDate, workType); + if (amountStats != null) { + resultMap.putAll(amountStats); + } return resultMap; } diff --git a/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml b/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml index b2aff2ef..9f45dc67 100644 --- a/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml @@ -624,4 +624,17 @@ GROUP BY drw.work_type + +