From 86200d189d2595f972c8fe17218eedcbff8215ee Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 25 Jun 2026 13:23:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(schProdSchedule):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=8E=92=E4=BA=A7=E5=8D=95=E4=B8=BB=E8=A1=A8=E4=B8=8E=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E8=A1=A8=E7=9A=84=E5=85=B3=E8=81=94=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在SchProdScheduleDetailVo中添加schedule字段用于关联主表信息 - 在SchProdScheduleVo中添加detailList字段用于关联明细列表 - 实现fillSchedule方法批量填充排产单明细中的主表信息 - 实现fillDetailList方法批量填充排产单主表中的明细列表 - 修改queryById、queryPageList、queryList方法以支持关联数据查询 - 添加必要的依赖注入和工具类导入 --- .../domain/vo/SchProdScheduleDetailVo.java | 6 +++ .../klp/flow/domain/vo/SchProdScheduleVo.java | 8 ++++ .../SchProdScheduleDetailServiceImpl.java | 40 ++++++++++++++++- .../impl/SchProdScheduleServiceImpl.java | 45 ++++++++++++++++++- 4 files changed, 95 insertions(+), 4 deletions(-) diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java index c0c9a763c..b5e33912a 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java @@ -3,6 +3,7 @@ package com.klp.flow.domain.vo; import java.math.BigDecimal; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; 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 lombok.Data; @@ -69,5 +70,10 @@ public class SchProdScheduleDetailVo { @ExcelProperty(value = "单行排产备注") private String remark; + /** + * 关联的排产单主表信息 + */ + @TableField(exist = false) + private SchProdScheduleVo schedule; } 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 e563dd389..938ec3c31 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 @@ -5,10 +5,13 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; 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 lombok.Data; +import java.util.List; + /** * 排产单主视图对象 sch_prod_schedule @@ -186,5 +189,10 @@ public class SchProdScheduleVo { @ExcelProperty(value = "备注") private String remark; + /** + * 关联的排产明细列表 + */ + @TableField(exist = false) + private List detailList; } diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java index be3fbf2f0..1d623b884 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java @@ -12,12 +12,17 @@ import org.springframework.stereotype.Service; import com.klp.flow.domain.bo.SchProdScheduleDetailBo; import com.klp.flow.domain.vo.SchProdScheduleDetailVo; import com.klp.flow.domain.SchProdScheduleDetail; +import com.klp.flow.domain.vo.SchProdScheduleVo; import com.klp.flow.mapper.SchProdScheduleDetailMapper; +import com.klp.flow.mapper.SchProdScheduleMapper; import com.klp.flow.service.ISchProdScheduleDetailService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.stream.Collectors; /** * 排产单明细Service业务层处理 @@ -30,13 +35,18 @@ import java.util.Collection; public class SchProdScheduleDetailServiceImpl implements ISchProdScheduleDetailService { private final SchProdScheduleDetailMapper baseMapper; + private final SchProdScheduleMapper scheduleMapper; /** * 查询排产单明细 */ @Override public SchProdScheduleDetailVo queryById(Long scheduleDetailId){ - return baseMapper.selectVoById(scheduleDetailId); + SchProdScheduleDetailVo vo = baseMapper.selectVoById(scheduleDetailId); + if (vo != null) { + fillSchedule(Collections.singletonList(vo)); + } + return vo; } /** @@ -46,6 +56,7 @@ public class SchProdScheduleDetailServiceImpl implements ISchProdScheduleDetailS public TableDataInfo queryPageList(SchProdScheduleDetailBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + fillSchedule(result.getRecords()); return TableDataInfo.build(result); } @@ -55,7 +66,32 @@ public class SchProdScheduleDetailServiceImpl implements ISchProdScheduleDetailS @Override public List queryList(SchProdScheduleDetailBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List list = baseMapper.selectVoList(lqw); + fillSchedule(list); + return list; + } + + /** + * 批量填充主表信息 + */ + private void fillSchedule(List voList) { + if (voList == null || voList.isEmpty()) { + return; + } + Set scheduleIds = voList.stream() + .map(SchProdScheduleDetailVo::getScheduleId) + .filter(id -> id != null) + .collect(Collectors.toSet()); + if (scheduleIds.isEmpty()) { + return; + } + List schedules = scheduleMapper.selectVoBatchIds(scheduleIds); + Map scheduleMap = schedules != null + ? schedules.stream().collect(Collectors.toMap(SchProdScheduleVo::getScheduleId, s -> s, (a, b) -> a)) + : Collections.emptyMap(); + for (SchProdScheduleDetailVo vo : voList) { + vo.setSchedule(scheduleMap.get(vo.getScheduleId())); + } } private LambdaQueryWrapper buildQueryWrapper(SchProdScheduleDetailBo bo) { 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 e97631cae..630b7dae2 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 @@ -12,12 +12,17 @@ import org.springframework.stereotype.Service; import com.klp.flow.domain.bo.SchProdScheduleBo; import com.klp.flow.domain.vo.SchProdScheduleVo; import com.klp.flow.domain.SchProdSchedule; +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.service.ISchProdScheduleService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.Collections; +import java.util.stream.Collectors; /** * 排产单主Service业务层处理 @@ -30,13 +35,18 @@ import java.util.Collection; public class SchProdScheduleServiceImpl implements ISchProdScheduleService { private final SchProdScheduleMapper baseMapper; + private final SchProdScheduleDetailMapper detailMapper; /** * 查询排产单主 */ @Override public SchProdScheduleVo queryById(Long scheduleId){ - return baseMapper.selectVoById(scheduleId); + SchProdScheduleVo vo = baseMapper.selectVoById(scheduleId); + if (vo != null) { + fillDetailList(Collections.singletonList(vo)); + } + return vo; } /** @@ -46,6 +56,7 @@ public class SchProdScheduleServiceImpl implements ISchProdScheduleService { public TableDataInfo queryPageList(SchProdScheduleBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + fillDetailList(result.getRecords()); return TableDataInfo.build(result); } @@ -55,7 +66,37 @@ public class SchProdScheduleServiceImpl implements ISchProdScheduleService { @Override public List queryList(SchProdScheduleBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List list = baseMapper.selectVoList(lqw); + fillDetailList(list); + return list; + } + + /** + * 批量填充明细列表 + */ + private void fillDetailList(List voList) { + if (voList == null || voList.isEmpty()) { + return; + } + List scheduleIds = voList.stream() + .map(SchProdScheduleVo::getScheduleId) + .filter(id -> id != null) + .distinct() + .collect(Collectors.toList()); + if (scheduleIds.isEmpty()) { + return; + } + LambdaQueryWrapper detailQw = Wrappers.lambdaQuery(); + detailQw.in(SchProdScheduleDetail::getScheduleId, scheduleIds); + List allDetails = detailMapper.selectVoList(detailQw); + if (allDetails == null || allDetails.isEmpty()) { + return; + } + Map> detailMap = allDetails.stream() + .collect(Collectors.groupingBy(SchProdScheduleDetailVo::getScheduleId)); + for (SchProdScheduleVo vo : voList) { + vo.setDetailList(detailMap.getOrDefault(vo.getScheduleId(), Collections.emptyList())); + } } private LambdaQueryWrapper buildQueryWrapper(SchProdScheduleBo bo) {