From 75f70259a98b0fe1bb22ec3c98e5aed311ba4b55 Mon Sep 17 00:00:00 2001 From: xuyuncong <3422692813@qq.com> Date: Wed, 29 Oct 2025 11:09:19 +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 --- .../admin/RepairStatisticsController.java | 77 +++++++- .../base/mapper/RepairStatisticsMapper.java | 47 ++++- .../base/service/RepairStatisticsService.java | 58 +++++- .../impl/RepairStatisticsServiceImpl.java | 165 +++++++++++++++++- .../module/base/vo/QueryBusinessReqVO.java | 4 +- .../base/vo/RepairBusinessStatisticsVO.java | 6 + .../admin/DlRepairTicketsController.java | 2 +- .../tickets/entity/DlRepairTickets.java | 2 + .../service/DlRepairTicketsService.java | 2 +- .../impl/DlRepairTicketsServiceImpl.java | 58 +++--- .../tickets/vo/DlRepairTicketsReqVO.java | 2 + .../mapper/base/RepairStatisticsMapper.xml | 120 +++++++++++++ .../mapper/tickets/DlRepairTicketsMapper.xml | 28 +++ 13 files changed, 537 insertions(+), 34 deletions(-) diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java index f96bc3c5..b0ad8379 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairStatisticsController.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.base.service.RepairStatisticsService; import cn.iocoder.yudao.module.base.vo.QueryBusinessReqVO; import cn.iocoder.yudao.module.base.vo.QueryBusinessResp; import cn.iocoder.yudao.module.base.vo.QueryTableResp; +import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -85,8 +86,8 @@ public class RepairStatisticsController { **/ @GetMapping("/repairTypeStatistics") @Operation(summary = "维修类型相关统计分析饼图") - public CommonResult repairTypeStatistics() { - return CommonResult.success(statisticsService.repairTypeStatistics()); + public CommonResult repairTypeStatistics(QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.repairTypeStatistics(reqVO)); } /** @@ -190,8 +191,80 @@ public class RepairStatisticsController { * @param reqVO {@link QueryBusinessReqVO} * @return cn.iocoder.yudao.framework.common.pojo.CommonResult **/ + @GetMapping("/businseeStatistics") public CommonResult businseeStatistics(QueryBusinessReqVO reqVO) { return CommonResult.success(statisticsService.businseeStatistics(reqVO)); } + /** + * @description :维修项目统计 + * @author xyc + * @date 09:53 2025/10/27 + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/repairProjectStatistics") + public CommonResult repairProjectStatistics(QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.repairProjectStatistics(reqVO)); + } + + /** + * @description : 保险和年审登记统计 + * @author xyc + * @date 10:48 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/insuranceAndAnnualRegistrationStatistics") + public CommonResult insuranceAndAnnualRegistrationStatistics(QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.insuranceAndAnnualRegistrationStatistics(reqVO)); + } + + /** + * @description : 保险或年审列表 + * @author xyc + * @date 11:30 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/insuranceOrAnnualListStatistics") + public CommonResult insuranceOrAnnualListStatistics(QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.insuranceOrAnnualListStatistics(reqVO)); + } + + /** + * @description : 保险公司统计 + * @author xyc + * @date 13:51 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/insuranceCompanyStatistics") + public CommonResult insuranceCompanyStatistics(QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.insuranceCompanyStatistics(reqVO)); + } + + /** + * @description : 车辆品牌统计 + * @author xyc + * @date 14:08 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/carBrandStatistics") + public CommonResult carBrandStatistics(QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.carBrandStatistics(reqVO)); + } + + /** + * @description : 车辆年份统计 + * @author xyc + * @date 14:31 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/carYearStatistics") + public CommonResult carYearStatistics(QueryBusinessReqVO reqVO) { + return CommonResult.success(statisticsService.carYearStatistics(reqVO)); + } + } 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 ee59c323..714c9de4 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 @@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 维修数据统计 @@ -61,7 +62,7 @@ public interface RepairStatisticsMapper { * @author PQZ * @date 14:52 2024/10/21 **/ - List repairTypeStatistics(); + List repairTypeStatistics(@Param("reqVO") QueryBusinessReqVO reqVO); /** * 工单总数、今日工单、工单总金额、今日工单金额 @@ -134,4 +135,48 @@ public interface RepairStatisticsMapper { * @return java.util.List **/ List staffStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 渠道和来源统计 + * @author xyc + * @date 13:21 2025/10/27 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List + **/ + List businseeStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 项目统计 + * @author xyc + * @date 15:38 2025/10/27 + * @return java.util.List> + **/ + List> repairProjectStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 保险公司统计 + * @author xyc + * @date 13:51 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + **/ + List> insuranceCompanyStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 车辆品牌统计 + * @author xyc + * @date 14:14 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + **/ + List> carBrandStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : + * @author xyc + * @date 14:32 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + **/ + List> carYearStatistics(QueryBusinessReqVO reqVO); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java index ece68a58..4f04543c 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairStatisticsService.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.base.service; import cn.iocoder.yudao.module.base.entity.StaffStatisticsResp; import cn.iocoder.yudao.module.base.vo.*; +import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets; import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -41,7 +42,7 @@ public interface RepairStatisticsService { * @author PQZ * @date 13:25 2024/10/21 **/ - List repairTypeStatistics(); + List repairTypeStatistics(QueryBusinessReqVO reqVO); /** @@ -118,5 +119,58 @@ public interface RepairStatisticsService { * @param reqVO {@link QueryBusinessReqVO} * @return java.util.List **/ - List businseeStatistics(QueryBusinessReqVO reqVO); + List> businseeStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 工单项目统计 + * @author xyc + * @date 15:32 2025/10/27 + * @return java.util.List> + **/ + List> repairProjectStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 保险和年审登记统计 + * @author xyc + * @date 10:48 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.Map + **/ + Map insuranceAndAnnualRegistrationStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 保险或年审列表 + * @author xyc + * @date 11:32 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + **/ + List insuranceOrAnnualListStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 保险公司统计 + * @author xyc + * @date 13:51 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + **/ + List> insuranceCompanyStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 车辆品牌统计 + * @author xyc + * @date 14:14 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + **/ + List> carBrandStatistics(QueryBusinessReqVO reqVO); + + /** + * @description : 车辆年份统计 + * @author xyc + * @date 14:32 2025/10/28 + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + **/ + List> carYearStatistics(QueryBusinessReqVO reqVO); } 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 c9cb1352..b13edbc4 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 @@ -1,12 +1,21 @@ package cn.iocoder.yudao.module.base.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.base.entity.StaffStatisticsResp; import cn.iocoder.yudao.module.base.mapper.RepairStatisticsMapper; import cn.iocoder.yudao.module.base.service.RepairStatisticsService; import cn.iocoder.yudao.module.base.vo.*; +import cn.iocoder.yudao.module.business.entity.DlBusinessChannel; +import cn.iocoder.yudao.module.business.service.BusinessChannelService; +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.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -23,9 +32,17 @@ import java.util.stream.Collectors; @Validated public class RepairStatisticsServiceImpl implements RepairStatisticsService { + private static final Logger log = LoggerFactory.getLogger(RepairStatisticsServiceImpl.class); + @Resource private RepairStatisticsMapper statisticsMapper; + @Resource + private DlRepairTicketsService ticketsService; + + @Resource + private BusinessChannelService businessChannelService; + /** * 客户来源分析饼图 * @@ -76,8 +93,8 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { * @date 13:25 2024/10/21 **/ @Override - public List repairTypeStatistics() { - return statisticsMapper.repairTypeStatistics(); + public List repairTypeStatistics(QueryBusinessReqVO reqVO) { + return statisticsMapper.repairTypeStatistics(reqVO); } @@ -181,8 +198,146 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService { * @date 09:54 2025/10/27 **/ @Override - public List businseeStatistics(QueryBusinessReqVO reqVO) { -// return statisticsMapper.businseeStatistics(reqVO); - return null; + public List> businseeStatistics(QueryBusinessReqVO reqVO) { + // 查询所有渠道 + List channels = businessChannelService.list(Wrappers.lambdaQuery() + .eq(DlBusinessChannel::getSystemCode, "repair") + .eq(StringUtils.isEmpty(reqVO.getSearch()),DlBusinessChannel::getType, 0) + .eq(StringUtils.isNotEmpty(reqVO.getSearch()), DlBusinessChannel::getPid, reqVO.getSearch())); + List> resp = new ArrayList<>(); + + // 检查日期范围是否有效 + List dateRange = reqVO.getDateRange(); + String startDate = null; + String endDate = null; + if (dateRange != null && dateRange.size() >= 2 && dateRange.get(0) != null && dateRange.get(1) != null) { + startDate = dateRange.get(0); + endDate = dateRange.get(1); + } + + if (channels != null && !channels.isEmpty()) { + for (DlBusinessChannel channel : channels) { + Map respMap = new HashMap<>(); + if (channel != null && channel.getName() != null) { + try { + // 查询渠道排名 + Map bossNumStatistics = ticketsService.getBossNumStatistics( + startDate, endDate, StringUtils.isNotEmpty(reqVO.getSearch()) ? null :channel.getName(), StringUtils.isNotEmpty(reqVO.getSearch()) ? channel.getName() :null, false); + + respMap.put("name", channel.getName()); + respMap.put("id", channel.getId()); + if (bossNumStatistics != null) { + respMap.put("data", bossNumStatistics); + resp.add(respMap); + } + } catch (Exception e) { + // 记录异常但不中断整个流程 + log.warn("获取渠道统计信息时发生异常,渠道名称: {}", channel.getName(), e); + // 添加一个默认的统计对象,避免前端出现空值 + Map defaultStats = new HashMap<>(); + defaultStats.put("name", channel.getName()); + defaultStats.put("id", channel.getId()); + defaultStats.put("count", 0); + } + } + } + } + + return resp; + } + + /** + * @return java.util.List> + * @description : 工单项目统计 + * @author xyc + * @date 15:32 2025/10/27 + **/ + @Override + public List> repairProjectStatistics(QueryBusinessReqVO reqVO) { + return statisticsMapper.repairProjectStatistics(reqVO); + } + + /** + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.Map + * @description : 保险和年审登记统计 + * @author xyc + * @date 10:48 2025/10/28 + **/ + @Override + public Map insuranceAndAnnualRegistrationStatistics(QueryBusinessReqVO reqVO) { + List tickets = ticketsService.list(Wrappers.lambdaQuery() + .between(CollUtil.isNotEmpty(reqVO.getDateRange()), DlRepairTickets::getCreateTime, reqVO.getDateRange().get(0), reqVO.getDateRange().get(1))); + // 分别查询nextInspectionDate和insuranceExpiryDate不为空的数量 + long inspectionCount = tickets.stream() + .filter(ticket -> ticket.getNextInspectionDate() != null) + .count(); + long insuranceCount = tickets.stream() + .filter(ticket -> ticket.getInsuranceExpiryDate() != null) + .count(); + Map resp = new HashMap<>(); + resp.put("inspectionCount", inspectionCount); + // 计算占比 保留两位小数点 + double inspectionPercent = tickets.size() > 0 ? inspectionCount * 100.0 / tickets.size() : 0; + resp.put("inspectionPercent", String.format("%.2f", inspectionPercent)); + resp.put("insuranceCount", insuranceCount); + double insurancePercent = tickets.size() > 0 ? insuranceCount * 100.0 / tickets.size() : 0; + resp.put("insurancePercent", String.format("%.2f", insurancePercent)); + resp.put("totalCount", tickets.size()); + return resp; + } + + /** + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + * @description : 保险或年审列表 + * @author xyc + * @date 11:32 2025/10/28 + **/ + @Override + public List insuranceOrAnnualListStatistics(QueryBusinessReqVO reqVO) { + // 根据日期范围查询保险日期快要到期的车辆 + List tickets = ticketsService.list(Wrappers.lambdaQuery() + .between("insurance".equals(reqVO.getType()) && CollUtil.isNotEmpty(reqVO.getDateRange()), DlRepairTickets::getInsuranceExpiryDate, reqVO.getDateRange().get(0), reqVO.getDateRange().get(1)) + .between("inspection".equals(reqVO.getType()) && CollUtil.isNotEmpty(reqVO.getDateRange()), DlRepairTickets::getNextInspectionDate, reqVO.getDateRange().get(0), reqVO.getDateRange().get(1)) + .orderByDesc("insurance".equals(reqVO.getType()),DlRepairTickets::getInsuranceExpiryDate) + .orderByDesc("inspection".equals(reqVO.getType()),DlRepairTickets::getNextInspectionDate)); + return tickets; + } + + /** + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + * @description : 保险公司统计 + * @author xyc + * @date 13:51 2025/10/28 + **/ + @Override + public List> insuranceCompanyStatistics(QueryBusinessReqVO reqVO) { + return statisticsMapper.insuranceCompanyStatistics(reqVO); + } + + /** + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + * @description : 车辆品牌统计 + * @author xyc + * @date 14:14 2025/10/28 + **/ + @Override + public List> carBrandStatistics(QueryBusinessReqVO reqVO) { + return statisticsMapper.carBrandStatistics(reqVO); + } + + /** + * @param reqVO {@link QueryBusinessReqVO} + * @return java.util.List> + * @description : 车辆年份统计 + * @author xyc + * @date 14:32 2025/10/28 + **/ + @Override + public List> carYearStatistics(QueryBusinessReqVO reqVO) { + return statisticsMapper.carYearStatistics(reqVO); } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessReqVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessReqVO.java index 1a6fd22e..1369eae3 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessReqVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessReqVO.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.base.vo; import lombok.Data; +import java.util.List; + /** *@BelongsProject: lanan-system *@BelongsPackage: cn.iocoder.yudao.module.base.vo @@ -16,7 +18,7 @@ public class QueryBusinessReqVO { /** * 时间范围 */ - private String[] dateRange; + private List dateRange; /** * 类型 car: 车辆 customer: 客户 diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/RepairBusinessStatisticsVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/RepairBusinessStatisticsVO.java index 19d76c12..0ddb2ae3 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/RepairBusinessStatisticsVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/RepairBusinessStatisticsVO.java @@ -11,4 +11,10 @@ import lombok.Data; */ @Data public class RepairBusinessStatisticsVO { + + private String name; + + private Long id; + + private Integer count; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java index 1b8fd7b0..009b0068 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java @@ -515,7 +515,7 @@ public class DlRepairTicketsController { @GetMapping("/getBossNumStatistics") public CommonResult getBossNumStatistics(@RequestParam(value = "dateRange[0]", required = false) String startDate, @RequestParam(value = "dateRange[1]", required = false) String endDate) { - return success(dlRepairTicketsService.getBossNumStatistics(startDate, endDate)); + return success(dlRepairTicketsService.getBossNumStatistics(startDate, endDate,null,null, true)); } /** diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java index f56cd306..5681566b 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java @@ -250,6 +250,8 @@ public class DlRepairTickets extends TenantBaseDO { private Date insuranceExpiryDate; /** 承保险种,多个英文逗号隔开 */ private String insuranceType; + /** 保险公司 */ + private String insuranceCompany; /** 交强险保费 */ private BigDecimal jiaoqiang; /** 商业险保费 */ diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java index df8271d4..f01b8571 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java @@ -336,7 +336,7 @@ public interface DlRepairTicketsService extends IService { * @Param [startDate, endDate] * @return java.util.List **/ - Map getBossNumStatistics(String startDate, String endDate); + Map getBossNumStatistics(String startDate, String endDate, String busiFrom, String cusFrom, boolean isShowChildren); /** * @Author 许 diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index f6cec916..9408f3b3 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -929,7 +929,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getBossNumStatistics(String startDate, String endDate) { + public Map getBossNumStatistics(String startDate, String endDate, String busiFrom, String cusFrom,boolean isShowChildren) { Map resultMap = new HashMap<>(); List> statsList = new ArrayList<>(); @@ -943,6 +943,9 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl ticketsInRange = this.list(queryWrapper); @@ -950,17 +953,17 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl newOrderStats = ticketsInRange.stream() // .filter(item -> TicketsStatusEnum.NO_WORK.getCode().equals(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang")); + statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang",isShowChildren)); // 维修中(按 repairType 分组) Map workingStats = ticketsInRange.stream() .filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("workingNum", "维修中", workingStats, "weixiuzhong")); + statsList.add(createStatsNode("workingNum", "维修中", workingStats, "weixiuzhong",isShowChildren)); // 已竣工(通过 mapper 查询并按 repairType 分组) Map overStats = getOverStatsByRepairType(startDate, endDate); - statsList.add(createStatsNode("overNum", "已竣工", overStats, "yijungong")); + statsList.add(createStatsNode("overNum", "已竣工", overStats, "yijungong",isShowChildren)); // 竣工已结算 @@ -969,24 +972,24 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl noPayStats = ticketsInRange.stream() .filter(item -> noPayCodeList.contains(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("noPayNum", "未结算", noPayStats, "weijiesuan")); + statsList.add(createStatsNode("noPayNum", "未结算", noPayStats, "weijiesuan",isShowChildren)); // 已交车(通过 mapper 查询并按 repairType 分组) Map giveCusStats = getGiveCusStatsByRepairType(startDate, endDate); - statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats, "yijiaoche")); + statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats, "yijiaoche",isShowChildren)); // 在厂(未交车且不是已完成状态 03) Map inCompanyStats = ticketsInRange.stream() .filter(item -> "0".equals(item.getIsHandover())) .filter(item -> !"03".equals(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats, "zaichang")); + statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats, "zaichang",isShowChildren)); // 添加到结果map resultMap.put("stats", statsList); // 统计金额信息 - Map amountStats = calculateAmountStats(startDate, endDate); + Map amountStats = calculateAmountStats(startDate, endDate, busiFrom, cusFrom); resultMap.putAll(amountStats); return resultMap; @@ -1091,22 +1094,24 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl **/ - private Map createStatsNode(String code, String name, Map stats, String selectType) { + private Map createStatsNode(String code, String name, Map stats, String selectType, boolean ifShowChildren) { Map node = new HashMap<>(); node.put("code", code); node.put("name", name); node.put("selectType", selectType); - List> children = stats.entrySet().stream() - .map(entry -> { - Map child = new HashMap<>(); - child.put("repairType", entry.getKey()); - child.put("count", entry.getValue()); - return child; - }) - .collect(Collectors.toList()); + if (ifShowChildren) { + List> children = stats.entrySet().stream() + .map(entry -> { + Map child = new HashMap<>(); + child.put("repairType", entry.getKey()); + child.put("count", entry.getValue()); + return child; + }) + .collect(Collectors.toList()); - node.put("children", children); + node.put("children", children); + } // 计算该统计项的总数 long total = stats.values().stream().mapToLong(Long::longValue).sum(); @@ -1117,11 +1122,14 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl calculateAmountStats(String startDate, String endDate) { + return calculateAmountStats(startDate, endDate, null, null); + } + // 计算金额统计 + private Map calculateAmountStats(String startDate, String endDate, String busiFrom, String cusFrom) { Map amountMap = new HashMap<>(); // 应收款:竣工已结算的单子的总金额 QueryWrapper receivableWrapper = new QueryWrapper<>(); -// receivableWrapper.eq("tickets_status", "03"); if (startDate != null && endDate != null) { receivableWrapper.between("drt.create_time", @@ -1129,6 +1137,14 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl> receivables = repairTicketsMapper.selectSumAmount(receivableWrapper); BigDecimal receivableAmount = BigDecimal.ZERO; Integer receivableCount = 0; @@ -1960,7 +1976,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl ids = permissionApi.getUserIdByRoleId(roleInfo.getId()); - if (CollectionUtil.isEmpty(ids)) return; + if (CollectionUtil.isEmpty(ids)) return; // 如果是移交给总检就需要通知总检并让其总检 if (RecordTypeEnum.SGWCZJ.getCode().equals(respVO.getRecordType()) && "02".equals(respVO.getFinishType())) { // 工单移交给总检(理论上讲只有一个总检,就算有多个这里面也只给一个) @@ -2724,7 +2740,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl payStatuses; + /** 收益率范围 */ + private List profitRateRanges; } 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 7518af81..96c2e0da 100644 --- a/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml @@ -69,6 +69,10 @@ LEFT JOIN system_dict_data sdd ON drt.repair_type = sdd.value AND sdd.dict_type = 'repair_type' AND sdd.deleted = 0 WHERE drt.deleted = 0 + + AND drt.create_time BETWEEN CONCAT(#{reqVO.dateRange[0]}, ' 00:00:00') + AND CONCAT(#{reqVO.dateRange[1]}, ' 23:59:59') + GROUP BY drt.repair_type ORDER BY @@ -254,4 +258,120 @@ totalTasks DESC; + + + + + diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml index 5ac0c08d..6d17c002 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml @@ -400,6 +400,15 @@ + + HAVING + CASE + WHEN SUM(CASE WHEN drti.item_type IN ('01','02') THEN drti.item_money ELSE 0 END) = 0 THEN 0 + ELSE ROUND(SUM(CASE WHEN drti.item_type = '02' THEN drti.item_profit ELSE 0 END) + / SUM(CASE WHEN drti.item_type IN ('01','02') THEN drti.item_money ELSE 0 END), 4) + END + BETWEEN #{map.profitRateRanges[0]} AND #{map.profitRateRanges[1]} + GROUP BY drt.id order by drt.update_time desc @@ -545,6 +554,15 @@ AND drt.is_handover = '0' AND drt.tickets_status != '03' + + HAVING + CASE + WHEN SUM(CASE WHEN drti.item_type IN ('01','02') THEN drti.item_money ELSE 0 END) = 0 THEN 0 + ELSE ROUND(SUM(CASE WHEN drti.item_type = '02' THEN drti.item_profit ELSE 0 END) + / SUM(CASE WHEN drti.item_type IN ('01','02') THEN drti.item_money ELSE 0 END), 4) + END + BETWEEN #{map.profitRateRanges[0]} AND #{map.profitRateRanges[1]} + GROUP BY drt.id ORDER BY drt.update_time DESC @@ -721,6 +739,16 @@ AND drt.is_handover = '0' AND drt.tickets_status != '03' + + + HAVING + CASE + WHEN SUM(CASE WHEN drti.item_type IN ('01','02') THEN drti.item_money ELSE 0 END) = 0 THEN 0 + ELSE ROUND(SUM(CASE WHEN drti.item_type = '02' THEN drti.item_profit ELSE 0 END) + / SUM(CASE WHEN drti.item_type IN ('01','02') THEN drti.item_money ELSE 0 END), 4) + END + BETWEEN #{map.profitRateRanges[0]} AND #{map.profitRateRanges[1]} +