| | |
| | | productionProductMain.setStatus(0); |
| | | productionProductMainMapper.insert(productionProductMain); |
| | | /*新增报工投入表*/ |
| | | List<ProductStructureDto> allProcess = productStructureMapper.listBybomId(productProcessRoute.getBomId()); |
| | | List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId()); |
| | | |
| | | List<Long> lastProcessIds = new ArrayList<>(); |
| | | List<Long> firstProcessIds = new ArrayList<>(); |
| | | |
| | | if (!allProcess.isEmpty()) { |
| | | String lastProcessName = allProcess.get(allProcess.size() - 1).getProcessName(); |
| | | String firstProcessName = allProcess.get(0).getProcessName(); |
| | | |
| | | for (int i = allProcess.size() - 1; i >= 0; i--) { |
| | | ProductStructureDto d = allProcess.get(i); |
| | | if (lastProcessName.equals(d.getProcessName())) { |
| | | lastProcessIds.add(d.getId()); |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | for (ProductStructureDto d : allProcess) { |
| | | if (firstProcessName.equals(d.getProcessName())) { |
| | | firstProcessIds.add(d.getId()); |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (productStructureDtos.size() == 0) { |
| | | //如果该工序没有产品结构的投入品,那这个投入品和产出品是同一个 |
| | | ProductStructureDto productStructureDto = new ProductStructureDto(); |
| | |
| | | for (ProductStructureDto productStructureDto : productStructureDtos) { |
| | | ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); |
| | | Product product = productMapper.selectById(productModel1.getProductId()); |
| | | |
| | | // 判断是否为最后一道工序 或者为第一道工序 |
| | | BigDecimal needQuantity = dto.getQuantity().divide(productStructureDto.getUnitQuantity(), 2, BigDecimal.ROUND_HALF_UP); |
| | | if (lastProcessIds.contains(productStructureDto.getId()) || firstProcessIds.contains(productStructureDto.getId())) { |
| | | needQuantity = dto.getQuantity().multiply(productStructureDto.getUnitQuantity()); |
| | | } |
| | | |
| | | |
| | | // 查询产品库存 |
| | | BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity"); |
| | | if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { |
| | | throw new RuntimeException(product.getProductName()+"产品的"+productModel1.getModel() + "的规格库存为0"); |
| | | } |
| | | if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) { |
| | | if (stockQuantity.compareTo(needQuantity) < 0) { |
| | | throw new RuntimeException(product.getProductName()+"产品的"+productModel1.getModel() + "的规格库存不足"); |
| | | } |
| | | // 查询采购产品 |
| | |
| | | |
| | | ProductionProductInput productionProductInput = new ProductionProductInput(); |
| | | productionProductInput.setProductModelId(productStructureDto.getProductModelId()); |
| | | productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); |
| | | productionProductInput.setQuantity(needQuantity); |
| | | productionProductInput.setProductMainId(productionProductMain.getId()); |
| | | productionProductInputMapper.insert(productionProductInput); |
| | | //对应的库存出库 |
| | |
| | | ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now)); |
| | | Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS" + dateFormat.format(now))[1]); |
| | | // 查询采购入库记录 |
| | | List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(new LambdaQueryWrapper<ProcurementRecordStorage>() |
| | | .in(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProducts.stream() |
| | | .map(SalesLedgerProduct::getId) |
| | | .collect(Collectors.toList())) |
| | | .orderByDesc(ProcurementRecordStorage::getInboundNum)); |
| | | LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | if (!org.springframework.util.CollectionUtils.isEmpty(salesLedgerProducts)) { |
| | | procurementRecordStorageLambdaQueryWrapper.in(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProducts.stream() |
| | | .map(SalesLedgerProduct::getId) |
| | | .collect(Collectors.toList())); |
| | | } |
| | | |
| | | procurementRecordStorageLambdaQueryWrapper.orderByDesc(ProcurementRecordStorage::getInboundNum); |
| | | List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(procurementRecordStorageLambdaQueryWrapper); |
| | | if(CollectionUtils.isNotEmpty(procurementRecordStorages)) { |
| | | // 生产扣除采购库存原料 |
| | | BigDecimal quantity = productionProductInput.getQuantity(); |
| | |
| | | List<Details> details = new ArrayList<>(); |
| | | Details details1 = new Details(); |
| | | details1.setInboundQuantity(dto.getQuantity()); |
| | | // details1.setId(Math.toIntExact(salesLedgerProduct.getId())); |
| | | details1.setId(Math.toIntExact(productModel.getId())); |
| | | // details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); |
| | | // details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); |
| | | // details1.setProductModelId(salesLedgerProduct.getProductModelId()); |
| | | details1.setProductModelId(productModel.getId()); |
| | | details.add(details1); |
| | | procurementRecordOutAdd.setDetails(details); |
| | | // procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); |