diff --git a/gear-mat/src/main/java/com/gear/mat/controller/MatProductController.java b/gear-mat/src/main/java/com/gear/mat/controller/MatProductController.java index fc03bbd..3bdf0a5 100644 --- a/gear-mat/src/main/java/com/gear/mat/controller/MatProductController.java +++ b/gear-mat/src/main/java/com/gear/mat/controller/MatProductController.java @@ -21,6 +21,7 @@ import com.gear.common.core.validate.QueryGroup; import com.gear.common.enums.BusinessType; import com.gear.common.utils.poi.ExcelUtil; import com.gear.mat.domain.vo.MatProductVo; +import com.gear.mat.domain.vo.MatProductWithMaterialsVo; import com.gear.mat.domain.bo.MatProductBo; import com.gear.mat.service.IMatProductService; import com.gear.common.core.page.TableDataInfo; @@ -43,8 +44,8 @@ public class MatProductController extends BaseController { * 查询产品基础信息列表 */ @GetMapping("/list") - public TableDataInfo list(MatProductBo bo, PageQuery pageQuery) { - return iMatProductService.queryPageList(bo, pageQuery); + public TableDataInfo list(MatProductBo bo, PageQuery pageQuery) { + return iMatProductService.queryPageListWithMaterials(bo, pageQuery); } /** diff --git a/gear-mat/src/main/java/com/gear/mat/domain/vo/MatProductWithMaterialsVo.java b/gear-mat/src/main/java/com/gear/mat/domain/vo/MatProductWithMaterialsVo.java new file mode 100644 index 0000000..07922fd --- /dev/null +++ b/gear-mat/src/main/java/com/gear/mat/domain/vo/MatProductWithMaterialsVo.java @@ -0,0 +1,81 @@ +package com.gear.mat.domain.vo; + +import java.math.BigDecimal; +import java.util.List; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.gear.common.annotation.ExcelDictFormat; +import com.gear.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + +/** + * 产品基础信息及配料信息视图对象 + * + * @author ruoyi + * @date 2026-01-30 + */ +@Data +@ExcelIgnoreUnannotated +public class MatProductWithMaterialsVo { + + private static final long serialVersionUID = 1L; + + /** + * 产品ID 主键 + */ + @ExcelProperty(value = "产品ID 主键") + private Long productId; + + /** + * 产品名称 + */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** + * 产品规格 + */ + @ExcelProperty(value = "产品规格") + private String spec; + + /** + * 产品型号 + */ + @ExcelProperty(value = "产品型号") + private String model; + + /** + * 产品单价 可手动维护 + */ + @ExcelProperty(value = "产品单价 可手动维护") + private BigDecimal unitPrice; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 关联的配料信息列表 + */ + private List materials; + + /** + * 配料信息内部类 + */ + @Data + public static class MaterialInfo { + private Long materialId; + private String materialName; + private String spec; + private String model; + private String factory; + private String unit; + private BigDecimal currentStock; + private BigDecimal materialNum; // 单产品所需配料数量 + private Long sort; // 配料排序 + private String remark; + } +} \ No newline at end of file diff --git a/gear-mat/src/main/java/com/gear/mat/service/IMatProductService.java b/gear-mat/src/main/java/com/gear/mat/service/IMatProductService.java index dcc7df4..f4c24ac 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/IMatProductService.java +++ b/gear-mat/src/main/java/com/gear/mat/service/IMatProductService.java @@ -2,6 +2,7 @@ package com.gear.mat.service; import com.gear.mat.domain.MatProduct; import com.gear.mat.domain.vo.MatProductVo; +import com.gear.mat.domain.vo.MatProductWithMaterialsVo; import com.gear.mat.domain.bo.MatProductBo; import com.gear.common.core.page.TableDataInfo; import com.gear.common.core.domain.PageQuery; @@ -31,6 +32,11 @@ public interface IMatProductService { * 查询产品基础信息列表 */ List queryList(MatProductBo bo); + + /** + * 查询产品基础信息列表(包含关联的配料信息) + */ + TableDataInfo queryPageListWithMaterials(MatProductBo bo, PageQuery pageQuery); /** * 新增产品基础信息 diff --git a/gear-mat/src/main/java/com/gear/mat/service/impl/MatProductServiceImpl.java b/gear-mat/src/main/java/com/gear/mat/service/impl/MatProductServiceImpl.java index 8d4bd42..e363742 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/impl/MatProductServiceImpl.java +++ b/gear-mat/src/main/java/com/gear/mat/service/impl/MatProductServiceImpl.java @@ -7,17 +7,25 @@ import com.gear.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.gear.mat.domain.bo.MatProductMaterialRelationBo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.gear.mat.domain.bo.MatProductBo; import com.gear.mat.domain.vo.MatProductVo; +import com.gear.mat.domain.vo.MatProductWithMaterialsVo; import com.gear.mat.domain.MatProduct; import com.gear.mat.mapper.MatProductMapper; import com.gear.mat.service.IMatProductService; +import com.gear.mat.service.IMatMaterialService; +import com.gear.mat.service.IMatProductMaterialRelationService; +import com.gear.mat.domain.vo.MatMaterialVo; +import com.gear.mat.domain.vo.MatProductMaterialRelationVo; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; +import java.util.ArrayList; /** * 产品基础信息Service业务层处理 @@ -30,6 +38,8 @@ import java.util.Collection; public class MatProductServiceImpl implements IMatProductService { private final MatProductMapper baseMapper; + private final IMatMaterialService matMaterialService; + private final IMatProductMaterialRelationService productMaterialRelationService; /** * 查询产品基础信息 @@ -68,6 +78,70 @@ public class MatProductServiceImpl implements IMatProductService { return lqw; } + /** + * 查询产品基础信息列表(包含关联的配料信息) + */ + @Override + public TableDataInfo queryPageListWithMaterials(MatProductBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + + // 转换为带配料信息的VO + List productList = result.getRecords().stream() + .map(product -> convertToProductWithMaterialsVo(product)) + .collect(Collectors.toList()); + + Page pageResult = new Page<>(); + pageResult.setRecords(productList); + pageResult.setTotal(result.getTotal()); + pageResult.setSize(result.getSize()); + pageResult.setCurrent(result.getCurrent()); + + return TableDataInfo.build(pageResult); + } + + private MatProductWithMaterialsVo convertToProductWithMaterialsVo(MatProductVo productVo) { + MatProductWithMaterialsVo productWithMaterialsVo = new MatProductWithMaterialsVo(); + + // 复制基本产品信息 + productWithMaterialsVo.setProductId(productVo.getProductId()); + productWithMaterialsVo.setProductName(productVo.getProductName()); + productWithMaterialsVo.setSpec(productVo.getSpec()); + productWithMaterialsVo.setModel(productVo.getModel()); + productWithMaterialsVo.setUnitPrice(productVo.getUnitPrice()); + productWithMaterialsVo.setRemark(productVo.getRemark()); + + // 查询并设置关联的配料信息 + List relations = productMaterialRelationService.queryList( + new MatProductMaterialRelationBo() {{ + setProductId(productVo.getProductId()); + }} + ); + + List materials = new ArrayList<>(); + for (MatProductMaterialRelationVo relation : relations) { + MatMaterialVo material = matMaterialService.queryById(relation.getMaterialId()); + if (material != null) { + MatProductWithMaterialsVo.MaterialInfo materialInfo = new MatProductWithMaterialsVo.MaterialInfo(); + materialInfo.setMaterialId(material.getMaterialId()); + materialInfo.setMaterialName(material.getMaterialName()); + materialInfo.setSpec(material.getSpec()); + materialInfo.setModel(material.getModel()); + materialInfo.setFactory(material.getFactory()); + materialInfo.setUnit(material.getUnit()); + materialInfo.setCurrentStock(material.getCurrentStock()); + materialInfo.setMaterialNum(relation.getMaterialNum()); + materialInfo.setSort(relation.getSort()); + materialInfo.setRemark(relation.getRemark()); + materials.add(materialInfo); + } + } + + productWithMaterialsVo.setMaterials(materials); + + return productWithMaterialsVo; + } + /** * 新增产品基础信息 */