Search in sources :

Example 1 with OperationTimes

use of com.qcadoo.mes.operationTimeCalculations.dto.OperationTimes in project mes by qcadoo.

the class OperationsCostCalculationServiceImpl method estimateCostCalculationForHourly.

private Map<String, BigDecimal> estimateCostCalculationForHourly(final EntityTreeNode calculationOperationComponent, final OperationTimesContainer realizationTimes, final boolean hourlyCostFromOperation, Entity costCalculation) {
    checkArgument(calculationOperationComponent != null, "given operationComponent is empty");
    Map<String, BigDecimal> costs = Maps.newHashMapWithExpectedSize(L_COST_KEYS.size());
    MathContext mathContext = numberService.getMathContext();
    for (String costKey : L_COST_KEYS) {
        costs.put(costKey, BigDecimal.ZERO);
    }
    for (EntityTreeNode child : calculationOperationComponent.getChildren()) {
        Map<String, BigDecimal> unitCosts = estimateCostCalculationForHourly(child, realizationTimes, hourlyCostFromOperation, costCalculation);
        for (String costKey : L_COST_KEYS) {
            BigDecimal unitCost = costs.get(costKey).add(unitCosts.get(costKey), mathContext);
            costs.put(costKey, numberService.setScaleWithDefaultMathContext(unitCost));
        }
    }
    OperationTimes operationTimes = realizationTimes.get(calculationOperationComponent.getBelongsToField(CalculationOperationComponentFields.TECHNOLOGY_OPERATION_COMPONENT).getId());
    Map<String, BigDecimal> costsForSingleOperation = estimateHourlyCostCalculationForSingleOperation(operationTimes, hourlyCostFromOperation, costCalculation);
    saveGeneratedValues(costsForSingleOperation, calculationOperationComponent, operationTimes.getTimes());
    costs.put(CalculationOperationComponentFields.MACHINE_HOURLY_COST, costs.get(CalculationOperationComponentFields.MACHINE_HOURLY_COST).add(costsForSingleOperation.get(CalculationOperationComponentFields.TOTAL_MACHINE_OPERATION_COST), mathContext));
    costs.put(CalculationOperationComponentFields.LABOR_HOURLY_COST, costs.get(CalculationOperationComponentFields.LABOR_HOURLY_COST).add(costsForSingleOperation.get(CalculationOperationComponentFields.TOTAL_LABOR_OPERATION_COST), mathContext));
    return costs;
}
Also used : OperationTimes(com.qcadoo.mes.operationTimeCalculations.dto.OperationTimes) EntityTreeNode(com.qcadoo.model.api.EntityTreeNode) BigDecimal(java.math.BigDecimal) MathContext(java.math.MathContext)

Example 2 with OperationTimes

use of com.qcadoo.mes.operationTimeCalculations.dto.OperationTimes in project mes by qcadoo.

the class OperationsCostCalculationServiceImpl method calculateOperationsCost.

@Override
public BigDecimal calculateOperationsCost(final Entity costCalculation, final Entity technology) {
    DataDefinition costCalculationDataDefinition = costCalculation.getDataDefinition();
    BigDecimal quantity = costCalculation.getDecimalField(CostCalculationFields.QUANTITY);
    ProductQuantitiesHolder productQuantitiesAndOperationRuns = getProductQuantitiesAndOperationRuns(technology, quantity, costCalculation);
    Entity copyCostCalculation = operationCostCalculationTreeBuilder.copyTechnologyTree(costCalculation, technology);
    Entity yetAnotherCostCalculation = costCalculationDataDefinition.save(copyCostCalculation);
    Entity newCostCalculation = costCalculationDataDefinition.get(yetAnotherCostCalculation.getId());
    EntityTree calculationOperationComponents = newCostCalculation.getTreeField(CostCalculationFields.CALCULATION_OPERATION_COMPONENTS);
    checkArgument(calculationOperationComponents != null, "given operation components is null");
    List<Entity> tocs = calculationOperationComponents.stream().map(e -> e.getBelongsToField(CalculationOperationComponentFields.TECHNOLOGY_OPERATION_COMPONENT)).collect(Collectors.toList());
    OperationTimesContainer operationTimes = operationWorkTimeService.estimateOperationsWorkTimes(tocs, productQuantitiesAndOperationRuns.getOperationRuns(), costCalculation.getBooleanField(CostCalculationFields.INCLUDE_TPZ), costCalculation.getBooleanField(CostCalculationFields.INCLUDE_ADDITIONAL_TIME), true);
    boolean hourlyCostFromOperation = !SourceOfOperationCosts.PARAMETERS.getStringValue().equals(costCalculation.getStringField(CostCalculationFields.SOURCE_OF_OPERATION_COSTS));
    Map<String, BigDecimal> resultsMap = estimateCostCalculationForHourly(calculationOperationComponents.getRoot(), operationTimes, hourlyCostFromOperation, costCalculation);
    costCalculation.setField(CostCalculationFields.CALCULATION_OPERATION_COMPONENTS, calculationOperationComponents);
    return BigDecimalUtils.convertNullToZero(numberService.setScaleWithDefaultMathContext(resultsMap.get(CalculationOperationComponentFields.MACHINE_HOURLY_COST))).add(BigDecimalUtils.convertNullToZero(numberService.setScaleWithDefaultMathContext(resultsMap.get(CalculationOperationComponentFields.LABOR_HOURLY_COST))), numberService.getMathContext());
}
Also used : OperationTimesContainer(com.qcadoo.mes.operationTimeCalculations.dto.OperationTimesContainer) TechnologyOperationComponentFieldsCNFO(com.qcadoo.mes.costNormsForOperation.constants.TechnologyOperationComponentFieldsCNFO) ProductQuantitiesHolder(com.qcadoo.mes.technologies.dto.ProductQuantitiesHolder) Autowired(org.springframework.beans.factory.annotation.Autowired) BigDecimalUtils(com.qcadoo.model.api.BigDecimalUtils) ProductQuantitiesWithComponentsService(com.qcadoo.mes.technologies.ProductQuantitiesWithComponentsService) BigDecimal(java.math.BigDecimal) CostCalculationFields(com.qcadoo.mes.costCalculation.constants.CostCalculationFields) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) PluginManager(com.qcadoo.plugin.api.PluginManager) Service(org.springframework.stereotype.Service) Map(java.util.Map) ProductQuantitiesService(com.qcadoo.mes.technologies.ProductQuantitiesService) MathContext(java.math.MathContext) Set(java.util.Set) CalculationOperationComponentFields(com.qcadoo.mes.costNormsForOperation.constants.CalculationOperationComponentFields) Collectors(java.util.stream.Collectors) Maps(com.google.common.collect.Maps) SourceOfOperationCosts(com.qcadoo.mes.costCalculation.constants.SourceOfOperationCosts) DataDefinition(com.qcadoo.model.api.DataDefinition) EntityTree(com.qcadoo.model.api.EntityTree) Sets(com.google.common.collect.Sets) OperationWorkTime(com.qcadoo.mes.operationTimeCalculations.OperationWorkTime) List(java.util.List) Entity(com.qcadoo.model.api.Entity) OperationTimes(com.qcadoo.mes.operationTimeCalculations.dto.OperationTimes) NumberService(com.qcadoo.model.api.NumberService) OperationWorkTimeService(com.qcadoo.mes.operationTimeCalculations.OperationWorkTimeService) OperationCostCalculationTreeBuilder(com.qcadoo.mes.operationCostCalculations.OperationCostCalculationTreeBuilder) EntityTreeNode(com.qcadoo.model.api.EntityTreeNode) Entity(com.qcadoo.model.api.Entity) ProductQuantitiesHolder(com.qcadoo.mes.technologies.dto.ProductQuantitiesHolder) OperationTimesContainer(com.qcadoo.mes.operationTimeCalculations.dto.OperationTimesContainer) DataDefinition(com.qcadoo.model.api.DataDefinition) EntityTree(com.qcadoo.model.api.EntityTree) BigDecimal(java.math.BigDecimal)

Aggregations

OperationTimes (com.qcadoo.mes.operationTimeCalculations.dto.OperationTimes)2 EntityTreeNode (com.qcadoo.model.api.EntityTreeNode)2 BigDecimal (java.math.BigDecimal)2 MathContext (java.math.MathContext)2 Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)1 Maps (com.google.common.collect.Maps)1 Sets (com.google.common.collect.Sets)1 CostCalculationFields (com.qcadoo.mes.costCalculation.constants.CostCalculationFields)1 SourceOfOperationCosts (com.qcadoo.mes.costCalculation.constants.SourceOfOperationCosts)1 CalculationOperationComponentFields (com.qcadoo.mes.costNormsForOperation.constants.CalculationOperationComponentFields)1 TechnologyOperationComponentFieldsCNFO (com.qcadoo.mes.costNormsForOperation.constants.TechnologyOperationComponentFieldsCNFO)1 OperationCostCalculationTreeBuilder (com.qcadoo.mes.operationCostCalculations.OperationCostCalculationTreeBuilder)1 OperationWorkTime (com.qcadoo.mes.operationTimeCalculations.OperationWorkTime)1 OperationWorkTimeService (com.qcadoo.mes.operationTimeCalculations.OperationWorkTimeService)1 OperationTimesContainer (com.qcadoo.mes.operationTimeCalculations.dto.OperationTimesContainer)1 ProductQuantitiesService (com.qcadoo.mes.technologies.ProductQuantitiesService)1 ProductQuantitiesWithComponentsService (com.qcadoo.mes.technologies.ProductQuantitiesWithComponentsService)1 ProductQuantitiesHolder (com.qcadoo.mes.technologies.dto.ProductQuantitiesHolder)1 BigDecimalUtils (com.qcadoo.model.api.BigDecimalUtils)1 DataDefinition (com.qcadoo.model.api.DataDefinition)1