From 7e9caf9bb7ba8926126b791e6af63786b1e9a893 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 25 Jun 2026 13:41:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow):=20=E6=B7=BB=E5=8A=A0=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E6=8E=92=E7=A8=8B=E5=85=B3=E8=81=94CRM=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在生产排程VO中新增orderList字段存储关联的CRM订单列表 - 实现fillOrderList方法批量填充CRM订单数据 - 通过sch_sale_schedule_rel关联表建立排程与订单的关系 - 添加ICrmOrderService依赖注入以查询订单信息 - 在查询排程详情时自动加载相关联的CRM订单数据 - 配置klp-crm模块依赖以支持跨模块服务调用 --- .../crm/service/impl/CrmOrderServiceImpl.java | 12 +++- klp-flow/pom.xml | 4 ++ .../klp/flow/domain/vo/SchProdScheduleVo.java | 7 ++ .../impl/SchProdScheduleServiceImpl.java | 69 +++++++++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java index bfef5bb9e..e6baee4c8 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java @@ -107,6 +107,12 @@ public class CrmOrderServiceImpl implements ICrmOrderService { return TableDataInfo.build(result); } + extracted(records); + + return TableDataInfo.build(result); + } + + private void extracted(List records) { Set userNames = records.stream() .flatMap(v -> java.util.stream.Stream.of(v.getCreateBy(), v.getUpdateBy())) .filter(StringUtils::isNotBlank) @@ -178,8 +184,6 @@ public class CrmOrderServiceImpl implements ICrmOrderService { } } } - - return TableDataInfo.build(result); } private QueryWrapper buildQueryWrapperPlus(CrmOrderBo bo) { @@ -262,7 +266,9 @@ public class CrmOrderServiceImpl implements ICrmOrderService { @Override public List queryList(CrmOrderBo bo) { QueryWrapper lqw = buildQueryWrapperPlus(bo); - return baseMapper.selectVoPagePlus(lqw); + List crmOrderVos = baseMapper.selectVoPagePlus(lqw); + extracted(crmOrderVos); + return crmOrderVos; } /** diff --git a/klp-flow/pom.xml b/klp-flow/pom.xml index 9ae00e637..9aab07b11 100644 --- a/klp-flow/pom.xml +++ b/klp-flow/pom.xml @@ -19,5 +19,9 @@ com.klp klp-wms + + com.klp + klp-crm + diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java index 938ec3c31..9a9dab4c9 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java @@ -8,6 +8,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.klp.common.annotation.ExcelDictFormat; import com.klp.common.convert.ExcelDictConvert; +import com.klp.crm.domain.vo.CrmOrderVo; import lombok.Data; import java.util.List; @@ -195,4 +196,10 @@ public class SchProdScheduleVo { @TableField(exist = false) private List detailList; + /** + * 关联的CRM订单列表(通过合同号 relContractNo 匹配 CrmOrder.contractCode) + */ + @TableField(exist = false) + private List orderList; + } diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java index 630b7dae2..e6a105b6f 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java @@ -16,10 +16,17 @@ import com.klp.flow.domain.SchProdScheduleDetail; import com.klp.flow.domain.vo.SchProdScheduleDetailVo; import com.klp.flow.mapper.SchProdScheduleMapper; import com.klp.flow.mapper.SchProdScheduleDetailMapper; +import com.klp.flow.mapper.SchSaleScheduleRelMapper; +import com.klp.flow.domain.SchSaleScheduleRel; import com.klp.flow.service.ISchProdScheduleService; +import com.klp.crm.service.ICrmOrderService; +import com.klp.crm.domain.bo.CrmOrderBo; +import com.klp.crm.domain.vo.CrmOrderVo; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.Collection; import java.util.Collections; import java.util.stream.Collectors; @@ -36,6 +43,8 @@ public class SchProdScheduleServiceImpl implements ISchProdScheduleService { private final SchProdScheduleMapper baseMapper; private final SchProdScheduleDetailMapper detailMapper; + private final SchSaleScheduleRelMapper relMapper; + private final ICrmOrderService crmOrderService; /** * 查询排产单主 @@ -45,6 +54,7 @@ public class SchProdScheduleServiceImpl implements ISchProdScheduleService { SchProdScheduleVo vo = baseMapper.selectVoById(scheduleId); if (vo != null) { fillDetailList(Collections.singletonList(vo)); + fillOrderList(Collections.singletonList(vo)); } return vo; } @@ -57,6 +67,7 @@ public class SchProdScheduleServiceImpl implements ISchProdScheduleService { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); fillDetailList(result.getRecords()); + fillOrderList(result.getRecords()); return TableDataInfo.build(result); } @@ -68,6 +79,7 @@ public class SchProdScheduleServiceImpl implements ISchProdScheduleService { LambdaQueryWrapper lqw = buildQueryWrapper(bo); List list = baseMapper.selectVoList(lqw); fillDetailList(list); + fillOrderList(list); return list; } @@ -99,6 +111,63 @@ public class SchProdScheduleServiceImpl implements ISchProdScheduleService { } } + /** + * 批量填充CRM订单列表(通过 sch_sale_schedule_rel 关联表) + */ + private void fillOrderList(List voList) { + if (voList == null || voList.isEmpty()) { + return; + } + // 1. 收集所有 scheduleId + List scheduleIds = voList.stream() + .map(SchProdScheduleVo::getScheduleId) + .filter(id -> id != null) + .distinct() + .collect(Collectors.toList()); + if (scheduleIds.isEmpty()) { + return; + } + // 2. 查关联表,获取 scheduleId → orderId 映射 + LambdaQueryWrapper relQw = Wrappers.lambdaQuery(); + relQw.in(SchSaleScheduleRel::getScheduleId, scheduleIds); + List rels = relMapper.selectList(relQw); + if (rels == null || rels.isEmpty()) { + return; + } + // 收集所有 orderId(去重) + Set orderIdSet = rels.stream() + .map(SchSaleScheduleRel::getOrderId) + .filter(id -> id != null) + .collect(Collectors.toSet()); + // scheduleId → 关联的 orderId 列表 + Map> scheduleOrderIdsMap = rels.stream() + .collect(Collectors.groupingBy( + SchSaleScheduleRel::getScheduleId, + Collectors.mapping(SchSaleScheduleRel::getOrderId, Collectors.toList()) + )); + if (orderIdSet.isEmpty()) { + return; + } + // 3. 批量查 CrmOrder + CrmOrderBo orderBo = new CrmOrderBo(); + orderBo.setOrderIds(new java.util.ArrayList<>(orderIdSet)); + List allOrders = crmOrderService.queryList(orderBo); + Map orderMap = allOrders != null + ? allOrders.stream().collect(Collectors.toMap(CrmOrderVo::getOrderId, o -> o, (a, b) -> a)) + : Collections.emptyMap(); + // 4. 回填到 VO + for (SchProdScheduleVo vo : voList) { + List orderIds = scheduleOrderIdsMap.get(vo.getScheduleId()); + if (orderIds != null) { + List orders = orderIds.stream() + .map(orderMap::get) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + vo.setOrderList(orders); + } + } + } + private LambdaQueryWrapper buildQueryWrapper(SchProdScheduleBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery();