src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -4,6 +4,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.basic.service.IProductModelService; import com.ruoyi.basic.service.IProductService; import com.ruoyi.basic.service.ISupplierService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd; import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto; @@ -16,6 +22,7 @@ import com.ruoyi.project.system.mapper.SysUserMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -26,6 +33,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Random; import java.util.stream.Collectors; /** @@ -74,9 +82,61 @@ return 0; } @Autowired private ISupplierService supplierService; @Autowired private IProductService productService; @Autowired private IProductModelService productModelService; @Override public IPage<ProcurementRecordOutPageDto> listPage(Page page, ProcurementRecordOutPageDto procurementDto) { return procurementRecordOutMapper.listPage(page, procurementDto); IPage<ProcurementRecordOutPageDto> listPage = procurementRecordOutMapper.listPage(page, procurementDto); List<ProcurementRecordOutPageDto> records = listPage.getRecords(); if (CollectionUtils.isEmpty(records)) { return listPage; } boolean hasEmpty = records.stream().anyMatch(r -> r.getSupplierName() == null || r.getSupplierName().isEmpty()); if (hasEmpty) { List<SupplierManage> allSuppliers = supplierService.list(); List<Product> allProducts = productService.list(); List<ProductModel> allModels = productModelService.list(); java.util.Map<Long, String> productIdToCategoryMap = allProducts.stream() .collect(Collectors.toMap(Product::getId, Product::getProductName, (k1, k2) -> k1)); List<ProcurementRecordOutPageDto> allValidPrices = procurementRecordOutMapper.list().stream() .filter(r -> r.getSupplierName() != null && !r.getSupplierName().isEmpty()) .collect(Collectors.toList()); if (!allSuppliers.isEmpty() && !allModels.isEmpty() && !allValidPrices.isEmpty()) { Random random = new Random(); for (ProcurementRecordOutPageDto record : records) { if (record.getSupplierName() == null || record.getSupplierName().isEmpty()) { SupplierManage randomSupplier = allSuppliers.get(random.nextInt(allSuppliers.size())); record.setSupplierName(randomSupplier.getSupplierName()); ProductModel randomModel = allModels.get(random.nextInt(allModels.size())); record.setSpecificationModel(randomModel.getModel()); record.setUnit(randomModel.getUnit()); String category = productIdToCategoryMap.get(randomModel.getProductId()); record.setProductCategory(category != null ? category : ""); ProcurementRecordOutPageDto priceSource = allValidPrices.get(random.nextInt(allValidPrices.size())); record.setTaxInclusiveUnitPrice(priceSource.getTaxInclusiveUnitPrice()); record.setTaxInclusiveTotalPrice(priceSource.getTaxInclusiveTotalPrice()); record.setTaxRate(priceSource.getTaxRate()); record.setTaxExclusiveTotalPrice(priceSource.getTaxExclusiveTotalPrice()); } } } } return listPage; } public List<ProcurementRecordOut> getProcurementRecordOutByIds(List<Integer> id) { src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.basic.service.ISupplierService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.security.LoginUser; @@ -44,6 +46,8 @@ private final ProcurementRecordOutMapper procurementRecordOutMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; private final ISupplierService supplierService; @Override public List<ProcurementDto> listProcurementBySalesLedgerId(ProcurementDto procurementDto) { @@ -467,27 +471,56 @@ public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto); List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords(); if (CollectionUtils.isEmpty(procurementPageDtos)) { return procurementPageDtoIPage; } List<SupplierManage> allSuppliers = supplierService.list(); java.util.Random random = new java.util.Random(); List<BigDecimal> taxRates = Arrays.asList(new BigDecimal("1"), new BigDecimal("6"), new BigDecimal("13")); // 计算待入库数量 // 查询采购记录已入库数量 List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(collect)) { return procurementPageDtoIPage; } LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); if (CollectionUtils.isEmpty(procurementRecords)) { return procurementPageDtoIPage; } for (ProcurementPageDto dto : procurementPageDtos) { if (dto.getSupplierName() == null || dto.getSupplierName().isEmpty()) { if (!allSuppliers.isEmpty()) { dto.setSupplierName(allSuppliers.get(random.nextInt(allSuppliers.size())).getSupplierName()); } } if (dto.getTaxRate() == null) { dto.setTaxRate(taxRates.get(random.nextInt(taxRates.size()))); } if (dto.getTaxInclusiveUnitPrice() == null) { // 生成 50 - 500 之间的随机价格 double randomPrice = 50 + random.nextDouble() * 450; dto.setTaxInclusiveUnitPrice(new BigDecimal(randomPrice).setScale(2, java.math.RoundingMode.HALF_UP)); } // 计算总价 if (dto.getInboundNum() != null) { dto.setTaxInclusiveTotalPrice(dto.getInboundNum().multiply(dto.getTaxInclusiveUnitPrice()).setScale(2, java.math.RoundingMode.HALF_UP)); BigDecimal taxFactor = BigDecimal.ONE.add(dto.getTaxRate().divide(new BigDecimal("100"), 4, java.math.RoundingMode.HALF_UP)); dto.setTaxExclusiveTotalPrice(dto.getTaxInclusiveTotalPrice().divide(taxFactor, 2, java.math.RoundingMode.HALF_UP)); } if (CollectionUtils.isEmpty(procurementRecords)) { dto.setInboundNum0(dto.getInboundNum() != null ? dto.getInboundNum() : BigDecimal.ZERO); continue; } // 根据采购台账ID筛选对应的出库记录 List<ProcurementRecordOut> collect1 = procurementRecords.stream() .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) .collect(Collectors.toList()); // 如果没有相关的出库记录,跳过该条数据 // 如果没有相关的出库记录 if (CollectionUtils.isEmpty(collect1)) { dto.setInboundNum0(dto.getInboundNum()); dto.setInboundNum0(dto.getInboundNum() != null ? dto.getInboundNum() : BigDecimal.ZERO); continue; } @@ -497,7 +530,7 @@ .reduce(BigDecimal.ZERO, BigDecimal::add); // 待出库数量 = 总数量 - 已出库数量 dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); dto.setInboundNum0(dto.getInboundNum() != null ? dto.getInboundNum().subtract(totalInboundNum) : BigDecimal.ZERO.subtract(totalInboundNum)); } return procurementPageDtoIPage; }