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) {