Browse Source

20240927

java8
qiezi 1 year ago
parent
commit
9923c32102
  1. 2
      src/main/java/com/xujie/sys/modules/quote/entity/QuoteDetailRouting.java
  2. 21
      src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java
  3. 11
      src/main/resources/mapper/quote/QuoteDetailRoutingMapper.xml

2
src/main/java/com/xujie/sys/modules/quote/entity/QuoteDetailRouting.java

@ -98,6 +98,8 @@ public class QuoteDetailRouting {
private BigDecimal workCenterCost;
private BigDecimal manuCost;
@TableField(exist = false)
private String partDesc;

21
src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java

@ -78,11 +78,14 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
BigDecimal laborCost = BigDecimal.ZERO;
if (Objects.nonNull(quoteDetailRouting.getLaborClassCost()) && quoteDetailRouting.getLaborClassCost().compareTo(BigDecimal.ZERO) > 0){
BigDecimal laborClassCost = quoteDetailRouting.getLaborClassCost();
if (Objects.isNull(quoteDetailRouting.getLaborCycleTime()) || quoteDetailRouting.getLaborCycleTime().compareTo(BigDecimal.ZERO) <= 0){
return setupCost.add(laborCost).setScale(4, RoundingMode.HALF_UP);
}
BigDecimal laborCycleTime = quoteDetailRouting.getLaborCycleTime();
BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor();
BigDecimal crewSize = quoteDetailRouting.getCrewSize();
// 人工生产时间/(效率*100)
BigDecimal needTime = laborCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP), 6, RoundingMode.HALF_UP);
BigDecimal needTime = laborCycleTime.multiply(efficiencyFactor.divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP));
laborCost = needTime.multiply(laborClassCost).multiply(crewSize);
}
return setupCost.add(laborCost).setScale(4, RoundingMode.HALF_UP);
@ -90,15 +93,18 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
private BigDecimal manufactureCost(QuoteDetailRouting quoteDetailRouting,BigDecimal qty){
BigDecimal setupCost = BigDecimal.ZERO;
if (Objects.nonNull(quoteDetailRouting.getWorkCenterCost()) && quoteDetailRouting.getWorkCenterCost().compareTo(BigDecimal.ZERO) > 0){
BigDecimal workCenterCost = quoteDetailRouting.getWorkCenterCost();
if (Objects.nonNull(quoteDetailRouting.getManuCost()) && quoteDetailRouting.getManuCost().compareTo(BigDecimal.ZERO) > 0){
BigDecimal manuCost = quoteDetailRouting.getManuCost();
BigDecimal setupTime = quoteDetailRouting.getMachSetupTime();
setupCost = workCenterCost.multiply(setupTime.divide(qty,6, RoundingMode.HALF_UP));
setupCost = manuCost.multiply(setupTime.divide(qty,6, RoundingMode.HALF_UP));
BigDecimal manufactureCost = BigDecimal.ZERO;
BigDecimal machCycleTime = quoteDetailRouting.getMachCycleTime();
if (Objects.isNull(quoteDetailRouting.getMachCycleTime()) || quoteDetailRouting.getMachCycleTime().compareTo(BigDecimal.ZERO) <= 0){
return setupCost.add(manufactureCost).setScale(4, RoundingMode.HALF_UP);
}
BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor();
manufactureCost = workCenterCost.multiply(machCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP),6, RoundingMode.HALF_UP).divide(qty,6, RoundingMode.HALF_UP));
manufactureCost = manuCost.multiply(machCycleTime.multiply(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP)));
setupCost = setupCost.add(manufactureCost);
}
return setupCost.setScale(4, RoundingMode.HALF_UP);
@ -113,8 +119,11 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
BigDecimal manufactureCost = BigDecimal.ZERO;
BigDecimal machCycleTime = quoteDetailRouting.getMachCycleTime();
if (Objects.isNull(quoteDetailRouting.getMachCycleTime()) || quoteDetailRouting.getMachCycleTime().compareTo(BigDecimal.ZERO) <= 0){
return setupCost.add(manufactureCost).setScale(4, RoundingMode.HALF_UP);
}
BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor();
manufactureCost = workCenterCost.multiply(machCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP),6, RoundingMode.HALF_UP).divide(qty,6, RoundingMode.HALF_UP));
manufactureCost = workCenterCost.multiply(machCycleTime.multiply(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP)));
setupCost = setupCost.add(manufactureCost);
}
return setupCost.setScale(4, RoundingMode.HALF_UP);

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

@ -11,7 +11,7 @@
labor_class_no, setup_labor_class_no, overlap, note_text, operation_id,
operation_name, create_by, create_date, tree_id, mach_cycle_time,
labor_cycle_time, resource_num, labor_class_cost, setup_labor_class_cost,
work_center_cost)
work_center_cost,manu_cost)
select #{quoteId},
#{quoteDetailId},
#{quoteDetailItemNo},
@ -49,7 +49,8 @@
dbo.get_work_center_resource_num(site, work_center_no),
dbo.get_labor_class_cost(site, bu_no, labor_class_no, #{quoteDate}),
dbo.get_labor_class_cost(site, bu_no, setup_labor_class_no, #{quoteDate}),
dbo.get_work_center_cost(site, bu_no, work_center_no, #{quoteDate}, 'D')
dbo.get_work_center_cost(site, bu_no, work_center_no, #{quoteDate}, 'A'),
dbo.get_work_center_cost(site, bu_no, work_center_no, #{quoteDate}, 'B')
from plm_routing_component
where part_no = #{partNo}
and routing_revision = #{routingRevision}
@ -104,7 +105,8 @@
qdr.resource_num,
qdr.labor_class_cost,
qdr.setup_labor_class_cost,
qdr.work_center_cost
qdr.work_center_cost,
qdr.manu_cost
from plm_quote_detail_routing qdr
left join part p on qdr.part_no = p.part_no and qdr.site = p.site
left join work_center wc
@ -159,7 +161,8 @@
qdr.resource_num,
qdr.labor_class_cost,
qdr.setup_labor_class_cost,
qdr.work_center_cost
qdr.work_center_cost,
qdr.manu_cost
from plm_quote_detail_routing qdr
left join part p on qdr.part_no = p.part_no and qdr.site = p.site
left join work_center wc

Loading…
Cancel
Save