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")
|
@ExcelProperty(value = "供应商ID")
|
||||||
private Long supplierId;
|
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.enums.PurchaseOrderStatus;
|
||||||
import com.klp.erp.domain.bo.ErpPurchaseOrderBo;
|
import com.klp.erp.domain.bo.ErpPurchaseOrderBo;
|
||||||
import com.klp.erp.domain.vo.ErpPurchaseOrderVo;
|
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.ErpPurchaseOrderItemMapper;
|
||||||
import com.klp.erp.mapper.ErpPurchaseOrderMapper;
|
import com.klp.erp.mapper.ErpPurchaseOrderMapper;
|
||||||
import com.klp.erp.mapper.ErpPurchaseReceiptMapper;
|
import com.klp.erp.mapper.ErpPurchaseReceiptMapper;
|
||||||
import com.klp.erp.mapper.ErpPurchaseReturnItemMapper;
|
import com.klp.erp.mapper.ErpPurchaseReturnItemMapper;
|
||||||
|
import com.klp.erp.mapper.ErpSupplierMapper;
|
||||||
import com.klp.erp.service.IErpPurchaseOrderService;
|
import com.klp.erp.service.IErpPurchaseOrderService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -25,6 +27,8 @@ import java.math.BigDecimal;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购订单主Service业务层处理
|
* 采购订单主Service业务层处理
|
||||||
@@ -40,6 +44,7 @@ public class ErpPurchaseOrderServiceImpl implements IErpPurchaseOrderService {
|
|||||||
private final ErpPurchaseOrderItemMapper orderItemMapper;
|
private final ErpPurchaseOrderItemMapper orderItemMapper;
|
||||||
private final ErpPurchaseReceiptMapper receiptMapper;
|
private final ErpPurchaseReceiptMapper receiptMapper;
|
||||||
private final ErpPurchaseReturnItemMapper returnItemMapper;
|
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) {
|
public TableDataInfo<ErpPurchaseOrderVo> queryPageList(ErpPurchaseOrderBo bo, PageQuery pageQuery) {
|
||||||
LambdaQueryWrapper<ErpPurchaseOrder> lqw = buildQueryWrapper(bo);
|
LambdaQueryWrapper<ErpPurchaseOrder> lqw = buildQueryWrapper(bo);
|
||||||
Page<ErpPurchaseOrderVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
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);
|
return TableDataInfo.build(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user