Browse Source

2025-04-10

master
qiezi 9 months ago
parent
commit
f50b2af215
  1. 163
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java
  2. 23
      src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml

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

@ -60,6 +60,7 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
detail.setPartNo(part.getPartNo()); detail.setPartNo(part.getPartNo());
} }
} }
// 获取BOM信息
QuoteDetailBomTree bom = baseMapper.queryPartBom(detail); QuoteDetailBomTree bom = baseMapper.queryPartBom(detail);
if (Objects.isNull(bom)){ if (Objects.isNull(bom)){
return 0; return 0;
@ -69,6 +70,7 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
// 2通过Bom查询 Bom子物料 // 2通过Bom查询 Bom子物料
log.info("BOM信息:{}",bom); log.info("BOM信息:{}",bom);
save(bom); save(bom);
// 查BOM对应Routing
QuoteDetailRouting routing = baseMapper.queryPartBomRouting(detail); QuoteDetailRouting routing = baseMapper.queryPartBomRouting(detail);
if (Objects.nonNull(routing)) { if (Objects.nonNull(routing)) {
routing.setTreeId(bom.getId()); routing.setTreeId(bom.getId());
@ -76,50 +78,15 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
routing.setCreateDate(new Date()); routing.setCreateDate(new Date());
quoteDetailRoutingService.saveQuoteDetailRouting(routing); quoteDetailRoutingService.saveQuoteDetailRouting(routing);
} }
// 当为顶级BOM 需要插入对应Routing的工具信息
if (parentId.equals(0L)){ if (parentId.equals(0L)){
// 1清空工具信息
quoteDetailToolService.lambdaUpdate()
.eq(QuoteDetailTool::getQuoteDetailId, detail.getId())
.remove();
if (Objects.nonNull(routing)){
// 处理工具
// 2根据routing 生成工具信息
quoteDetailToolService.saveToolByRouting(routing);
// 3插入一条其他工具信息
quoteDetailToolService.saveQuoteDetailOtherTool(routing);
}else {
quoteDetailToolService.saveQuoteDetailOtherTool(detail);
}
handleTool(detail, routing);
} }
// 查询BOM的子物料
List<QuoteDetailBom> componentParts = baseMapper.queryBomComponentPart(bom); List<QuoteDetailBom> componentParts = baseMapper.queryBomComponentPart(bom);
// 判断BOM Type是否是Purse
// 判断BOM Type是否是Purse Purse 需要将自己当成自己的子物料,用于计算成本
if ("Purchase".equals(bom.getBomType())) { if ("Purchase".equals(bom.getBomType())) {
QuoteDetailBom purchase = new QuoteDetailBom();
purchase.setQuoteDetailId(detail.getId());
purchase.setQuoteId(detail.getQuoteId());
purchase.setQuoteDetailItemNo(detail.getItemNo());
purchase.setSite(detail.getSite());
purchase.setBuNo(detail.getBuNo());
purchase.setQuoteNo(detail.getQuoteNo());
purchase.setVersionNo(detail.getVersionNo());
purchase.setPartNo(bom.getPartNo());
purchase.setEngChgLevel(bom.getEngChgLevel());
purchase.setBomType(bom.getBomType());
purchase.setAlternativeNo(bom.getAlternativeNo());
purchase.setComponentPart(bom.getPartNo());
purchase.setPrintUnit(bom.getUmName());
purchase.setQtyPerAssembly(BigDecimal.ONE);
purchase.setComponentScrap(BigDecimal.ZERO);
purchase.setIssueType("");
purchase.setShrinkageFactor(BigDecimal.ZERO);
BigDecimal price = baseMapper.getPartCost(purchase.getSite(),purchase.getPartNo());
purchase.setUnitPrice(price);
purchase.setActualPrice(price);
purchase.setQuotePrice(price);
purchase.setLineSequence(componentParts.size()+1);
purchase.setBomFlag("N");
purchase.setStatus(bom.getStatus());
QuoteDetailBom purchase = getPurchaseComponentPart(detail, bom, componentParts.size()+1);
componentParts.add(purchase); componentParts.add(purchase);
} }
log.info("BOM子物料:{}",componentParts); log.info("BOM子物料:{}",componentParts);
@ -128,10 +95,6 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
component.setCreateBy(detail.getCreateBy()); component.setCreateBy(detail.getCreateBy());
component.setCreateDate(detail.getCreateDate()); component.setCreateDate(detail.getCreateDate());
QuoteDetail quoteDetail = createQuoteDetail(detail, component); QuoteDetail quoteDetail = createQuoteDetail(detail, component);
// 如过存在表示是Purchase
if (StringUtils.isEmpty(component.getBomFlag())){
component.setBomFlag("Y");
}
// 物料是半成品 // 物料是半成品
QuoteDetailBomTree bomTree = isComponentBom(quoteDetail); QuoteDetailBomTree bomTree = isComponentBom(quoteDetail);
if (Objects.nonNull(bomTree) && "Y".equals(component.getBomFlag())) { if (Objects.nonNull(bomTree) && "Y".equals(component.getBomFlag())) {
@ -145,39 +108,8 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
}else{ }else{
component.setBomFlag("N"); component.setBomFlag("N");
} }
if ("Y".equals(component.getStatus())){
// SysUserEntity user = (SysUserEntity)SecurityUtils.getSubject().getPrincipal();
// 获取用户信息
// SysUserEntity sysUser = sysUserService.getById(user.getUserId());
PartInformationEntity part = new PartInformationEntity();
part.setSite(component.getSite());
part.setPartNo(component.getComponentPart());
Map<String, String> map = baseSearchBean.getInventoryValueByPartNo(ifsServer.getIfsServer(ifsUsername,ifsPassword), part);
if (Objects.equals(map.get("resultCode"),"200")){
// 返回成功 将成本
InventoryPartUnitCostSumVo unitCostSumVo = JSONObject.parseObject(map.get("obj"), InventoryPartUnitCostSumVo.class);
try {
BigDecimal unitCost = new BigDecimal(unitCostSumVo.getInventoryValue());
component.setUnitPrice(unitCost);
component.setActualPrice(unitCost);
component.setQuotePrice(unitCost);
}catch (Exception e){
component.setUnitPrice(BigDecimal.ZERO);
component.setActualPrice(BigDecimal.ZERO);
component.setQuotePrice(BigDecimal.ZERO);
log.error("PartNo:{},Site:{},成本信息异常:{}",component.getPartNo(),component.getSite(),e.getMessage());
}
}else {
// 接口返回异常,处理成本数据为0
log.error("接口返回400");
component.setUnitPrice(BigDecimal.ZERO);
component.setActualPrice(BigDecimal.ZERO);
component.setQuotePrice(BigDecimal.ZERO);
String resultMsg = map.get("resultMsg");
if (resultMsg.contains("You have entered an invalid username and/or password")){
throw new RuntimeException(resultMsg);
}
}
if ("Y".equals(component.getStatus())) {
getFinalPartCost(component);
} }
//新增子物料信息 //新增子物料信息
component.setTreeId(bom.getId()); component.setTreeId(bom.getId());
@ -186,6 +118,83 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
return bom.getId(); return bom.getId();
} }
private void handleTool(QuoteDetail detail, QuoteDetailRouting routing) {
// 1清空工具信息
quoteDetailToolService.lambdaUpdate()
.eq(QuoteDetailTool::getQuoteDetailId, detail.getId())
.remove();
if (Objects.nonNull(routing)){
// 处理工具
// 2根据routing 生成工具信息
quoteDetailToolService.saveToolByRouting(routing);
// 3插入一条其他工具信息
quoteDetailToolService.saveQuoteDetailOtherTool(routing);
}else {
quoteDetailToolService.saveQuoteDetailOtherTool(detail);
}
}
private QuoteDetailBom getPurchaseComponentPart(QuoteDetail detail, QuoteDetailBomTree bom,Integer lineSequence ) {
QuoteDetailBom purchase = new QuoteDetailBom();
purchase.setQuoteDetailId(detail.getId());
purchase.setQuoteId(detail.getQuoteId());
purchase.setQuoteDetailItemNo(detail.getItemNo());
purchase.setSite(detail.getSite());
purchase.setBuNo(detail.getBuNo());
purchase.setQuoteNo(detail.getQuoteNo());
purchase.setVersionNo(detail.getVersionNo());
purchase.setPartNo(bom.getPartNo());
purchase.setEngChgLevel(bom.getEngChgLevel());
purchase.setBomType(bom.getBomType());
purchase.setAlternativeNo(bom.getAlternativeNo());
purchase.setComponentPart(bom.getPartNo());
purchase.setPrintUnit(bom.getUmName());
purchase.setQtyPerAssembly(BigDecimal.ONE);
purchase.setComponentScrap(BigDecimal.ZERO);
purchase.setIssueType("");
purchase.setShrinkageFactor(BigDecimal.ZERO);
BigDecimal price = baseMapper.getPartCost(purchase.getSite(),purchase.getPartNo());
purchase.setUnitPrice(price);
purchase.setActualPrice(price);
purchase.setQuotePrice(price);
purchase.setLineSequence(lineSequence);
purchase.setBomFlag("N");
purchase.setStatus(bom.getStatus());
return purchase;
}
private void getFinalPartCost(QuoteDetailBom component) {
PartInformationEntity part = new PartInformationEntity();
part.setSite(component.getSite());
part.setPartNo(component.getComponentPart());
Map<String, String> map = baseSearchBean.getInventoryValueByPartNo(ifsServer.getIfsServer(ifsUsername,ifsPassword), part);
if (Objects.equals(map.get("resultCode"),"200")){
// 返回成功 将成本
InventoryPartUnitCostSumVo unitCostSumVo = JSONObject.parseObject(map.get("obj"), InventoryPartUnitCostSumVo.class);
try {
BigDecimal unitCost = new BigDecimal(unitCostSumVo.getInventoryValue());
component.setUnitPrice(unitCost);
component.setActualPrice(unitCost);
component.setQuotePrice(unitCost);
}catch (Exception e){
component.setUnitPrice(BigDecimal.ZERO);
component.setActualPrice(BigDecimal.ZERO);
component.setQuotePrice(BigDecimal.ZERO);
log.error("PartNo:{},Site:{},成本信息异常:{}", component.getPartNo(), component.getSite(),e.getMessage());
}
}else {
// 接口返回异常,处理成本数据为0
log.error("接口返回400");
component.setUnitPrice(BigDecimal.ZERO);
component.setActualPrice(BigDecimal.ZERO);
component.setQuotePrice(BigDecimal.ZERO);
String resultMsg = map.get("resultMsg");
if (resultMsg.contains("You have entered an invalid username and/or password")){
throw new RuntimeException(resultMsg);
}
}
}
private QuoteDetailBomTree isComponentBom(QuoteDetail component) { private QuoteDetailBomTree isComponentBom(QuoteDetail component) {
// 根据子物料信息检查是否有BOM信息 // 根据子物料信息检查是否有BOM信息
return baseMapper.queryPartBom(component); return baseMapper.queryPartBom(component);

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

@ -69,7 +69,7 @@
<select id="queryBomComponentPart" resultType="com.spring.modules.quote.entity.QuoteDetailBom"> <select id="queryBomComponentPart" resultType="com.spring.modules.quote.entity.QuoteDetailBom">
select pbc.site, select pbc.site,
#{buNo} as bu_no,
#{buNo} as bu_no,
pbc.part_no, pbc.part_no,
pbc.eng_chg_level, pbc.eng_chg_level,
pbc.bom_type, pbc.bom_type,
@ -81,24 +81,25 @@
pbc.issue_type, pbc.issue_type,
pbc.shrinkage_factor, pbc.shrinkage_factor,
pbc.line_item_no, pbc.line_item_no,
pbc.operation_no as operation_id,
pbc.operation_no as operation_id,
pbc.issue_to_loc, pbc.issue_to_loc,
pbc.note_text, pbc.note_text,
pbc.create_date, pbc.create_date,
pbc.create_by, pbc.create_by,
pbc.line_sequence, pbc.line_sequence,
pbc.consumption_item, pbc.consumption_item,
dbo.get_part_unitCost(pbc.site, pbc.component_part) as unit_price,
dbo.get_part_unitCost(pbc.site, pbc.component_part) as unit_price,
dbo.get_part_unitCost(pbc.site, pbc.component_part) as actual_price, dbo.get_part_unitCost(pbc.site, pbc.component_part) as actual_price,
dbo.get_part_unitCost(pbc.site, pbc.component_part) as quote_price,
#{quoteId} as quote_id,
#{quoteNo} as quote_no,
#{quoteDetailId} as quote_detail_id,
#{quoteDetailItemNo} as quote_detail_item_no,
#{versionNo} as version_no,
p.status
dbo.get_part_unitCost(pbc.site, pbc.component_part) as quote_price,
#{quoteId} as quote_id,
#{quoteNo} as quote_no,
#{quoteDetailId} as quote_detail_id,
#{quoteDetailItemNo} as quote_detail_item_no,
#{versionNo} as version_no,
p.status,
'N' as bomFlag
from plm_bom_component pbc from plm_bom_component pbc
left join part p on p.site = pbc.site and p.part_no = pbc.component_part
left join part p on p.site = pbc.site and p.part_no = pbc.component_part
where pbc.site = #{site} where pbc.site = #{site}
and pbc.part_no = #{partNo} and pbc.part_no = #{partNo}
and pbc.bom_type = #{bomType} and pbc.bom_type = #{bomType}

Loading…
Cancel
Save