feat(mat-product): 添加产品配料信息查询功能

- 在 IMatProductService 中新增 queryPageListWithMaterials 方法用于查询产品及关联配料信息
- 修改 MatProductController 的 list 接口返回 MatProductWithMaterialsVo 包含配料信息
- 在 MatProductServiceImpl 中实现产品配料关联查询逻辑和数据转换功能
- 新增 MatProductWithMaterialsVo 视图对象用于封装产品及配料信息
- 集成 matMaterialService 和 productMaterialRelationService 进行配料数据获取
- 实现 convertToProductWithMaterialsVo 方法将基础产品信息转换为带配料信息的 VO 对象
This commit is contained in:
2026-01-30 13:48:30 +08:00
parent 04ca5dc4f1
commit d39b9e6d2a
4 changed files with 164 additions and 2 deletions

View File

@@ -21,6 +21,7 @@ import com.gear.common.core.validate.QueryGroup;
import com.gear.common.enums.BusinessType; import com.gear.common.enums.BusinessType;
import com.gear.common.utils.poi.ExcelUtil; import com.gear.common.utils.poi.ExcelUtil;
import com.gear.mat.domain.vo.MatProductVo; 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.domain.bo.MatProductBo;
import com.gear.mat.service.IMatProductService; import com.gear.mat.service.IMatProductService;
import com.gear.common.core.page.TableDataInfo; import com.gear.common.core.page.TableDataInfo;
@@ -43,8 +44,8 @@ public class MatProductController extends BaseController {
* 查询产品基础信息列表 * 查询产品基础信息列表
*/ */
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<MatProductVo> list(MatProductBo bo, PageQuery pageQuery) { public TableDataInfo<MatProductWithMaterialsVo> list(MatProductBo bo, PageQuery pageQuery) {
return iMatProductService.queryPageList(bo, pageQuery); return iMatProductService.queryPageListWithMaterials(bo, pageQuery);
} }
/** /**

View File

@@ -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<MaterialInfo> 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;
}
}

View File

@@ -2,6 +2,7 @@ package com.gear.mat.service;
import com.gear.mat.domain.MatProduct; import com.gear.mat.domain.MatProduct;
import com.gear.mat.domain.vo.MatProductVo; 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.domain.bo.MatProductBo;
import com.gear.common.core.page.TableDataInfo; import com.gear.common.core.page.TableDataInfo;
import com.gear.common.core.domain.PageQuery; import com.gear.common.core.domain.PageQuery;
@@ -32,6 +33,11 @@ public interface IMatProductService {
*/ */
List<MatProductVo> queryList(MatProductBo bo); List<MatProductVo> queryList(MatProductBo bo);
/**
* 查询产品基础信息列表(包含关联的配料信息)
*/
TableDataInfo<MatProductWithMaterialsVo> queryPageListWithMaterials(MatProductBo bo, PageQuery pageQuery);
/** /**
* 新增产品基础信息 * 新增产品基础信息
*/ */

View File

@@ -7,17 +7,25 @@ import com.gear.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gear.mat.domain.bo.MatProductMaterialRelationBo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.gear.mat.domain.bo.MatProductBo; import com.gear.mat.domain.bo.MatProductBo;
import com.gear.mat.domain.vo.MatProductVo; import com.gear.mat.domain.vo.MatProductVo;
import com.gear.mat.domain.vo.MatProductWithMaterialsVo;
import com.gear.mat.domain.MatProduct; import com.gear.mat.domain.MatProduct;
import com.gear.mat.mapper.MatProductMapper; import com.gear.mat.mapper.MatProductMapper;
import com.gear.mat.service.IMatProductService; 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.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.stream.Collectors;
import java.util.ArrayList;
/** /**
* 产品基础信息Service业务层处理 * 产品基础信息Service业务层处理
@@ -30,6 +38,8 @@ import java.util.Collection;
public class MatProductServiceImpl implements IMatProductService { public class MatProductServiceImpl implements IMatProductService {
private final MatProductMapper baseMapper; private final MatProductMapper baseMapper;
private final IMatMaterialService matMaterialService;
private final IMatProductMaterialRelationService productMaterialRelationService;
/** /**
* 查询产品基础信息 * 查询产品基础信息
@@ -68,6 +78,70 @@ public class MatProductServiceImpl implements IMatProductService {
return lqw; return lqw;
} }
/**
* 查询产品基础信息列表(包含关联的配料信息)
*/
@Override
public TableDataInfo<MatProductWithMaterialsVo> queryPageListWithMaterials(MatProductBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<MatProduct> lqw = buildQueryWrapper(bo);
Page<MatProductVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 转换为带配料信息的VO
List<MatProductWithMaterialsVo> productList = result.getRecords().stream()
.map(product -> convertToProductWithMaterialsVo(product))
.collect(Collectors.toList());
Page<MatProductWithMaterialsVo> 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<MatProductMaterialRelationVo> relations = productMaterialRelationService.queryList(
new MatProductMaterialRelationBo() {{
setProductId(productVo.getProductId());
}}
);
List<MatProductWithMaterialsVo.MaterialInfo> 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;
}
/** /**
* 新增产品基础信息 * 新增产品基础信息
*/ */