Browse Source

20241112

java8
qiezi 2 years ago
parent
commit
ba42dfbabd
  1. 13
      src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java
  2. 44
      src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailServiceImpl.java
  3. 6
      src/main/resources/mapper/part/PartInformationMapper.xml
  4. 3
      src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml

13
src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java

@ -75,8 +75,7 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
BigDecimal componentUnitScrap = componentScrap.divide(qty,4, RoundingMode.HALF_UP); BigDecimal componentUnitScrap = componentScrap.divide(qty,4, RoundingMode.HALF_UP);
BigDecimal needQty =
qtyPerAssembly.divide(shrinkageFactor.divide(BigDecimal.valueOf(100),4, RoundingMode.HALF_UP),4, RoundingMode.HALF_UP)
BigDecimal needQty = qtyPerAssembly.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100),4, RoundingMode.HALF_UP)),4, RoundingMode.HALF_UP)
.add(componentUnitScrap); .add(componentUnitScrap);
return needQty.multiply(unitPrice).setScale(4, RoundingMode.HALF_UP); return needQty.multiply(unitPrice).setScale(4, RoundingMode.HALF_UP);
@ -100,9 +99,8 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
BigDecimal componentUnitScrap = componentScrap.divide(qty,4, RoundingMode.HALF_UP); BigDecimal componentUnitScrap = componentScrap.divide(qty,4, RoundingMode.HALF_UP);
BigDecimal needQty =
qtyPerAssembly.divide(shrinkageFactor.divide(BigDecimal.valueOf(100),4, RoundingMode.HALF_UP),4, RoundingMode.HALF_UP)
.add(componentUnitScrap);
BigDecimal needQty = qtyPerAssembly.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100),4, RoundingMode.HALF_UP)),4, RoundingMode.HALF_UP)
.add(componentUnitScrap);
return needQty.multiply(actualPrice).setScale(4, RoundingMode.HALF_UP); return needQty.multiply(actualPrice).setScale(4, RoundingMode.HALF_UP);
} }
@ -125,9 +123,8 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
BigDecimal componentUnitScrap = componentScrap.divide(qty,4, RoundingMode.HALF_UP); BigDecimal componentUnitScrap = componentScrap.divide(qty,4, RoundingMode.HALF_UP);
BigDecimal needQty =
qtyPerAssembly.divide(shrinkageFactor.divide(BigDecimal.valueOf(100),4, RoundingMode.HALF_UP),4, RoundingMode.HALF_UP)
.add(componentUnitScrap);
BigDecimal needQty = qtyPerAssembly.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100),4, RoundingMode.HALF_UP)),4, RoundingMode.HALF_UP)
.add(componentUnitScrap);
return needQty.multiply(quotePrice).setScale(4, RoundingMode.HALF_UP); return needQty.multiply(quotePrice).setScale(4, RoundingMode.HALF_UP);
} }

44
src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailServiceImpl.java

@ -167,6 +167,7 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
.list(); .list();
// 计算 // 计算
updateQuoteDetailBomTree(list); updateQuoteDetailBomTree(list);
Long id = list.get(list.size() - 1).getId();
// 开始计算 Routing // 开始计算 Routing
for (QuoteDetailBomTree bomTree : list) { for (QuoteDetailBomTree bomTree : list) {
if (bomTree.getParentId().equals(0L)){ if (bomTree.getParentId().equals(0L)){
@ -180,22 +181,31 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
} }
BigDecimal usage = BigDecimal.ONE; BigDecimal usage = BigDecimal.ONE;
BigDecimal yield = BigDecimal.ONE; BigDecimal yield = BigDecimal.ONE;
log.info("当前BOM:{}",bomTree.getPartNo());
for (QuoteDetailBomTree tree : list) { for (QuoteDetailBomTree tree : list) {
if (tree.getLevel() >= bomTree.getLevel()){
if (tree.getLevel() > bomTree.getLevel() || tree.getParentId().equals(0L)){
continue; continue;
} }
List<QuoteDetailBom> 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<QuoteDetailBom> 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; 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.multiply(usage);
cost1 = cost1.divide(yield,6,RoundingMode.HALF_UP); cost1 = cost1.divide(yield,6,RoundingMode.HALF_UP);
log.info("BOM:{},cost:{}",bomTree.getPartNo(),cost1);
labourCost = labourCost.add(cost1); labourCost = labourCost.add(cost1);
} }
@ -310,23 +320,25 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
BigDecimal yieldRate = quoteDetailBomTreeService.queryYieldRate(tree); BigDecimal yieldRate = quoteDetailBomTreeService.queryYieldRate(tree);
// 获取Bom unYield // 获取Bom unYield
// 1查询 当前tree的物料 // 1查询 当前tree的物料
List<QuoteDetailBom> 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<QuoteDetailBom> bomList = quoteDetailBomService.queryQuoteDetailBom(detailBom);
// BomUnYield
BigDecimal bomUnYield = BigDecimal.ZERO;
for (QuoteDetailBom bom : bomList) { for (QuoteDetailBom bom : bomList) {
bomUnYield = bomUnYield.add(bom.getQtyPerAssembly());
bomUnYield = bomUnYield.add(bom.getActualQuotePrice());
} }
// BomUnYield
BigDecimal bomYield = null; BigDecimal bomYield = null;
if (bomUnYield.compareTo(BigDecimal.ZERO) != 0 && Objects.nonNull(yieldRate) && yieldRate.compareTo(BigDecimal.ZERO) != 0) { 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 // ProcessTime
BigDecimal processTime = new BigDecimal(0);
BigDecimal processTime = BigDecimal.ZERO;
List<QuoteDetailRouting> routingList = quoteDetailRoutingService.lambdaQuery().eq(QuoteDetailRouting::getTreeId, tree.getId()).list(); List<QuoteDetailRouting> routingList = quoteDetailRoutingService.lambdaQuery().eq(QuoteDetailRouting::getTreeId, tree.getId()).list();
for (QuoteDetailRouting quoteDetailRouting : routingList) { 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.setYield(yieldRate);
tree.setBomUnYield(bomUnYield); tree.setBomUnYield(bomUnYield);

6
src/main/resources/mapper/part/PartInformationMapper.xml

@ -33,7 +33,11 @@
dbo.get_code_desc(site, sourceBu, code_no, 'IP') as codeDesc, dbo.get_code_desc(site, sourceBu, code_no, 'IP') as codeDesc,
dbo.get_bu_desc(site, sourceBu) as buDesc, dbo.get_bu_desc(site, sourceBu) as buDesc,
update_by, update_by,
update_date
update_date,
standard_cost,
standard_cost_currency,
actual_cost,
actual_cost_currency
FROM part FROM part
<where> <where>
site in (select site from eam_access_site where username = #{query.userName}) site in (select site from eam_access_site where username = #{query.userName})

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

@ -64,7 +64,6 @@
<select id="queryBomComponentPart" resultType="com.xujie.sys.modules.quote.entity.QuoteDetailBom"> <select id="queryBomComponentPart" resultType="com.xujie.sys.modules.quote.entity.QuoteDetailBom">
select site, select site,
#{buNo} as bu_no, #{buNo} as bu_no,
part_no, part_no,
eng_chg_level, eng_chg_level,
bom_type, bom_type,
@ -177,7 +176,7 @@
<select id="queryYieldRate" resultType="java.math.BigDecimal"> <select id="queryYieldRate" resultType="java.math.BigDecimal">
select d.yield_rate from plm_quote_detail_bom_tree t 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 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} where t.site = #{site} and quote_id = #{quoteId} and quote_detail_id = #{quoteDetailId} and t.part_no = #{partNo}
</select> </select>
</mapper> </mapper>
Loading…
Cancel
Save