| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | |
| | | productStructureDto.setUnitQuantity(BigDecimal.ONE); |
| | | productStructureDtos.add(productStructureDto); |
| | | } |
| | | Set<Long> parentIds = productStructureDtos.stream() |
| | | .map(ProductStructureDto::getParentId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, ProductStructureDto> parentMap = |
| | | productStructureMapper.selectByIds(parentIds) |
| | | .stream() |
| | | .collect(Collectors.toMap( |
| | | ProductStructureDto::getId, |
| | | Function.identity() |
| | | )); |
| | | for (ProductStructureDto productStructureDto : productStructureDtos) { |
| | | ProductionProductInput productionProductInput = new ProductionProductInput(); |
| | | productionProductInput.setProductModelId(productStructureDto.getProductModelId()); |
| | | productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); |
| | | // productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); |
| | | BigDecimal childQty = productStructureDto.getUnitQuantity(); |
| | | BigDecimal parentQty = BigDecimal.ONE; |
| | | if (productStructureDto.getParentId() != null) { |
| | | ProductStructureDto parent = parentMap.get(productStructureDto.getParentId()); |
| | | if (parent != null) { |
| | | parentQty = parent.getUnitQuantity(); |
| | | } |
| | | } |
| | | |
| | | // 核心计算 |
| | | BigDecimal needQty = childQty.divide(parentQty, 6, RoundingMode.HALF_UP).multiply(dto.getQuantity()); |
| | | |
| | | |
| | | productionProductInput.setQuantity(needQty); |
| | | |
| | | productionProductInput.setProductMainId(productionProductMain.getId()); |
| | | productionProductInputMapper.insert(productionProductInput); |
| | | stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(), null); |