From ba12c346e89a1ea818e63f7ff82ec02e39ed87c9 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 29 Dec 2025 16:55:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(sales):=20=E4=B8=BA=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=B7=BB=E5=8A=A0=E8=AE=A2=E5=8D=95=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 CrmOrderItemMapper 中添加根据订单ID列表查询订单明细的方法 - 实现 MyBatis 查询语句支持批量订单ID查询订单明细 - 修改销售报表服务类注入 CrmOrderItemMapper 依赖 - 扩展销售报表查询逻辑以包含订单明细数据 - 在销售报表 VO 中添加订单明细列表字段 - 使用流式处理和分组收集优化订单明细关联逻辑 --- .../klp/crm/domain/vo/CrmSalesReportVo.java | 18 ++++++--- .../klp/crm/mapper/CrmOrderItemMapper.java | 10 +++++ .../impl/CrmSalesReportServiceImpl.java | 38 ++++++++++++++++++- .../resources/mapper/CrmOrderItemMapper.xml | 24 ++++++++++++ .../mapper/{klp => }/CrmSalesReportMapper.xml | 0 5 files changed, 83 insertions(+), 7 deletions(-) rename klp-crm/src/main/resources/mapper/{klp => }/CrmSalesReportMapper.xml (100%) diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java index a4509d19..87826cca 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java @@ -6,6 +6,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.crm.domain.CrmOrderItem; import lombok.Data; /** @@ -35,7 +36,7 @@ public class CrmSalesReportVo { */ @Data public static class SalesSummary { - + /** * 总订单数 */ @@ -93,7 +94,7 @@ public class CrmSalesReportVo { */ @Data public static class OrderDetail { - + /** * 订单ID */ @@ -190,6 +191,11 @@ public class CrmSalesReportVo { */ @ExcelProperty(value = "异议数量") private Integer objectionCount; + + /** + * 订单明细列表 + */ + private List orderItemList; } /** @@ -197,7 +203,7 @@ public class CrmSalesReportVo { */ @Data public static class SalesmanStat { - + /** * 销售员 */ @@ -228,7 +234,7 @@ public class CrmSalesReportVo { */ @Data public static class CustomerLevelStat { - + /** * 客户等级 */ @@ -259,7 +265,7 @@ public class CrmSalesReportVo { */ @Data public static class IndustryStat { - + /** * 行业 */ @@ -284,4 +290,4 @@ public class CrmSalesReportVo { @ExcelProperty(value = "销售金额") private BigDecimal salesAmount; } -} \ No newline at end of file +} diff --git a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java index 9dde0157..250c9ab7 100644 --- a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java +++ b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java @@ -3,6 +3,9 @@ package com.klp.crm.mapper; import com.klp.crm.domain.CrmOrderItem; import com.klp.crm.domain.vo.CrmOrderItemVo; import com.klp.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 正式订单明细Mapper接口 @@ -12,4 +15,11 @@ import com.klp.common.core.mapper.BaseMapperPlus; */ public interface CrmOrderItemMapper extends BaseMapperPlus { + /** + * 根据订单ID查询订单明细列表 + * + * @param orderIds 订单ID列表 + * @return 订单明细列表 + */ + List selectOrderItemsByOrderIds(@Param("orderIds") List orderIds); } diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java index 4278082d..4835a0c0 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java @@ -1,5 +1,7 @@ package com.klp.crm.service.impl; +import com.klp.crm.domain.CrmOrderItem; +import com.klp.crm.mapper.CrmOrderItemMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.common.core.page.TableDataInfo; @@ -12,7 +14,10 @@ import com.klp.crm.service.ICrmSalesReportService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 销售报表Service业务层处理 @@ -26,6 +31,8 @@ public class CrmSalesReportServiceImpl implements ICrmSalesReportService { private final CrmSalesReportMapper baseMapper; + private final CrmOrderItemMapper crmOrderItemMapper; + /** * 查询销售报表汇总数据 */ @@ -58,7 +65,36 @@ public class CrmSalesReportServiceImpl implements ICrmSalesReportService { */ @Override public List queryOrderDetailList(CrmSalesReportBo bo) { - return baseMapper.selectOrderDetailList(bo); + List orderDetails = baseMapper.selectOrderDetailList(bo); + if (StringUtils.isNotNull(orderDetails) && !orderDetails.isEmpty()) { + // 提取所有订单ID + List orderIds = orderDetails.stream() + .map(CrmSalesReportVo.OrderDetail::getOrderId) + .filter(StringUtils::isNotNull) + .distinct() + .collect(Collectors.toList()); + + // 根据订单ID列表查询对应的明细 + if (!orderIds.isEmpty()) { + List orderItems = crmOrderItemMapper.selectOrderItemsByOrderIds(orderIds); + + // 将明细按订单ID分组 + Map> orderItemMap = orderItems.stream() + .collect(Collectors.groupingBy(CrmOrderItem::getOrderId)); + + // 为每个订单设置对应的明细列表 + for (CrmSalesReportVo.OrderDetail orderDetail : orderDetails) { + List items = orderItemMap.get(orderDetail.getOrderId()); + orderDetail.setOrderItemList(items != null ? items : new ArrayList<>()); + } + } else { + // 如果没有有效的订单ID,初始化明细列表为空 + for (CrmSalesReportVo.OrderDetail orderDetail : orderDetails) { + orderDetail.setOrderItemList(new ArrayList<>()); + } + } + } + return orderDetails; } /** diff --git a/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml b/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml index 1ae1f99d..8cceba99 100644 --- a/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml +++ b/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml @@ -19,6 +19,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/klp-crm/src/main/resources/mapper/klp/CrmSalesReportMapper.xml b/klp-crm/src/main/resources/mapper/CrmSalesReportMapper.xml similarity index 100% rename from klp-crm/src/main/resources/mapper/klp/CrmSalesReportMapper.xml rename to klp-crm/src/main/resources/mapper/CrmSalesReportMapper.xml