Browse Source

2025-12-15

1、报价取子物料(半成品)BOM时按子物料的物料类型来取BOM,顶级物料固定"Manufacturing";
2、如果BOM类型是 Purchase,且没有子物料时,将物料自身添加为子物料;
master
fengyuan_yang 4 weeks ago
parent
commit
08703dd053
  1. 8
      src/main/java/com/spring/modules/quote/mapper/QuoteDetailBomTreeMapper.java
  2. 15
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java
  3. 11
      src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml

8
src/main/java/com/spring/modules/quote/mapper/QuoteDetailBomTreeMapper.java

@ -31,4 +31,12 @@ public interface QuoteDetailBomTreeMapper extends BaseMapper<QuoteDetailBomTree>
PartInformationEntity queryPart(@Param("site") String site,@Param("partNo") String partNo);
PartInformationEntity queryPLMPart(@Param("site") String site,@Param("partNo") String partNo);
/**
* 根据物料编码查询物料类型
* @param site 站点
* @param partNo 物料编码
* @return 物料类型Manufactured/Manufactured Recipe/Purchased等
*/
String queryPartType(@Param("site") String site, @Param("partNo") String partNo);
}

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

@ -72,13 +72,22 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
// 1通过PartNoSite和BuNo 查询BOM信息 失效日期日期为空 替代为* 和Routing (存在BOM的物料)
if (parentId.equals(0L)){
// 顶级物料强制使用 Manufacturing 类型
detail.setBomType("Manufacturing");
}else {
// 最上级已经是正式料号,需要判断其他是否是正式料号
// 子物料根据物料类型来确定BOM类型
PartInformationEntity part = baseMapper.queryPart(detail.getSite(),detail.getPartNo());
if (Objects.nonNull(part) && "Y".equals(part.getStatus())){
detail.setPartNo(part.getPartNo());
}
// 查询物料类型根据物料类型设置BOM类型
String partType = baseMapper.queryPartType(detail.getSite(), detail.getPartNo());
if ("Manufactured".equals(partType) || "Manufactured Recipe".equals(partType)) {
detail.setBomType("Manufacturing");
} else if ("Purchased".equals(partType)) {
detail.setBomType("Purchase");
}
log.info("子物料 {} 的物料类型为 {},BOM类型设置为 {}", detail.getPartNo(), partType, detail.getBomType());
}
// 获取BOM信息
QuoteDetailBomTree bom = baseMapper.queryPartBom(detail);
@ -104,8 +113,8 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
}
// 查询BOM的子物料
List<QuoteDetailBom> componentParts = baseMapper.queryBomComponentPart(bom);
// 判断BOM Type是否是Purse Purse 需要将自己当成自己的子物料,用于计算成本
if ("Purchase".equals(bom.getBomType())) {
// 判断BOM Type是否是Purchase且没有子物料时需要将自己当成自己的子物料,用于计算成本
if ("Purchase".equals(bom.getBomType()) && componentParts.isEmpty()) {
QuoteDetailBom purchase = getPurchaseComponentPart(detail, bom, componentParts.size()+1);
componentParts.add(purchase);
}

11
src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml

@ -184,12 +184,21 @@
select top 1 site,
part_no,
status,
ifs_part_no
ifs_part_no,
part_type
from part p
where p.site = #{site}
and p.plm_part_no = #{partNo}
and temporary_part_flag != 'Y'
</select>
<!-- 根据物料编码查询物料类型 -->
<select id="queryPartType" resultType="java.lang.String">
select top 1 part_type
from part p
where p.site = #{site}
and p.part_no = #{partNo}
</select>
<select id="queryPLMPart" resultType="com.spring.modules.part.entity.PartInformationEntity">
select top 1 site,

Loading…
Cancel
Save