21 小时以前 61f1de60e6f58dd8e19f01c56f2e56e40885d65b
src/main/java/com/ruoyi/quality/utils/QualityInspectHelper.java
@@ -12,9 +12,12 @@
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityTestStandardParam;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.pojo.ShippingProductDetail;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -56,6 +59,8 @@
        QualityTestStandard firstStandard = qualityTestStandardList.get(0);
        qualityInspect.setTestStandardId(firstStandard.getId());
        // 根据 inspectRule 设置默认抽检比例和抽检数量
        applyInspectRuleDefaults(qualityInspect, firstStandard, saleProduct.getQuantity());
        qualityInspectMapper.updateById(qualityInspect);
        List<QualityTestStandardParam> standardParams = qualityTestStandardParamMapper.selectList(
@@ -70,4 +75,98 @@
            qualityInspectParamMapper.insert(param);
        }
    }
    /**
     * 根据 inspectRule 设置抽检比例和抽检数量默认值
     * - inspectRule=0 (全检): sampleRatio=100, sampleQuantity=全部数量
     * - inspectRule=1 (抽检): sampleRatio 取标准配置值, sampleQuantity=数量×比例/100
     */
    private void applyInspectRuleDefaults(QualityInspect inspect, QualityTestStandard standard, BigDecimal quantity) {
        Integer rule = standard.getInspectRule();
        inspect.setInspectRule(rule);
        if (rule == null || rule == 0) {
            // 全检
            inspect.setSampleRatio(BigDecimal.valueOf(100));
            inspect.setSampleQuantity(quantity != null ? quantity : BigDecimal.ZERO);
        } else {
            // 抽检
            BigDecimal ratio = standard.getSampleRatio();
            if (ratio == null) {
                ratio = BigDecimal.ZERO;
            }
            inspect.setSampleRatio(ratio);
            if (quantity != null && ratio.compareTo(BigDecimal.ZERO) > 0) {
                BigDecimal sampleQty = quantity.multiply(ratio)
                        .divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_HALF_UP)
                        .setScale(0, BigDecimal.ROUND_HALF_UP);
                inspect.setSampleQuantity(sampleQty);
            } else {
                inspect.setSampleQuantity(BigDecimal.ZERO);
            }
        }
    }
    /**
     * 创建出厂检验单(发货审批通过后自动生成)
     * @param shippingInfo 发货信息
     * @param detail 发货产品明细
     * @param customerName 客户名称
     * @param salesLedgerId 销售台账ID
     */
    public void addFactoryInspect(ShippingInfo shippingInfo, ShippingProductDetail detail,
                                   String customerName, Long salesLedgerId) {
        QualityInspect qualityInspect = new QualityInspect();
        qualityInspect.setInspectType(2); // 出厂检验
        qualityInspect.setCustomer(customerName);
        qualityInspect.setSalesLedgerId(salesLedgerId);
        qualityInspect.setShippingInfoId(shippingInfo.getId()); // 关联发货信息
        qualityInspect.setProductModelId(detail.getProductModelId());
        qualityInspect.setQuantity(detail.getQuantity());
        qualityInspect.setInspectState(0); // 未提交
        // 通过 productModelId 查询产品信息
        if (detail.getProductModelId() != null) {
            com.ruoyi.basic.pojo.ProductModel productModel = qualityInspectMapper.selectProductModelById(detail.getProductModelId());
            if (productModel != null) {
                qualityInspect.setProductId(productModel.getProductId());
                qualityInspect.setModel(productModel.getModel());
                qualityInspect.setUnit(productModel.getUnit());
                // 查询产品名称
                if (productModel.getProductId() != null) {
                    com.ruoyi.basic.pojo.Product product = qualityInspectMapper.selectProductById(productModel.getProductId());
                    if (product != null) {
                        qualityInspect.setProductName(product.getProductName());
                    }
                }
            }
        }
        qualityInspectMapper.insert(qualityInspect);
        // 查询出厂检验标准,初始化检验参数
        if (qualityInspect.getProductId() != null) {
            List<QualityTestStandard> qualityTestStandardList = qualityTestStandardMapper
                    .getQualityTestStandardByProductId(qualityInspect.getProductId(), 2, null);
            if (!qualityTestStandardList.isEmpty()) {
                QualityTestStandard firstStandard = qualityTestStandardList.get(0);
                qualityInspect.setTestStandardId(firstStandard.getId());
                applyInspectRuleDefaults(qualityInspect, firstStandard, detail.getQuantity());
                qualityInspectMapper.updateById(qualityInspect);
                List<QualityTestStandardParam> standardParams = qualityTestStandardParamMapper.selectList(
                        Wrappers.<QualityTestStandardParam>lambdaQuery()
                                .eq(QualityTestStandardParam::getTestStandardId, firstStandard.getId()));
                for (QualityTestStandardParam standardParam : standardParams) {
                    QualityInspectParam param = new QualityInspectParam();
                    BeanUtils.copyProperties(standardParam, param);
                    param.setId(null);
                    param.setInspectId(qualityInspect.getId());
                    qualityInspectParamMapper.insert(param);
                }
            }
        }
    }
}