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.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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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.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;
|
||||||
@@ -31,6 +32,11 @@ public interface IMatProductService {
|
|||||||
* 查询产品基础信息列表
|
* 查询产品基础信息列表
|
||||||
*/
|
*/
|
||||||
List<MatProductVo> queryList(MatProductBo bo);
|
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.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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增产品基础信息
|
* 新增产品基础信息
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user