private BigDecimal getQuantityCyclesNeededToProducedNextOperationAfterProducedQuantity(final Entity operationComponent, final BigDecimal nextOperationAfterProducedQuantity) { MathContext mc = numberService.getMathContext(); Entity technology = operationComponent.getBelongsToField("technology"); Map<Long, BigDecimal> operationRunsFromProductionQuantities = Maps.newHashMap(); OperationProductComponentWithQuantityContainer productQuantities = productQuantitiesService .getProductComponentQuantities(technology, BigDecimal.ONE, operationRunsFromProductionQuantities); BigDecimal operationsRunsForOneMainProduct = operationRunsFromProductionQuantities.get(operationComponent.getId()); BigDecimal quantityOutputProductProduced = productQuantities.get(getOutputProduct(operationComponent)); BigDecimal cycles = operationsRunsForOneMainProduct.multiply(nextOperationAfterProducedQuantity, mc).divide( quantityOutputProductProduced, mc); return numberService.setScaleWithDefaultMathContext(cycles); }
@Override public int evaluateSingleOperationTimeIncludedNextOperationAfterProducedQuantity(Entity operationComponent, final boolean includeTpz, final boolean includeAdditionalTime, final Map<Long, BigDecimal> operationRuns, final Entity productionLine, final boolean maxForWorkstation, final OperationProductComponentWithQuantityContainer productComponentQuantities) { operationComponent = operationComponent.getDataDefinition().get(operationComponent.getId()); BigDecimal cycles = BigDecimal.ONE; BigDecimal nextOperationAfterProducedQuantity = BigDecimalUtils.convertNullToZero(operationComponent .getDecimalField("nextOperationAfterProducedQuantity")); BigDecimal productComponentQuantity = productComponentQuantities.get(getOutputProduct(operationComponent)); Entity technologyOperationComponent = getTechnologyOperationComponent(operationComponent); if (nextOperationAfterProducedQuantity.compareTo(productComponentQuantity) != 1) { cycles = getQuantityCyclesNeededToProducedNextOperationAfterProducedQuantity(technologyOperationComponent, nextOperationAfterProducedQuantity); } else { cycles = operationRuns.get(technologyOperationComponent.getId()); } return evaluateOperationDurationOutOfCycles(cycles, operationComponent, productionLine, maxForWorkstation, includeTpz, includeAdditionalTime); }