Browse Source

2026-01-28

销售报价优化
master
fengyuan_yang 1 month ago
parent
commit
299da4e19c
  1. 8
      src/main/java/com/spring/modules/quote/service/QuoteDetailBomTreeService.java
  2. 5
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java
  3. 13
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java
  4. 9
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java

8
src/main/java/com/spring/modules/quote/service/QuoteDetailBomTreeService.java

@ -36,4 +36,12 @@ public interface QuoteDetailBomTreeService extends IService<QuoteDetailBomTree>
* @return 预估材料成本estimated_material_cost
*/
BigDecimal queryEstimatedMaterialCost(String site, String partNo);
/**
* 根据物料编码查询物料类型
* @param site 站点
* @param partNo 物料编码
* @return 物料类型Manufactured/Manufactured Recipe/Purchased/Purchased (raw)
*/
String queryPartType(String site, String partNo);
}

5
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java

@ -553,4 +553,9 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
return BigDecimal.ZERO;
}
}
@Override
public String queryPartType(String site, String partNo) {
return baseMapper.queryPartType(site, partNo);
}
}

13
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java

@ -40,6 +40,19 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
@Override
public List<QuoteDetailRouting> queryQuoteDetailRouting(QuoteDetailRouting quoteDetailRouting) {
QuoteDetail detail = quoteDetailService.getById(quoteDetailRouting.getQuoteDetailId());
// 查询当前节点的物料类型如果是采购件则不显示Routing脏数据过滤
if (Objects.nonNull(quoteDetailRouting.getTreeId())) {
QuoteDetailBomTree bomTree = quoteDetailBomTreeService.getById(quoteDetailRouting.getTreeId());
if (Objects.nonNull(bomTree)) {
String partType = quoteDetailBomTreeService.queryPartType(bomTree.getSite(), bomTree.getPartNo());
// 只有Manufactured或Manufactured Recipe类型的物料才显示Routing
if (!"Manufactured".equals(partType) && !"Manufactured Recipe".equals(partType)) {
return new java.util.ArrayList<>();
}
}
}
if (Objects.nonNull(quoteDetailRouting.getIsAllRouting()) && quoteDetailRouting.getIsAllRouting()) {
List<Long> ids = quoteDetailBomTreeService.getAllChildIds(detail, quoteDetailRouting.getTreeId());
ids.add(quoteDetailRouting.getTreeId());

9
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java

@ -258,16 +258,23 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
if (Long.valueOf(0L).equals(bomTree.getParentId())){
treeId = bomTree.getId();
}
// 查询物料类型只有Manufactured或Manufactured Recipe类型的物料才计算Routing成本
String partType = quoteDetailBomTreeService.queryPartType(bomTree.getSite(), bomTree.getPartNo());
boolean isManufacturedPart = "Manufactured".equals(partType) || "Manufactured Recipe".equals(partType);
// 计算具体人工成本
List<QuoteDetailRouting> routings = Optional.ofNullable(routingMap.get(bomTree.getId())).orElse(new ArrayList<>());
BigDecimal bomLabourCost = BigDecimal.ZERO;
BigDecimal bomMachineCost = BigDecimal.ZERO;
// 获得 BomTree的 人工和制造成本
// 获得 BomTree的 人工和制造成本仅Manufactured或Manufactured Recipe类型的物料
if (isManufacturedPart) {
for (QuoteDetailRouting routing : routings) {
bomLabourCost = bomLabourCost.add(routing.getTotalLaborCost());
bomMachineCost = bomMachineCost.add(routing.getTotalMachCost());
}
}
// BomTree的物料成本
List<QuoteDetailBom> boms = Optional.ofNullable(bomMap.get(bomTree.getId())).orElse(new ArrayList<>());
BigDecimal bomQuotePrice = BigDecimal.ZERO;

Loading…
Cancel
Save