package com.ruoyi.quality.utils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.mapper.QualityInspectParamMapper; import com.ruoyi.quality.mapper.QualityTestStandardMapper; import com.ruoyi.quality.mapper.QualityTestStandardParamMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityTestStandard; import com.ruoyi.quality.pojo.QualityTestStandardParam; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.List; /** * 质检单创建工具类 */ @Component @RequiredArgsConstructor public class QualityInspectHelper { private final QualityInspectMapper qualityInspectMapper; private final QualityTestStandardMapper qualityTestStandardMapper; private final QualityTestStandardParamMapper qualityTestStandardParamMapper; private final QualityInspectParamMapper qualityInspectParamMapper; /** * 创建质检单 * @param purchaseLedger 采购台账 * @param saleProduct 采购产品 */ public void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct) { QualityInspect qualityInspect = new QualityInspect(); qualityInspect.setInspectType(0); qualityInspect.setSupplier(purchaseLedger.getSupplierName()); qualityInspect.setPurchaseLedgerId(purchaseLedger.getId()); qualityInspect.setProductId(saleProduct.getProductId()); qualityInspect.setProductName(saleProduct.getProductCategory()); qualityInspect.setModel(saleProduct.getSpecificationModel()); qualityInspect.setProductModelId(saleProduct.getProductModelId()); qualityInspect.setUnit(saleProduct.getUnit()); qualityInspect.setQuantity(saleProduct.getQuantity()); qualityInspectMapper.insert(qualityInspect); List qualityTestStandardList = qualityTestStandardMapper .getQualityTestStandardByProductId(saleProduct.getProductId(), 0, null); if (qualityTestStandardList.isEmpty()) { return; } QualityTestStandard firstStandard = qualityTestStandardList.get(0); qualityInspect.setTestStandardId(firstStandard.getId()); // 根据 inspectRule 设置默认抽检比例和抽检数量 applyInspectRuleDefaults(qualityInspect, firstStandard, saleProduct.getQuantity()); qualityInspectMapper.updateById(qualityInspect); List standardParams = qualityTestStandardParamMapper.selectList( Wrappers.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); } } /** * 根据 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); } } } }