diff --git a/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java b/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java index 44f8f84d..1c66d979 100644 --- a/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java @@ -75,8 +75,7 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl= bomTree.getLevel()){ + if (tree.getLevel() > bomTree.getLevel() || tree.getParentId().equals(0L)){ continue; } - List boms = quoteDetailBomService.lambdaQuery().eq(QuoteDetailBom::getTreeId, tree.getParentId()).eq(QuoteDetailBom::getComponentPart, tree.getPartNo()).list(); - for (QuoteDetailBom bom : boms) { - usage = usage.multiply(bom.getQtyPerAssembly()); + if (!tree.getParentId().equals(id)){ + List boms = quoteDetailBomService.lambdaQuery().eq(QuoteDetailBom::getTreeId, tree.getParentId()).eq(QuoteDetailBom::getComponentPart, tree.getPartNo()).list(); + BigDecimal qtyPerAssembly = BigDecimal.ZERO; + for (QuoteDetailBom bom : boms) { + qtyPerAssembly = qtyPerAssembly.add(bom.getQtyPerAssembly()); + } + log.info("在BOM:{} 作为子料 单位用量{}",tree.getPartNo(),qtyPerAssembly); + usage = usage.multiply(qtyPerAssembly); } - if (Objects.isNull(tree.getYield()) || tree.getYield().compareTo(BigDecimal.ZERO) == 0){ + if (Objects.isNull(tree.getYield()) || tree.getYield().compareTo(BigDecimal.ZERO) == 0 || tree.getId().equals(bomTree.getId())){ + log.info("在BOM:{} 作为子料 报废率为空",tree.getPartNo()); continue; } - yield = yield.divide(tree.getYield().divide(BigDecimal.valueOf(100),6,RoundingMode.HALF_UP),6,RoundingMode.HALF_UP); + BigDecimal bomYield = tree.getYield().divide(BigDecimal.valueOf(100),6,RoundingMode.HALF_UP); + log.info("在BOM:{} 作为子料 报废率{}",tree.getPartNo(),bomYield); + yield = yield.multiply(bomYield); } cost1 = cost1.multiply(usage); cost1 = cost1.divide(yield,6,RoundingMode.HALF_UP); - + log.info("BOM:{},cost:{}",bomTree.getPartNo(),cost1); labourCost = labourCost.add(cost1); } @@ -310,23 +320,25 @@ public class QuoteDetailServiceImpl extends ServiceImpl bomList = quoteDetailBomService.lambdaQuery() - .eq(QuoteDetailBom::getTreeId, tree.getId()) - .list(); - BigDecimal bomUnYield = new BigDecimal(0); + QuoteDetailBom detailBom = new QuoteDetailBom(); + detailBom.setQuoteDetailId(tree.getQuoteDetailId()); + detailBom.setTreeId(tree.getId()); + List bomList = quoteDetailBomService.queryQuoteDetailBom(detailBom); + // BomUnYield + BigDecimal bomUnYield = BigDecimal.ZERO; for (QuoteDetailBom bom : bomList) { - bomUnYield = bomUnYield.add(bom.getQtyPerAssembly()); + bomUnYield = bomUnYield.add(bom.getActualQuotePrice()); } - // BomUnYield BigDecimal bomYield = null; if (bomUnYield.compareTo(BigDecimal.ZERO) != 0 && Objects.nonNull(yieldRate) && yieldRate.compareTo(BigDecimal.ZERO) != 0) { - bomYield = bomUnYield.divide(yieldRate, 6, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); + bomYield = bomUnYield.divide(yieldRate, 6, RoundingMode.HALF_UP).divide(BigDecimal.valueOf(100),6,RoundingMode.HALF_UP); } // ProcessTime - BigDecimal processTime = new BigDecimal(0); + BigDecimal processTime = BigDecimal.ZERO; List routingList = quoteDetailRoutingService.lambdaQuery().eq(QuoteDetailRouting::getTreeId, tree.getId()).list(); for (QuoteDetailRouting quoteDetailRouting : routingList) { - processTime = processTime.add(quoteDetailRouting.getLaborCycleTime()); + BigDecimal laborCycleTime = quoteDetailRouting.getLaborCycleTime(); + processTime = processTime.add(Objects.isNull(laborCycleTime)?BigDecimal.ZERO:laborCycleTime); } tree.setYield(yieldRate); tree.setBomUnYield(bomUnYield); diff --git a/src/main/resources/mapper/part/PartInformationMapper.xml b/src/main/resources/mapper/part/PartInformationMapper.xml index 50014009..8253477b 100644 --- a/src/main/resources/mapper/part/PartInformationMapper.xml +++ b/src/main/resources/mapper/part/PartInformationMapper.xml @@ -33,7 +33,11 @@ dbo.get_code_desc(site, sourceBu, code_no, 'IP') as codeDesc, dbo.get_bu_desc(site, sourceBu) as buDesc, update_by, - update_date + update_date, + standard_cost, + standard_cost_currency, + actual_cost, + actual_cost_currency FROM part site in (select site from eam_access_site where username = #{query.userName}) diff --git a/src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml b/src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml index 01e31ad7..219c5523 100644 --- a/src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml +++ b/src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml @@ -64,7 +64,6 @@ select d.yield_rate from plm_quote_detail_bom_tree t left join part p on t.part_no = p.part_no and p.site = t.site - left join part_product_group d on p.site = d.site and p.OtherGroup2 = d.product_group_id + left join part_product_group d on p.site = d.site and p.product_group_id2 = d.product_group_id where t.site = #{site} and quote_id = #{quoteId} and quote_detail_id = #{quoteDetailId} and t.part_no = #{partNo}