From ab8e31d158abc1faae50313c566edee2b728fb1d Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 31 Jan 2026 10:50:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(mat):=20=E6=B7=BB=E5=8A=A0=E7=89=A9?= =?UTF-8?q?=E6=96=99=E5=BA=93=E5=AD=98=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 MatMaterialWithInventoryVo 视图对象用于封装物料及库存信息 - 在 IMatMaterialService 中添加 queryListWithInventory 和 queryPageListWithInventory 方法 - 实现物料列表接口返回包含库存信息的数据结构 - 更新导出功能以支持带库存信息的物料数据导出 - 优化 MatPurchaseServiceImpl 中的 Bean 属性复制逻辑 - 重构采购分页查询结果处理方式 --- .../mat/controller/MatMaterialController.java | 10 ++- .../domain/vo/MatMaterialWithInventoryVo.java | 82 +++++++++++++++++++ .../gear/mat/service/IMatMaterialService.java | 11 +++ .../service/impl/MatMaterialServiceImpl.java | 61 ++++++++++++++ .../service/impl/MatPurchaseServiceImpl.java | 18 +--- 5 files changed, 164 insertions(+), 18 deletions(-) create mode 100644 gear-mat/src/main/java/com/gear/mat/domain/vo/MatMaterialWithInventoryVo.java diff --git a/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialController.java b/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialController.java index 2ac9c55..2ee2b16 100644 --- a/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialController.java +++ b/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialController.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.MatMaterialVo; +import com.gear.mat.domain.vo.MatMaterialWithInventoryVo; import com.gear.mat.domain.bo.MatMaterialBo; import com.gear.mat.service.IMatMaterialService; import com.gear.common.core.page.TableDataInfo; @@ -43,8 +44,8 @@ public class MatMaterialController extends BaseController { * 查询配料配件基础信息列表 */ @GetMapping("/list") - public TableDataInfo list(MatMaterialBo bo, PageQuery pageQuery) { - return iMatMaterialService.queryPageList(bo, pageQuery); + public TableDataInfo list(MatMaterialBo bo, PageQuery pageQuery) { + return iMatMaterialService.queryPageListWithInventory(bo, pageQuery); } /** @@ -53,8 +54,9 @@ public class MatMaterialController extends BaseController { @Log(title = "配料配件基础信息", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(MatMaterialBo bo, HttpServletResponse response) { - List list = iMatMaterialService.queryList(bo); - ExcelUtil.exportExcel(list, "配料配件基础信息", MatMaterialVo.class, response); + // 使用增强的服务方法获取带库存信息的物料列表 + List list = iMatMaterialService.queryListWithInventory(bo); + ExcelUtil.exportExcel(list, "配料配件基础信息", MatMaterialWithInventoryVo.class, response); } /** diff --git a/gear-mat/src/main/java/com/gear/mat/domain/vo/MatMaterialWithInventoryVo.java b/gear-mat/src/main/java/com/gear/mat/domain/vo/MatMaterialWithInventoryVo.java new file mode 100644 index 0000000..72114a1 --- /dev/null +++ b/gear-mat/src/main/java/com/gear/mat/domain/vo/MatMaterialWithInventoryVo.java @@ -0,0 +1,82 @@ +package com.gear.mat.domain.vo; + +import lombok.Data; +import java.math.BigDecimal; + +/** + * 物料信息与库存信息视图对象 + * + * @author ruoyi + * @date 2026-01-31 + */ +@Data +public class MatMaterialWithInventoryVo { + + /** + * 物料ID + */ + private Long materialId; + + /** + * 物料名称 + */ + private String materialName; + + /** + * 规格 + */ + private String spec; + + /** + * 型号 + */ + private String model; + + /** + * 生产厂家 + */ + private String factory; + + /** + * 单位 + */ + private String unit; + + /** + * 当前库存数量 + */ + private BigDecimal currentStock; + + /** + * 在途数量(未完成入库的采购数量) + */ + private BigDecimal inTransitNum; + + /** + * 计划采购总数量 + */ + private BigDecimal planNum; + + /** + * 已入库数量 + */ + private BigDecimal receivedNum; + + public MatMaterialWithInventoryVo() { + this.currentStock = BigDecimal.ZERO; + this.inTransitNum = BigDecimal.ZERO; + this.planNum = BigDecimal.ZERO; + this.receivedNum = BigDecimal.ZERO; + } + + // Copy constructor from MatMaterialVo + public MatMaterialWithInventoryVo(MatMaterialVo material) { + this.materialId = material.getMaterialId(); + this.materialName = material.getMaterialName(); + this.spec = material.getSpec(); + this.model = material.getModel(); + this.factory = material.getFactory(); + this.unit = material.getUnit(); + this.currentStock = material.getCurrentStock() != null ? material.getCurrentStock() : BigDecimal.ZERO; + } +} \ No newline at end of file diff --git a/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialService.java b/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialService.java index 1417fdc..eba0853 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialService.java +++ b/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialService.java @@ -2,6 +2,7 @@ package com.gear.mat.service; import com.gear.mat.domain.MatMaterial; import com.gear.mat.domain.vo.MatMaterialVo; +import com.gear.mat.domain.vo.MatMaterialWithInventoryVo; import com.gear.mat.domain.bo.MatMaterialBo; import com.gear.common.core.page.TableDataInfo; import com.gear.common.core.domain.PageQuery; @@ -32,6 +33,11 @@ public interface IMatMaterialService { */ List queryList(MatMaterialBo bo); + /** + * 查询配料配件基础信息列表(包含库存信息) + */ + List queryListWithInventory(MatMaterialBo bo); + /** * 新增配料配件基础信息 */ @@ -46,4 +52,9 @@ public interface IMatMaterialService { * 校验并批量删除配料配件基础信息信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询配料配件基础信息列表(包含库存信息) + */ + TableDataInfo queryPageListWithInventory(MatMaterialBo bo, PageQuery pageQuery); } diff --git a/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java b/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java index 225f5a7..744a854 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java +++ b/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialServiceImpl.java @@ -7,17 +7,21 @@ 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.vo.MaterialInventoryVo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.gear.mat.domain.bo.MatMaterialBo; import com.gear.mat.domain.vo.MatMaterialVo; +import com.gear.mat.domain.vo.MatMaterialWithInventoryVo; import com.gear.mat.domain.MatMaterial; import com.gear.mat.mapper.MatMaterialMapper; import com.gear.mat.service.IMatMaterialService; +import com.gear.mat.service.IMatPurchaseService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 配料配件基础信息Service业务层处理 @@ -30,6 +34,7 @@ import java.util.Collection; public class MatMaterialServiceImpl implements IMatMaterialService { private final MatMaterialMapper baseMapper; + private final IMatPurchaseService matPurchaseService; /** * 查询配料配件基础信息 @@ -111,4 +116,60 @@ public class MatMaterialServiceImpl implements IMatMaterialService { } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + public TableDataInfo queryPageListWithInventory(MatMaterialBo bo, PageQuery pageQuery) { + // 先查询物料基本信息 + TableDataInfo materialTable = queryPageList(bo, pageQuery); + + // 将MatMaterialVo转换为MatMaterialWithInventoryVo + List inventoryList = materialTable.getRows().stream() + .map(material -> { + MatMaterialWithInventoryVo inventoryVo = new MatMaterialWithInventoryVo(material); + + // 查询该物料的库存信息 + List materialInventoryList = matPurchaseService.queryMaterialInventory(material.getMaterialId()); + + if (!materialInventoryList.isEmpty()) { + MaterialInventoryVo inventoryInfo = materialInventoryList.get(0); + inventoryVo.setInTransitNum(inventoryInfo.getInTransitNum()); + inventoryVo.setPlanNum(inventoryInfo.getPlanNum()); + inventoryVo.setReceivedNum(inventoryInfo.getReceivedNum()); + } + + return inventoryVo; + }) + .collect(Collectors.toList()); + + // 构建返回结果 + Page resultPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize(), materialTable.getTotal()); + resultPage.setRecords(inventoryList); + + return TableDataInfo.build(resultPage); + } + + @Override + public List queryListWithInventory(MatMaterialBo bo) { + // 先查询物料基本信息 + List materialList = queryList(bo); + + // 将MatMaterialVo转换为MatMaterialWithInventoryVo + return materialList.stream() + .map(material -> { + MatMaterialWithInventoryVo inventoryVo = new MatMaterialWithInventoryVo(material); + + // 查询该物料的库存信息 + List materialInventoryList = matPurchaseService.queryMaterialInventory(material.getMaterialId()); + + if (!materialInventoryList.isEmpty()) { + MaterialInventoryVo inventoryInfo = materialInventoryList.get(0); + inventoryVo.setInTransitNum(inventoryInfo.getInTransitNum()); + inventoryVo.setPlanNum(inventoryInfo.getPlanNum()); + inventoryVo.setReceivedNum(inventoryInfo.getReceivedNum()); + } + + return inventoryVo; + }) + .collect(Collectors.toList()); + } } diff --git a/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java b/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java index 2188a1e..e9d86b5 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java +++ b/gear-mat/src/main/java/com/gear/mat/service/impl/MatPurchaseServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.gear.mat.domain.vo.*; import lombok.RequiredArgsConstructor; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.gear.mat.domain.bo.MatPurchaseBo; import com.gear.mat.domain.MatPurchase; @@ -55,11 +56,8 @@ public class MatPurchaseServiceImpl implements IMatPurchaseService { Page result = baseMapper.selectVoPagePlus(pageQuery.build(), qw); // 添加库存信息 List inventoryList = convertToPurchaseWithInventoryVo(result.getRecords()); - - Page inventoryResult = new Page<>(result.getCurrent(), result.getSize(), result.getTotal()); - inventoryResult.setRecords(inventoryList); - - return TableDataInfo.build(inventoryResult); + result.setRecords(inventoryList); + return TableDataInfo.build(result); } private QueryWrapper buildQueryWrapperPlus(MatPurchaseBo bo) { @@ -236,15 +234,7 @@ public class MatPurchaseServiceImpl implements IMatPurchaseService { MatPurchaseVo vo = new MatPurchaseVo(); // 复制基本采购信息 - vo.setPurchaseId(purchase.getPurchaseId()); - vo.setPurchaseNo(purchase.getPurchaseNo()); - vo.setFactory(purchase.getFactory()); - vo.setMaterialId(purchase.getMaterialId()); - vo.setPlanNum(purchase.getPlanNum()); - vo.setPurchasePrice(purchase.getPurchasePrice()); - vo.setStatus(purchase.getStatus()); - vo.setRemark(purchase.getRemark()); - + BeanUtils.copyProperties(purchase, vo); // 获取物料信息 MatMaterialVo material = matMaterialService.queryById(purchase.getMaterialId()); if (material != null) {