昨天 b22ebe8fad1691b35adcf321fe2e136795b3f81d
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -64,6 +64,8 @@
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import com.ruoyi.stock.pojo.StockInRecord;
import com.ruoyi.stock.service.StockInRecordService;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -119,6 +121,7 @@
    private final StockUtils stockUtils;
    private final ApprovalTemplateMapper approvalTemplateMapper;
    private final SparePartsMapper sparePartsMapper;
    private final DeviceLedgerMapper deviceLedgerMapper;
    @Override
    public List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger) {
@@ -421,10 +424,30 @@
        qualityInspect.setProductModelId(saleProduct.getProductModelId());
        qualityInspect.setUnit(saleProduct.getUnit());
        qualityInspect.setQuantity(saleProduct.getQuantity());
        qualityInspect.setWarehouse(saleProduct.getStorageLocation());
        qualityInspectMapper.insert(qualityInspect);
        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
        if (qualityTestStandard.size()>0){
            qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
            QualityTestStandard std = qualityTestStandard.get(0);
            qualityInspect.setTestStandardId(std.getId());
            // 根据 inspectRule 设置抽检比例和抽检数量默认值
            if (std.getInspectRule() == null || std.getInspectRule() == 0) {
                // 全检
                qualityInspect.setInspectRule(0);
                qualityInspect.setSampleRatio(java.math.BigDecimal.valueOf(100));
                qualityInspect.setSampleQuantity(saleProduct.getQuantity() != null ? saleProduct.getQuantity() : java.math.BigDecimal.ZERO);
            } else {
                // 抽检
                qualityInspect.setInspectRule(1);
                java.math.BigDecimal ratio = std.getSampleRatio() != null ? std.getSampleRatio() : java.math.BigDecimal.ZERO;
                qualityInspect.setSampleRatio(ratio);
                if (saleProduct.getQuantity() != null && ratio.compareTo(java.math.BigDecimal.ZERO) > 0) {
                    qualityInspect.setSampleQuantity(saleProduct.getQuantity().multiply(ratio)
                            .divide(java.math.BigDecimal.valueOf(100), 0, java.math.RoundingMode.CEILING));
                } else {
                    qualityInspect.setSampleQuantity(java.math.BigDecimal.ZERO);
                }
            }
            qualityInspectMapper.updateById(qualityInspect);
            qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
                    .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))
@@ -476,13 +499,18 @@
        if (CollectionUtils.isEmpty(stockRecords)
                && qualityInspect.getQualifiedQuantity() != null
                && qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
            // 优先使用质检单中的库位,如果没有则使用产品明细中的库位
            String warehouse = StringUtils.hasText(qualityInspect.getWarehouse())
                    ? qualityInspect.getWarehouse()
                    : product.getStorageLocation();
            stockUtils.addStockWithBatchNo(
                    product.getProductModelId(),
                    qualityInspect.getQualifiedQuantity(),
                    StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode(),
                    qualityInspect.getId(),
                    null,
                    purchaseInspectTime == null ? null : purchaseInspectTime.plusDays(1)
                    purchaseInspectTime == null ? null : purchaseInspectTime.plusDays(1),
                    warehouse
            );
            stockRecords = findQualityStockRecords(qualityInspect.getId(), product.getProductModelId());
        }
@@ -529,7 +557,8 @@
                    StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(),
                    purchaseLedger.getId(),
                    purchaseLedger.getPurchaseContractNumber() + "-" + product.getId(),
                    stockCreateTime
                    stockCreateTime,
                    product.getStorageLocation()
            );
            stockRecords = findDirectStockRecords(purchaseLedger.getId(), purchaseLedger.getPurchaseContractNumber(), product.getProductModelId(), product.getId());
        }
@@ -716,6 +745,14 @@
                    product.setProductCategory(spareParts.getName());
                }
            }
            // 如果有设备ID但没有库位,从设备表自动填充库位
            if (product.getDeviceId() != null && StringUtils.isEmpty(product.getStorageLocation())) {
                DeviceLedger device = deviceLedgerMapper.selectById(product.getDeviceId());
                if (device != null && StringUtils.isNotEmpty(device.getStorageLocation())) {
                    product.setStorageLocation(device.getStorageLocation());
                }
            }
        }
        // 分组处理