feat(purchase): 添加采购订单供应商名称显示功能
- 引入 ErpSupplierVo 和 ErpSupplierMapper 依赖 - 在采购订单查询接口中批量获取供应商信息 - 通过流式处理构建供应商ID到名称的映射关系 - 将供应商名称动态设置到采购订单VO对象中 - 实现供应商名称的批量查询优化避免N+1问题
This commit is contained in:
@@ -39,6 +39,11 @@ public class ErpPurchaseOrderVo implements Serializable {
|
||||
@ExcelProperty(value = "供应商ID")
|
||||
private Long supplierId;
|
||||
|
||||
/**
|
||||
* 供应商名称
|
||||
*/
|
||||
private String supplierName;
|
||||
|
||||
/**
|
||||
* 下单日期
|
||||
*/
|
||||
|
||||
@@ -13,10 +13,12 @@ import com.klp.erp.domain.ErpPurchaseOrderItem;
|
||||
import com.klp.erp.enums.PurchaseOrderStatus;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseOrderBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseOrderVo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierVo;
|
||||
import com.klp.erp.mapper.ErpPurchaseOrderItemMapper;
|
||||
import com.klp.erp.mapper.ErpPurchaseOrderMapper;
|
||||
import com.klp.erp.mapper.ErpPurchaseReceiptMapper;
|
||||
import com.klp.erp.mapper.ErpPurchaseReturnItemMapper;
|
||||
import com.klp.erp.mapper.ErpSupplierMapper;
|
||||
import com.klp.erp.service.IErpPurchaseOrderService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -25,6 +27,8 @@ import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 采购订单主Service业务层处理
|
||||
@@ -40,6 +44,7 @@ public class ErpPurchaseOrderServiceImpl implements IErpPurchaseOrderService {
|
||||
private final ErpPurchaseOrderItemMapper orderItemMapper;
|
||||
private final ErpPurchaseReceiptMapper receiptMapper;
|
||||
private final ErpPurchaseReturnItemMapper returnItemMapper;
|
||||
private final ErpSupplierMapper supplierMapper;
|
||||
|
||||
/**
|
||||
* 查询采购订单主
|
||||
@@ -56,6 +61,37 @@ public class ErpPurchaseOrderServiceImpl implements IErpPurchaseOrderService {
|
||||
public TableDataInfo<ErpPurchaseOrderVo> queryPageList(ErpPurchaseOrderBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<ErpPurchaseOrder> lqw = buildQueryWrapper(bo);
|
||||
Page<ErpPurchaseOrderVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
|
||||
// 批量查询供应商名称并映射
|
||||
if (result.getRecords() != null && !result.getRecords().isEmpty()) {
|
||||
// 收集所有供应商ID
|
||||
List<Long> supplierIds = result.getRecords().stream()
|
||||
.map(ErpPurchaseOrderVo::getSupplierId)
|
||||
.filter(id -> id != null)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!supplierIds.isEmpty()) {
|
||||
// 批量查询供应商信息
|
||||
List<ErpSupplierVo> suppliers = supplierMapper.selectVoBatchIds(supplierIds);
|
||||
|
||||
// 构建供应商ID到名称的映射
|
||||
Map<Long, String> supplierNameMap = suppliers.stream()
|
||||
.collect(Collectors.toMap(
|
||||
ErpSupplierVo::getSupplierId,
|
||||
ErpSupplierVo::getName,
|
||||
(existing, replacement) -> existing // 处理重复key的情况
|
||||
));
|
||||
|
||||
// 将供应商名称设置到采购订单VO中
|
||||
result.getRecords().forEach(order -> {
|
||||
if (order.getSupplierId() != null) {
|
||||
order.setSupplierName(supplierNameMap.get(order.getSupplierId()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user