feat(mat-purchase): 添加采购单库存信息显示功能
- 移除未使用的 MatPurchase 导入 - 添加 IPage 依赖导入并简化集合导入 - 扩展查询方法以集成库存信息 - 新增 convertToPurchaseWithInventoryVo 方法处理采购单与库存数据转换 - 在 MatPurchaseVo 中添加已入库数量和在途数量字段 - 实现物料信息获取和入库统计逻辑 - 添加在途数量计算逻辑基于采购单状态判断
This commit is contained in:
@@ -126,4 +126,21 @@ public class MatPurchaseVo {
|
||||
private BigDecimal currentStock;
|
||||
|
||||
|
||||
/**
|
||||
* 已入库数量
|
||||
*/
|
||||
private BigDecimal receivedNum;
|
||||
|
||||
/**
|
||||
* 在途数量(未入库数量)
|
||||
*/
|
||||
private BigDecimal inTransitNum;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gear.mat.service;
|
||||
|
||||
import com.gear.mat.domain.MatPurchase;
|
||||
import com.gear.mat.domain.vo.MatPurchaseVo;
|
||||
import com.gear.mat.domain.vo.MaterialInventoryVo;
|
||||
import com.gear.mat.domain.bo.MatPurchaseBo;
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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.stereotype.Service;
|
||||
import com.gear.mat.domain.bo.MatPurchaseBo;
|
||||
import com.gear.mat.domain.MatPurchase;
|
||||
@@ -19,10 +20,7 @@ import com.gear.mat.service.IMatMaterialService;
|
||||
import com.gear.mat.service.IMatPurchaseInDetailService;
|
||||
import com.gear.mat.domain.bo.MatPurchaseInDetailBo;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -55,7 +53,13 @@ public class MatPurchaseServiceImpl implements IMatPurchaseService {
|
||||
public TableDataInfo<MatPurchaseVo> queryPageList(MatPurchaseBo bo, PageQuery pageQuery) {
|
||||
QueryWrapper<MatPurchase> qw = buildQueryWrapperPlus(bo);
|
||||
Page<MatPurchaseVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), qw);
|
||||
return TableDataInfo.build(result);
|
||||
// 添加库存信息
|
||||
List<MatPurchaseVo> inventoryList = convertToPurchaseWithInventoryVo(result.getRecords());
|
||||
|
||||
Page<MatPurchaseVo> inventoryResult = new Page<>(result.getCurrent(), result.getSize(), result.getTotal());
|
||||
inventoryResult.setRecords(inventoryList);
|
||||
|
||||
return TableDataInfo.build(inventoryResult);
|
||||
}
|
||||
|
||||
private QueryWrapper<MatPurchase> buildQueryWrapperPlus(MatPurchaseBo bo) {
|
||||
@@ -225,6 +229,65 @@ public class MatPurchaseServiceImpl implements IMatPurchaseService {
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<MatPurchaseVo> convertToPurchaseWithInventoryVo(List<MatPurchaseVo> purchaseList) {
|
||||
List<MatPurchaseVo> result = new ArrayList<>();
|
||||
|
||||
for (MatPurchaseVo purchase : purchaseList) {
|
||||
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());
|
||||
|
||||
// 获取物料信息
|
||||
MatMaterialVo material = matMaterialService.queryById(purchase.getMaterialId());
|
||||
if (material != null) {
|
||||
vo.setMaterialName(material.getMaterialName());
|
||||
vo.setSpec(material.getSpec());
|
||||
vo.setModel(material.getModel());
|
||||
vo.setUnit(material.getUnit());
|
||||
vo.setCurrentStock(material.getCurrentStock());
|
||||
}
|
||||
|
||||
// 计算已入库数量
|
||||
MatPurchaseInDetailBo detailBo = new MatPurchaseInDetailBo();
|
||||
detailBo.setPurchaseId(purchase.getPurchaseId());
|
||||
List<MatPurchaseInDetailVo> details = matPurchaseInDetailService.queryList(detailBo);
|
||||
|
||||
BigDecimal receivedTotal = details.stream()
|
||||
.map(MatPurchaseInDetailVo::getInNum)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
vo.setReceivedNum(receivedTotal);
|
||||
|
||||
// 根据采购单状态判断在途数量
|
||||
// 1-待入(在途) 2-已完成(全部入库) 3-已取消(归零) 4-部分入库
|
||||
if (purchase.getStatus() != null && (purchase.getStatus() == 1 || purchase.getStatus() == 4)) {
|
||||
// 在途或部分入库,计算未入库数量
|
||||
BigDecimal pending = purchase.getPlanNum().subtract(receivedTotal);
|
||||
if (pending.compareTo(BigDecimal.ZERO) > 0) {
|
||||
vo.setInTransitNum(pending);
|
||||
} else {
|
||||
vo.setInTransitNum(BigDecimal.ZERO);
|
||||
}
|
||||
} else {
|
||||
// 已完成或已取消,没有在途数量
|
||||
vo.setInTransitNum(BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
result.add(vo);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PurchasePlanMaterialInventoryVo> queryPurchasePlanMaterialInventory(Long purchaseId) {
|
||||
List<PurchasePlanMaterialInventoryVo> result = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user