feat(mat-product): 添加产品配料信息查询功能
- 在 IMatProductService 中新增 queryPageListWithMaterials 方法用于查询产品及关联配料信息 - 修改 MatProductController 的 list 接口返回 MatProductWithMaterialsVo 包含配料信息 - 在 MatProductServiceImpl 中实现产品配料关联查询逻辑和数据转换功能 - 新增 MatProductWithMaterialsVo 视图对象用于封装产品及配料信息 - 集成 matMaterialService 和 productMaterialRelationService 进行配料数据获取 - 实现 convertToProductWithMaterialsVo 方法将基础产品信息转换为带配料信息的 VO 对象
This commit is contained in:
@@ -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<MatProductVo> list(MatProductBo bo, PageQuery pageQuery) {
|
||||
return iMatProductService.queryPageList(bo, pageQuery);
|
||||
public TableDataInfo<MatProductWithMaterialsVo> list(MatProductBo bo, PageQuery pageQuery) {
|
||||
return iMatProductService.queryPageListWithMaterials(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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<MatProductVo> queryList(MatProductBo bo);
|
||||
|
||||
/**
|
||||
* 查询产品基础信息列表(包含关联的配料信息)
|
||||
*/
|
||||
TableDataInfo<MatProductWithMaterialsVo> queryPageListWithMaterials(MatProductBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 新增产品基础信息
|
||||
|
||||
@@ -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<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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增产品基础信息
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user