public static SearchProjection buildProjectionForProduct(final String prefix) { return list().add(fieldProj(prefix, "id", PRODUCT_ID)) .add(fieldProj(prefix, ProductFieldsCNFP.COST_FOR_NUMBER, COST_FOR_NUMBER)) .add(fieldProj(prefix, ProductFieldsCNFP.NOMINAL_COST, NOMINAL_COST)) .add(fieldProj(prefix, ProductFieldsCNFP.LAST_PURCHASE_COST, LAST_PURCHASE_COST)) .add(fieldProj(prefix, ProductFieldsCNFP.AVERAGE_COST, AVERAGE_COST)); }
private SearchProjection buildProjection() { SearchProjection lineIdProjection = alias(field(OrderFields.PRODUCTION_LINE + ".id"), PRODUCTION_LINE_ID_ALIAS); SearchProjection dateFromProjection = alias(field(OrderFields.START_DATE), DATE_FROM_ALIAS); SearchProjection dateToProjection = alias(field(OrderFields.FINISH_DATE), DATE_TO_ALIAS); SearchProjection technologyId = alias(field(OrderFields.TECHNOLOGY + ".id"), TECHNOLOGY_ID_ALIAS); SearchProjection technologyGroupId = alias( field(OrderFields.TECHNOLOGY + "." + TechnologyFields.TECHNOLOGY_GROUP + ".id"), TECHNOLOGY_GROUP_ID_ALIAS); SearchProjection ownChangeoverDurationProjection = alias(field(OrderFieldsLCNFO.OWN_LINE_CHANGEOVER_DURATION), OrderFieldsLCNFO.OWN_LINE_CHANGEOVER_DURATION); return SearchProjections.list().add(dateFromProjection).add(dateToProjection).add(lineIdProjection).add(technologyId) .add(technologyGroupId).add(ownChangeoverDurationProjection); }
private static SearchProjection buildProjection() { SearchProjectionList projection = SearchProjections.list(); projection.add(alias(field(ORDER_ALIAS + DOT_ID), ORDER_ID_ALIAS)); projection.add(alias(field(ORDER_ALIAS + DOT + OrderFields.NUMBER), ORDER_NUMBER_ALIAS)); projection.add(alias(field(OPERATION_ALIAS + DOT_ID), OPERATION_ID_ALIAS)); projection.add(alias(field(OPERATION_ALIAS + DOT + OperationFields.NUMBER), OPERATION_NUMBER_ALIAS)); projection.add(alias(field(PRODUCT_ALIAS + DOT_ID), PRODUCT_ID_ALIAS)); projection.add(alias(field(PRODUCT_ALIAS + DOT + ProductFields.NUMBER), PRODUCT_NUMBER_ALIAS)); projection.add(alias(field(PRODUCT_ALIAS + DOT + ProductFields.UNIT), PRODUCT_UNIT_ALIAS)); projection .add(alias(field(TOC_ALIAS + DOT + TechnologyOperationComponentFields.NODE_NUMBER), OPERATION_NODE_NUMBER_ALIAS)); projection.add(alias(field(SHIFT_ALIAS + DOT_ID), SHIFT_ID_ALIAS)); projection.add(alias(field(SHIFT_ALIAS + DOT + ShiftFields.NAME), SHIFT_NAME_ALIAS)); projection.add(alias(field(RECORD_ALIAS + DOT + ProductionTrackingFields.SHIFT_START_DAY), SHIFT_START_DAY_ALIAS)); projection.add(alias(field(TrackingOperationProductOutComponentFields.USED_QUANTITY), QUANTITY_ALIAS)); return projection; }
public BigDecimal sumBelongingOrdersPlannedQuantities(final Entity masterOrder, final Entity product) { SearchProjection quantitiesSumProjection = list().add(alias(sum(OrderFields.PLANNED_QUANTITY), QUANTITIES_SUM_ALIAS)) .add(rowCount()); SearchCriterion productCriterion = belongsTo(OrderFields.PRODUCT, product); List<Entity> quantitiesSumProjectionResults = findBelongingOrders(masterOrder, quantitiesSumProjection, productCriterion, SearchOrders.desc(QUANTITIES_SUM_ALIAS)); for (Entity entity : quantitiesSumProjectionResults) { return entity.getDecimalField(QUANTITIES_SUM_ALIAS); } return BigDecimal.ZERO; }
public BigDecimal sumBelongingOrdersDoneQuantities(final Entity masterOrder, final Entity product) { SearchProjection quantitiesSumProjection = list().add(alias(sum(OrderFields.DONE_QUANTITY), QUANTITIES_SUM_ALIAS)) .add(rowCount()); SearchCriterion productCriterion = belongsTo(OrderFields.PRODUCT, product); List<Entity> quantitiesSumProjectionResults = findBelongingOrders(masterOrder, quantitiesSumProjection, productCriterion, SearchOrders.desc(QUANTITIES_SUM_ALIAS)); for (Entity entity : quantitiesSumProjectionResults) { return entity.getDecimalField(QUANTITIES_SUM_ALIAS); } return BigDecimal.ZERO; } }
public BigDecimal countSumOfQuantities(final Entity pps, boolean corrected) { Set<Long> pfdIds = Sets.newHashSet(); Entity ppsDB = pps.getDataDefinition().get(pps.getId()); if (corrected) { pfdIds = ppsDB.getHasManyField(ProductionPerShiftFields.PROGRES_FOR_DAYS).stream() .filter(pfd -> pfd.getBooleanField(ProgressForDayFields.CORRECTED)).map(pfdf -> pfdf.getId()) .collect(Collectors.toSet()); } else { pfdIds = ppsDB.getHasManyField(ProductionPerShiftFields.PROGRES_FOR_DAYS).stream() .filter(pfd -> !pfd.getBooleanField(ProgressForDayFields.CORRECTED)).map(pfdf -> pfdf.getId()) .collect(Collectors.toSet()); } if (pfdIds.isEmpty()) { return BigDecimal.ZERO; } SearchProjectionList projectionList = list(); projectionList.add(alias(sum(DAILY_PROGRESS_ALIAS + DOT + DailyProgressFields.QUANTITY), QUANTITY_SUM_PROJECTION)); // To prevent NPE during conversion to generic entity projectionList.add(rowCount()); SearchCriteriaBuilder scb = getDailyProgressDD().findWithAlias(DAILY_PROGRESS_ALIAS); scb.setProjection(projectionList); scb.createAlias(DAILY_PROGRESS_ALIAS + DOT + DailyProgressFields.PROGRESS_FOR_DAY, PROGRESS_FOR_DAY_ALIAS, JoinType.INNER); scb.add(in(PROGRESS_FOR_DAY_ALIAS + DOT + ID, pfdIds)); scb.addOrder(desc(QUANTITY_SUM_PROJECTION)); Entity projection = scb.setMaxResults(1).uniqueResult(); BigDecimal quantitiesSum = projection.getDecimalField(QUANTITY_SUM_PROJECTION); return ObjectUtils.defaultIfNull(quantitiesSum, BigDecimal.ZERO); }
.createAlias(BasicConstants.MODEL_PRODUCT + L_DOT + L_PRODUCT_ATTACHMENTS, L_PRODUCT_ATTACHMENTS, JoinType.INNER) .setProjection(SearchProjections.list() .add(alias(field(L_PRODUCT_ATTACHMENTS + L_DOT + ProductAttachmentFields.ATTACHMENT), ProductAttachmentFields.ATTACHMENT))); if (ids.isEmpty()) {
private Entity getWorkstationTypesSumProjection(final Long productionLineId, final String workstationTypeNumber) { SearchCriteriaBuilder scb = getWorkstationTypeComponentDD().find(); scb.createCriteria(WorkstationTypeComponentFields.PRODUCTIONLINE, "pl").add(idEq(productionLineId)); scb.createCriteria(WorkstationTypeComponentFields.WORKSTATIONTYPE, "wt").add( eq(WorkstationTypeFields.NUMBER, workstationTypeNumber)); scb.setProjection(list().add(alias(sum(WorkstationTypeComponentFields.QUANTITY), "sum")).add(rowCount())); scb.addOrder(asc("sum")); return scb.setMaxResults(1).uniqueResult(); }
public boolean isWorkstationTypeComponentsQuantityGreaterThanZero(final Entity productionLine, final Entity workstationType) { Long sum = dataDefinitionService .get(ProductionLinesConstants.PLUGIN_IDENTIFIER, ProductionLinesConstants.MODEL_WORKSTATION_TYPE_COMPONENT).find() .add(SearchRestrictions.belongsTo(WorkstationTypeComponentFields.PRODUCTIONLINE, productionLine)) .add(SearchRestrictions.belongsTo(WorkstationTypeComponentFields.WORKSTATIONTYPE, workstationType)) .setProjection(list() .add(SearchProjections.alias(SearchProjections.sum(WorkstationTypeComponentFields.QUANTITY), SUM_ALIAS)) .add(rowCount())) .addOrder(SearchOrders.desc(SUM_ALIAS)).setMaxResults(1).uniqueResult().getLongField(SUM_ALIAS); if (sum == null) { return false; } else { return sum > 0; } }
public Long countTotalLaborTime(final Long productionRecordId) { SearchCriteriaBuilder scb = getStaffWorkTimeDD().find(); SearchProjection totalLaborProjection = SearchProjections.alias(SearchProjections.sum(StaffWorkTimeFields.LABOR_TIME), TOTAL_LABOR_PROJECTION_ALIAS); SearchProjection rowCntProjection = SearchProjections.rowCount(); scb.setProjection(SearchProjections.list().add(rowCntProjection).add(totalLaborProjection)); scb.add(SearchRestrictions.belongsTo(StaffWorkTimeFields.PRODUCTION_RECORD, ProductionCountingConstants.PLUGIN_IDENTIFIER, ProductionCountingConstants.MODEL_PRODUCTION_TRACKING, productionRecordId)); // Fix for missing id column. Touch on your own risk. scb.addOrder(SearchOrders.asc(TOTAL_LABOR_PROJECTION_ALIAS)); Entity res = scb.setMaxResults(1).uniqueResult(); if (res == null) { return 0L; } Long totalLabor = (Long) res.getField(TOTAL_LABOR_PROJECTION_ALIAS); if (totalLabor == null) { return 0L; } return totalLabor; }
@Override public BigDecimal getProducedQuantityFromBasicProductionCountings(final Entity order) { Entity entity = dataDefinitionService .get(BasicProductionCountingConstants.PLUGIN_IDENTIFIER, BasicProductionCountingConstants.MODEL_BASIC_PRODUCTION_COUNTING) .find().add(SearchRestrictions.belongsTo(BasicProductionCountingFields.ORDER, order)) .add(SearchRestrictions.belongsTo(BasicProductionCountingFields.PRODUCT, order.getBelongsToField(OrderFields.PRODUCT))) .setProjection(list().add(alias(sum(BasicProductionCountingFields.PRODUCED_QUANTITY), QUANTITIES_SUM_ALIAS)) .add(rowCount())) .addOrder(SearchOrders.asc(QUANTITIES_SUM_ALIAS)).setMaxResults(1).uniqueResult(); BigDecimal doneQuantity = BigDecimalUtils.convertNullToZero(entity.getDecimalField(QUANTITIES_SUM_ALIAS)); return numberService.setScaleWithDefaultMathContext(doneQuantity); }
private List<Entity> findCorruptedTechnologyNumbers(final Long productID) { MasterOutputProductCriteria criteria = MasterOutputProductCriteria .empty() .withProdCriteria(idEq(productID)) .withTechCriteria( in(TechnologyFields.STATE, Lists.newArrayList(TechnologyStateStringValues.ACCEPTED, TechnologyStateStringValues.CHECKED))); SearchCriteriaBuilder scb = mainTocOutputProductCriteriaBuilder.create(criteria); scb.add(neField(Aliases.OPERATION_OUTPUT_PRODUCT + "." + ProductFields.UNIT, Aliases.TOC + "." + TechnologyOperationComponentFieldsTNFO.PRODUCTION_IN_ONE_CYCLE_UNIT)); scb.addOrder(desc("id")); SearchProjection techNumProjection = alias(field(Aliases.TECHNOLOGY + "." + TechnologyFields.NUMBER), "techNumber"); SearchProjection projection = SearchProjections.list().add(techNumProjection).add(alias(id(), "id")); scb.setProjection(SearchProjections.distinct(projection)); return scb.list().getEntities(); } }
@Override public Map<Long, BigDecimal> getComponentsStock(Entity technology, boolean externalNumberShouldBeNull) { Preconditions.checkArgument(technology != null, "Technology is required."); DataDefinition operationProductInComponentDD = dataDefinitionService.get(TechnologiesConstants.PLUGIN_IDENTIFIER, TechnologiesConstants.MODEL_OPERATION_PRODUCT_IN_COMPONENT); SearchCriteriaBuilder scb = operationProductInComponentDD.find() .createAlias(OperationProductInComponentFields.OPERATION_COMPONENT, "c", JoinType.INNER) .createAlias(OperationProductInComponentFieldsPFTD.COMPONENTS_LOCATION, "w", JoinType.LEFT) .createAlias("w." + LocationFieldsMFR.RESOURCES, "r", JoinType.LEFT) .add(eqField("r." + ResourceFields.PRODUCT, OperationProductInComponentFields.PRODUCT)) .add(belongsTo("c." + TechnologyOperationComponentFields.TECHNOLOGY, technology)); if (externalNumberShouldBeNull) { scb.add(isNull("w." + LocationFields.EXTERNAL_NUMBER)); } scb.setProjection( list().add( alias(groupField(OperationProductInComponentFields.PRODUCT), OperationProductInComponentFields.PRODUCT)) .add(alias(sum("r." + ResourceFields.QUANTITY), ResourceFields.QUANTITY))).addOrder( SearchOrders.asc(ResourceFields.QUANTITY)); List<Entity> componentsStock = scb.list().getEntities(); Map<Long, BigDecimal> stockMap = Maps.newHashMap(); for (Entity componentStock : componentsStock) { stockMap.put(componentStock.getBelongsToField(OperationProductInComponentFields.PRODUCT).getId(), componentStock.getDecimalField(ResourceFields.QUANTITY)); } return stockMap; }
private boolean sumIsNotExceeded(Entity orderedProductReservation) { Entity orderedProduct = orderedProductReservation.getBelongsToField(OrderedProductReservationFields.ORDERED_PRODUCT); BigDecimal productOrderedQuantity = orderedProduct.getDecimalField(OrderedProductReservationFields.ORDERED_QUANTITY); BigDecimal reservationOrderedQuantity = orderedProductReservation.getDecimalField(OrderedProductReservationFields.ORDERED_QUANTITY); SearchCriteriaBuilder searchCriteriaBuilder = orderedProductReservation.getDataDefinition().find(); SearchProjection sumOfQuantityProjection = SearchProjections.alias(SearchProjections.sum(OrderedProductReservationFields.ORDERED_QUANTITY), "sumOfQuantity"); searchCriteriaBuilder.setProjection(SearchProjections.list().add(sumOfQuantityProjection).add(SearchProjections.rowCount())); SearchCriterion criterion; SearchCriterion criterionOrderedProduct = SearchRestrictions.belongsTo(OrderedProductReservationFields.ORDERED_PRODUCT, orderedProduct); if (orderedProductReservation.getId() == null) { criterion = criterionOrderedProduct; } else { SearchCriterion criterionId = SearchRestrictions.idNe(orderedProductReservation.getId()); criterion = SearchRestrictions.and(criterionOrderedProduct, criterionId); } searchCriteriaBuilder.add(criterion); searchCriteriaBuilder.addOrder(SearchOrders.asc("sumOfQuantity")); SearchResult resList = searchCriteriaBuilder.setMaxResults(1).list(); BigDecimal sumOfQuantity = resList.getTotalNumberOfEntities() == 0 ? BigDecimal.ZERO : resList.getEntities().get(0).getDecimalField("sumOfQuantity"); sumOfQuantity = sumOfQuantity == null ? BigDecimal.ZERO : sumOfQuantity; boolean sumIsNotExceeded = productOrderedQuantity.compareTo(reservationOrderedQuantity.add(sumOfQuantity)) >= 0; if (!sumIsNotExceeded) { FieldDefinition orderedQuantityField = orderedProductReservation.getDataDefinition().getField(OrderedProductReservationFields.ORDERED_QUANTITY); orderedProductReservation.addError(orderedQuantityField, "deliveries.deliveredProductReservation.error.sumIsExceeded"); } return sumIsNotExceeded; }
private List<Entity> getDatesProjection(final TimeGapsContext context) { DataDefinition dataDef = dataDefinitionService.get(getPluginIdentifier(), getModelName()); SearchCriteriaBuilder scb = dataDef.find(); SearchCriterion restriction = getSearchCriterion(); if (restriction != null) { scb.add(restriction); } scb.add(SearchRestrictions.isNotNull(getDateFromFieldName())); scb.add(SearchRestrictions.isNotNull(getDateToFieldName())); scb.add(SearchRestrictions.isNotNull(getProductionLineFieldName())); scb.createCriteria(getProductionLineFieldName(), getProductionLineFieldName()) .add(in("id", context.getProductionLines())); Interval searchInterval = context.getInterval(); SearchCriterion startDateIsInDomain = between(getDateFromFieldName(), searchInterval.getStart().toDate(), searchInterval .getEnd().toDate()); SearchCriterion finishDateIsInDomain = between(getDateToFieldName(), searchInterval.getStart().toDate(), searchInterval .getEnd().toDate()); SearchCriterion datesCoverInterval = and(le(getDateFromFieldName(), searchInterval.getStart().toDate()), ge(getDateToFieldName(), searchInterval.getEnd().toDate())); scb.add(or(startDateIsInDomain, finishDateIsInDomain, datesCoverInterval)); SearchProjection lineIdProjection = SearchProjections.alias( SearchProjections.field(getProductionLineFieldName() + ".id"), PRODUCTION_LINE_ID_ALIAS); SearchProjection dateFromProjection = SearchProjections.alias(SearchProjections.field(getDateFromFieldName()), DATE_FROM_ALIAS); SearchProjection dateToProjection = SearchProjections.alias(SearchProjections.field(getDateToFieldName()), DATE_TO_ALIAS); scb.setProjection(SearchProjections.list().add(dateFromProjection).add(dateToProjection).add(lineIdProjection)); scb.addOrder(SearchOrders.asc(DATE_FROM_ALIAS)); return scb.list().getEntities(); }